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

目录:

1. 描述编辑

1.1 问题描述

若模板中希望按照某列进行排序,而此列是无法用数据集函数还原的,即无法使用高级排序进行排序设置,如何实现呢?

1.2 解决思路

FineReport 提供扩展后排序功能,满足一切排序的需求。

2. 实现方法编辑

2.1 设置方法

右击单元格>扩展属性或者选中单元格,在右侧的单元格属性>扩展属性中,设置扩展后排序

如在 A1 单元格最父格中设置扩展后排序>升序,公式中输入 C1,则 A1 单元格(父格)会根据 C1 单元格(子格)的计算结果进行排序,如下图所示:

222

注:上例中的 A1 单元格必须是最高父格,否则无法实现此功能。

比如 C1 单元格的父格为B1单元格,B1 单元格的父格为 A1 单元格,如果设置 B1 单元格根据 C1 单元格扩展后排序,则无法生效。

2.2 排序后重新编号

由于是对扩展后的数据进行重新排序,只是根据结果改变行的顺序,因此若模板中有通过seq()或者&单元格设置序号时,原本生成的序号会在重新排序时打乱。

用户可在序号所在的单元格设置条件属性,条件属性>新值,在新增的新值处选择公式,输入公式row(),这样在重新排序时会根据当前所在行重新生成序号。

3. 示例编辑

下面我们以扩展后排序来实现多数据集关联排序。效果如下:

默认项目名称根据年度投资计划总额升序排列

222

选择降序排列后,项目名称根据年度投资计划总额降序排列

222

3.1 打开模板

打开模板:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\advanced\Multidatasource\Multi_2.cpt

3.2 超级链接设置

给年度投资计划(D2 单元格),添加超级链接>动态参数,新增 2 个动态参数为升序降序order 为参数名,其参数值分别为 asc(升序),desc(降序),如下图所示:

222

3.3 排序方法设置

右击项目名称所在列(B4单元格),右击单元格>扩展属性,在右侧下方的单元格属性面板中,设置扩展后排序为升序,并且公式为if($order == 'asc',D4,-D4),如下图所示:

222

注1:这个公式的意义在于:若 order 为 asc 即升序则按照 D4 进行升序排列,若选择 desc 即降序则按照 D4 降序。

注2:公式中的 D4 单元格的数值类型必须是数字型,日期时间类型的数据需要特殊设置,详情参见文档:多列排序

3.4 条件属性设置

原模板中使用了 & 来产生序号,会发现重新排序后顺序被打乱了,需要使用条件属性重新生成序号。

在序号(A4 单元格)中增加新值条件属性,选择公式,在公式中输入:row()-3。如下图所示:

222

3.5 效果预览

以上便设置好了,预览即可看到上图效果。可以看出,在数据列的高级处进行排序需要进行很复杂的公式进行还原,而用扩展后排序只需要引用对应的单元格即可。

rH5tIFFWwM.gif

4. 已完成模板编辑

已完成模板设置可参考:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\OrderReport\扩展后排序.cpt

点击下载模板:扩展后排序.cpt

5. 注意事项编辑

若报表按分组排列,而每个分组之间合算小计,如下图所示:
222

此时如果还使用 3.4 介绍的 row()-x 的方法是不可行的,会导致两个分组之间有断号,这里使用 seq() 函数即可解决,如下图所示:

222

注:扩展排序后重新编号的更多方法,请参见:扩展排序后重新编号