| | |

Medidas de suma condicional con SUMX en Power BI

0
(0)

Meta descripción: Domina SUMX en DAX para realizar sumas condicionales iterativas. Ejemplos prácticos y optimización del rendimiento.
Categoría: DAX Intermedio | Etiquetas: SUMX Iteradores Contexto de fila

¿Qué es SUMX?

SUMX es una función iteradora que recorre cada fila de una tabla, evalúa una expresión en el contexto de fila de cada iteración, y suma los resultados. Es fundamental cuando necesitas calcular una expresión fila por fila antes de agregar.

Ejemplo práctico: Ventas con descuento dinámico

Ventas con Descuento = 
SUMX(
    Ventas,
    Ventas[Importe] * (1 - Ventas[PorcentajeDescuento])
)

Esta medida calcula el importe de venta después de aplicar el descuento específico de cada línea de venta. Sin SUMX, no podrías realizar este cálculo fila a fila.

SUMX vs SUM

-- INCORRECTO: No respeta el descuento por línea
Ventas Mal = SUM(Ventas[Importe]) * (1 - AVERAGE(Ventas[PorcentajeDescuento]))

-- CORRECTO: Calcula línea por línea
Ventas Correcto = 
SUMX(
    Ventas,
    Ventas[Importe] * (1 - Ventas[PorcentajeDescuento])
)

Suma condicional con FILTER

Ventas Solo Productos Premium = 
SUMX(
    FILTER(
        Ventas,
        RELATED(Productos[Categoria]) = "Premium"
    ),
    Ventas[Importe]
)

Optimización: evitar SUMX innecesarios

💡 Tip de Formula Engine: SUMX fuerza al motor a iterar fila por fila, lo que puede ser costoso en tablas grandes. Si puedes reescribir la medida usando agregaciones simples (SUM, COUNT) con CALCULATE, el rendimiento será superior porque el Storage Engine puede resolverlo en lugar del Formula Engine.

-- Menos eficiente (itera toda la tabla)
Ventas EEUU Lento = 
SUMX(
    Ventas,
    IF(RELATED(Clientes[Pais]) = "EEUU", Ventas[Importe], 0)
)

-- Más eficiente (filtra primero, luego suma)
Ventas EEUU Rapido = 
CALCULATE(
    SUM(Ventas[Importe]),
    Clientes[Pais] = "EEUU"
)

Patrón avanzado: SUMX con variables

Beneficio por Unidad = 
VAR PrecioUnitario = AVERAGE(Productos[Precio])
VAR CosteUnitario = AVERAGE(Productos[Coste])
RETURN
SUMX(
    VALUES(Ventas[IDProducto]),
    (PrecioUnitario - CosteUnitario) * SUM(Ventas[Cantidad])
)

En general es mejor usar variables (VAR) dentro de una fórmula con SUMX, y hay varias razones concretas:

1. Rendimiento
Si dentro del SUMX reutilizas la misma expresión varias veces (por ejemplo, en un IF o en un cálculo con varios pasos), sin variables el motor de DAX puede recalcular esa expresión cada vez que aparece. Con VAR la calculas una sola vez por fila y la reutilizas, lo que reduce el número de operaciones.

DAX

// Sin variables (puede evaluar el mismo cálculo dos veces por fila)
Margen % =
SUMX(
    Ventas,
    DIVIDE(
        Ventas[Cantidad] * Ventas[PrecioUnitario] - Ventas[Costo],
        Ventas[Cantidad] * Ventas[PrecioUnitario]
    )
)

// Con variables (se calcula una sola vez y se reutiliza)
Margen % =
SUMX(
    Ventas,
    VAR Ingreso = Ventas[Cantidad] * Ventas[PrecioUnitario]
    VAR Margen = Ingreso - Ventas[Costo]
    RETURN
        DIVIDE(Margen, Ingreso)
)

2. Legibilidad y mantenimiento
Con variables le das nombre a cada paso intermedio, así que la fórmula se lee casi como un proceso lógico («calcula esto, luego esto, luego el resultado»). Es mucho más fácil de depurar o modificar después.

3. Depuración
Puedes hacer RETURN de una variable intermedia temporalmente para revisar si el cálculo parcial da el resultado esperado, sin tener que reescribir toda la expresión.

4. Contexto de fila fijo
Un detalle importante: cuando declaras una variable dentro de un SUMX, su valor se «congela» en el contexto de fila en el que fue calculada. Esto evita errores sutiles cuando luego usas funciones como CALCULATE que podrían alterar el contexto si no usaras la variable.

¿Cuándo no importa tanto?
Si la expresión dentro del SUMX es simple (una sola multiplicación o resta, sin repetir subexpresiones), la diferencia de rendimiento es mínima o nula. Ahí usar variables es más por claridad que por eficiencia.

En resumen: para fórmulas con más de un paso o con expresiones repetidas, usa variables casi siempre — ganas en rendimiento, legibilidad y seguridad del contexto.

Conclusión

SUMX es indispensable para cálculos iterativos, pero debe usarse con precaución. Siempre pregunta: «¿Puedo resolver esto con CALCULATE + agregación simple?». Si la respuesta es sí, el rendimiento de tu modelo mejorará significativamente.

• • •

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Puntuación media 0 / 5. Recuento de votos: 0

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *