历史版本14 :排序简介 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

本文对排序进行简单介绍。

2. 排序简介编辑

2.1 不同类型排序优缺点

排序分为:数据集中的排序、高级排序、扩展后排序。这三种排序优缺点如下表所示:

注:高级排序是在报表执行前进行排序,扩展后排序是报表执行后再进行排序;三种排序各有其优缺点,可以根据自己排序的具体需求进行选择。

排序类型优点缺点
数据集中的排序通过 SQL 直接在数据库排序,性能最佳
  • 所有计算都必须要在数据库中做,会导致 SQL 很复杂,难以维护

  • 另外有些计算是无法用 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,效果如下图所示:

详情请参见:数据集中的排序

8.png

2.3.2 高级排序-数据列顺序

高级排序即扩展前排序,其只能根据数据列或者对可以用数据列还原的公式进行排序。

详情请参见:高级排序

Snag_1b126e6.png

2.3.3 高级排序-自定义顺序

在对数据列进行排序时,若希望可根据自己的需要,如对某一单元格进行排序,并控制每一数据项的位置(记录数比较小,自己能够记得是哪些数据),此时便可通过自定义排序的方式来控制数据顺序。

详情请参见:高级排序-自定义顺序

3.png

2.3.4 扩展后排序

若模板中希望按照某列进行排序,而此列是无法用数据集函数还原的,即无法使用高级排序进行排序设置,可使用扩展后排序。

详情请参见:扩展后排序

2.gif

2.3.5 分组内排序互不干扰

如下图所示:当点击华东的销量时,华东的销量排序,华北的销量不受到影响。当点击华北的销量时,华北的销量排序,华东的不受到影响。

详情请参见:分组内排序互不干扰

3.gif

2.3.6 扩展后多列按先后排序

在 SQL 中,我们可以用 order by A,B 语句将结果先按照 A 排序,再按照 B 来排序。那么,在设计器的扩展后排序功能中如何实现呢?如下,扩展后结果先按照销售员排序,再按照销量排序:

详情请参见:扩展后多列按先后排序

9.png

2.3.7 按分组汇总结果排序

对于分组报表,有各种合计,小计,以及列表一起存在的,如何按照各个分组逐层进行排序呢?

如下图所示,先对销售员小计排序,再对产品类型小计排序,最后对产品列表排序。

详情请参见:按分组汇总结果排序

10.png

2.3.8 多级项目符号排序

当报表中存在多级项目符号时,正常设置排序是无法实现多级排序效果的,那么如何实现多级项目符号的排序效果呢?

详情请参见:多级项目符号排序

11.png

2.3.9 扩展后中文按拼音排序

扩展后,按照中文的拼音进行排序。

详情请参见:扩展后中文按拼音排序

12.png

2.3.10 利用内置数据集实现自定义排序

已有的文档高级排序-自定义顺序是直接在公式里面逐个定义每个数据项的顺序,这样公式阅读起来困难且不易维护

这时可以通过使用内置数据集来自定义排序,如下自定义地区的排序:

详情请参见:利用内置数据集实现自定义排序

13.png

2.3.11 多列排序添加动态箭头

多列可以排序的情况下,如何设置箭头体现当前是哪一列排序,排的是升序还是降序呢,如下图所示:

详情请参见:多列排序添加动态箭头

4.gif

2.3.12 汉字数字排序

设计报表时,如果遇到「序号」是用汉字数字来表示的,那么要如何对它进行排序呢,如下:

14.png

2.3.13 根据点击次数奇偶性排序之数值型

在进行排序的时,很多时候您可能想实现根据点击的次数进行升降序排序,也就是说点击第一次点击标题升序排序,再次点击就降序,以此类推,而不是通过选择升序进行升序排列,选择降序进行降序排列。

详情请参见:根据点击次数奇偶性排序之数值型

15.png

2.3.14 根据点击次数奇偶性排序之字符型

在进行排序的时,很多时候您可能想实现根据点击的次数进行升降序排序,而不是通过选择升序进行升序排列,选择降序进行降序排列,如果是数值型字段,可根据 根据点击次数奇偶性排序之数值型 中的方法实现,那么如果是字符型字段呢,又该如何实现?

17.png

通过两张模板进行切换实现,详情请参见:根据点击次数奇偶性排序之字符型

通过一张模板实现,详情请参见:字符型数据动态排序

2.3.15 多列排序

根据点击次数奇偶性排序之数值型 这篇文档中中介绍了点击数据列标题实现升序降序排序,那么,如果有多个列想实现这样的升序降序功能呢。如下图所示:

详情请参见:多列排序

6.gif

2.3.16 横向扩展多列排序

实现报表预览时点击列名,可对该列进行升降排序,而多列的列名是根据字段横向扩展出来的,使用 扩展后排序 中的方法分别设置 order 参数的值无法实现横向扩展列中的点击列排序。

详情请参见:横向扩展多列排序

7.gif

2.3.17 非纯数字扩展列乱序排列的解决方案

报表的展示效果直接关乎到用户的体验和使用!比如一张月报表,如果是按照 1 月-12 月的顺序展示出来,用户查阅便一目了然,但有时候却事与愿违。遇到这种非纯数字的扩展表头时,使用原值排序就会导致错乱。此时,我们可以使用公式排序, 如图所示:

详情请参见:非纯数字扩展列乱序排列的解决方案

原值排序:

18.png

公式排序:

19.png