最新历史版本 :点击某一列标题改变排序 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 问题描述

在制作报表时,经常遇到需要通过点击标题实现升序和降序交换显示。文档 数据集中的排序 中,可通过定义数据集参数,利用动态参数实现点击标题动态排序。

但有些情况下无法用到数据集排序,例如制作报表时有一列是通过其他数据列计算得出的,如下图中「利润」是由(单价-进价)*数量得来的,那么这时要如何实现直接点击标题动态排序呢?

1615884635922969.gif

1.2 解决思路

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

注1:数值型和字符型的设置有所不同,详情在示例中查看。

注2:本文讲解仅一列数据变换排序,多列动态排序请参考文档 多列动态排序

2. 示例:数值型编辑

2.1 数据准备

新建普通报表,新建数据库查询 ds1,SQL 查询语句为:SELECT * FROM 订单明细 limit 20。如下图所示:

Snag_bd1935d.png

2.2 设计报表

将数据集中的数据拖入表格,设置 A2 单元格的「数据设置」为「列表」,F2 单元格中插入公式:(C2 - E2) * D2,设计报表样式如下图所示:

2.3 添加动态参数

选中「利润」标题所在 F1 单元格,添加一个「超级链接>动态参数」 a,参数值为公式:if($a=1,-1,1),如下图所示:

1615885208323457.png

2.4 设置扩展后排序

在「最父格」A2 单元格设置,选中 A2 单元格,选择「单元格属性>扩展」,设置「扩展后排序」为升序,输入公式:if($a=1,F2,-F2),F2 表示按照 F2 单元格的值进行排序。如下图所示:

注:数值型字段排序时若字段为空,需要在排序公式中给空值赋值。详情可参见 排序时数值型字段存在空值时报错

注:由于只有数值型数据才有负数,字符型数据没有负数,故这种排序方法只适用于「数值型字段」排序。

2.5 效果预览

2.5.1 PC 端

保存报表,点击「分页预览」,效果与 1.1 节效果图一致。

2.5.2 移动端

App 端和 HTML5 端均支持,效果如下图所示:

1C4FB731-8FD4-42F9-B34C-30019B9A785B.GIF

3. 示例:字符型编辑

3.1 数据准备

新建普通报表,新建数据库查询 ds1,SQL 查询语句为:SELECT * FROM 销量 where 地区='华北'。如下图所示:

1615886102528142.png

3.2 设计报表

将数据集中的数据拖入表格,设置 A2 单元格的「数据设置」为「列表」,报表样式如下图所示:

3.3 添加动态参数

选中「销售员」标题所在 B1 单元格,添加一个「超级链接>动态参数」 参数设置如下表:

参数名
参数值类型参数值
a公式if(a=1,-1,1)
asc字符串B2

步骤如下图所示:

1615799060205404.png

3.4 设置扩展后排序

选中 A2 单元格,选择「单元格属性>扩展」,设置「扩展后排序」为升序,输入公式:INARRAY(EVAL($asc),SORTARRAY(EVAL($asc+"[!0]")))*$a

公式说明如下表:

公式
说明

EVAL($asc) 

返回表达式 $asc ,即 B2 单元格计算后的结果。

$asc+"[!0]"返回拼接后的字符,即返回 B2[!0],即 B2 单元格扩展出来的所有值
SORTARRAY(array)

返回排过序的 array 数组

注:当数组元素存在类型不一致或者无法比较时,返回原数组。

INARRAY(co,array)返回 co 在数组 array 中的位置,如果 co 不在 array 中,则返回 0

步骤如下图所示:

3.5 效果预览

3.5.1 PC 端

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

1615799876743321.gif

3.5.2 移动端

App 端和 HTML5 端均支持,效果如下图所示:

EA4599F5-DAF4-493D-B591-86DFA35D2382.GIF

4. 模板下载编辑

已完成模板可参见:

%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\OrderReport\点击标题改变排序-数值型.cpt

%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\OrderReport\点击标题改变排序-字符型.cpt

点击下载模板:

点击标题改变排序-数值型.cpt

点击标题改变排序-字符型.cpt