Ya estamos a Jueves y los jueves son de post. Hoy vengo a contaros una función muy muy sencilla pero para mí una función indispensable y muy recurrente cuando tenemos que realizar sobre todo cálculos con jerarquías, y esta función es ISINSCOPE.

¿Qué es la función ISINSCOPE? Según la web de oficial de Microsoft, es una función que devuelve true si la columna especificada es el nivel de una jerarquía de niveles. 

 


 

Donde <columnname> es el nombre de una columna existente, con la sintaxis de DAX estándar. Importante, tiene que ser una columna y no puede ser una expresión.

 

Hasta aquí lo más tedioso de la función, ahora vamos verlo con un par de ejemplos para aprender que es lo que hace y como aplicarlo en nuestro día a día. Para ello, abrimos nuestro Power BI conectado a la base de datos de Contoso. Y creamos la siguiente medida:

 


 

Añadimos a la página una matriz y creamos una jerarquía al vuelo con los campos de Continente, País y Ciudad tal que así:

 

 

Arrastramos la medida recién creada a la matriz y nos devuelve lo siguiente:

 

 

Como podemos ver, la medida nos devuelve el Total Ventas por continente, y si desplegamos el árbol, vemos que ese Total Ventas, nos lo va repartiendo por el contexto de fila:



 

Ahora vamos a crear la siguiente medida con ISINSCOPE:


Y nos arroja el siguiente resultado:

 

 

¿Qué está haciendo la función? Está evaluando la condición de la jerarquía y en caso de que se cumpla, nos devuelve el valor especificado. ¿Correcto? Se podría decir que por lo que hemos escrito en la medida, ISINSCOPE nos devuelve el valor de la jerarquía en el que estoy ¿no?

Bien, ahora vamos a reescribir la medida anterior de la siguiente manera:

 


 

Y la arrastramos a la matriz:

 


 

¿Nos está dando lo mismo? No, ¿no? Pero si la medida se podría decir que es prácticamente la misma… ¿no habíamos dicho que ISINSCOPE parecía que nos devolvía el nivel de la jerarquía?

¿Esto significa que la función está funcionando mal? No exactamente, ¿por qué?

Vamos a modificar el orden de las filas de la siguiente manera:

Inicial: 

 Final:


 

 

Y lo que nos devuelve es lo siguiente:

 

 

Ahora la medida II, que antes supuestamente nos daba el resultado erróneamente, ahora nos lo da correctamente y la medida I ahora no nos devuelve correctamente los datos. ¿Por qué?

Por qué ISINSCOPE, comprueba que el campo que le estamos pasando como argumento está presente en el contexto de filtro o se está agrupando para devolver los resultados. En este caso, el orden en el que listemos las casuísticas del SWITCH importa y vamos a analizar el por qué.

Si analizamos la métrica ISINSCOPE I, la primera condición que evaluamos es la de “Ciudad”, la segunda condición que evaluamos es la de “País” y por último la de “Continente”.

 

 

Ahora si analizamos la métrica ISINSCOPE II, la primera condición que evaluamos es la de “Continente”, la segunda condición que evaluamos es la de “País” y por último la de “Ciudad”.

 

 

 

Pero en esta métrica y con la primera opción de la matriz, el primer nivel de jerarquía, nos devuelve “Continente”:

 


Pero para el segundo y tercer nivel de la jerarquía, también nos devuelve “Continente”. ¿Por qué? Por qué las filas del siguiente nivel son los países pertenecientes al continente, y el siguiente nivel son las ciudades de los países del continente. ¿Se entiende? Si yo invoco ISINSCOPE no sobre el novel más inferior de la jerarquía sino sobre otro que sea superior, cuando haga la comprobación 1: 

 



Siempre va ser la que se cumpla inicialmente. ¿Hasta aquí bien? Hasta ahora, todo lo que he comentado ha sido con el objetivo de analizar el funcionamiento de la función ISINSCOPE, pero el ejemplo comentado, aparte de didáctico, poco más es. Vamos a verlo con un ejemplo práctico del día a día. Queremos calcular el % de las ventas de los almacenes. Para ello creamos la siguiente medida:

 


 

Como hemos visto, el nivel más bajo de la jerarquía es el primero que debe de ir en la condición del SWITCH para evaluarse, por lo que si estamos en una jerarquía de “Descripción de Almacen” vamos a dividir las ventas totales de ese almacen, entre el total de las ventas de los almacenes seleccionado. (Otra vez vuelve a salir el contexto de fila y filtro…) Y lo mismo para el país. Si seleccionamos los países de España y Francia esta medida nos devuelve lo siguiente:

 


 

El volumen de las ventas por cada descripción de almacén y el total que representa cada país respecto a los países seleccionados. ¿Se entiende? Espero que sí. Como podéis ver, ISINSCOPE es una función muy simple pero que a mí personalmente me encanta y me es muy útil a la hora de realizar las distintas medidas que deseemos.

 

¡Nos vemos en los datos!