1. 概述编辑
本文对排序进行简单介绍。
2. 排序简介编辑
2.1 不同类型排序优缺点
排序分为:数据集中的排序、高级排序、扩展后排序。这三种排序优缺点如下表所示:
注:高级排序是在报表执行前进行排序,扩展后排序是报表执行后再进行排序;三种排序各有其优缺点,可以根据自己排序的具体需求进行选择。
排序类型 | 优点 | 缺点 |
---|---|---|
数据集中的排序 | 通过 SQL 直接在数据库排序,性能最佳 |
|
高级排序 |
|
|
扩展后排序 | 最为灵活,满足目前所有的排序需求 | 由于在扩展完成后进行排序,会对所有格子的位置进行调整,因此性能最差 |
2.2 不同模板的排序
FineReport 报表一般包括纯粹的数据展示、图表展示和控件展示,排序一般应用在数据展示中比较多,但是图表中也会稍微涉及到一点,那么数据展示排序与图表排序有什么区别呢,具体介绍如下表所示:
数据展示排序 | 通过单元格展示数据时,可以直接在数据集中进行排序,也可以在单元格中进行排序 |
---|---|
图表排序 | 图表数据来源于数据集,故对图表排序就需要对数据集中的数据进行排序,即 数据集中的排序 |
图表数据来源于单元格,故对图表排序就是对单元格中的数据进行排序,即可以 高级排序 和 扩展后排序 图表排序还提供接口,详细示例请查看 [新]图表排序接口 |
2.3 不同排序效果
2.3.1 数据集中的排序
升序:Select * from [table] order by [column_name] asc
降序:Select * from [table] order by [column_name] desc
例如数据集定义为升序:SELECT * FROM 销量 order by 销量 asc,效果如下图所示:
详情请参见:数据集中的排序
2.3.2 高级排序-数据列顺序
高级排序即扩展前排序,其只能根据数据列或者对可以用数据列还原的公式进行排序。
详情请参见:高级排序
2.3.3 高级排序-自定义顺序
在对数据列进行排序时,若希望可根据自己的需要,如对某一单元格进行排序,并控制每一数据项的位置(记录数比较小,自己能够记得是哪些数据),此时便可通过自定义排序的方式来控制数据顺序。
详情请参见:高级排序-自定义顺序
2.3.4 扩展后排序
若模板中希望按照某列进行排序,而此列是无法用数据集函数还原的,即无法使用高级排序进行排序设置,可使用扩展后排序。
详情请参见:扩展后排序
2.3.5 分组内排序互不干扰
如下图所示:当点击华东的销量时,华东的销量排序,华北的销量不受到影响。当点击华北的销量时,华北的销量排序,华东的不受到影响。
详情请参见:分组内排序互不干扰
2.3.6 扩展后多列按先后排序
在 SQL 中,我们可以用 order by A,B 语句将结果先按照 A 排序,再按照 B 来排序。那么,在设计器的扩展后排序功能中如何实现呢?如下,扩展后结果先按照销售员排序,再按照销量排序:
详情请参见:扩展后多列按先后排序
2.3.7 按分组汇总结果排序
对于分组报表,有各种合计,小计,以及列表一起存在的,如何按照各个分组逐层进行排序呢?
如下图所示,先对销售员小计排序,再对产品类型小计排序,最后对产品列表排序。
详情请参见:按分组汇总结果排序
2.3.8 多级项目符号排序
当报表中存在多级项目符号时,正常设置排序是无法实现多级排序效果的,那么如何实现多级项目符号的排序效果呢?
详情请参见:多级项目符号排序
2.3.9 扩展后中文按拼音排序
扩展后,按照中文的拼音进行排序。
详情请参见:扩展后中文按拼音排序
2.3.10 利用内置数据集实现自定义排序
已有的文档高级排序-自定义顺序是直接在公式里面逐个定义每个数据项的顺序,这样公式阅读起来困难且不易维护
这时可以通过使用内置数据集来自定义排序,如下自定义地区的排序:
详情请参见:利用内置数据集实现自定义排序
2.3.11 多列排序添加动态箭头
多列可以排序的情况下,如何设置箭头体现当前是哪一列排序,排的是升序还是降序呢,如下图所示:
详情请参见:多列排序添加动态箭头
2.3.12 汉字数字排序
设计报表时,如果遇到「序号」是用汉字数字来表示的,那么要如何对它进行排序呢,如下:
2.3.13 根据点击次数奇偶性排序之数值型
在进行排序的时,很多时候您可能想实现根据点击的次数进行升降序排序,也就是说点击第一次点击标题升序排序,再次点击就降序,以此类推,而不是通过选择升序进行升序排列,选择降序进行降序排列。
详情请参见:根据点击次数奇偶性排序之数值型
2.3.14 根据点击次数奇偶性排序之字符型
在进行排序的时,很多时候您可能想实现根据点击的次数进行升降序排序,而不是通过选择升序进行升序排列,选择降序进行降序排列,如果是数值型字段,可根据 根据点击次数奇偶性排序之数值型 中的方法实现,那么如果是字符型字段呢,又该如何实现?
通过两张模板进行切换实现,详情请参见:根据点击次数奇偶性排序之字符型
通过一张模板实现,详情请参见:字符型数据动态排序
2.3.15 多列排序
根据点击次数奇偶性排序之数值型 这篇文档中中介绍了点击数据列标题实现升序降序排序,那么,如果有多个列想实现这样的升序降序功能呢。如下图所示:
详情请参见:多列排序
2.3.16 横向扩展多列排序
实现报表预览时点击列名,可对该列进行升降排序,而多列的列名是根据字段横向扩展出来的,使用 扩展后排序 中的方法分别设置 order 参数的值无法实现横向扩展列中的点击列排序。
详情请参见:横向扩展多列排序
2.3.17 非纯数字扩展列乱序排列的解决方案
报表的展示效果直接关乎到用户的体验和使用!比如一张月报表,如果是按照 1 月-12 月的顺序展示出来,用户查阅便一目了然,但有时候却事与愿违。遇到这种非纯数字的扩展表头时,使用原值排序就会导致错乱。此时,我们可以使用公式排序, 如图所示:
详情请参见:非纯数字扩展列乱序排列的解决方案
原值排序:
公式排序: