分组报表- 不规则分组-报表设计高级教程
目录

分组报表

一、报表实例

我们先看下面这个分组报表:

从上面的这个报表可以看出,这是一个分组报表,左边按照地区进行了完全的分组,整个报表被分成东北、华北、华东、华南、西北、西南等6组,我们看一下这样的报表是如何设计的。

二、设计过程

1、定义数据集demo_订单明细表

demo_订单明细表:select DEMO_CUSTOMERS.城市,DEMO_CUSTOMERS.地区,DEMO_ORDERDETAILS.数量,DEMO_ORDERDETAILS.单价,DEMO_ORDERDETAILS.折扣比例 from DEMO_CUSTOMERS,DEMO_ORDERS,DEMO_ORDERDETAILS where DEMO_CUSTOMERS.客户ID=DEMO_ORDERS.客户ID and DEMO_ORDERS.订单ID=DEMO_ORDERDETAILS.订单ID

2、编辑报表


    (1)A3单元格表达式:=demo_订单明细表.Group(地区,false)

(2)B3单元格表达式:=demo_订单明细表.Group(城市,false)

(3)C3单元格表达式:=demo_订单明细表.sum(数量*单价),显示格式:¥#,##0.00

3、保存预览

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

三、小结 

分组报表

从上面的表达式可以看出,该报表最关键的是A3格和B3格,利用group函数对数据集进行了分组,并把分组结果在报表中进行纵向扩展。
    这个例子用到了group()函数,下面我们做一下介绍。

group()

函数说明: 根据分组表达式,从数据集中选出一组组集。

语法:  datasetName.group(<selectExp>, ,<filterExp>) //适用于不需要排序或数据集中已排好序

datasetName.group(selectExp{,descExp{,filterExp{,sortExp{,groupSortExp{,groupDescExp,rootGroupExp}}}}}})

参数说明:

selectExp 选出的分组表达式,可以是字段列名/列号,也可以是表达式.列号用#n表示,例如:#0代表第0列,#1代表第1列,依此类推

descExp 分组前记录的排序顺序,true为逆序,false为顺序

filterExp 过滤表达式

sortExp 分组前记录的排序依据表达式

groupSortExp 分组后对组的排序表达式,一般是汇总运算的表达式

groupDescExp 组排序顺序,true为逆序,false为顺序

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

返回值: 一组数据的集合,数据类型由selectExp的运算结果来决定

示例:

例1:ds1.group(class) 把数据集ds1中所有记录按照class字段进行分组,并返回每组的class值组成的集合。

例2:ds1.group(class, true) 把数据集ds1中所有记录按照class字段降序排列,然后根据class进行分组,并返回每组的class值组成的集合。

例3:ds1.group(class,false,sex=='1') 从数据集ds1中选取sex=='1'的记录,按照class字段升序排列,然后根据class进行分组,并返回每组的class值组成的集合。

例4:ds1.group(class, true, sex=='1', id ) 从数据集ds1中选取sex=='1'的记录,按照id字段降序排列,然后根据class进行分组,并返回每组的class值组成的集合。

例5:ds1.group(省份,true,,,ds1.sum(工业产值),true) 对数据集ds1按照省份进行分组,分组后求出每组的sum(工业产值),然后按照这个汇总值对组进行逆序排列。