Lección 6 de 16 · Nivel 2: Intermedio

DAX en Power BI desde cero: medidas y columnas calculadas

  • ⏱ 9 min de lectura
  • ❓ 3 preguntas de repaso
  • ✍️ Ejercicio con solución
En esta lección
  1. Columnas calculadas frente a medidas
  2. Tu primera medida
  3. Funciones básicas
  4. SUMX: calcular fila por fila y sumar
  5. Medidas que usan otras medidas
  6. El contexto de filtro: la idea más importante de DAX
  7. Medidas implícitas frente a explícitas
  8. Resumen
Lo que lograrás en esta lección
  • Entender qué es DAX y la diferencia entre columnas calculadas y medidas.
  • Crear medidas con SUM, AVERAGE, COUNTROWS, DISTINCTCOUNT y DIVIDE.
  • Usar SUMX para calcular fila por fila.
  • Entender el contexto de filtro: por qué la misma medida da un resultado distinto en cada celda.

DAX (Data Analysis Expressions) es el lenguaje de fórmulas de Power BI, Power Pivot y otros productos de Microsoft. Se parece a las fórmulas de Excel, pero con una diferencia fundamental: no trabaja celda a celda, sino con tablas y columnas, y se recalcula según los filtros que el usuario tenga activos. Dominar las medidas es lo que convierte un informe bonito en un informe analítico.

Columnas calculadas frente a medidas

Columna calculadaMedida
Qué esUna columna nueva en una tabla, calculada fila por filaUn cálculo que se evalúa en el momento, según los filtros
Cuándo se calculaAl actualizar los datos; se guarda en el modeloCada vez que un objeto visual la muestra
Ocupa memoriaSíNo
Úsala paraClasificar o agrupar filas (segmentos, rangos), cuando necesitas el valor en un eje o una segmentaciónTotales, promedios, porcentajes, comparaciones: cualquier número que se resume
EjemploTamaño de pedido = "Grande" si Importe ≥ 1.000Ventas totales, Margen %, Ticket medio

Regla práctica: si el resultado es un número que se va a resumir, es una medida. Las columnas calculadas son para cuando necesitas la etiqueta en una fila. Y si puedes crear la columna en Power Query, mejor allí.

Tu primera medida

En la vista de Informe, selecciona la tabla Ventas en el panel Datos y pulsa Nueva medida. Escribe en la barra de fórmulas:

Ventas Totales = SUM ( Ventas[Importe] )
  • A la izquierda del = va el nombre de la medida.
  • Las columnas se escriben como Tabla[Columna].
  • Las funciones de DAX se escriben en inglés (SUM, AVERAGE, CALCULATE), aunque la interfaz esté en español.
  • En este curso usamos la coma como separador de argumentos, que es lo habitual en DAX. Si tu Power BI te da error con comas, revisa en las opciones la configuración de separadores de DAX.

La medida aparece con el icono de una calculadora. Arrástrala a una tarjeta, a un gráfico por ciudad o a una matriz por mes: en cada lugar se calcula para lo que corresponde.

Una tabla para tus medidas

Crea una tabla vacía solo para guardar medidas (Inicio → Especificar datos, llámala "_Medidas" y carga una tabla con una columna que después ocultas). Mueve ahí tus medidas desde Herramientas de medición → Tabla principal. Con 40 medidas, lo agradecerás.

Funciones básicas

Usaremos esta pequeña tabla de Ventas de ejemplo (Importe = Cantidad × Precio):

ClienteProductoCantidadPrecioCosto unitario
C1Arroz104,503,20
C2Aceite59,006,50
C1Aceite89,006,50
C3Arroz204,503,20
C2Azúcar123,802,90
C1Arroz64,503,20
MedidaFórmulaResultado con la tabla
UnidadesSUM ( Ventas[Cantidad] )61
PedidosCOUNTROWS ( Ventas )6
ClientesDISTINCTCOUNT ( Ventas[Cliente] )3
Precio máximoMAX ( Ventas[Precio] )9,00
Cantidad promedioAVERAGE ( Ventas[Cantidad] )10,17

SUMX: calcular fila por fila y sumar

Si la tabla no tiene una columna de Importe, sino Cantidad y Precio, no puedes hacer SUM(Cantidad) * SUM(Precio): multiplicarías los totales (61 × 35,30), lo que no tiene sentido. Necesitas multiplicar en cada fila y después sumar. Para eso están las funciones iteradoras, que terminan en X:

Ventas Totales =
SUMX ( Ventas, Ventas[Cantidad] * Ventas[Precio] )

Costo Total =
SUMX ( Ventas, Ventas[Cantidad] * Ventas[Costo unitario] )

SUMX recorre la tabla Ventas, calcula la expresión en cada fila (45; 45; 72; 90; 45,60; 27) y suma: 324,60. El costo total es 234,50. Existen también AVERAGEX, MINX, MAXX y COUNTX.

1. Tu tabla tiene Cantidad y Precio, pero no Importe. ¿Qué medida calcula correctamente las ventas?

  • SUM(Ventas[Cantidad]) * SUM(Ventas[Precio])
  • SUMX(Ventas, Ventas[Cantidad] * Ventas[Precio])
  • COUNTROWS(Ventas) * AVERAGE(Ventas[Precio])

SUMX multiplica en cada fila y luego suma los resultados. Multiplicar los totales da un número sin sentido.

Medidas que usan otras medidas

Una vez creadas las medidas base, construye las demás a partir de ellas. Es más legible y, si cambia la definición de Ventas, todo se actualiza:

Margen = [Ventas Totales] - [Costo Total]

Margen % = DIVIDE ( [Margen], [Ventas Totales] )

Ticket Medio = DIVIDE ( [Ventas Totales], [Pedidos] )

Con la tabla de ejemplo: Margen = 324,60 − 234,50 = 90,10; Margen % = 90,10 ÷ 324,60 = 27,8%; Ticket medio = 324,60 ÷ 6 = 54,10.

Usa siempre DIVIDE en lugar del operador /: si el denominador es cero o está vacío, DIVIDE devuelve un valor en blanco (o el que indiques como tercer argumento) en lugar de un error.

Da formato a cada medida en Herramientas de medición: Margen % como porcentaje con un decimal, Ventas como moneda sin decimales, etc. El formato viaja con la medida a todos los objetos visuales.

El contexto de filtro: la idea más importante de DAX

Pon la medida Ventas Totales en una matriz con Producto en las filas:

ProductoVentas TotalesMargen %
Arroz162,0028,9%
Aceite117,0027,8%
Azúcar45,6023,7%
Total324,6027,8%

Es una sola fórmula, pero da un resultado distinto en cada fila. ¿Por qué? Porque antes de calcular, Power BI aplica el contexto de filtro de esa celda: en la fila "Arroz", la tabla Ventas se filtra a las filas de arroz, y SUMX recorre solo esas. En la fila Total no hay filtro de producto, así que recorre todas. Ese contexto lo forman las filas y columnas del objeto visual, las segmentaciones, los filtros de página e informe y las interacciones con otros gráficos.

El total no es la suma de los porcentajes

Fíjate en que el Margen % del total (27,8%) no es la suma ni el promedio simple de las filas: se recalcula con el margen total y las ventas totales. Así debe ser. Por eso los porcentajes y los promedios siempre deben ser medidas, nunca columnas que luego se suman.

2. ¿Por qué la misma medida "Ventas Totales" muestra 162 en la fila de Arroz y 324,60 en el total?

  • Porque hay dos medidas distintas.
  • Porque cada celda se calcula con su propio contexto de filtro: la fila de Arroz filtra la tabla a ese producto.
  • Porque el total incluye impuestos.

El contexto de filtro es la base de DAX: la medida se evalúa después de aplicar los filtros de cada celda.

Medidas implícitas frente a explícitas

Cuando arrastras una columna numérica a un gráfico, Power BI crea una medida implícita (por ejemplo, "Suma de Importe"). Funciona para empezar, pero no puedes reutilizarla en otras fórmulas ni controlar su formato en un solo lugar, y algunas funciones avanzadas no las admiten. La práctica profesional es crear medidas explícitas para todo lo que se muestra.

3. ¿Qué debe ser una medida y no una columna calculada?

  • Una columna "Rango de edad" para usarla en una segmentación.
  • El margen porcentual que se mostrará por producto, por mes y en el total.
  • El nombre completo del cliente (nombre + apellido).

Los porcentajes deben recalcularse para cada contexto; como columna, el total sería incorrecto.

Ejercicio práctico: tus medidas base

Con el modelo de la lección 5, crea en una tabla de medidas:

  1. Ventas Totales, Costo Total, Margen y Margen %.
  2. Pedidos, Clientes (distintos) y Ticket Medio.
  3. Unidades y Precio Medio por unidad (ventas ÷ unidades).
  4. Ponlas en una matriz por Categoría y por Zona, y comprueba que el Margen % del total se recalcula.
Ver las fórmulas
Ventas Totales = SUM ( Ventas[Importe] )
Costo Total    = SUM ( Ventas[Costo] )
Margen         = [Ventas Totales] - [Costo Total]
Margen %       = DIVIDE ( [Margen], [Ventas Totales] )
Pedidos        = COUNTROWS ( Ventas )
Clientes       = DISTINCTCOUNT ( Ventas[IdCliente] )
Ticket Medio   = DIVIDE ( [Ventas Totales], [Pedidos] )
Unidades       = SUM ( Ventas[Cantidad] )
Precio Medio   = DIVIDE ( [Ventas Totales], [Unidades] )

Si tu tabla de hechos tiene Cantidad y Precio en lugar de Importe, usa SUMX como en la lección. Si cada fila de Ventas fuera una línea de pedido (varios productos por pedido), Pedidos sería DISTINCTCOUNT(Ventas[NumPedido]).

Resumen

  • DAX trabaja con tablas y columnas; las funciones se escriben en inglés.
  • Medidas para números que se resumen; columnas calculadas solo para clasificar filas.
  • SUM, AVERAGE, COUNTROWS, DISTINCTCOUNT y DIVIDE cubren lo básico; SUMX calcula fila por fila.
  • Construye medidas a partir de otras y dales formato una sola vez.
  • El contexto de filtro hace que cada celda tenga su propio resultado.

En la próxima lección aprenderás CALCULATE, la función más importante de DAX, que te permite modificar ese contexto de filtro.

🎓 Guarda tu avance y obtén tu certificado gratis

Crea tu cuenta en 30 segundos, marca tus lecciones y descarga el certificado al terminar.

Inscribirme gratis