复杂规则分组

预备知识:先做一张多普通分组报表,效果如下图所示:

做法如下:

第一步:定义数据集:

ds1:SELECT  客户.城市,客户.地区,订单明细.数量,订单明细.单价  FROM 客户,订单,订单明细 
    WHERE 客户.客户ID = 订单.客户ID AND 订单.订单ID=订单明细.订单ID 

第二步:写入单元格表达式,如下图所示:

从上图可以看出,该报表最关键的是A2格和B2格,利用group函数对数据集进行了分组,并把分组结果在报表中进行纵向扩展。

1 不完全分组

我们把上面的报表做些变化,不要把所有的记录用于分组,因为某些组用户并不关心,我们仅仅保留“华北”、“华东”这两个组,把剩余的组全部归并成一组,命名为“其他”,报表样式如下图所示:

做法如下:

定义单元格属性和表达式

其中:

在A2单元格输入表达式:= ds1.group(地区,false,地区=='华东' or 地区=='华北') 设置为纵向扩展

在B2单元格输入表达式:=ds1.Group(城市,false) 设置为纵向扩展

在C2单元格输入表达式:=ds1.sum(数量*单价) 设置显示格式为:¥1234.01

在B3单元格输入表达式:=ds1.Group(城市,false,地区!='华东' and 地区!='华北') 设置为纵向扩展

在C3单元格输入表达式:=ds1.sum(数量*单价) 设置显示格式为:¥1234.01

通过以上示例可以看出,皕杰报表处理这种问题很巧妙,皕杰报表提供的select和group函数均带有过滤条件参数,可以在进行选出或者分组的时候,过滤掉无关的记录,仅仅对部分记录进行分组。之后还可以对同一个数据集重复进行多次的分组或者选出、汇总操作,从而可以实现很复杂的分组报表。

2 过滤分组

我们把上一节中的报表继续做变化,效果如下图所示:

图上可以看出,“华北”组中的一部分记录被过滤,并单独拎出来在“其中:北京”组和“其中:天津”组中进行了统计,便于用户一目了然,既了解总的统计数据,又了解“北京”和“天津”的统计数据,这种同一部分记录在不同组中统计的分组报表称为过滤分组报表。

做法如下:,

定义单元格属性和表达式

其中:

在A2单元格输入表达式:=ds.groupex(true,地区=="华北","华北",城市=="北京","    其中:北京",城市=="天津","    其中:天津",地区=="华南","华南",城市=="深圳","    其中:深圳",地区=="华东","华东","其他") 设置为纵向扩展

在B2单元格输入表达式:=ds.sum(数量*单价)

在C2单元格输入表达式:=ds.sum(折扣*数量*单价) 设置显示格式为:¥1234.01

 在D2单元格输入表达式:=B2-C2 设置显示格式为:¥1234.01

从上述介绍可以看出,过滤分组的关键在于A2格的表达式发生了变化,用GroupEx函数代替了Group函数。通过给GroupEx传递不同的过滤条件,可以实现重叠分组、条件分组、归并分组等等常见的分组方式。例如可以把销售额大于1000万的地区分成一组、把销售额在500~1000万的分成一组等等。

3 按段分组

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

第一步:定义数据源,如下所示:

ds1:SELECT  DEPT,SEX, DEGREE, BONUS, EMPNAME FROM EMPLOYEE
ds2: SELECT DEGREE.ID,DEGREE.NAME FROM DEGREE

第二步:设计表样,定义表达式

其中:

A3单元格输入表达式:=ds1.split(bonus,list(5000,10000,15000)),显示值表达式:=map(list(0,1,2,3),list('五千以下','五千到一万','一万到一万五','一万五以上')) ,设置为纵向扩展

B3单元格输入表达式:= ds1.select(EMPNAME,false,,bonus)

C3单元格输入表达式:= ds1.DEGREE,显示值表达式:=ds2.getone(name,id==@value)

D3单元格输入表达式:= ds1.SEX,显示值表达式:=map(list("1","2"),list("男","女"))

E3单元格输入表达式:= ds1.BONUS,设置为人民币格式,并保留2位小数

E4单元格输入表达式:= now() 显示格式设置为中文日期格式

第三步:保存预览

在上图中我们可以看到,报表根据奖金数额将员工分成四组,分别统计“五千以下”、“五千到一万”、“一万到一万五”、“一万五以上”四个奖金段的员工状况。 这种按值段进行分组的分组报表被称为按段分组报表。