润乾报表实现跨行组运算报表及改进

跨行组计算类报表在报表开发中非常常见,如常见的同期比、环比计算、移动平均值计算等。这类报表由于经常要引用其他行列的数据进行相对/绝对位置运算,使得报表实现并不轻松。润乾报表在实现时需要借助层次坐标和位移坐标,辅以条件表达式和“$”运算符完成。下面通过一个实例说明润乾报表的实现方式。

报表需求

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

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

润乾报表实现

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

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

数据集设置

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

报表模板及表达式设置

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

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

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

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

数据集设置

数据集参数如下:

报表模板及表达式设置

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

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

润乾公司在润乾报表的基础上增加了用于复杂数据计算的引擎集算器,形成新一代强计算型报表工具集算报表5.0版,报表模板可只用于报表呈现,将计算和展现分开,梳理了报表结构,使得报表制作更加清晰、简单。

本文中的报表需求,通过集算报表可以采用如下方式实现:

集算报表实现

编写集算脚本

使用集算脚本编辑工具完成同环比计算脚本,并为报表输出计算后结果集:

A1:执行sql,根据指定年份从订单和订单明细表读取本年和去年订单数据

A2:按订购日期升序排序

A3:按照订购日期的年份和月份分组,并汇总订单金额

A4:增加计算字段“比上期”,即本月金额/上一订单月金额

A5:按照订购日期的月份升序排序

A6:增加计算字段“比去年同期”,即本年本月金额/去年本月金额

A7:选出指定年份的数据

A8:为报表返回结果集

报表调用

使用集算报表设计器,新建报表,使用“集算器”数据集类型,选择上面编辑好的集算脚本(orders.dfx)

报表模板及表达式

通过简单的列表直接取得集算脚本的计算结果进行展现。

使用集算报表实现相比润乾报表可以看到这样一些改变:

1、 更加简单。集算脚本可以分步编写,将原本润乾报表中需要写在一个表达式里的复杂计算拆分成多步,逐步实现,降低了问题的复杂度;

2、 更加灵活。集算器具有非常丰富的函数库,同一计算任务可以选择多种方式实现,如分组汇总即可以直接使用A.groups(),又可以先A.group()再汇总;

3、 性能更高。集算脚本计算时不带有任何展现属性(这点和一般报表工具有很大差别),只将计算后的结果集返回给报表进行展现,性能更高;此外,由于集算报表中不再依赖大量影响报表效率的隐藏行列,从而进一步提高了报表性能。

润乾报表实现跨行组运算报表及改进

时间: 2024-10-29 02:12:17

润乾报表实现跨行组运算报表及改进的相关文章

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

报表说明 根据订单表和指定年份(参数)按月统计订单金额,以及与上一订单月金额比,与去年同月金额比.报表样式如下: 这里需要注意的是--比去年同期是指与去年同月份的比值,无对应月份则为空:要求只显示本年数据. 这个报表的麻烦之处在于需要较复杂的数据计算工作,但一般报表工具的计算能力较弱,如果采用报表工具本身来完成这个计算工作则会相当复杂,比如采用用润乾报表来实现将会是这样的: 方法一:多数据源+隐藏列 首先通过两个数据集分别读取今年和去年的数据,在报表模板中进行关联后分别显示两年同月的数据,从而完

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

报表开发中,经常会碰到一些需要进行非常规统计的报表,固定分组.可重复分组.组内排序,还包括跨行组计算的报表,甚至有些报表本身无数据来源.以及需要对数据源再计算.这些报表本身具备一定的特殊性,使用常规方法往往难于实现. 集算报表完成这类特殊统计报表则非常简单,这里通过一个需要完成跨行组计算的报表为例,说明使用集算报表的实现过程. 报表说明 根据订单表和指定年份(参数)按月统计订单金额,以及与上一订单月金额比,与去年同月金额比.报表样式如下: 这里应该注意的是比去年同期是指与去年同月份的比值,无对应

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

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

润乾报表与 ActiveReport JS 功能对比

简介 润乾报表是用于报表制作的大型企业级报表软件,核心特点在于开创性地提出了非线性报表数学模型,采用了革命性的多源关联分片.不规则分组.自由格间运算.行列对称等技术,使得复杂报表的设计简单化,以往难以实现的报表可以轻松实现,避免了大量的复杂 SQL 编写与前期数据准备,报表设计的效率提高了一个数量级.润乾报表大概有 20 年的历史,产品成熟稳定. ActiveReport JS 是一个轻量级的报表解决方案,提供简单丰富的 API,是目前葡萄城新推出的报表工具,所以还在测试和不断完善中. 开发语言

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

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

润乾集算报表非常规统计之组内排序

报表开发中,经常会碰到一些需要进行非常规统计的报表,预置分组.可重复分组.组内排序,还包括跨行组计算的报表,甚至有些报表本身无数据来源.以及需要对数据源再计算.这些报表本身具备一定的特殊性,使用常规方法往往难于实现. 而集算报表在完成这类特殊统计报表时则比较简单,这里来看下使用集算报表完成组内排序报表的实现过程. 报表说明 根据销售管理系统数据统计某年客户所在地区的订单总额,地区并按订单总额降序排列,要求每个地区中显示销售额在前五名的销售人员及其订单数量和订单金额,其他人员归入"其他"

润乾集算报表非常规统计之集合运算

报表数据源计算中经常会使用到集合运算,SQL对集合运算的支持使得大部分简单的集合运算都能轻松完成.但是,当集合运算比较复杂,需要使用存储过程完成时,由于存储过程对集合运算的支持不够,也无法使用中间结果导致这类运算实现起来非常困难. 像http://bbs.csdn.net/topics/390902711中提到的问题,就是一个比较典型的复杂集合运算问题,这类计算往往都是为前台报表服务的,使用SQL和存储过程都很难完成.而一般的报表工具由于不具备强计算能力,对于这类计算更加无法完成. 使用润乾集算

润乾集算报表非常规统计之无源规则报表

报表开发中,经常会碰到一些需要进行非常规统计的报表,固定分组.可重复分组.组内排序,还包括跨行组计算的报表,甚至有些报表本身无数据来源.以及需要对数据源再计算.这些报表本身具备一定的特殊性,使用常规方法往往难于实现. 集算报表完成这类特殊统计报表则非常简单,这里以一个没有数据源,但展现规则的报表为例,说明集算报表的实现过程. 报表说明 某报表系统中有部分报表需要按照一定规则显示数据,如:显示查询日期范围内的奇数日数据,要求数据库中即使无记录该日期也显示(内容为空). 本文重点来实现奇数日期序列,

润乾集算报表非常规统计之按段分组

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