aitormadoz
Hola a todos,
Estoy tratando de crear una tabla de comparación donde pueda comparar las diferencias entre los precios de una sola referencia entre varias listas de precios.
La estructura de datos es la siguiente:
SKU | Lista de precios | Precio |
A | X | 12 |
A | Y | 13 |
A | Z | 11 |
A | T | 10,5 |
B | X | 6 |
B | Y | 5 |
B | Z | 4,5 |
B | T | 7 |
El resultado que quiero obtener es una tabla con este aspecto:
Para SKU A (seleccionado en una segmentación de haciendo clic en otra tabla)
sku: | A | ||||
DESDE/ HASTA | X | Y | Z | T | |
X | 0 | -1 | 1 | 1,5 | |
Y | 1 | 0 | 2 | 2,5 | |
Z | -1 | -2 | 0 | 0,5 | |
T | -1,5 | -2,5 | -0,5 | 0 |
¿Alguien podría dar una pista sobre cómo realizar este cálculo/adaptar la estructura de datos?
principalmente está calculando la diferencia de precio entre todas las combinaciones adecuadas para cada SKU y lista de precios
gracias de antemano
Zubair_Muhammad
@aitormadoz
Una forma podría ser CROSS JOIN lista de precios de cada SKU consigo mismo y luego calcular la diferencia
Compruebe esta solución de Power Query. Consulte el Editor de consultas del archivo adjunto para conocer los pasos.
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WclTSUYoAYkMjpVgdCDcSxDWGc6NAXEM4NwTENdAzBQs4QXWbwXkgzQg5kF4TJLUgzeZKsbEA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [SKU = _t, PriceList = _t, Price = _t]), ChangedType = Table.TransformColumnTypes(Source,{{"SKU", type text}, {"PriceList", type text}, {"Price", type number}}), #"Added Custom" = Table.AddColumn(ChangedType, "Comparison", each Table.SelectRows(ChangedType, (X)=>X[SKU] =[SKU])), #"Expanded Comparison" = Table.ExpandTableColumn(#"Added Custom", "Comparison", {"PriceList", "Price"}, {"Comparison.PriceList", "Comparison.Price"}), #"Added Custom1" = Table.AddColumn(#"Expanded Comparison", "Diff", each [Price]-[Comparison.Price]) in #"Added Custom1"
Anónimo
Aquí hay un enfoque que no requerirá que cambie la estructura de su tabla de hechos. Solo necesita otra tabla en su modelo para representar la lista de precios de comparación y luego puede dejar que los cálculos DAX hagan el resto.
Con un modelo como el anterior, puede usar el siguiente cálculo, usando la función TREATAS recientemente agregada.
He creado un libro de trabajo de muestra aquí, que puede descargar: Descargar
Obtenga más información sobre la función TREATAS aquí: https://docs.microsoft.com/en-us/dax/treatas-function
Comparison = VAR varComparisonPrice = CALCULATE ( MAX ( [Price] ), TREATAS ( VALUES ( 'Comparison Price List'[Comparison Price List] ), 'Price List'[Price List] ) ) VAR varPrice = CALCULATE ( MAX ( [Price] ) ) RETURN varComparisonPrice - varPrice
Obtendrás el resultado que esperas:
Anónimo
Aquí hay un enfoque que no requerirá que cambie la estructura de su tabla de hechos. Solo necesita otra tabla en su modelo para representar la lista de precios de comparación y luego puede dejar que los cálculos DAX hagan el resto.
Con un modelo como el anterior, puede usar el siguiente cálculo, usando la función TREATAS recientemente agregada.
He creado un libro de trabajo de muestra aquí, que puede descargar: Descargar
Obtenga más información sobre la función TREATAS aquí: https://docs.microsoft.com/en-us/dax/treatas-function
Comparison = VAR varComparisonPrice = CALCULATE ( MAX ( [Price] ), TREATAS ( VALUES ( 'Comparison Price List'[Comparison Price List] ), 'Price List'[Price List] ) ) VAR varPrice = CALCULATE ( MAX ( [Price] ) ) RETURN varComparisonPrice - varPrice
Obtendrás el resultado que esperas:
aitormadoz
En respuesta a Anónimo
Muchas gracias
Solución simple y efectiva
Tuya,
aitor
Zubair_Muhammad
@aitormadoz
Una forma podría ser CROSS JOIN lista de precios de cada SKU consigo mismo y luego calcular la diferencia
Compruebe esta solución de Power Query. Consulte el Editor de consultas del archivo adjunto para conocer los pasos.
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WclTSUYoAYkMjpVgdCDcSxDWGc6NAXEM4NwTENdAzBQs4QXWbwXkgzQg5kF4TJLUgzeZKsbEA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [SKU = _t, PriceList = _t, Price = _t]), ChangedType = Table.TransformColumnTypes(Source,{{"SKU", type text}, {"PriceList", type text}, {"Price", type number}}), #"Added Custom" = Table.AddColumn(ChangedType, "Comparison", each Table.SelectRows(ChangedType, (X)=>X[SKU] =[SKU])), #"Expanded Comparison" = Table.ExpandTableColumn(#"Added Custom", "Comparison", {"PriceList", "Price"}, {"Comparison.PriceList", "Comparison.Price"}), #"Added Custom1" = Table.AddColumn(#"Expanded Comparison", "Diff", each [Price]-[Comparison.Price]) in #"Added Custom1"