Hierarchy
hierarchy 접두사는 부모-자식 계층 구조 테이블을 QlikView 데이터 모델에서 유용한 테이블로 변환하는 데 사용됩니다. 이 접두사는 LOAD 또는 SELECT 문 앞에 넣을 수 있으며 로드 문의 결과를 입력으로 사용하여 테이블 변환을 수행합니다.
이 접두사를 사용하면 일반적으로 입력 테이블과 같은 수의 레코드를 포함하지만 추가로 계층 구조의 각 수준을 별도의 필드에 저장하는 확장 노드 테이블이 생성됩니다. 경로 필드는 트리 구조에서 사용할 수 있습니다.
구문:
Hierarchy (NodeID, ParentID, NodeName, [ParentName, [ParentSource, [PathName, [PathDelimiter, Depth]]]])(loadstatement | selectstatement)
입력 테이블은 인접 노드 테이블이어야 합니다. 인접 노드 테이블이란 각 레코드가 한 노드에 해당하고 부모 노드에 대한 참조를 포함하는 필드를 가지는 테이블입니다. 이러한 테이블에서 노드는 한 레코드에만 저장되지만 노드가 가질 수 있는 자식의 수에는 제한이 없습니다. 물론 테이블은 노드의 특성을 나타내는 추가 필드를 포함할 수 있습니다.
일반적으로 입력 테이블은 정확하게 노드당 한 레코드를 가지며 이 경우 출력 테이블도 동일한 수의 레코드를 포함합니다. 그러나 입력 테이블에서 한 노드가 여러 레코드로 표시되는 경우, 즉 여러 부모를 가진 노드가 있을 수 있습니다. 이 경우 출력 테이블의 레코드 수가 입력 테이블보다 많을 수 있습니다.
노드 ID 열에 부모 ID가 없는 모든 노드(부모 ID가 누락된 노드 포함)는 루트로 간주됩니다. 또한 루트 노드와 직간접적으로 연결된 노드만 로드되므로 순환 참조를 피할 수 있습니다.
부모 노드의 이름, 노드의 경로, 그리고 노드의 깊이를 포함하는 추가 필드를 만들 수 있습니다.
인수:
인수 | 설명 |
---|---|
NodeID | 노드 ID가 포함된 필드의 이름입니다. 이 필드는 입력 테이블에 존재해야 합니다. |
ParentID | 부모 노드의 노드 ID가 포함된 필드의 이름입니다. 이 필드는 입력 테이블에 존재해야 합니다. |
NodeName | 노드의 이름이 포함된 필드의 이름입니다. 이 필드는 입력 테이블에 존재해야 합니다. |
ParentName | 새 ParentName 필드의 이름을 지정하기 위해 사용되는 문자열입니다. 생략된 경우 이 필드가 생성되지 않습니다. |
ParentSource | 노드 경로를 만드는 데 사용되는 노드의 이름이 포함된 필드의 이름입니다. 선택적인 매개 변수입니다. 생략된 경우 NodeName이 사용됩니다. |
PathName | 새 Path 필드의 이름을 지정하는 데 사용되는 문자열로, 루트부터 해당 노드까지의 경로가 포함됩니다. 선택적인 매개 변수입니다. 생략된 경우 이 필드가 생성되지 않습니다. |
PathDelimiter | 새 Path 필드에서 구분 기호로 사용되는 문자열입니다. 선택적인 매개 변수입니다. 생략된 경우 '/'가 사용됩니다. |
Depth | 새 Depth 필드의 이름을 지정하는 데 사용되는 문자열로, 계층 구조에서 노드의 깊이가 포함됩니다. 선택적인 매개 변수입니다. 생략된 경우 이 필드가 생성되지 않습니다. |
Hierarchy(NodeID, ParentID, NodeName, ParentName, NodeName, PathName, '\', Depth) LOAD * inline [
NodeID, ParentID, NodeName
1, 4, London
2, 3, Munich
3, 5, Germany
4, 5, UK
5, , Europe
];
결과:
NodeID | NodeName | ParentID | ParentName | NodeName1 | NodeName2 | NodeName3 | PathName | Depth |
---|---|---|---|---|---|---|---|---|
5 | Europe | - | Europe | - | - | Europe | 1 | |
3 | Germany | 5 | Europe | Europe | Germany | - | Europe\Germany | 2 |
2 | Munich | 3 | Germany | Europe | Germany | Munich | Europe\Germany\Munich | 3 |
4 | UK | 5 | Europe | Europe | UK | - | Europe\UK | 2 |
1 | London | 4 | UK | Europe | UK | London | Europe\UK\London | 3 |