¿Cómo utilizar las funciones ALL y ALL EXCEPT en Power BI?
En Power BI, las funciones ALL y ALL EXCEPT son herramientas poderosas que te permiten realizar cálculos más complejos al ignorar filtros sobre tablas o columnas. Estos cálculos son esenciales, sobre todo cuando el negocio requiere determinar, por ejemplo, la participación de una categoría específica en un conjunto de datos. Con estas funciones, puedes personalizar tus cálculos y obtener análisis detallados. Veamos cómo funcionan y cómo puedes aplicarlas en escenarios concretos.
¿Cómo se utiliza la función ALL para calcular participación de mercado?
La función ALL se emplea para eliminar filtros en tablas o columnas, permitiéndote trabajar con datos sin segmentar. Un uso típico es calcular la participación de marca en el total de ventas. Por ejemplo, para determinar el porcentaje de ventas de cada marca de vehículo:
Crear una tabla de ventas por marca: Agrega la columna "marca de vehículo" y "total de venta" a tu tabla.
Nueva medida para el cálculo del total de ventas de todas las marcas:
Total Ventas Marca = CALCULATE([Total Ventas], ALL('Tabla'[Marca Vehículo]))
Con este cálculo, logras que el total de ventas se muestre completo para cada marca, sin segmentación.
Calcular el porcentaje de participación de cada marca:
Porcentaje Marca = DIVIDE([Total Ventas], [Total Ventas Marca])
Esta medida te da el porcentaje específico que cada marca representa sobre el total de ventas sin filtrar.
¿Qué es y cómo implementar ALL EXCEPT?
ALL EXCEPT es similar a ALL, pero te ofrece un control más preciso ya que elimina filtros excepto sobre ciertos campos argumentados. Esto es especialmente útil cuando necesitas mantener un filtro particular mientras eliminas otros.
Crear una tabla con una variable temporal, como el año: Agrega la variable "año" y ajusta para que no se resuma, luego llama al "Total de Ventas".
Implementar ALL EXCEPT en una nueva medida para el total de ventas anuales:
Total Ventas Año = CALCULATE([Total Ventas], ALL_EXCEPT('Tabla', 'Tabla'[Año]))
Aquí, el filtro "año" persiste, pero otros filtros se eliminan. Esto es útil si, por ejemplo, mientras analizas las ventas por año, otros filtros podrían no ser relevantes.
Recomendaciones prácticas
Combinación con CALCULATE: Las funciones ALL y ALL EXCEPT se combinan frecuentemente con CALCULATE para maximizar el control sobre el contexto de filtro.
Cálculos de gestión: Estas funciones te permiten crear indicadores personalizados para diferentes niveles de análisis, desde el global hasta el temporal.
Ejercicio propuesto: Practica calculando el porcentaje de participación de cada vendedor usando las funciones discutidas. Esto no solo refuerza tu comprensión sino que también amplía tus habilidades en Power BI.
Aprender a dominar estas funciones te brindará una capacidad analítica avanzada en Power BI. Continúa explorando y mejorando tu manejo de DAX para responder preguntas complejas del negocio. Sigamos aprendiendo juntos y amplía todas las posibilidades que herramientas como estas te ofrecen en el análisis de datos.
ALL es una funcion que te va a permitir que power bi no haga interaccion fila por fila generando reparticiones sumatorias respectivamente, sino que el total se le asigna a cada agente que participa en la tabla(uniforme).
imaginate esto:
yo tengo 3 manzanas.
tu tienes 5 manzanas.
el profesor tiene 2 manzanas.
total manzanas: 10.
all lo que hace es que nos pone manzanas a cada quien:
yo tengo 10
tu tienes 10
el profesor tiene 10.
ahhh pero al realizar un divide(para conocer la participacion). ahí es fuerte all.
allexcept: Es una funcion que te permitirá generar cambios solo en el o los campos que tu hagas referencia, cualquier otra columna o variable, pues tendra una repeticion.
personalmente no encuentro util hasta el momento allexcept, con all me es mas que suficiente ya que con all, puedo generar un analisis de variacion entre los agentes de mi tabla, sean años, sean empresas, sean ciudades en un tiempo determinado.
me doy por buen servido.
ALLEXCEPT es usado cuando quieres distribuir de forma selectiva las metas de venta y las comisiones, por ejemplo, de acuerdo a las categorías de vendedor que tengas
Hola a todos. Les comparto mi código, de esta forma no tienen que hacer dos medidas sino que bastará con solo una:
Espero les sirva, saludos.
%vendedores =DIVIDE([Total de Ventas],CALCULATE([Total de Ventas],ALL(Dim_Vendedor[Vendedor])))
%Vendedores = DIVIDE([Total de Ventas], CALCULATE([Total de Ventas], ALLEXCEPT(Dim_Vendedor, Dim_Vendedor[Vendedor])))
Con este código si me dió bien la participación. Con el que usted propone todos me daban 1.
Les dejo este tip, para que puedan colocar el formato de porcentaje con 2 decimales,
Gracias
% DE PARTICI VENDE = DIVIDE([Total de Ventas],CALCULATE([Total de Ventas],ALL(Dim_Vendedor[Nombre Vendedor M])))
Profe, Punto porfa!
Q: Me causa inquietud para que repetir un mismo valor en las distintas marcas?
En este caso como se podría hacer el calculo del porcentaje de marca sin necesidad de repetir el valor total de la venta para todas las marcas?. Gracias
Hola!
No es que se busque repetir el mismo valor para todas las marcas, incluso cuando colocas en una visualización otro tipo de medidas que no incluyan funciones capaces de remover filtros y dentro de la visualización los valores se repiten, es posible que falte alguna relación, no esté activa o haya algo raro con el modelo.
Espero que no se vea como una explicación innecesaria. Para este ejemplo, se tienen las marcas en una visualización y se pasa una medida que son las ventas totales; entonces, para cada marca y debido al contexto de filtro, se filtra el modelo completo y solo se ven las ventas que le corresponden a cada una de ellas. Después, lo que se busca es encontrar el porcentaje de participación respecto al total de ventas (sin filtro); De manera obvia, para poder calcular esto se realiza la división de la marca respectiva(numerador) entre el total general(denominador). El valor del numerador ya está para cada marca, cómo dijimos antes es la medida que se colocó originalmente y se filtró mediante el contexto de filtro, falta el denominador, en este caso sería el total general del ventas sin filtro, pero al momento que se utilice en una nueva medida el contexto de filtro va a filtrar tanto el numerador como al denominador y esto hará que se obtenga el mismo valor para ambos, lo que devolverá 1.
Esto es lo que resuelve la función ALL. al utilizarla en el denominador, la función va a modificar el contexto de filtro para que la medida se evalúe sin filtro (el motor no trabaja precisamente así, pero es para intentar explicar lo que sucede) y devuelva el total general.
Ojalá te sea de utilidad, saludos.
Hola
A continuación mi solución al reto:
% Participacion =
VAR TOTAL_VENTAS_VENDEDOR = CALCULATE([Total de Ventas],ALL(Dim_Vendedor[Vendedor]))
RETURN
DIVIDE([Total de Ventas], TOTAL_VENTAS_VENDEDOR)
```Les recomiendo utilizar Variables para hacer el código mas legible.
Documentación al respecto:
Quizás les sirva para entender un poco más sobre el tema:
++ALL++: La función ALL elimina todos los filtros de todas las columnas de la tabla especificada o de toda la tabla si no se especifica ninguna. Esto es útil cuando se desea ignorar todos los filtros y trabajar con la tabla completa.
En este ejemplo, ALL elimina todos los filtros en la tabla 'Ventas' al calcular la suma de los montos.
++ALLEXCEPT++: La función ALLEXCEPT mantiene el filtro en la tabla especificada, pero quita los filtros de las demás columnas, excepto las mencionadas. Es útil cuando se desea mantener ciertos filtros mientras se eliminan otros.
Aquí, ALLEXCEPT mantiene el filtro por sucursal, pero elimina otros filtros al calcular la suma de los montos de ventas sin considerar otros contextos.
No me funciona con este còdigo, tuve que hacerlo bajo la forma larga. Como calculamos el porcentaje de ventas por marca.
Hola, a mi me funciono de las dos formas:
* Forma Larga:
Se calcula primero el total de ventas por vendedor
TOTAL VENTA VENDEDOR = CALCULATE([Total de Ventas], ALL(Dim_Vendedor[Vendedor]))
Luego de incluye en al formula de divide:
% VENDEDOR = DIVIDE([Total de Ventas],[TOTAL VENTA VENDEDOR])
* Forma Corta:
En una sola formula se incluye en el denominador el calculo del total de ventas por vendedor
% VENDEDOR 1 = DIVIDE([Total de Ventas], CALCULATE([Total de Ventas],ALL(Dim_Vendedor[Vendedor])))
% Ventas x Vendedor =
DIVIDE (
[Total de Ventas],
CALCULATE ( [Total de Ventas], ALL ( Dim_Vendedor[Vendedor] ) )
)
Ordené la tabla en orden descendente por % de venta
Lo raro es que al aislar cada dato por vendedor el total de ventas pareciera que se reptiera, pero al dividir no