R(recency)F(frequency)M(monetary)
1 R = today()-'订单表'[最后一个订单日期] //计算客户最近一次购买到目前有多少天
2 最后一个订单日期=
var customercode = selected('订单表'[客户编号])
lastorderdate = maxx(
filter('订单表',‘订单表’[客户编号] = customercode,all('订单表'[客户编号])),
'订单表'[订单日期]
)
return lastorderdate
3 F = distinctcount('订单表'[序号])
4 M = sum('订单表'[销售额])
5 计算表 RMF = summarize('订单表','订单表'[客户编号],'订单表'[R],"F",[F],"M",[M]) //按照客户粒度,把最近一次购买到现在的天数,购买的次数和构购买的金额取出来
6 F得分_均值 = if('RFM'[F]>=average('RFM'[F]),2,1) //按照所有客户的F均值比较 //不需要取消F列上的上下文取平均吗?
7 F得分_中值 = IF(‘RFM’[F]>=percentile.exc('RFM'[F],0.5),2,1)
8 R得分_均值 = if('RFM'[R]<=average(RFM[R],2,1)
9 客户分组=
switch(
'RFM'[RFM],
"111","流失客户",
"112","重要挽留客户",
"121","一般保持客户",
"122","重要保持客户",
"211","新客户",
"212","重要发展客户",
"221","一般价值客户",
"222","重要价值客户",
blank()
)
PERCENTILE.EXC(, )
如果 k 为零或空白,则百分点等级 1/(n+1) 返回最小值。 如果为零,则超出范围,并返回错误。
如果 k 为非数字或超出 0 到 1 的范围,则返回错误。
如果 k 不是 1/(n - 1) 的倍数,则 PERCENTILE.EXC 将插入值以确定第 k 个百分位数的值。
当指定百分位数的值在数组中的两个值之间时,PERCENTILE.EXC 将进行插值。 如果它无法为指定的百分位数 k 进行插值,则返回错误。
在已计算的列或行级安全性 (RLS) 规则中使用时,不支持在 DirectQuery 模式下使用此函数。