# 階層データのロード

階層の深さが一定でないnレベルの階層は、地理的もしくは組織的軸をデータで表す場合などによく使用されます。

これらの種類の階層は、通常隣接するノード テーブルに保存されます。つまり、テーブルでは、それぞれのレコードはノードと一致し、親ノードへの参照を含む項目を持っています。

ノード テーブル

| NodeID | ParentNodeID | タイトル |
| --- | --- | --- |
| 1 | - | ゼネラル マネージャー |
| 2 | 1 | リージョン マネージャー |
| 3 | 2 | ブランチ マネージャー |
| 4 | 3 | デパートメント マネージャー |

このようなテーブルでは、ノードは 1 つのレコードにのみ保存されますが、子供をいくつでも持つことができます。当然のことながら、テーブルには、ノードの属性が記述された追加項目が含まれている可能性があります。

隣接するノード テーブルは、メンテナンスには役立ちますが、毎日の業務には適していません。そこでクエリと分析では、他の表現を使用します。展開されたノード テーブルは一般的な表現の 1 つで、階層の各レベルは別個の項目に保存されます。展開されたノード テーブルのレベルは、ツリー構造などで容易に使用できます。hierarchy のキーワードをデータ ロード スクリプトで使用すると、隣接するノード テーブルを展開ノード テーブルに変換できます。

```
Hierarchy (NodeID, ParentNodeID, Title, 'Manager') LOAD
    NodeID,
    ParentNodeID,
    Title
FROM 'lib://data/hierarchy.txt' (txt, codepage is 1252, embedded labels, delimiter is ',', msq);
```

展開されたノード テーブル

| NodeID | ParentNodeID | タイトル | タイトル 1 | タイトル 2 | タイトル 4 | タイトル 4 |
| --- | --- | --- | --- | --- | --- | --- |
| 1 | - | ゼネラル マネージャー | ゼネラル マネージャー | - | - | - |
| 2 | 1 | リージョン マネージャー | ゼネラル マネージャー | リージョン マネージャー | - | - |
| 3 | 2 | ブランチ マネージャー | ゼネラル マネージャー | リージョン マネージャー | ブランチ マネージャー | - |
| 4 | 3 | デパートメント マネージャー | ゼネラル マネージャー | リージョン マネージャー | ブランチ マネージャー | デパートメント マネージャー |

展開ノード テーブルの問題は、検索や選択を行う際に対象となるレベルを知っておく必要があり、レベル項目を簡単に使用できないという点にあります。この問題を解決する 1 つの表現が先祖テーブルで、ブリッジ テーブルとも呼ばれます。

先祖テーブルには、データで見つかった子供と先祖の関係をすべて記録するレコードが 1 つあり、子供と先祖のキーと名前を含みます。つまり、すべてのレコードは特定のノードがどのノードに属するかを示します。hierarchybelongsto キーワードをデータ ロード スクリプトで使用すると、隣接するノード テーブルを先祖テーブルに変換できます。

## 詳細を見る

* [Hierarchy](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Hierarchy.htm)