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
點選下載範本: