目录

体验主子格概念

一、报表实例

设计一张按城市分组的“客户信息表1”。

二、设计过程

第1步:新建报表

第2步:定义数据集

demo_客户信息:select 城市,客户名称,联系人,联系人职务 from DEMO_CUSTOMERS

第3步:编辑报表

1. 设置A2单元格中表达式为:=demo_客户信息.Group(城市,false)

2. 设置B2单元格中表达式为:=demo_客户信息.Select(客户名称)

此时B2单元格的左主格默认是A2单元格,因此,B2单元格随A2单元格的扩展而扩展。

3. 设置C2单元格中表达式为:=demo_客户信息.联系人

4. 设置D2单元格中表达式为:=demo_客户信息.联系人职务

单元格的表达式,可以通过“单元格向导”设置。

5. 在第一行填上字段标题,并设置第一行的“行类型”为“报表头”。

第4步:保存预览

此报表保存为“客户信息表1”,预览效果如下图所示:

第5步:打印导出

三、小结

1. 分组报表

 分组报表是以分组的形式展现报表,它与我们前面学的网格式报表的关键区别,是在列表函数Select()的前面增加了一个分组函数Group(),使得数据先按照分组字段划分为几组,再在各组内列出数据。因为分组字段是列表字段的主格,所以列表字段跟随分组字段扩展,列出对应的数据。

2. 跟随扩展:

当一个单元格扩展时,它可以带动其他单元格跟随它一同扩展。
     
    如网格式报表中,A2单元格扩展时,B2~F2单元格跟随它一同扩展。本节的分组报表中,B2单元格扩展时,C2、D2单元格跟随它一同扩展。

在出现跟随扩展时,原扩展格(如上图中A1格)是主动复制的,被称为跟随它扩展的单元格(如上图中A2格)的 主格,而后者是被动跟随复制的,被称为扩展格的 附属格 或 子格。主格和附属格是相对的概念,即某格是另一格的主格或附属格,不存在单独的主格和附属格。

四、函数说明

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(工业产值),然后按照这个汇总值对组进行逆序排列。