PL-300: cómo dominar medidas DAX y agregaciones
Te voy a enseñar la competencia de crear medidas DAX y a usar agregaciones en Power BI — una habilidad central en Modelar los datos (PL-300). Medidas bien definidas y agregaciones correctas son cruciales para informes precisos, rendimiento y análisis dinámico en los dashboards. Esta competencia no es solo sintaxis: implica pensar en el contexto, rendimiento y validación con datos reales.
Lo que necesitas saber
Las medidas son cálculos dinámicos en DAX que devuelven un único valor por contexto de filtro. A diferencia de las columnas calculadas, las medidas se evalúan cuando renderizas una visualización, por lo que se adaptan al contexto (filtros, segmentaciones, filas/columnas de matrices). Agrupar y agregar datos (SUM, AVERAGE, COUNT, DISTINCTCOUNT) forma parte del trabajo de las medidas.
Piénsalas como funciones que responden al entorno del informe: si aplicas un slicer de año, la misma medida se ajusta; si colocas la medida en una matriz por producto, calcula por producto. En datasets con 100k–5M de filas, usar medidas en lugar de columnas calculadas reduce el espacio en disco y mejora la velocidad de refresh y de consulta. Ejemplos típicos: ingresos totales, margen medio ponderado, porcentaje del total y comparaciones año a año.
Ejemplo práctico: tienes una tabla Sales con columnas Quantity y Price. Si necesitas el ingreso total, no crees una columna fija para cada fila (aunque puedas), lo ideal es crear una medida:
Revenue = SUMX(Sales, Sales[Quantity] * Sales[Price])
Esta medida responde automáticamente a filtros de fecha, región o producto y, en pruebas con 1M de filas, devuelve resultados en menos de un segundo en una máquina con memoria suficiente (VertiPaq). Para escenarios con descuentos por línea puedes extender la expresión a Sales[Discount] o usar una tabla de precios separada y hacer lookup con RELATED/LOOKUPVALUE según el modelo.
Cómo funciona
Conceptualmente, las medidas operan sobre el contexto de filtro. Tres ideas esenciales:
- Contexto de filtro — conjunto de filtros aplicados (slicers, jerarquías, relaciones). Por ejemplo, si un usuario selecciona 2024 y Región Norte, la medida ve solo esas filas.
- Contexto de fila — cuando usas funciones iteradoras como SUMX, cada fila de la tabla iterada define el contexto para esa iteración; SUMX calculará la expresión para cada fila y luego sumará los resultados.
- Evaluación tardía — una medida se calcula cuando la visualización la solicita, no automáticamente para cada fila de la tabla, lo que permite cálculos dinámicos y menor uso de espacio.
Ejemplos prácticos de sintaxis (puedes pegar estos en Power BI Desktop):
Revenue = SUMX(Sales, Sales[Quantity] * Sales[Price])
Total Units = SUM(Sales[Quantity])
Average Price = AVERAGE(Sales[Price])
Unique Customers = DISTINCTCOUNT(Sales[CustomerID])
Revenue YoY =
VAR Current = [Revenue]
VAR Prior = CALCULATE([Revenue], DATEADD(Date[Date], -1, YEAR))
RETURN
DIVIDE(Current - Prior, Prior)
Nota: DATEADD exige una tabla de fechas continua. En modelos con 10 años de datos, estas funciones permiten comparar periodos con precisión.
En la práctica
Paso a paso para crear medidas eficaces:
- Entiende el requisito: ¿quieres total, media ponderada, recuento único, porcentaje del total, comparación temporal? Documenta el comportamiento esperado con ejemplos numéricos (p. ej.: "Cuota de categoría para enero = 23 450€").
- Elige la función correcta: SUM/AVERAGE/COUNT/DISTINCTCOUNT para agregaciones simples; SUMX para agregación con expresión por fila; CALCULATE para cambiar el contexto de filtro (por ejemplo, ignorar filtros o aplicar filtros adicionales).
- Usa VAR para claridad: guardar resultados intermedios hace la medida más legible y evita re-evaluaciones innecesarias — útil en medidas complejas con 4–6 pasos intermedios.
- Trata divisiones por cero: usa DIVIDE(x, y) en lugar de x / y para evitar errores cuando y = 0; DIVIDE permite también especificar un valor alternativo.
- Valida en el visual: añade la medida a tablas/matrices y valida con filtros para confirmar el comportamiento esperado; prueba con 5–10 escenarios (años, categorías, regiones).
Ejemplo: porcentaje del total por categoría
Category Revenue % =
DIVIDE(
[Revenue],
CALCULATE([Revenue], ALL(Products[Category]))
)
Esta medida calcula la cuota de ingresos de cada categoría en comparación con el total global, ignorando el filtro de categoría (gracias a ALL). Si el total global es 2 000 000€ y una categoría genera 250 000€, la medida devuelve 0.125 (12.5%).
Errores comunes
- Usar columnas calculadas cuando debes usar medidas — las columnas almacenan valores por fila; las medidas son dinámicas y más eficientes para agregaciones contextuales. En datasets con >1M de filas, columnas extra pueden aumentar el modelo en decenas de MB.
- Ignorar el contexto de filtro — las medidas pueden devolver resultados inesperados si no tienes en cuenta slicers, relaciones o ALL/REMOVEFILTERS. Prueba siempre con diferentes filtros y combinaciones.
- Funciones iteradoras sin necesidad — usar SUMX cuando un SUM bastaría puede penalizar el rendimiento; SUM se ejecuta más eficientemente en el motor VertiPaq.
- No usar VAR — repetir cálculos complejos hace que el motor re-evalúe la misma expresión varias veces, lo que puede degradar el rendimiento.
Cómo practicar
Practica en Power BI Desktop con el sample dataset (p. ej.: Contoso o Financials). Crea medidas para ingresos, márgenes, medias ponderadas y comparaciones temporales. Ejemplos concretos: calcula un margen bruto por producto, una media ponderada de precio por unidad vendida y un indicador de crecimiento trimestral. Para evaluación orientada al examen, usa el Practice Assessment OFICIAL y gratuito de Microsoft y consulta la study guide oficial — ambos son gratuitos y proporcionan orientaciones sobre las skills measured. No uses ni confíes en brain dumps; sigue siempre el material oficial para prepararte correctamente.
En resumen
- Las medidas DAX son cálculos dinámicos evaluados en el contexto de filtro; son esenciales para informes correctos.
- Usa SUMX para cálculos fila a fila, CALCULATE para cambiar contexto, VAR para legibilidad y DIVIDE para seguridad en divisiones.
- Prueba las medidas con diferentes filtros y visualizaciones para validar el comportamiento; documenta escenarios de prueba con ejemplos numéricos.
- Practica con datasets de ejemplo y consulta el Practice Assessment y la study guide oficiales de Microsoft.