固定的报文统计报告的规定

        报表开发,经常会遇到一些统计需要非常规的报告,固定的包、分组可以重复、在组排序,报告团还包括银行同业拆息计算,有些人甚至报告本身没有数据源、并且需要重新计算数据源。备一定的特殊性。使用常规方法往往难于实现。

        而集算报表在完毕这类特殊统计报表时则比較简单,这里来看下使用集算报表完毕固定分组报表的实现过程。

所谓固定分组报表是指分组没有规律,可能是分组范围没有规律。也可能分组顺序没有规律,须要报表开发者事先固定分组的报表。

常见的固定分组报表一般有三类:分段固定报表、固定次序分组报表、多层固定次序分组报表。

分段固定报表

         这类报表的特点是分段的区间并未在数据库中存储须要依据对应字段(如年龄、日期)计算,而且每一个分段可能会发生变化(如每年节假日所在日期可能不同),常常由用户任意指定。

如:统计20-30岁,30-40岁,40-50岁各年龄段的用户数量;每年节假日(春节、端午节、国庆节)期间公路铁路承载的旅客统计。

         更为特殊的情况下是对段界的要求,有的分段包括段界。有的分段不包括,这样看似特殊的情况可能伴随用户的指定时有发生。

         以下通过实例说明,报表样式例如以下:


        该报表是依据订单表统计各(预置)时间段内,各地区的订单数量、订单金额汇总。

当中各时间段范围为:

        【1996年圣诞前:date < 1996-12-25

        1996年圣诞--1997年国庆:1996-12-25 <=date <= 1997-10-1

        1997年国庆--1998年五一:1997-10-1 <= date<= 1998-5-1

        1998年五一以后:date>1998-5-1】

        这里出现了上文提到的段界包括问题,起始和结束两段不包括段界日期,而中间的各个分段则包括。

 

        在润乾报表中。其提供的ds.plot()函数能够进行按段分组,并且能够通过该函数的參数控制是否包括边界,对于分组较少并且边界包括规律的分组报表尤其适用。

但对于这类段界包括无规律的报表则无法实现。

润乾报表本身功能已足够强大。但仍然无法满足需求,其它报表工具实现起来将更加复杂,甚至无法实现。但在集算报表中,这类需求能够得到非常好解决。使用集算报表能够通过例如以下步骤实现。

编写集算脚本

        使用集算脚本编辑器编写集算脚本。这里使用系统默认数据源demo。

        设置脚本參数(包含默认值,用于脚本调试)。

        当中arg1值:?<="1996-12-25",?

>="1996-12-25"&& ?<="1997-10-1",?

>="1996-12-25" &&?<="1998-5-1",?>"1998-5-1"

arg2值:1996年圣诞前,1996年圣诞--1997年国庆,1997年国庆--1998年五一,1998年五一以后

 

        编写脚本完毕按段分组汇总计算。

        A1-A2:连接数据源后。通过sql完毕取数;

        A3:依照指定的日期端參数。依据订购日期进行分组。分组结果例如以下:

        A4:汇总每一个分段中的订单数据;

        A6:添加字段显示时间段名称;

        A7:为报表返回结果集。

编辑报表模板

        使用集算报表编辑器,设置数据源,用于报表预览。

        设置參数,并设置默认值。

        新建报表模板并设置集算器数据集,调用上述编辑好的脚本文件。

        当中,dfx文件路径既能够是绝对路径。也能够是相对路径,相对路径是相对选项中配置的dfx主文件夹的。參数arg1和arg2为脚本參数。param1和param2为报表參数,实际使用中二者能够同名。

 

        设置报表模板表达式。完毕报表制作。

        能够看到。使用集算器脚本能够高速完毕这类特殊的分组报表。并且外置的集算脚本具有可视化的编辑调试环境,编辑好的脚本还能够复用(被其它报表或程序调用)。只是。假设脚本已经调试好。并且不须要复用的时候,要维护两个文件(集算脚本和报表模板)的一致性会比較麻烦,这时候直接使用集算报表的脚本数据集就比較简单了。

        在脚本数据集中能够分步编写脚本完毕计算任务,语法与集算器一致。还能够直接使用报表定义好的数据源和參数。

以上述第二个报表需求为例,使用脚本数据集能够这样完毕:

        1.  在数据集设置窗体中点击“添加”button,弹出数据集类型对话框,选择“脚本数据集”。

        2.  在弹出的脚本数据集编辑窗体中编写脚本;

        这里能够看到。在脚本数据集中直接使用了报表中定义好的数据源demo,以及參数param1、param2。比起单独的集算脚本更加简单、直接。

        3. 报表模板和表达式与使用集算器数据集方式一致,不再赘述。

 

        除了按段分组报表。固定分组报表还包含固定顺序或多层固定顺序分组报表。以下分别来看一下实现过程。基于实现步骤与上述样例雷同。这里仅仅展示主要实现步骤。

固定次序分组报表

        这类报表的特点是用户要求分组次序固定,而数据库中并未存储对应的分组字段。

如:要统计长三角地区、珠三角地区以及环首都经济圈内客户的订单情况。数据库客户表中仅仅有城市(如:北京、上海、石家庄)和地区(如:华北、东北、华南)字段。假设单纯为该报表在数据库里添加另外一个地区字段显然是不值得的,所以任务自然落到报表端了。

        以下通过一个实例来说明使用集算器辅助实现这类报表的过程,报表样式例如以下:

        要求:

        1、  依据源数据中的城市分区分组汇总某年的订单数据。当中:

        环首都经济圈包含:[北京,天津,张家口,承德,保定,廊坊,唐山,秦皇岛,衡水,沧州,石家庄]

        长三角地区包含:[上海,南京,苏州,无锡,常州,镇江,南通,扬州,泰州,杭州,宁波,湖州,嘉兴,绍兴,舟山,台州]   

        珠三角地区包含:[广州,深圳,珠海,佛山,江门,东莞,中山,惠州,肇庆]

        其它城市列为其它地区。

        2、报表显示的地区顺序固定。即上图所看到的顺序显示,这里显然无法通过按字母顺序升降来排序。

 

        该类分组报表使用润乾报表实现,主要通过ds.overlap()函数。报表模板及其表达式例如以下:

        当中。A2的表达式为:

=ds1.overlap(true,城市 in list("北京","天津","张家口","承德","保定","廊坊","唐山","秦皇岛","衡水","沧州","石家庄"),"环首都经济圈",城市 in list("上海","南京","苏州","无锡","常州","镇江","南通","扬州","泰州","杭州","宁波","湖州","嘉兴","绍兴","舟山","台州"),"金三角",城市 in list("广州","深圳","珠海","佛山","江门","东莞","中山","惠州","肇庆"),"珠三角","其它")

 

        这里能够看到ds.overlap()函数的强大。对于固定的分组以及分组下成员较少的情况尤其适用。但当分组或分组成员过多时。继续使用该函数的可读性就太差了,难于维护。此外。本例中看到的是一层分组。假设要实现多层固定次序分组报表,ds.overlap()函数则无法直接实现。

这类报表在集算报表中能够这样完毕。

 

集算脚本

报表模板

        通过在集算脚本中完毕指定地区的分组汇总运算,在报表模板中仅仅简单进行数据呈现。很easy。

多层固定次序分组报表

        再改动一下上例的报表需求。要求按地区和城市分组。且地区和城市的展现顺序固定,例如以下顺序(没有则不显示):

        环首都经济圈包含:[北京,天津,张家口,承德,保定,廊坊,唐山,秦皇岛,衡水,沧州,石家庄]

        长三角地区包含:[上海,南京,苏州,无锡,常州,镇江,南通,扬州,泰州,杭州,宁波,湖州,嘉兴,绍兴,舟山,台州]   

        珠三角地区包含:[广州,深圳,珠海,佛山,江门,东莞,中山,惠州,肇庆]

        报表样式例如以下:

        当出现多层固定分组时,使用润乾报表的ds.overlap()函数就无法实现了,但在集算报表中仍然能够非常好满足。

 

集算脚本

报表模板


版权声明:本文博主原创文章,博客,未经同意不得转载。

原文地址:https://www.cnblogs.com/blfshiye/p/4792419.html