CALCULATE en Power BI: contexto de filtro y modificadores

Esquema de CALCULATE en Power BI que compara una medida sin KEEPFILTERS, que devuelve 62, con la misma medida con KEEPFILTERS, que devuelve un valor en blanco

CALCULATE en Power BI es la función que separa un informe que suma de un informe que responde preguntas. En realidad hace una sola cosa —evaluar una expresión en un contexto de filtro modificado—, pero de esa frase salen los porcentajes sobre el total, las comparaciones entre sedes y casi cualquier medida que no sea una suma directa. Por eso esta guía la explica desde el contexto de filtro hasta los modificadores, con medidas que se pueden copiar.

Además, está escrita en dos niveles. Si usted usa informes y quiere entender por qué un porcentaje no cuadra, los primeros apartados y las tablas de resultados le bastan. En cambio, si escribe las medidas, encontrará la transición de contexto, los cinco modificadores de filtro y las reglas que limitan lo que se puede poner dentro de un filtro booleano.

La serie y el conjunto de datos común

Por su parte, esta es la segunda de seis guías que comparten el mismo caso: la mesa de servicio de una empresa con cuatro sedes, con 1.240 tickets del tercer trimestre de 2026.

  1. Esquema estrella: hechos, dimensiones y claves.
  2. CALCULATE: contexto de filtro y modificadores (esta guía).
  3. Tabla de fechas y cálculos de tiempo.
  4. Visualizaciones: qué gráfico usar en cada caso.
  5. Áreas de trabajo, aplicaciones y actualización.
  6. Licencias: Free, Pro, PPU y capacidad.

En este punto, el modelo ya está montado como se explica en la primera guía: dos tablas de hechos —Tickets y Consumo— y cinco dimensiones, todas unidas con relaciones uno a varios. Por lo tanto, estas son las cifras a las que hay que llegar:

SedeTicketsHorasSLA cumplido% de SLA
Bogotá512842,045689,1 %
Medellín318553,528188,4 %
Cali244445,020282,8 %
Barranquilla166268,014486,7 %
Total1.2402.108,51.08387,3 %

Qué es el contexto de filtro

Antes de escribir nada, conviene definirlo: el contexto de filtro es el conjunto de filtros que están activos cuando se evalúa una medida. Es decir, no lo escribe nadie: lo arma el propio informe. Así, la fila de la matriz, la columna, la segmentación de prioridad, la página, el filtro del objeto visual y el resaltado cruzado se suman y producen ese contexto.

Por eso una misma medida de CALCULATE en Power BI devuelve 1.240 en el total y 244 en la fila de Cali. La fórmula no cambia; cambia el contexto en el que se evalúa. De hecho, entender esto es la mitad del trabajo, porque casi todos los resultados raros de DAX son un contexto de filtro distinto del que uno imaginaba.

Asimismo, existe un segundo contexto, el contexto de fila, que aparece dentro de una columna calculada o de una función iteradora. Entonces la expresión se evalúa fila a fila. Además, los dos contextos conviven y no hacen lo mismo, lo que explica el tercer error clásico de quien empieza.

La sintaxis de la función CALCULATE

Por fortuna, la forma es breve y está documentada por Microsoft:

CALCULATE ( <expresión> [, <filtro1> [, <filtro2> [, …] ] ] )

Es decir, el primer argumento es la expresión que se evalúa, y se comporta como una medida. En cambio, los demás son opcionales y definen el contexto modificado. Pueden ser de tres clases: expresiones booleanas, expresiones de tabla o funciones modificadoras de filtro.

Por otra parte, existe CALCULATETABLE, que hace exactamente lo mismo pero devuelve una tabla en lugar de un valor. Por lo tanto, todo lo que sigue sirve para las dos.

Las medidas base, antes de usar CALCULATE en Power BI

Ahora bien, antes de complicar nada conviene escribir las cuatro medidas simples de las que dependen todas las demás. Por lo demás, conviene crearlas siempre de forma explícita, en vez de arrastrar una columna y dejar que Power BI la sume: así se controla cómo se resume cada cosa.

Tickets = COUNTROWS ( Tickets )

Horas = SUM ( Tickets[HorasDedicadas] )

SLA cumplido = SUM ( Tickets[CumpleSLA] )

% de SLA = DIVIDE ( [SLA cumplido], [Tickets] )

Ninguna lleva CALCULATE todavía, y aun así responden por sede, por categoría y por mes, porque el contexto de filtro lo pone el informe. Por eso esa es la base sobre la que el resto de la guía construye.

Además, un detalle que ahorra disgustos: DIVIDE devuelve un valor en blanco cuando el denominador es cero, mientras que el operador barra produce un error de división. Por ejemplo, con una segmentación que deje una sede sin tickets, la diferencia se nota de inmediato.

Filtros booleanos y sus cinco reglas

En la práctica, el filtro más usado de CALCULATE en Power BI es una comparación sencilla. Así, para contar solo los tickets críticos del caso basta con esto:

Tickets críticos =
CALCULATE ( [Tickets], Tickets[Prioridad] = "Crítico" )

En concreto, devuelve 62 sobre los 1.240 del trimestre. Ahora bien, un filtro booleano no admite cualquier cosa dentro. Por eso, estas son las cinco reglas, y saltárselas produce un error que a veces cuesta interpretar:

ReglaQué significa
Una sola tablaPuede referirse a columnas de una única tabla
Sin medidasNo puede llamar a una medida
Sin CALCULATE anidadoNo puede contener otro CALCULATE
Sin funciones de tablaSalvo que se pasen a una función de agregación
Sí admite agregacionesSi devuelven un valor escalar

De ellas, la quinta abre una puerta útil. Por ejemplo, para contar los tickets abiertos el último día con actividad, la agregación va dentro del propio filtro:

Tickets del último día =
CALCULATE (
    [Tickets],
    Tickets[FechaApertura] = MAX ( Tickets[FechaApertura] )
)

En cambio, cuando la condición es más compleja —dos tablas, o una comparación contra una medida— hay que pasar a un filtro de tabla con FILTER. Es más lento, así que conviene usarlo solo cuando el booleano no alcanza.

Los cinco modificadores de filtro

Por su parte, los modificadores no añaden condiciones: cambian el contexto de filtro. En total son cinco, y cada uno resuelve un problema distinto.

ModificadorQué hacePara qué sirve en el caso
REMOVEFILTERSQuita filtros de una tabla o de columnasCalcular el total de las cuatro sedes
ALL y sus variantesLo mismo, y además devuelve tablaEquivalente, en herramientas antiguas
KEEPFILTERSAñade sin sobrescribirCruzar prioridad con la fila de la matriz
USERELATIONSHIPActiva una relación inactivaContar por fecha de cierre
CROSSFILTERCambia la dirección del filtroPuntual, sin tocar el modelo

Por cierto, Microsoft recomienda REMOVEFILTERS sobre ALL cuando la herramienta lo admite, porque su nombre dice lo que hace. Así sale la medida de participación que pide cualquier dirección:

Tickets de todas las sedes =
CALCULATE ( [Tickets], REMOVEFILTERS ( Sedes ) )

% sobre el total =
DIVIDE ( [Tickets], [Tickets de todas las sedes] )
SedeTicketsTickets de todas las sedes% sobre el total
Bogotá5121.24041,3 %
Medellín3181.24025,6 %
Cali2441.24019,7 %
Barranquilla1661.24013,4 %

Es decir, la columna del medio es la clave: vale 1.240 en las cuatro filas porque el modificador ha retirado el filtro de sede. Sin él, en cambio, el cociente daría 100 % en todas.

Sobrescribir o añadir: el matiz de KEEPFILTERS

Ahora bien, aquí está el comportamiento que más confunde. Cuando un filtro de CALCULATE toca una columna que ya estaba filtrada, la sobrescribe. Es decir, no se cruza con ella: la sustituye.

Se ve claro, por ejemplo, en una matriz con la prioridad en las filas. En efecto, la medida Tickets críticos devuelve 62 en las tres filas, incluida la de prioridad media, porque su propio filtro reemplaza al de la fila. Con KEEPFILTERS, en cambio, los dos se cruzan:

Críticos respetando la fila =
CALCULATE (
    [Tickets],
    KEEPFILTERS ( Tickets[Prioridad] = "Crítico" )
)
Fila de la matrizTicketsTickets críticosCríticos respetando la fila
Crítico626262
Alto24862(en blanco)
Medio93062(en blanco)
Total1.2406262

Por supuesto, ninguna de las dos columnas está mal: responden a preguntas distintas. Con todo, lo grave es no saber cuál de las dos se está usando, porque entonces el informe miente sin avisar.

La transición de contexto

Por último, hay un uso de CALCULATE en Power BI que no lleva ningún filtro y aun así cambia el resultado. De hecho, sirve para convertir un contexto de fila en contexto de filtro, y se llama transición de contexto.

El ejemplo canónico, de hecho, es una columna calculada en la dimensión de técnicos. Sin CALCULATE, la expresión no sabe en qué fila está y devuelve el total para los siete; con él, cada técnico obtiene lo suyo:

-- Columna calculada en la tabla Tecnicos

Tickets mal contados = COUNTROWS ( Tickets )          -- 1.240 en las 7 filas

Tickets del técnico  = CALCULATE ( COUNTROWS ( Tickets ) )
TécnicoTickets mal contadosTickets del técnico
Técnico 11.240224
Técnico 21.240209
Técnico 31.240198
Técnico 41.240186
Técnico 51.240171
Técnico 61.240148
Técnico 71.240104

Como se ve, la segunda columna suma 1.240. Y conviene saber que, cuando dentro de un contexto de fila se usa una medida del modelo, la transición ocurre sola: por eso escribir [Tickets] en lugar de COUNTROWS también habría funcionado.

Variables: medidas con CALCULATE que se pueden leer

Por otro lado, en cuanto una medida pasa de tres líneas conviene partirla con VAR. En efecto, las variables se evalúan una sola vez, así que además de aclarar la fórmula suelen acelerarla.

Puntos sobre la meta =
VAR Meta       = 0.90
VAR Cumplidos  = [SLA cumplido]
VAR Atendidos  = [Tickets]
VAR Porcentaje = DIVIDE ( Cumplidos, Atendidos )
RETURN
    IF ( ISBLANK ( Atendidos ), BLANK (), Porcentaje - Meta )
Sede% de SLAPuntos sobre la meta del 90 %
Bogotá89,1 %−0,9
Medellín88,4 %−1,6
Cali82,8 %−7,2
Barranquilla86,7 %−3,3
Total87,3 %−2,7

Sobre todo, esa última columna es la que la dirección mira primero, y de ella sale la conversación sobre Cali. Por último, una advertencia importante: una variable guarda el valor del contexto en el que se declaró, de modo que CALCULATE no la modifica después.

Medida o columna calculada

Por cierto, la duda aparece siempre, y tiene respuesta corta.

MedidaColumna calculada
Cuándo se calculaAl consultarAl actualizar
Dónde se guardaNo se guardaOcupa espacio en el modelo
Reacciona a los filtrosNo
Sirve para segmentarNo
Uso típico en el caso% de SLA, horas por ticketRango de antigüedad del ticket

En la práctica, la regla es esta: si el número tiene que cambiar cuando alguien mueve una segmentación, es una medida. Si en cambio va a usarse como eje, leyenda o filtro, es una columna. Y si se puede calcular antes, en el origen o en Power Query, casi siempre conviene hacerlo allí.

Errores frecuentes con CALCULATE en Power BI

ErrorSíntomaCorrección
Olvidar que el filtro sobrescribeEl mismo número en todas las filasEnvolver el filtro en KEEPFILTERS
Usar FILTER sobre la tabla de hechosInforme lentoFiltrar la dimensión, no el hecho
Retirar toda la tabla con ALLSe pierde también el filtro de fechaNombrar la columna concreta
Anidar CALCULATE en un booleanoError al guardar la medidaPasar a filtro de tabla
Dividir con el operador barraError con denominador ceroUsar DIVIDE
Contar filas con COUNT sobre una columnaSe pierden las filas en blancoUsar COUNTROWS

Sin embargo, el segundo merece un comentario. FILTER recorre fila a fila la tabla que se le pase; sobre 1.240 tickets da igual, pero sobre varios millones la diferencia entre filtrar la dimensión y filtrar el hecho es de segundos a minutos.

Una limitación de CALCULATE en Power BI

Por añadidura, Microsoft documenta que esta función no se admite en modo DirectQuery cuando se usa dentro de columnas calculadas o de reglas de seguridad de nivel de fila. Por lo tanto, si el modelo consulta la base de datos en vivo en lugar de importar, hay que resolver esos dos casos de otra manera.

Aun así, para el caso de esta serie no supone ningún problema, porque son 1.276 filas de hechos y el modelo se importa entero. Por lo demás, la actualización de esos datos importados es el asunto de la quinta guía.

En resumen: CALCULATE en Power BI, en cuatro ideas

En resumen, para trabajar con CALCULATE en Power BI basta con retener cuatro ideas. El contexto de filtro lo pone el informe; los filtros de la función sobrescriben salvo que se use KEEPFILTERS; sin filtros, la función convierte contexto de fila en contexto de filtro; y las variables hacen que la medida se pueda leer dentro de seis meses.

Por último, con esas medidas escritas falta el eje que ninguna empresa puede evitar: el tiempo. En concreto, comparar septiembre con agosto, acumular el año o mirar los últimos treinta días exige una tabla de fechas en condiciones, y ese es el tema de la tercera guía.

Por último, si lo que hace falta es que alguien mantenga las licencias, los usuarios y los accesos de Microsoft 365 que sostienen la herramienta, esa es la conversación de nuestro servicio de gestión de plataformas. En definitiva, escribir medidas es una habilidad; sostener la plataforma cada día, un servicio.

Compartir este artículo

Últimas entradas

Escríbanos ahora