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

目录:

1. 概述编辑

1.1 预期效果

在制作报表时,经常遇到需要通过点击标题实现升序和降序交换显示。文档扩展后排序中,可通过选择「升序」和「降序」的选项改变排序,那么要如何实现直接点击标题即可改变排序呢?效果如下图所示:

1615792634708798.gif

1.2 实现思路

方案一:利用 SQL 的 order by 字段结合动态参数实现,数值型、字符型字段均适用

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

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

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

2. 示例:方案一编辑

2.1 数据准备

新建普通报表,新建数据库查询 ds1,SQL 查询语句为:SELECT * FROM 销量 where 地区='华北' order by 销量 ${a}

定义了一个数据集参数 a,用来表示排序 asc 或 desc 。如下图所示:

1615793412809068.png

2.2 设计报表

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

1615793577646814.png

2.3 添加动态参数

选中「销量」标题所在 E1 单元格,添加一个「超级链接>动态参数」,参数即为在 SQL 中设置的参数 a ,参数值输入公式:if(a="desc","asc","desc")

注:a 默认为 asc。

1615793912943274.png

2.4 效果预览

2.4.1 PC 端

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

2.4.2 移动端

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

814758AA-5C13-4255-A8D4-7495D6F7640D.GIF

3. 示例:方案二-数值型编辑

3.1 数据准备

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

1615795202498544.png

3.2 设计报表

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

1615795379607406.png

3.3 添加动态参数

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

1615795596978701.png

3.4 设置排序

排序设置有两种设置方式,高级排序 和 扩展后排序,下面分别介绍这两种排序的设置方式。

3.4.1 高级排序

在「最父格」A2 单元格设置,双击 E2 单元格,选择「高级」,在排序顺序处选择「升序」,输入公式:if($a==1,销量,-销量),「销量」表示按照「销量」列进行排序。如下图所示:

1615796689279064.png

3.4.2 扩展后排序

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

1615797161748486.png

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

3.5 效果预览

效果预览与方案一 2.4 节效果预览一致。

4. 示例:方案二-字符型编辑

报表设计同方案二-数值型,本示例在「销售员」标题上添加动态参数,再在其父格 A2 单元格设置扩展后排序。

4.1 添加动态参数

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

参数名
参数值类型参数值
a公式if(a=1,-1,1)
asc字符串B2
步骤如下图所示:

1615799060205404.png

4.2 设置扩展后排序

选中 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
步骤如下图所示:

1615799395381397.png

4.3 效果预览

4.3.1 PC 端

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

1615799876743321.gif

4.3.2 移动端

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

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

5. 模板下载编辑

已完成模板可参见:

%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\OrderReport\点击标题改变排序方案一.cpt

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

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

点击下载模板:

点击标题改变排序方案一.cpt

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

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