来源:http://community.jaspersoft.com/questions/851148/loop-jasper。
根据贷款额计算贷款分期时需要进行循环计算和跨行计算,用存储过程或Scriptlets实现的难度较大,用集算器协助Jasper可以轻松实现,下面用例子来说明。
库表loan存储着贷款信息,包括贷款总额、按月分期数、年利率。要求用Jasper实现一张分组表,在每条贷款信息下列出各期明细,包括:当期还款额、当期利息、当期本金、剩余本金。表loan的部分数据如下:
用集算器准备数据:
A1:执行SQL,取出loan中的记录。
A2:给A1增加计算列:月利率mRate和每期还款额mPayment。结果如下:
A3:根据贷款信息计算各期明细。A2.()是循环函数,可对A2的成员依次进行计算,其内部的”()”是分步计算,返回最后一个逗号的计算结果。函数new用来生成新的二维表。A3的计算结果是层次数据,如下:
A4:合并层次数据,形成分期明细二维表。
A5:返回结果给报表。集算器对外提供JDBC接口,报表工具会将集算器识别为普通数据库。
下面用Jasper设计一张简单的分组表,模板如下:
预览后可以看到报表结果:
报表调用集算器的方法和调用存储过程一样,比如将本脚本保存为loan.dfx,则在Jasper的SQL设计器中可以用call loan()来调用并传入参数。