QlikWorld 2020 Global Conference. Join us to discover how to get the most from your data. Act fast. Register now and save.

Hierarchy

Префикс hierarchy используется для преобразования таблицы с родительско-дочерней иерархией в полезную таблицу модели данных QlikView. Его можно поставить перед оператором LOAD или SELECT. Он будет использовать результат оператора загрузки в качестве ввода для преобразования таблицы.

Префикс создает таблицу развернутых узлов, которая, как правило, включает то же количество записей, что и входная таблица, но при этом каждый уровень иерархии сохраняется в отдельном поле. В иерархической структуре можно использовать поле пути.

Синтаксис:  

Hierarchy (NodeID, ParentID, NodeName, [ParentName], [PathSource], [PathName], [PathDelimiter], [Depth])(loadstatement | selectstatement) 

В качестве входной таблицы должна использоваться таблица со смежными узлами. Таблица со смежными узлами — таблица, где каждая запись соответствует узлу и имеет поле, содержащее ссылку на родительский узел. В таких таблицах узел хранится в одной записи, но может иметь любое число дочерних узлов. В таблице могут содержаться дополнительные поля, описывающие атрибуты для узлов.

Обычно входная таблица имеет точно одну запись на узел, и в таком случае выходная таблица будет содержать такое же число записей. Однако иногда существуют узлы с несколькими родительским узлами, то есть один узел представлен несколькими записями во входной таблице. В таком случае в выходной таблице может содержаться больше записей, чем во входной.

Все узлы с родительским идентификатором, не найденные в столбце идентификаторов узлов (включая узлы с отсутствующими родительскими идентификаторами), будут расцениваться как корневые. К тому же загружаться будут только узлы с соединением с корневым узлом, прямым или косвенным, что тем самым позволит избежать циклических ссылок.

Можно создать дополнительные поля, содержащие имя родительского узла, путь узла и глубину узла.

Аргументы:  

Аргумент Описание
NodeID Имя поля, содержащего идентификатор узла. Это поле должно существовать во входной таблице.
ParentID Имя поля, содержащего идентификатор родительского узла. Это поле должно существовать во входной таблице.
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

См. также: