多层次报表的性能优化方案
多层次报表是常见的报表形式,典型的如分组报表和主子报表。其中的关联运算(组与明细、主表和子表)由于有层次而不能直接在数据库中完成,需要在报表端完成。而报表端一般只能采用排序和遍历的方法实现关联,性能又比较差。
本文介绍的润乾报表可以利用层次数据集(需要结合集算器实现)在数据源计算过程中完成关联计算,并且将有层次的结果集直接传送给报表进行呈现,从而做到在关联计算中充分利用集算器的高效算法,达到优化性能的目标。
下面通过一个主子报表的实例看一下使用过程与效果。
报表描述
使用订单表和订单明细表,查询每个订单详情以及该订单下的订单明细,报表格式如下:
环境及数据描述
测试机型:Dell Inspiron 3420
CPU:Intel Core i5-3210M @2.50GHz *4
RAM:4G
HDD:西数 WDC(500G 5400 转 / 分)
操作系统:Win7(X64) SP1
JDK:1.6
数据库:hsqldb
润乾报表版本:2018
表数据
表名 | 字段数 | 数据量 | |
---|---|---|---|
订单表 | 15 | 854 | |
订单明细表 | 5 | 434315 |
实现步骤
编写计算脚本
首先使用集算器(专门用于数据计算,为报表提供数据源支持的工具)编写计算脚本(orders.dfx),完成数据计算并返回层次数据集。
A | |
---|---|
1 | =connect(“demo”) |
2 | =A1.query(“select 订单 ID, 订单编号, 发货日期, 到货日期, 客户 ID, 货主名称, 运货商, 运货费, 货主城市 from 订单”) |
3 | =A1.query@x(“select * from 订单明细”) |
4 | >A2.run(订单编号 =A3.select( 订单 ID==A2. 订单编号)) |
5 | return A2.select(订单编号!=[]) |
A1:连接数据源;
A2-A3:分别查询订单和订单明细表数据;
A4:根据订单编号关联订单和订单明细表;
A5:报表返回订单编号不为空的结果集。
编制报表
新建报表模板后,数据集选择“集算器”,在数据集编辑窗口指定上述编辑好的 dfx 文件,完成数据集创建。
报表中层次数据集效果
设置报表模板表达式:
不同于在报表中关联,使用层次数据集可通过集算脚本返回的单个结果集完成主子报表的制作,从而获得了更高的性能。为了对比,下面看一下在报表中直接关联的实现方式:
不使用层次数据集实现
数据集
ds1: select 订单 ID, 订单 ID 订单编号, 发货日期, 到货日期, 客户 ID, 货主名称, 运货商, 运货费, 货主城市 from 订单
ds2: select * from 订单明细
报表模板
效果对比
下表对比了使用层次数据集前后的时间开销,单位为秒。
可以看到,使用层次数据集带来了明显的效果提升。这是因为在单元格中完成主子表的关联,只能使用遍历算法(针对单条主记录去寻找关联的子记录),因此效率不高。而集算器采用了更高效的 hash 关联方案,事先将所有子记录按 hash 代码对应到主记录上(代码中的 run 函数, 速度比遍历快 5-10 倍),使得主子表的数据源准备(数据计算)效率大大提升,从而可以获得更高的整体运算性能。
转载于:https://www.cnblogs.com/IBelieve002/p/10935920.html
多层次报表的性能优化方案相关推荐
- 多层科目任意组合汇总报表的性能优化 (上)
一 问题背景 我们先来看一张资产负债表: 这是一个典型的中国式复杂报表格式,其复杂并不在于布局,而在于其中"期末余额"的每个单元格都是一个需要独立计算的指标,互相之间几乎没有关系, ...
- kvm性能优化方案---cpu/内存/磁盘/网络
kvm性能优化方案 kvm性能优化,主要集中在cpu.内存.磁盘.网络,4个方面,当然对于这里面的优化,也是要分场景的,不同的场景其优化方向也是不同的,下面具体聊聊这4个方面的优化细节. cpu 在介 ...
- 人人都能掌握的Java服务端性能优化方案
转载自 人人都能掌握的Java服务端性能优化方案 作为一个Java后端开发,我们写出的大部分代码都决定着用户的使用体验.如果我们的代码性能不好,那么用户在访问我们的网站时就要浪费一些时间等待服务器的响 ...
- 亿级数据量系统数据库性能优化方案
一.数据库性能瓶颈主要原因 1.数据库连接 MySQL数据库默认连接为100,我们可以通过配置initialSize.minIdle.maxActive等进行调优,但由于硬件资源的限制,数据库连接不可 ...
- Mysql性能优化方案
2019独角兽企业重金招聘Python工程师标准>>> 内容简介:这是一篇关于mysql 性能优化的文章.网上有不少mysql 性能优化方案,不过,mysql的优化同sql serv ...
- react性能优化方案_React灵敏且性能卓越的Spray + Akka解决方案,以“在Java和Node.js中发挥并发性和性能”...
react性能优化方案 在我以前的文章中,我研究了一个虚拟的交易引擎,并将基于Java的阻止解决方案与基于Node.js的非阻止解决方案进行了比较. 在文章的结尾,我写道: 我怀疑随着Node.js的 ...
- 小猿圈web前端之网站性能优化方案
现在前端不仅要能做出一个网站页面,还要把这个页面做的炫酷,那需要很大程度的优化,那么怎么优化才更好呢?小猿圈总结了一下自己优化的方案,感兴趣的朋友可以看一下. 一般网站优化都是优化后台,如接口的响应时 ...
- mysql 性能优化方案
网 上有不少mysql 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果 ...
- 用友u8服务器优化,用友U8erp软件运行的性能优化方案图文教程
今天一定要给大家分享一下用友U8erp软件运行的性能优化方案图文教程,以下方案来自用友软件官方维护工程师反馈在在处理客户问题的时候,有一类问题较为挠头,就是诸如用友U8服务器效率低下的问题.比如用友U ...
最新文章
- Nessus提示API Disabled错误
- oracle 创建用户、授权、表空间
- Android属性动画 TypeEvaluator
- 如何解决在ASP.NET Core中找不到图像时设置默认图像
- 第 39 章 ThinkPHP--CURD 操作
- android+微信一键关注,一键关注微信公众平台JS代码有哪些?
- Swift学习笔记8--Optional Chaining
- Interval GCD
- jdk1.8中使用aspectjweaver报错 Invalid byte tag in constant pool 18
- matlab去eog,使用ICA去除32通道脑电数据中的眼电
- 计算机网络(第7版 谢希仁)第四章课后习题答案
- 锐捷无线网络优化 之 精准配置无线接入点发射功率
- 文件系统FATFS的移植教程
- 家庭库存管理系统Homebox
- Win10 下安装Ubuntu 16.04双系统详解
- BT服务器架设全攻略
- 万字长文!对比分析了多款存储方案,KeeWiDB最终选择自己来
- qualified-id in declaration before ‘(’ token
- 保研夏令营后记(Lamda、同济、南大、中科大、自动化所)
- DHCP的工作原理 公网IP与私网IP 网络通信的流程与数据包发送 网卡的工作原理 网卡丢包问题
热门文章
- 贯穿你一生的14条社会生计
- declspec(dllexport)与_declspec(dllimport) 异同
- 期待着DELPHI的浴火重生
- request.getParameter(xxxx)获取不到值的一个原因
- 2021总结,2022展望
- Springboot中的缓存Cache和CacheManager原理介绍
- rabbitMq自动创建队列
- JVM逃逸分析(同步省略、标量替换、栈上分配)
- rabbitMq简介及docker安装
- 开机启动脚本/etc/init.d/rcS