Hierarchy
Префикс hierarchy используется для преобразования иерархической таблицы в полезную таблицу модели данных Qlik Sense. Его можно поставить перед оператором 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 | ParentID | NodeName | NodeName1 | NodeName2 | NodeName3 | ParentName | PathName | Depth |
1 | 4 | London | Europe | UK | London | UK | Europe\UK\London | 3 |
2 | 3 | Munich | Europe | Germany | Munich | Germany | Europe\Germany\Munich | 3 |
3 | 5 | Germany | Europe | Germany | - | Europe | Europe\Germany | 2 |
4 | 5 | UK | Europe | UK | - | Europe | Europe\UK | 2 |
5 | Europe | Europe | - | - | - | Europe | 1 |