多层交叉报表
一、报表实例
我们先看下面这个多层交叉报表:
从上面这个报表可以看出,这是一个多层的交叉报表,上边有两层动态横向扩展的上表头,左边有两层动态纵向扩展的左表头,中间的交叉点进行汇总统计,统计值和上表头、左表头息息相关。我们看一下这样的报表在快逸报表中是如何设计的。
二、设计过程
1、 引用数据集demo_duoyuan1
select demo_customers.地区,demo_customers.城市,demo_orderdetails.数量,demo_orderdetails.折扣比例,demo_orderdetails.单价,demo_orders.订购日期,demo_orders.雇员ID,demo_orderdetails.产品ID from demo_orders,demo_orderdetails,demo_customers where demo_orders.客户ID=demo_customers.客户ID and demo_orders.订单ID=demo_orderdetails.订单ID and demo_orders.订购日期 is not null and demo_customers.地区 in ('华南','西南')
2、 编辑报表
(1)A3单元格表达式:=demo_duoyuan1.group(year(订购日期),false)+"年"
(2)C3单元格表达式:=demo_duoyuan1.group(month(订购日期),false)+"月"
(3)D1单元格表达式:=demo_duoyuan1.Group(地区,false),扩展方向:横向
(4)D2单元格表达式:=demo_duoyuan1.Group(城市,false),扩展方向:横向
(5)D3单元格表达式:=demo_duoyuan1.Sum(数量*单价),显示格式:#
从上图可以看出,上表头分别通过D1格和D2格横向扩展形成,左表头通过A3格和C3格纵向扩展形成,中间的交叉点利用sum函数进行汇总,于是一个多层交叉报表很轻松就完成了。
3、保存预览
此报表保存为“销售额统计表1”,预览结果如下:
三、小结
这个例子用到了非线性报表模型中的扩展模型以及主格和附属格的模型,介绍如下:
1. 扩展
当一个单元格的值是包含多个值的一个集合(即:单元格的数据值表达式为集合表达式)时,可以在报表展现时将该单元格扩展为多个单元格。例如:
扩展是单元格的一个基本属性。当单元格的数据值表达式为集合表达式时,该单元格默认为可扩展单元格。扩展也可以基于报表属性栏的“扩展”栏进行设置。
扩展属性可被设为:默认扩展、纵向扩展、横向扩展、不可扩展。
- 默认扩展:此时该单元格会按默认方向进行扩展,即:如果该单元格不跟随其他单元格扩展,则默认扩展方向为纵向;如果该单元格跟随其他单元格扩展,则以其主格的扩展方向为该单元格的扩展方向。
- 纵向扩展:此时该单元格会纵向进行扩展。
- 横向扩展:此时该单元格会横向进行扩展。
- 不可扩展:此时该单元格不会扩展。如果该单元格的数据值表达式为集合表达式,在报表展现时将该集合的所有值在该单元格列出,用逗号隔开。
在扩展时,复制出的单元格的数据值依次为表达式的结果数据值,表达式返回几个值,单元格就复制几个。复制出来的新单元格的所有属性都引用被复制单元格的属性。
2. 跟随扩展
当一个单元格扩展时,它可以带动其他单元格跟随它一同扩展。
主格和附属格:
在出现跟随扩展时,原扩展格(如上图中A1格)是主动复制的,被称为跟随它扩展的单元格(如上图中A2格)的 主格,而后者是被动跟随复制的,被称为扩展格的 附属格 或 子格。主格和附属格是相对的概念,即某格是一格的主格或附属格,不存在单独的主格和附属格。
左主格和上主格:
单元格进行纵向扩展时,我们称该单元格为其附属格的左主格;单元格进行横向扩展时,我们称该单元格为其附属格的上主格。
跟随扩展可以同时基于横、纵两个方向。一个单元格可以既有左主格又有上主格。
跟随扩展按下面的规则进行:
- 在默认的情况下,一个扩展的单元格,当其纵向扩展时,其右边的单元格会自动跟随它扩展。即其右边的单元格自动是其附属格。或者说,一个单元格,会把它左边第一个(从右向左数)扩展格作为其主格,跟随它扩展。
- 在默认的情况下,一个扩展的单元格,当其横向扩展时,其下边的单元格会自动跟随它扩展。即其下边的单元格自动是其附属格。或者说,一个单元格,会把它上边第一个(从下向上数)扩展格作为其主格,跟随它扩展。
- 某个单元格的主格属性可以在单元格的“扩展”属性-左主格/上主格中设置。当设置了相应属性时,该属性优先于上述默认的规则。例如,可以把某个纵向扩展格右边的单元格设为它的左主格,或者把某个横向扩展格下方的单元格设为它的上主格。例如:
3. 多层扩展
一个单元格可能既跟随其他单元格扩展(做为其他单元格的附属格),同时也自身扩展(做为另外单元格的主格)。例如:
多层扩展时,扩展次序是从主到次的,即先扩展主格,然后扩展其附属格,再扩展其二级附属格,依此类推。
单元格横向扩展时,会将其同列的上主格拉大,把其附属单元格复制,特别地,如果其某个上主格不在同列上,则该上主格不会被拉大;
单元格纵向扩展时,会将其同行的左主格拉大,把其附属单元格复制,特别地,如果其某个左主格不在同行上,则该左主格不会被拉大。
4. 交叉扩展
同一报表中可能同时有纵向扩展格和横向扩展格,如果它们的子格有重叠部分,则这些子格就既有左主格又有上主格,在扩展时会被既向下又向右复制,形成一片矩形单元格区域,从而做到交叉扩展。
相应地,在这种机制下,多层交叉也不难实现。