Seguimos con las entradas de las funciones tipo tabla, en este caso con la función ALL.
En la entrada anterior, relativa a la función FILTER, vimos que era una función muy útil cuándo nuestro objetivo era la reducción de filas en una tabla, pues bien, con la función ALL hacemos lo contrario, cogemos todas las filas.
La función ALL es una función que os aconsejo tener controlada, ya que es una función que se suele utilizar a menudo, sobre todo cuando queremos calcular porcentajes ya que ignora los filtros que dispongamos en el informe.
La sintaxis de la función ALL es:
Donde:
Table (tabla): es la tabla donde se van a borrar los filtros
Column (Columna): Columna/s en la/s que se va/n a borrar los filtros.
Como siempre, vamos a analizar la función mediante ejemplos, ya que creo que es la mejor manera de entenderla. Para ello, vamos a nuestro Power BI con la base de datos de Contoso y vamos Modelado à Nueva Tabla y creamos la siguiente medida:
Lo que la métrica anterior realiza es una copia literal de la tabla DimStore. No es una métrica que tenga demasiado sentido, pero ilustrativamente es muy útil.
Tabla DimStore:
Tabla ALL DimStore:
Añadir que, si decidís crear una réplica de alguna tabla de esta manera, la tabla nueva es totalmente dependiente de la original. Es decir, si mediante Power Query realizamos cualquier filtro, este se aplicará sobre la nueva tabla. Por ejemplo, si en Power Query filtramos que el StoreKey sea igual a 1:
Tabla DimStore:
Tabla ALL DimStore:
Volviendo al tema que nos concierne, que si no me despisto, vamos a crear una visual que sea una matriz y me muestre los totales de venta de los productos por país. Para ello creamos nuestra medida TotalSales y la arrastramos a la tabla:
Y tenemos como resultado:
Ahora vamos a calcular TODAS las ventas de los países, que no es lo mismo que todas las ventas por país. Para ello, creamos la siguiente medida:
¿Y os imagináis cual será el resultado por ejemplo para Alemania?...
El resultado como podéis ver es el total de las ventas para cada país, o lo que es lo mismo, con la función ALL ignoramos cualquier filtro que haya establecido en el informe y de ahí que no haya caso al contexto de fila en la tabla. ¿Qué quiero decir con ignoramos cualquier filtro? Pues, por ejemplo, si arrastro al informe un segmentador de datos y arrastro la dimensión País y hacemos click por ejemplo en Alemania:
El valor de la métrica no se ha visto afectado por el filtro.
Ahora que ya disponemos de las medidas tanto por país como totales y hemos entendido que la función ALL no se ve afectada por ningún filtro, dividimos las ventas por país entre el total de las ventas para obtener el porcentaje respecto al total de ventas (esta es una de las funciones principales de la función ALL). Para ello creamos la siguiente medida:
Buena práctica: la función DIVIDE realiza la división y devuelve el resultado alternativo o BLANK() si se divide entre 0. Es la función recomendada para realizar el cociente entre números, de esta manera controlas la división entre 0.
Arrastramos la medida calculada a la tabla del informe:
Y como podemos ver, tenemos el porcentaje de ventas de los países respecto al total de las ventas.
Ahora, vamos a retomar uno de los ejemplos que vimos en el post de Orden de filtrado de la función CALCULATE, si no lo has leído, te dejo aquí el enlace ya que te recomiendo que lo veas. Tenemos la siguiente medida:
Y arroja el resultado siguiente:
¿Qué hace exactamente? Cuéntame el número de filas de la tabla Clientes y como argumento de filtro invoco a la función FILTER qué hace un ALL sobre la tabla DimCustomer y realiza un filtro sobre la columna de sexo de los clientes, es decir, elimina los filtros y establece el filtro que el sexo sea femenino (F). Eso es lo que explica que, aunque en la matriz ponga masculino no haga caso de ese filtro, lo ignore y pueda cambiarlo al sexo femenino.
Conclusión
ALL ignora cualquier filtro existente para producir un resultado. Podemos usar ALL como argumento de una función de iteración o como argumento de filtro de la función CALCULATE. La función ALL nos da mucha versatilidad, pero hay que tener claro los conceptos tanto de contexto de fila y como de filtro, así como las transiciones de contexto si anidamos funciones.
¡Nos vemos en los datos!