En el lenguaje DAX, ambas funciones se utilizan para obtener totales, pero operan bajo conceptos de ejecución distintos: Agregación Directa frente a Iteración.
1. Función SUM (Agregadora)
La función SUM es la forma más sencilla de sumar valores. Pertenece al motor de agregación de DAX.
Características principales:
- Ámbito: Solo puede operar sobre una única columna.
- Contexto: Solo reconoce el Contexto de Filtro (lo que el usuario selecciona en segmentadores o visuales).
- Simplicidad: Es más rápida de escribir y fácil de entender.
Sintaxis:
Medida_Suma = SUM(Tabla[Columna])
Ejemplo:
Si quieres el total de unidades vendidas:
Total Unidades = SUM('Ventas'[Cantidad])
2. Función SUMX (Iteradora)
La función SUMX es una función «X» o iteradora. Permite realizar cálculos complejos fila por fila antes de sumar los resultados.
Características principales:
- Ámbito: Puede operar sobre una tabla (o una tabla filtrada) y una expresión aritmética.
- Contexto: Crea un Contexto de Fila para evaluar la expresión en cada registro individual.
- Versatilidad: Permite multiplicar columnas, aplicar lógica condicional o navegar relaciones con
RELATED.
Sintaxis:
Medida_Iterada = SUMX(Tabla, Expresion)
Ejemplo:
Si necesitas calcular los ingresos totales multiplicando el precio por la cantidad de cada fila:
Total Ingresos = SUMX('Ventas', 'Ventas'[Cantidad] * 'Ventas'[PrecioUnitario])
3. Cuadro Comparativo
| Característica | SUM | SUMX |
|---|---|---|
| Tipo de función | Agregación (Aggregator) | Iteración (Iterator) |
| Argumentos | 1 (Solo una columna) | 2 (Tabla y Expresión) |
| Contexto de Fila | No tiene | Sí, itera fila por fila |
| Cálculos complejos | No permite (ej. mult. columnas) | Sí (ej. [Col A] * [Col B]) |
| Uso de Memoria | Muy bajo y optimizado | Puede ser alto en tablas gigantes |
| Navegación | No puede usar RELATED directamente | Puede usar RELATED en su expresión |
4. ¿Cuándo usar cada una?
Usa SUM cuando:
- Solo necesites sumar los valores de una columna que ya existe físicamente en tu modelo.
- El rendimiento sea crítico y la columna ya contenga el dato final (ej. una columna calculada de «Venta Total»).
Usa SUMX cuando:
- Necesites realizar una operación aritmética entre dos o más columnas de la misma tabla (evitando crear columnas calculadas innecesarias que pesan en el modelo).
- Necesites sumar datos de una tabla relacionada (ej.
SUMX(Ventas, Ventas[Cantidad] * RELATED(Producto[Precio]))). - Quieras aplicar filtros dinámicos dentro de la medida usando
FILTERen el primer argumento.
5. El mito del rendimiento: «Syntactic Sugar»
Es importante saber que, internamente, el motor de DAX traduce un SUM(Tabla[Columna]) como: SUMX(Tabla, Tabla[Columna]).
Por lo tanto, para sumas de una sola columna, el rendimiento es idéntico. La diferencia real radica en la capacidad de SUMX para manejar expresiones de varias columnas y lógica de iteración.
6. Ejemplo Práctico: Error Común
Un error frecuente es intentar sumar una multiplicación de columnas con SUM:
Incorrecto (Error de sintaxis): Venta = SUM(Ventas[Cantidad] * Ventas[Precio]) -> SUM solo acepta una columna.
Correcto: Venta = SUMX(Ventas, Ventas[Cantidad] * Ventas[Precio])