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 de QlikView. Puede colocarse inmediatamente antes de una sentencia LOADo SELECT y almacenará el resultado de la sentencia de carga como info de 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 de árbol.
Sintaxis:
Hierarchy (NodeID, ParentID, NodeName, [ParentName, [ParentSource, [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.
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 | Es una cadena que se utiliza 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 | Es una cadena que se utiliza para nombrar el nuevo campo Path, el cual 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 | La cadena empleada como delimitador en el nuevo campo Path. Se trata de un parámetro opcional. Si se omite, se utilizará '/'. |
Depth | La cadena empleada para nombrar al 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
];
Resultado:
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 |