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

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
UCK
New Member

Conversión de datos de transacciones verticales a horizontales

Hola

Actualmente tengo un conjunto de datos que es vertical por naturaleza y se parece a la siguiente tabla. Tenía curiosidad por saber la mejor manera de agregar los datos de tal manera que sería fácil para mí calcular el beneficio / pérdida para cada transacción. Cada ID de pedido variará en el número de filas debido al número de transacciones únicas disponibles con ese pedido.

FechaID de pedidoSkuTipo de transacciónTipo de pagoDetalle de pagoCantidadCantidad
05-Mar-20

0000001

ABC-1PagoCargo por producto $151
05-Mar-200000001ABC-1PagoCuota de comerciantePick and Package

($3)

05-Mar-200000001ABC-1PagoOtroEnvío

($5)

05-Mar-200000001ABC-1PagoDescuentos ($2)1
05-Mar-20

0000002

ABC-2PagoCargo por producto $201
05-Mar-200000002ABC-2PagoCuota de comerciantePick and Package($5)
05-Mar-200000002ABC-2PagoRebajas promocionalesEnvío$5
05-Mar-200000002ABC-2PagoOtroEnvío($5)
05-Mar-200000002ABC-2PagoDescuentos ($1)
........................

Típicamente una tabla de pedidos se vería algo como esto que haría que los cálculos mucho más fácil

FechaID de pedidoSkuIngresosCostoBeneficio
05-Mar-200000001ABC-115105

¡Gracias!

1 ACCEPTED SOLUTION

@UCK echar un vistazo a este código:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("jZHRCoMgFIZfRcKLgoJy9ABbsLtYbJfRxZkdMiIL5y729lMbbAzHBOWI8H34/7ZtVGY1qIzlURoVZu8PVWZnA48ZpbYntfR3rkklQA1oLsyiRUkc0KUBhhoVFyA1OaLlm5FPBGRPGuATOGVMd4k1B+lOWqAy8yLGdR3l4PgynD/jFTTetiQxZYkvCXuh7H8XLPd24TeEdOHN8vNB80LeiT46oe6LwjThlfr5r0qLjeye", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t, #"Order ID" = _t, SKU = _t, #"Transaction Type" = _t, #"Payment Type" = _t, #"Payment Detail" = _t, Amount = _t, Quantity = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}}),
    #"Merged Columns" = Table.CombineColumns(#"Changed Type",{"Payment Type", "Payment Detail"},Combiner.CombineTextByDelimiter(":", QuoteStyle.None),"Merged Transaction Type"),
    #"Merged Columns1" = Table.CombineColumns(#"Merged Columns",{"Amount", "Quantity"},Combiner.CombineTextByDelimiter(":", QuoteStyle.None),"Merged Amounts"),
    #"Pivoted Column" = Table.Pivot(#"Merged Columns1", List.Distinct(#"Merged Columns1"[#"Merged Transaction Type"]), "Merged Transaction Type", "Merged Amounts")
in
    #"Pivoted Column"

Lo que esto hace es girar esto:

edhans_0-1598136622021.png

En algo que se parece a esto:

edhans_1-1598136670386.png

Esto no está hecho. No dijiste cómo querías que se manejara la cantidad. Sin embargo, ahora tengo cada cantidad/cantidad en la misma columna (Cargo de producto, Reembolso, etc.) y ahora puede dividir esas columnas en dólares y cantidades, luego convertirlas en valores numéricos. Los mantuve como texto en la línea "Paso cambiado". Si las cantidades son lo mismo, podría descartar las columnas de cantidad adicional. O si "Reembolso" tiene una cantidad de 1 en la primera fila y Los cargos de producto también, deje esas columnas como separadas después de dividirlas.

Avísame si esto te ayuda a empezar. Si no es así, sea más explícito en lo que espera que sea la salida. El ejemplo no cubrió toda la información de la tabla principal.

Cómo utilizar el código M proporcionado en una consulta en blanco:
1) En Power Query, seleccione Nueva fuente y, a continuación, Consulta en blanco
2) En la cinta de opciones Inicio, seleccione el botón "Editor avanzado"
3) Retire todo lo que ve, luego pegue el código M que le he dado en esa caja.
4) Pulse Hecho
5) Consulte este artículo si necesita ayuda para usar este código M en su modelo.



Did I answer your question? Mark my post as a solution!
Did my answers help arrive at a solution? Give it a kudos by clicking the Thumbs Up!

DAX is for Analysis. Power Query is for Data Modeling


Proud to be a Super User!

MCSA: BI Reporting

View solution in original post

4 REPLIES 4
Greg_Deckler
Super User
Super User

@UCK - Por lo que es posible que desee pivotar su valor en las últimas columnas. @ImkeF y @edhans probablemente pueden ser de mejor ayuda.


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
The Definitive Guide to Power Query (M)

DAX is easy, CALCULATE makes DAX hard...

Hola @UCK ,

necesita una asignación de la que la clase de pago pertenece a Ventas o Costes.
¿Esta columna ya existe en la tabla de datos de origen o la tiene en una tabla diferente?
Por favor, especifique.

Imke Feldmann (The BIccountant)

If you liked my solution, please give it a thumbs up. And if I did answer your question, please mark this post as a solution. Thanks!

How to integrate M-code into your solution -- How to get your questions answered quickly -- How to provide sample data -- Check out more PBI- learning resources here -- Performance Tipps for M-queries

No, no hay columnas que especifiquen si cada tipo de pago es un costo o ventas

@UCK echar un vistazo a este código:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("jZHRCoMgFIZfRcKLgoJy9ABbsLtYbJfRxZkdMiIL5y729lMbbAzHBOWI8H34/7ZtVGY1qIzlURoVZu8PVWZnA48ZpbYntfR3rkklQA1oLsyiRUkc0KUBhhoVFyA1OaLlm5FPBGRPGuATOGVMd4k1B+lOWqAy8yLGdR3l4PgynD/jFTTetiQxZYkvCXuh7H8XLPd24TeEdOHN8vNB80LeiT46oe6LwjThlfr5r0qLjeye", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t, #"Order ID" = _t, SKU = _t, #"Transaction Type" = _t, #"Payment Type" = _t, #"Payment Detail" = _t, Amount = _t, Quantity = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}}),
    #"Merged Columns" = Table.CombineColumns(#"Changed Type",{"Payment Type", "Payment Detail"},Combiner.CombineTextByDelimiter(":", QuoteStyle.None),"Merged Transaction Type"),
    #"Merged Columns1" = Table.CombineColumns(#"Merged Columns",{"Amount", "Quantity"},Combiner.CombineTextByDelimiter(":", QuoteStyle.None),"Merged Amounts"),
    #"Pivoted Column" = Table.Pivot(#"Merged Columns1", List.Distinct(#"Merged Columns1"[#"Merged Transaction Type"]), "Merged Transaction Type", "Merged Amounts")
in
    #"Pivoted Column"

Lo que esto hace es girar esto:

edhans_0-1598136622021.png

En algo que se parece a esto:

edhans_1-1598136670386.png

Esto no está hecho. No dijiste cómo querías que se manejara la cantidad. Sin embargo, ahora tengo cada cantidad/cantidad en la misma columna (Cargo de producto, Reembolso, etc.) y ahora puede dividir esas columnas en dólares y cantidades, luego convertirlas en valores numéricos. Los mantuve como texto en la línea "Paso cambiado". Si las cantidades son lo mismo, podría descartar las columnas de cantidad adicional. O si "Reembolso" tiene una cantidad de 1 en la primera fila y Los cargos de producto también, deje esas columnas como separadas después de dividirlas.

Avísame si esto te ayuda a empezar. Si no es así, sea más explícito en lo que espera que sea la salida. El ejemplo no cubrió toda la información de la tabla principal.

Cómo utilizar el código M proporcionado en una consulta en blanco:
1) En Power Query, seleccione Nueva fuente y, a continuación, Consulta en blanco
2) En la cinta de opciones Inicio, seleccione el botón "Editor avanzado"
3) Retire todo lo que ve, luego pegue el código M que le he dado en esa caja.
4) Pulse Hecho
5) Consulte este artículo si necesita ayuda para usar este código M en su modelo.



Did I answer your question? Mark my post as a solution!
Did my answers help arrive at a solution? Give it a kudos by clicking the Thumbs Up!

DAX is for Analysis. Power Query is for Data Modeling


Proud to be a Super User!

MCSA: BI Reporting

Helpful resources

Announcements
PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

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