关联跨行计算报表的制作

实际信息系统中很多数据计算是为前端展示而进行的,其中报表是最常见的一种形式。这些计算的实现过程往往并不简单,使用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.报表模板和表达式与使用集算器数据集方式一致,不再赘述。

时间: 2024-08-02 09:51:37

关联跨行计算报表的制作的相关文章

用集算器实现跨行组计算报表

跨行组计算类报表在报表开发中非常常见,如常见的同期比.环比计算.移动平均值计算等.这类报表由于经常要引用其他行列的数据进行相对/绝对位置运算,使得报表工具在实现时并不轻松.功能相对强大的润乾报表需要借助层次坐标和位移坐标,辅以条件表达式和"$"运算符完成,书写和理解都有相当的难度. 其实通过集算器这类报表则非常容易实现,我们来看一个例子.     报表需求:根据订单表和指定年份(参数)按月统计订单金额,以及与上一订单月金额比,与去年同月金额比,样式如下: 这里应该注意的是比去年同期是指

润乾集算报表非常规统计之关联跨行运算

实际信息系统中很多数据计算是为前端展示而进行的,其中报表是最常见的一种形式.这些计算的实现过程往往并不简单,使用SQL或存储过程实现起来比较困难,从而影响到前端报表设计.像http://bbs.csdn.net/topics/390813196中提的问题,其目的往往是为了实现一个供生产或采购部门使用的报表(包含库存覆盖周期,方便生产调度或实施采购任务),用SQL写起来会比较麻烦,一般报表工具又不具备很强的计算能力,也无法直接完成.而润乾集算报表则有很灵活的计算能力,可以充分利用问题特点应付各种非

BIRT实现组内跨行计算

问题来源:http://developer.actuate.com/community/forum/index.php?/topic/36160-dealing-with-previous-rows-groups-sorts-and-subtotals/ 组内跨行计算一般要用SQL窗体函数或报表脚本去实现.但代码比較复杂.这样的情况下能够用集算器来辅助报表工具.以下用样例来说明. 库表sample有三个字段,当中id是分组字段.须要设计一张分组表,id是分组字段,明细字段是v1,v2以及计算列c

动态格报表的制作

接触过很多客户,在没有数据系统以前,很多报表都是用 excel 画的.这些 excel 表,大部分都是业务人员为了方便记录数据直接画的,在这样画出来的表样中,分组合并单元格相当自由不受约束.而当业务人员把这些 excel 交给程序猿哥哥用报表工具制作时候,很自然地也会希望报表能像 excel 一样随心所欲的去合并单元格.但是,这就令程序猿哥哥苦恼了,因为通常使用的报表开发工具制作出来的分组报表都是中规中矩的,很难根据业务人员提供的样板随心所欲地合并单元格.但这样又会让业务人员感觉很死板,不够灵活

固定格式填报表的制作

在前面几篇文章中,我们学习了多种类型填报表的制作,对润乾报表的填报机制有了一定的了解.今天我们来研究一下如何制作固定格式填报表,同时检验下自己之前学习的内容是否已熟练掌握. 今天要学习的固定格式填报表效果图如下所示: 左侧为固定内容,蓝色部分是需要客户填写的内容,最后将整个页面数据更新到数据库表中. 这里的难点在于,如何把左侧固定内容也更新到数据库中,也就是如何设置单元格分区. 带着这个问题我们来看一下具体实现步骤: 第一步 新建填报表 编辑填报表内容和样式,如下图所示: 一般这类报表会对应一个

VB.Net之旅—报表的制作(RDLC)

我们在这里以机房收费系统周结账单为例,讲解一下VS2008报表的制作 新建一个窗体,从工具箱中拖一个MicrosoftReportViewer控件到窗体中,点击MicrosoftReportViewer右边的小三角,然后选择设计新报表 选择已有数据源或添加新数据源 我们在这里添加数据源 选择已有连接或新建连接 我们在这里新建连接,测试连接成功后,选择确定 之后单击下一步,选择数据库对象,单击完成 选择新添加的数据源,选择下一步 选种左边字段,点击详细信息,点击下一步 点击下一步,对报表重命名,点

多数据源动态关联报表的制作(birt为例)

使用Jasper或BIRT等报表工具时,常会碰到一些很规的统计,用报表工具本身或SQL都难以处理,比方与主表相关的子表分布在多个数据库中,报表要展现这些数据源动态关联的结果.集算器具有结构化强计算引擎,集成简单,能够协助报表工具方便地实现此类需求.以下通过一个样例来说明多数据源动态关联的实现过程. 主表org在数据源Master中,org里每条记录相应的子表在不同的数据源中,比方org.org_id="ORG_S"时.这条记录相应的子表是数据源S_odaURL的User表,org.or

非常规统计报表之制作按段分组报表的新办法

报表开发中,经常会碰到一些需要进行非常规统计的报表,固定分组.可重复分组.组内排序,还包括跨行组计算的报表,甚至有些报表本身无数据来源.以及需要对数据源再计算.这些报表本身具备一定的特殊性,使用常规方法往往难于实现. 对于按段分组报表,各段之间可以有重复,也就可能出现按段可重复的分组报表.集算报表在完成这类特殊统计报表时比较简单,这里通过一个实例说明实现过程. 报表说明 根据员工基本信息表按年龄统计各年龄段区间的人数.奖金等汇总情况.报表样式如下: 这里"30-40岁"和"3

灵活数据源的固定行列交叉报表的制作

论坛里,http://bbs.csdn.net/topics/390883416中提的问题,其目的是为了实现一个固定行列的交叉表,用SQL准备好固定行数的数据源非常麻烦.而润乾集算报表则有非常灵活的计算能力,能够充分利用问题特点应付各种非常规的计算需求. 这里就以链接中业务为背景,给出集算报表实现某种固定列交叉报表的方案. 报表背景         源数据例如以下: 现须要在报表中显演示样例如以下内容: 这里要求依照分类统计总记录数.并将每月的记录数分别填充到1-12月中.当中无数据的记录显示为