用润乾报表解决多层指标体系实时报表计算问题

问题描述:

这是农业银行某项目应用的实际场景,该财务项目使用多层次的指标体系进行日常指标分析,

为后面简单理解报表实现思路,先把指标体系进行抽象:

典型指标分析报表如下面图示(需要制作的报表):

参数录入界面

报表界面

解决思路:

第一个办法-最简单思路,数据异步计算

数据库中增加存储指标中间数据的表,增加定期数据计算抽取任务,报表取数时直接从上述中间表中取数,这样做的好处是报表开发工作简单,报表计算速度快,缺点是如果指标要经常调整,整个数据库和报表开发维护的工作会让人无法承受。

第二个思路-即时报表计算,每次都分解指标结构来实时计算数据。

报表设计层面把指标分解成可直接取数的字段公式(基础指标),分解后的公式通过润乾报表的宏把多个指标转成sql取数对象里的中间字段,由于每次查询的指标数量不确定,所以报表上要通过动态列技术按照客户提出的需求对数据进行组织。该问题在数据仓库的星形结构中比较典型,例如现在的客户为方便cognos模型定义和提高取数效率,事实表会变成:

日期

机构

币种

基础指标1

基础指标2

基础指标3

基础指标4

基础指标…..

而在设计报表时,更好用的数据表格式应该是:

日期

机构

币种

指标名称

指标值

基础指标1

基础指标2

基础指标3

基础指标4

基础指标5

上表中的数据用报表设计工具来做,不论是交叉表还是分组等报表,做起来都是最舒服的模式。

该问题的通用描述是:上一种格式称作”宽表”,下面的格式称作”窄表”,宽表是出于提高OLAP建模的方便和效率目的设计的,所以在数据层面的初步处理是先从窄表转为宽表,在宽表成为数据基础之后,才出现综合查询方面的固定报表格式设计问题,简单的报表工具在使用窄表制表时没有问题,但是对付宽表时就出现极大的困难,有关基于宽表报表的实现办法,准备在另外的文章中介绍,本文只介绍多层级指标实时分解的思路。

第二个思路的好处是可以应对任何的指标公式变化,缺点是在数据量大的时候,报表的取数和计算应该会慢一些。

实际应用:

下面介绍第二中思路在例子使用时的实现思路,用户首先会输入报表需要的参数,如下面表单中的参数内容:

这里重点关注指标,由于指标的层次体系已经建立,所以在指标选定时可以任意指定不同层次的指标,例如:可以写作

指标一指标D指标D-指标B

按照前文介绍的指标体系,”指标一”是二级衍生指标,”指标D“是一级衍生指标,而”指标D-指标B“完全是自定义的临时指标定义表达式。

在这样的指标提交时,报表接收之前会在程序中对指标进行翻译,例如上述的指标一会被翻译成数据结构层面的表和字段表达式:

指标A +指标B+指标C

所以上述表单中输入的指标参数会被报表上的字符串数组接收

[指标A +指标B+指标C , 指标D , 指标D-指标B]

而上述的字符串数组可以通过润乾的宏工具直接转成数据集动态sql的一部分,这样就可以在sql执行时动态算出指标数据。

总结:上述工作的关键在于表单提交时对指标参数的翻译处理,这里不考虑中间数据处理,不考虑报表之间的数据调用,而是直接按照指标的层级定义,将指标参数映射成最基础的字段表达式,而这个表达式通过润乾宏可以直接成为取数sql的一部分。在客户的需求实现过程中证明这个思路是可行的,具有良好的实用性。

关于例子中基于宽表的报表实现内容,请参见《基于数据仓库中宽表结构的报表设计技巧》

热门文章