分组汇总- 动态格间运算-报表设计高级教程
目录

分组汇总

一、报表实例

上面的例子是一个多层分组报表,报表按地区、城市做了分组,如果要统计每一组的销售额的合计该如何做呢?我们来看看快逸报表是如何实现的。

二、设计过程

1、引用数据集demo_销售表

2、编辑报表 


    (1)A2单元格表达式:=demo_销售表.Group(地区,false)

(2)B2单元格表达式:=demo_销售表.Group(城市,false)

(3)C2单元格表达式:=demo_销售表.Group(产品名称,false)

(4)D2单元格表达式:=ddemo_销售表.Sum(销售金额),显示格式:¥#,##0.00,缩进:3

(5)D3单元格表达式:=sum(D2{}),显示格式:¥#,##0.00,缩进:5

(6)D4单元格表达式:=sum(D2{}),显示格式:¥#,##0.00,缩进:5

(7)D5单元格表达式:=sum(D2{}),显示格式:¥#,##0.00,缩进:5

 D3格随B2格的扩展而扩展,因此,D3单元格统计的是每个城市所有产品的销售额之和;

 D4格随A2格的扩展而扩展,因此,D4单元格统计的是每个地区所有产品的销售额之和;

 D5格是总的汇总,不随任何单元格的扩展而扩展,因此D5单元格统计的是所有地区产品的销售额之和。

3、保存预览

此报表保存为“分组汇总报表”,预览结果如下:

D3、D4、D5单元格的表达式都用到了格集的汇总,下面我们介绍一下格集及其表示法。

三、小结 

格集

格集,是指一组单元格的集合。在实际应用中,往往需要对一组单元格进行运算,这些单元格有可能是固定格,也有可能是主动扩展、被动复制格,为了能在表达式中描述确定的一组单元格,我们引入格集的概念。
    为了说明格集的概念及其作用,我们看看下面的表格:

 

填入数据:


 
    如果我们要进行如下统计:①Tom买牛奶的日期;②Tom买毯子的金额;③Jerry在2005-2-1买的商品;④所有买牛奶的金额。在做这些统计时,涉及到的数据都是发生在一系列格子中的,我们分别来看一下:①c2,c3;②d4,d5;③d9,d11;④d2,d3,d6,d7,d8。

格集表示法

格集有以下几种表示方法:

- Cellx  可以表示只有一个单元格的格集,如:B3。单独一个单元格,也可以构成格集,即只有一个成员的集合。

- Cellx:Celly  其中Cellx与Celly均为单元格,该表达式表示以Cellx与Celly为对角点圈起的矩形区域,而且,Cellx在左上角,Celly在右下角。如:B2:C4。它表示由B2,B3,B4,C2,C3,C4构成的集合。

- 结果为集合的表达式。比如,对于不连续的多组单元格,可以用List()函数来表示。如:
    List(B1,C2,B5,A4);
    List(A2:A4,B2:B4);
    List(A2,B2:B4)

- Cellx[Coordinate]{},表示在Cellx[层次坐标/位移坐标]所界定的范围内的所有单元格的集合。参见:扩展格的格集表示法

- Cellx[省略主格的Coordinate]{},表示在Cellx[省略主格的层次坐标/位移坐标]所界定的范围内的所有单元格的集合。参见:省略主格的格集表示法

- Cellx[Coordinate]{criteriaExp},表示在Cellx[层次坐标/位移坐标]所界定的范围内的所有符合criteriaExp条件的单元格的集合。参见:格集的条件表达式

扩展格的格集表示法:
    扩展格的格集表示,一般和层次坐标结合起来,由层次坐标界定一个范围,格集是在这个范围内的所有单元格的集合。

语法:Cellx[Coordinate]{}

说明:表示在Cellx[层次坐标/位移坐标]所界定的范围内的所有单元格的集合。

格集相当于在层次坐标或者位移坐标的基础上增加了{},即可表示该层次坐标或者位移坐标界定的范围内的所有单元格。如果没有{},而层次坐标界定的范围内的单元格不止一个,那么该层次坐标返回的是该范围内的第一个单元格,有了{},就返回该范围内单元格的集合。

例如:

根据上图,我们可以得到:
    C2[`0]{} 返回扩展后的c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12
    C2[A2:2]{} 返回扩展后的c7,c8,c9,c10,c11,c12
    D2[A2:1,B2:2]{} 返回扩展后的d4,d5,d6
    D2[A2:2,B2:1]{} 返回扩展后的d7,d8,d9

省略主格的格集表示法:

为了简化格集的表示,很多时候会用到省略主格表示法,其缺省引用规则和层次坐标/位移坐标完全一样,即标单元格和当前格的主格相同时,层次坐标/位移坐标中的该主格可以省略;如果所有主格都相同,则层次坐标/位移坐标可以为空,甚至连中括号都可以省略。

语法:Cellx[省略主格的Coordinate]{}

说明:表示在Cellx[省略主格的层次坐标/位移坐标]所界定的范围内的所有单元格的集合。

如果层次坐标/位移坐标完全省略,则缺省的格集表示法为: Cellx[]{}或Cellx{}

例1:

例2:

对C4单元格来说,统计的是当前组中所有纵向扩展出来的C3单元格的总和,而这些单元格与当前格C4有共同的左主格A3,因此省略主格的汇总表达式为sum(C3{})。

对D3单元格来说,统计的是当前组中所有横向扩展出来的C3单元格的总和,而这些单元格与当前格C4有共同的上主格C1,因此省略主格的汇总表达式为sum(C3{})。

对D4单元格来说,统计的是当前组中所有扩展出来的C3单元格的总和,而这些单元格与当前格C4有共同的左主格A3和上主格C1,因此省略主格的汇总表达式为sum(C3{})。

格集的应用

在文档中,统一用CellSet表示格集。
    格集往往在单元格的范围计算函数中使用,例如sum(CellSet)。如:
    Sum(A2:A4)
    Sum(List(A2,B2:B4))
    Sum(A2{})
    需要注意,Cellx:Celly中左上和右下均为单元格,而不能用Cell{}和Celly{}。对于象下例中的情况,如果要计算黄色区域所有数据的汇总值,应写成sum(B1[A1:1,B1:1]:C2[A1:3,C2:2])。