🟢 Introducción
Mientras que muchas funciones DAX trabajan sobre columnas completas, la función SUMX() permite iterar sobre cada fila de una tabla o filtro y realizar un cálculo personalizado. Esto abre posibilidades de análisis mucho más finos como calcular margen, coste por unidad o ajustar valores según condiciones dinámicas.
🧠 Qué es / para qué sirve
SUMX() evalúa una expresión para cada fila de una tabla especificada y luego suma los resultados. Sirve cuando necesitas hacer un cálculo por fila (o por registro) y luego agregar esos resultados. Algunos casos: Margen = SUMX(Ventas, Ventas[Precio] – Ventas[Coste]) Coste por cliente = SUMX(FILTER(Ventas, Ventas[ClienteID]=X), Ventas[Coste]) Ajuste dinámico: aplicar descuentos en ciertas filas, luego sumar. En resumen: SUMX() convierte la agregación en una iteración + suma, lo que te da mayor flexibilidad.
🧩 Sintaxis
SUMX(
<table>,
<expression>
)
La tabla de datos sobre la que iteras (puede venir filtrada).
El cálculo que se evalúa en cada fila de la tabla.
Ejemplo básico:
SUMX(
Products,
Products[Price] * Products[Quantity]
)
💻 Ejemplos con código
🔹 Ejemplo 1 — Calcular ingresos totales por fila
TotalIngresos =
SUMX(
Sales,
Sales[VentaUnitaria] * Sales[Cantidad]
)
🔹 Ejemplo 2 — Calcular margen total
MargenTotal =
SUMX(
Sales,
(Sales[VentaUnitaria] - Sales[CosteUnitaria]) * Sales[Cantidad]
)
🔹 Ejemplo 3 — Combinar con FILTER
VentasPremium =
SUMX(
FILTER(Sales, Sales[Segmento] = "Premium"),
Sales[VentaUnitaria] * Sales[Cantidad]
)
🔹 Ejemplo 4 — Usar SUMX y ALL para ignorar contexto
TotalGeneral =
SUMX(
ALL(Sales),
Sales[VentaUnitaria] * Sales[Cantidad]
)
🧱 Buenas prácticas
✅ Prefiere usar SUMX() cuando la lógica de cálculo varía por fila.
✅ Si solo necesitas SUM() simple de una columna, usa SUM() para mejor rendimiento.
✅ Para tablas muy grandes, filtra antes de usar SUMX() para optimizar.
✅ Documenta qué cálculo se realiza en cada iteración.
✅ Evita anidar demasiados iteradores (SUMX(FILTER(SUMX(…)))) pues puede afectar al rendimiento.
⚠️ Errores comunes
🚫 Usar SUMX() sin filtrar cuando la tabla es muy grande → puede generar lentitud.
🚫 Confundir SUMX() con SUM() y esperar que simplemente sume una columna.
🚫 No validar que la expresión de fila retorna un número o tipo compatible.
🚫 Mezclar iteradores cuando un contexto de filtro más simple bastaría.
🚫 Ignorar que SUMX() respeta contexto de fila pero puede ser influenciada por filtros externos.
🔄 Variantes o alternativas
AVERAGEX(): calcula promedio por fila antes de agregar. COUNTX(): cuenta filas que cumplen condición. MINX() / MAXX(): busca mínimos/máximos en una iteración. SUM(): cuando no necesitas lógica por fila. CALCULATE(SUMX(…)): combina contexto modificado con iteración.
📚 Recursos oficiales
SUMX function – Microsoft Learn
🧩 Mini práctica
Objetivo: Calcular el coste total ajustado con descuentos por producto.
En Power BI, crea medida CosteTotal con:
CosteTotal =
SUMX(
Sales,
Sales[CosteUnitaria] * Sales[Cantidad]
)
Crea medida CosteConDescuento con:
CosteConDescuento =
SUMX(
Sales,
Sales[Cantidad] * (Sales[CosteUnitaria] * (1 - Sales[Descuento]))
)
Añade ambas a tarjeta visual y filtra por segmento “Premium” y “Estándar”. Comprueba diferencias e identifica el impacto del descuento.


Deja un comentario