本文档是参考润乾报表模型,继《报表应用思路》的进一步分析,说明平台报表中涉及的多个相关模型,为后续报表开发提供概念以及总体设计支持
名称 |
说明 |
单元格 |
报表由行列整齐的格子组成,这些格子我们称为单元格,所有的单元格组成了报表。 |
主格和附属格是互相关联的,当A单元格扩展时,B单元格被 同步复制,此时A单元格称为B单元格的主格,B单元格称为A单元格的附属单元格。 |
|
横伸主格 |
如果A单元格横向扩展则则A为横伸主格 |
纵展主格 |
如果A单元格纵向扩展则则A为纵展主格 |
多个连续的单元格通过合并操作后显示为一个大的格子,合并后的格子成为合并单元格 |
|
单元格属性值和表达式 |
单元格的大部分属性都有属性值和表达式两种。 |
单元格的层次坐标 |
通过单元格的坐标表示法唯一标识扩展后的格子 |
当单元格的数据值表达式包含集合函数时,该单元格默认为可扩展单元格,可以修改扩展方向属性为默认、横向扩展或者纵向扩展。对于不包含集合函数的单元格,扩展方向属性默认为不可扩展。
从下图中可以看出,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拉大。
扩展前:假设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拉大。
扩展前:假设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被拉大。
当单元格里表达式的值是单值时,该单元格默认为不可扩展的单元格。不可扩展的单元格不能缺省做主格。
假设:B1是C1的 横伸主格,C1是D1的横伸主格
A1 |
B1(年) |
C1(季度) |
D1(月份) |
A2 |
B2 |
|
|
扩展后:
A1 |
2000年 |
第一季 |
1月 |
2月 |
3月 |
第二季 |
4月 |
5月 |
6月 |
第三季 |
7月 |
|
|
|
|
|
|
|
|
|
|
|
|
假设:C1是B1单元格的附属单元格,B1是C1的横伸主格
A1 |
B1(季度) |
C1(小计) |
A2 |
B2(月份) |
|
A3 |
B3 |
C3 |
扩展后:
A1 |
第一季 |
小计 |
第二季 |
小计 |
第三季 |
小计 |
||||||
A2 |
1月 |
2月 |
3月 |
4月 |
5月 |
6月 |
7月 |
8月 |
9月 |
|||
A3 |
|
|
|
|
|
|
|
|
|
|
|
|
假设:A2是A3的 纵展主格,A3是A4的纵展主格
A1 |
B1 |
A2(年) |
B2 |
A3(季度) |
B3 |
A4(月份) |
B4 |
扩展后:
A1 |
B1 |
2000年 |
|
第一季 |
|
1月 |
|
2月 |
|
3月 |
|
第二季 |
|
4月 |
|
5月 |
|
6月 |
|
第三季 |
|
7月 |
|
假设A3是A2单元格的附属单元格,A2是A3的纵展主格
A1 |
B1 |
C1 |
A2(季度) |
B2(月份) |
C2 |
A3(小计) |
C3 |
扩展后:
A1 |
B1 |
C1 |
第一季 |
1月 |
|
2月 |
|
|
3月 |
|
|
小计: |
|
|
第二季 |
4月 |
|
5月 |
|
|
6月 |
|
|
小计: |
|
|
第三季 |
7月 |
|
8月 |
|
|
9月 |
|
|
小计: |
|
单元格进行扩展时,主单元格或同级别单元格拉大成合并单元格,附属单元格被复制(横伸主格扩展时,附属格被横向同步复制; 纵展主格扩展时,附属格被纵向同步复制)
单元格扩展时,附属单元格可以动态引用主单元格的值。随着主单元格扩展,附属单元格被复制到不同的位置,对主单元格的引用也相应的变化。
例:ds1.select(col1,col2=A2) (其中A2为扩展主格)
单元格扩展时,附属单元格如采用缺省的聚集表达式,则缺省统计所属主格区域内所有目标单元格的值 例:Sum(C3{})
横伸主格的认定: 横伸主格的认定是向上依次查找。这里假设当前格是B3,上方单元格是B2
纵展主格的认定:纵展主格的认定是向左依次查找。这里假设左边单元格是B2,当前格是C2
说明:
1、 Lk为Cellx的纵展主格,lk为纵展主格扩展后的次序,即扩展后的第几个单元格,如果不指定lk或者lk为0,则表示为当前表达式所在单元格所属的当前纵展主格Lk,Cellx为目标单元格,应该为Lk,Lk-1,。。。。。。L1的附属单元格
2、 如果没有纵展主格,只有横伸主格的话,分号不能省略,即写成Cellx {;Lk':lk', Lk-1':lk-1',……L1':l1'}[]
3、 如果没有横伸主格,只有纵展主格的话,分号可以省略,即写成Cellx {Lk:lk, Lk-1:lk-1,……L1:l1 }[]
4、 Lk的次序是从远到近的,就是从离当前格最远的主格开始的
5、 表达式最后面跟的花括号表示集合
举例:
假设:a2-a7单元格由A2单元格扩展而来
扩展前:
A1 |
B1 |
C1 |
D1 |
A2 |
B2 |
C2 |
D2 |
扩展后:
C2{A2:0,B2:0}[]:如果C2{A2:0,B2:0}[]表达式写在d4单元格中,那么d4就是当前格,B2:0表示当前格所属的B2分组格,也就是扩展后的b4,A2:0表示当前格所属的A2分组格,也就是扩展后的a2,因此C2{A2:0,B2:0}[]表达式表示扩展后的c4-c6单元格
C2{A2:2,B2:1}[]: A2:2表示A2扩展后的第二个单元格,即扩展后的a7,B2:1表示a7分组区域内,B2扩展后的第一个单元格,即扩展后的b7,因此整个表达式表示c7,c8,c9三个单元格
B2{A2:0,B2:0}[]:如果B2{A2:0,B2:0}[]写在d11单元格中,那么d11就是当前格,A2:0表示当前格所属的A2分组格,也就是扩展后的a7,B2:0表示当前格所属的B2分组格,也就是扩展后的b10,整个表达式表示扩展后的b10单元格
说明:
欢迎转载,转载请注明:转载自周金根 [ http://zhoujg.cnblogs.com/ ]