可重复分组报表

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

    这类报表通过报表工具往往不易实现,即使实现也经常会伴随着报表难于开发维护、性能不高等问题。

通过集算器可以很好解决这个问题,这里通过两个例子来说明实现过程。

例一

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

wKiom1PDMvajKx18AADBCKBTIhI811.jpg


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

集算器代码

wKioL1PDMsvx3jMqAAEmZbXCWLE836.jpg

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

报表调用

由于集算器的主要工作是为报表做数据源准备,它只做数据计算,报表展现的工作仍由报表工具完成,这里选用润乾报表进行展现。

数据集设置

wKioL1PDMs_C2nDLAACfzdo3-qs084.jpg

选用存储过程数据集,采用类存储过程的调用方式,其中年龄段为集算器脚本(dfx)名称。

报表模板

wKiom1PDMwDxBijaAAB0EHPENkA968.jpg

 

   说到润乾报表,作为一款优良的报表工具,这个例子润乾报表可以通过ds.enumGroup()函数实现:

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岁以上")


这是四个分组的情况,可以想象一下如果有几十个分组这个表达式将异常冗长,很难维护,而在集算器中则非常清晰。

例二

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

wKioL1PDMtXAzL0ZAAFE5dJhJfI817.jpg

集算器代码

wKiom1PDMwaw8MSKAAE5EdcN3KM849.jpg

A1A2:建立数据库连接从订单表读取数据;

A3:列出主要城市与省份的对应列表;

A7:按照省份分组汇总;

A8A9:按指定城市对位分组后汇总;

A10:将城市数据插入A7按省汇总的结果中。

报表调用

    报表调用方式与上例相同,报表模板及其表达式如下:

wKiom1PDMwaCu1ERAABcoMp-wuE196.jpg

 

    通过润乾报表单独实现一般可以通过两种方法:

1、依靠大量隐藏行

即先按省份分组,在下一行再按城市分组并设置其跟随上一行扩展,设置城市所在行隐藏行表达式,将不需要显示的城市全部隐藏。

这种方法虽然可以实现,但大量的隐藏行极大地影响了报表效率,当城市分组很多的情况尤其明显。

2、通过overlap()函数

   润乾报表中ds.overlap()可以用于完成可重复分组报表,本例表达式可以写成:

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

    

    通过overlap实现有两个明显缺点,第一是表达式长度,长到让人无法忍受的程度,可读性差难于更改,而且类似的表达式被写许多遍,自动报表的优势荡然无存;第二是由于统计省份都在表达式里写死了,这样报表过于固定无法随原始数据变化而变化,发生数据变化时还需要修改报表模板,造成维护困难。

        

    集算器完成这类报表时即没有隐藏行列影响效率的担忧,又不会因为表达式长度和报表固定使报表使用受限,集算器作为集合运算的利器具有丰富的类库,代码结构清晰,可以帮助用户快速完成此类特殊格式报表的制作,是报表制作中不可或缺的好帮手。

 


你可能感兴趣的:(集算器,分组报表,重复分组)