博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
报表也可以根据单元格计算后结果进行排序
阅读量:5897 次
发布时间:2019-06-19

本文共 1524 字,大约阅读时间需要 5 分钟。

熟悉报表的人都知道,报表中实现数据排序通常有三种方法:

1、 在 sql 语句中增加 order by,如 order by id asc
2、 select 函数取数时,指定排序字段,如 ds1.select(name:-1),或者按照其他字段排序,如 ds1.select(EMPID, ,,;NAME:1) 按照 NAME 字段升序排序
3、 还可以按照某字段汇总后的结果进行排序,如:ds1.group(省份; 省份:1; ds1.sum( 工业产值):-1),对数据集 ds1 按照省份进行分组,分组后求出每组的 sum( 工业产值),然后按照这个汇总值对组进行逆序排列
可以看到,这三种方式有一个共性,排序字段的数据都存储在数据库中。但是,在实际使用中,数据经常会在报表单元格中进行运算(比如单元格数据乘以一个系数然后再和其他单元格数据相加等),而此时如果要根据计算后的单元格数据进行排序,上述三种方法就无法做到了。
下面,我们就介绍一下如何实现这种需求,基于单元格计算后的数据进行排序。
思路
我们首先分析一下排序操作是怎么做的:按照某列数据排序,实际上是先算出该数据的“排名”,然后根据排名的“顺序”对数据进行重新排序。因此主要有两部分操作,一是如何生成排名,二如何根据排名重新对数据排序。
下面就按照这个思路实现一个实际例子。
首先,按照用户需求先将数据取出来以网格式方式展现,设计后的模板如下:
1

前几列按照实际需要将相应字段拖拽到单元格中即可,在 E3 单元格中,对运货费进行了单元格间的计算操作,需要解决的问题就是根据 E3 单元格数据进行排序。

接下来先生成 E3 的排名,排名写法比较固定,在报表后追加一列,在 F3 单元格中写入表达式:=count(E3[`0]{E3>$E3})+1,统计 E3 扩展出来的列中大于当前 E3 单元格的数量加 1,即为当前 E3 的排名。
好,现在排名生成了,看下如何基于排名重新对数据进行排序。
在报表第一列前插入一列,下边追加一行,在 A4 单元格中写入表达式:=to(1,count(B3{})),根据扩展区域重新模拟出一片扩展,如下图:
2

接下来就可以使用报表的动态格间计算功能,根据 G3(排名)和 A4 关联,重新在第四行取出想要的数据,在 B4 单元格中写入表达式:=B3{G3==$A4},该表达式含义为在 B4 单元格中取出排名(G3)和当前行相同的 B3 的值,并将 B3 单元格的扩展方向设置“纵向扩展”,报表预览如下:

3

可以看到,在 B 列中能够取到相应的 ID 值,其中,排名 6 和 8 都有两条记录,这是因为运货费单元格有相同的值,所以排名相同。

B 列中取出了订单 ID 的值,剩余单元格使用数据集. 字段名取数就可以了,如下图:
4

而原来的第三行数据作为中间数据,可以隐藏掉,同时将 A 列和 G 列也隐藏掉。

因为有相同数据,所以同一个排名会出现多条,相应的,有的名次下就会有空数据,例如因为有两个第 6 名,所以没有就没有第 7 名,为此我们在 B4 单元格的隐藏行表达式中写入:value()==null。剩下就可以根据实际需要设置报表样式了,最终展示结果如下:
5

可以看到,报表已经按照实际运费列的顺序从大到小排序了。

总结
本文的例子中,首先根据单元格的顺序生成排名,然后在通过 to 函数模拟出一片数据进行扩展,再根据排名的名次重新获取需要的数据,这样就可以按照在单元格中经过复杂运算后的结果进行排序了。在实际应用中,还可以在表头中增加超链接,控制升序或者降序排序,具体的做法只需要在点击时控制 to 函数是从小到大还是从大到小扩展就可以了。

转载地址:http://itasx.baihongyu.com/

你可能感兴趣的文章
javascript继承方式详解
查看>>
lnmp环境搭建
查看>>
自定义session扫描器精确控制session销毁时间--学习笔记
查看>>
仿射变换
查看>>
视频直播点播nginx-rtmp开发手册中文版
查看>>
PHP队列的实现
查看>>
单点登录加验证码例子
查看>>
[T-SQL]从变量与数据类型说起
查看>>
occActiveX - ActiveX with OpenCASCADE
查看>>
BeanUtils\DBUtils
查看>>
python模块--os模块
查看>>
Java 数组在内存中的结构
查看>>
《关爱码农成长计划》第一期报告
查看>>
学习进度表 04
查看>>
谈谈javascript中的prototype与继承
查看>>
时序约束优先级_Vivado工程经验与各种时序约束技巧分享
查看>>
minio 并发数_MinIO 参数解析与限制
查看>>
flash back mysql_mysqlbinlog flashback 使用最佳实践
查看>>
mysql存储引擎模式_MySQL存储引擎
查看>>
python类 del_全面了解Python类的内置方法
查看>>