反馈已提交

网络繁忙

当前为10.0版本文档,只有最新版本的文档支持在线编辑修改,如果想创建/编辑文档,请移步至 最新版帮助文档

点击某一列标题改变排序

  • 文档创建者:lu123
  • 历史版本:20
  • 最近更新:Alicehyy 于 2021-03-25
  • 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,设计报表样式如下图所示:

    1616659639554253.png

    2.3 添加动态参数

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

    1615885208323457.png

    2.4 设置扩展后排序

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

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

    1615885380327543.png

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

    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 单元格的「数据设置」为「列表」,报表样式如下图所示:

    1615886111926277.png

    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

    步骤如下图所示:

    1615799395381397.png

    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

    附件列表


    主题: 报表专题
    已经是第一篇
    已经是最后一篇
    • 有帮助
    • 没帮助
    • 只是浏览

    售前咨询电话

    400-811-8890转1

    在线技术支持

    请前往「服务平台」,选择「在线支持」

    热线电话:400-811-8890转2

    总裁办24H投诉

    热线电话:173-1278-1526