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

Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started

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
PBI_Carousel_NL_June

Fabric Community Update - June 2024

Get the latest Fabric updates from Build 2024, key Skills Challenge voucher deadlines, top blogs, forum posts, and product ideas.

Top Solution Authors