应用plot()函数的按段分组报表| 快逸报表工具
V5教程-表达式与常用函数

一、报表实例

按段分组也是比较典型的不规则分组报表,其分组是根据数据的值段来分的,例如按照分数段、年龄段、按时间段等,属于某个值区间的记录归到一个组里,如下图所示:

从上图中我们可以看到,报表根据订购日期将订单数量和订单金额分成四组,分别统计“1996年圣诞前”、“1996年圣诞~1997年六一”、“1997年六一~1998年五一”、“1998年五一以后”四个时间段的订单。

这种按值段进行分组的报表被称为按段分组报表。

 下面我们介绍一下快逸报表中如何实现该报表。

二、设计过程

1、定义数据集ds23

ds23:select DEMO_ORDERS.订购日期,DEMO_ORDERDETAILS.数量,DEMO_ORDERDETAILS.单价,DEMO_ORDERDETAILS.折扣比例,DEMO_CUSTOMERS.地区 from DEMO_ORDERS,DEMO_ORDERDETAILS,DEMO_CUSTOMERS where DEMO_ORDERS.订单ID=DEMO_ORDERDETAILS.订单ID and DEMO_CUSTOMERS.客户ID=DEMO_ORDERS.客户ID

2、编辑报表

(1)B1单元格表达式:=ds23.plot(date(订购日期),arg1)

 显示值表达式:map(to(0,count(arg1)+1),arg2),扩展方式:横向扩展

(2)A3单元格表达式:=ds23.Group(地区,false)

(3)B3单元格表达式:=ds23.count()

(4)C3单元格表达式:=ds23.sum(数量*单价),显示格式:¥#,##0.00

(5)分页方式设置为“不分页”

3、设置报表参数

分别设置arg1和arg2两个参数,将参数arg1的数据类型设为“日期数组”,值设置为“1996-12-25,1997-6-1,1998-5-1”;将参数arg2的参数类型设为“字符串组”,值设置为“1996年圣诞前,1996年圣诞~1997年六一,1997年六一~1998年五一,1998年五一之后”。

3、 保存预览

此报表保存为“地区订单统计表”,预览结果如下:

三、小结 

按段分组

按值段进行分组的报表被称为按段分组报表。

从上述介绍可以看出,按段分组的关键在于B1格的表达式用到了plot()函数,按段分组就是利用plot()函数来实现的。

下面我们来看一下plot()函数的用法。

四、函数说明

plot()数据集函数

函数说明:根据数据值段进行分组,俗称“按段分组”

语法:  datasetName.plot( valueExp, listExp{, filterExp{, eqExp{, ascExp{,rootGroupExp}}}} )

参数说明:

valueExp 用于分组的值表达式

ListExp 数据值段列表,同valueExp数据类型相同的数组,要求其中元素从小到大排列

filterExp 过滤表达式

eqExp 返回布尔值的表达式,缺省为false,表示与ListExp元素比较时不包含等于;true包含等于

ascExp 返回布尔值的表达式,缺省为true,表示ListExp返回的数组从小到大排列;false为从大到小排列

rootGroupExp 是否root数据集表达式,为true,从数据集里取数,为false, 则从本单元格主格的结果集里取数

特别说明:

ascExp为true(即listExp从小到大排列)时,eqExp为true时,与元素比较时采用<=,eqExp为false时,采用<;

ascExp为false(即listExp从大到小排列)时,eqExp为true时,与元素比较时采用>=,eqExp为false时,采用>

返回值: 整数组,代表记录按值段分组后组的顺序,如list(0,1,2,3),代表第一组,第二组,第三组,第四组,因此,定义完单元格数据值表达式后还需要定义显示值表达式,比如第一组代表不及格,第二组代表及格等等

示例:

例1:ds1.plot(成绩,list(60,80,90),,true,false) 返回值为list(0,1,2,3),对数据集ds1的记录按成绩段进行分组,60分以下、60-80,80-90,90分以上等四组,同时定义显示值表达式为:map(list(0,1,2,3),list(不及格,及格,良好,优秀))。

例2:ds1.plot(成绩,arg1,,true,false) 其中arg1为整数组,其值为list(60,70,80,90),显示值表达式为:map(to(0,count(arg1)),arg2),其中arg2为字符串组,其值为{"不及格","及格","中","良好","优秀"}。本例通过参数动态控制分组值段以及结果组的显示值。