多片扩展- 多源关联分片-报表设计高级教程
目录

多片扩展

一、报表实例

我们看下面这个报表:

这是一个很常见的主子报表,主表和子表往往存储在不同的物理表中,而且通常是一对多的关系。在一般的报表工具中,这种报表往往利用专门的子表控件来实现,虽然功能实现了,但是存在的缺点是:主子表之间不容易共享数据,不容易进行表间数据的运算。快逸报表利用其多源关联分片模型,很轻松地在单个报表中实现了主子表的功能。

二、设计过程

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,出现循环设置时认为设置有误,报表无法计算。显然,在缺省的情况下是不可能出现循环设置的,而在人为设置时必须避免这种情况的出现。
    - 横向扩展格不允许有左主格,纵向扩展格不允许有上主格。

人为设置主格时,可能发生左主格在右边、上主格在下边的情况,而且主格也不一定和附属格在同一行或同一列上。