码迷,mamicode.com
首页 > 其他好文 > 详细

润乾集算报表优化应用结构之报表数据源复用

时间:2015-02-03 15:20:58      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:报表应用系统结构优化   集算报表   报表数据源复用   

   在报表项目中,经常有多个报表的数据源计算方法有共同的部分。使用润乾集算报表,采用可挂接算法的方案时(可参考【润乾集算报表优化应用结构之可挂接算法】),可以更方便地将这些共同部分用同一个脚本来完成,从而实现算法复用。算法复用的好处是:一个算法只实现一次,不会出现同一个算法多处实现导致不一致的情况。同时也避免一个算法实现很多次的重复劳动,减轻工作量。

技术分享

   下面通过两个报表复用同一个算法的例子来看一下具体的实现方法。报表1是“员工绩效工资明细表”,可以按照STATE来选择不同的员工例如:STATE=="California" 或者STATE=="Texas",如下图:

技术分享

   报表2是“部门绩效工资汇总表”(全体员工,不按照STATE过滤),如下图:

技术分享

   报表12都要计算员工的绩效工资,算法是比较复杂的。如果两个报表都实现一遍这个计算,会有两个问题:一个是重复工作费时费力,另一个是一旦计算方法发生改变,就要修改两个地方,可能会出现不一致。使用集算报表可以用一个计算脚本来编写绩效工资算法,实现两个报表复用一个脚本。

集算报表还可以完成动态表达式解析,所以可以接收非常灵活的过滤条件或者其他表达式。集算引擎的参数定义如下图:

技术分享

集算报表的计算脚本(salary.dfx)如下:

技术分享

   A3:判断过滤条件是否为空,如果为空就不执行过滤B3

   B3:按照条件过滤。这里使用宏来实现动态解析表达式,其中的where就是传入参数。集算器先计算${…}里的表达式,将计算结果作为宏字符串值替换${…}之后解释执行。这个例子中最终执行的是:=A2.select@o(STATE=="California" || STATE=="Texas")

   A13单元格是将结果返回给报表页面。A4A13之间是绩效工资的计算方法,不是本文重点,这里不详细介绍。如果where= STATE=="California" || STATE=="Texas"A13的返回结果如下:

技术分享

   如果where=””A13的返回结果如下:

技术分享

   报表1的模板设计如下图:

技术分享

   报表1数据集ds1定义如下:

技术分享

    其中的where参数也可以从报表1的参数中传入,实现页面上的条件选择,具体做法参见集算报表教程。

   报表2的模板设计如下图:


技术分享

    报表2数据集ds1定义如下:

技术分享

  虽然报表内容、样式不同,但是两个报表的数据集都调用一个共同的脚本文件。如果将来绩效工资的计算方法发生变化,只要修改salary.dfx即可,报表12的模板文件不用改变。



本文出自 “高性能报表数据计算” 博客,请务必保留此出处http://report5.blog.51cto.com/8028595/1611042

润乾集算报表优化应用结构之报表数据源复用

标签:报表应用系统结构优化   集算报表   报表数据源复用   

原文地址:http://report5.blog.51cto.com/8028595/1611042

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!