用 Java 做报表数据准备有什么缺点?

 

有些报表的数据准备动作比较复杂,不能简单地用 SQL 写出来,于是常常会用 Java 来完成报表的数据准备。这虽然很灵活,但缺点也十分明显。在实现难度上,Java 缺乏专门面向结构化数据计算的类库,即使加入 Stream 也无明显改善,简单的计算就要写很长代码,复杂计算实现更是困难,而且 Java 对各种数据源的接口也非常原始,这都会使代码复杂很多。在运维方面,Java 由于是编译型语言,报表数据源修改就要重启应用十分不便。在应用结构方面,Java 代码需要跟主程序一起部署,这样不利于报表模块分离单独维护。

使用集算器 SPL 就可以解决这些问题。集算器是一款开源数据处理引擎,擅长结构化数据计算,计算类库丰富可以满足复杂报表数据准备工作。同时,集算器天然支持多种数据源(RDB、NoSQL、Json、CSV、Webservice 等),还可以实现跨数据源的混合计算。

集算器可以像 Java 一样分多步实施计算,并且集算器脚本 SPL解释执行支持热切换。SPL 的敏捷语法使得在 Java 中很难实现的运算通过 SPL 几行就可以完成。比如:

根据月度销售额表查询每次第一个月比上季同月的增长额,及销售情况(有些月可能无数据)。SPL 实现如下:


A

1

=db.query(“select * from sales”).align@1([1,4,7,10],smonth)

2

=A1.new(#:month,amount,amount-amount[-1]:growth)

此外,集算器可以作为嵌入式 JDBC 与报表工具集成使用,报表工具通过 JDBC 方式访问 SPL 计算结果,就像访问数据库一样。

imagepng

集算器与报表应用集成后,报表模块就可以独立于主程序单独运维,这样即使资源占用较多的报表应用宕机也不会影响主应用,进一步保障系统安全。