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

目录:

1. 概述编辑

1.1 问题描述

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

移动行.gif

1.2 实现思路

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

2. 示例编辑

2.1 创建数据集

创建数据集ds1 ,SQL语句:SELECT * FROM 销量

2.2 报表设计

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

2.3 添加动态参数

选中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))))))

选中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 预览效果

PC端:

移动行.gif

移动端:

移动行h5.gif

3. 模板下载编辑

点击下载模板:

页面动态移动行.cpt