带隐藏格报表的性能优化方案

报表中可以通过隐藏格进行有效的辅助计算,但如果报表携带大量隐藏格,又会对性能产生很大影响。这是因为大量隐藏格会占用内存、降低运算速度。而且隐藏单元格除了单元格值外,还同时记录了很多显示属性值,比如:字体、颜色、显示方式等等。虽然隐藏单元格并不显示,但是这些属性还在,如果带着这些属性计算,同样也会影响计算速度。

下面这个《1997 年订单情况统计》报表就是一个典型的隐藏格影响性能的例子:

这个报表的“比去年同期”是指与去年同月份的比值,无对应月份则为空;要求只显示本年数据。

实现这个报表需要通过格间计算,将 1996 年的数据读取到报表单元格中,以便完成比上期、比去年同期的计算,但 1996 年的单元格并不显示,因此需要隐藏起来。所以,这个报表的实际单元格数量要比客户看到的多的多。我们可以通过润乾报表的格间计算来看一下具体的实现:

从上图可以看到,1996 年的行也在报表中,只是隐藏了起来。另外还有“年”列也是隐藏的。

针对这种情况,可以考虑采用润乾报表的解决方案,将格间计算转移到集算引擎,从而避免大量隐藏格和显示属性对计算性能的影响。润乾报表方案和传统方案在体系结构上的对比如下图所示:

具体的实现方式如下:

1、先在集算器设计同期比、上期比的脚本(sales.dfx):

  A
1 =connect(“demo”)
2 =A1.query(“SELECT year( 订购日期) 年,month(订购日期) 月,sum(单价 * 数量) 金额,null 比上期,null 比去年同期 FROM 订单, 订单明细 WHERE 订单. 订单 ID = 订单明细. 订单 ID AND (year( 订单. 订购日期)=? or year(订单. 订购日期)=?)group by year( 订购日期) ,month(订购日期) order by year(订购日期) ,month(订购日期)”,arg_year-1,arg_year)
3 =A1.close()
4 =A2.run(比上期 = 金额 / 金额 [-1])
5 =A4.sort(月)
6 =A5.run(比去年同期 =if( 年 == 年 [-1]+1 && 月 == 月 [-1], 金额 / 金额 [-1],null))
7 =A6.select(年:arg_year)
8 return A7

代码说明:

A1:连接数据源 demo。

A2:取出两年的订单数据,按照年月汇总、排序,arg_year 是脚本(及报表)的输入参数。

A3:关闭数据连接。

A4:计算比上期,这里注意到使用 [-1] 来引用上一条记录。

A5:按月份排序。

A6:计算相同月份和上一年的比值,即同期比。

A7:只选出本年数据,通过 A8 为报表返回结果集。

2、再在润乾报表中定义报表参数和集算数据集:

3、在润乾报表设计器中设计报表如下:

4、最后运行报表,输入参数即可得到前面的报表。从上图中可以看到,设计的报表中没有隐藏格和复杂的公式,设计变得很简单,实际运行性能也得到了提高。

原文地址:https://www.cnblogs.com/xiaohuihui-11/p/12015948.html

时间: 2024-10-13 04:07:45

带隐藏格报表的性能优化方案的相关文章

多层次报表的性能优化方案

多层次报表是常见的报表形式,典型的如分组报表和主子报表.其中的关联运算(组与明细.主表和子表)由于有层次而不能直接在数据库中完成,需要在报表端完成.而报表端一般只能采用排序和遍历的方法实现关联,性能又比较差. 本文介绍的润乾报表可以利用层次数据集(需要结合集算器实现)在数据源计算过程中完成关联计算,并且将有层次的结果集直接传送给报表进行呈现,从而做到在关联计算中充分利用集算器的高效算法,达到优化性能的目标. 下面通过一个主子报表的实例看一下使用过程与效果. 报表描述 使用订单表和订单明细表,查询

前端性能优化方案

前端开发性能优化方案 在JS中尽量减少闭包的使用(原因:闭包会产生不释放的栈内存) A:循环给元素做事件绑定的时候,尽可能的把后期需要的信息(例如索引)存储到元素的自定义属性上,而不是创建闭包存储 B:可以在最外层形成一个闭包,把一些后续需要的公共信息进行存储,而不是每一个方法都创建闭包(例如单例模式) C:尽可能的手动释放不被占用的内存 ... 尽量合并CSS和JS文件(把需要引入的CSS合并为一个,JS也是合并为一个),原理是在减少HTTP请求次数,尽可能的把合并后的代码进行压缩,减小HTT

mysql 性能优化方案 (转)

网 上有不少MySQL 性能优化方案,不过,mysql的优化同sql server相比,更为麻烦与复杂,同样的设置,在不同的环境下 ,由于内存,访问量,读写频率,数据差异等等情况,可能会出现不同的结果,因此简单地根据某个给出方案来配置mysql是行不通的,最好能使用 status信息对mysql进行具体的优化. mysql> show global status; 可以列出mysql服务器运行各种状态值,另外,查询mysql服务器配置信息语句: mysql> show variables; 一

kvm性能优化方案

kvm性能优化方案 kvm性能优化,主要集中在cpu.内存.磁盘.网络,4个方面,当然对于这里面的优化,也是要分场景的,不同的场景其优化方向也是不同的,下面具体聊聊这4个方面的优化细节. cpu 在介绍cpu之前,必须要讲清楚numa的概念,建议先参考如下两篇文章 CPU Topology 玩转cpu-topology 查看cpu信息脚本: #!/bin/bash # Simple print cpu topology # Author: kodango function get_nr_proc

GNU Linux高并发性能优化方案

/*********************************************************** * Author : Samson * Date : 07/14/2015 * Test platform: * gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2 * GNU bash, 4.3.11(1)-release (x86_64-pc-linux-gnu) * Nginx version: * Nginx 1.6.2 * Nginx 1.8.0

JDBC性能优化方案

近期用到了利用JDBC查询Oracle数据库,但是查询效率不尽人意,研究了一下JDBC方面可以优化的地方,在这里跟大家分享一下. 1.设置最优的预取值 defaultRowPrefetch:预取条数默认值 defaultBatchValue:触发查询操作的批量请求值 这两个参数的默认值都是10,我们可以通过增加这两个参数值来减少数据库请求以提高查询效率,当然具体值大小要视具体情况而定. 2.通过连接池获取连接 创建连接的代价很大,通过连接池获取连接可省去创建连接时间. 3.选择合适的Statem

Glusterfs目录ls性能优化方案分析

Glusterfs目录ls性能优化方案分析 目的和优化思路 讨论了glusterfs对文件系统爬虫rsync/ls目录性能的现有优化措施和可能的进一步优化方案.优化思路是减少本地文件系统的元数据操作,减少fuse client的负载,减少req的网络轮询次数,减少一次网络通信时间,缓存预抓取,并发,异步,bulk 传输 fuse readdirplus centos 6.4最新内核,支持fuse readdirplus.微调mount timeout参数. FUSE: Adaptive NFS-

web前端9大性能优化方案汇总

网页的性能问题是产品开发过程中的一个重要的环节,在产品成功地把功能实现后,性能能好与坏就直接影响了用户体验,以至于影响了产品的成败! 作为web前端开发者,对前端部分进行性能上的优化,是责无旁贷,刻不容缓的工作.下面简介一下9种性能优化方案. 一.罪魁祸首是http请求 一般网页,80%的响应时间花在下载网页内容(images, stylesheets, javascripts, scripts, flash等).减少请求次数是缩短响应时间的关键!可以通过简化页面设计来减少请求次数,但页面内容较

(转)Web性能优化方案

第一章 打开网站慢现状分析 在公司访问部署在IDC机房的VIP网站时会感觉很慢.是什么原因造成的?为了缩短页面的响应时间,改进我们的用户体验,我们需要知道用户的时间花在等待什么东西上. 可以跟踪一下我们的登录页面,如下图所示 从上图我们可以分析知道,HTML文档只占了总响应时间的20%,其它80%响应时间用来下载JS.CSS.图片等组件.所以WEB前端有很大的优化空间,我们将从WEB的前端优化.后端优化两方面综合考虑给出WEB的性能优化方案. 第二章 WEB前台的优化规则 一.尽量减少 HTTP