DAX – Jerarquías Padre-Hijo (Parte 1)

Analysis Services Tabular y Power Pivot no poseen un soporte directo a relaciones padre-hijo, sino que exponen una serie de funciones que permiten naturalizar una jerarquía Padre-Hijo.

Vamos a trabajar con la siguiente tabla, Organization de AdventureWorksDW:

image

Lo primero es generar una columna calculada, con el camino de los nodos, desde el principal, para esto debemos utilizar la función PATH de DAX

=PATH([OrganizationKey];[ParentOrganizationKey])

Esto nos agrega una nueva columna a la tabla con los nodos separados por |

image

Ahora necesitamos armar tantas columnas como niveles de nuestra jerarquía, si esto nos obliga a definir una profundidad fija de navegación. Para estas columnas calculadas utilizaremos la función PATHITEM

=PATHITEM([Path];1;INTEGER)

=PATHITEM([Path];2;INTEGER)

=PATHITEM([Path];4;INTEGER)

Estas columnas tendrán el valor correspondiente a cada nivel para ese registro, es decir, nos devuelve el valor entre | para la posición indicada.

image

Ahora tenemos que utilizar una segunda función DAX para reemplazar en la misma o una nueva columna el valor del nivel obtenido por la descripción correspondiente. Utilizaremos la función LOOKUPVALUE.

=LOOKUPVALUE([OrganizationName];[OrganizationKey];PATHITEM([Path];1;INTEGER))

=LOOKUPVALUE([OrganizationName];[OrganizationKey];PATHITEM([Path];4;INTEGER))

image

Ahora resta configurar una jerarquía con los niveles definidos

image