ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-12-10 12:54:18  阅读:180  来源: 互联网

标签:报表 订购 单元格 订单 year 优化 隐藏


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

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

imagepng

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

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

imagepng

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

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

imagepng

具体的实现方式如下:

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、再在润乾报表中定义报表参数和集算数据集:

imagepng

imagepng

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

imagepng

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

标签:报表,订购,单元格,订单,year,优化,隐藏
来源: https://www.cnblogs.com/xiaohuihui-11/p/12015948.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有