
Medidas, contexto de evaluación y el motor de CALCULATE
2 horas · 2 bloques de 45 min · nivel intermedio–avanzado
Fundamentos de DAX
CALCULATE
Trabajamos sobre el modelo en estrella de la Sesión 3.
Al terminar la sesión vas a poder…
Crear medidas con la sintaxis correcta y distinguirlas de columnas calculadas.
Razonar el contexto de fila y de filtro: por qué un número sale como sale.
Usar CALCULATE para modificar filtros y construir indicadores de negocio.
DAX no se trata de memorizar funciones, sino de entender el contexto. Si entiendes cómo se filtra y evalúa una medida, el 80% de DAX se vuelve lógico.
[Monto USD]El modelo está listo para medir. Hoy escribimos los KPI que el negocio necesita.
Un buen modelo hace que el DAX sea simple: vamos a comprobarlo.
Medidas, columnas y contexto de evaluación
Data Analysis Expressions: el lenguaje de fórmulas de Power BI.
SUM, AVERAGE, IF…Pensar "en columnas y contexto", no "en celdas", es el cambio de chip clave.
Total Monto USD = SUM( Ventas[Monto USD (calc)] )
// nombre = función( Tabla[Columna] )
Nombre de la medida, signo igual, función, y referencia Tabla[Columna].
| Columna calculada | Medida | |
|---|---|---|
| Se calcula | Al cargar/refrescar (fila por fila) | Al vuelo, según el visual |
| Se guarda | Sí, ocupa espacio en el modelo | No, solo la fórmula |
| Contexto | De fila | De filtro |
| Úsala para | Categorizar, claves, agrupar | Sumar, promediar, KPIs |
Regla práctica: si vas a sumar/agregar, casi siempre es una MEDIDA, no una columna.
Útil cuando necesitas un valor por fila para filtrar, agrupar o relacionar.
// Rango de precio por línea
Rango Precio =
IF(Ventas[Precio USD x Kg] >= 5, "Alto",
IF(Ventas[Precio USD x Kg] >= 2, "Medio", "Bajo"))
Recuerda: muchas de estas conviene hacerlas en Power Query (Sesión 1).
Una medida se recalcula según el contexto de cada celda del visual.
Total Cajas = SUM(Ventas[Cajas])
El contexto de fila es "la fila actual". Existe en columnas calculadas y en iteradores (SUMX).
Ventas[Kg] = Ventas[Cajas] * 8.2 usa la fila actual.
El contexto de filtro es el conjunto de filtros activos en cada celda del visual: la fila/columna de la matriz, los slicers, los filtros de página.
[Total Monto USD] en una fila "Uva" suma solo Uva.Misma medida, distinto número según dónde la pongas.
Arrastras un campo numérico y Power BI lo suma solo.
Tú la defines con DAX y la nombras.
Buenas práctica: crea medidas explícitas y oculta las columnas numéricas del hecho.
El kit básico que resuelve el 70% de los casos.
Total Monto USD = SUM(Ventas[Monto USD (calc)])
Total Kg = SUM(Ventas[Kg Netos])
N Pedidos = DISTINCTCOUNT(Ventas[N Orden])
Precio Prom USD/Kg = DIVIDE([Total Monto USD], [Total Kg])
Cajas Promedio = AVERAGE(Ventas[Cajas])
Usa DIVIDE en lugar de /: maneja la división entre cero sin error.
La función más poderosa de DAX
Evalúa una expresión modificando el contexto de filtro.
CALCULATE( <expresión> , <filtro1> , <filtro2> , … )
// Monto solo de Estados Unidos
Monto USA =
CALCULATE( [Total Monto USD], Clientes[Pais] = "Estados Unidos" )
CALCULATE toma [Total Monto USD] y le aplica/cambia filtros antes de evaluarlo. Es la base de casi todo el DAX avanzado.
// Filtra por producto
Monto Uva = CALCULATE([Total Monto USD], Productos[Producto] = "Uva")
// Varios valores
Monto Berries+Uva =
CALCULATE([Total Monto USD],
Productos[Producto] IN {"Uva", "Arandanos"})
// Combinando condiciones
Monto Uva Premium =
CALCULATE([Total Monto USD],
Productos[Producto] = "Uva",
Ventas[Precio USD x Kg] >= 4)
Cuando el filtro es una condición compleja o sobre una medida, usa FILTER sobre la tabla.
Monto Pedidos Grandes =
CALCULATE(
[Total Monto USD],
FILTER(
Ventas,
Ventas[Cajas] > 1500
)
)
Quitar el contexto de filtro permite calcular totales y participaciones.
// Monto total ignorando filtros de producto
Monto Total Productos =
CALCULATE([Total Monto USD], ALL(Productos))
// % de participación de cada producto
% Participación =
DIVIDE(
[Total Monto USD],
CALCULATE([Total Monto USD], REMOVEFILTERS(Productos))
)
ALL y REMOVEFILTERS hacen lo mismo aquí: borran filtros para tener el "denominador".
Las variables hacen el DAX legible y eficiente (se evalúan una sola vez).
Margen % =
VAR Monto = [Total Monto USD]
VAR Meta = SUM(Metas[Meta Monto USD])
RETURN
DIVIDE(Monto - Meta, Meta)
Total Monto USD = SUM(Ventas[Monto USD (calc)])
Total Cajas = SUM(Ventas[Cajas])
Total Kg = SUM(Ventas[Kg Netos])
N Pedidos = DISTINCTCOUNT(Ventas[N Orden])
Precio Prom USD/Kg = DIVIDE([Total Monto USD], [Total Kg])
Ticket Promedio = DIVIDE([Total Monto USD], [N Pedidos])
% Part. Producto =
DIVIDE([Total Monto USD],
CALCULATE([Total Monto USD], REMOVEFILTERS(Productos)))
Con estas 7 medidas ya armas un dashboard de ventas completo.
/ (usa DIVIDE)VAR para legibilidadDIVIDE.CALCULATE.REMOVEFILTERS.FILTER.DIVIDEFILTER para condiciones complejasALL/REMOVEFILTERS para % del totalVAR/RETURN para claridad🎯 Si te llevas una sola idea: entiende el contexto de filtro y domina CALCULATE; lo demás es vocabulario.
Verifiquemos lo aprendido en esta sesión
¿Cuándo usas una columna calculada y cuándo una medida?
¿Qué diferencia hay entre contexto de fila y contexto de filtro?
¿Qué hace exactamente CALCULATE con el contexto de filtro?
¿Por qué conviene DIVIDE en vez del operador /?
¿Cómo calcularías el % de participación de un producto sobre el total?
Gracias al equipo de SunFruits por su tiempo y participación
Arquitecto de Inteligencia de Negocios & Cloud · Instructor
🌐 blog.arquitecturabi.pe
Nos vemos en la Sesión 5 — DirectQuery, modelos compuestos y optimización en origen