跳到主要內容 跳至補充內容

處理階層式資料

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

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

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

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

為了實現本教學課程的目的,我們將建立一個上階清單,因為該清單顯示階層的形式可直接在查詢中使用。如需瞭解其他方法的更多資訊,請瀏覽 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 前置詞載入的資料樣本

    表格中顯示使用 Hierarchy 前置詞載入的資料樣本。

HierarchyBelongsTo 前置詞

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

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

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

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

    產生的表格如下所示:

    表格中顯示使用 HierarchyBelongsTo 前置詞載入的資料

    表格中顯示使用 HierarchyBelongsTo 前置詞載入的資料。

授權

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

組織階層範例

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

授權表格
存取NTNAME個人位置權限
使用者ACME\JRLJohn產品長人資
使用者ACME\CAHCarol執行長執行長
使用者ACME\JERJames工程主任工程
使用者ACME\DBKDiana財務長財務
使用者ACME\RNLBob營運長鎖售額
使用者ACME\LFDLarry技術長產品

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

範例:  

通常階層會儲存在相鄰節點表格中。在此範例中,若要解決此,可以使用 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 表格

資料模型:

此頁面是否對您有幫助?

若您發現此頁面或其內容有任何問題——錯字、遺漏步驟或技術錯誤——請告知我們可以如何改善!