历史版本4 :扩展后多列按先后排序 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 问题描述

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

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

222

1.2 解决思路

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

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

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

2. 示例编辑

2.1 数据准备

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

1615695707543683.png

2.2 报表设计

将数据列依次拖入 A2~E2 单元格,输入对应标题,设置表格样式如下图所示:

222

修改 A2 单元格数据设置为「列表」。

1615695909478992.png

2.3 设置扩展后排序

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

公式说明:

公式
说明
UNIQUEARRAY(B2[!0])返回 B2 扩展出的所有单元格中去掉重复元素的数组
SORTARRAY()

返回排过序的数组。注:数组中的元素类型必须一样,并且要可比较

INARRAY(co,array)返回 co 在数组 array 中的位置,如果 co 不在 array 中,则返回0
POWER(10, LEN(MAX(E2[!0])))先算出销量列中最大的值的长度,再计算 10 按照该指数次幂乘方的值
步骤如下图所示:

1615696176960742.png

2.4 效果预览

2.4.1 PC 端

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

2.4.2 移动端

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

222

3. 模板下载编辑

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

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