계층 구조 데이터 처리
계층 구조는 모든 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 문에는 3개 이상의 필드 (노드에 대한 고유 키에 해당하는 ID, 부모에 대한 참조 및 이름)가 있어야 합니다.
이 접두사는 로드된 테이블을, 계층 구조의 각 수준에 대해 하나씩 여러 개의 추가 열을 가진 확장된 노드 테이블로 변환합니다.
다음과 같이 하십시오.
- 새 앱을 만들고 이름을 지정합니다.
- 데이터 로드 편집기에서 새 스크립트 섹션을 추가합니다.
- Wine 섹션을 호출합니다.
-
오른쪽 메뉴의 DataFiles에서 데이터 선택을 클릭합니다.
- 업로드한 다음 Winedistricts.txt를 선택합니다.
- 데이터 선택 창에서 Lbound 및 RBound 필드를 선택 취소하여 로드되지 않도록 합니다.
- 스크립트 삽입을 클릭합니다.
- 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);
결과로 생성되는 확장된 노드 테이블은 정확하게 소스 테이블과 같은 수의 레코드를 갖습니다. 노드당 하나. 확장된 노드 테이블은 관계형 모델에서 계층 구조를 분석하는 데 필요한 여러 요구 사항을 충족시키므로 매우 유용합니다.
결과 테이블은 다음과 같습니다.
HierarchyBelongsTo 접두사
Hierarchy 접두사와 마찬가지로 HierarchyBelongsTo 접두사는 인접 노드 테이블을 로드하는 LOAD 또는 SELECT 문의 앞에 넣는 스크립트 명령입니다.
또한 LOAD 문에는 3개 이상의 필드 (노드에 대한 고유 키에 해당하는 ID, 부모에 대한 참조 및 이름)가 있어야 합니다. 이 접두사는 로드된 테이블을 상위 항목 테이블로 변환하는 데, 이 상위 항목 테이블에는 개별 레코드로 나열된 상위 항목 및 하위 항목의 모든 조합이 포함되어 있습니다. 따라서 특정 노드의 모든 상위 항목 또는 하위 항목을 매우 쉽게 찾을 수 있습니다.
다음과 같이 하십시오.
- 데이터 로드 편집기에서 다음과 같이 Hierarchy 문을 수정합니다.
HierarchyBelongsTo (NodeID, ParentID, NodeName, BelongsToID, BelongsTo)
- 데이터 로드를 클릭합니다.
- 데이터 모델 뷰어의 미리 보기 섹션을 사용하여 결과 테이블을 봅니다.
- 노드 ID가 단일 노드를 나타내는 경우 상위 ID는 계층 구조의 전체 트리 및 하위 트리를 나타냅니다.
- 모든 노드 이름은 노드 역할과 트리 역할에서 모두 존재하며, 둘 모두 검색에 사용할 수 있습니다.
- 노드 깊이 및 상위 항목 깊이 간의 깊이 차(즉, 하위 트리의 루트로부터의 거리)를 포함시킬 수 있습니다.
상위 항목 테이블은 관계형 모델에서 계층 구조를 분석하는 데 필요한 여러 요구 사항을 충족시킵니다.
결과 테이블은 다음과 같습니다.
인증
계층 구조가 인증에 사용되는 것이 드문 일은 아닙니다. 일례로 조직 계층 구조가 있습니다. 각 관리자는 자신의 부서(모든 하위 부서 포함)에 속하는 모든 것을 볼 수 있는 권한을 가져야 합니다. 그러나 다른 부서를 볼 권한을 가질 필요는 없습니다.
따라서 여러 사람이 해당 조직의 여러 하위 트리를 볼 수 있게 됩니다. 인증 테이블은 다음과 같을 수 있습니다.
ACCESS | NTNAME | PERSON | POSITION | PERMISSIONS |
---|---|---|---|---|
사용자 | ACME\JRL | John | CPO | HR |
사용자 | ACME\CAH | Carol | CEO | CEO |
사용자 | ACME\JER | James | 엔지니어링 임원 | 엔지니어링 |
사용자 | ACME\DBK | Diana | CFO | 재무 |
사용자 | ACME\RNL | Bob | COO | 판매 |
사용자 | ACME\LFD | Larry | CTO | 제품 |
이 사례에서 Carol은 CEO 및 그 이하에 속하는 모든 내용을 볼 수 있으며, Larry는 Product 조직, James는 Engineering 조직만 볼 수 있습니다.
종종 계층 구조는 인접 노드 테이블에 저장됩니다. 이 예에서 이 문제를 해결하려면 HierarchyBelongsTo를 사용하여 인접 노드 테이블을 로드하고 상위 필드Tree의 이름을 지정하기만 하면 됩니다.
Section Access를 사용하려는 경우 Tree의 대문자 복사본을 로드하고 이 새 필드 PERMISSIONS를 호출해야 합니다. 마지막으로 인증 테이블을 로드해야 합니다. 다음 마지막 두 단계는 다음 스크립트 줄을 사용하여 수행할 수 있습니다. TempTrees 테이블은 HierarchyBelongsTo 문에 의해 생성된 테이블입니다.
다음은 예일뿐입니다. Qlik Sense에서 완료할 연습은 수반되지 않습니다.
이 예제는 다음 모델을 생성합니다.