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

如何复用多个报表的数据源

时间:2015-01-27 13:26:05      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:报表应用   报表数据源   复用   集算报表   计算引擎   

   在报表项目中,经常有多个报表的数据源计算方法有共同的部分。使用润乾集算报表,采用可挂接算法的方案时(参见http://blog.raqsoft.com.cn/?p=644),可以更方便地将这些共同部分用同一个脚本来完成,从而实现算法复用。算法复用的好处是:一个算法只实现一次,不会出现同一个算法多处实现导致不一致的情况。同时也避免一个算法实现很多次的重复劳动,减轻工作量。

技术分享

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

技术分享

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

技术分享

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

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

技术分享

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

技术分享

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

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

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

技术分享

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

技术分享

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

技术分享

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

技术分享

     

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


如何复用多个报表的数据源

标签:报表应用   报表数据源   复用   集算报表   计算引擎   

原文地址:http://blog.csdn.net/u012388497/article/details/43192859

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