# 處理階層式資料

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

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

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

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

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

## Hierarchy 前置詞

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

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

請執行下列動作：

1. 建立新的應用程式並命名。

2. 在資料載入編輯器中新增新的指令碼區段。

3. 叫用區段 Wine。

4. 在右側功能表的 DataFiles 之下，按一下選取資料。

5. 上傳然後選取 Winedistricts.txt。

6. 在從以下項目選取資料視窗中，取消核取 Lbound 和 RBound 欄位，就不會載入這些內容。

7. 按一下 新增。

8. 在 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);			
   ```

9. 按一下載入資料。

10. 使用資料模型檢視器的預覽區段檢視產生的表格。

    產生的展開節點表格擁有與來源表格一樣的記錄數：每個節點一個。展開的節點表格非常實用，因為它符合在關係模型中分析階層的一些要求：

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

    產生的表格如下所示：

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

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

    表格中顯示使用 HierarchyHierarchy 前置詞載入的資料樣本 ![表格中顯示使用 Hierarchy 前置詞載入的資料樣本。](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-hierarchyprefix-table.png)

## HierarchyBelongsTo 前置詞

像 Hierarchy 前置詞一樣，HierarchyBelongsTo 前置詞是一個放在 LOAD 或 SELECT 陳述式前面的指令碼命令，可載入相鄰節點表格：

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

請執行下列動作：

1. 修改資料載入編輯器中的 Hierarchy 陳述式，使其成為以下格式：
   ```
   HierarchyBelongsTo (NodeID, ParentID, NodeName, BelongsToID, BelongsTo)
   ```

1) 按一下載入資料。
2) 使用資料模型檢視器的預覽區段檢視產生的表格。

   上階表格符合在關係模型中分析階層的一些要求：
   * 如果節點 ID 代表單個節點，上階 ID 則代表階層的整個樹狀和子樹狀結構。
   * 所有節點名稱在角色中同時以節點和樹狀結構的形式存在，並且均可用於搜尋。
   * 也可以將其設為包含節點深度和上階深度之間的深度差異，即與子樹狀圖的根的距離。

   產生的表格如下所示：

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

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

   表格中顯示使用 HierarchyBelongsToHierarchyBelongsTo 前置詞載入的資料 ![表格中顯示使用 HierarchyBelongsTo 前置詞載入的資料。](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-hierarchybelongsto-table.png)

### 授權

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

組織階層範例

組織階層範例

組織階層範例 ![](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/ex_gen_Authorization1.png)

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

授權表格

| 存取 | 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 中沒有要完成的附帶活動。

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;

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

資料模型：Authorization、Trees、Fact 和 Nodes 表格

資料模型：Authorization、Trees、Fact 和 Nodes 表格

資料模型：AuthorizationAuthorization、TreesTrees、FactFact 和 NodesNodes 表格 ![資料模型：授權、樹狀結構、事實和節點表格。](https://help.qlik.com/zh-TW/cloud-services/Subsystems/Hub/Content/Resources/Images/ex_gen_Authorization3.png)