欢迎来到天天文库
浏览记录
ID:52767832
大小:443.02 KB
页数:4页
时间:2020-03-30
《润乾集算报表优化应用结构之算法复用.pdf》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、润乾集算报表优化应用结构之算法复用在报表项目中,经常有多个报表的数据源计算方法有共同的部分。使用润乾集算报表,采用可挂接算法的方案时(可参考【润乾集算报表优化应用结构之可挂接算法】),可以更方便地将这些共同部分用同一个脚本来完成,从而实现算法复用。算法复用的好处是:一个算法只实现一次,不会出现同一个算法多处实现导致不一致的情况。同时也避免一个算法实现很多次的重复劳动,减轻工作量。润乾集算报表展现报表报表引擎模板1模板2结果结果集算集算引擎脚本原始数据数据库、文件等数据源润乾集算报表算法复用下面通过两个报表复用同一个算法的例子来看一下具体的
2、实现方法。报表1是“员工绩效工资明细表”,可以按照STATE来选择不同的员工例如:STATE=="California"或者STATE=="Texas",如下图:报表2是“部门绩效工资汇总表”(全体员工,不按照STATE过滤),如下图:报表1、2都要计算员工的绩效工资,算法是比较复杂的。如果两个报表都实现一遍这个计算,会有两个问题:一个是重复工作费时费力,另一个是一旦计算方法发生改变,就要修改两个地方,可能会出现不一致。使用集算报表可以用一个计算脚本来编写绩效工资算法,实现两个报表复用一个脚本。集算报表还可以完成动态表达式解析,所以可以接
3、收非常灵活的过滤条件或者其他表达式。集算引擎的参数定义如下图:集算报表的计算脚本(salary.dfx)如下:ABC1=connect("demo")2=A1.query("selectp.EMPLOYEEIDasempID,p.EVALUATIONasscore,e.deptasdept,e.NAMEasempName,p.BONUSasbaseSalaryfromperformanceasp,employeeasewherep.EMPLOYEEID=e.EID”)3if(trim(where)!="")=A2.select@o(${w
4、here})4=A2.derive(PRETAX)5=sales=A4.select(DEPT=="Sales")6forsalesifA6.BASESALARY<2000>A6.PRETAX=A6.BASESALARY*(1+A6.SCORE/100)7elseifA6.BASESALARY<4000>A6.PRETAX=A6.BASESALARY*(1+A6.SCORE*0.9/100)8elseifA6.BASESALARY<6000>A6.PRETAX=A6.BASESALARY*(1+A6.SCORE*0.8/100)9else
5、>A6.PRETAX=A6.BASESALARY*(1+A6.SCORE*0.6/100)10=normal=A4.select(DEPT!="Sales")11=A10.run(PRETAX=BASESALARY)12=sales
6、normal>A1.close()13resultA12A3:判断过滤条件是否为空,如果为空就不执行过滤B3。B3:按照条件过滤。这里使用宏来实现动态解析表达式,其中的where就是传入参数。集算器先计算${…}里的表达式,将计算结果作为宏字符串值替换${…}之后解释执行。这个例子中最终执行的是:=A2.se
7、lect@o(STATE=="California"
8、
9、STATE=="Texas")。A13单元格是将结果返回给报表页面。A4到A13之间是绩效工资的计算方法,不是本文重点,这里不详细介绍。如果where=STATE=="California"
10、
11、STATE=="Texas"。A13的返回结果如下:如果where=””,A13的返回结果如下:报表1的模板设计如下图:报表1数据集ds1定义如下:其中的where参数也可以从报表1的参数中传入,实现页面上的条件选择,具体做法参见集算报表教程。报表2的模板设计如下图:报表2数据集ds1定义如下
12、:虽然报表内容、样式不同,但是两个报表的数据集都调用一个共同的脚本文件。如果将来绩效工资的计算方法发生变化,只要修改salary.dfx即可,报表1、2的模板文件不用改变。
此文档下载收益归作者所有