历史版本3 :分组内排序互不干扰 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 描述编辑

如下图所示:当点击华东的销量时,华东的销量排序,华北的销量不受到影响。当点击华北的销量时,华北的销量排序,华东的不受到影响。
222


2. 思路编辑

1)定义一个数组,用数组里的元素存储对应分组的升降序(正数为升,负数为降)

2)当点击销量时,修改数组对应下标的值

3)根据数组各个下标的值对各分组进行排序


3. 操作步骤编辑

1)创建数据集 ds1,SQL:SELECT * FROM 销量 where 产品='苹果汁' order by 地区,销量

222

2)报表界面设计如下:

222

3)右键 D2 单元格,添加超级链接-动态参数,参数名字为:a,值为:ADD2ARRAY(REMOVEARRAY(IF(LEN($a) = 0, RANGE(COUNT(A1[!0;!0])), SPLIT($a, ",")), &A1, 1), IF(INDEXOFARRAY(SPLIT($a, ","), &A1) = -1, 1, -1), &A1)

222

公式解析:

第一步,定义数组:IF(LEN($a) = 0, RANGE(COUNT(A1[!0;!0])), SPLIT($a, ",")) 

初始化报表时,参数 a 为空,因此我们要根据分组的长度定义一个同等长度的数组 RANGE(COUNT(A1[!0;!0])),当点击过一次之后,参数 a 就被赋予了值,这时我们直接取参数 a 即可,由于参数在传递过程中被自动处理成了字符串,所以这里还要使用 split 来分割参数 a。

接下来是修改数组对应下标的值,由于没有相应的公式,这里先删除对应下标的值,然后再在对应下标添加新的值。

第二步,删除相应点击位置对应数组下标的值:REMOVEARRAY(上一步结果, &A1, 1)

这里使用 &A1 获取相应点击的分组的位置,然后从上一步结果的数组中在该位置删除一个值。

第三步,判断原数组对应下标的值,然后添加相反值到相应点击位置对应数组下标下:ADD2ARRAY(上一步结果, IF(INDEXOFARRAY(SPLIT($a, ","), &A1) = -1, 1, -1), &A1)

这里使用 IF 来判断,由于定义的数组一开始是 range(分组数量),所以判断条件写为等于 -1,所以每个分组点击第一次的时候必不成立,从而将本是正数的值变成 -1,达到变换顺序的目的。

4)选中 A3 单元格,设置扩展后排序,排序公式为:D3 * INDEXOFARRAY(split($a, ","), &A1)

222


4. 效果预览编辑

4.1 PC 端预览效果

222


4.2 移动端效果

1)App

222

2)H5

222


5. 已完成模板编辑

保存模板,选择预览,即可看到上图效果。

已完成模板可参考%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Advanced\Cacuate_Between_Cells\分组内排序互不干扰.cpt