Fatigar
Hola chicos,
Soy nuevo en DAX y estoy luchando con una fórmula, tengo una tabla que llega a PBI desde una vista de base de datos. En la tabla tengo una columna calculada que toma el valor de un SKU (Producto) y se multiplica por el volumen (Ventas) para dar el valor total. (estos están bien como DAX simple)
Luego, cada fila pertenece a una fecha de factura, la fecha de factura se une a una tabla DimDate en PBI. Lo que podría usar o puedo convertir la columna de fecha a un formato MMYYYY y usar eso (vea a continuación, ya que esto es lo que hice en Excel).
En Excel, usaría esto = SUMIFS (L: L, D: D, D4, F: F, F4) donde L son los datos para sumar, D es la fecha (MM-AAAA) y F es una identificación de proveedor. Esto daría una nueva columna que suma el total según los 2 criterios. Tengo 2 lotes de datos, un valor de origen y otro de destino que se suman en el mismo volumen, estos luego se restan para dar una variación que a su vez se divide por el total para mostrar un%
Estoy seguro de que es una fórmula de CALCULAR, pero no puedo hacer que funcione, las columnas negras son mis datos de base de datos y las rojas son lo que estoy tratando de calcular en PBI.
Gracias de antemano por cualquier ayuda TB
CoreyP
Hola Tucker,
También soy relativamente nuevo en Power BI y DAX, pero he estado aprendiendo constantemente durante meses.
Lo más importante que aprendí fue la diferencia entre medidas y columnas calculadas. Permítanme lanzar una explicación simple de los dos.
Usar columnas calculadas cuando desee realizar una función FILA por FILA. Es decir, desea realizar el mismo cálculo para cada FILA de la tabla.
Usar medidas cuando desee realizar una función en una COLUMNA. por ejemplo, agregando valores en la misma columna. (Suena contrario a la intuición, ¿verdad? Si quiero calcular una columna, debería usar una columna calculada … jaja no)
De vuelta a tu problema. Desea realizar una SUMA de solo valores en la misma columna, que tienen criterios específicos en otras columnas, ¿verdad?
Entonces, haría una nueva medida:
Medida =
CALCULAR(
SUM (‘Tabla de ventas'[Total Sales] ),
Filtro / Criterio 1,
Filtro / Criterio 2,
)
¿Se trata de lo que quieres? ¿O no te entendí correctamente?
MFelix
Hola @Tucker,
En DAX no es necesario tener un cálculo basado en filtros, ya que las medidas se basan en el contexto, lo que significa que se realiza un cálculo SUM simple basado en el contexto diferente (columnas / segmentaciones / …) que tiene en sus imágenes .
En este caso, debe calcular las siguientes medidas:
Source Amount = SUMX(Sales; Sales[SourceInv] * Sales[Quantity] ) Target Amount = SUMX(Sales; Sales[TargetPSI] * Sales[Quantity] ) Variance = [Source Amount] - SUM(Sales[TargetPSI]) Variance % = [Sum Variance] / [Sum Source] Sum Source = CALCULATE([Source Amount];ALL(Sales)) Sum Target = CALCULATE([Target Amount];ALL(Sales)) Sum Variance = CALCULATE([Variance]; ALL(Sales))
Esta medida se basa en el contexto y la última es en la que superpones los filtros para darte los resultados de toda la tabla.
Aunque @CoreyP tiene razón en cuanto a que hay una diferencia entre las columnas calculadas y las medidas calculadas, el hecho de que queremos un cálculo fila por fila no necesita ser realizado por una columna, tienes las funciones X que hacen la interacción fila por fila, como el SUMX que uso, pero hay muchos más.
Como puede ver arriba, los cálculos se realizan con sus datos y las columnas dan los resultados esperados, sin embargo, como puede ver en las tarjetas en la parte inferior, si elimina el contexto de una medida simple como la [Source Amount] que calcula el resultado fila por fila, obtienes exactamente el mismo resultado que el [Sum source] que usa una función CALCULADA para filtrar información y darle la suma de la cantidad de origen para TODAS las filas de su tabla.
Una de las mejores prácticas es que si puede usar una medida, no use una columna calculada, ya que las columnas agregan complejidad a su modelo y tamaño.
También tenga en cuenta que hacer una fórmula SUMX o ALL basada en una tabla completa no es una buena práctica; debe usar las columnas que necesitará en sus imágenes para el rendimiento y el contexto.
Adjunte el archivo PBIX que utilicé para esta respuesta.
Saludos,
MFelix
MFelix
Hola @Tucker,
En DAX no es necesario tener un cálculo basado en filtros, ya que las medidas se basan en el contexto, lo que significa que se realiza un cálculo SUM simple basado en el contexto diferente (columnas / segmentaciones / …) que tiene en sus imágenes .
En este caso, debe calcular las siguientes medidas:
Source Amount = SUMX(Sales; Sales[SourceInv] * Sales[Quantity] ) Target Amount = SUMX(Sales; Sales[TargetPSI] * Sales[Quantity] ) Variance = [Source Amount] - SUM(Sales[TargetPSI]) Variance % = [Sum Variance] / [Sum Source] Sum Source = CALCULATE([Source Amount];ALL(Sales)) Sum Target = CALCULATE([Target Amount];ALL(Sales)) Sum Variance = CALCULATE([Variance]; ALL(Sales))
Esta medida se basa en el contexto y la última es en la que superpones los filtros para darte los resultados de toda la tabla.
Aunque @CoreyP tiene razón con respecto a que hay una diferencia entre las columnas calculadas y las medidas calculadas, el hecho de que queremos un cálculo fila por fila no necesita ser realizado por una columna, tienes las funciones X que hacen la interacción fila por fila, como el SUMX que uso, pero hay muchos más.
Como puede ver arriba, los cálculos se hacen con sus datos y las columnas dan los resultados esperados, sin embargo, como puede ver en las tarjetas en la parte inferior, si elimina el contexto de una medida simple como la [Source Amount] que calcula el resultado fila por fila, obtienes exactamente el mismo resultado que el [Sum source] que usa una función CALCULADA para filtrar información y darle la suma de la cantidad de Fuente para TODAS las filas de su tabla.
Una de las mejores prácticas es que si puede usar una medida, no use una columna calculada, ya que las columnas agregan complejidad a su modelo y tamaño.
También tenga en cuenta que hacer una fórmula SUMX o ALL basada en una tabla completa no es una buena práctica; debe usar las columnas que necesitará en sus imágenes para el rendimiento y el contexto.
Adjunte el archivo PBIX que utilicé para esta respuesta.
Saludos,
MFelix
Fatigar
En respuesta a MFelix
MFelix
Muchas gracias por tomarse el tiempo para responder con todos los detalles, esta es una gran explicación gracias y muy apreciada.
CoreyP
Hola Tucker,
También soy relativamente nuevo en Power BI y DAX, pero he estado aprendiendo constantemente durante meses.
Lo más importante que aprendí fue la diferencia entre medidas y columnas calculadas. Permítanme lanzar una explicación simple de los dos.
Usar columnas calculadas cuando desee realizar una función FILA por FILA. Es decir, desea realizar el mismo cálculo para cada FILA de la tabla.
Usar medidas cuando desee realizar una función en una COLUMNA. por ejemplo, agregando valores en la misma columna. (Suena contrario a la intuición, ¿verdad? Si quiero calcular una columna, debería usar una columna calculada … jaja no)
De vuelta a tu problema. Desea realizar una SUMA de solo valores en la misma columna, que tienen criterios específicos en otras columnas, ¿verdad?
Entonces, haría una nueva medida:
Medida =
CALCULAR(
SUM (‘Tabla de ventas'[Total Sales] ),
Filtro / Criterio 1,
Filtro / Criterio 2,
)
¿Se trata de lo que quieres? ¿O no te entendí correctamente?
Fatigar
En respuesta a CoreyP
CoreyP,
Gracias por la solución, funciona perfectamente junto con MFelix. Tengo muchas opciones, gracias también por hablar el tiempo para comentar.