Forum Discussion

pateam's avatar
pateam
Frequent Visitor
7 years ago

Rank based on cumulative total

I have operation and values sequence and want to rank them if the cumulative sum of earlier is equal or less than 30.


Data set 

idoperationvalue
1op1 10
2op220
3op330
4op415
5op515
6op610


Expected Outcome

idoperationvaluecumulative valueRank
1op1 10101
2op220301
3op330302
4op415153
5op515303
6op610104

 

Thank you in advance.

3 Replies

  • v-juanli-msft's avatar
    v-juanli-msft
    Community Support

    Hi pateam

    create calculated columns

    cumulative = CALCULATE(SUM(Table1[value]),FILTER(ALL(Table1),[id]<=EARLIER([id])))
    
    int = INT(Table1[cumulative]/30)
    
    earlier = LOOKUPVALUE(Table1[int],Table1[id],Table1[id]-1)
    
    diff = Table1[int]-Table1[earlier]
    
    group = IF(Table1[diff]=1,CALCULATE(SUM(Table1[diff]),FILTER(Table1,Table1[id]<=EARLIER(Table1[id]))),BLANK())
    
    rank = IF(Table1[group]=BLANK(),CALCULATE(FIRSTNONBLANK(Table1[group],1),FILTER(Table1,Table1[id]>EARLIER(Table1[id]))),Table1[group])

     

    If you have more values in this table, you would see all ranks. 

     

     

    Best Regards

    Maggie

    • pateam's avatar
      pateam
      Frequent Visitor

      Dear Maggie,

       

      Thank you very much. struggled few days on this.

    • pateam's avatar
      pateam
      Frequent Visitor

      Dear