Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
7 years ago
Solved

Perform Calculation at Specified Level - Customer Churn

Hello!

 

I am new to DAX and looking for any assistance in writing a formula to calculate customer churn. I have one large fact table that contains all data required for this calculation (below).

 

There is more information available in the table then is needed to perform the calculation (i.e. there is a specific dimension that Churn needs to be calculated).

 

This is the dimension I would like to do the calculation:

@ the "Product Group_cd", "Location_Channel_cd", "AssignedSalesPersonName" level

Calculation being if one of the above purchased a unit this month, but did not last year in the same month, then "New Customer"

If one af the above purchased a unit last month py but not this month, the "Lost"

Otherwise "Retained"

 

Any help would be greatly appreciated! 

 

 

 

 

 

 

 

  • Anonymous's avatar
    Anonymous
    7 years ago

    HI Anonymous ,

    You can try to use following measure to check current row status:

    Measure =
    VAR currDate =
        MAX ( Table[Date] )
    VAR LYDate =
        DATE ( YEAR ( currDate ) - 1, MONTH ( currDate ), DAY ( currDate ) )
    VAR LYPurchased =
        CALCULATE (
            COUNTROWS ( Table ),
            FILTER (
                ALLSELECTED ( Table ),
                FORMAT ( Table[Date], "mm/yyyy" ) = FORMAT ( LYDate, "mm/yyyy" )
            ),
            VALUES ( Table[Product Group_cd] ),
            VALUES ( Table[Location_Channel_cd] ),
            VALUES ( Table[AssignedSalesPersonName] )
        )
    VAR prevDate =
        CALCULATE (
            MAX ( Table[Date] ),
            FILTER ( ALLSELECTED ( Table ), [Date] < currDate ),
            VALUES ( Table[Product Group_cd] ),
            VALUES ( Table[Location_Channel_cd] ),
            VALUES ( Table[AssignedSalesPersonName] )
        )
    RETURN
        IF (
            LYPurchased > 0,
            IF (
                FORMAT ( prevDate, "mm/yyyy" ) = FORMAT ( currDate, "mm/yyyy" ),
                "Retained",
                "Lost"
            ),
            "New Customer"
        )
    

    If above not help, please share some sample data for test.

    Regards,

    Xiaoxin Sheng

2 Replies

  • Anonymous's avatar
    Anonymous
    Not applicable

    HI Anonymous ,

    You can try to use following measure to check current row status:

    Measure =
    VAR currDate =
        MAX ( Table[Date] )
    VAR LYDate =
        DATE ( YEAR ( currDate ) - 1, MONTH ( currDate ), DAY ( currDate ) )
    VAR LYPurchased =
        CALCULATE (
            COUNTROWS ( Table ),
            FILTER (
                ALLSELECTED ( Table ),
                FORMAT ( Table[Date], "mm/yyyy" ) = FORMAT ( LYDate, "mm/yyyy" )
            ),
            VALUES ( Table[Product Group_cd] ),
            VALUES ( Table[Location_Channel_cd] ),
            VALUES ( Table[AssignedSalesPersonName] )
        )
    VAR prevDate =
        CALCULATE (
            MAX ( Table[Date] ),
            FILTER ( ALLSELECTED ( Table ), [Date] < currDate ),
            VALUES ( Table[Product Group_cd] ),
            VALUES ( Table[Location_Channel_cd] ),
            VALUES ( Table[AssignedSalesPersonName] )
        )
    RETURN
        IF (
            LYPurchased > 0,
            IF (
                FORMAT ( prevDate, "mm/yyyy" ) = FORMAT ( currDate, "mm/yyyy" ),
                "Retained",
                "Lost"
            ),
            "New Customer"
        )
    

    If above not help, please share some sample data for test.

    Regards,

    Xiaoxin Sheng

    • Anonymous's avatar
      Anonymous
      Not applicable

      Is this possible if I do not have a date table? The table above is the only table I have imported into powerquery.