分组内排序互不干扰

编辑
  • 文档创建者:axing
  • 浏览次数:3489次
  • 编辑次数:3次
  • 最近更新:Kevin-s 于 2019-06-18
  • 1. 描述

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


    2. 思路

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

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

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


    3. 操作步骤

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

    2)报表界面设计如下:

    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)

    公式解析:

    第一步,定义数组: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)



    4. 效果预览

    4.1 PC 端预览效果



    4.2 移动端效果

    1)App


    2)H5


    5. 已完成模板

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

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

    附件列表


    主题: 报表应用
    标签: 暂无标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]