最新历史版本 :页面动态移动行 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 问题描述

有些用户想要在预览报表的时候,根据自己的需要去调整报表的顺序,如下图所示,用户可以通过点击页面上的上移和下移来移动当前行。

移动行.gif

1.2 实现思路

定义一个数组存储排序的顺序,点击上移或下移的时候,交换该数组相应位置的值,最后在扩展排序里按照这个数组来排序。

2. 示例编辑

2.1 新建数据集

新建数据集ds1 ,SQL语句:SELECT * FROM 销量,如下图所示:

2.2 报表设计

报表设计如下,A2 单元格输入公式:&B2,左父格设置为 B2。E2 单元格数据设置为汇总-求和,最后隐藏 A 列。如下图所示:

2.3 添加动态参数

1)选中 F2 单元格,添加动态参数,参数名为 a,参数值为公式类型,如下图所示:

let(arr,if(len($a) = 0,range(count(B2[!0;!0])),$a),let(idx,inarray(A2,arr),if(idx = 1,arr,maparray(arr,if(index = idx,indexofarray(arr,idx - 1),if(index = idx - 1,indexofarray(arr,idx),item))))))

2)选中 G2 单元格,添加动态参数,参数名为 a,参数值为公式类型,如下图所示:let(arr,if(len($a) = 0,range(count(B2[!0;!0])),$a),let(idx,inarray(A2,arr),if(idx = len(arr),arr,maparray(arr,if(index = idx,indexofarray(arr,idx + 1),if(index = idx + 1,indexofarray(arr,idx),item))))))

公式解析:以上移为例

公式解析
let(arr,if(len($a) = 0,range(count(B2[!0;!0])),$a),……)判断数组$a是否为空,为空的话以B2单元格的总行数扩展一个新数组,否则为$a本身。并将最后结果赋值给变量arr
let(idx,inarray(A2,arr),……)计算A2单元格的值在数组arr中的位置,并将结果赋值给变量idx
if(idx = 1,arr,maparray(arr,if(index = idx,indexofarray(arr,idx - 1),if(index = idx - 1,indexofarray(arr,idx),item))))如果idx等于1,则返回arr本身,也就是说点击第一行的时候,顺序不会改变。如果idx不等于1,那么将arr数组里面第idx个值换成idx-1位置的值,同时将idx-1位置的值换成idx位置的值。

2.4 扩展后排序

选中 B2 单元格,设置扩展后排序。排序依据为公式,公式为:INARRAY(&B2,$a),排序规则为升序。

2.5 预览效果

2.5.1 PC 端

保存模板,选择分页预览,预览效果如 1.1 节所示。

2.5.2 移动端

App 与 HTML5 端效果相同,如下图所示:

移动行h5.gif

3. 模板下载编辑

点击下载模板:页面动态移动行.cpt