实际信息系统中很多数据计算是为前端展示而进行的,其中报表是最常见的一种形式。这些计算的实现过程往往并不简单,使用SQL或存储过程实现起来比较困难,从而影响到前端报表设计。像http://bbs.csdn.net/topics/390813196中提的问题,其目的往往是为了实现一个供生产或采购部门使用的报表(包含库存覆盖周期,方便生产调度或实施采购任务),用SQL写起来会比较麻烦,一般报表工具又不具备很强的计算能力,也无法直接完成。而润乾集算报表则有很灵活的计算能力,可以充分利用问题特点应付各种非常规的计算需求。这里就以链接中业务为背景,给出集算报表实现这种计算库存覆盖周期(关联跨行运算)报表的方案。
报表背景
源数据如下:
如上两表,库存表记录当前库存,库存需求表为每月产品的需求,求当月库存能覆盖几个月。举例:如201401月C111库存为100,
201401月库存需求20,即100-20=80,
201402月库存需求20,即80-20=60,
201403月库存需求50,即60-50=10,
201404月库存需求20,即10-20=-10,无法满足需求。
即201401月C111库存只能覆盖3个月,周期为3。
报表样式如下:
这个报表的难点在于需要根据产品编码去库存需求表中匹配相应信息后,循环比较库存需求和当前库存数量,从而计算出库存覆盖周期。在SQL中完成类似的循环计算比较麻烦,而一般报表工具不具备数据源计算能力,需要在报表中完成计算。例如用润乾报表会这样实现:
使用润乾报表完成这个报表时,需要借助临时变量(对于无法使用临时变量的报表工具来说实现就更加困难)、隐藏格(E G H三列为辅助列,需隐藏),以及多数据源的方案。在增加报表实现难度的同时,由于数据源要多次被遍历,而且使用了很多扩展的隐藏格,报表效率较低且难以理解维护。
集算报表内置了适合结构化计算的脚本,可以事先将数据准备好(相当于一种更使用更简单的自定义数据集),报表工具只要简单地取数展现即可。上述报表需求使用集算报表可以这样完成:
编写集算脚本
首先使用集算脚本编辑器,新建集算脚本,设置脚本参数:年份。
编写脚本完成数据补齐操作,为报表输出计算后结果集:
A1:连接数据源;
A2:执行取数sql,根据年份参数取得库存需求数据,并按时间排序;
A3:执行取数sql,取得库存数据,并增加字段库存覆盖周期字段(c_count),值初始化为0;
A4-B6:循环库存表,根据指定产品编码遍历库存需求表,计算得到库存覆盖周期,并将其更改A3中的c_count值,逻辑过程很清晰,易于理解和维护;
A7:为报表返回结果集。
编辑报表模板
使用集算报表编辑器,编辑报表模板,用于数据展现。连接报表默认数据源demo。
新建参数,并设置默认值:
新建报表并设置集算器数据集,调用上述编辑好的脚本文件:
其中,dfx文件路径既可以是绝对路径,也可以是相对路径,相对路径是相对选项中配置的dfx主目录的;报表模板参数和脚本参数均为ym,事实上二者可以不同名。
编辑报表表达式,这时只要采用普通的网格式报表制作方法取数展现即可:
报表展现结果如下:
如果脚本已经调试好,且不需要复用的时候,还可以直接使用集算报表的脚本数据集,其中可以直接使用报表定义好的数据源和参数,过程更为简单:
1. 在数据集设置窗口中点击“增加”按钮,弹出数据集类型对话框,选择“脚本数据集”;
2. ;在弹出的脚本数据集编辑窗口中编写脚本;
在脚本数据集中直接使用了报表中定义好的数据源demo和参数ym,比起单独的集算脚本更加简单、直接。
3.报表模板和表达式与使用集算器数据集方式一致,不再赘述。