1. 概述编辑
在 FineReport 报表进行数据展示或图表展示时,经常会用到「排序」功能。一般在数据展示中应用比较多,图表中也会稍微涉及到一点。
本文将介绍 FineReport 支持的各类排序,以及对排序的各种应用进行简单介绍。
2. 三种排序方式对比编辑
FineReport 支持的三种排序类型分别为:数据集中的排序、高级排序、扩展后排序。这三种排序优缺点如下表所示:
注:高级排序是在报表执行前进行排序,扩展后排序是报表执行后再进行排序。
排序类型 | 优点 | 缺点 |
---|---|---|
数据集中的排序 | 性能最佳 | 1)所有计算都必须要在数据库中做,会导致 SQL 很复杂,难以维护 2)有些计算是无法用 SQL 完成的 |
高级排序 | 1)性能中等 2)可以基于「数据列」利用公式做一些稍微复杂些的排序 | 公式必须依赖于「数据列」,并且会导致公式的二次计算 |
扩展后排序 | 最为灵活,满足目前所有的排序需求 | 由于在扩展完成后进行排序,会对所有格子的位置进行调整,因此性能最差 |
结论:
从性能方面考虑:数据集中的排序>高级排序>扩展后的排序。
从覆盖场景方面考虑:扩展后的排序>高级排序>数据集中的排序。
3. 数据集中的排序编辑
数据集中的排序是指通过 SQL 直接在数据库查询时排序。
3.1 应用场景
「数据集中的排序」性能最佳,但所有计算都必须要在数据库中做,会导致 SQL 很复杂,难以维护。因此建议仅使用 SQL 实现一些简单的,单一的「升序」或「降序」。
如果某一列是通过其他数据列计算得出的,「数据集中的排序」将不再适用。
3.2 功能简介
本节介绍「数据集中的排序」可实现的效果。具体使用请参见:数据集中的排序
注:可以在普通报表和决策报表中使用。
3.2.1 单列升降序
例如:
升序:SELECT * FROM 销量 order by 销量
降序:SELECT * FROM 销量 order by 销量 desc
3.2.2 多列排序
示例 SQL 语句为: SELECT * FROM 销量 order by 英文简称,销量
实现效果:数据先按「英文简称」列升序排序,「销量」列再按对应的「英文简称」升序排序。
3.2.3 动态排序
定义一个数据集参数,通过在标题添加「动态参数」实现点击标题动态排序。效果如下图所示:
4. 高级排序编辑
注:可以在普通报表和决策报表中使用。
「高级排序」是指:报表根据某「数据列」设置的公式和排列顺序进行的排序。相当于扩展前排序,依赖于「数据列」。
高级排序必须在「最父格」单元格设置,例如 C1 单元格的左父格是 B1,B1 单元格的左父格是 A1,那么 A1 即为「最父格」。
「高级排序」10.0 只支持单列排序,详情请参见:高级排序
可以实现的效果(单列排序):
数据列排序
自定义排序
5. 扩展后排序编辑
5.1 应用场景
「扩展后排序」在制作报表过程中可以实现多种排序需求,是最灵活的排序方式,但由于在扩展完成后进行排序,会对所有格子的位置进行调整,因此性能最差,建议在 高级排序 无法实现的情况下再使用「扩展后排序」。
5.2 功能简介
注:可以在普通报表和决策报表中使用。
具体功能介绍及使用请参见:扩展后排序
可以实现的效果(结合其他功能实现的):
单列动态排序:扩展后排序、点击某一列标题改变排序、
多列动态排序:多列动态排序、横向扩展列多列排序、扩展后多列按先后排序、动态列实现多列排序
自定义排序:利用内置数据集实现自定义排序
其他场景:多级项目符号排序、扩展后中文按拼音排序、汉字数字排序