多片扩展

阅读(1569) 标签: 多片扩展,

本节将以一个主子表为例,深入了解主格认定规则,学习select()函数的用法。

一个例子

我们看下面这个报表:

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

 

1、  首先定义数据集:

ds1SELECT DISTINCT 订单.订单ID,订单.客户ID,订单.发货日期,订单.到货日期,订单.货主名称,订单.运货商,订单.运货费,订单.货主城市 FROM 订单

ds2SELECT 订单明细.产品ID,订单明细.单价,订单明细.折扣,订单明细.数量,订单明细.订单ID FROM 订单明细

2、  定义单元格的表达式

(1) B2单元格输入表达式:= ds1.select(订单ID:1,,,订单ID)

(2) D2单元格输入表达式:= ds1.发货日期

设置显示格式为:yyyyMMdd

(3) F2单元格输入表达式:= ds1.到货日期

设置显示格式为:yyyyMMdd

(4) B4单元格输入表达式:= ds1.客户ID

(5) F4单元格输入表达式:= ds1.货主名称

(6) B5单元格输入表达式:= ds1.运货商

(7) D5单元格输入表达式:= ds1.运货费

设置显示格式为:¥#0.00

(8) F5单元格输入表达式:= ds1.货主城市

(9) B8单元格输入表达式:= ds2.select(产品ID:1,订单ID==B2,,产品ID)

(10)  C8单元格输入表达式:= ds2.单价

设置显示格式为:¥#0.00

(11)  D8单元格输入表达式:= ds2.折扣

设置显示格式为:#0.0

(12)  E8单元格输入表达式:= ds2.数量

(13)  F8单元格输入表达式:=C8*E8

设置显示格式为:¥#0.00

3、  设置左主格属性

A1A2A3A4A5A6A7A8A9单元格的左主格设为B2单元格。

4、  报表保存为10.6.1.rpx,预览报表

这个例子中,我们发现,左主格是人为指定的,并不是缺省的,这用到了报表主格模型中的主格认定规则,主格的认定包括缺省认定和人为认定,下面我们对该理论进行介绍:

主格认定规则

缺省主格认定

单元格横向扩展时,上方横向扩展单元格缺省为它的上主格,下方单元格缺省为它的附属格;如果上方没有横向扩展格,则上主格缺省为 `0

单元格纵向扩展时,左边纵向扩展单元格缺省为它的左主格,右边单元格缺省为它的附属格;如果左边没有纵向扩展格,则左主格缺省为 `0

 

人为改变主格规则

除了上面提到的缺省情况外,我们允许人为地改变单元格的主格。可以将某个单元格的左主格设置成某个纵向扩展格、上主格设置的某个横向扩展格,左主格和上主格是分别设置的。

 

为了符合扩展变化的规则,我们可以知道人为设置主格需要满足一些条件:

Ø  左主格必须是纵向扩展格,上主格必须是横向扩展格,否则设置无效。

Ø  不允许出现循环设置的情况,即设置A的主格是BB的主格是CC的主格又是A,出现循环设置时认为设置有误,报表无法计算。显然,在缺省的情况下是不可能出现循环设置的,而在人为设置时必须避免这种情况的出现。