Módulo 4 de 6

DAX: Data Analysis Expressions

El lenguaje de fórmulas que hace brillar a Power BI. Desde SUM básico hasta CALCULATE avanzado.

Lección 4.1 — Medidas vs Columnas Calculadas

DAX se usa para crear dos tipos de cálculos:

Medidas (Measures)

Se calculan en tiempo real según el contexto de filtro. Son dinámicas: su valor cambia dependiendo de los filtros aplicados.

Total Ventas = SUM( Ventas[Monto] )

Usá medidas para: totales, promedios, conteos, KPIs, comparaciones temporales.

Columnas Calculadas

Se calculan una sola vez al refrescar datos. Son estáticas: agregan una columna nueva fila por fila.

Margen = Ventas[Precio] - Ventas[Costo]

Usá columnas para: categorías, concatenaciones, cálculos fila por fila.

Regla de Oro

Siempre preferí medidas sobre columnas calculadas. Las medidas ocupan menos memoria y son más flexibles porque responden dinámicamente a los filtros del usuario.

Lección 4.2 — Contexto de Fila y Contexto de Filtro

Entender los contextos es la clave para dominar DAX. Sin esto, nunca vas a entender por qué tus fórmulas no dan el resultado esperado.

Contexto de Fila (Row Context)

Existe cuando DAX evalúa una fórmula fila por fila. Se activa en columnas calculadas y dentro de funciones iteradoras (SUMX, FILTER, AVERAGEX).

Contexto de Filtro (Filter Context)

Son los filtros activos que determinan qué filas de la tabla se consideran en el cálculo. Los genera:

  • Un segmentador (slicer) en la página
  • La posición en un gráfico (categoría del eje X)
  • Un filtro de página o de informe
  • La función CALCULATE (que modifica el contexto de filtro)
Lección 4.3 — CALCULATE: El Motor de DAX

CALCULATE es la función más importante de DAX. Modifica el contexto de filtro antes de evaluar una expresión.

-- Ventas solo de la categoría "Electrónica" Ventas Electrónica = CALCULATE( SUM( Ventas[Monto] ), Productos[Categoría] = "Electrónica" )
Funciones modificadoras del filtro
-- ALL: ignora todos los filtros de la tabla % del Total = DIVIDE( SUM( Ventas[Monto] ), CALCULATE( SUM( Ventas[Monto] ), ALL( Ventas ) ) ) -- FILTER: filtro más complejo (condicional) Ventas Altas = CALCULATE( SUM( Ventas[Monto] ), FILTER( Ventas, Ventas[Monto] > 1000 ) )
Lección 4.4 — Inteligencia de Tiempo (Time Intelligence)

DAX tiene funciones predefinidas para análisis temporal. Requieren una tabla de calendario marcada como tabla de fechas (lo que vimos en el Módulo 3).

-- Acumulado del año (Year-To-Date) Ventas YTD = TOTALYTD( SUM( Ventas[Monto] ), Calendario[Date] ) -- Mismo período del año anterior Ventas Año Anterior = CALCULATE( SUM( Ventas[Monto] ), SAMEPERIODLASTYEAR( Calendario[Date] ) ) -- Variación porcentual vs año anterior Variación % = DIVIDE( [Total Ventas] - [Ventas Año Anterior], [Ventas Año Anterior] ) -- Promedio móvil de 3 meses Media Móvil 3M = AVERAGEX( DATESINPERIOD( Calendario[Date], MAX(Calendario[Date]), -3, MONTH ), [Total Ventas] )
Ejercicio del Módulo 4
  1. Creá las siguientes medidas en tu modelo:
    • Total Ventas = SUM de Monto
    • Total Cantidad = SUM de Cantidad
    • Precio Promedio = AVERAGE de Precio
  2. Creá Ventas YTD usando TOTALYTD
  3. Creá Ventas Año Anterior con SAMEPERIODLASTYEAR
  4. Creá Variación % con DIVIDE
  5. Creá un % del Total General usando CALCULATE + ALL
  6. Poné todas estas medidas en un gráfico de líneas por mes y verificá los resultados