CALCULATE en DAX: la función que más vas a usar, explicada con ejemplos
Qué hace CALCULATE, cómo cambia los filtros y cómo usarla para ventas por ciudad, porcentaje del total y comparación con el año anterior, con los errores más comunes.

Si aprendes una sola función de DAX, que sea CALCULATE. Casi todas las medidas útiles de un informe de negocio la usan: ventas de una ciudad, porcentaje del total, ventas del año anterior, crecimiento. Entenderla bien es lo que separa un informe que solo suma de uno que responde preguntas.
Qué hace CALCULATE, en una frase
CALCULATE evalúa una expresión después de cambiar los filtros. Toma una medida, por ejemplo tus ventas, y la calcula como si el usuario hubiera aplicado (o quitado) ciertos filtros en el informe.
CALCULATE ( <expresión>, <filtro1>, <filtro2>, … )
Antes de empezar. Los ejemplos usan una tabla Ventas con las columnas Fecha, Producto, Ciudad, Canal e Importe, y una medida base. En DAX los nombres de las funciones van siempre en inglés y, por defecto, los argumentos se separan con coma.
Ventas = SUM ( Ventas[Importe] )
Ejemplo 1: ventas de una sola ciudad
Ventas Guayaquil =
CALCULATE ( [Ventas], Ventas[Ciudad] = "Guayaquil" )
Pon esta medida en una tabla junto a la columna Producto. Para cada producto verás solo lo vendido en Guayaquil, aunque el informe muestre todas las ciudades. CALCULATE reemplazó el filtro de Ciudad por el que le diste.
Ese detalle es importante: si el usuario selecciona “Quito” en una segmentación, esta medida seguirá mostrando Guayaquil, porque el filtro de CALCULATE sobre la misma columna sobrescribe el del informe. Si quieres que respete la selección del usuario, usa KEEPFILTERS:
Ventas Guayaquil (respeta filtros) =
CALCULATE ( [Ventas], KEEPFILTERS ( Ventas[Ciudad] = "Guayaquil" ) )
Con KEEPFILTERS, si el usuario elige Quito, la medida queda en blanco, porque ninguna venta es de Quito y de Guayaquil al mismo tiempo.
Ejemplo 2: dos condiciones a la vez
Cada filtro que agregas se combina con los demás como un “Y”:
Ventas Online Manta =
CALCULATE (
[Ventas],
Ventas[Ciudad] = "Manta",
Ventas[Canal] = "Online"
)
¿Y si necesitas un “O” dentro de la misma columna? Usa || o el operador IN:
Ventas Costa =
CALCULATE ( [Ventas], Ventas[Ciudad] IN { "Manta", "Guayaquil", "Portoviejo" } )
Ejemplo 3: porcentaje del total
Este es uno de los cálculos más pedidos en cualquier reporte: ¿qué porcentaje de las ventas representa cada producto? Necesitas dos números: las ventas del producto (lo que ya da la medida base) y las ventas de todos los productos. Para lo segundo, quitas el filtro de Producto con ALL:
Ventas Todos los Productos =
CALCULATE ( [Ventas], ALL ( Ventas[Producto] ) )
% del Total =
DIVIDE ( [Ventas], [Ventas Todos los Productos] )
Da formato de porcentaje a % del Total y ponla en una tabla por producto. Como ALL solo quita el filtro de Producto, si el usuario filtra por Ciudad, el porcentaje se calcula dentro de esa ciudad. Eso suele ser justo lo que quieres.
Usa DIVIDE en lugar del operador /: si el denominador es cero o está en blanco, DIVIDE devuelve un blanco en vez de un error.
Ejemplo 4: ventas del año anterior
CALCULATE también acepta funciones que generan filtros, como las de inteligencia de tiempo. Para que funcionen necesitas una tabla de fechas (la llamaremos Calendario) relacionada con tu tabla de ventas y marcada como tabla de fechas.
Ventas Año Anterior =
CALCULATE ( [Ventas], SAMEPERIODLASTYEAR ( Calendario[Fecha] ) )
Crecimiento % =
DIVIDE ( [Ventas] - [Ventas Año Anterior], [Ventas Año Anterior] )
En un gráfico por mes, cada columna de octubre 2026 se comparará con octubre 2025. Veremos la tabla calendario paso a paso en otro artículo.
Cómo piensa CALCULATE por dentro
Cuando Power BI calcula una celda de un gráfico, hay filtros activos: la fila de la tabla, la segmentación que eligió el usuario, el filtro de la página. A eso se le llama contexto de filtro. CALCULATE sigue tres pasos:
- Toma el contexto de filtro actual.
- Aplica los filtros que le diste: agrega los nuevos y, si alguno es sobre una columna que ya estaba filtrada, lo reemplaza.
- Calcula la expresión con ese contexto modificado.
Si entiendes este orden, puedes predecir el resultado de casi cualquier medida antes de ponerla en el informe.
La transición de contexto, explicada sin dolor
Hay un comportamiento de CALCULATE que confunde a todos al principio. Si la usas dentro de una columna calculada o de un iterador (como SUMX), convierte la fila actual en un filtro. Por ejemplo, en una tabla Clientes, esta columna calculada:
Compras del Cliente = CALCULATE ( SUM ( Ventas[Importe] ) )
devuelve lo que compró cada cliente, gracias a la relación entre Clientes y Ventas. Sin CALCULATE, SUM ( Ventas[Importe] ) devolvería el total de todas las ventas en cada fila. Por eso, cuando dentro de una fila uses una medida (que siempre lleva un CALCULATE implícito), el resultado respeta esa fila.
Errores comunes
- “La medida da el mismo número en todas las filas”: probablemente usaste ALL sobre toda la tabla (
ALL ( Ventas )) cuando querías quitar solo una columna. - “La segmentación no hace nada”: tu filtro en CALCULATE está sobrescribiendo la misma columna. Usa KEEPFILTERS si quieres respetar la selección.
- “Inteligencia de tiempo da blancos”: falta la tabla de fechas, la relación o marcarla como tabla de fechas.
- Usar una medida como filtro directo:
CALCULATE ( [Ventas], [Margen] > 0.3 )no es válido. Para filtrar por el resultado de una medida, usa FILTER sobre una tabla, por ejemploFILTER ( VALUES ( Ventas[Producto] ), [Margen] > 0.3 ).
Para practicar
Con tu propio modelo, intenta crear estas tres medidas:
- Ventas solo del canal “Tienda física”.
- Porcentaje que representa cada ciudad sobre el total.
- Ventas del año anterior y el crecimiento porcentual.
Si las tres te dan resultados que tienen sentido, ya dominas lo esencial de CALCULATE. En los próximos artículos de DAX veremos la diferencia entre medidas y columnas calculadas, y cómo funcionan los iteradores.
