反馈已提交

网络繁忙

扩展后多列按先后排序

  • 文档创建者:axing
  • 历史版本:6
  • 最近更新:Fay 于 2022-11-18
  • 1. 概述

    1.1 问题描述

    数据集中我们可以用 SQL 语句中 order by A,B 语句,将结果先按照 A 排序,再按照 B 来排序。那么设计器中如何使用「扩展后排序」实现多列排序呢?

    例如:扩展后结果先按照「销售员」排序,相同的销售员再按照「销量」排序,如下图所示:

    Snag_13c29e68.png

    1.2 解决思路

    1)字符类型的数据可以通过INARRAY(字符, SORTARRAY(UNIQUEARRAY(扩展的所有字符)))获得排序位置。

    2)数值类型的数据直接通过本身的大小排序。

    将 1)和 2)的结果经过运算处理得出一个新的数值,最后按照新数进行排序。

    2. 示例

    2.1 准备数据

    新建普通报表,新建数据库查询 ds1,输入 SQL 语句:SELECT * FROM 销量 where 地区='华北'

    2.2 设计表格

    1)将数据集中的字段依次拖入 A2~E2 单元格,表格如下图所示:

    Snag_13d67ce5.png

    2)将 A2 单元格数据设置为「列表」,如下图所示:

    2.3 设置扩展后排序

    选中 A2 单元格,设置「扩展后排序」为「升序」,输入公式:INARRAY(B2,SORTARRAY(UNIQUEARRAY(B2[!0])))*POWER(10, LEN(MAX(E2[!0])))+E2

    这个公式涉及到 B2 和 E2 单元格的组合计算,正是这种组合计算实现了先 B2 排序,再 E2 排序的效果。公式拆解说明如下:

    部分
    说明
    SORTARRAY(UNIQUEARRAY(B2[!0]))B2 单元格是文本数据,所以要使用 SORTARRAY 函数对其进行排序
    INARRAY(B2,SORTARRAY(UNIQUEARRAY(B2[!0])))

    SORTARRAY 函数已经将 B2 排好序了,且数据保存为数组

    再使用 INARRAY 函数输出数组里面每个文本数据的位置

    就是将排好序的文本转化为数字,方便后面跟 E2 组合计算,再对 E2 排序

    *POWER(10, LEN(MAX(E2[!0])))

    这是个固定的乘幂,前面公式乘这个数,就是为了将代表文本位置的数字增大

    为什么要增大这个数呢?这是因为后面还要加上 E2,如果只是用1、2、3这样比较小的数,加上 E2 后会影响到 B2 排序

    +E2

    B2 单元格相同时,组内根据加上的 E2 单元格数值,得到的和再进行组内排序

    也就是在 B2 排好序的基础上,再对 E2 排序

    步骤如下图所示:

    2.4 效果预览

    1)PC 端

    保存报表,点击分页预览,效果如 1.1问题描述 中所示。

    2)移动端

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

    222

    3. 模板下载

    已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\OrderReport\扩展后多列排序.cpt

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

    附件列表


    主题: 报表专题
    • 有帮助
    • 没帮助
    • 只是浏览
    中文(简体)

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持