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!