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. 高级排序编辑
「高级排序」是指:报表根据某「数据列」设置的公式和排列顺序进行的排序。相当于扩展前排序,依赖于「数据列」。
4.1 应用场景
可以实现单列或多列数据的排序。
4.2 功能简介
注:可以在普通报表和决策报表中使用。
支持时间、日期、字符串、数字、布尔类型数据的排序;「高级排序」不支持动态排序,即点击表头进行排序的效果不能实现。
11.0.3 及之后版本,支持多列排序(前提是:最父格的数据设置是「列表」);11.0.3 之前版本,只能实现单列排序。
具体功能介绍及使用请参见:高级排序