Starting December 3, join live sessions with database experts and the Microsoft product team to learn just how easy it is to get started
Learn moreGet 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
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.
Aprecio si alguien podría ayudarme.
mes | precio | variación | 100 base |
Dic/19 | 1 | - | 100 |
ene/20 | 1,34 | 34% | 134 |
Feb/20 | 1,43 | 7% | 143 |
mar/20 | 1,43 | 0% | 143 |
abr/20 | 1,43 | 0% | 143 |
Mayo/20 | 1,43 | 0% | 143 |
Jun/20 | 1,43 | 0% | 143 |
jul/20 | 1,5 | 5% | 150 |
ago/20 | 1,5 | 0% | 150 |
conjunto/20 | 1,5 | 0% | 150 |
salida/20 | 1,5 | 0% | 150 |
nov/20 | 1,5 | 0% | 150 |
Dic/20 | 1,5 | 0% | 150 |
Solved! Go to Solution.
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:
y terminó con esto:
Puede recorrer cada paso en el panel Pasos aplicados para ver cómo funciona.
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
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:
y terminó con esto:
Puede recorrer cada paso en el panel Pasos aplicados para ver cómo funciona.
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!!!
Starting December 3, join live sessions with database experts and the Fabric product team to learn just how easy it is to get started.
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Early Bird pricing ends December 9th.