En el siguiente artículo vamos a enseñaros cuál es la diferencia entre las funciones SUM y SUMX utilizando DAX.
Video
Paso a paso…
Lo primero presentamos nuestra tabla, es una tabla llamada bd_Ventas, que tiene Fecha_Venta, Ciudad Cliente, País, Vendedor, Canal de Venta, Precio sin Iva, Iva. Vamos a jugar posteriormente con el Canal de Venta, Precio sin Iva e Iva.
Caso 1 – Obtención de la suma del precio sin IVA
Con la función SUM
Lo primero que vamos a calcular es la suma de lo vendido antes de Iva de toda la base. Para eso podemos emplear la función SUM, que lo que va a hacer es calcular la suma de todos los números de una columna.
Vamos a crear una nueva medida en esta tabla. Llamamos a la medida Caso 1.1 y al emplear la función SUM nos aparece al abrir paréntesis justo lo que hace dicha función, suma todos los números de una columna. Si lo que queremos es sumar lo vendido antes de Iva, usaremos…
Caso 1.1 = SUM(bd_Ventas[Precio sin Iva])
Con la función SUMX
Si hacemos lo mismo usando SUMX, podemos establecer una nueva medida que vamos a llamar Caso 1.2, aplicamos SUMX y al abrir paréntesis nos encontramos que hace justo la devolución de la suma de una expresión evaluada para cada fila de una tabla. Nos pide la tabla y aludimos a nuestra tabla bd_Ventas y como expresión le pasamos bd_Ventas[Precio sin Iva], es decir,…
Caso 1.2 = SUMX(bd_Ventas, bd_Ventas[Precio sin Iva])
Comprobación del resultado
Para comprobar que es correcto vamos a la Vista de informe, creamos una visualización de una tarjeta de varias filas y movemos la medida creada con la función SUM y la medida creada con SUMX. Podemos aplicar algún formato de zoom para que se vea un poco más claro. Vemos que coinciden ambas medidas.
Caso 2 – Obtención de la suma del precio sin IVA solo para un canal de venta
En un segundo caso, volviendo a nuestra vista de datos vamos a intentar conseguir la suma del total antes de Iva, pero solo para el Canal de Venta “Plan Referidos”, uno de los canales de venta. Eso significará que tenemos que hacer un filtro.
Con la función SUM
Vamos a aplicarlo con la función SUM creando una medida. Nos situamos en la tabla de bd_Ventas, creamos una nueva medida llamada Caso 2.1 que será igual a la función SUM, pero aquí nos encontramos con que para hacer un filtro, no podemos hacer filtros directamente con la función SUM, tenemos que anteponer la función CALCULATE, que vale para evaluar una expresión en un contexto modificado por filtros. Como primer argumento del CALCULATE le pasamos la función SUM y como segundo argumento utilizamos la función FILTER para pasarle el filtro deseado, que se corresponda con el canal de ventas “Plan Referidos”. Finalmente quedaría…
Caso 2.1 = CALCULATE(SUM(bd_Ventas[Precio sin Iva]), FILTER(bd_Ventas, [Canal de Venta] = “Plan Referidos”))
Con la función SUMX
Igualmente, si lo queremos hacer con la función SUMX, ya no necesitamos realizar la operación con CALCULATE, pero sí que deberemos indicarle como tabla la función FILTER para obtener únicamente el canal de venta “Plan Referidos” y como expresión pondremos el Precio sin IVA. Quedaría así…
Caso 2.2 = SUMX(FILTER(bd_Ventas, [Canal de Venta] = «Plan Referidos»), bd_Ventas[Precio sin Iva])
Comprobación del resultado
Si volvemos a la vista del informe y creamos en el panel una tarjeta de varias filas, podemos mover la medida realizada con SUM y la realizada con SUMX y vemos que los cálculos operacionales son exactamente iguales.
Aplicamos un poco de formateo de texto con zoom para ambas medidas.
Caso 3 – Obtención del precio con IVA fila a fila
Y aquí es dónde viene realmente la diferencia, en el caso 3. Vamos a imaginar que nos piden el total facturado, la suma de los campos Antes de IVA y de IVA, es decir, queremos hacer una suma para que nos ofrezca el precio con IVA, registro por registro, iterando fila por fila. Las funciones que terminan en “X” son iteradoras, van a conseguir iterar fila por fila.
NO SE PUEDE CALCULAR Con la función SUM
Si intentáramos conseguir el precio con IVA, para cada fila, con la función SUM veríamos que no es posible ya que a la función SUM solo se le puede pasar una columna de una tabla y necesitaríamos pasarle las dos columnas que deseamos sumar. Podríamos forzar la situación he intentar poner…
Caso 3.1 = SUM(bd_Ventas, bd_Ventas[Precio sin Iva] + bd_Ventas[Iva])
Pero enseguida veríamos que se está produciendo un error y nos diría que la función SUM solo acepta una referencia de columna como argumento y no dos.
Con la función SUMX
Luego esto no se puede hacer de esta manera. Lo que tenemos que hacer es usar la función SUMX sobre la tabla bd_Ventas y poniendo como expresión la suma de las dos columnas, que sí que está permitido, quedando la medida…
Caso 3.1 = SUMX(bd_Ventas, bd_Ventas[Precio sin Iva] + bd_Ventas[Iva])
Comprobación del resultado
Yendo a la vista de informe podemos generar una tarjeta y llevarnos la medida arrastrándola a esa tarjeta.
Si rápidamente selecciono el Excel y hago la operación podemos ver que aplicando una suma a toda la columna de Precio sin Iva y luego posteriormente a la columna de [Iva], cerramos el paréntesis y aplicamos Enter, aquí lo estamos haciendo en Excel para contrastar el resultado, vemos que el resultado es el mismo que usando la función SUMX con DAX.
Conclusiones
En definitiva, SUMX vale para iterar fila por fila, pudiendo trabajar con varias columnas, cosa que no está permitida utilizando la función SUM.
Esto ha sido una breve explicación entre las diferencias que hay entre la función SUM y SUMX utilizando DAX.