高端的报表工具都提供了缓存机制,避免报表重复计算带来额外性能开销,节省CPU资源,实现结果共享。报表在计算过程中,大部分时间(85%以上)都消耗在数据源(准备)上,集算器可以用简单的方法实现数据源的缓存复用,让普通报表工具也拥有缓存机制。
实现数据源缓存有两个关键,根据报表不同的参数和宏生成不同的报表缓存;缓存超时时间需要重新计算。下面以实例说明。
报表描述
根据销售记录表计算各销售人员本年销售额和上年销售额,及其增长率,统计客户数与大客户数(订单金额超过10000)。报表样式如下:
该报表供公司多人查看,如果能实现现有报表工具中没有的缓存机制,能够极大地提升用户体验。
A5:判断以报表名和参数命名的缓存文件是否存在,若存在并且缓存文件未超时,直接读取缓存文件,并返回结果。上述代码设置的超时时间为3600秒,该时间可设置单独的配置文件,使用时直接读入,以方便配置维护;
A6-B21:当缓存文件不存在或超时时,则根据计算逻辑重新计算结果;
B22:根据计算结果,生成缓存文件;
A23:通过集算器JDBC为报表输出数据。
可以看到实现缓存功能的实际代码只有3、4行,简单清晰。
报表调用
集算器封装了标准的JDBC接口供报表工具调用集算器脚本,以润乾报表为例,调用过程如下:
集算器采用的是类存储过程的调用方式,sales为集算器脚本名称。