设为首页 加入收藏

TOP

不定列(动态列)报表的数据源处理
2015-11-21 01:46:15 来源: 作者: 【 】 浏览:0
Tags:不定 动态 报表 数据源 处理

动态列报表是动态报表的一种,在报表应用中很常见。这类报表由于无法事先确定列数,因而无法在报表中使用固定列的表达式,而且更加棘手的是报表数据源的准备,因为SQL不支持不定列的结果集,需要动态拼出SQL语句去执行,有时业务逻辑并不很简单,还需要使用存储过程分步完成。而存储过程对集合运算的支持不够,难以使用中间结果(要用临时表),导致完成这类运算并不轻松。

像http://bbs.csdn.net/topics/390937222?page=1#post-398564938中提到的问题,就是一个比较典型的动态列计算问题,这类计算往往是为前台报表服务的,使用SQL和存储过程都很难完成,而一般的报表工具由于不具备强计算能力,对于这类计算更加无法完成。

使用润乾集算报表来做则比较简单,集算报表不仅继承了润乾报表在呈现层面处理动态列数据源的能力,而且内置了强大的数据源计算引擎,在运算和格式两方面都能很好地支持动态列报表。

这里以上述链接中的实际业务为例,给出集算报表的实现方案。

报表背景

源数据如下:

\

现需要在报表中以机组为单位,横向排列类别和产量,样式如下:

\

<??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ICAgICAgINXiuPaxqLHttcTE0bXj1NrT2tPDU1FMu/K05rSiuf2zzNC0xvDAtLrcwKfE0aOstvjSu7Djsaix7bmkvt/U8rK7vt+xuMr9vt3UtLzGy+PE3MGmo6y4+bG+zt63qMq1z9aho7yvy+OxqLHtsb7J7cTa1sPBy8rKus+94bm5u6+8xsvjtcS9xbG+o6y/ydLUt72x47XY0LSz9sr9vt3XvLG4tcS8xsvjo6jP4LWx09rSu9bWuPzKudPDuPy88rWltcTX1Lao0uXK/b7dvK+jqaGjyc/K9rGose3Q6MfzyrnTw7yvy+OxqLHtv8nS1NXi0fnN6rPJo7o8L3A+CjxoMj6x4NC0vK/L473Fsb48L2gyPgo8cD4gICAgICAgytfPyMq508M8c3Ryb25nPryvy+O9xbG+seC8rcb3o6w8L3N0cm9uZz7Qwr2ovK/L473Fsb6jrLHg0LS9xbG+zeqzycr9vt28xsvjo6zOqrGose3K5LP2vMbL47rzveG5+7yvoaM8L3A+Cgo8aW1nIHNyYz0="http://www.cppentry.com/upload_files/article/57/1_wbq9g__.jpg" alt="\">

上述脚本含义:

A1:连接数据源;

A2:执行sql从产量表中取数;

A3:按机组分组,在集算器中分组结果保留了分组结果(成员)以方便后续使用和计算,这个分组结果如下:

\

A4:求分组中最大成员个数,以确定结果集列数;

A5-A6:创建结果序表,记录为空;

A7-B8:循环A3中分组结果,将每个分组中的类别和产量写入新结果序表中;

A9:为报表返回结果集。

编辑报表模板

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

\

其中,dfx文件路径既可以是绝对路径,也可以是相对路径,相对路径是相对选项中配置的dfx主目录的。

编辑报表表达式,用集算报表的动态数据源机制完成报表制作。

\

由于是动态列,在报表中要使用ds.field()函数根据列数来动态取得列数据,第一行和A列为辅助行列,设置其隐藏即可。

报表展现结果如下:

\

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

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

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

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

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

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


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇要求一个语句从study,DICT表中取.. 下一篇如何卸载并删除ASM磁盘组

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: