报表引擎 -扩展模型
介绍
本文档是参考润乾报表模型,继《报表应用思路》的进一步分析,说明平台报表中涉及的多个相关模型,为后续报表开发提供概念以及总体设计支持
术语
名称
说明
单元格
报表由行列整齐的格子组成,这些格子我们称为单元格,所有的单元格组成了报表。
主格和附属格
主格和附属格是互相关联的,当A单元格扩展时,B单元格被 同步复制,此时A单元格称为B单元格的主格,B单元格称为A单元格的附属单元格。
横伸主格
如果A单元格横向扩展则则A为横伸主格
纵展主格
如果A单元格纵向扩展则则A为纵展主格
合并单元格
多个连续的单元格通过合并操作后显示为一个大的格子,合并后的格子成为合并单元格
单元格属性值和表达式
单元格的大部分属性都有属性值和表达式两种。
属性值是在编辑报表时确定的,在运行期间不必经过运算,而表达式在运行期间需要经过运算而获得属性值。
单元格的层次坐标
通过单元格的坐标表示法唯一标识扩展后的格子
扩展概念 可扩展单元格
??? 当单元格的数据值表达式包含集合函数时,该单元格默认为可扩展单元格,可以修改扩展方向属性为默认、横向扩展或者纵向扩展。对于不包含集合函数的单元格,扩展方向属性默认为不可扩展。
横向扩展 描述: 当单元格为可扩展单元格时,可以把该单元格的扩展方向设为横向扩展,此时该单元格会横向进行复制,复制单元格的数据值依次为集合函数的结果数据值,集合返回几个值,单元格就复制几个,这种现象称为单元格的横向扩展 单元格进行扩展时,主单元格或同级别单元格被拉大成合并单元格,附属单元格被复制 (参考主格和附属格的认定规则) 复制出来的新单元格的所有属性都引用被复制单元格的属性
例1:横向扩展
- 当单元格为可扩展单元格时,可以把该单元格的扩展方向设为横向扩展,此时该单元格会横向进行复制,复制单元格的数据值依次为集合函数的结果数据值,集合返回几个值,单元格就复制几个,这种现象称为单元格的横向扩展 单元格进行扩展时,主单元格或同级别单元格被拉大成合并单元格,附属单元格被复制 (参考主格和附属格的认定规则) 复制出来的新单元格的所有属性都引用被复制单元格的属性
从下图中可以看出,B2单元格是横向扩展格,我们把B2单元格边框用颜色标识一下,以便扩展后容易识别,如下图所示
扩展前:
??
B1
C1
??
B2
C2
??
B3
C3
扩展后:?
??
?
B1?
F1
??
B2
??
??
??
F2
??
B3
??
??
??
F3
说明:在这个例子中,B2为横向扩展格,因此B3缺省为B2的附属单元格,因此当B2扩展时,B3被复制;B1虽然在B2的上方,但由于B1不是扩展格,所以不是B2的 横伸主格,B1和B2的横伸主格都是00格,因此B1和B2属于同一级别的单元格, 因此B2扩展的时候,也会把同级别单元格B1拉大。
例2:下方较高级别或同级别单元格被横向拉大扩展前:假设B2是B1的附属单元格,B4也是B1的附属单元格,因此从逻辑上讲,B4至少和B2平级,当B2进行扩展时,B4应该延展,不应该复制
??
B1
C1
??
B2
C2
??
B3
C3
??
B4
C4
扩展后:
??
B1
F1
??
B2
??
??
??
F2
??
B3
??
??
??
F3
??
B4
F4
纵向扩展 描述:- 当单元格为可扩展单元格时,可以把该单元格的扩展方向设为纵向扩展,此时该单元格会纵向进行复制,复制单元格的数据值依次为表达式的结果数据值,表达式返回几个值,单元格就复制几个,这种现象称为单元格的纵向扩展 单元格进行扩展时,主单元格或同级别单元格被拉大成合并单元格,附属单元格被复制 (参考 主格和附属格的认定规则) 复制出来的新单元格的所有属性都引用被复制单元格的属性
从下图中可以看出,B2单元格是纵向扩展格,我们把B2单元格边框用颜色标识一下,以便扩展后容易识别,如下图所示
扩展前:
A1
B1
C1
A2
B2
C2
A3
B3
C3
?
扩展后:
A1
B1
C1
A2
B2
C2
??
??
??
??
A5
B5
C5
?
说明:在这个例子中,B2为纵向扩展格,因此C2缺省附属于B2,因此当B2纵向扩展时,C2被复制;A2虽然在B2的左边,但A2不是扩展格,所以A2不是B2的纵展主格,A2和B2的纵展主格都是00格,因此A2和B2属于同一级别的单元格,所以B2扩展的时候,也会把同级别单元格A2拉大。
例2:右边较高级别或同级别单元格延展扩展前:假设B2是A2的附属单元格,D2也是A2的附属单元格,因此从逻辑上讲,D2至少和B2平级,当B2进行扩展时,D2应该延展,不应该复制
A1
B1
C1
D1
A2
B2
C2
D2
A3
B3
C3
D3
扩展后:
A1
B1
C1
D1
A2
B2
C2
D2
??
??
??
??
A5
B5
C5
D5
说明:由于把A2设成了纵向扩展格,因此A2是B2的纵展主格,同时C2的纵展主格设成了A2,因此B2和C2都附属于A2,他们属于同一级别的单元格,因此B2扩展时,同级别单元格C2被拉大。
不可扩展??? 当单元格里表达式的值是单值时,该单元格默认为不可扩展的单元格。不可扩展的单元格不能缺省做主格。
默认- 单元格的表达式为单值表达式时,该单元格默认为不可扩展单元格 单元格的表达式为集合表达式时,该单元格默认为可扩展单元格 (参考 主格和附属格的认定规则)
- 可扩展单元格的横伸主格横向扩展时,该单元格默认为横向扩展 可扩展单元格的纵展主格纵向扩展时,该单元格默认为纵向扩展 可扩展单元格的主格为行首格时默认为横向扩展,为列首格时该单元格默认为纵向扩展 不满足前面条件则默认为纵向扩展
- A单元格横向扩展时,B单元格被同步复制,此时A单元格称为B单元格的 横伸主格 ,B单元格称为A单元格的附属单元格 横伸主格扩展时,附属单元格被横向同步复制,且与横伸主格的相对位置保持不变,附属单元格本身的附属单元格也将被复制。复制时,复制出来的新单元格的所有属性都引用被复制单元格的属性 在实际的报表逻辑中,附属单元格往往是主单元格在同一维上的更细划分,或者是主单元格当前维度的聚集,有时候附属单元格可能是主单元格的标题。 单元格横向扩展时,有时候需要跟着被复制的附属格不一定在该单元格的下边,此时,需要对附属单元格设置横伸主格属性。
假设:B1是C1的 横伸主格,C1是D1的横伸主格
A1
B1(年)
C1(季度)
D1(月份)
A2
B2
??
??
?? 扩展后:
A1
2000年
第一季
1月
2月
3月
第二季
4月
5月
6月
第三季
7月
??
??
??
??
??
??
??
??
??
??
??
??
?
例2:附属单元格是主单元格在当前维度的聚集??? 假设:C1是B1单元格的附属单元格,B1是C1的横伸主格
A1
B1(季度)
C1(小计)
A2
B2(月份)
A3
B3
C3
??? 扩展后:
A1
第一季
小计
第二季
小计
第三季
小计
A2
1月
2月
3月
4月
5月
6月
7月
8月
9月
A3
??
??
??
??
??
??
??
??
??
??
??
??
?
纵展主格 描述:- A单元格纵向扩展时,B单元格被同步复制,此时A单元格称为B单元格的 纵展主格。B单元格称为A单元格的附属单元格。 纵展主格扩展时,附属单元格被纵向同步复制,且与纵展主格的相对位置保持不变,附属单元格本身的附属单元格也将被复制。复制时,复制出来的新单元格的所有属性都引用被复制单元格的属性 在实际的报表逻辑中,附属单元格往往是主单元格在同一维上的更细划分,或者是主单元格当前维度的聚集,有时候附属单元格可能是主单元格的标题。 单元格纵向扩展时,有时候需要跟着被复制的单元格不一定在该单元格的右边,此时,需要对被复制的单元格设置纵展主格属性。
假设:A2是A3的 纵展主格,A3是A4的纵展主格?
A1
B1
A2(年)
B2
A3(季度)
B3
A4(月份)
B4
??? 扩展后:
A1
B1
2000年
??
第一季
??
1月
??
2月
??
3月
??
第二季
??
4月
??
5月
??
6月
??
第三季
??
7月
??
例2:附属单元格是主单元格的在当前维度的聚集假设A3是A2单元格的附属单元格,A2是A3的纵展主格?
A1
B1
C1
A2(季度)
B2(月份)
C2
<td style="border-bottom: 1pt solid; border-left: 1pt solid; padding-left: 7px; padding-right: 7px; border-top: medium none; border-right: 1pt solid