跳到主要內容
處理階層式資料

在此頁面

處理階層式資料

階層是所有商業智慧解決方案的重要組成部分,用於描述固有包含各種精細層級的維度。一些階層簡單直觀,而另一些則十分複雜,需要大量思考才能正確建模。

從階層的上層到下層,分支越來越具體。例如,在擁有市場、國家、州和城市層級的維度中,分支美洲顯示在階層的頂層,分支美國顯示在第二層,分支加州顯示在第三層,而舊金山位於底層。加州比美國更具體,舊金山又比加州更具體。

在關係模型中儲存階層是多個解決方案所面臨的共同難題。有幾種方法:

  • 水平階層
  • 鄰接清單模型
  • 路徑列舉法
  • 巢狀集合模型
  • 上階清單

為了實現本教學課程的目的,我們將建立一個上階清單,因為該清單顯示階層的形式可直接在查詢中使用。如需瞭解其他方法的更多資訊,請瀏覽 Qlik Community

Hierarchy 前置詞

Hierarchy 前置詞是一個放在 LOADSELECT 陳述式前面的指令碼命令,可載入相鄰節點表格。LOAD 陳述式至少要有三個欄位:ID (節點的唯一索引鍵)、父節點的參考及名稱。

前置詞會將載入的表格轉換為展開的節點表格;該表格有很多其他的資料行,分別用於階層的各個層級。

請執行下列動作:

  1. 建立新的應用程式並命名。
  2. 資料載入編輯器中新增新的指令碼區段。
  3. 叫用區段 Wine
  4. 在右側功能表的 DataFiles 之下,按一下選取資料

  5. 上傳然後選取 Winedistricts.txt
  6. 從以下項目選取資料視窗中,取消核取 LboundRBound 欄位,就不會載入這些內容。
  7. 按一下插入指令碼
  8. LOAD 陳述式之上輸入下列內容:
  9. 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); 

  10. 按一下載入資料
  11. 使用資料模型檢視器預覽區段檢視產生的表格。
  12. 產生的展開節點表格擁有與來源表格一樣的記錄數:每個節點一個。展開的節點表格非常實用,因為它符合在關係模型中分析階層的一些要求:

    • 所有節點名稱存在於一個相同的資料行中,因此可用於搜尋。
    • 此外,不同的節點層級已分別擴展至各個欄位,即那些可用於向下探查群組或作為樞紐分析表中維度的欄位中。
    • 此外,不同的節點層級已分別擴展至各個欄位,即那些可用於向下探查群組的欄位中。
    • 可以將其設為包含節點的唯一路徑,以正確的順序列出所有上階。
    • 也可以將其設為包含節點深度,例如到根的距離。

    產生的表格如下所示:

    表格中顯示使用 Hierarchy 前置詞載入的資料樣本
    Table showing sample of data loaded using Hierarchy prefix.

資訊備註若要進一步瞭解階層,請在 Qlik Community 中參閱此篇部落格貼文:階層

HierarchyBelongsTo 前置詞

Hierarchy 前置詞一樣,HierarchyBelongsTo 前置詞是一個放在 LOADSELECT 陳述式前面的指令碼命令,可載入相鄰節點表格:

對此,LOAD 陳述式也至少要有三個欄位:ID (節點的唯一索引鍵)、父節點的參考及名稱。前置詞會將載入的表格轉換為上階表格,該表格將所有上階和下階的組合列為單獨的記錄。因此,很容易就能找到特定節點的所有上階或下階。

請執行下列動作:

  1. 修改資料載入編輯器中的 Hierarchy 陳述式,使其成為以下格式:
  2. HierarchyBelongsTo (NodeID, ParentID, NodeName, BelongsToID, BelongsTo)
  1. 按一下載入資料
  2. 使用資料模型檢視器預覽區段檢視產生的表格。
  3. 上階表格符合在關係模型中分析階層的一些要求:

    • 如果節點 ID 代表單個節點,上階 ID 則代表階層的整個樹狀和子樹狀結構。
    • 所有節點名稱在角色中同時以節點和樹狀結構的形式存在,並且均可用於搜尋。
    • 也可以將其設為包含節點深度和上階深度之間的深度差異,即與子樹狀圖的根的距離。

    產生的表格如下所示:

    表格中顯示使用 HierarchyBelongsTo 前置詞載入的資料
    Table showing data loaded using HierarchyBelongsTo prefix.

授權

階層經常用於授權。組織階層就是一個範例。每個管理員有權查看其所在部門的所有內容,包括所有子部門。但他們不一定有權查看其他部門的內容。

組織階層範例

這表示,系統會允許不同的人查看不同的組織子樹狀結構。授權表格可能如下所示:

授權表格
存取 NTNAME 個人 位置 權限
使用者 ACME\JRL John CPO HR
使用者 ACME\CAH Carol 執行長 執行長
使用者 ACME\JER James 工程主任 工程
使用者 ACME\DBK Diana 財務長 財務
使用者 ACME\RNL Bob 營運長 鎖售額
使用者 ACME\LFD Larry 技術長 產品

在此情況下,Carol 可以查看與 CEO 和以下有關的所有內容;Larry 可以查看 Product 組織;James 只能查看 Engineering 組織。

Example:  

通常階層會儲存在相鄰節點表格中。在此範例中,若要解決此,可以使用 HierarchyBelongsTo 載入相鄰節點表格,並命名上階欄位 Tree

若您想要使用 Section Access,請載入 Tree 的大寫複本,並叫用此新欄位 PERMISSIONS。最後,您需要載入驗證表格。可以使用下列指令碼行完成這兩個最後步驟。請注意,TempTrees 表格是由 HierarchyBelongsTo 陳述式建立的表格。

請注意,這只是範例。在 Qlik Sense 中沒有要完成的附帶活動。

Trees: LOAD *, Upper(Tree) as PERMISSIONS Resident TempTrees; Drop Table TempTrees;   Section Access; Authorization: LOAD ACCESS, NTNAME, UPPER(Permissions) as PERMISSIONS From Organization; Section Application;

此範例會產生下列資料模型:

資料模型:AuthorizationTreesFactNodes 表格
Data model: Authorization, Trees, Fact, and Nodes tables.