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!