Hierarchy
Префикс hierarchy используется для преобразования таблицы с родительско-дочерней иерархией в полезную таблицу модели данных QlikView. Его можно поставить перед оператором LOAD или SELECT. Он будет использовать результат оператора загрузки в качестве ввода для преобразования таблицы.
Префикс создает таблицу развернутых узлов, которая, как правило, включает то же количество записей, что и входная таблица, но при этом каждый уровень иерархии сохраняется в отдельном поле. В иерархической структуре можно использовать поле пути.
Синтаксис:
Hierarchy (NodeID, ParentID, NodeName, [ParentName, [ParentSource, [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 |