Inicio / Power BI / Power BI: Dashboards e Informes Profesionales / Fundamentos de DAX

Fundamentos de DAX

Aprende DAX: SUM, CALCULATE, contexto de filtro vs fila, funciones lógicas, variables y DIVIDE.

Intermedio
🔒 Solo lectura
📖

Estás en modo lectura

Puedes leer toda la lección, pero para marcar progreso, hacer ejercicios y ganar XP necesitas una cuenta Pro.

Desbloquear por $9/mes

Fundamentos de DAX

DAX (Data Analysis Expressions) es el lenguaje de fórmulas de Power BI. Con DAX creas medidas, columnas calculadas y tablas calculadas que potencian tus análisis.

¿Qué es DAX?

DAX es un lenguaje funcional diseñado para trabajar con modelos de datos tabulares. Se parece a las fórmulas de Excel pero opera sobre tablas y relaciones, no sobre celdas individuales.

// Esto NO es DAX:
=A1+B1

// Esto SÍ es DAX:
Total Ventas = SUM(Ventas[Monto])

Medidas vs Columnas Calculadas

Concepto Cuándo se calcula Almacenamiento Uso principal
Medida En tiempo de consulta No ocupa espacio KPIs, totales, promedios
Columna calculada Al refrescar datos Ocupa espacio en RAM Categorías, flags, texto

Regla general: si el valor depende del contexto de filtro (el usuario filtra por año, producto, etc.), usa una medida. Si es un atributo fijo por fila, usa una columna calculada.

Funciones de agregación básicas

Total Ventas = SUM(Ventas[Monto])
Cantidad Total = COUNT(Ventas[ID])
Cantidad Productos = DISTINCTCOUNT(Ventas[ProductoID])
Promedio Venta = AVERAGE(Ventas[Monto])
Venta Máxima = MAX(Ventas[Monto])
Venta Mínima = MIN(Ventas[Monto])

CALCULATE: la función más importante

CALCULATE evalúa una expresión en un contexto de filtro modificado. Es la función más poderosa e importante de DAX.

// Ventas totales (respeta los filtros del reporte)
Total Ventas = SUM(Ventas[Monto])

// Ventas solo de 2025 (ignora el filtro de año del reporte)
Ventas 2025 = 
CALCULATE(
    SUM(Ventas[Monto]),
    Calendario[Año] = 2025
)

// Ventas de la categoría "Electrónica" sin importar qué filtre el usuario
Ventas Electrónica = 
CALCULATE(
    SUM(Ventas[Monto]),
    Productos[Categoría] = "Electrónica"
)

Contexto de evaluación

Contexto de fila (Row Context)

Existe en columnas calculadas e iteradores. Evalúa fila por fila.

// Columna calculada: cada fila tiene su propio contexto
Ganancia = Ventas[Precio] - Ventas[Costo]

Contexto de filtro (Filter Context)

Es el conjunto de filtros activos en un momento dado. Viene de:

  • Filtros del reporte.
  • Slicers (segmentadores).
  • Filtros de visualización.
  • La función CALCULATE.
// Si el usuario filtra por "México" y "2025",
// esta medida solo suma las ventas de México en 2025
Total Ventas = SUM(Ventas[Monto])

Funciones lógicas

// IF
Estado = IF(Ventas[Monto] > 10000, "Alto", "Normal")

// SWITCH (mejor que IF anidados)
Categoría Monto = 
SWITCH(TRUE(),
    Ventas[Monto] >= 50000, "Premium",
    Ventas[Monto] >= 10000, "Alto",
    Ventas[Monto] >= 5000, "Medio",
    "Bajo"
)

// AND, OR
EsVentaGrande = AND(Ventas[Monto] > 10000, Ventas[Cantidad] > 50)

Funciones de texto

Nombre Completo = Clientes[Nombre] & " " & Clientes[Apellido]
Código = LEFT(Productos[SKU], 3)
Categoría Limpia = TRIM(UPPER(Productos[Categoría]))

Funciones de fecha

Antiguedad Días = DATEDIFF(Clientes[FechaRegistro], TODAY(), DAY)
Mes Actual = FORMAT(TODAY(), "MMMM YYYY")

Variables (VAR)

Las variables hacen tu código más legible y eficiente:

Margen % = 
VAR Ingresos = SUM(Ventas[Monto])
VAR Costos = SUM(Ventas[Costo])
VAR Ganancia = Ingresos - Costos
RETURN
    DIVIDE(Ganancia, Ingresos, 0)

VAR se evalúa una sola vez — si usas el mismo cálculo varias veces, ponlo en una variable.

DIVIDE vs el operador /

// ❌ Puede dar error de división por cero
Margen = (Ventas - Costo) / Ventas

// ✅ Maneja la división por cero limpiamente
Margen = DIVIDE(Ventas - Costo, Ventas, 0)

DIVIDE acepta un tercer argumento como valor por defecto cuando el denominador es 0 o BLANK.

Resumen

DAX es el lenguaje de fórmulas de Power BI. Las medidas se evalúan dinámicamente según el contexto de filtro, mientras las columnas calculadas se evalúan fila por fila. CALCULATE modifica el contexto de filtro y es la función más importante. Usa VAR para código más limpio y DIVIDE para divisiones seguras.

🔒

Ejercicio práctico disponible

Crea tus primeras medidas DAX

Desbloquear ejercicios
// Crea tus primeras medidas DAX
// Desbloquea Pro para acceder a este ejercicio
// y ganar +50 XP al completarlo

function ejemplo() {
    // Tu código aquí...
}

¿Te gustó esta lección?

Con Pro puedes marcar progreso, hacer ejercicios, tomar quizzes, ganar XP y obtener tu constancia.

Ver planes desde $9/mes