当前位置: 首页 > news >正文

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分析的按钮,打开操作功能,类型选择书签,将此页书签添加到按钮。

图片

好的,今天的讲解就到这里。后期课程也会逐渐增加难度,精彩内容,敬请期待。

相关文章:

  • 山东大学计算机图形学期末复习9——CG12上
  • Zephyr OS 中的 FIFO 接口应用介绍
  • deepin v23.1 音量自动静音问题解决
  • 【汇总】影视仓接口地址,影视仓最新配置接口【2025.5】
  • 全栈项目搭建指南:Nuxt.js + Node.js + MongoDB
  • 【深度学习-Day 12】从零认识神经网络:感知器原理、实现与局限性深度剖析
  • 第三章 流程控制
  • Linux面试题集合(4)
  • C++文件操作--2 二进制文件操作
  • 第9讲、深入理解Scaled Dot-Product Attention
  • 重庆 ICPC 比赛游记
  • 信贷域——互联网金融业务
  • 哈希的原理、实现
  • 【OpenGL学习】(二)OpenGL渲染简单图形
  • 系统架构设计(八):三层架构
  • SVN 版本控制入门指南
  • Qt与Hid设备通信
  • Python多进程编程执行任务
  • Class类的详细说明
  • Go语言 GORM框架 使用指南
  • 人民网:激发博物馆创新活力,让“过去”拥有“未来”
  • 国税总局上海市税务局通报:收到王某对刘某某及相关企业涉税问题举报,正依法依规办理
  • 龚正会见哥伦比亚总统佩特罗
  • 恒生银行回应裁员传闻:受影响的员工数目占银行核心业务员工总数约1%
  • 马上评|安排见义勇为学生补考,善意与善意的双向奔赴
  • 广西北部湾国际港务集团副总经理潘料庭接受审查调查