Diferencias entre ALLSELECTED y ALLEXCEPT en DAX

Cuando trabajamos con DAX en Power BI, una de las primeras cosas que aprendemos es el concepto de los filtros. Para ajustar estos filtros de manera efectiva, DAX nos ofrece un conjunto de funciones que nos ayudan a manipular el contexto de filtrado en nuestras fórmulas. Entre ellas, las funciones ALLSELECTED y ALLEXCEPT juegan un rol crucial, pero a menudo son mal entendidas o confundidas. Vamos a profundizar en cómo funcionan, sus diferencias y, algo muy importante, cómo pueden afectar el rendimiento de nuestros reportes en Power BI.

ALLSELECTED y ALLEXCEPT: ¿qué hacen y cuándo usarlas?

Antes de entrar en detalles técnicos, es útil plantear una metáfora. Imagina que tienes un filtro en una hoja de cálculo de Excel. En algunos casos, puedes querer eliminar ese filtro para ver todas las filas, y en otros, solo desactivar algunas columnas mientras mantienes el filtro en las demás. Esto es, a grandes rasgos, lo que hacen ALLSELECTED y ALLEXCEPT.

🟩 ALLSELECTED: respeta los filtros aplicados a nivel del reporte, pero permite extender el contexto de los cálculos para incluir todos los datos seleccionados por el usuario. Esto es particularmente útil cuando trabajamos en un gráfico o tabla dinámica y queremos calcular, por ejemplo, un porcentaje basado en las selecciones actuales del usuario.

🟩ALLEXCEPT: elimina los filtros de toda la tabla excepto aquellos que explícitamente hemos indicado que queremos mantener. Esta función es más específica y poderosa cuando necesitamos excluir o mantener filtros en columnas concretas, sin importar qué selecciones haya hecho el usuario en el reporte.

Vamos hacer un ejemplo práctico con una base de datos de ventas de videojuegos que he obtenido de Kaggle.

 

ALLSELECTED

ALLSELECTED es una función que devuelve todas las filas dentro del contexto actual de selección aplicado por el usuario en Power BI. Permite ignorar algunos filtros dentro de una visualización o gráfico, pero sigue respetando aquellos que el usuario haya aplicado.

En resumen, es útil cuando queremos sumar las ventas globales de los juegos seleccionados manteniendo los filtros aplicados, pero permitiendo que los totales reflejen la selección realizada.

Supongamos que queremos calcular el total de ventas globales de los videojuegos dentro del contexto actual de filtros que el usuario ha aplicado (por ejemplo, por plataforma o género). Para ello, podemos usar la siguiente medida DAX:

				
					PctVentasGlobales = 
DIVIDE(
    SUM(vgsales[Global_Sales]),
    CALCULATE(SUM(vgsales[Global_Sales]), ALLSELECTED(vgsales[Platform]))
)
				
			

¿Qué hace esta medida?

🟩SUM(vgsales[Global_Sales]): Suma las ventas globales de todos los videojuegos dentro del contexto actual.

🟩ALLSELECTED(vgsales[Platform]): Mantiene el contexto de filtro que el usuario ha aplicado en el informe, pero dentro de la selección de la tabla o visualización. Esto significa que si el usuario ha filtrado los juegos por plataforma o género, el cálculo respetará esos filtros y mostrará el total solo de los juegos seleccionados.

 

Si el usuario selecciona solo los juegos lanzados en 2600, la medida calculará el total de ventas globales únicamente para esos juegos filtrados, sin tener en cuenta los juegos de otras plataformas.

ALLEXCEPT

ALLEXCEPT funciona de manera contraria: elimina todos los filtros del contexto, excepto aquellos que especifiques explícitamente. Esto significa que si quieres calcular el total de ventas globales, pero manteniendo solo un filtro específico (por ejemplo, el género de los videojuegos), ALLEXCEPT es la función adecuada.

Ahora imagina que queremos calcular el total de ventas globales, pero ignorando todos los filtros excepto el género del videojuego. Queremos ver, por ejemplo, las ventas globales de todos los videojuegos de un género determinado (sin importar el año, la plataforma, o cualquier otro filtro).

Podemos usar esta medida DAX:

				
					TotalVentasALLEXCEPT = 
CALCULATE(
    SUM(vgsales[Global_Sales]),
    ALLEXCEPT(vgsales, vgsales[Genre])
)

				
			

¿Qué hace esta medida?

🟩SUM(vgsales[Global_Sales]): Suma las ventas globales de todos los videojuegos.

🟩ALLEXCEPT(vgsales, vgsales[Genre]): Elimina todos los filtros, excepto el que se aplica a la columna Genre. De esta manera, solo se tienen en cuenta los videojuegos que pertenecen a un género específico, sin importar otros filtros como el año o la plataforma.

Si el usuario ha filtrado los datos por plataforma, esta medida ignorará esos filtros y mostrará el total de ventas globales solo agrupado por género

Cuando seleccionamos el filtro de Genre Acción nos sale el total para ese género en concreto. 

Impacto en el rendimiento

El uso de ALLSELECTED puede ser más costoso a nivel de rendimiento, especialmente si tienes muchos filtros dinámicos aplicados en tu reporte. Esto se debe a que la función debe recalcular el total cada vez que cambian los filtros aplicados por el usuario, lo cual puede volverse intensivo en cálculos si trabajas con un modelo grande o con múltiples visualizaciones.

En comparación, ALLEXCEPT tiende a ser más eficiente porque elimina la mayor parte de los filtros, reduciendo el contexto de cálculo. Sin embargo, si especificas demasiadas excepciones (por ejemplo, varias columnas), el cálculo también puede volverse más complejo.

En resumen

🟩 ALLSELECTED respeta los filtros aplicados por el usuario en el informe y es útil cuando quieres hacer cálculos dentro del contexto de selección actual.

🟩 ALLEXCEPT ignora todos los filtros, excepto aquellos que especificas, y es ideal cuando necesitas mantener solo uno o dos filtros específicos.

Ambas funciones son potentes, pero su impacto en el rendimiento y su utilidad dependen del contexto en el que las apliques. Si bien ALLSELECTED puede ser ideal para cálculos dinámicos en gráficos con muchos filtros, ALLEXCEPT te da más control sobre qué filtros mantener y qué filtros ignorar, ofreciendo mayor flexibilidad en ciertos escenarios.

🤞 ¡No te pierdas ningún artículo!

¡No hacemos spam!

Noelia Navarro

Empecé mi carrera profesional en departamentos de administración contable, laboral y logística permitiéndome desarrollar nuevas técnicas para mejorar mi trabajo y descubrir así mi verdadera pasión el análisis de datos.
5 1 vote
Article Rating
Subscribe
Notify of
guest

0 Comentarios
Inline Feedbacks
View all comments