来源:http://community.jaspersoft.com/questions/847490/how-get-annual-growth-rate-crosstab 。
交叉表的每一列都是动态生成的,进行列间计算时需要动态引用,用Jasper脚本实现此类需求有一定难度,用集算器在数据准备阶段实现则相对简单,下面用例子来说明。
数据库表store存储着多种产品在2014、2015年的销售量,需要用交叉表呈现每种产品每年的销售量,并计算出各产品的年增长率。部分源数据如下:
集算器代码:
A1:取出store表的记录。
A2:追加各产品的年增长率。group按产品分组,run对每组数据依次计算,record追加记录,~(i)表示当前组中的第i条记录。A2的计算结果如下:
A3:将计算结果返回给报表。集算器对外提供JDBC接口,报表工具会将集算器识别为普通数据库。
用Jasper设计最简单的交叉表:
预览后可以看到报表结果:
报表调用集算器的方法和调用存储过程一样,比如将本脚本保存为AnnulaRate.dfx,则在Jasper的SQL设计器中可以用call AnnulaRate ()来调用并传入参数。