历史版本14 :多列动态排序 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 描述编辑

根据点击次数奇偶性排序之数值型 这篇文档中中介绍了点击数据列标题实现升序降序排序,那么,如果有多个列想实现这样的升序降序功能呢。

即点击订单 ID 是根据订单 ID 升序排序,再点击订单 ID 则根据订单 ID 降序排序,接着点击运货费则根据运货费升序排序,以此类推。

2. 思路编辑

通过单元格「扩展后排序」这个功能来实现,即点击数据列标题时,将该数据列所在单元格作为参数传递过去,在扩展后排序公式中接收该参数,根据参数的不同,实现不同的排序,下面详细介绍。

3. 示例编辑

3.1 数据准备

新建数据集 ds1,添加 SQL 查询语句:SELECT EMPID,EMPNAME,BIRTHDATE,HEIGHT FROM EMPLOYEE limit 10

222

3.2 报表设计

将 EMPID EMPNAME BIRTHDATE HEIGHT 字段分别拖到 A3,B3,C3,D3 单元格,如下图所示:

222

3.3 超级链接参数设置

1)选中 A2 单元格,右键,选择超级链接,添加一个动态参数,增加 2 个参数,如下图所示:

222

参数 a 的意义在于,点击一次超级链接就替换一次a的值,那么在下面进行排序就可以根据a的值来决定是升序还是降序。

参数 asc 是要排序的单元格,注意:它的值类型是字符串。

2)选中 D2 单元格,同理设置,如下图所示:

222

3)选中 C2 单元格,因为 C3 是时间类型的原因,因此动态参数设置如下:

222

其中 asc 参数为:tointeger(format(C3,'yyyyMMddHHmmss'))

若是时间类型仅包含年月日,则参数为:tointeger(replace(C3,"-",""))

注:此处虽然填的是公式,但参数类型仍是字符串

第二列是字符串类型,无法动态排序

3.4 扩展后排序

选中 A3 单元格,在单元格属性>扩展属性中选择扩展后,选中升序,输入公式if($a==1,eval($asc),eval($asc)*-1),如下图所示:

222

注:后面单元格是跟随第一列扩展的,只有在顶级的左父格设置扩展后排序才有用,该公式if($a==1,eval($asc),eval($asc)*-1)放在顶级左父格才会生效,该示例中如果放在 B3 单元格,排序就无效。

4. 效果预览编辑

4.1 PC端

保存报表,点击分页预览,效果如下图所示:

222

4.2 移动端

移动端查看报表的方式参见 报表移动端预览

222

4.3 H5

222

5. 已完成模板编辑

已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Primary\GroupReport\多列排序.cpt

点击下载模板:多列排序.cpt