Forum Discussion

art3c's avatar
art3c
New Member
9 years ago
Solved

Recursive query

Hello,

 

It is possible to execute recursive query (something similar to SQL CTE recursive)? I have table with following data (there is no limit of data rows count):

 

 

-0,5
-0,5
0,25
-0,5

 

My goal is to get previous row result and add to it value from current row with rule: if result < 0,5 then result= 0,5 and if result> 3 then result = 3.

So the final table should be:

 

ValueResultPrevious row Result + Current row Value
-0,51Previous row is null so we take initial value '1'
-0,50,5(1 + (- 0,5))
0,250,75(0,5 + 0,25)
-0,50,5(0,75 + (-0,5))
  • Piece of cake for Power Query's List.Accumulate:

     

    let
        Source = Table1,
        ResultLists = List.Accumulate(List.Skip(Source[Value]),{1},(Result,Value) => Result & {List.Min({3,List.Max({0.5,List.Last(Result) + Value})})}),
        TableFromColumns = Table.FromColumns({Source[Value],ResultLists},type table[Value = number, Result = number])
    in
        TableFromColumns

     

    I share the doubt regarding the first result: according to the information provided, it should be 1, regardless of the first value.

    I would expect some initial value (e.g. 1.5) and the first result would be that initial value plus the first value (1.5 - 0.5 = 1), not lower than 0.5 and not higher than 3.0.

    Anyhow the code is based on the information provided, so the first value is skipped.

     

    A screenshot with the result from a larger sample:

6 Replies

  • CahabaData's avatar
    CahabaData
    Memorable Member

    yes you will find many examples of running totals.  the arbitrary rule of starting with 1 is the only twist that I see.

    • art3c's avatar
      art3c
      New Member

      It's not that easy I think. I need to calculate value of Result column based on previous row Result column value. That's why recursion could be proper solution, but I dont't know if it's possible with Power BI.

      • MarcelBeug's avatar
        MarcelBeug
        Community Champion

        Piece of cake for Power Query's List.Accumulate:

         

        let
            Source = Table1,
            ResultLists = List.Accumulate(List.Skip(Source[Value]),{1},(Result,Value) => Result & {List.Min({3,List.Max({0.5,List.Last(Result) + Value})})}),
            TableFromColumns = Table.FromColumns({Source[Value],ResultLists},type table[Value = number, Result = number])
        in
            TableFromColumns

         

        I share the doubt regarding the first result: according to the information provided, it should be 1, regardless of the first value.

        I would expect some initial value (e.g. 1.5) and the first result would be that initial value plus the first value (1.5 - 0.5 = 1), not lower than 0.5 and not higher than 3.0.

        Anyhow the code is based on the information provided, so the first value is skipped.

         

        A screenshot with the result from a larger sample:

  • swimming123's avatar
    swimming123
    Regular Visitor

    Hi there,

     

    I just want to do a very simple loop a list and each of loop add a column to table; after many seacrh and test , still don't know how to do it. Could you give a simple example? Thank you very much.