← Volver al blog
DAXPower BIALLEXCEPT

ALLEXCEPT en acción: creando cálculos precisos en Power BI

ALLEXCEPT quita los filtros de una tabla, pero conserva los de las columnas que elijas. Mira la sintaxis, tres ejemplos y los cuidados de rendimiento.

MA
Allen87Data Engineer
· 3 min de lectura
Panel de código DAX con CALCULATE y ALLEXCEPT(Ventas, Ventas[Categoría]) sobre fondo oscuro

Si necesitas crear cálculos con un nivel de precisión más fino sobre el contexto de filtros, este artículo es para ti. Veremos cómo la función ALLEXCEPT puede ayudarte, con una explicación detallada, ejemplos prácticos y buenas prácticas de uso, además de algunos cuidados que conviene tener en cuenta.

¿Qué es la función ALLEXCEPT?

En DAX, la función ALLEXCEPT devuelve todas las columnas de una tabla, excepto las que se indican como argumento. Su utilidad principal es quitar los filtros de todas las columnas de una tabla, manteniendo los filtros de las columnas especificadas.

Es muy parecida a la función ALL, que descarta los contextos de filtro. La diferencia es que aquí puedes especificar qué filtros y columnas no se descartan.

Sintaxis

ALLEXCEPT(Tabla, Columna1 [, Columna2, ...])
  • Tabla: La tabla sobre la que opera la función.
  • Columna1, Columna2, ...: Las columnas cuyos filtros se conservarán.

Ejemplos de uso

Ejemplo 1: calculando el total de ventas por categoría

Imagina una tabla de ventas con información de productos, categorías y valores de venta. Si queremos calcular el total de ventas de cada categoría, ignorando los filtros de otras columnas, podemos usar:

Total Ventas por Categoría =
CALCULATE(
    SUM(Ventas[Valor]),
    ALLEXCEPT(Ventas, Ventas[Categoría])
)

En este caso, ALLEXCEPT quita los filtros de todas las columnas de la tabla de ventas, excepto de la columna Categoría.

Ejemplo 2: informes con gráficos dinámicos

En dashboards interactivos, puede ser necesario calcular el promedio general dentro de una dimensión fija, como "Departamento":

Promedio por Departamento =
CALCULATE(
    AVERAGE(Ventas[Valor]),
    ALLEXCEPT(Ventas, Ventas[Departamento])
)

Esto permite que los usuarios vean comparaciones más enfocadas en los gráficos, ignorando filtros de contexto no deseados.

En el ejemplo anterior, el promedio general de ventas se calcula considerando solo los filtros de Departamento.

Ejemplo 3: total de ventas por categoría y región

Quieres calcular el total de ventas, quitando los filtros de todas las columnas, pero conservando los filtros aplicados a las columnas Categoría y Región.

Total Ventas por Categoría y Región =
CALCULATE(
    SUM(Ventas[Valor]),
    ALLEXCEPT(Ventas, Ventas[Categoría], Ventas[Región])
)

Si estás viendo un informe en el que los filtros "Categoría = Electrónicos" y "Región = Norte" están activos, esta medida respetará esos filtros, pero ignorará cualquier otro filtro, como fecha o producto.

Buenas prácticas al usar ALLEXCEPT

  • Entiende los contextos de filtro: Asegúrate de comprender cómo interactúan los contextos de fila y de filtro en tus cálculos.
  • Úsala con moderación: ALLEXCEPT puede afectar el rendimiento, sobre todo en modelos grandes, porque altera los filtros de una tabla entera.
  • Prefiere tablas relacionales: Siempre que sea posible, mantén un buen modelado de datos para evitar la necesidad excesiva de manipular filtros.
  • Combínala con otras funciones: ALLEXCEPT se usa con frecuencia junto con CALCULATE y FILTER para crear cálculos más complejos y ajustados al objetivo.
  • Utiliza variables: Evita crear varios cálculos que usen ALLEXCEPT en la misma medida. Usa variables para mejorar el rendimiento.
  • Agrupa los datos: Si es posible, agrupa los datos de antemano para evitar la necesidad de usar ALLEXCEPT.

Cuidados al utilizar ALLEXCEPT

  • Impacto en el rendimiento: En modelos grandes, el uso excesivo de ALLEXCEPT puede aumentar el tiempo de cálculo.
  • Falta de claridad: El uso descuidado puede dificultar que otras personas desarrolladoras entiendan el código.
  • Filtros involuntarios: Asegúrate de conservar solo los filtros necesarios para evitar resultados inesperados.

Conclusión

La función ALLEXCEPT es una buena aliada para crear análisis dinámicos y detallados en Power BI. Comprender cómo interactúa con el modelo de datos y cómo maneja los filtros es fundamental para sacarle el máximo provecho.

Recuerda que el equilibrio entre complejidad y claridad debe ser una prioridad.

MA
Allen87 Data Engineer & Data Analyst

Escribo sobre Power BI, ingeniería de datos e IA aplicada. Mira el perfil completo, los 66 dashboards de Power BI publicados y GitHub.