多片扩展
一、报表实例
我们看下面这个报表:
这是一个很常见的主子报表,主表和子表往往存储在不同的物理表中,而且通常是一对多的关系。在一般的报表工具中,这种报表往往利用专门的子表控件来实现,虽然功能实现了,但是存在的缺点是:主子表之间不容易共享数据,不容易进行表间数据的运算。快逸报表利用其多源关联分片模型,很轻松地在单个报表中实现了主子表的功能。
二、设计过程
1、引用数据集demo_zhubiao(如下图),demo_运货商
定义数据集demo_产品详细信息
demo_产品详细信息:select 订单ID,产品ID,单价,折扣比例,数量 from DEMO_ORDERDETAILS
2、 编辑报表
(1)B2单元格表达式:=demo_zhubiao.dselect(订单ID)
(2)D2单元格表达式:=date(demo_zhubiao.发货日期),显示格式:yyyy年MM月dd日
(3)F2单元格表达式:=date(demo_zhubiao.到货日期),显示格式:yyyy年MM月dd日
(4)B4单元格表达式:=demo_zhubiao.客户ID
(5)F4单元格表达式:=demo_zhubiao.货主名称
(6)B5单元格表达式:=demo_zhubiao.运货商ID,显示值表达式:demo_运货商.select1(COMPANYNAME,value()==SHIPPERID)
(7)D5单元格表达式:=demo_zhubiao.运货费,显示格式:¥#0.00
(8)F5单元格表达式:=demo_zhubiao.货主城市
(9)B8单元格表达式:=demo_产品详细信息.select(产品ID,false,订单ID==B2,,true)
(10)C8单元格表达式:=demo_产品详细信息.单价,显示格式:¥#0.00
(11)D8单元格表达式:=demo_产品详细信息.折扣比例,显示格式:#0.00
(12)E8单元格表达式:=demo_产品详细信息.数量
(13)F8单元格表达式:=C8*E8,设置显示格式为:¥#0.00
(14)设置A10单元格行后分页
3、 设置左主格属性
将A1~A10单元格的左主格设为B2单元格。
4、 保存预览
此报表保存为“客户订单”,预览结果如下:
三、小结
这个例子中,左主格是人为指定的,并不是缺省的,这用到了主格模型中的主格认定规则,主格的认定包括缺省认定和人为认定,下面我们对该理论进行总结介绍:
主格认定规则
1. 缺省主格认定
单元格横向扩展时,上方横向扩展单元格缺省为它的上主格,下方单元格缺省为它的附属格;如果上方没有横向扩展格,则上主格缺省为 `0 格。
单元格纵向扩展时,左边纵向扩展单元格缺省为它的左主格,右边单元格缺省为它的附属格;如果左边没有纵向扩展格,则左主格缺省为 `0 格。
2. 人为改变主格规则
除了上面提到的缺省情况外,快逸报表允许人为地改变单元格的主格。可以将某个单元格的左主格设置为某个纵向扩展格、上主格设置为某个横向扩展格,左主格和上主格是分别设置的。
为了符合扩展变化的规则,人为设置主格需要满足一些条件,即主格设置注意事项:
- 左主格必须是纵向扩展格,上主格必须是横向扩展格。否则设置无效。
- 不允许出现循环设置的情况,即设置A的主格是B,B的主格是C,C的主格又是A,出现循环设置时认为设置有误,报表无法计算。显然,在缺省的情况下是不可能出现循环设置的,而在人为设置时必须避免这种情况的出现。
- 横向扩展格不允许有左主格,纵向扩展格不允许有上主格。
人为设置主格时,可能发生左主格在右边、上主格在下边的情况,而且主格也不一定和附属格在同一行或同一列上。