1. 概述
1.1 问题描述
有些用户想要在预览报表的时候,根据自己的需要去调整报表的顺序,如下图所示,用户可以通过点击页面上的上移和下移来移动当前行。
1.2 实现思路
定义一个数组存储排序的顺序,点击上移或下移的时候,交换该数组相应位置的值,最后在扩展排序里按照这个数组来排序。
2. 示例
2.1 新建数据集
新建数据集ds1 ,SQL语句:SELECT * FROM 销量,如下图所示:
2.2 报表设计
报表设计如下,A2 单元格输入公式:&B2,左父格设置为 B2。E2 单元格数据设置为「汇总-求和」,最后隐藏 A 列。如下图所示:
2.3 添加动态参数
注:FVS 可视化看板添加「当前页面对象」超级链接实现,使用相同的参数和公式即可。
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 端效果相同,如下图所示: