CALCULATE en DAX: el motor de todas las medidas avanzadas
CALCULATE está considerada la función más potente y fundamental de DAX. Prácticamente todas las medidas no triviales dependen de ella. Su función es simple pero su impacto es profundo: evaluar una expresión en un contexto de filtro modificado.
Sintaxis
CALCULATE(
<Expresión>,
<Filtro1>,
<Filtro2>,
...
)
Ejemplo básico
Ventas Lisboa = CALCULATE(
SUM(fVentas[Ingresos]),
dRegion[Ciudad] = "Lisboa"
)
Aunque el informe esté filtrado por otra ciudad, esta medida siempre muestra las ventas de Lisboa.
CALCULATE con REMOVEFILTERS
% del Total = DIVIDE(
SUM(fVentas[Ingresos]),
CALCULATE(SUM(fVentas[Ingresos]), REMOVEFILTERS(dRegion))
)
REMOVEFILTERS elimina el filtro de la dimensión de región, permitiendo calcular el porcentaje sobre el total independientemente del filtro aplicado en el visual.
CALCULATE con ALL, ALLEXCEPT, ALLSELECTED
ALL(tabla)— elimina todos los filtros de la tabla.ALLEXCEPT(tabla, columna)— elimina todos los filtros excepto el de la columna especificada.ALLSELECTED()— elimina filtros internos pero preserva los del usuario (slicers/cross-filter).
CALCULATE y context transition
Cuando se llama a CALCULATE dentro de un iterador (como SUMX), convierte el contexto de fila en contexto de filtro — cada fila de la iteración filtra la tabla antes de evaluar la expresión.
Conclusión
CALCULATE no es solo una función — es el mecanismo por el cual DAX manipula el contexto de evaluación. Dominarla abre la puerta a medidas de time intelligence, análisis comparativos, rankings dinámicos y mucho más.