1. 概述
1.1 问题描述
当数据同时由纵向扩展和横向扩展而来,也就是 交叉表 的情况下,层次坐标该怎么写呢?
相对层次坐标
绝对层次坐标
只获取某一列或某一行:也是绝对层次坐标应用的一种
1.2 实现思路
双向扩展场景下,不管是相对层次坐标还是绝对层次坐标,都要使用纵向和横向的组合写法,且要遵循先纵向后横向的原则。
层次坐标类型 | 公式写法 | 计算结果 | 参数解释 |
---|---|---|---|
相对层次坐标 | Cellx[Celly:-k ;Cellz:p] | 第 p 列相对偏移 -k | Cellx:横纵向同时扩展出来的交叉数据单元格 Celly:纵向扩展单元格,Cellx 的左父格 Cellz:横向扩展单元格,Cellx 的上父格 k:数字 p:数字 |
Cellx[Celly:+k ;Cellz:p] | 第 p 列相对偏移 +k | ||
Cellx[Celly:p ;Cellz:-k] | 第 p 行相对偏移 -k | ||
Cellx[Celly:p ;Cellz:+k] | 第 p 行相对偏移 +k | ||
绝对层次坐标 | Cellx[Celly:k ;Cellz:p] | 第 k 行第 p 列交叉处的值 | |
Cellx[Celly:k ;Cellz:!-p] | 第 k 行倒数第 p 列交叉处的值 | ||
Cellx[Celly ;Cellz:k] | 获取第 k 列所有值 | ||
Cellx[Celly:k ;Cellz] | 获取第 k 行所有值 |
2. 新建示例模板
此处我们新建一个交叉报表,用于下面演示双向扩展时相对层次坐标和绝对层次坐标的写法。
2.1 准备数据
新建数据集 ds1,SQL 语句为:SELECT * FROM 销量,如下图所示:
2.2 设计表格
将「产品」字段拖到 B1 单元格,设置为横向扩展。
将「销售员」字段拖到 A2 单元格,设置为纵向扩展。
将「销量」字段拖到 B2 单元格,设置为不扩展,此时 B2 单元格就是根据 B1 和 A2 双向扩展出来的数据。
2.3 效果预览
交叉表设计好后,分页预览看下效果:
3. 相对层次坐标写法
按照下图所示在相应单元格中填写相对层次坐标的公式:
实际计算结果如下图所示:
下面给出每个层次坐标的解释:
所在单元格 | 公式 | 公式解析 | 最终效果 |
---|---|---|---|
C2 | B2[A2:-1 ;B1:1] | ;B1:1:横向绝对层次坐标,是为了锁定第一列 A2:-1:纵向相对层次坐标,是为了实现纵向负偏移 | 第一列相对偏移 -1 |
D2 | B2[A2:+1 ;B1:2] | ;B1:2:横向绝对层次坐标,是为了锁定第二列 A2:+1:纵向相对层次坐标,是为了实现纵向正偏移 | 第二列相对偏移 +1 |
B3 | B2[A2:1 ;B1:-1] | A2:1:纵向绝对层次坐标,是为了锁定第一行 ;B1:-1:横向相对层次坐标,是为了实现横向负偏移 | 第一行相对偏移 -1 |
B4 | B2[A2:2 ;B1:+1] | A2:2:纵向绝对层次坐标,是为了锁定第二行 ;B1:+1:横向相对层次坐标,是为了实现横向正偏移 | 第二行相对偏移 +1 |
4. 绝对层次坐标写法
按照下图所示在相应单元格中填写绝对层次坐标的公式,其中 B4~B6 都设置为不扩展,且左父格和上父格都设置为无。
实际计算结果如下图所示:
下面给出每个层次坐标的解释:
所在单元格 | 公式 | 公式解析 | 最终效果 |
---|---|---|---|
B4 | B2[A2:4 ;B1:2] | A2:4:纵向绝对层次坐标,锁定第四行 ;B1:2:横向绝对层次坐标,锁定第二列 | 返回第四行和第二列交叉处的值 |
B5 | B2[A2:6 ;B1:4] | A2:6:纵向绝对层次坐标,锁定第六行 ;B1:4:横向绝对层次坐标,锁定第四列 | 返回第六行和第四列交叉处的值 |
B6 | B2[A2:!-1 ;B1:!-1] | A2:!-1:纵向绝对层次坐标,锁定倒数第一行 ;B1:!-1:横向绝对层次坐标,锁定倒数第一列 | 返回倒数第一行和倒数第一列交叉处的值 |
5. 只获取某一列或某一行
按照下图所示在相应单元格中填写层次坐标公式:
实际计算结果如下图所示:
下面给出公式解析:
所在单元格 | 公式 | 公式解析 | 最终效果 |
---|---|---|---|
C2 | B2[A2 ;B1:1] | A2:返回 A2 单元格纵向扩展的所有值 ;B1:1:横向绝对层次坐标,锁定第一列 | 返回第一列所有值 |
B3 | B2[A2:1 ;B1] | A2:1:纵向绝对层次坐标,锁定第一行 ;B1:返回 B1 单元格横向扩展的所有值 | 返回第一行所有值 |
6. 模板下载
已完成模板可参见:
%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Advanced\Coordinate\交叉表相对层次坐标.cpt
%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Advanced\Coordinate\交叉表绝对层次坐标.cpt
%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Advanced\Coordinate\获取交叉表某一列或某一行的值.cpt
点击下载模板: