反馈已提交
网络繁忙
数据集中我们可以用 SQL 语句中 order by A,B 语句,将结果先按照 A 排序,再按照 B 来排序。那么设计器中如何使用「扩展后排序」实现多列排序呢?
例如:扩展后结果先按照「销售员」排序,相同的销售员再按照「销量」排序,如下图所示:
1)字符类型的数据可以通过INARRAY(字符, SORTARRAY(UNIQUEARRAY(扩展的所有字符)))获得排序位置。
2)数值类型的数据直接通过本身的大小排序。
将 1)和 2)的结果经过运算处理得出一个新的数值,最后按照新数进行排序。
新建普通报表,新建数据库查询 ds1,输入 SQL 语句:SELECT * FROM 销量 where 地区='华北'
1)将数据集中的字段依次拖入 A2~E2 单元格,表格如下图所示:
2)将 A2 单元格数据设置为「列表」,如下图所示:
选中 A2 单元格,设置「扩展后排序」为「升序」,输入公式:INARRAY(B2,SORTARRAY(UNIQUEARRAY(B2[!0])))*POWER(10, LEN(MAX(E2[!0])))+E2
这个公式涉及到 B2 和 E2 单元格的组合计算,正是这种组合计算实现了先 B2 排序,再 E2 排序的效果。公式拆解说明如下:
SORTARRAY 函数已经将 B2 排好序了,且数据保存为数组
再使用 INARRAY 函数输出数组里面每个文本数据的位置
就是将排好序的文本转化为数字,方便后面跟 E2 组合计算,再对 E2 排序
这是个固定的乘幂,前面公式乘这个数,就是为了将代表文本位置的数字增大
为什么要增大这个数呢?这是因为后面还要加上 E2,如果只是用1、2、3这样比较小的数,加上 E2 后会影响到 B2 排序
B2 单元格相同时,组内根据加上的 E2 单元格数值,得到的和再进行组内排序
也就是在 B2 排好序的基础上,再对 E2 排序
步骤如下图所示:
1)PC 端
保存报表,点击分页预览,效果如 1.1问题描述 中所示。
2)移动端
App 和 HTML5 端均支持,效果如下图所示:
已完成模板可参见:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\OrderReport\扩展后多列排序.cpt
点击下载模板:扩展后多列排序.cpt
售前咨询电话
400-811-8890转1
在线技术支持
请前往「服务平台」,选择「在线支持」
热线电话:400-811-8890转2
总裁办24H投诉
热线电话:173-1278-1526
文 档反 馈
鼠标选中内容,快速反馈问题
鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。
不再提示
10s后关闭