# data[].attributes.body
SUMX
Devuelve la suma de una expresión evaluada por cada fila de una tabla.

# data[].attributes.body
SUMX:
- Devuelve la suma de una expresión evaluada por cada fila de una tabla
- Opera sobre todas las columnas de la tabla que se le pasa como primer parámetro
RELATED:
- Devuelve el valor relacionado con la fila(debe esta tener una relación entre tablas)
- solo se usa en expresiones de columnas calculadas o función anidada que use escaneo de table como SUMX.
SWITCH:
- Evalúa una expresión y devuelve un valor resultante acorde a la lista, si este no se encuentra mostrar BLANK.
-Opera sobre las columnas designadas en la tabla, análoga a una función CASE.

# data[].attributes.body
Desde el punto de vista dimensional esta función nos permite de-normalizar atributos de dimensiones en una única dimensión sin copos de nieve. Entre otras ventajas, nos va a permitir crear una jerarquía de usuario natural dentro de la dimensión. Además, la función RELATED() permite acceder a cualquier columna de una tabla relacionada.

# data[].attributes.body
evalúa una expresión y devuelve un resultado u otro en función del valor resultante de la evaluación, valor que se encontrará entre una lista de opciones.

# data[].attributes.attachment_link.readable_text
En el siguiente ejemplo se evalúa el país al que se asocia la venta para generar una columna personalizada que contenga el continente:

Los valores con los que se compara el resultado de la evaluación de la expresión y los valores devueltos no tienen por qué ser del mismo tipo. En el siguiente ejemplo se calcula el coste de transporte como un porcentaje del valor de venta, porcentaje que varía para cada país:

Para probar la función no ya con valores, sino con expresiones condicionales, supongamos que definimos la medida

Ventas = SUM(FactSales[SalesAmount])

...sumando las ventas en el contexto actual. Si llevamos el campo conteniendo la lista de subcategorías y esta medida a una tabla, el resultado es el siguiente:

Si quisiéramos clasificar cada categoría según la cifra total de ventas con una escala del 1 al 3 (indicándolo con símbolos "$", por ejemplo), podríamos hacerlo usando la función SWITCH de la siguiente manera:

Clasificación = SWITCH(
TRUE(),
[Ventas]>1000000000, "$$$",
[Ventas]>100000000, "$$",
[Ventas]>0, "$",
BLANK()
)

En esta medida, comparamos las ventas totales (en el contexto actual) con una cifra, y devolvemos un valor u otro en función de que la comparación se cumpla o no. El resultado es el siguiente:

Es de destacar que el resultado devuelto por la función es el primero para el que se cumpla la condición. Así, si la medida [Clasificación] se definiese de la siguiente forma (cambiando el orden de las comparaciones):

Clasificación = SWITCH(
TRUE(),
[Ventas]>0, "$",
[Ventas]>100000000, "$$",
[Ventas]>1000000000, "$$$",
BLANK()
)

...el resultado sería el siguiente:

Como vemos, al cumplirse la primera condición para todas las subcategorías mostradas ([Ventas]>0), la función SWITCH devuelve siempre el resultado "$", que no es lo que buscamos.

# data[].attributes.attachment_link.description
En el siguiente ejemplo se evalúa el país al que se asocia la venta para generar una columna personalizada que contenga el continente: Los valores con los que se compara el resultado de la evaluación de la expresión y los valores devueltos no tienen por qué ser del mismo tipo.

# data[].attributes.attachment_link.readable_text
Teoría de SUM:

SUM es una función simple que suma todos los números de una columna y según la documentación de Microsoft tiene esta sintaxis:
SUM( < column > ) : Aunque en DAX se puede escribir el nombre de una columna sin especificar a que tabla pertenece, se recomienda escribir también el nombre de la tabla antes el nombre de la columna, de esta forma: Tabla[Columna]
Es muy importante entender la sintaxis de cada función, especialmente cuando trabajamos con funciones más complejas como SUMX. Aquí significa que SUM toma como argumento una columna. Cuando la sintaxis no tiene un argumento que pide en que tabla hacemos el cálculo, es porque una columna solo puede pertenecer a una tabla.

Práctica de SUM:

Supongamos que tenemos una tienda que vende productos de tenis. En la tabla siguiente hay la información correspondiente a estos productos y con una columna Importe que nos indica el volumen de negocio por producto :

Necesitamos calcular el importe total de las ventas. Vamos a crear una medida y calcular el importe en DAX. En nuestro caso, como ya tenemos una columna "Importe" que nos calcula el importe por cada fila, podemos utilizar directamente la función SUM:

Lo que hemos puesto en el único argumento es la columna Importe. La medida nos devuelve la suma de los importes. Lo ha calculado de manera vertical:
899.99
+ 299.98
+ 639.96
+ 174.99
+ 449.97

Ahora supongamos que no tenemos la columna Importe en el modelo de datos, sino que tenemos las columnas Cantidad y Precio unitario :

y que queremos crear una medida que lo calcule. Si te estás preguntando porque creamos una medida y no una columna calculada, te invito a leer este artículo sobre la diferencia entre las medidas y las columnas calculadas.

El primer reflejo que vamos a tener es calcular eso : Cantidad * Precio unitario con la función SUM. Vemos lo que pasa:

No funciona, la función SUM solo puede recibir una columna. Mientras que aquí lo hemos dado una expresión. De todas formas, cuando ves una palabra en gris es que el DAX intellisense te está diciendo que algo no está en su sitio. DAX intellisense siempre tiene razón y te ayuda a entender la estructura de la expresión o de la función que está mal.

Para abordar esta situación, tenemos la función DAX SUMX .

SUMX suma una expresión DAX

Teoría de SUMX:

La función SUMX es un iterador, es decir que va a recorrer toda la tabla, fila por fila : calcula una expresión por cada fila de una tabla especificada, memoriza temporalmente el resultado de cada fila, agrega todos estos resultados, libera la memoria temporal y devuelve el resultado (la suma de las expresiones). ¡Vaya maratón!

La sintaxis de SUMX es : SUMX( tabla , <expresión>)

En DAX, el X de SUMX es por eXpression. Lo encontramos en otras funciones iteradores como AVERAGEX, CONCATENATEX, etc.

Práctica de SUMX:

En el caso de no tener una columna Importe en el modelo, la solución sería crear esta medida con SUMX :

Va a recorrer toda la tabla "Ventas tenis", hacer la multiplicación en la primera fila, guardarla, añadirla a la suma de la segunda fila, etc.

Y nos va a devolver la suma total :

LO BUENO DE SUMX en DAX

Teoría - ventaja de SUMX en DAX:

El primer argumento puede recibir cualquier tabla. Es decir que podemos darle cualquier función que devuelva una tabla. Eso nos va a permitir hacer cálculos más interesantes porque podremos controlar el contexto de filtros.

Práctica - ventaja de SUMX en DAX:

Cuando ponemos la Marca y el Importe (calculado con SUMX) en una tabla obtenemos eso :

Vemos que, porque existe un contexto de filtro, el resultado de Importe_medida_SUMX está filtrado por cada marca, lo que es normal. Pero podríamos ignorar este filtro de Marca utilizando la función ALL en el primer argumento de la función SUMX. En efecto, ALL devuelve una tabla con todas sus filas e ignora el contexto de filtros.

La fórmula siguiente nos devuelve en cada fila el mismo resultado:

¿Por qué es útil hacer eso? Porque de esta manera, vamos a poder calcular el porcentaje de ventas de cada marca (es decir cual participa más en el importe total):

Vemos que vendemos un 35% de raquetas Babolat mientras que las raquetas de Yonex solo se venden en un 6.82% del total.

También hubieramos podido utilizar la función FILTER en el primer argumento de la función SUMX. Supongamos que tengo que entregar un reporte a la marca Tecnifibre. Puedo calcular sus ventas filtrando con su marca, de esta manera:

CONCLUSIÓN - SUM o SUMX en DAX, ¡depende!

Si lo que tienes que sumar se encuentra en una sola columna, SUM es tu amigo porque hace la suma de los valores que hay en una sola columna, es un cálculo vertical.

Si tienes que hacer una suma que requiere 2 o más columnas, SUMX te va a salvar la vida porque SUMX suma una expresión. Recorre la tabla de manera horizontal, fila por fila. A nivel de performance, SUMX es más costoso porque utiliza una memoria temporal mientras hace su trabajo.

Cualquier duda que tengas puedes dejar un comentario abajo. ¿Ya utilizas SUMX? ¿Con que formulas lo combinas? Comparte con nosotros el uso de las funciones DAX SUM o SUMX que te sirve en tus informes.

# data[].attributes.attachment_link.title
SUMX en DAX : ¿Cuando utilizar SUMX en lugar de SUM? | Biist Pro

# data[].attributes.attachment_link.description
SUM es una función simple que suma todos los números de una columna y según la documentación de Microsoft tiene esta sintaxis: SUM( ) : Aunque en DAX se puede escribir el nombre de una columna sin especificar a que tabla pertenece, se recomienda escribir también el nombre de la tabla antes el nombre de la columna, de esta forma: Tabla[Columna] Es muy importante entender la sintaxis de cada función, especialmente cuando trabajamos con funciones más complejas como SUMX.

# data[].attributes.headline
Sumx: Realiza la suma con variables al que se puede añadir una operación

# data[].attributes.subject
Sumx: Realiza la suma con variables al que se puede añadir una operación

# data[].attributes.body
Función SUMX()

Devuelve la suma de una expresión evaluada por cada fila de una tabla. El parámetro es la tabla que contiene los valores para los cuales se evaluará la expresión

La función RELATED devuelve el valor relacionado con la fila siendo considerada de una columna de otra tabla (tabla remota), suponiendo que existe una relación entre la tabla en la que se esté trabajando (tabla actual) y la remota, que esta relación sea de tipo "varios-a-uno" o "uno-a-uno" y que la tabla remota sea la correspondiente al lado "uno" -es decir, que se trate de una tabla de dimensiones

La función SWITCH evalúa una condición contra una lista de valores y devuelve un resultado.

# data[].attributes.body
Investigar sobre el uso y aplicacion de las siguientes funciones Dax:

* sumx, related y switch