在制作业务报表时,经常会遇到一些单独依靠报表工具难以解决的问题 。本文将针对几个 Jasper 报表工具用户在国外论坛中提出的现实问题,介绍如何用集算器 SPL 语言加以解决的方案 。这里的解决方案其实并不仅适用于 Jasper,对其它报表工具也同样适用 。
1. 计算账户各期余额数据文件 data.csv 存储着某账户各期资金存取情况,在已知账户初始余额为 43 的情况下,需要根据该文件计算出各期余额,部分源数据如下:
想要得到的报表结果如下:
根据存取金额计算各期余额时需要进行跨行计算,可以用 Jasper 表达式实现,但实现步骤复杂且有一定难度,而通过集算器协助 Jasper 则可以轻松实现 。具体的集算器 SPL 代码如下:
A1 读入文件,选项 @tc 表示文件有标题行、以逗号为分隔符 。
A2 计算各期余额并将计算结果返回给报表 。其中,设置账户初值 t 为 43,然后在 A1 序表中增加一个计算列,其值为上期余额 + 本期流入 – 本期流出 。显然这里的计算结果就是希望报表呈现的内容 。
将以上 SPL 代码存为文件 balance.dfx 。
为了在报表中呈现计算结果,可以利用集算器对外提供 JDBC 接口 。在报表工具中通过建立 JDBC 数据源引入集算器脚本,而报表调用集算器定义的方法和调用存储过程一样,在 Jasper 的 SQL 设计器中可以用 call balance() 来调用并传入参数 。详细步骤请参看《JasperReport 调用 SPL 脚本》 。
然后,在 Jasper 中设计最简单的 list 表,模板如下:
预览后可以看到报表结果,和我们要求的一样:
2. 计算贷款分期数据库表 loan 存储着贷款信息,包括贷款总额、按月分期数、年利率 。要求实现一张分组表,在每条贷款信息下列出各期明细,包括:当期还款额、当期利息、当期本金、剩余本金 。
表 loan 的部分数据如下:
想要得到的报表结果如下图:
根据贷款额计算贷款分期时需要进行循环计算和跨行计算,用存储过程或 Scriptlets 实现的难度较大,而同样使用集算器协助 Jasper 就可以轻松实现 。编写集算器 SPL 代码如下:
A1 执行 SQL,取出 loan 中的记录 。
A2 在序表 A1 中新增计算列月利率 mRate 和每期还款额 mPayment 。结果如下:
A3 根据贷款信息计算各期明细 。A2.()是循环函数,可对 A2 的成员依次进行计算,“()”内的代码将分步计算,最终返回最后一个逗号的计算结果 。其中函数 new 用来生成新的二维表 。A3 的计算结果是层次数据,如下:
经验总结扩展阅读
- 老公婚前婚后怎么判若两人?
- 是什么星座女偷走天蝎座男的心呢 是什么星座怎么查
- 2020年10月19号出生的女孩怎么起名字,用什么字涵义好
- 表白|男生应该怎么追不喜欢自己的女生?掌握这3点让她迷上你
- 空气加湿器怎么使用
- 雷司令白葡萄酒怎么喝
- 蓝牙耳机怎么清除配对
- 裙子太透明怎么处理
- 支付宝余额宝冻结的金额怎么取出来?
- 人字的来历是什么 人字的来历是怎么样的