Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now! Learn more

Reply
Anonymous
Not applicable

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! 

 

SalecCurrent.PNG

 

 

 

 

 

 

1 ACCEPTED SOLUTION
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

View solution in original post

2 REPLIES 2
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
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.

 

 

Helpful resources

Announcements
Power BI DataViz World Championships

Power BI Dataviz World Championships

The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now!

December 2025 Power BI Update Carousel

Power BI Monthly Update - December 2025

Check out the December 2025 Power BI Holiday Recap!

FabCon Atlanta 2026 carousel

FabCon Atlanta 2026

Join us at FabCon Atlanta, March 16-20, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.