处理跨行组运算报表的常用办法及集算报表解决

报表说明

根据订单表和指定年份(参数)按月统计订单金额,以及与上一订单月金额比,与去年同月金额比。报表样式如下:

这里需要注意的是——比去年同期是指与去年同月份的比值,无对应月份则为空;要求只显示本年数据

这个报表的麻烦之处在于需要较复杂的数据计算工作,但一般报表工具的计算能力较弱,如果采用报表工具本身来完成这个计算工作则会相当复杂,比如采用用润乾报表来实现将会是这样的:

方法一:多数据源+隐藏列

首先通过两个数据集分别读取今年和去年的数据,在报表模板中进行关联后分别显示两年同月的数据,从而完成比较。

数据集设置

         通过ds1和ds2分别取今年和去年数据,数据集设置如下:

报表模板及表达式设置

其中,需要设置D列隐藏,以便报表展现时不显示去年数据。

这种实现方式相对简单,无需复杂的表达式即可实现,但缺点是由于要使用多数据源,从同样数据表中过滤两次分别输出两个数据集,取数效率较低。此外,隐藏列D也会影响报表性能。

方法二:位移坐标+隐藏行列

通过按订购年月分组,使用润乾报表提供的位移坐标,辅助以隐藏行列的方式实现。

数据集设置

数据集参数如下:

报表模板及表达式设置

通过这种方式,通过润乾报表中层次坐标的高级写法避免了多源,体现了润乾报表的强大之处,但是仍然要依靠隐藏行列实现,而且E3中计算同期比的计算表达式过于难书写和理解(要理解主格附属格的概念、位移坐标的使用以及如何在格集表达式中引用当前格的主格),这也给报表开发和维护带来了困难。

无论是多数据源,还是层次坐标,依赖隐藏行列,都是因为需要在报表中完成同环比计算导致,而往往这样的计算还比较复杂。这是因为传统报表工具将数据计算(数据源准备)和报表呈现混在一起导致(即使功能强大的润乾报表也不例外),如果将这两部分分开,则会使报表开发更加清晰。

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

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

编写集算脚本

使用集算脚本编辑器编写集算脚本,使用系统默认数据源demo。

编写脚本完成同比环比计算(右侧为单元格运行格值):

A1:连接数据源demo;

A2:根据年份参数取出今年和去年两年的订单数据;

A3:关闭数据连接;

A4:按订购日期排序;

A5:按年 月分组,并汇总订单金额;

A6:计算比上期,这里注意到使用[-1]来引用上一条记录;

A7:按月份排序;

A8:计算相同月份和上一年的比值,即同期比;

A9:只选出本年数据,通过A10为报表返回结果集。

编辑报表模板

使用集算报表编辑器,设置数据源,用于报表预览。

新建报表模板设置报表参数:

设置集算器数据集,调用上述编辑好的脚本文件:

其中,dfx文件路径既可以是绝对路径,也可以是相对路径,相对路径是相对选项中配置的dfx主目录的;参数arg1为脚本参数,year为报表模板参数,这里将报表输入参数传递给脚本用于数据计算,事实上两个参数可以同名。

报表模板及表达式如下:

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

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

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

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

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

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

时间: 2024-11-06 13:52:22

处理跨行组运算报表的常用办法及集算报表解决的相关文章

润乾集算报表非常规统计之固定行列交叉表

实际信息系统中很多数据计算是为前端展示而进行的,其中报表是最常见的一种形式.这些计算的实现过程往往并不简单,使用SQL或存储过程实现起来比较困难,从而影响到前端报表设计.像http://bbs.csdn.net/topics/390883416中提的问题,其目的是为了实现一个固定行列的交叉表,用SQL准备好固定行数的数据源很麻烦.而润乾集算报表则有很灵活的计算能力,可以充分利用问题特点应付各种非常规的计算需求.这里就以链接中业务为背景,给出集算报表实现某种固定列交叉报表的方案. 报表背景 源数据

润乾集算报表非常规统计之数据源再计算

有这么一些报表,取数后还需要进行一定计算后才能供报表展现输出,这要求报表工具具有数据源再计算的能力. 传统工具会依赖报表工具自身的计算能力,但报表工具计算能力弱导致很多计算完不成:或者借助存储过程完成(如果数据来源于数据库),且不论存储过程的编写难度,像跨库或数据库文件混合数据源,存储过程根本无法完成:不得已使用高级语言为报表自定义数据源提供数据源再计算,但Java做诸如集合运算的难度并不轻松. 集算报表在完成这类时则比较简单,本文通过一个例子来了解解决办法. 报表说明 根据学生成绩表列出指定班

润乾集算报表的层次数据集理解

润乾集算报表提供了层次数据源支持,在集算器中完成表间关联后可以将带有主从结构的数据集(如关联后的维表.事实表)直接给报表使用,而不需要在报表中再次关联:同样集算报表接收到事先在集算器中完成带明细的分组数据集也可以直接使用,而不必再次分组. 什么是层次数据源? 层次数据源是指在集算报表中使用集算器数据集类型,接收集算器脚本返回的带有层次的结果集,作为报表的数据来源. 如上图,脚本返回的结果集A6包括销售姓名.按销售汇总的订单金额以及对应分组下的订单明细:订单明细指向了另外一个集合,该销售下包含订单

润乾报表教程-集算报表优化计算过程

报表作为数据统计分析软件,当它出现性能问题需要对数据源计算进行优化时,执行路径难以控制是阻碍报表优化的难题之一.这是由于数据库执行路径不透明,程序员很难甚至无法干预执行路径,也就难以提高数据库的性能.而一般报表工具不具备强计算能力,大部分计算仍然要依靠数据库进行,这就导致很多报表优化效果不理想. 不同于一般报表工具,润乾集算报表内置了专门用于数据计算的集算引擎,开发人员可以通过编写集算脚本完成报表数据源准备.与数据库执行SQL路径不可控相比,集算脚本的执行过程是可控的,开发人员可根据实际情况编写

润乾集算报表提升性能之过程优化

报表出现性能问题需要对数据源计算进行优化时,执行路径难以确定从而被干预是阻碍报表优化的难题之一.由于数据库执行路径对开发人员不透明,报表优化需要指定执行路径时,程序员会很难甚至无法干预.而一般报表工具不具备强计算能力,大部分计算仍然要依靠数据库进行,这就导致很多报表优化效果不理想. 不同于一般报表工具,润乾集算报表内置了专门用于数据计算的集算引擎,开发人员可以通过编写集算脚本完成报表数据源准备.与数据库执行SQL路径不可控相比,集算脚本的执行过程是可控的,开发人员可根据实际情况编写或更改计算执行

润乾集算报表的集算器数据集部署(2)

2.WEB端部署 集算报表在web端部署流程与一般J2EE应用部署流程基本一致,包括: 如果和已有应用集成,一般来说已有应用已经配置好了数据库连接池,因此第一.第二步骤可以省略,只需要后面几个步骤. 配置应用服务器的数据库连接池.发布报表应用这两个步骤在不同应用服务器中的操作界面和操作方法是有区别的,举例来说,发布报表应用这个步骤,在weblogic和websphere中一般是发布一个war包或者是ear包,而在tomcat中就是在server.xml或context.xml中配置,可以不打wa

润乾报表与集算报表的计算性能对比测试

1.测试目的 在相同的硬件和web容器上测试润乾报表和集算报表的性能,对比在报表中完成分组.排序.过滤.连接.排名的性能差异,以及并发情况下二者的表现.测试过程中,润乾报表将采用报表工具内置的计算引擎,集算报表采用其内置的集算器计算引擎. 2.环境描述 测试机型:DellInspiron 3420 CPU:Intel Core [email protected] *4 RAM:4G HDD:西数WDC(500G5400转/分) 操作系统:Win7(X64)SP1 JDK:1.6 数据库:orac

润乾集算报表层次数据集对性能的影响测试

1.测试目的 在相同的硬件和集算报表IDE上测试使用集算报表使用层次数据集与不使用层次数据集之间的性能差异,从而确定层次数据集对报表性能的影响. 2.环境描述 测试机型:DellInspiron 3420 CPU:Intel Corei5-3210M @2.50GHz *4 RAM:4G HDD:西数WDC(500G5400转/分) 操作系统:Win7(X64)SP1 JDK:1.6 数据库:hsqldb 集算报表版本:5.0 3.数据描述 表数据 4.用例描述 4.1.分组明细报表 使用销售记

润乾集算报表提升性能之并行多库

应用的数据量较大时报表性能往往不高,此时针对源数据量大的报表进行SQL或报表端的优化效果往往不明显.如果将数据采用一定规则(如时间)分库分段存储,报表访问时同时访问多个数据库进行数据计算,最后在报表中进行汇总展现,采用这种并行多库的方式来提升报表性能. 一般报表工具并不具备这种并行取数汇总的能力,访问多个数据库读取分段数据需要借助Java等高级语言完成,然而使用Java编写这样的并行程序并不简单,而且由于Java缺乏对批量数据计算的基础支持,不支持表达式参数和动态数据结构,使得一般报表工具难以直