Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.
Hola, estoy tratando de construir un informe para los artículos vendidos bajo una oferta específica. Pero mis datos no son suficientes para lo mismo que tengo sólo cinco coulmns en la tabla (este es un ejemplo) y me gustaría obtener el 6o coulmn (resultado deseado) usando Power Query / DAX. Esta oferta es "Comprar una hamburguesa y obtener una hamburguesa gratis con una compra de inicio" y debajo de la tabla es el ejemplo de datos y la nueva columna - Resultado deseado. ¿Puede alguien ayudarme a resolver este problema.
Orden # | Código de artículo | Cantidad vendida | Categoría | Total | Resultado deseado |
A01 | 10021 | 1 | Hamburguesa | 22 | Ofrecer |
A01 | 10023 | 1 | Hamburguesa | 0 | Ofrecer |
A01 | 10024 | 1 | Arrancador | 15 | Ofrecer |
A01 | 10026 | 1 | Bebidas | 10 | |
A01 | 10030 | 1 | Ofrecer | 0 | Ofrecer |
Gracias
Soji Varghese
Solved! Go to Solution.
Hola @soji ,
Puede completar esto en Power Query de la siguiente manera:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcjQwVNJRMjQwMALTQOxUWpSeWgRkGBkpxeogqzBGV2GApsAEqiC4JLGoBKzC0BRNiRlUiUtRZl52MVgQVYWxAVSFf1oazJJYAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Order #" = _t, #"Item Code" = _t, #"Sold Qty" = _t, Category = _t, Total = _t]),
chgAllTypes = Table.TransformColumnTypes(Source,{{"Order #", type text}, {"Item Code", type text}, {"Sold Qty", Int64.Type}, {"Category", type text}, {"Total", Int64.Type}}),
addCatTotal = Table.AddColumn(chgAllTypes, "catTotal", each Text.Combine({[Category], Text.From([Total], "en-GB")}, ""), type text),
#"groupOrder#" = Table.Group(addCatTotal, {"Order #"}, {{"data", each _, type table [#"Order #"=text, Item Code=text, Sold Qty=number, Category=text, Total=number, catTotal=text]}}),
addDesiredResult = Table.AddColumn(#"groupOrder#", "desiredResult", each if List.Contains([data][Category], "Offer") and List.Contains([data][Category], "Starter") and List.Contains([data][catTotal], "Burger0") then "Offer" else null),
expandData = Table.ExpandTableColumn(addDesiredResult, "data", {"Item Code", "Sold Qty", "Category", "Total"}, {"Item Code", "Sold Qty", "Category", "Total"}),
repNonOfferItems = Table.ReplaceValue(expandData, each [desiredResult], each if [desiredResult] = "Offer" and [Category] <> "Burger" and [Category] <> "Starter" and [Category] <> "Offer" then null else [desiredResult] ,Replacer.ReplaceValue,{"desiredResult"})
in
repNonOfferItems
Vaya a Nuevo origen>Consulta en blanco y, a continuación, en Advanced Editor, pegue mi código sobre el código predeterminado. A continuación, puede seguir los pasos que tomé para completar esto.
Resumen:
1) Combine [Categoría] y [Total] para identificar dónde hay una hamburguesa con valor cero en el pedido.
2) Agrupar por orden para evaluar cada pedido individualmente.
3) Si hay un artículo de Oferta, un artículo de inicio y un artículo de Hamburguesa con valor cero en el pedido, aplique el resultado deseado "Oferta" al pedido.
4) Retire la marca "Oferta" de [desiredResult] donde el artículo no es un artículo de Hamburguesa, Iniciador u Oferta.
Obtengo la siguiente salida:
Proud to be a Datanaut!
Hola @soji ,
Puede completar esto en Power Query de la siguiente manera:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcjQwVNJRMjQwMALTQOxUWpSeWgRkGBkpxeogqzBGV2GApsAEqiC4JLGoBKzC0BRNiRlUiUtRZl52MVgQVYWxAVSFf1oazJJYAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Order #" = _t, #"Item Code" = _t, #"Sold Qty" = _t, Category = _t, Total = _t]),
chgAllTypes = Table.TransformColumnTypes(Source,{{"Order #", type text}, {"Item Code", type text}, {"Sold Qty", Int64.Type}, {"Category", type text}, {"Total", Int64.Type}}),
addCatTotal = Table.AddColumn(chgAllTypes, "catTotal", each Text.Combine({[Category], Text.From([Total], "en-GB")}, ""), type text),
#"groupOrder#" = Table.Group(addCatTotal, {"Order #"}, {{"data", each _, type table [#"Order #"=text, Item Code=text, Sold Qty=number, Category=text, Total=number, catTotal=text]}}),
addDesiredResult = Table.AddColumn(#"groupOrder#", "desiredResult", each if List.Contains([data][Category], "Offer") and List.Contains([data][Category], "Starter") and List.Contains([data][catTotal], "Burger0") then "Offer" else null),
expandData = Table.ExpandTableColumn(addDesiredResult, "data", {"Item Code", "Sold Qty", "Category", "Total"}, {"Item Code", "Sold Qty", "Category", "Total"}),
repNonOfferItems = Table.ReplaceValue(expandData, each [desiredResult], each if [desiredResult] = "Offer" and [Category] <> "Burger" and [Category] <> "Starter" and [Category] <> "Offer" then null else [desiredResult] ,Replacer.ReplaceValue,{"desiredResult"})
in
repNonOfferItems
Vaya a Nuevo origen>Consulta en blanco y, a continuación, en Advanced Editor, pegue mi código sobre el código predeterminado. A continuación, puede seguir los pasos que tomé para completar esto.
Resumen:
1) Combine [Categoría] y [Total] para identificar dónde hay una hamburguesa con valor cero en el pedido.
2) Agrupar por orden para evaluar cada pedido individualmente.
3) Si hay un artículo de Oferta, un artículo de inicio y un artículo de Hamburguesa con valor cero en el pedido, aplique el resultado deseado "Oferta" al pedido.
4) Retire la marca "Oferta" de [desiredResult] donde el artículo no es un artículo de Hamburguesa, Iniciador u Oferta.
Obtengo la siguiente salida:
Proud to be a Datanaut!
Hola
La oferta es"Comprar una hamburguesa y obtener una hamburguesa gratis si alguna compra de inicio". Mi tabla de ejemplo es sobre una transacción (A01) donde hay cinco partidas individuales. De cinco, cuatro líneas pertenecen a la oferta y una no es parte (Bebidas) de la oferta - que he mencionado en el resultado deseado colum , necesito su ayuda para calcular el valor de resultado deseado.
Aquí sé que el código de artículo 10030 es una oferta - "Comprar una hamburguesa y obtener una hamburguesa gratis si cualquier compra de inicio". Así que comprobaré la transacción donde el código de artículo 10030 está allí en la línea y marcaré un entrante y dos hamburguesas como oferta en la misma transacción (una hamburguesa con valor y otra con valor cero como uno es gratis según la oferta). De la misma manera si la cantidad de oferta es dos, entonces duplicará la cantidad de entrante y hamburguesa y así sucesivamente.
@soji Su ejemplo no está claro. ¿Puede proporcionar algunas filas más con el resultado deseado como en blanco.
@soji, podemos relacionar la hamburguesa, cómo relacionar la oferta y el entrante o cualquier otra combinación
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
2 | |
2 | |
2 | |
2 | |
1 |