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
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
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.

Top Solution Authors