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

  • 时间:
  • 浏览:0

都需用看了,报表却说我 按照实际运费列的顺序从大到小排序了。

总结

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

而假如的第三行数据作为底下数据,都需用隐藏掉,并肩将 A 列和 G 列也隐藏掉。

却说我 有相同数据,却说我同四个排名会出现 多条,相应的,有的名次下就会有空数据,类事却说我 有四个第 6 名,却说我这么 就这么 第 7 名,为此大伙儿在 B4 单元格的隐藏行表达式中写入:value()==null。剩下就都需用根据实际需用设置报表样式了,最终展示结果如下:

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

熟悉报表的人都知道,报表中实现数据排序通常有四种 措施:

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( 工业产值),却说我 按照四种 汇总值对组进行逆序排列

都需用看了,这四种 措施有四个共性,排序字段的数据都存储在数据库中。却说我 ,在实际使用中,数据一直会在报表单元格中进行运算(比如单元格数据乘以四个系数却说我 再和或多或少单元格数据相加等),而此时却说我 要根据计算后的单元格数据进行排序,上述四种 措施就无法做到了。

下面,大伙儿就介绍一下如可实现四种 需求,基于单元格计算后的数据进行排序。

思路

大伙儿首先分析一下排序操作是为什么么做的:按照某列数据排序,实际上是先算出该数据的“排名”,却说我 根据排名的“顺序”对数据进行重新排序。却说我 主要有两累积操作,一是如可生成排名,二如可根据排名重新对数据排序。

下面就按照四种 思路实现四个实际例子。

首先,按照用户需求先将数据取出来以网格式措施展现,设计后的模板如下:

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

接下来先生成 E3 的排名,排名写法比较固定,在报表后追加一列,在 F3 单元格中写入表达式:=count(E3[`0]{E3>$E3})+1,统计 E3 扩展出来的列中大于当前 E3 单元格的数量加 1,即为当前 E3 的排名。

好,现在排名生成了,看下如可基于排名重新对数据进行排序。

在报表第一列前插入一列,下边追加一行,在 A4 单元格中写入表达式:=to(1,count(B3{})),根据扩展区域重新模拟出一片扩展,如下图:

都需用看了,在 B 列中促使取到相应的 ID 值,其中,排名 6 和 8 需用两条记录,这是却说我 运货费单元格有相同的值,却说我排名相同。

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