Forum Discussion
cursive calculation forecast
Hi,
Can I do something like this in dax or powerquery?
The formular should calculate the forecast using previous months sales and previous month forecast. If no sales in previous month it should use forecast. I have tried to illustrate it below.
ImkeF, I know you have done something very similar to this https://www.mrexcel.com/forum/power-bi/948513-conditional-recursive-calculation-%5bneed-help%5d.html so maybe you can see the light? I tried to use generate.list, but dit manage to go all the way.
Hope you can assist me.
This might work:
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjQwMFCK1QEyjGAMUyjDCCalgI2MBQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Sales = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Sales", type number}}), AddIndex = Table.Buffer(Table.AddIndexColumn(#"Changed Type", "Row", 1, 1)), ListGenerate = List.Generate(()=> [Counter=1, Forecast=AddIndex[Sales]{0}], each [Counter] <=Table.RowCount(AddIndex), each [Forecast = if AddIndex{[Row=Counter]}[Sales]<>null then [Forecast]*0.7+AddIndex{[Row=Counter-1]}[Sales]*0.3 else [Forecast], Counter = [Counter]+1 ] ), Forecast = Table.FromRecords(ListGenerate), #"Merged Queries" = Table.NestedJoin(AddIndex,{"Row"},Forecast,{"Counter"},"Forecast.1",JoinKind.LeftOuter), #"Expanded Forecast.1" = Table.ExpandTableColumn(#"Merged Queries", "Forecast.1", {"Forecast"}, {"Forecast"}) in #"Expanded Forecast.1"
7 Replies
- kaushikdResolver II
Hi SAM190370
This is possible in DAX, you just have to add a calculated column
Step 1. R.Click on the table and click New column
Step 2. In the Formula bar just add this Dax code---->Column 1 = IF('Sample'[Sales],'Sample'[Sales],'Sample'[Forecast])
You can also do other calculation if required.
if this is what you required then dont forget to like this post.
- ImkeFCommunity Champion
This might work:
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjQwMFCK1QEyjGAMUyjDCCalgI2MBQA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Sales = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Sales", type number}}), AddIndex = Table.Buffer(Table.AddIndexColumn(#"Changed Type", "Row", 1, 1)), ListGenerate = List.Generate(()=> [Counter=1, Forecast=AddIndex[Sales]{0}], each [Counter] <=Table.RowCount(AddIndex), each [Forecast = if AddIndex{[Row=Counter]}[Sales]<>null then [Forecast]*0.7+AddIndex{[Row=Counter-1]}[Sales]*0.3 else [Forecast], Counter = [Counter]+1 ] ), Forecast = Table.FromRecords(ListGenerate), #"Merged Queries" = Table.NestedJoin(AddIndex,{"Row"},Forecast,{"Counter"},"Forecast.1",JoinKind.LeftOuter), #"Expanded Forecast.1" = Table.ExpandTableColumn(#"Merged Queries", "Forecast.1", {"Forecast"}, {"Forecast"}) in #"Expanded Forecast.1"