Forum Discussion

brunoiadocicco's avatar
brunoiadocicco
Frequent Visitor
6 years ago
Solved

Simple recursive calculation - Power Query

Hello,

I'm trying to build the following calculation in Power Query:

dtpt' = t x s (d-1)s = s (d-1) + p + t'
0                        -                         3.600.000
11,20%         (200.000)                 43.200                      3.443.200
20,60%         (300.000)                 20.659                      3.163.859
30,40%         (700.000)                 12.655                      2.476.515
40,50%         (650.000)                 12.383                      1.838.897


Values in black are inputs and values in red are the results I want to get.

In excel is very simple, basically I want to get the previous row (s{d-1}), calculate the correction (t' = s{d-1} x t) and then calculate the next s (s{d-1} + p + t'), and repeat. But, I'm having problems building this logic into M language in Power Query. Someone could help, please?

  • Greg_DecklerHello Greg

    Thank you for your reply and for sharing those articles, it help me a lot!

    Still struggle a little to refer the values I wanted to use in calculations, but I manage to solve this problem creating a new column of lists instead (if you know a better way to do it, I would love to hear it).

    Here is the code I used, in case someone else want to know:

    let
        fxBalance = (InitialValue,Payments,InterestRate,Counter,Index) =>
    
        let
    
        Correction = if InterestRate{Counter-1} = null then 0 else InitialValue*InterestRate{Counter-1},
    
        FinalBalance = if InitialValue - Payments{Counter-1} + Correction < 0 then 0 else InitialValue - Payments{Counter-1} + Correction,
    
        Return = if FinalBalance < 0 or Counter >= Index then FinalBalance else @fxBalance(FinalBalance,Payments,InterestRate,Counter+1,Index)
    
        in
    
        Return
    
    in
        fxBalance


    Using the function:

    Table.AddColumn(#"Personalização Adicionada6", "Personalizar.1", each fxBalance([Initial Value],[Payments List],[Interest Rate List],1,[Index]))


    The results:


    ty

2 Replies