1. 概述编辑
1.1 应用场景
根据点击次数奇偶性排序之数值型 这篇文档中中介绍了点击数据列标题实现升序降序排序,那么,如果有多个列想实现这样的升序降序功能呢。
即点击「订单 ID」 是根据「订单 ID 」升序排序,再点击「订单 ID 」则根据「订单 ID 」降序排序,接着点击「运货费」则根据「运货费」升序排序,以此类推。
1.2 实现思路
来实现,即点击数据列标题时,将该数据列所在单元格作为参数传递过去,在扩展后排序公式中接收该参数,根据参数的不同,实现不同的排序。
2. 示例编辑
2.1 数据准备
新建数据集 ds1 ,添加 SQL 查询语句:SELECT EMPID,EMPNAME,BIRTHDATE,HEIGHT FROM EMPLOYEE limit 10。
2.2 报表设计
将 EMPID , EMPNAME , BIRTHDATE , HEIGHT 字段分别拖到 A3,B3,C3,D3 单元格,设计表格如下图所示:
2.3 超级链接参数设置
1)选中 A2 单元格,右键,选择「超级链接」,添加一个「动态参数」,增加 2 个参数:
参数 a ,值为公式 if(a==1,0,1),表示点击一次超级链接就替换一次 a 的值,1 代表升序,0 代表降序。
参数 asc ,值为字符串A3 , 表示要排序的单元格。
步骤如下图所示:
2)选中 D2 单元格,同理设置,如下图所示:
注:公式if($a==1,0,1) 中的 $ 有或无没有影响,只是能一眼看出 a 是参数。
3)选中 C2 单元格,依然添加「动态参数」,但 C3 是时间类型,因此 asc 参数修改为:tointeger(format(C3,'yyyyMMddHHmmss'))
若是时间类型仅包含年月日,则参数为:tointeger(replace(C3,"-",""))
注1:此处虽然填的是公式,但参数类型仍是字符串。
注2:第二列是字符串类型,无法动态排序。
2.4 扩展后排序
选中 A3 单元格,在单元格属性>扩展属性中选择 ,选中 ,输入公式if($a==1,eval($asc),eval($asc)*-1),如下图所示:
注:后面单元格是跟随第一列扩展的,只有在顶级的左父格设置扩展后排序才有用,该公式 if($a==1,eval($asc),eval($asc)*-1) 放在顶级左父格才会生效,该示例中如果放在 B3 单元格,排序就无效。
2.5 效果预览编辑
3. 模板下载编辑
已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Primary\GroupReport\多列排序.cpt
点击下载模板:多列排序.cpt