按段分组报表制作

简介: 在按照某些字段做分组统计时,通常会按照数据将某些值已分段形式放在某一组内,比如按年龄段可分为少年、青年、中年、老年等,我们管这种分组方式叫做按段分组,通过润乾的按段分组可灵活的定义分段区间,来乾学院看下具体制作方式

需求说明
在报表对数据进行汇总统计时,通常是按照某个字段进行分组,比如按地区、类别等字段分组后对其他信息进行汇总,但有一种分组模式为不规则分组,其分组是根据数据的值段来分的,例如按照分数段、年龄段、按时间段等,属于某个值区间的记录归到一个组里如下图所示:
1

在上图中我们可以看到,报表根据订购日期将订单数量和订单金额分成四组,分别统计 "2012 年圣诞前"、“2012 年圣诞–2013 年国庆”、“2013 年国庆–2014 年五一”、"2014 年五一以后" 四个时间段的订单。
这种按值段进行分组的分组报表被称为按段分组,下面我们介绍一下润乾报表中如何实现该报表。
定义数据集
ds1:SELECT 订单. 订购日期, 订单明细. 数量, 订单明细. 单价, 订单明细. 折扣, 客户. 地区 FROM 订单明细, 订单, 客户 WHERE 客户. 客户 ID = 订单. 客户 ID AND 订单. 订单 ID = 订单明细. 订单
增加参数
报表中按时间段进行分组,实际应用中时间段通常是动态变化的,动态变化的时间段可以通过参数动态控制,所以此处增加参数进行控制:
参数名:arg1,数据类型:日期组,值表达式:2012 -12 -25, 2013 -10 -1, 2014 -5-1
参数名:arg2,数据类型:字符串组,值表达式:2012 年圣诞前, 2012 年圣诞–2013 年国庆, 2013 年国庆–2014 年五一, 2014 年五一以后
arg1 参数用于控制按段分组时的日期段,arg2 用于设置报表展示时单元格的显示信息,稍后做详细介绍
制作报表
报表设计模板如图:
2

A3:=ds1.group(地区; 地区:1),按照地区进行分组
B3:=ds1.count(),进行计数操作,统计订单数量
C3:=ds1.sum( 单价数量 ),对订单金额汇总,注意,数据库中并没有订单金额字段,订单金额可通过单价数量计算出,润乾中支持 sum 前先对字段进行相应操作,并设置 C3 单元格显示格式为:¥#0.00
B1:表达式为 =ds1.plot(订购日期, arg1),此处使用数据集的 plot 函数(按段分组),第一个参数(订购日期)为要分组字段,第二个参数(arg1)为分段区间,函数主要功能是根据订购日期字段将数据集按照 arg1 参数指定的分段区间划分到不同的组内,该函数返回值为整数组,代表记录按值段分组后组的顺序,如 list(0,1,2,3) 代表第一组,第二组,第三组,第四组,具体函数说明见附注,将单元格扩展方向改成横向,此时报表预览展示效果如下:
3

可以看到,B1 单元格返回的是 0,1,2,3 这种整数,所以要对其设置显示值表达式以达到显示效果,这里就用到了之前定义的 arg2 参数,在 B1 单元格显示值表达式中写入:map(to(0,count(arg1)),arg2),map 函数主要用于显示值表达式映射,该函数有两个参数均为 list,由于 B1 单元格的真实值为 0,1,2 这种整数,所以 map 函数第一个参数为 0 到分段区间个数的扩展,第二个参数会按照顺序映射返回到显示值属性中,这样 B1 单元格就能按照 arg2 参数中设置好的内容进行显示。而分段区间和显示值均是通过参数传递,所以此报表的分段信息可以通过程序控制参数达到动态效果。
根据实际要求设置报表样式,最终效果如下:
4

附注:
plot 函数说明:
根据数据值段进行分组,俗称“按段分组”
语法:
datasetName.plot(valueExp,listExp{,filterExp})
参数:
valueExp 用于分组的值表达式
listExp 数据值段列表,同 valueExp 数据类型相同的数组,要求其中元素从小到大排列
filterExp 过滤表达式
返回值:
整数组,代表记录按值段分组后组的顺序,如 list(0,1,2,3) 代表第一组,第二组,第三组,第四组。因此,定义完单元格数据值表达式后还需要定义显示值表达式,比如第一组代表不及格,第二组代表及格等等
选项:
@r 是否为根数据集表达式
@c 表示与元素比较时数据值段临界值只包含在第 1 个碰到的区间,相同的临界值不包含在第 2 个碰到的区间。缺省数据值段临界值只包含在第 2 个碰到的区间。
@z 表示 listExp 返回的数组按从大到小排列; 缺省为从小到大排列
示例:
例 1:ds1.plot(成绩,list(60,80,90) ,科目 ==“数学”)
返回值为 list(0,1,2,3) 对数据集 ds1 过滤出科目等于数学的记录按成绩段进行分组,60 分以下不包含 60 分、60-79,80-89,90 分及 90 分以上等四组。同时定义显示值表达式为:map(list(0,1,2,3),list(不及格, 及格, 良好, 优秀))
例 2:ds1.plot@c(成绩,arg1)
其中 arg1 为参数,其数据类型是整数组,其值为 "60,70,80,90" 。显示值表达式为:map(to(0,count(arg1)),arg2),其中 arg2 为字符串组,其值为 {“不及格”,“及格”,“中”,“良好”,“优秀”}。 本例通过参数动态控制分组值段以及结果组的显示值。

作者:gxy
链接:http://c.raqsoft.com.cn/article/1542609796494?r=IBelieve
来源:乾学院
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

目录
相关文章
【SQL开发实战技巧】系列(二十五):数仓报表场景☞结果集中的重复数据只显示一次以及计算部门薪资差异高效的写法以及如何对数据进行快速分组
本篇文章讲解的主要内容是:***如何使用lag函数让结果集重复数据只显示一次、用行转列pivot写法优化部门之间计算工资差异类似需求、如何通过ceil函数对已有数据进行分组打印、放假安排团队分组值班,如何通过ntile()over(order by )快速进行人员分组***
【SQL开发实战技巧】系列(二十五):数仓报表场景☞结果集中的重复数据只显示一次以及计算部门薪资差异高效的写法以及如何对数据进行快速分组
利用VeryReport快速完成分组报表设计
分组报表,最常用的功能是组内数据进行汇总,比如「小计」、「合计」。 数量汇总,是借助「SUM」函数来完成的。
|
JSON 分布式计算 大数据
行政区统计_功能实现|学习笔记
快速学习行政区统计_功能实现
79 0
行政区统计_功能实现|学习笔记
|
数据挖掘 开发者 索引
分组与聚合|学习笔记
快速学习 分组与聚合
123 0
|
定位技术 Android开发
百度地图开发之点聚合功能
百度地图开发之点聚合功能
百度地图开发之点聚合功能
|
存储 BI 数据处理
在报表中录入数据时如何实现行列转换
在一些生产性行业中,不同指标数据在数据库中存储是按照列方式存储,也就是每个指标一个列字段,但是在报表展现或者页面输入数据时需要将这些列转为行的方式,下面通过一个实例看下如果实现填报表的行列转换 <a href="http://c.
1014 0