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

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

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

目录
相关文章
|
算法 计算机视觉
【MATLAB 】 EWT 信号分解+希尔伯特黄变换+边际谱算法
【MATLAB 】 EWT 信号分解+希尔伯特黄变换+边际谱算法
401 0
|
存储 运维 Serverless
Serverless 应用引擎产品使用之阿里函数计算中返回函数计算2.0控制台如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
150 1
|
编解码 数据库 Android开发
安卓应用开发:打造高效用户界面的五大技巧
【5月更文挑战第18天】在竞争激烈的应用市场中,一个流畅且直观的用户界面(UI)对于安卓应用的成功至关重要。本文将探讨五种提升安卓应用用户界面性能的技巧,包括合理布局设计、优化资源使用、利用硬件加速、内存管理以及响应式编程。通过这些方法,开发者可以创建出既美观又高效的应用体验,从而吸引和保留用户。
|
前端开发 数据安全/隐私保护 UED
.NET 8 通用权限框架 前后端分离,开箱即用
【8月更文挑战第1天】基于.NET 8 的通用权限框架,采用前后端分离设计,实现真正的开箱即用!无需繁琐配置,一键启动权限管理新体验。利用.NET 8 的高性能与稳定性,结合灵活的前后端开发模式,显著提升开发效率,缩短项目周期。无论大小项目,皆能轻松应对,立即体验高效开发的新篇章!
205 1
|
机器学习/深度学习 人工智能 算法
AI大咖说-关于深度学习的一点思考
周志华教授探讨深度学习的成效,指出其关键在于大量数据、强大算力和训练技巧。深度学习依赖于函数可导性、梯度下降及反向传播算法,尽管硬件和数据集有显著进步,但核心原理保持不变。深度意味着增加模型复杂度,相较于拓宽,加深网络更能增强泛函表达能力,促进表示学习,通过逐层加工处理和内置特征变换实现抽象语义理解。周志华教授还提到了非神经网络的深度学习方法——深度森林。5月更文挑战第12天
198 5
|
存储 缓存 监控
我在架构设计和代码开发中的一些常用原则
在日常的开发和设计过程中,大家对技术设计上的一些问题往往会面临很多的选择,不同的人会有不同的选择。本文介绍的就是我在工作中遇到的一些问题而总结和使用到的一些常用原则。
我在架构设计和代码开发中的一些常用原则
|
传感器 前端开发 网络虚拟化
电赛中常用的模块电路设计
电赛中常用的模块电路设计
614 0
电赛中常用的模块电路设计
|
机器学习/深度学习 数据采集 自然语言处理
OCR文字识别技术总结(五)
CRNN是最早一批采用CNN与RNN结合的方式进行自然场景图片识别的基于深度学习的算法。文中提出的CRNN算法是一种能将特征提取、序列建模和转录整合到统一框架中的新型神经网络架
1164 0
OCR文字识别技术总结(五)
|
安全 Java
Java实现生产者消费者的四种方法
Java生产者和消费者问题是线程安全模型中的经典问题:生产者和消费者在同一个时间段共用同一个存储空间,生产者向存储空间中添加产品呢,消费者取走产品,当存储空间为空时,消费者阻塞,当存储空间满时,生产者阻塞
Java实现生产者消费者的四种方法