按段分组
一、报表实例
按段分组也是比较典型的不规则分组报表,其分组是根据数据的值段来分的,例如按照分数段、年龄段、按时间段等,属于某个值区间的记录归到一个组里,如下图所示:
从上图中我们可以看到,报表根据订购日期将订单数量和订单金额分成四组,分别统计“1996年圣诞前”、“1996年圣诞~1997年六一”、“1997年六一~1998年五一”、“1998年五一以后”四个时间段的订单。
这种按值段进行分组的报表被称为按段分组报表。
下面我们介绍一下快逸报表中如何实现该报表。
二、设计过程
1、定义数据集demo_订单详细信息
demo_订单详细信息: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单元格表达式:=demo_订单详细信息.plot(date(订购日期),arg1)
显示值表达式:map(to(0,count(arg1)+1),arg2),扩展方式:横向扩展
(2)A3单元格表达式:=demo_订单详细信息.Group(地区,false)
(3)B3单元格表达式:=demo_订单详细信息.count()
(4)C3单元格表达式:=demo_订单详细信息.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()
函数说明: 计算一个值在一个完全划分中的位置
语法: plot( valueExp, ListExp{, eqExp}{, ascExp} )
参数说明:
valueExp 值或表达式,可以是字符串、数值、日期、时间等
ListExp 同valueExp数据类型相同的数组,要求其中元素从小到大排列
eqExp 划分时是否包含等于,布尔值,缺省为false,表示与ListExp元素比较时不包含等于;true包含等于
ascExp ListExp中元素的排序,布尔值,缺省为true,表示从小到大排列;false为从大到小排列
特别说明:
ascExp为true(即ListExp从小到大排列)时,eqExp为true时,与元素比较时采用<=;eqExp为false时,采用<
ascExp为false(即ListExp从大到小排列)时,eqExp为true时,与元素比较时采用>=;eqExp为false时,采用>
返回值:整数组,代表记录按值段分组后组的顺序,如list(0,1,2,3)代表第一组,第二组,第三组,第四组,因此,定义完单元格数据值表达式后,还需要定义显示值表达式,比如第一组代表不及格,第二组代表及格等等
示例:
例1:plot( 0, list(0,10,100) ) 返回1,因为第一个集合为<0,不包含0,第二个集合为>=0且<10,所以0落在了第二个集合中,集合的编号从0开始起编,依次为0,1,2,3,所以结果为1。
例2:plot(0, list(0,10,100),true,true) 返回0。
例3:plot(10, list(0,10,100),false ) 返回2。
例4:plot(10,list(100,10,0),true,false) 返回1。
详细说明: 划分是指将一个集合划分成几个集合,如数组{0,10,100},在eqExp返回false的情况下,将整数集或实数集划分成4个集合,依次分别是<0、<10(此集合中元素必定>=0)、<100(此集合中元素必定>=10)及其它(即>=100);在eqExp返回true的情况下,将整数集或实数集划分成4个集合,分别是<=0、<=10(且>0)、<=100(且>10)及其它(即>100)。对于数组{100,10,0},eqExp为false时也划分成4个集合,分别为>100,>10(且<=100),>0(且<=10)及其它(即<=0); eqExp为true时则为>=100,>=10(且<100),>=0(且<10)及其它(即<0)。