报表也可以根据单元格计算后结果进行排序

简介: 动态排序,报表内计算

熟悉报表的人都知道,报表中实现数据排序通常有三种方法:
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 函数是从小到大还是从大到小扩展就可以了。

目录
相关文章
|
Python
Excel 公式、图表以及单元格的操作
SUM 函数将值相加,可以将单个值、单元格引用或是区域相加,或者将三者的组合相加。例如: =SUM(A1:A3)将单元格 A1:A3 中的值加在一起,=SUM(A1:A3,B1:B3)将单元格 A1:A3 以及单元格 B1:B3 中的值加在一起。语法:SUM(number1,[number2],…),number1(必需):要相加的第一个数字。该数字可以是 4 之类的数字,A1 之类的单元格引用或 A1:A3 之类的单元格范围。number2(可选):要相加的第二个数字。可以按照这种方式最多指定 255 个数字。下面我们来看怎么通过 Python 使用 SUM 函数。代码如下:
200 0
|
Python
【Excel自动化办公Part2】:向某个格子里写入内容、append()插入行、在表格中插入公式、插入行和列、删除行和列、移动格子
【Excel自动化办公Part2】:向某个格子里写入内容、append()插入行、在表格中插入公式、插入行和列、删除行和列、移动格子
222 0
【Excel自动化办公Part2】:向某个格子里写入内容、append()插入行、在表格中插入公式、插入行和列、删除行和列、移动格子
|
数据格式 索引
Excel数据透视表的应用——解决多字段筛选计算占比事务
Excel数据透视表的应用——解决多字段筛选计算占比事务
468 0
Excel数据透视表的应用——解决多字段筛选计算占比事务
成功解决在excel表格中仅在某列内插入一个空白单元格,使其下部的数据整体下移一格
成功解决在excel表格中仅在某列内插入一个空白单元格,使其下部的数据整体下移一格
成功解决在excel表格中仅在某列内插入一个空白单元格,使其下部的数据整体下移一格
拖拽排序-列表布局
拖拽排序-列表布局
185 0
拖拽排序-列表布局
Excel - 表格设置数字下拉数值不变不递增
Excel - 表格设置数字下拉数值不变不递增
988 0
Excel - 表格设置数字下拉数值不变不递增
标准真值表行、列、单元格计算方式
标准真值表行、列、单元格计算方式
271 0
标准真值表行、列、单元格计算方式
Excel:利用Excel内置功能实现对某列表格按照条件进行升降序排列
Excel:利用Excel内置功能实现对某列表格按照条件进行升降序排列
Excel:利用Excel内置功能实现对某列表格按照条件进行升降序排列