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

目录:

1. 概述编辑

1.1 应用场景

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

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

1.2 实现思路

通过添加「动态参数」类型的超级链接和单元格「扩展后排序」这个功能来实现,即点击数据列标题时,将该数据列所在单元格作为参数传递过去,在扩展后排序公式中接收该参数,根据参数的不同,实现不同的排序。

2. 示例编辑

2.1 数据准备

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

222

2.2 报表设计

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

222

2.3 超级链接参数设置

1)选中 A2 单元格,右键,选择「超级链接」,添加一个「动态参数」,增加 2 个参数:

参数 a ,值为公式 if(a==1,0,1),表示点击一次超级链接就替换一次 a 的值,1 代表升序,0 代表降序。

参数 asc ,值为字符串A3 , 表示要排序的单元格。

步骤如下图所示:

Snag_100a9f97.png

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

Snag_1011e0e4.png

注:公式if($a==1,0,1) 中的 $ 有或无没有影响,只是能一眼看出 a 是参数。

3)选中 C2 单元格,依然添加「动态参数」,但 C3 是时间类型,因此 asc 参数修改为:tointeger(format(C3,'yyyyMMddHHmmss'))

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

Snag_1015d9fb.png

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

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

2.4 扩展后排序

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

222

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

2.5 效果预览编辑

1)PC端

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

222

2)移动端

移动端查看报表的方式参见 报表移动端预览。App 端和 H5 端均支持,效果如下图所示:

222

3. 模板下载编辑

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

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