Forum Discussion

viggo71's avatar
viggo71
Frequent Visitor
5 years ago
Solved

DAX Formula for repeat rate

Hello,

 

i want to find a user repeat rate on a specific period.

 

Basic data :

date User ID
15/06/2021A
15/06/2021A
15/06/2021B
16/06/2021C
16/06/2021D
18/06/2021E

 

And i want to have :

date Users reiterating users reiterating rate 2 days reiterating rate
15/06/20213133%33%
16/06/2021200%20%
18/06/2021100%0%

 

What's the DAX formula for "2 days reitarting rate", please ?

Thanks

  • Hi viggo71 

     

    First add an Index column to the table to rank the dates.

    Index = RANKX('Table','Table'[date],,ASC,Dense)

    Then create the following measure.

    Measure 2 = 
    VAR _currentDateIndex = MAX('Table'[Index])
    VAR _startDateIndex = _currentDateIndex - 1
    VAR _table = FILTER(ALL('Table'),'Table'[Index]>=_startDateIndex && 'Table'[Index]<=_currentDateIndex)
    VAR _table2 = SUMMARIZE(_table,'Table'[User ID],"Occurrences",COUNT('Table'[User ID]))
    VAR _allrecords = COUNTROWS(_table)
    VAR _repeatedUsers = COUNTROWS(FILTER(_table2,[Occurrences]>1))
    RETURN
    DIVIDE(_repeatedUsers,_allrecords)+0

     

    Regards,
    Community Support Team _ Jing
    If this post helps, please Accept it as the solution to help other members find it.

3 Replies

  • mahoneypat's avatar
    mahoneypat
    Microsoft Employee

    Here's a measure that shows one way to do it.  Replace "Reiterate" with your actual table name.

     

    Two Day Rate =
    VAR thisdate =
        MAX ( Reiterate[date] )
    VAR prevdate =
        CALCULATE ( MAX ( Reiterate[date] ), Reiterate[date] < thisdate )
    VAR result =
        CALCULATE (
            DIVIDE (
                COUNT ( Reiterate[ User ID] ) - DISTINCTCOUNT ( Reiterate[ User ID] ),
                COUNT ( Reiterate[ User ID] )
            ),
            FILTER (
                ALL ( Reiterate[date] ),
                Reiterate[date] <= thisdate
                    && Reiterate[date] >= prevdate
            )
        )
    RETURN
        result

     

     

    Pat

     

  • viggo71's avatar
    viggo71
    Frequent Visitor

    Hi, thanks Pat but it doesn't work. I need a distinct count of duplicate ID on X rolling days.

    Thanks

  • v-jingzhang's avatar
    v-jingzhang
    Community Support

    Hi viggo71 

     

    First add an Index column to the table to rank the dates.

    Index = RANKX('Table','Table'[date],,ASC,Dense)

    Then create the following measure.

    Measure 2 = 
    VAR _currentDateIndex = MAX('Table'[Index])
    VAR _startDateIndex = _currentDateIndex - 1
    VAR _table = FILTER(ALL('Table'),'Table'[Index]>=_startDateIndex && 'Table'[Index]<=_currentDateIndex)
    VAR _table2 = SUMMARIZE(_table,'Table'[User ID],"Occurrences",COUNT('Table'[User ID]))
    VAR _allrecords = COUNTROWS(_table)
    VAR _repeatedUsers = COUNTROWS(FILTER(_table2,[Occurrences]>1))
    RETURN
    DIVIDE(_repeatedUsers,_allrecords)+0

     

    Regards,
    Community Support Team _ Jing
    If this post helps, please Accept it as the solution to help other members find it.