报表开发中除了一般的固定统计图,有时还需要根据不同条件的不同数据生成需要变动的统计图。像http://www.oschina.net/question/2274562_193376中提到的问题就是一个比较典型的此类需求。
这类问题的关键实际上是报表数据源的准备,如何能根据指定条件生成相应时间、段的报表数据源对生成统计图至关重要。使用SQL基本很难完成,要依靠存储过程,但存储过程由于其无法使用中间结果、对有序集合的支持不够等原因导致实现起来并不轻松。
而润乾集算报表在完成这类报表时则比较简单,这里以上述链接中的实际业务为例,给出集算报表的实现方案。
源数据表sj数据如下:
表中包含两个字段,T为按分钟间隔的日期字段,V为对应时间的数值。
现报表需要根据如下情况绘制统计图:
输入指定统计时间点,并指定统计类型,如果按小时统计,则按5分钟间隔绘制;如果按天统计,则按2个小时间隔绘制;如果按周统计,则按1天间隔绘制。
这个需求通过开篇的分析可以看到,使用存储过程,甚至是Java自定义数据源都很麻烦。而集算报表本身内置了适合结构化计算的脚本,可以方便地写出数据准备的计算(相当于一种使用更简单的自定义数据集)。上述报表需求使用集算报表可以这样完成:
首先使用集算脚本编辑器,新建集算脚本,设置脚本参数:统计时间点。
编写脚本根据输入参数,为报表输出计算后结果集。
A1:连接数据源;
A2:空序列,用于保存统计使用的时间段信息;
A3-B5:判断是按小时、天还是周进行统计,并将相应的时间段信息存储在A2中;
A6:根据A2的时间段执行SQL汇总数据,生成带有时间和汇总结果的新序表;
A7:关闭数据库连接;
A8:为报表返回结果集。
使用集算报表编辑器,编辑报表模板,用于数据展现。首先新建参数,并设置默认值。
新建报表并设置集算器数据集,调用上述编辑好的脚本文件。
其中,dfx文件路径既可以是绝对路径,也可以是相对路径,相对路径是相对选项中配置的dfx主目录的;参数dt和d_type为报表模板参数,d_date和type为脚本参数,事实上二者可以同名。
编辑报表表达式,直接使用集算脚本返回的结果集,绘制统计图。
统计图定义:
值得一提的是,集算报表支持HTML5和SVG统计图,适应移动应用的需要。
报表展现结果如下:
使用集算器脚本可以快速实现这类时间间隔变化的图表开发。外置的集算脚本具有可视化的编辑调试环境,编辑好的脚本还可以复用(被其他报表或程序调用)。不过,如果脚本已经调试好,且不需要复用的时候,要维护两个文件(集算脚本和报表模板)的一致性会比较麻烦,这时候直接使用集算报表的脚本数据集就比较简单了。
在脚本数据集中可以分步编写脚本完成计算任务,语法与集算器一致,还可以直接使用报表定义好的数据源和参数。本例使用脚本数据集可以这样完成:
1. 在数据集设置窗口中点击“增加”按钮,弹出数据集类型对话框,选择“脚本数据集”;
2. 在弹出的脚本数据集编辑窗口中编写脚本;
这里在脚本数据集中直接使用了报表中定义好参数dt和d_type,而且不必再管理数据库连接与关闭,比起单独的集算脚本更加简单、直接。
3. 报表模板和表达式与使用集算器数据集方式一致,不再赘述。
原文地址:http://blog.csdn.net/u012388497/article/details/45840253