處理階層式資料
階層是所有商業智慧解決方案的重要組成部分,用於描述固有包含各種精細層級的維度。一些階層簡單直觀,而另一些則十分複雜,需要大量思考才能正確建模。
從階層的上層到下層,分支越來越具體。例如,在擁有市場、國家、州和城市層級的維度中,分支美洲顯示在階層的頂層,分支美國顯示在第二層,分支加州顯示在第三層,而舊金山位於底層。加州比美國更具體,舊金山又比加州更具體。
在關係模型中儲存階層是多個解決方案所面臨的共同難題。有幾種方法:
- 水平階層
- 鄰接清單模型
- 路徑列舉法
- 巢狀集合模型
- 上階清單
為了實現本教學課程的目的,我們將建立一個上階清單,因為該清單顯示階層的形式可直接在查詢中使用。如需瞭解其他方法的更多資訊,請瀏覽 Qlik Community。
Hierarchy 前置詞
Hierarchy 前置詞是一個放在 LOAD 或 SELECT 陳述式前面的指令碼命令,可載入相鄰節點表格。LOAD 陳述式至少要有三個欄位:ID (節點的唯一索引鍵)、父節點的參考及名稱。
前置詞會將載入的表格轉換為展開的節點表格;該表格有很多其他的資料行,分別用於階層的各個層級。
請執行下列動作:
- 建立新的應用程式並命名。
- 在資料載入編輯器中新增新的指令碼區段。
- 叫用區段 Wine。
-
在右側功能表的 DataFiles 之下,按一下選取資料。
- 上傳然後選取 Winedistricts.txt。
- 在從以下項目選取資料視窗中,取消核取 Lbound 和 RBound 欄位,就不會載入這些內容。
- 按一下插入指令碼。
- 在 LOAD 陳述式之上輸入下列內容:
- 按一下載入資料。
- 使用資料模型檢視器的預覽區段檢視產生的表格。
- 所有節點名稱存在於一個相同的資料行中,因此可用於搜尋。
- 此外,不同的節點層級已分別擴展至各個欄位,即那些可用於向下探查群組或作為樞紐分析表中維度的欄位中。
- 此外,不同的節點層級已分別擴展至各個欄位,即那些可用於向下探查群組的欄位中。
- 可以將其設為包含節點的唯一路徑,以正確的順序列出所有上階。
- 也可以將其設為包含節點深度,例如到根的距離。
Hierarchy (NodeID, ParentID, NodeName)
您的指令碼應如下所示:
Hierarchy (NodeID, ParentID, NodeName)
LOAD
NodeID,
ParentID,
NodeName
FROM [lib://DataFiles/Winedistricts.txt]
(txt, utf8, embedded labels, delimiter is '\t', msq);
產生的展開節點表格擁有與來源表格一樣的記錄數:每個節點一個。展開的節點表格非常實用,因為它符合在關係模型中分析階層的一些要求:
產生的表格如下所示:
HierarchyBelongsTo 前置詞
像 Hierarchy 前置詞一樣,HierarchyBelongsTo 前置詞是一個放在 LOAD 或 SELECT 陳述式前面的指令碼命令,可載入相鄰節點表格:
對此,LOAD 陳述式也至少要有三個欄位:ID (節點的唯一索引鍵)、父節點的參考及名稱。前置詞會將載入的表格轉換為上階表格,該表格將所有上階和下階的組合列為單獨的記錄。因此,很容易就能找到特定節點的所有上階或下階。
請執行下列動作:
- 修改資料載入編輯器中的 Hierarchy 陳述式,使其成為以下格式:
HierarchyBelongsTo (NodeID, ParentID, NodeName, BelongsToID, BelongsTo)
- 按一下載入資料。
- 使用資料模型檢視器的預覽區段檢視產生的表格。
- 如果節點 ID 代表單個節點,上階 ID 則代表階層的整個樹狀和子樹狀結構。
- 所有節點名稱在角色中同時以節點和樹狀結構的形式存在,並且均可用於搜尋。
- 也可以將其設為包含節點深度和上階深度之間的深度差異,即與子樹狀圖的根的距離。
上階表格符合在關係模型中分析階層的一些要求:
產生的表格如下所示:
授權
階層經常用於授權。組織階層就是一個範例。每個管理員有權查看其所在部門的所有內容,包括所有子部門。但他們不一定有權查看其他部門的內容。
這表示,系統會允許不同的人查看不同的組織子樹狀結構。授權表格可能如下所示:
存取 | NTNAME | 個人 | 位置 | 權限 |
---|---|---|---|---|
使用者 | ACME\JRL | John | 產品長 | 人資 |
使用者 | ACME\CAH | Carol | 執行長 | 執行長 |
使用者 | ACME\JER | James | 工程主任 | 工程 |
使用者 | ACME\DBK | Diana | 財務長 | 財務 |
使用者 | ACME\RNL | Bob | 營運長 | 鎖售額 |
使用者 | ACME\LFD | Larry | 技術長 | 產品 |
在此情況下,Carol 可以查看與 CEO 和以下有關的所有內容;Larry 可以查看 Product 組織;James 只能查看 Engineering 組織。
範例:
通常階層會儲存在相鄰節點表格中。在此範例中,若要解決此,可以使用 HierarchyBelongsTo 載入相鄰節點表格,並命名上階欄位 Tree。
若您想要使用 Section Access,請載入 Tree 的大寫複本,並叫用此新欄位 PERMISSIONS。最後,您需要載入驗證表格。可以使用下列指令碼行完成這兩個最後步驟。請注意,TempTrees 表格是由 HierarchyBelongsTo 陳述式建立的表格。
請注意,這只是範例。在 Qlik Sense 中沒有要完成的附帶活動。
此範例會產生下列資料模型: