Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

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.

Reply
soji
Frequent Visitor

Valor de columna basado en la condición de fila múltiple

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ículoCantidad vendidaCategoríaTotalResultado deseado
A01100211Hamburguesa22Ofrecer
A01100231Hamburguesa0Ofrecer
A01100241Arrancador15Ofrecer
A01100261Bebidas10
A01100301Ofrecer0Ofrecer

Gracias

Soji Varghese

1 ACCEPTED SOLUTION
BA_Pete
Super User
Super User

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:

soji.PNG



Now accepting Kudos! If my post helped you, why not give it a thumbs-up?

Proud to be a Datanaut!




View solution in original post

4 REPLIES 4
BA_Pete
Super User
Super User

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:

soji.PNG



Now accepting Kudos! If my post helped you, why not give it a thumbs-up?

Proud to be a Datanaut!




soji
Frequent Visitor

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.

nandukrishnavs
Super User
Super User

@soji Su ejemplo no está claro. ¿Puede proporcionar algunas filas más con el resultado deseado como en blanco.


Regards,
Nandu Krishna

amitchandak
Super User
Super User

@soji, podemos relacionar la hamburguesa, cómo relacionar la oferta y el entrante o cualquier otra combinación

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.