3.1 · CALCULATE, contexto de filtro y variables (VAR)

Nivel 3 · Análisis avanzado

3.1CALCULATE, contexto de filtro y variables (VAR)

Objetivo: Leer en voz alta el contexto de una celda de visual, escribir el «% del total» con CALCULATE + ALL + VAR, y diagnosticar un resultado DAX por su contexto.
Tiempo estimado: 25 min · lectura autónoma · Si solo tienes 5 min: lee «Lo esencial en 30s» + el esquema.

Lo esencial en 30 segundos

  • Cada celda de un visual tiene su propio contexto de filtro: la celda «París × Enero» de una matriz calcula [Total Ventas] filtrado por París Y enero, sin que usted haya escrito nada.
  • CALCULATE modifica ese contexto: añade un filtro, sobrescribe otro o lo retira con ALL — la clave de los «% del total».
  • VAR/RETURN estructuran toda fórmula que supere una línea: legibilidad, rendimiento y depuración más fáciles.

Mini-caso continuo — Zineb lee sus celdas en voz alta en Argel

Zineb, controladora de gestión en una pyme agroalimentaria de Argel, muestra una matriz Ciudad × Mes de su [Total Ventas] y se queda perpleja ante una celda que parece falsa. Aplica el método de la sección: en lugar de reescribir la medida, lee el contexto en voz alta —«esta celda = ventas filtradas por Lyon Y enero»— y comprende que cada celda tiene el suyo. Añade entonces Ventas Todas Ciudades = CALCULATE([Total Ventas], ALL(Ventas[Ciudad])): el mismo valor en todas partes, con el filtro de ciudad retirado. Después compone la cuota de cada ciudad con una variable: Cuota ciudad = VAR Total = CALCULATE([Total Ventas], ALL(Ventas[Ciudad])) RETURN DIVIDE([Total Ventas], Total). Lo prueba con un segmentador Comercial activo: la cuota se recalcula dentro del ámbito del segmentador — exactamente lo que quiere explicar a su dirección.

Caso autónomo de esta sección: reaparece en el curso, el esquema, el guion y el reto de 48 h de la sección 3.1.

1. El contexto de filtro

He aquí el capítulo que separa al usuario del practicante de DAX. Todo cálculo se evalúa en un contexto de filtro: la celda «París × Enero» de una matriz calcula [Total Ventas] filtrado por París Y enero — sin que usted haya escrito nada. Cada celda de un visual tiene el suyo: ejes, leyendas, segmentadores y filtros se suman allí.

2. CALCULATE, ALL y VAR

CALCULATE MODIFICA ese contexto: añade un filtro, sobrescribe otro (la cuota del total) o lo retira con ALL. ALL(Ventas[Ciudad]) ignora el filtro de ciudad y da el total general — es la clave del cálculo más solicitado: el «% del total».

3. Estructurar y diagnosticar

Se envuelve todo en variables VAR/RETURN: el total global se calcula una vez, la fórmula se lee de un tirón y la depuración se vuelve sencilla. El reflejo de diagnóstico cabe en una frase: un resultado DAX «raro» es casi siempre un contexto mal comprendido — Zineb lo lee en voz alta antes de tocar la fórmula.

Error frecuente de interpretación: «El DAX son fórmulas para recitar; un resultado falso esconde una falta de sintaxis, y el contexto no cambia nada». No, triple error. Un resultado DAX «raro» es casi siempre un contexto de filtro mal comprendido: se lee en voz alta antes que nada. CALCULATE no calcula «más»: cambia el contexto — añade, sobrescribe o retira (con ALL) un filtro. Y toda fórmula que supere una línea se estructura con VAR/RETURN, o si no se vuelve ilegible y repite sus cálculos.
Modificar el contexto de filtro Leer el contexto, modificarlo con CALCULATE, reducirlo con ALL — y estructurarlo con VAR. Contexto de filtroLo que filtra la celda (que hay que leer)+CALCULATEAñade / sobrescribe un filtro+ALLRetira filtros (% del total) VAR/RETURN en cuanto una fórmula supere una línea.
Leer el contexto, modificarlo con CALCULATE, reducirlo con ALL — y estructurarlo con VAR.
Versión en texto del esquema (SEO / lectores de pantalla / traducción): 1) Zineb, controladora de gestión en Argel, lee el contexto: la celda «Lyon × Enero» de su matriz = [Total Ventas] filtrado por Lyon Y enero, sin que ella haya escrito nada. 2) Lo modifica: CALCULATE([Total Ventas], ALL(Ventas[Ciudad])) retira el filtro de ciudad y devuelve el total de todas las ciudades; ensamblado en una variable, da la cuota de cada ciudad sobre el total. 3) Lo estructura con VAR/RETURN — total global calculado una vez, fórmula legible, diagnóstico por el contexto. Lección: un resultado raro empieza siempre por un contexto mal comprendido que se lee en voz alta.

🔎 Ejemplo concreto — 🔎 Ejemplo concreto — El % del total

El cálculo más solicitado, en fórmulas cortas y legibles:

Ventas Todas Ciudades = CALCULATE([Total Ventas], ALL(Ventas[Ciudad]))

Cuota ciudad =
VAR Total = CALCULATE([Total Ventas], ALL(Ventas[Ciudad]))
RETURN DIVIDE([Total Ventas], Total)   // formateada en %

Lectura: ALL(Ventas[Ciudad]) retira el filtro de ciudad: la medida muestra el mismo valor en cada fila — el total de todas las ciudades.

Lección: DIVIDE([Total Ventas], Total) da la cuota de cada ciudad, recalculada dentro del ámbito de los segmentadores activos.

Vocabulario de la sección

Contexto de filtro
El conjunto de filtros activos sobre una celda de visual (ejes, leyendas, segmentadores, filtros): cada celda tiene el suyo.

Ejemplo sencillo: Zineb enuncia: «la celda Lyon × Enero = ventas filtradas por Lyon y enero».

Lo que no es: un cálculo único válido para todo el visual.

Reflejo: resultado raro → leer el contexto en voz alta.

CALCULATE
Evalúa una expresión en un contexto modificado: añade o sobrescribe un filtro.

Ejemplo sencillo: Zineb fuerza un filtro sobre una ciudad gracias a CALCULATE para aislar su resultado.

Lo que no es: una medida que sufre el contexto sin modificarlo.

Reflejo: modificar un filtro → CALCULATE.

ALL
Retira filtros: ALL(Ventas[Ciudad]) ignora el filtro de ciudad — la clave de los «% del total».

Ejemplo sencillo: Zineb calcula las ventas de todas las ciudades para comparar cada ciudad con el total.

Lo que no es: un filtro que permanece activo y falsea la cuota.

Reflejo: % del total → ALL sobre la columna.

VAR / RETURN
Las variables DAX: se nombra un cálculo intermedio una vez y luego se devuelve con RETURN.

Ejemplo sencillo: Zineb escribe VAR Total = ... RETURN DIVIDE([Total Ventas], Total).

Lo que no es: un mismo cálculo repetido tres veces en una fórmula.

Reflejo: más de una línea → VAR/RETURN.

Transición de contexto
El mecanismo avanzado por el cual CALCULATE transforma un contexto de fila en contexto de filtro.

Ejemplo sencillo: Zineb sabe nombrarlo y cuenta con profundizarlo con la referencia SQLBI.

Lo que no es: el simple contexto de filtro de una celda de visual.

Reflejo: conocerlo de nombre, profundizarlo más adelante.

En la práctica — En la práctica — El «% del total» diseccionado

  1. Cree una matriz Ciudad × [Total Ventas] y LEA cada celda enunciando su contexto: «esta celda = ventas filtradas por Lyon», como Zineb.
  2. Escriba Ventas Todas Ciudades = CALCULATE([Total Ventas], ALL(Ventas[Ciudad])) y añádala a la matriz: el mismo valor en todas partes (el filtro de ciudad queda retirado).
  3. Compóngala con variables: Cuota ciudad = VAR Total = CALCULATE([Total Ventas], ALL(Ventas[Ciudad])) RETURN DIVIDE([Total Ventas], Total), y luego formatéela en %.
  4. Pruébela con un segmentador Comercial activo: la cuota se recalcula DENTRO del ámbito del segmentador — relea la fórmula hasta poder explicar por qué.
El trío contexto + CALCULATE/ALL + VAR dominado sobre el cálculo más solicitado: el % del total.

Guion paso a paso — leer un contexto como Zineb (8 min)

1) Muestre [Total Ventas] en matriz, Ciudad en filas y Mes en columnas. 2) Haga clic en una celda y pronuncie su contexto: el cruce de los dos filtros activos. 3) Cree Ventas Todas Ciudades = CALCULATE([Total Ventas], ALL(Ventas[Ciudad])): compruebe que el valor es idéntico en todas las filas. 4) Cree Cuota ciudad con VAR/RETURN: VAR Total = CALCULATE([Total Ventas], ALL(Ventas[Ciudad])) RETURN DIVIDE([Total Ventas], Total), formateada en %. 5) Aplique un segmentador Comercial: observe la cuota recalcularse dentro del ámbito, y explíquelo en voz alta.

Si un total parece falso, vuelva al punto 2: en nueve de cada diez casos, es el contexto el que explica el resultado.

Plantilla copiar-pegar — mis medidas de contexto

Ventas Todas Ciudades = CALCULATE([Total Ventas], ALL(Ventas[Ciudad]))

Cuota ciudad =
VAR Total = CALCULATE([Total Ventas], ALL(Ventas[Ciudad]))
RETURN DIVIDE([Total Ventas], Total)   // %

Regla: leer el contexto → modificarlo (CALCULATE/ALL) → estructurar (VAR/RETURN).

Cuota del total

Zineb muestra la cuota de cada ciudad en las ventas globales: el combo CALCULATE + ALL + VAR, formateado en %.

Total de todas las ciudades

Zineb aísla el gran total con ALL(Ventas[Ciudad]): el mismo valor repetido en cada fila, una referencia constante.

Diagnóstico de una celda

Un resultado dudoso: Zineb lee el contexto en voz alta antes de tocar la medida — el error suele estar ahí.

Fórmula legible

Una medida de cinco líneas se vuelve clara gracias a VAR: el cálculo nombrado una vez, RETURN al final.

✓ Buenas prácticas

  • Leer el contexto de una celda en voz alta para comprender un resultado.
  • Usar VAR/RETURN sistemáticamente en cuanto una fórmula supere una línea.
  • Comenzar todo diagnóstico por el contexto de filtro.

✗ Errores frecuentes

  • Escribir CALCULATE anidados ilegibles sin variables.
  • Confundir ALL (retira todo) con ALLSELECTED (respeta los segmentadores).
  • Buscar un error en otro sitio que en el contexto.

Puntos clave

  • Cada celda de visual tiene su contexto de filtro: léalo en voz alta para comprender un resultado.
  • CALCULATE añade/sobrescribe filtros; ALL los retira: los dos gestos cubren lo esencial de las necesidades.
  • VAR/RETURN sistemáticos en cuanto una fórmula supere una línea: legibilidad Y rendimiento.
  • Un resultado DAX «raro» = un contexto mal comprendido: el diagnóstico empieza siempre ahí.

Reto de 48 h — aplíquelo mañana

Reproduzca la matriz de Zineb: [Total Ventas] por Ciudad, y luego añada CALCULATE([Total Ventas], ALL(Ventas[Ciudad])) y la medida Cuota ciudad construida con VAR/RETURN. Escriba en una frase por qué la cuota se recalcula cuando se aplica un segmentador.

Lista de salida de la sección
  • Sé leer el contexto de filtro de una celda de visual.
  • Sé escribir el % del total con CALCULATE + ALL + VAR.
  • Diagnostico un resultado DAX partiendo del contexto.
Autoevaluación 1-5: ¿explico el contexto de filtro sin jerga?Autoevaluación 1-5: ¿he construido el % del total con VAR/RETURN?

Preguntas frecuentes

¿ALL, ALLSELECTED, ALLEXCEPT: cómo orientarse?

ALL retira todo filtro sobre el destino (el gran total); ALLSELECTED respeta las selecciones externas, como los segmentadores; ALLEXCEPT retira todo salvo las columnas citadas. Empiece por ALL, pase a ALLSELECTED cuando el % deba seguir a los segmentadores, y guarde ALLEXCEPT para más adelante — los casos finos se aclaran con la práctica y la referencia SQLBI.

¿Por qué mi medida es correcta en el detalle pero falsa en la fila Total?

Porque la fila Total tiene un contexto más amplio: no hay ningún filtro de ciudad activo ahí. Una medida mal construida se degrada allí — el caso clásico es la media de ratios. La solución habitual es recalcular por iteración con SUMX en lugar de promediar un resultado ya agregado. Reflejo: correcto en el detalle, falso en el total → sospeche de un ratio mal colocado.

Comprueba tu comprensión

¿Para qué sirve ALL en CALCULATE?

Recursos adicionales (opcional, para ir más allá)

Examen del nivel 3Preguntas inéditas y más difíciles para validar tus conocimientos