CALCULATE no es una función avanzada. Es la que te deja cambiar los filtros de un cálculo. Si entiendes la pregunta, entiendes la función.
DAX no es magia: es una forma de traducir preguntas de negocio a cálculos. Las funciones que más se usan en modelos reales no son las más complejas, sino las que responden a preguntas que surgen cada vez que un responsable de área mira un dashboard y dice «¿y si quiero ver esto sin ese filtro?» o «¿cómo comparo este mes con el total del año?».
Este artículo explica cinco funciones desde la pregunta del usuario, no desde la sintaxis. Si ya tienes un modelo publicado y quieres sacarle más partido sin depender de un consultor cada vez que surge un cálculo nuevo, estas funciones te hacen más autónomo.
Imagina que el director general mira el dashboard filtrado por la región Norte y pregunta: «¿Y cuánto representa esto sobre el total de la empresa?». Quitar el filtro en la tabla dinámica te da el total, pero ya no ves los dos números a la vez. Con DAX puedes mostrar en la misma tabla las ventas de la región seleccionada y el total sin filtro de región.
CALCULATE evalúa un cálculo después de modificar los filtros activos: puedes añadir una condición, sustituir una existente o quitarla. Para quitar un filtro se usa dentro de CALCULATE una función como REMOVEFILTERS (o ALL).
Ejemplo: Ventas total empresa = CALCULATE ( [Ventas], REMOVEFILTERS ( Region ) )
La estructura es siempre la misma: qué quieres calcular y qué filtros quieres cambiar o quitar.
Supón que quieres sumar las ventas solo de los clientes activos, aunque el usuario no haya seleccionado nada en el filtro de estado. FILTER devuelve una tabla con las filas que cumplen la condición, y CALCULATE calcula sobre ese subconjunto.
Para una condición simple, un filtro directo dentro de CALCULATE (por ejemplo, Clientes[Estado] = «Activo») es más sencillo y suele rendir mejor. FILTER lo reservas para condiciones más complejas, como comparar contra otra medida o combinar varias columnas.
Ejemplo típico: en cada cierre de mes necesitas el importe pendiente solo de las facturas vencidas. Escribes la condición una vez dentro de la medida y el usuario no tiene que acordarse de filtrar.
ALL resuelve «quiero comparar este valor con el total, sin que el filtro actual afecte al denominador». Es la base para calcular porcentajes sobre el total.
Imagina un gráfico de barras con las ventas por producto y una columna con el peso de cada producto sobre el total. Si divides entre una medida normal de ventas, el filtro de producto también afecta al denominador y el porcentaje sale 100% en todas las filas. ALL quita ese filtro del denominador.
También sirve para comparaciones con el total del año: quieres ver las ventas del mes seleccionado y, al lado, las del año completo. ALL quita el filtro de mes de la medida del total.
Dentro de CALCULATE, REMOVEFILTERS hace lo mismo y se lee mejor. ALL puede aplicarse a una columna, a varias o a una tabla entera: cuanto más específico seas, más control tienes.
RELATED trae un valor de otra tabla siguiendo la relación que ya existe en el modelo.
Piensa en una tabla de ventas y otra de productos. En productos tienes el margen objetivo de cada referencia y quieres saber si cada línea de ventas lo cumple. RELATED trae el margen objetivo a cada fila de ventas.
Solo funciona si las tablas están relacionadas y si vas en la dirección correcta: de la tabla de muchos (ventas) a la de uno (productos). En sentido contrario existe RELATEDTABLE.
Necesita un contexto de fila: se usa en columnas calculadas y dentro de funciones iteradoras como SUMX.
En Excel lo harías con una columna auxiliar (cantidad por precio) y después sumarías esa columna. En DAX lo haces con SUMX en una sola medida, sin añadir columnas al modelo.
Ejemplo: Importe = SUMX ( Ventas, Ventas[Cantidad] * Ventas[Precio] )
La X indica que es una función iteradora: recorre la tabla fila a fila, aplica una expresión en cada una y después agrega el resultado. Hay toda una familia: AVERAGEX, COUNTX, MINX, MAXX.
Se usa también en cálculos como promedios ponderados. La estructura es siempre la misma: qué tabla recorres y qué expresión aplicas en cada fila.
Estas cinco funciones cubren buena parte de los cálculos que surgen en un modelo real. No necesitas dominar todo DAX: necesitas reconocer la pregunta de negocio y saber qué función la responde.
Mi regla: escribe primero la pregunta en español y después elige la función que la responde. El resto es sintaxis, y se aprende con ejemplos.
El próximo paso: abre tu modelo, identifica un cálculo que hoy no sabes resolver y pregúntate cuál de estas funciones encaja.
¿Qué te ha parecido? Comparte tu experiencia o cuéntanos qué proceso repetitivo te gustaría automatizar. Estaré encantado de leer tu comentario.