java动态交叉表_在 Birt 中实现交叉表的动态分组

本文介绍了如何在Birt报表中利用集算器实现交叉表的动态分组,根据输入的开始和结束日期动态调整日期分组,支持按天、周、月、年展示统计数据。通过SPL脚本处理数据,简化了SQL和报表设计的复杂性,提供了灵活的解决方案。
摘要由CSDN通过智能技术生成

原标题:在 Birt 中实现交叉表的动态分组

来源:

https://forums.opentext.com/forums/discussion/173783/dynamic-grouping-of-crosstab-in-birt#latest

在业务填报中,有时会需要基于时间段进行动态交叉分组统计,根据时间段长短实现按天、按周、按月、按年动态分组。例如:某企业根据业务需要,需按照2个参数(开始日期、结束日期)实现一段时间内订单的统计。统计规则如下:

示例:根据输入的参数值,计算日期之间的差异。

var diff = 结束日期-开始日期 ---- 相隔的天数

如果(diff <15)

将“日期组”分组以显示为日期

如果(diff>15)

将“日期组”分组以显示为周

如果(diff >30)

将“日期组”分组以显示为月份

如果(diff>365)

将“日期组”分组以显示为年份

小伙伴们是不是有点不知所措了呢?上述问题实质上就是一个数据准备的问题,可是SQL或ed data sources的方式代码难写,工作量大;退而求次使用报表隐藏列的方式,既不通用又非常别扭。那么,一个更好的解决方案就是在报表工具中引入集算器,解决诸类问题将轻而易举。下面我们就以Birt报表工具为例,介绍一下实现过程。对于其他的报表工具,也是大同小异。

在本例中,要根据参数输入,统计企业从2012-07-04开始到2014-05-06结束这个时间段内的订单总数,运货费总数,订单金额总数。数据表“ORDERS”中的原始数据如下:

c099bda2ac0f4d41db7a4c7e8d5f7522.png

我们直接来看集算器解决这个问题的SPL代码:

2383599ffb627b619aca6000eafb7e67.png

fe40aff65b3109a2dfef4cc231667915.png

d53dde059ce4bfa675d509059e18a97c.png

将集算器SPL代码存为order.dfx文件,然后引入到Birt报表中。如何引用请参看乾学院文章《BIRT调用SPL脚本》。

在BIRT报表中设计表如下:

e70d668c809b80a38b5326dd9a8267c5.png

报表调用集算器的方法和调用存储过程完全一样,比如在 BIRT 的存储过程数据集中可以用 call orders(?,?) 来调用。

接下来,我们看一下WEB预览时,输入不同参数的预览结果:

(1)输入参数:开始时间 2012-07-04,结束时间 2014-05-06 间隔天数大于365,按照年份分组显示。

c5a9844534546bfacb8c65958df15f3b.png

0c1843587c4563c9952a25ee1fc31bfa.png

(2)输入参数:开始时间 2012-07-15,结束时间 2012-12-03 间隔天数大于30,按照月份分组显示。

efcbe01dffaee3fbbc4d90a3aee1eee3.png

04607b2580b0153e8dff87e78c01f1ed.png

(3)输入参数:开始时间 2012-07-20,结束时间 2012-08-15 间隔天数大于15,按照星期分组显示。

cd86f8f64442b196e7862b1f9cd38fe7.png

8316ee3462a2398fd8de0230727a946e.png

(4)输入参数:开始时间 2012-07-04,结束时间 2012-07-18 间隔天数小于15,按照日期分组显示。

d2dd8f27d3d2087d40c6f13dfe101c57.png

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值