报表如何根据单元格运算后的结果排序
网格式报表展示时,为了查看数据方便,往往需要按照某些字段进行排序,在报表中增加排序方式很多:
一:可以在数据取数时在 sql 语句里增加 order by 操作
二:报表中 select 函数可以指定排序字段,如 ds1.select(编号, ,,; 姓名:1),可以指定按照姓名字段排序
三:group 函数可以根据某些字段汇总后的结果排序,比如 ds1.group(地区; 地区:1; ds1.sum( 销售额):-1),可以先对销售额字段汇总,然后根据汇总后的数据排序展示
到时候可以根据具体需求选择对应的排序方式,具体可以看下对应的函数帮助,但是这些排序方式都是针对数据集中的数据进行操作,实际项目中通常会有一些单元格间的计算,然后需要根据计算后的结果进行排序,下面看些这种需求在润乾报表中如何实现。
按照实际需求设置报表模版,一般多为网格式报表,具体细节这里就不用说了,如下图:
这里可以看到,实发工资这列是根据单元格的关系计算出来的(实际中一些运算的排序也是可以写在 select 函数中的,这里用这个实例介绍下新的方法),要根据这列排序,可以先算出这列数据的排名,然后根据这个排名结果生成顺序,在报表中增加行列,如下:
H3 单元格中写入表达式:=count(G3[`0]{G3>$G3})+1,这里根据 G3 单元格的值生成排名,想要根据排名结果进行排序的话,在 A4 中写入表达式:=to(1,count(B3{})),这里会根据数据内容新扩展出一片区域,可以在这片区域根据排名结果取出对应的数据展示。在 B4 中写入公式:=B3{H3==$A4},H3 单元格是排名,A4 是根据 to 函数扩展出来的序号,这个表达式表示单元格根据条件(排名和当前扩展出来的 A4 的值是否相同)取出对应的编号(B3),并将 B4 单元格属性栏中的扩展方式属性设为”纵向扩展”,预览看下结果:
可以看到,新生成的数据第 5 行对应了三条数据,是因为实发工资中有三个人相同,导致排名结果相同,所以会出来了三条,那对应的其他行就会有空值,所以需要在 B4 单元格的隐藏行表达式中写入 value()==null,将值为空的那些行隐藏掉。这里取出了编号列数据,那么其他单元格就可以根据编号列数据取出对应字段的值,模版如下:
将辅助行列隐藏掉,最终结果如下:
可以看到,报表最终结果会根据实发工资这里进行排序展示,这里主要是通过增加排名方式算出了数据的排名,然后再通过 to 函数生成一片新的数据列,根据排名结果生成新的数据。