Microsoft is giving away 50,000 FREE Microsoft Certification exam vouchers. Get Fabric certified for FREE! Learn more
Hi Experts,
I'm building a RFM Model, a Dynamic Customer Segmentation Model.
Formerly I made it in method 1 (upper part) and it is successful, but now I would like to make it advanced to use method 2 (lower part). the result would be vary with the selected category and selected period.
Let me explain the model below first.
Method 1
There are 3 factors Recency, Frequency and Monetory in this model, each factor split into 3 rank
In a selected period and selected cateogry,
A customer has transaction less then 30day treat as R1, 31-90 days as R2, >90 day as R3
The customer has transaction in the selected period, frequency larger than 25 treat as F1, so on...
The customer spending money larger than 10001 treat as M1, so on...
Then it will come out maximum 27 (3x3x3) combinations as the picture shown.
The summary table (right) can be interactive with the Detail Table (left) as well.
Method 2
Now I would like to make an advanced model.
In method 2 I would not provide a fixed criteria, but split each 3 factors into quartiles instead.
So that, for example 50days is selected, Recency for 0-10days treast as R4, 11-20 as R3... etc
Frequency and Monetary are similar case.
The details table is OK, however it failed to make the Summary table.
I did think that the case would be similar to method 1, but it's not.
How should I do to make the Summary table, it can also have interaction to Details table? Thank you so much!
PBIX: RFM Demo v2.pbix
Expected summary result (for selection period 1/1/19 to 31/12/19): METHOD 2 - DETAILS.xlsx
Solved! Go to Solution.
Hi @Anonymous ,
Because you applied the [Active Customers #] <> Blank filter in this visual,
you need to adjust the formula to:
Active Customers #2 =
CALCULATE(
DISTINCTCOUNT('FactSales'[Customer ID]),
FILTER(
FILTER ( VALUES ( DimCustomer[Customer ID] ), [Active Customers #] <> BLANK () ),
[Recency Score] >= MIN (Seg2_Recency[Min]) && [Recency Score] <= MAX (Seg2_Recency[Max]) &&
[Frequency Score] >= MIN (Seg2_Frequency[Min]) && [Frequency Score] <= MAX ( Seg2_Frequency[Max] ) &&
[Monetary Score] >= MIN (Seg2_Monetary[Min]) && [Monetary Score] <= MAX ( Seg2_Monetary[Max] )
)
)
If the problem is still not resolved, please provide detailed error information or the expected result you expect. Let me know immediately, looking forward to your reply.
Best Regards,
Winniz
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
Hi @Anonymous ,
Because you applied the [Active Customers #] <> Blank filter in this visual,
you need to adjust the formula to:
Active Customers #2 =
CALCULATE(
DISTINCTCOUNT('FactSales'[Customer ID]),
FILTER(
FILTER ( VALUES ( DimCustomer[Customer ID] ), [Active Customers #] <> BLANK () ),
[Recency Score] >= MIN (Seg2_Recency[Min]) && [Recency Score] <= MAX (Seg2_Recency[Max]) &&
[Frequency Score] >= MIN (Seg2_Frequency[Min]) && [Frequency Score] <= MAX ( Seg2_Frequency[Max] ) &&
[Monetary Score] >= MIN (Seg2_Monetary[Min]) && [Monetary Score] <= MAX ( Seg2_Monetary[Max] )
)
)
If the problem is still not resolved, please provide detailed error information or the expected result you expect. Let me know immediately, looking forward to your reply.
Best Regards,
Winniz
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
Thanks so much!
btw, I think you have typo, I change to dimCustomer instead then it works,
You can use DAX Studio to examine your measures and optimize their performance. For Active Customers #2 you can vastly improve performance by avoiding recalculation of your measures.
Active Customers #2 =
var r = [Recency Score]
var f = [Frequency Score]
var m = [Monetary Score]
return CALCULATE(
DISTINCTCOUNT('FactSales'[Customer ID]),
FILTER(
VALUES('FactSales'[Customer ID]),
r >= MIN (Seg2_Recency[Min]) && r <= MAX (Seg2_Recency[Max]) &&
f >= MIN (Seg2_Frequency[Min]) && f <= MAX ( Seg2_Frequency[Max] ) &&
f >= MIN (Seg2_Monetary[Min]) && f <= MAX ( Seg2_Monetary[Max] )
)
)
User | Count |
---|---|
105 | |
69 | |
48 | |
47 | |
47 |