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

Get certified in Microsoft Fabric—for free! For a limited time, get a free DP-600 exam voucher to use by the end of 2024. Register now

Reply
Syndicate_Admin
Administrator
Administrator

¿Es posible utilizar un valor en una fila para calcular el siguiente valor en la misma fila?

Necesito hacer un cálculo que establezca el primer valor como 100 y los demás se calculan en función de la variación mes a mes.

Es un cálculo simple, pero realmente no sé cómo hacerlo en power bi. Ni siquiera sé si es posible hacer algo así debido a la forma en que funciona power bi.

En Excel sería un cálculo realmente sencillo.

Lucaswolff_0-1643313726608.png

Aprecio si alguien podría ayudarme.

mespreciovariación100 base
Dic/191-100
ene/201,3434%134
Feb/201,437%143
mar/201,430%143
abr/201,430%143
Mayo/201,430%143
Jun/201,430%143
jul/201,55%150
ago/201,50%150
conjunto/201,50%150
salida/201,50%150
nov/201,50%150
Dic/201,50%150
2 ACCEPTED SOLUTIONS
Syndicate_Admin
Administrator
Administrator

@Lucaswolff ,

En DAX no es posible hacer valores recursivos, por lo que calcular un valor basado en el cálculo de sí mismo. ¿Ha referido esto es fácil en Excel, pero DAX no lo permite?

En Power Query puedes hacerlo revisando los siguientes artículos con algunos ejemplos que puedes ajustar a tus necesidades:

https://www.thebiccountant.com/2017/09/26/recursion-m-beginners/

https://www.thepoweruser.com/2019/07/01/recursive-functions-in-power-bi-power-query/

https://xcelanz.com/recursive-functions-in-power-query/

View solution in original post

Hola @Lucaswolff.


Puede hacerlo fácilmente en el editor de power query. Para acceder a la fila anterior (o siguiente), puede agregar un índice desde 0 y un índice desde 1 y, a continuación, realizar una combinación para unir la tabla consigo misma, en esas dos columnas. Creé un pbix aquí que puedes descargar.

Empecé con estos datos:

SteveHailey_0-1643637900561.png

y terminó con esto:

SteveHailey_1-1643637919176.png

Puede recorrer cada paso en el panel Pasos aplicados para ver cómo funciona.

SteveHailey_2-1643637943310.png

Si tiene alguna pregunta, hágamelo saber y estaré encantado de revisarla con más detalle.


También pegaré el código M a continuación, aunque en este caso creo que sería más instructivo abrir el .pbix y seguir los pasos, porque todo se hizo a través de la GUI, sin código M personalizado.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WSkmt0je0VNJRMlSK1YlWykrM0zcyAHH1jE3AImmpZTARE2OwSG5iEZpIYhK6SG5iJppIVmkehkgOTMQUYkx6PqpAcWoJqkB+KZpAXn4ZqgDIPwiBWAA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [month = _t, price = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"price", type number}}),
    #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type),
    #"Added Index1" = Table.AddIndexColumn(#"Added Index", "Index.1", 1, 1, Int64.Type),
    #"Merged Queries" = Table.NestedJoin(#"Added Index1", {"Index"}, #"Added Index1", {"Index.1"}, "Added Index1", JoinKind.LeftOuter),
    #"Expanded Added Index1" = Table.ExpandTableColumn(#"Merged Queries", "Added Index1", {"price"}, {"Added Index1.price"}),
    #"Sorted Rows" = Table.Sort(#"Expanded Added Index1",{{"Index", Order.Ascending}}),
    #"Renamed Columns" = Table.RenameColumns(#"Sorted Rows",{{"Added Index1.price", "Price from previous row"}}),
    #"Added Custom" = Table.AddColumn(#"Renamed Columns", "variation", each ([price] - [Price from previous row]) / [Price from previous row]),
    #"Changed Type1" = Table.TransformColumnTypes(#"Added Custom",{{"variation", type number}}),
    #"Added Custom1" = Table.AddColumn(#"Changed Type1", "100 base", each if [Price from previous row] is null then 100 else ([Price from previous row] * 100 ) * ( 1 + [variation] )),
    #"Removed Other Columns" = Table.SelectColumns(#"Added Custom1",{"month", "price", "variation", "100 base"}),
    #"Changed Type2" = Table.TransformColumnTypes(#"Removed Other Columns",{{"variation", Percentage.Type}, {"100 base", Int64.Type}})
in
    #"Changed Type2"

- Esteban

View solution in original post

3 REPLIES 3
Syndicate_Admin
Administrator
Administrator

@Lucaswolff ,

En DAX no es posible hacer valores recursivos, por lo que calcular un valor basado en el cálculo de sí mismo. ¿Ha referido esto es fácil en Excel, pero DAX no lo permite?

En Power Query puedes hacerlo revisando los siguientes artículos con algunos ejemplos que puedes ajustar a tus necesidades:

https://www.thebiccountant.com/2017/09/26/recursion-m-beginners/

https://www.thepoweruser.com/2019/07/01/recursive-functions-in-power-bi-power-query/

https://xcelanz.com/recursive-functions-in-power-query/

Hola @Lucaswolff.


Puede hacerlo fácilmente en el editor de power query. Para acceder a la fila anterior (o siguiente), puede agregar un índice desde 0 y un índice desde 1 y, a continuación, realizar una combinación para unir la tabla consigo misma, en esas dos columnas. Creé un pbix aquí que puedes descargar.

Empecé con estos datos:

SteveHailey_0-1643637900561.png

y terminó con esto:

SteveHailey_1-1643637919176.png

Puede recorrer cada paso en el panel Pasos aplicados para ver cómo funciona.

SteveHailey_2-1643637943310.png

Si tiene alguna pregunta, hágamelo saber y estaré encantado de revisarla con más detalle.


También pegaré el código M a continuación, aunque en este caso creo que sería más instructivo abrir el .pbix y seguir los pasos, porque todo se hizo a través de la GUI, sin código M personalizado.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WSkmt0je0VNJRMlSK1YlWykrM0zcyAHH1jE3AImmpZTARE2OwSG5iEZpIYhK6SG5iJppIVmkehkgOTMQUYkx6PqpAcWoJqkB+KZpAXn4ZqgDIPwiBWAA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [month = _t, price = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"price", type number}}),
    #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1, Int64.Type),
    #"Added Index1" = Table.AddIndexColumn(#"Added Index", "Index.1", 1, 1, Int64.Type),
    #"Merged Queries" = Table.NestedJoin(#"Added Index1", {"Index"}, #"Added Index1", {"Index.1"}, "Added Index1", JoinKind.LeftOuter),
    #"Expanded Added Index1" = Table.ExpandTableColumn(#"Merged Queries", "Added Index1", {"price"}, {"Added Index1.price"}),
    #"Sorted Rows" = Table.Sort(#"Expanded Added Index1",{{"Index", Order.Ascending}}),
    #"Renamed Columns" = Table.RenameColumns(#"Sorted Rows",{{"Added Index1.price", "Price from previous row"}}),
    #"Added Custom" = Table.AddColumn(#"Renamed Columns", "variation", each ([price] - [Price from previous row]) / [Price from previous row]),
    #"Changed Type1" = Table.TransformColumnTypes(#"Added Custom",{{"variation", type number}}),
    #"Added Custom1" = Table.AddColumn(#"Changed Type1", "100 base", each if [Price from previous row] is null then 100 else ([Price from previous row] * 100 ) * ( 1 + [variation] )),
    #"Removed Other Columns" = Table.SelectColumns(#"Added Custom1",{"month", "price", "variation", "100 base"}),
    #"Changed Type2" = Table.TransformColumnTypes(#"Removed Other Columns",{{"variation", Percentage.Type}, {"100 base", Int64.Type}})
in
    #"Changed Type2"

- Esteban

Muy bien explicado. ¡¡¡Muchas gracias!!!

Helpful resources

Announcements
November Carousel

Fabric Community Update - November 2024

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

Live Sessions with Fabric DB

Be one of the first to start using Fabric Databases

Starting December 3, join live sessions with database experts and the Fabric product team to learn just how easy it is to get started.

Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Early Bird pricing ends December 9th.

Nov PBI Update Carousel

Power BI Monthly Update - November 2024

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

Top Solution Authors