码迷,mamicode.com
首页 > 其他好文 > 详细

润乾报表实现可重复分组报表及改进

时间:2014-08-18 12:36:54      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:润乾报表   分组   可重复   改进   优化   

         可重复分组报表是报表开发中比较常见和麻烦的任务。可重复分组报表是指同一记录出现在不同的分组中被重复统计,常见的可重复分组报表有两类:一类是分组区间有交集,如:统计年龄段在20-30岁、25-35岁、30-40岁之间的用户数量;另外一类是分组区间有包含关系,如:统计各地区以及该地区主要城市的汇总数据,“华北,其中北京;华东,其中上海……”。

         下面通过两个实例来看一下润乾报表的实现过程。

实例一

         根据员工基本信息表按年龄统计各年龄段区间的人数、奖金等汇总情况。报表样式如下:

bubuko.com,布布扣

这里“30-40岁”和“35-45”岁两个区间是有重复的。 

实现

在润乾报表中,该类报表主要通过ds.enumGroup()函数完成,报表模板及表达式如下:

bubuko.com,布布扣

其中A2单元格表达式为:

=ds1.enumGroup(true,age(BIRTHDAY)>20&&age(BIRTHDAY)<=30,"20岁到30",age(BIRTHDAY)>30&&age(BIRTHDAY)<=40,"30岁到40",age(BIRTHDAY)>=35&&age(BIRTHDAY)<45,"35岁到45",age(BIRTHDAY)>=45,"45岁以上") 

         通过ds.enumGroup()可以比较容易完成上述报表,分组较少的情况尤其适用。当分组较多的时候,该表达式会因为过于复杂导致报表难于维护。

实例二

         根据订单表统计各省份订单情况,要求列出某些主要城市(如青岛、深圳、石家庄)的订单情况,报表样式如下:

bubuko.com,布布扣

实现

润乾报表实现该类报表主要使用ds.overlap()函数,报表模板及表达式如下:

bubuko.com,布布扣

其中,A2单元格表达式为:

=ds1.overlap(true,省份=="上海","上海",省份=="北京","北京",省份=="四川","四川",省份=="天津","天津",省份=="山东","山东",城市=="青岛","    其中:青岛",省份=="广东","广东",城市=="深圳","    其中:深圳",省份=="江苏","江苏",省份=="江西","江西",省份=="河北","河北",城市=="石家庄","    其中:石家庄",省份=="海南","海南",省份=="福建","福建",省份=="辽宁","辽宁",省份=="重庆","重庆",省份=="陕西","陕西") 

         与实例一中一样,ds.overlap()对分组较少的情况尤其适用。当分组较多的时候,表达式过于复杂将导致报表难于维护。        

         润乾报表可以实现上述两类可重复分组报表,在分组较少的时候做起来尤其简单,这也是其他报表工具无法比拟润乾报表的方面。但当分组较多,计算比较复杂的情况下,润乾报表实现起来就比较困难了。原因在于报表的数据源准备和呈现混在一起导致的,往往需要在报表模板中实现大量的计算任务,如果将这两部分分开,即:独立的计算层负责数据源准备(完成复杂计算)和独立的展现层负责报表呈现,则会使报表开发变得更加清晰。

         润乾公司基于润乾报表内核推出的改进产品集算报表5.0版,其中内置了独立的计算引擎:集算器,用于解决数据源准备问题。在集算报表中可以将复杂的数据计算(数据源准备)工作交由集算器完成,可将其视为报表的计算层;而报表本身只负责接收计算后结果进行报表展现(有时包括一些简单计算),从而将数据源准备和报表呈现分开,使得报表制作更为清晰。        

         对于上述报表,通过集算报表可以这样实现并解决其中的难点:

实例一

编写集算脚本

         首先使用集算器编写集算器脚本,完成分组汇总,为报表准备数据源:

bubuko.com,布布扣

A1查询员工表数据,由于该表只有出生日期,故在A2中增加并计算年龄字段;A3、A4指定年龄段区间及其区间名称,在A5中进行可重复枚举分组,并在A6中计算分组汇总值,最后A7将结果集返回给报表。

 

报表调用

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

bubuko.com,布布扣

设置报表模板及表达式

bubuko.com,布布扣

报表中只简单的列表取值即可,无需再完成复杂计算。

 

这里可以看到,在集算报表中将数据准备(集算脚本)和报表呈现(报表模板)分开带来的好处,在计算层通过集算器完备的计算体系完成数据源准备的工作。

实例二

bubuko.com,布布扣

A1从订单表读取数据;

A2-B4列出主要城市与省份的对应列表;

A6按照省份分组汇总;

A7、A8按指定城市对位分组后汇总;

最后通过A9将城市数据插入A6按省汇总的结果中。

 

报表调用

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

bubuko.com,布布扣

设置报表模板及表达式

bubuko.com,布布扣


通过上述两个实例,就润乾报表和集算报表实现方式的区别,可以看到:

1、集算报表由于将计算层和展现层分离,报表开发更为清晰,复杂计算任务均在集算器中完成,报表本身只负责数据展现(报表模板中只编写简单的表达式即可);

2、集算器具备完备的计算体系,拥有丰富的函数库,如实例中用到的P.enum()进行枚举分组和P.align()完成对齐分组,而前者又有3种函数选项,后者则有6种函数选项,如此丰富的函数库,使得几乎所有的复杂运算(数据源准备工作)都可以在集算器中完成;

3、除了丰富的函数,集算器采用分步的编码方式,无论多么复杂的计算逻辑都可以在集算器中逐步实现,从而解决了在润乾报表中只能写在一个表达式中带来的编写和维护难题。

润乾报表实现可重复分组报表及改进,布布扣,bubuko.com

润乾报表实现可重复分组报表及改进

标签:润乾报表   分组   可重复   改进   优化   

原文地址:http://blog.csdn.net/u012388497/article/details/38657081

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!