PowerBI企业运营分析——RFM模型分析
PowerBI企业运营分析——RFM模型分析
欢迎来到Powerbi小课堂,在竞争激烈的市场环境中,企业运营分析平台成为提升竞争力的核心工具。
借助多源数据的整合与关键指标的实时监控,该平台能精确剖析业务状况,迅速捕捉问题与机遇。其可视化看板和智能预警功能,帮助管理者直观掌握运营动态,优化资源分配;而深度分析模块则能挖掘潜在趋势,支撑战略决策。无论是成本优化、风险控制,还是市场开拓,平台都能提供坚实的数据支撑,推动企业迈向精细化运营与可持续发展的道路。
本期课程将继续聚焦于整合前期分散的知识点,旨在为您构建清晰的模板搭建框架。课程内容包括RFM模型的均值算法与自定义算法,以及动态SVG配色公式,其中自定义算法的创建是本节课的重点。课程难度再度升级,请紧跟步伐,切勿掉队。
想要一份这样的可视化看板吗?想学吗?我教你呀!
一、案例背景:
我司作为国内一家大型服装电商企业,业务范围涵盖男装、女装、童装和配饰。我们正全力开发企业运营分析系统,利用技术手段达成业绩提升、指标监控、绩效考核、客户维护开发与企业发展预测等目标,推动数据共享,优化流程,从而加快决策与运营效率,合理配置资源,加强风险控制,为企业的可持续发展提供强大动力。
二、设计思路:
通过财务、产品、客户、盈亏预测精准掌控企业发展方向,建立科学的考核机制,并通过控制变动成本,优化企业盈利。
(1)准备基础数据
(2)数据清洗
(3)建立关系视图
(4)个性美化设计
(5)数据建模(度量值)
(6)制作可视化报告
★数据建模
1、RFM模型分类表创建
主页选项卡点击输入数据功能,如下图内容输入数据,并命名为“RFM-模型分类”
2、自定义分析维度创建
公式:
RFM分析维度 = DATATABLE("分析方法", STRING , "序号" , INTEGER , { { "按平均值" , 1 } ,{ "按自定义" , 2 } })
公式逻辑解析:
DATATABLE函数:这是Power Query中用于创建内存数据表的函数。
1)、参数说明:
第一个参数是列名列表:这里定义了两列
第一列名为"分析方法",数据类型为STRING(文本类型)
第二列名为"序号",数据类型为INTEGER(整数类型)
2)、数据内容:
大括号{}内包含的是数据行,每行用大括号{}表示:
第一行:{"按平均值", 1}
"分析方法"列值为"按平均值"
"序号"列值为1
第二行:{"按自定义", 2}
"分析方法"列值为"按自定义"
"序号"列值为2
3)、用途:
这个表定义了一个RFM分析方法的选项维度:
方法1:"按平均值" - 表示使用平均值作为RFM分组的阈值
方法2:"按自定义" - 表示使用用户自定义的值作为RFM分组的阈值
3、自定义分阈值创建
建模选项卡选择新建参数功能,选择数值范围,创建三个阈值,并将对应切片器添加到可视化页面
公式:
RFM-金额 = GENERATESERIES(100, 100000, 100)RFM-天数 = GENERATESERIES(1, 180, 1)RFM次数 = GENERATESERIES(1, 20, 1)
公式逻辑解析:
按照公式中的参数,输入最小值,最大值和增量值
4、度量值创建
公式:
F 消费次数 = [订单数量]M 消费金额 = [销售金额]
公式逻辑解析:
将度量值订单数量和销售金额直接引用,作为F和M值的基值使用
公式:
F 消费次数平均值0 = AVERAGEX( ALLSELECTED( '维度-客户' ) , [F 消费次数] )M 消费金额平均值0 = AVERAGEX( ALLSELECTED( '维度-客户' ) , [M 消费金额] )
公式逻辑解析:
1. ALLSELECTED( '维度-客户' )
作用:返回当前筛选上下文下用户手动选择的客户(忽略某些筛选器,但保留切片器、交叉筛选等交互式选择)。
示例:
如果用户在报表上使用切片器筛选了"北京"的客户,ALLSELECTED 会返回这些客户,而忽略其他可能的筛选(如视觉对象内部的筛选)。
2. AVERAGEX( ... , [F 消费次数] )
作用:对 ALLSELECTED 返回的每一行客户数据,计算 [F 消费次数] 的平均值。
AVERAGEX 与 AVERAGE 的区别:
AVERAGE 直接计算列的平均值,但可能受筛选器影响。
AVERAGEX 更灵活,可以遍历表(这里是 ALLSELECTED 返回的客户表),逐行计算表达式(这里是 [F 消费次数]),再求平均。
公式:
F 消费次数平均值 = VARB = MIN ('RFM分析维度'[序号] )VARC = SWITCH( TRUE() ,B = 1 , [F 消费次数平均值0] ,B = 2 , 'RFM次数'[RFM-次数 值] ,BLANK() )RETURNC
M 消费金额平均值 = VARB = MIN ('RFM分析维度'[序号] )VARC = SWITCH( TRUE() ,B = 1 , [M 消费金额平均值0] ,B = 2 , 'RFM-金额'[RFM-金额 值],BLANK() )RETURNC
公式逻辑解析:
1. 变量定义
VAR B = MIN('RFM分析维度'[序号])
作用:获取用户选择的RFM分析方法对应的序号(1或2)。
细节:
'RFM分析维度'[序号] 是之前创建的参数表(1=按平均值,2=按自定义)。
用 MIN 确保即使多选也返回最小值(但通常参数表是单选,所以直接取唯一值)。
2. 动态逻辑判断
VAR C = SWITCH(TRUE(), ...)
作用:根据变量 B 的值(1或2),选择不同的计算逻辑。
参数解析:
B = 1 → 返回 [F 消费次数平均值0]
(即之前定义的 AVERAGEX(ALLSELECTED(...)),所有选定客户的消费次数平均值)。
B = 2 → 返回 'RFM次数'[RFM-次数 值]
(用户自定义的阈值,可能来自手动输入或另一个参考表)。
默认 → 返回 BLANK()(兜底逻辑,通常不会触发)。
3. 返回值
RETURN C
最终返回变量 C 的结果,即根据用户选择动态计算的值。
公式:
F 值 = SWITCH( TRUE() ,[F 消费次数] == BLANK() , BLANK() , [F 消费次数] > [F 消费次数平均值] , 1 , 0 )
M 值 = SWITCH( TRUE() ,[M 消费金额] == BLANK() , BLANK() , [M 消费金额] > [M 消费金额平均值] , 1 , 0 )
公式逻辑解析:
SWITCH(TRUE(), ...)
SWITCH 函数通常按 精确匹配 工作,但通过首参数 TRUE(),改为按 条件判断(类似 IF-ELSE 链)。
[F 消费次数] == BLANK(), BLANK()
条件:如果客户的 [F 消费次数] 为空(无消费记录)。
结果:返回 BLANK()(避免无消费客户干扰分析)。
[F 消费次数] > [F 消费次数平均值], 1
条件:如果消费次数 高于 平均消费次数。
结果:返回 1(标记为“高频率客户”)。
0
默认情况:如果消费次数 不高于 平均值,返回 0(“低频率客户”)。
公式:
R 最近消费日期 = MAX( '事实-订单表'[订单日期] )
公式逻辑解析:
MAX 函数
作用:返回指定列中的最大值(对于日期列,即最近的日期)。
上下文:计算受当前筛选上下文影响(如按客户ID筛选时,返回该客户的最近订单日期)。
公式:
R 最近1次消费日期 = MAXX( ALLSELECTED( '事实-订单表' ),'事实-订单表'[订单日期] )
公式逻辑解析:
ALLSELECTED('事实-订单表'):
返回当前报表上下文中用户显式选择的所有订单数据
会忽略某些内部筛选器,但保留用户通过切片器、筛选器等交互操作设置的筛选条件
MAXX()函数:
迭代第一个参数(表)中的每一行
对每一行计算第二个参数(表达式)的值
返回所有计算结果中的最大值
对于日期列,最大值即最近的日期
公式:
R 间隔天数 = DATEDIFF( MAX( '事实-订单表'[订单日期] ) , [R 最近1次消费日期] , DAY )
公式逻辑解析:
MAX('事实-订单表'[订单日期]):
返回当前分析范围内的最大订单日期(即分析截止日)
这个日期代表你分析的时间范围终点(如分析"2023年全年"时,就是2023-12-31)
[R 最近1次消费日期]:
这是一个预先计算的度量值,表示客户最后一次消费的日期
通常用类似MAXX(FILTER(...))或LASTDATE()的公式计算
DATEDIFF()函数:
计算两个日期之间的差值
参数1:开始日期(分析截止日)
参数2:结束日期(客户最后消费日)
参数3:时间单位(DAY表示按天计算)
公式:
R 间隔天数平均值0 = AVERAGEX( ALLSELECTED( '维度-客户' ) , [R 间隔天数] )
公式逻辑解析:
ALLSELECTED('维度-客户'):
返回当前报表上下文中用户显式选择的所有客户数据
保留用户通过切片器、筛选器等交互操作设置的筛选条件
忽略某些内部筛选器,确保计算基于用户选择的完整客户集
AVERAGEX()函数:
迭代第一个参数(表)中的每一行(此处是每个客户)
对每一行计算第二个参数(表达式)的值(此处是每个客户的[R 间隔天数])
返回所有计算结果的平均值
公式:
R 间隔天数平均值 = VARB = MIN ('RFM分析维度'[序号] )VARC = SWITCH( TRUE() ,B = 1 , [R 间隔天数平均值0] ,B = 2 , 'RFM-天数'[RFM-天数 值] ,BLANK() )RETURNC
公式逻辑解析:
变量B:
MIN('RFM分析维度'[序号])获取用户在RFM分析维度表中选择的选项序号
RFM分析维度表通常包含:
序号1:"按平均值"分组
序号2:"按自定义值"分组
变量C:
使用SWITCH函数根据B的值返回不同结果
TRUE()作为SWITCH的首参数,使其按条件判断而非精确匹配工作
条件分支:
当B=1时:返回[R 间隔天数平均值0](自动计算的平均间隔天数)
当B=2时:返回'RFM-天数'[RFM-天数 值](用户自定义的阈值)
默认返回BLANK()
公式:
R 值 = SWITCH( TRUE() ,[R 间隔天数] == BLANK() , BLANK() , [R 间隔天数] < [R 间隔天数平均值] , 1 , 0 )
公式逻辑解析:
SWITCH(TRUE(),...):
使用SWITCH函数进行条件判断,TRUE()作为第一个参数使其按条件而非精确匹配工作
条件分支:
第一条件:[R 间隔天数] == BLANK()
结果:返回BLANK()
作用:排除没有购买记录的客户(注释已说明)
第二条件:[R 间隔天数] < [R 间隔天数平均值]
结果:返回1
作用:间隔天数小于基准值的客户得1分(高活跃度)
默认情况:返回0
作用:间隔天数大于等于基准值的客户得0分(低活跃度)
关键指标:
[R 间隔天数]: 客户最近一次消费距分析截止日的天数
[R 间隔天数平均值]: 基准值(可能是动态平均值或自定义阈值)
公式:
F 动态 = IF([RFM 类型]INVALUES('RFM-模型分类'[类型]) , [F 消费次数] )M 动态 = IF([RFM 类型]INVALUES('RFM-模型分类'[类型]) , [M 消费金额] ) R 动态 = IF([RFM 类型]INVALUES('RFM-模型分类'[类型]) , [R 间隔天数] )
公式逻辑解析:
IF函数:
基本结构:IF(条件, 结果)(省略了第三个参数,默认为BLANK())
当条件为TRUE时返回[R 间隔天数],否则返回BLANK()
条件部分:
[RFM 类型] IN VALUES('RFM-模型分类'[类型])
检查当前客户的[RFM 类型]是否存在于'RFM-模型分类'表的[类型]列中
VALUES()函数返回当前上下文中的唯一值列表
返回值:
条件满足时:返回该客户的[R 间隔天数]
条件不满足时:返回BLANK()(隐式)
公式:
RFM 值 = [R 值] & [F 值] & [M 值]
公式逻辑解析:
连接RFM值
公式:
RFM 类型 = VARRFM1 = [RFM 值]RETURNCALCULATE( VALUES( 'RFM-模型分类'[类型] ) , 'RFM-模型分类'[RFM] = RFM1 )
公式逻辑解析:
变量RFM1:
存储当前客户的[RFM 值],这是一个三位的字符串(如"111"),其中:
第一位:R值(Recency)
第二位:F值(Frequency)
第三位:M值(Monetary)
CALCULATE函数:
修改筛选上下文,在'RFM-模型分类'表中查找匹配的记录
VALUES函数:
返回'RFM-模型分类'[类型]列在当前筛选下的唯一值
由于筛选条件是精确匹配RFM值,理论上应只返回一个分类标签
筛选条件:
'RFM-模型分类'[RFM] = RFM1
在分类表中查找与客户RFM值完全匹配的记录
公式:
RFM客户数量 = CALCULATE( [客户数量] , FILTER( ALLSELECTED( '维度-客户' ) , [RFM 类型] = SELECTEDVALUE( 'RFM-模型分类'[类型]) ))
公式逻辑解析:
CALCULATE函数:
修改筛选上下文,计算满足条件的客户数量
第一个参数[客户数量]是基础度量值(如COUNTROWS('维度-客户'))
FILTER函数:
筛选ALLSELECTED('维度-客户')表中的客户
保留满足条件的客户行
筛选条件:
[RFM 类型] = SELECTEDVALUE('RFM-模型分类'[类型])
只选择RFM类型等于当前选定分类的客户
ALLSELECTED函数:
保留用户通过切片器等交互选择的筛选上下文
确保计算基于用户当前选择的客户范围
公式:
RFM客户数量占比 = DIVIDE( [RFM客户数量] , [客户数量])
公式逻辑解析:
DIVIDE函数:
安全除法,自动处理分母为零的情况(默认返回空值)
比直接使用/运算符更健壮
语法:DIVIDE(分子, 分母[, 替代值])(此处省略了第三个参数)
参数说明:
分子:[RFM客户数量] - 符合当前选定RFM分类的客户数量
分母:[客户数量] - 总客户数量(在相同筛选上下文中)
公式:
RFM类型颜色 = SWITCH(TRUE(),[RFM 类型]="重要价值客户","#FF0000",[RFM 类型]="重要唤回客户","#00FF00",[RFM 类型]="重要深耕客户","#FFFF00",[RFM 类型]="重要挽留客户","#00FFFF",[RFM 类型]="一般价值客户","#FFC0CB",[RFM 类型]="一般唤回客户","#800080",[RFM 类型]="一般深耕客户","#FFA500",[RFM 类型]="一般挽留客户","#0000FF",BLANK())
公式逻辑解析:
SWITCH(TRUE(),...):
使用条件判断模式而非精确匹配模式
按顺序检查每个条件,返回第一个匹配的结果
颜色编码规则:
每种RFM类型对应一个十六进制颜色代码
颜色选择通常遵循以下原则:
红色(#FF0000):高价值客户(需要重点关注)
绿色(#00FF00):需要唤回的客户
黄色(#FFFF00):需要深耕的客户
蓝色(#00FFFF):需要挽留的客户
粉色(#FFC0CB)等:一般价值客户
默认情况:
如果RFM类型不匹配任何条件,返回BLANK()(透明/无颜色)
公式:
类型颜色 = VARA=SELECTEDVALUE('RFM-模型分类'[类型])VARB=SWITCH(TRUE(),A="重要价值客户","#FF0000",A="重要唤回客户","#00FF00",A="重要深耕客户","#FFFF00",A="重要挽留客户","#00FFFF",A="一般价值客户","#FFC0CB",A="一般唤回客户","#800080",A="一般深耕客户","#FFA500",A="一般挽留客户","#0000FF",BLANK())RETURNB
公式逻辑解析:
变量化存储:
VAR A存储了当前选定的RFM类型,避免重复调用SELECTEDVALUE
VAR B存储颜色判断结果,使RETURN部分更简洁
性能提升:
SELECTEDValue函数只执行一次
比直接在SWITCH中多次调用更高效
可维护性增强:
变量命名使公式逻辑更清晰
便于后续添加新的颜色规则
三、可视化报告制作
1、业绩概览制作
第一步:设置报表页格式选项,选择画布背景,上传我们设计好的素材
第二步:插入一个图像,AI机器人图标,点开操作功能,给此图像添加登录页书签。
第三步:插入一个卡片图,将度量值日历拖入切片器。
第四步:插入七个书签按钮,输入数据中心、产品维度、客户开发、业绩分析、地域分析、业绩考核、表格维度,并给书签按钮添加我们设计好的图标。
第五步:插入一个形状,用于给以上建立视觉对象添加背景。
第六步:插入两个切片器,将卡日期表年份拖入字段中,将RFM分析维度表分析方法拖入字段中。
第七步:插入一个散点图,值拖入维度-客户表客户姓名字段,X轴拖入度量值M 消费金额,Y轴拖入度量值F 消费次数,工具提示拖入度量值RFM 类型、R 间隔天数,设置视觉对象格式打开标记选项,将度量值RFM类型颜色赋值给颜色,向视觉对象添加进一步分析,点开X轴恒线,添加一条X轴恒线,并将M 消费金额平均值赋值给恒线,添加一条Y轴恒线,并将F 消费次数平均值赋值给恒线,将两条恒线设置为红色,并打开恒线数据标签,将分析方法切片器置于散点图上。
第八步:插入一个簇状条形图,Y轴拖入RFM-模型分类表类型字段,X轴拖入度量值RFM客户数量,设置视觉对象格式打开条形选项,将度量值类型颜色赋值给颜色,打开数据标签。
第九步:插入一个环形图,图例拖入RFM-模型分类表类型字段,值拖入度量值RFM客户数量占比,设置视觉对象格式关闭图例,打开详细信息标签,表情按内容选择类别,总百分比。
第十步:插入一个矩阵图,行拖入维度-客户表客户姓名,值拖入度量值RFM 类型、R 动态(重命名为消费间隔)、F 动态(重命名为消费次数)、M 动态(重命名为消费金额)、R 最近消费日期(重命名为最近消费日期),给度量值RFM 类型添加条件格式字体颜色,格式样式选择字段值,将度量值RFM类型颜色应用于此字段。
第十一步:将矩阵图置于条形图和环形图之上。在视图窗口中,选中矩阵图、条形图和环形图,右键点击并选择分组,将它们放入一个组并重命名为‘RFM图表组’。随后,隐藏条形图和环形图,创建并命名书签为‘RFM表格明细书签’。接着,隐藏矩阵图,显示条形图和环形图,再创建并命名书签为‘RFM可视化书签’。最后,选中这两个书签,右键点击并选择分组,重命名为‘页内切换RFM’。
第十二步:插入两个书签按钮,点开样式文本分别输入文本RFM表格明细、RFM可视化,并给书签按钮添加我们设计好的图标,点开操作功能,将以上建立书签添加给按钮。
第十三步:如图美化界面
第十四步:打开视图窗口书签功能,为此页面添加一个书签
第十五步:数据中心页,点击文本为RFM分析的按钮,打开操作功能,类型选择书签,将此页书签添加到按钮。
好的,今天的讲解就到这里。后期课程也会逐渐增加难度,精彩内容,敬请期待。