Qué es DAX en Power BI: Guía práctica para principiantes (con ejemplos)
Qué es DAX en Power BI: Guía práctica para principiantes (con ejemplos)
TL;DR: DAX (Data Analysis Expressions) es el lenguaje de fórmulas de Power BI para crear cálculos y métricas. Si vienes de Excel, te resultará familiar pero con superpoderes. Este post te enseña lo esencial: qué es, para qué sirve, las 5 funciones que necesitas dominar, y los errores que todos cometemos al empezar.
Qué es DAX (y qué significa)
DAX significa Data Analysis Expressions. Es el lenguaje de fórmulas que usa Power BI para hacer cálculos sobre tus datos.
Si has usado Excel, ya conoces la idea: escribes una fórmula como =SUMA(A1:A10) y obtienes un resultado. DAX funciona igual, pero diseñado para trabajar con modelos de datos relacionales y millones de filas.
Dónde se usa DAX:
- Power BI (Desktop y Service)
- Power Pivot (el complemento de Excel)
- SQL Server Analysis Services (SSAS) Tabular
- Azure Analysis Services
En este post nos centramos en Power BI, pero lo que aprendas aplica a todos.
Un ejemplo para empezar
En Excel escribirías:
=SUMA(Ventas[Importe])
En DAX escribes:
Total Ventas = SUM(Ventas[Importe])
Parecido, ¿verdad? La diferencia está en lo que pasa debajo: DAX entiende relaciones entre tablas, responde a filtros dinámicamente, y escala a millones de registros.
DAX vs Power Query: La confusion mas comun
Esto confunde a todo el mundo al principio. Power BI tiene dos lenguajes (si quieres profundizar en el otro, lee mi guia completa de Power Query):
| Power Query (M) | DAX | |
|---|---|---|
| Para que | Transformar y limpiar datos | Calcular metricas y KPIs |
| Cuando se ejecuta | Al cargar/refrescar datos | Al visualizar el informe |
| Donde lo usas | Editor de Power Query | Medidas y columnas calculadas |
| Analogía Excel | Power Query de Excel | Fórmulas en celdas |
La regla simple
-
Power Query: Todo lo que haces ANTES de que los datos lleguen al modelo
- Limpiar nombres de columnas
- Filtrar filas innecesarias
- Combinar tablas (merge/append)
- Cambiar tipos de datos
-
DAX: Todo lo que calculas DESPUÉS de que los datos están en el modelo
- Totales, promedios, conteos
- Comparaciones (vs año anterior, vs presupuesto)
- Porcentajes y ratios
- KPIs de negocio
Ejemplo práctico:
- Tienes una columna “Fecha” en formato texto → Power Query para convertirla a fecha
- Quieres calcular ventas del mes anterior → DAX para crear la medida
Medidas vs Columnas calculadas: Cuándo usar cada una
En DAX puedes crear dos tipos de cálculos:
Medidas (Measures)
- Se calculan dinámicamente según el contexto de filtro
- No ocupan espacio en memoria (se calculan al vuelo)
- Cambian según los filtros del informe
Total Ventas = SUM(Ventas[Importe])
Columnas calculadas (Calculated Columns)
- Se calculan una vez al refrescar datos
- Añaden una columna física a la tabla
- El valor es fijo por cada fila
Margen = Ventas[Importe] - Ventas[Coste]
La regla de oro
Usa medidas siempre que puedas. Las columnas calculadas solo cuando:
- Necesitas el valor para filtrar o segmentar (slicers)
- El cálculo depende de valores de la misma fila
- Necesitas usar el resultado en una relación
¿Por qué? Las medidas:
- Consumen menos memoria (entender cómo VertiPaq comprime tus datos te ayudará a optimizar)
- Responden a filtros (más flexibles)
- Son más fáciles de mantener
Las 5 funciones DAX que necesitas dominar
No necesitas conocer las 200+ funciones de DAX. Con estas 5 categorías cubres el 80% de los casos:
1. Agregaciones: SUM, AVERAGE, COUNT
Las más básicas. Suman, promedian o cuentan valores.
Total Ventas = SUM(Ventas[Importe])
Precio Medio = AVERAGE(Productos[Precio])
Número de Pedidos = COUNT(Ventas[PedidoID])
Clientes Únicos = DISTINCTCOUNT(Ventas[ClienteID])
Tip: DISTINCTCOUNT cuenta valores únicos, muy útil para contar clientes, productos, etc.
2. CALCULATE: El rey de DAX
La función más importante. Permite modificar el contexto de filtro de un cálculo.
// Ventas totales (sin filtro de categoría)
Ventas Todas Categorías =
CALCULATE(
SUM(Ventas[Importe]),
ALL(Productos[Categoría])
)
// Ventas solo de 2025
Ventas 2025 =
CALCULATE(
SUM(Ventas[Importe]),
Calendario[Año] = 2025
)
¿Qué hace CALCULATE?
- Toma una expresión (ej:
SUM(Ventas[Importe])) - Modifica los filtros activos según los argumentos
- Evalúa la expresión con los nuevos filtros
Es confuso al principio. Volveremos a esto con ejemplos más adelante.
3. FILTER y ALL: Control del contexto
ALL elimina filtros:
// Porcentaje del total (ignora filtros de la visual)
% del Total =
DIVIDE(
SUM(Ventas[Importe]),
CALCULATE(SUM(Ventas[Importe]), ALL(Ventas))
)
FILTER aplica condiciones personalizadas:
// Ventas de productos premium (precio > 100)
Ventas Premium =
CALCULATE(
SUM(Ventas[Importe]),
FILTER(Productos, Productos[Precio] > 100)
)
4. IF y SWITCH: Condicionales
IF para condiciones simples:
Estado =
IF(
Ventas[Importe] > 1000,
"Grande",
"Pequeño"
)
SWITCH para múltiples condiciones (más limpio que IF anidados):
Segmento =
SWITCH(
TRUE(),
Ventas[Importe] > 10000, "Enterprise",
Ventas[Importe] > 1000, "Medium",
Ventas[Importe] > 100, "Small",
"Micro"
)
Tip: SWITCH(TRUE(), ...) es el patrón más útil. Evalúa condiciones en orden y devuelve el primer TRUE.
5. RELATED y RELATEDTABLE: Navegación entre tablas
Cuando necesitas datos de una tabla relacionada:
RELATED (de muchos a uno):
// En tabla Ventas, obtener la categoría del producto
Categoría = RELATED(Productos[Categoría])
RELATEDTABLE (de uno a muchos):
// En tabla Clientes, contar sus pedidos
Pedidos del Cliente = COUNTROWS(RELATEDTABLE(Ventas))
Tu primera medida DAX: 3 ejemplos prácticos
Vamos a crear las medidas más comunes paso a paso.
Ejemplo 1: Total Ventas
Total Ventas = SUM(Ventas[Importe])
Simple. Suma todos los importes. Si hay un filtro de fecha en el informe, solo suma ese periodo.
Ejemplo 2: Ventas del año anterior
Ventas Año Anterior =
CALCULATE(
[Total Ventas],
SAMEPERIODLASTYEAR(Calendario[Fecha])
)
Qué hace:
- Toma la medida
[Total Ventas] - Cambia el filtro de fecha al mismo periodo del año anterior
- Calcula
Requisito: Necesitas una tabla de calendario marcada como “Date table” en Power BI.
Ejemplo 3: Porcentaje del total
% del Total =
DIVIDE(
[Total Ventas],
CALCULATE([Total Ventas], ALL(Ventas)),
0
)
Qué hace:
- Divide las ventas filtradas entre las ventas totales
ALL(Ventas)elimina todos los filtros de la tabla Ventas- El tercer argumento (0) es el valor si hay división por cero
¿Por qué DIVIDE y no ”/”?
// ❌ Esto da error si el denominador es 0
Ratio = [Ventas] / [Objetivo]
// ✅ Esto devuelve 0 (o lo que especifiques) si hay división por cero
Ratio = DIVIDE([Ventas], [Objetivo], 0)
Errores comunes de principiante (y cómo evitarlos)
Estos son los errores que todos cometemos al empezar:
Error 1: Usar columnas calculadas para todo
❌ Mal:
// Columna calculada en tabla Ventas
Total Acumulado =
CALCULATE(
SUM(Ventas[Importe]),
FILTER(ALL(Ventas), Ventas[Fecha] <= EARLIER(Ventas[Fecha]))
)
✅ Bien: Usar una medida
Total Acumulado =
CALCULATE(
[Total Ventas],
FILTER(
ALL(Calendario),
Calendario[Fecha] <= MAX(Calendario[Fecha])
)
)
Las columnas calculadas se evalúan fila por fila al cargar datos. Lentas y consumen memoria.
Error 2: No entender el contexto de filtro
El contexto de filtro es todo en DAX. Es lo que determina qué filas se incluyen en el cálculo. De hecho, el 80% de los problemas de debugging en Power BI son filtros olvidados.
Total Ventas = SUM(Ventas[Importe])
Esta medida devuelve valores diferentes según:
- El año seleccionado en un slicer
- La categoría de producto en el eje de un gráfico
- Los filtros de página o informe
El error: Asumir que una medida siempre devuelve el mismo valor.
Error 3: Dividir sin DIVIDE()
// ❌ Error en runtime si Objetivo = 0
Cumplimiento = [Ventas] / [Objetivo]
// ✅ Seguro
Cumplimiento = DIVIDE([Ventas], [Objetivo], 0)
Error 4: Ignorar las relaciones del modelo
DAX funciona sobre un modelo relacional. Si tus tablas no están bien relacionadas, las medidas no funcionarán como esperas. Un problema común es que Power BI desactiva relaciones sin avisarte.
Checklist:
- ¿Hay una relación entre Ventas y Productos?
- ¿La relación es del lado correcto (1 a muchos)?
- ¿Está activa?
Error 5: Complicar cuando no hace falta
❌ Overcomplicated:
Total =
CALCULATE(
SUMX(
FILTER(Ventas, Ventas[Importe] > 0),
Ventas[Importe]
)
)
✅ Simple:
Total = SUM(Ventas[Importe])
Empieza simple. Añade complejidad solo cuando sea necesario.
DAX y Copilot: El atajo de 2026
Si tienes acceso a Power BI Copilot, puedes generar DAX con lenguaje natural:
Prompt: "Crea una medida que calcule las ventas del mismo periodo del año anterior"
Copilot genera:
Ventas Año Anterior =
CALCULATE(
SUM(Ventas[Importe]),
SAMEPERIODLASTYEAR(Calendario[Fecha])
)
Mi consejo: Usa Copilot para acelerar, pero entiende lo que genera. Si no entiendes el código, no podrás depurarlo cuando falle.
Copilot es especialmente útil para:
- Explicar DAX existente (“¿qué hace esta medida?”)
- Generar el primer borrador de medidas complejas
- Aprender patrones nuevos
Pero tiene limitaciones: a veces genera código incorrecto, especialmente con variables y contextos complejos. Siempre revisa.
Recursos para seguir aprendiendo
Gratuitos
DAX.do Playground online para probar DAX sin instalar nada. Perfecto para experimentar.
DAX Guide Referencia completa de todas las funciones DAX con ejemplos. Por SQLBI.
SQLBI Marco Russo y Alberto Ferrari son LA referencia en DAX. Sus artículos son oro.
Libros
“The Definitive Guide to DAX” (Marco Russo, Alberto Ferrari) El libro. 700+ páginas. No es para principiantes totales, pero es la biblia cuando quieras profundizar.
Canales YouTube
- SQLBI - Vídeos técnicos de los autores del libro
- Guy in a Cube - Más accesible, buenos tutoriales
- Curbal - Ruth Pozuelo, excelente contenido en español e inglés
Cheat Sheet
Las funciones que más usarás:
| Función | Para qué |
|---|---|
SUM | Sumar valores |
AVERAGE | Promedio |
COUNT / COUNTA | Contar filas |
DISTINCTCOUNT | Contar valores únicos |
CALCULATE | Modificar contexto de filtro |
FILTER | Filtrar tablas |
ALL | Eliminar filtros |
IF | Condicional simple |
SWITCH | Condicional múltiple |
DIVIDE | División segura |
RELATED | Obtener valor de tabla relacionada |
DATEADD | Desplazar fechas |
SAMEPERIODLASTYEAR | Mismo periodo año anterior |
TOTALYTD | Acumulado año |
FORMAT | Formatear valores |
Conclusión: Por dónde empezar
Si estás empezando con DAX:
- Entiende la diferencia entre DAX y Power Query
- Usa medidas, no columnas calculadas (salvo excepciones)
- Domina CALCULATE - es el 50% de DAX
- Practica con ejemplos reales de tu trabajo
- Usa DIVIDE() siempre para divisiones
DAX tiene curva de aprendizaje, especialmente el contexto de filtro. Pero una vez que “haces clic”, se convierte en una herramienta increíblemente potente.
Mi recomendación: no intentes aprenderlo todo de golpe. Empieza con SUM, AVERAGE, COUNT. Luego añade CALCULATE. Después explora time intelligence con patrones como rolling 12 meses. Paso a paso.
Y recuerda: por muy perfecto que sea tu DAX, si nadie mira tu dashboard, algo falla en el proceso.
También te puede interesar
Medidas Rotativas en DAX: Cuando tus datos no se están quietos
Cómo manejar productos que cambian de categoría con el tiempo en DAX.
Power BI desactivó tu relación y no te avisó
Guía completa sobre relaciones inactivas en Power BI: por qué aparecen, cómo detectarlas, USERELATIONSHIP, role-playing dimensions y patrones avanzados.
Rolling 12 meses en DAX: la solución de dos calendarios
Cómo calcular rolling 12 months en Power BI correctamente. Tutorial DAX paso a paso.