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

浏览: 1125

来源:

  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或scripted data sources的方式代码难写,工作量大;退而求次使用报表隐藏列的方式,既不通用又非常别扭。那么,一个更好的解决方案就是在报表工具中引入集算器,解决诸类问题将轻而易举。下面我们就以Birt报表工具为例,介绍一下实现过程。对于其他的报表工具,也是大同小异。

 

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

  undefined

 

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

image.png
image.png image.png

 

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

 

  在BIRT报表中设计表如下:

  undefined

 

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

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

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

  undefined

  undefined

 

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

  undefined

  undefined

 

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

  undefined

  undefined

 

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

  undefined

  undefined

推荐 0
本文由 润乾软件 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册