Hierarchy
El prefijo hierarchy se utiliza para transformar una tabla jerárquica padre-hijo en una tabla que sea útil en un modelo de datos Qlik Sense. Se puede poner frente a una sentencia LOAD o SELECT y usará el resultado de la sentencia de carga como entrada para una transformación de tabla.
El prefijo crea una tabla de nodos expandidos, la cual contiene normalmente el mismo número de registros que una tabla de entrada, pero además, cada nivel de la jerarquía se almacena en un campo aparte. El campo path puede utilizarse en una estructura arbórea.
Sintaxis:
Hierarchy (NodeID, ParentID, NodeName, [ParentName, [PathSource, [PathName, [PathDelimiter, Depth]]]])(loadstatement | selectstatement)
La tabla de entrada debe ser una tabla de nodos adyacentes. Las tablas de nodos adyacentes son tablas en las que cada registro se corresponde con un nodo y tiene un campo que contiene una referencia al nodo padre. En este tipo de tabla, el nodo se almacena en un único registro, pero puede tener un número indeterminado de hijos. La tabla puede por supuesto contener campos adicionales que describan atributos para los nodos.
El prefijo crea una tabla de nodos expandidos, la cual contiene normalmente el mismo número de registros que una tabla de entrada, pero además, cada nivel de la jerarquía se almacena en un campo aparte. El campo path puede utilizarse en una estructura arbórea.
Normalmente, la tabla de entrada tiene exactamente un registro por nodo y en dicho caso la tabla resultante contendrá el mismo número de registros. No obstante, a veces hay nodos con múltiples padres, esto es, un nodo viene representado por varios registros en la tabla de entrada. Si éste es el caso, la tabla resultante podrá contener un número mayor de registros que la tabla de entrada.
Todos los nodos con un id paterno que no se encuentre en la columna nodeid (incluidos aquellos nodos que hayan perdido su id de padre) se considerarán como raíces. Asimismo, únicamente se cargarán los nodos que posean una conexión a un nodo raíz – directa o indirecta – evitándose con esto las referencias circulares.
Los campos adicionales que contengan el nombre del nodo padre, la ruta del nodo y la profundidad del nodo se podrán crear sin problema.
Argumentos:
Argumento | Descripción |
---|---|
NodeID | El nombre del campo que contiene el ID de nodo. Este campo debe existir en la tabla de entrada. |
ParentID | El nombre del campo que contiene el ID de nodo del nodo padre. Este campo debe existir en la tabla de entrada. |
NodeName | El nombre del campo que contiene el nombre del nodo. Este campo debe existir en la tabla de entrada. |
ParentName | Una cadena utilizada para nombrar el nuevo campo ParentName. Si se omite, dicho campo no se creará. |
ParentSource | Es el nombre del campo que contiene el nombre del nodo empleado para crear la ruta al nodo. Se trata de un parámetro opcional. Si se omite, se utilizará NodeName. |
PathName | Una cadena que se utiliza para nombrar el nuevo campo Path, que contiene la ruta de la raíz al nodo. Se trata de un parámetro opcional. Si se omite, dicho campo no se creará. |
PathDelimiter | Una cadena utilizada como delimitador en el nuevo campo Path. Se trata de un parámetro opcional. Si se omite, se utilizará "/". |
Depth | Una cadena utilizada para nombrar el nuevo campo Depth, que contiene la profundidad del nodo en la jerarquía. Se trata de un parámetro opcional. Si se omite, dicho campo no se creará. |
Ejemplo:
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 |