Forum Discussion

nanma94's avatar
nanma94
Icon for Helper III rankHelper III
6 years ago
Solved

Opportunity stage duration

I have an opportunity header table, that stores the latest stage, and I will ultimately want to analyze opportunity cycle time (duration per stage) by owner, territory. 

 

OpportunityIdStageNameOwnerTerritory
14 .Closed Won10T1
23 .Negotiation11T2
32 .Diligence12T1

 

 I also have a opportunity history table, that has the timestamp for each stage:

OpportunityIdCreatedDateStage NameStage #
12/26/20201 .Targeting1
12/27/20202 .Diligence2
12/28/20203 .Negotiation3
12/29/20203 .Negotiation3
13/20/20204 .Closed Won4
13/23/20204 .Closed Won4
13/31/20205 .Grow / Sustain5
24/3/20201 .Targeting1
24/5/20202 .Diligence2
24/10/20203 .Negotiation3
31/5/20201 .Targeting1
31/15/20202 .Diligence2

 

How do I go about calculating the average stage duration, which later I want the flexilble to slice by owner, territory?

Thank you so much!
NM

  • nanma94 try measure below and here is the result.

     

    Days between Stages = 
    VAR __oppyId = SELECTEDVALUE ( Oppy[OpportunityId] )
    VAR __Stage = MAX ( 'Oppy Detail'[Stage #] )
    VAR __StageDate = MAX ( 'Oppy Detail'[CreatedDate] )
    VAR __prevStage = MAX ( __Stage - 1, 1 )
    VAR __prevStageDate = 
    CALCULATE ( 
        MAX ( 'Oppy Detail'[CreatedDate] ),
        ALL ( 'Oppy Detail' ), 
        Oppy[OpportunityId] = __OppyId, 
        'Oppy Detail'[Stage #] = __prevStage 
    )
    RETURN DATEDIFF( __prevStageDate, __StageDate, DAY )

     

     

    Would appreciate Kudos 🙂 if my solution helped.

     

9 Replies

  • Cortana I'm also confused what you are referring too, if you can provide more details how you get to 11 days, it would help.

    • Cortana's avatar
      Cortana
      Icon for Helper IV rankHelper IV

      Look at the created date of stage 4. The opportunity entered stage 4 on 20th March and It entered stage 5 on 31st March. So this opportunity stays 11 days in stage 4, right? 

  • nanma94 which date to pick when oppy has same stage twice, like in your example, oppy #1 has two closed won stages on different dates

    • parry2k's avatar
      parry2k
      Icon for Super User rankSuper User

      nanma94 try measure below and here is the result.

       

      Days between Stages = 
      VAR __oppyId = SELECTEDVALUE ( Oppy[OpportunityId] )
      VAR __Stage = MAX ( 'Oppy Detail'[Stage #] )
      VAR __StageDate = MAX ( 'Oppy Detail'[CreatedDate] )
      VAR __prevStage = MAX ( __Stage - 1, 1 )
      VAR __prevStageDate = 
      CALCULATE ( 
          MAX ( 'Oppy Detail'[CreatedDate] ),
          ALL ( 'Oppy Detail' ), 
          Oppy[OpportunityId] = __OppyId, 
          'Oppy Detail'[Stage #] = __prevStage 
      )
      RETURN DATEDIFF( __prevStageDate, __StageDate, DAY )

       

       

      Would appreciate Kudos 🙂 if my solution helped.

       

      • nanma94's avatar
        nanma94
        Icon for Helper III rankHelper III

        I've had a calculated column that works to average by stage. But this measure provides more flexibility. Thank you so much!

    • nanma94's avatar
      nanma94
      Icon for Helper III rankHelper III

      parry2k  Thank you for looking into this. Yes, It is a data quality issue (I wanted to highlight but forgot to mention) , which I am thinking I will pick the min of earlier stage and max of later stage to get the duration. 

       

      I am going to come back report after I try your solution out. Thank you so much in advance.