首页 > 代码库 > 润乾集算报表非常规统计之补齐数据

润乾集算报表非常规统计之补齐数据

    实际系统由于历史设计的原因,业务数据有时无法直接满足报表需求,从而需要在报表中补足数据,以满足报表展现需要。像http://bbs.csdn.net/topics/100074605中提到的问题,就是一个比较典型的此类需求。

    这类问题使用SQL或存储过程往往复杂度过高,如帖子中贴出的答案;而使用一般报表工具则需要不断地重复遍历进行数据关联,还要借助隐藏格和做大量的条件判断才能完成,实现难度和报表性能都不理想。

而润乾集算报表则在完成这类报表时则比较简单,这里以上述链接中的实际业务为例,给出集算报表的实现方案。

报表背景

源数据如下:

wKiom1RbEFLiWTvFAACn1EBHQHM772.jpg

现需要在报表中显示如下内容:

wKioL1RbELaDJJg8AADAIHqOK4M080.jpg

这里需要将源数据中没有的日期补齐,并设置CLICKS值为0

 

    这个报表的难点在于用SQL或存储过程写起来很困难,而一般报表工具则不具备数据源计算能力,实现上也很困难。像润乾报表这样比较优秀的报表工具在实现上会是这样:

wKiom1RbEFPTfEvEAAD-kGuBM5U284.jpg

润乾报表在实现时,需要借助隐藏行(第一行)和隐藏列(AB),还要使用ds1.select(SID,,DATE==B3)不断循环数据集寻找匹配记录,最后通过多个单元格的显示值表达式控制显示效果,报表复杂度较高且性能较差,对于其他报表工具将更加困难。

如果事先把数据计算准备好,报表工具只需要负责呈现和简单计算,过程就会更轻松。但无论是使用复杂SQL、存储过程和自定义JAVA数据集编程,对于这样的复杂运算(实际情况往往比这个例子更麻烦得多)都是一件工作量很大的事情,而且难以维护。

集算报表本身内置了适合结构化计算的脚本,可以方便地写出数据准备的计算(相当于一种更使用更简单的自定义数据集)。上述报表需求使用集算报表可以这样完成:

编写集算脚本

首先使用集算脚本编辑器,新建集算脚本,设置脚本参数:起始日期和结束日期:

wKioL1RbELfyRSxQAACnySaeGVc661.jpg

编写脚本完成数据补齐操作,为报表输出计算后结果集:

wKiom1RbEFXAm7M0AAEQg24bosU876.jpg

    A1:读取明细数据,这里将数据存储在TXT中,也可以存储在数据库;

    A2-A3:SIDSNAME值,用于数据补齐时填充字段值;

    A4:取得开始到结束日期所有日期集合;

    A5:与明细数据中的日期集合做交集,得到需要补齐的日期集合。

wKioL1RbELjiQr77AACBH_8J5yg836.jpg

A6-B6循环A5得到的日期集合,将生成的记录插入A1集合中,补齐数据。

wKiom1RbEFWCq4qpAAD3L09lvQA040.jpg

A7按照起止日期从A1集合中取出符合条件的记录,并按日期排序。

wKioL1RbELnSIhREAADIz38SjlU667.jpg

A8为报表返回结果集。

编辑报表模板

     使用集算报表编辑器,编辑报表模板,用于数据展现。首先新建参数,并设置默认值。

wKiom1RbEFayK_qpAAC2c54toy4566.jpg

新建报表并设置集算器数据集,调用上述编辑好的脚本文件。

wKioL1RbELrBbW1WAAEM0XIZfVM294.jpg

其中,dfx文件路径既可以是绝对路径,也可以是相对路径,相对路径是相对选项中配置的dfx主目录的;参数b_datee_date为报表模板参数,beginend为脚本参数,事实上二者可以同名。

        

编辑报表表达式,直接使用集算脚本返回的结果集,完成报表制作,不再需要使用隐藏行列和显示值判断表达式。

wKiom1RbEFfCcW5zAABoMFk3JLg162.jpg

报表展现结果如下:

wKioL1RbELui72BGAAC5_hB7Nmg234.jpg

可以看到,使用集算器脚本可以快速完为报表补齐数据。而且外置的集算脚本具有可视化的编辑调试环境,编辑好的脚本还可以复用(被其他报表或程序调用)。不过,如果脚本已经调试好,而且不需要复用的时候,要维护两个文件(集算脚本和报表模板)的一致性会比较麻烦,这时候直接使用集算报表的脚本数据集就比较简单了。

    在脚本数据集中可以分步编写脚本完成计算任务,语法与集算器一致,还可以直接使用报表定义好的数据源和参数。本例使用脚本数据集可以这样完成:

1.  在数据集设置窗口中点击“增加”按钮,弹出数据集类型对话框,选择脚本数据集”;

2.  在弹出的脚本数据集编辑窗口中编写脚本:

wKioL1RbELyTCdqaAAFnorm4UjQ439.jpg

这里可以看到,在脚本数据集中直接使用了报表中定义好参数b_datee_date,比起单独的集算脚本更加简单、直接。

3. 报表模板和表达式与使用集算器数据集方式一致,不再赘述。




本文出自 “高性能报表数据计算” 博客,请务必保留此出处http://report5.blog.51cto.com/8028595/1573102

润乾集算报表非常规统计之补齐数据