体验主子格概念
一、报表实例
设计一张按城市分组的“客户信息表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(工业产值),然后按照这个汇总值对组进行逆序排列。