Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.
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!
Solved! Go to Solution.
HI @cgoldstein ,
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
HI @cgoldstein ,
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
Is this possible if I do not have a date table? The table above is the only table I have imported into powerquery.
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
97 | |
97 | |
81 | |
77 | |
66 |
User | Count |
---|---|
126 | |
105 | |
103 | |
81 | |
72 |