Contexto de fila y contexto de filtro en DAX (Power BI)

Explico la diferencia entre contexto de fila y contexto de filtro en DAX, y cómo la función CALCULATE realiza la transición de contexto que convierte una fila individual en un filtro, con un ejemplo sobre ventas acumuladas.

Si el artículo anterior sobre medidas y columnas calculadas te dejó con ganas de entender el «por qué» de fondo, esto es justo eso: en DAX todo gira alrededor de dos conceptos, el contexto de fila y el contexto de filtro, y de una función, CALCULATE, que sabe convertir uno en el otro.

Contexto de fila: «en qué fila estoy»

El contexto de fila existe cuando DAX está evaluando una expresión posicionado sobre una fila concreta de una tabla. Es lo que ocurre de forma natural en una columna calculada: cuando escribes Ventas[Cantidad] * Ventas[PrecioUnitario], DAX sabe en cada momento a qué fila se refiere Ventas[Cantidad]. También aparece dentro de funciones iteradoras como SUMX o FILTER, que recorren una tabla fila a fila.

Contexto de filtro: «qué está filtrado ahora mismo»

El contexto de filtro es el conjunto de filtros activos en el momento en que se evalúa una medida: los que vienen de los segmentadores, de los filtros de página o informe, de las filas y columnas de una tabla visual, y de las relaciones del modelo que propagan esos filtros desde las dimensiones. Una medida como Total Ventas = SUM(Ventas[Importe]) no tiene ni idea de en qué fila está: simplemente suma todas las filas de Ventas que sobreviven al contexto de filtro vigente.

CALCULATE y la transición de contexto

Aquí es donde entra CALCULATE. Su trabajo principal es evaluar una expresión dentro de un contexto de filtro modificado, añadiendo, sobrescribiendo o eliminando filtros según los argumentos que le pases. Pero tiene un efecto adicional, más sutil, que la documentación de Microsoft llama context transition (transición de contexto): cuando usas CALCULATE dentro de un contexto de fila, este transforma esa fila en un contexto de filtro equivalente, como si hubieras filtrado el modelo para dejar visible únicamente esa fila.

Context transition en una frase: cada vez que una medida se evalúa dentro de un contexto de fila (por ejemplo, dentro de una columna calculada o de un iterador), DAX aplica automáticamente un CALCULATE implícito que convierte «la fila actual» en «un filtro que deja solo esa fila». Es exactamente lo que distingue por dentro a una medida de una columna calculada: la medida solo sabe hablar en contexto de filtro, así que si la llamas desde un contexto de fila, algo tiene que traducir uno en el otro.

Un ejemplo con ventas acumuladas

Imagina un informe genérico con una tabla de Ventas y una dimensión Fecha. Para calcular el acumulado de ventas hasta la fecha visible en cada fila del visual, una medida típica sería:

Ventas Acumuladas = CALCULATE(SUM(Ventas[Importe]), FILTER(ALL('Fecha'), 'Fecha'[Fecha] <= MAX('Fecha'[Fecha])))

Aquí CALCULATE sustituye el contexto de filtro de fecha que trae el visual (por ejemplo, «marzo de 2026») por uno nuevo: todas las fechas hasta la máxima visible. El resultado es un acumulado que se recalcula automáticamente si cambias la granularidad del visual a mes, trimestre o año, porque sigue reaccionando al contexto de filtro externo a través de MAX('Fecha'[Fecha]).

  • Si tu expresión debe reaccionar a filtros externos (segmentadores, ejes de un visual), piensa en contexto de filtro y probablemente necesites una medida.
  • Si estás dentro de un iterador (SUMX, FILTER) y llamas a una medida del modelo, recuerda que ahí ocurre context transition de forma automática.
  • Usa ALL o ALLEXCEPT dentro de CALCULATE cuando necesites «salirte» de parte del contexto de filtro actual, como en los acumulados o en los porcentajes sobre el total.
  • No abuses de columnas calculadas que llaman a medidas: cada llamada dispara una transición de contexto, y en tablas grandes eso tiene un coste de rendimiento real.
  • Cuando algo no cuadre, pregúntate primero «¿en qué contexto se está evaluando esto ahora mismo?»: la mayoría de errores de DAX se resuelven identificando bien el contexto activo.

Entender estos dos contextos es la mitad del camino; la otra mitad es saber cuándo te conviene fijar el cálculo en una columna y cuándo dejarlo vivo en una medida.

Leer el artículo sobre medidas vs columnas calculadas en DAX
Fuentes: documentación oficial de Microsoft — CALCULATE function (DAX).