# 계층 구조 데이터 처리

계층 구조는 모든 Business Intelligence 솔루션에서 중요한 부분으로, 본질적으로 다양한 수준의 세분성이 포함된 차원을 설명하는 데 사용됩니다. 어떤 차원은 단순하고 직관적이지만, 어떤 차원은 복잡하고 까다롭게 때문에 올바르게 모델링하려면 많은 생각을 해야 합니다.

계층 구조의 위쪽에서 아래쪽으로 향하면서 멤버는 점차 더 세분화됩니다. 예를 들어, Market, Country, State 및 City 수준이 있는 차원에서 멤버 Americas는 계층 구조의 최상위 수준에 표시되고 멤버 U.S.A.는 두 번째 수준, 멤버 California 는 세 번째 수준, San Francisco는 최하위 수준에 표시됩니다. California는 U.S.A.보다 더 구체적이며 San Francisco는 California보다 더 구체적입니다.

관계형 모델에 계층 구조를 저장하는 것은 여러 솔루션에서 공통적인 과제입니다. 여기에는 여러 가지 접근 방법이 있습니다.

* 수평 계층 구조
* 인접 목록 모델
* 경로 열거 방법
* 중첩된 집합 모델
* 상위 항목 목록

이 자습서의 목적에 맞게 상위 항목 목록을 만들 예정인데, 쿼리에서 직접 사용할 수 있는 형식으로 계층 구조가 표현되기 때문입니다. 다른 접근 방법에 대한 자세한 내용은 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/ko-KR/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/ko-KR/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-hierarchybelongsto-table.png)

### 권한 부여

계층 구조가 인증에 사용되는 것이 드문 일은 아닙니다. 일례로 조직 계층 구조가 있습니다. 각 관리자는 자신의 부서(모든 하위 부서 포함)에 속하는 모든 것을 볼 수 있는 권한을 가져야 합니다. 그러나 다른 부서를 볼 권한을 가질 필요는 없습니다.

조직 계층 구조의 예

조직 계층 구조의 예

조직 계층 구조의 예 ![](https://help.qlik.com/ko-KR/cloud-services/Subsystems/Hub/Content/Resources/Images/ex_gen_Authorization1.png)

따라서 여러 사람이 해당 조직의 여러 하위 트리를 볼 수 있게 됩니다. 인증 테이블은 다음과 같을 수 있습니다.

권한 부여 테이블

| ACCESS | NTNAME | PERSON | 위치 | 권한 |
| --- | --- | --- | --- | --- |
| 사용자 | ACME\JRL | 존 | CPO | HR |
| 사용자 | ACME\CAH | 캐롤 | CEO | CEO |
| 사용자 | ACME\JER | 제임스 | 엔지니어링 임원 | 엔지니어링 |
| 사용자 | ACME\DBK | 다이애나 | CFO | 재무 |
| 사용자 | ACME\RNL | 밥 | COO | 판매 |
| 사용자 | ACME\LFD | 래리 | CTO | 제품 |

이 사례에서 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 테이블 ![데이터 모델: Authorization, Trees, Fact 및 Nodes 테이블입니다.](https://help.qlik.com/ko-KR/cloud-services/Subsystems/Hub/Content/Resources/Images/ex_gen_Authorization3.png)