本节将以按段分组报表为例,学习plot()函数的用法。
按段分组也是个比较典型的不规则分组报表,其分组是根据数据的值段来分的,例如按照分数段、年龄段、按时间段等,属于某个值区间的记录归到一个组里如下图所示:
在上图中我们可以看到,报表根据订购日期将订单数量和订单金额分成四组,分别统计“2012年圣诞前”、“2012年圣诞--2013年国庆”、“2013年国庆--2014年五一”、“2014年五一以后”四个时间段的订单。
这种按值段进行分组的分组报表被称为按段分组报表。
下面我们介绍一下润乾报表中如何实现该报表
1、 通过报表 - 数据集菜单,定义数据集
ds1:SELECT 订单.订购日期,订单明细.数量,订单明细.单价,订单明细.折扣,客户.地区 FROM 订单明细,订单,客户 WHERE 客户.客户ID = 订单.客户ID AND 订单.订单ID = 订单明细.订单ID
2、 定义单元格表达式
(1) 在B1单元格输入表达式:=ds1.plot(订购日期, arg1)
设置显示值为:map(to(0,count(arg1)+1),arg2)
将扩展属性设置为:横向扩展
(2) 在A3单元格输入表达式:= ds1.group(地区;地区:1)
(3) 在B3单元格中输入表达式:= ds1.count()
(4) 在C3单元格中输入表达式:= ds1.sum(数量*单价)
设置显示格式为:¥#0.00
3、 设置报表参数
分别设置arg1和arg2两个参数,将参数arg1的数据类型设为“日期组”,值设置为“2012-12-25, 2013-10-1, 2014-5-1”;将参数arg2的参数类型设为“字符串组”,值设置为“2012年圣诞前, 2012年圣诞--2013年国庆, 2013年国庆--2014年五一, 2014年五一以后”
4、 看设计界面截图
此报表保存为11.3.1.rpx。
从上述介绍可以看出,按段分组的关键在于B1格的表达式用到了datasetName.plot函数,按段分组就是利用datasetName.plot函数来实现的。我们来看一下datasetName.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为字符串组,其值为{"不及格","及格","中","良好","优秀"}
本例通过参数动态控制分组值段以及结果组的显示值