一步一步教你PowerBI数据分析:制作客户RFM数据分析
客户分析就是根据客户信息数据来分析客户特征,评估客户价值,从而为客户制订相应的营销策略与资源配置。通过合理、系统的客户分析,企业可以知道不同的客户有着什么样的需求,分析客户消费特征与商务效益的关系,使运营策略得到最优的规划;更为重要的是可以发现潜在客户,从而进一步扩大商业规模,使企业得到快速的发展。
企业客户分析可以从以下几个方面入手,对客户数据信息展开分析:
1、分析客户个性化需求
“以客户为中心”的个性化服务越来越受到重视。实施CRM的一个重要目标就是能够分析出客户的个性化需求,并对这种需求采取相应措施,同时分析不同客户对企业效益的不同影响,以便做出正确的决策。这些都使得客户分析成为企业实施CRM时不可缺少的组成部分。
2、分析客户行为
企业可以利用收集到的信息,跟踪并分析每一个客户的信息,不仅知道什么样的客户有什么样的需求,同时还能观察和分析客户行为对企业收益的影响,使企业与客户的关系及企业利润得到最优化。
3、分析有价值的信息
利用客户分析系统,企业不再只依靠经验来推测,而是利用科学的手段和方法,收集、分析和利用各种客户信息,从而轻松的获得有价值的信息。如企业的哪些产品最受欢迎,原因是什么,有什么回头客,哪些客户是最赚钱的客户,售后服务有哪些问题等。客户分析将帮助 企业充分利用其客户关系资源,在新经济时代从容自由地面对客户。
目前国内企业对客户的分析还很欠缺,分析手段较为简单,而简单的统计方法虽然可以在一定程度上得出分析结果,但因为不同企业发展中存在一定的不平衡性,利用简单的统计模式得出的结论容易有较大的误差,难以满足企业的特殊需求。因而企业需要有更加完善、合理的客户分析方案,进一步提高客户分析的合理性、一致性,并能在对 潜在客户的培养和发现中提供更多的决策支持。
本文将使用客户RFM模型来衡量客户价值,当然仅一个模型也无法完整并系统的分析客户,还是需要结合CRM系统中的数据,切勿过度依赖该模型来分析客户价值。该模型仅供决策参考。接下来我们来看一下RFM模型是什么?

RFM分析(Recency,Frequency,Monetary)是用来细分用户和衡量客户价值的一个重要工具,就是根据客户活跃程度和交易金额的贡献,进行客户价值细分的一种方法。
RFM的含义:
R(Recency):客户最近一次交易时间的间隔。R值越大,表示客户交易发生的日期越久,反之则表示客户交易发生的日期越近。
F(Frequency):客户在最近一段时间内交易的次数。F值越大,表示客户交易越频繁,反之则表示客户交易不够活跃。
M(Monetary):客户在最近一段时间内交易的金额。M值越大,表示客户价值越高,反之则表示客户价值越低。
本文中通过分析某个店铺客户消费数据,将会员分为以下8种,以便有针对性的做营销决策,实现精细化运营:

一、RFM数据源
我们准备的数据源中有很多的字段,由RFM模型的含义可知。我们需要通过订单日期判断R值,订单ID判断F值,销售额判断M值,客户ID是基础数据,其他的字段就是冗余字段

二、RFM值
1、确定R值
确定R值为指定日期和最近购买日期之间的差异天数,计算每个客户的最近一次消费日期。再根据截止日期的时间和最后一个交易日期的差值
RFM R =
AVERAGEX( DISTINCT('维度_客户'[客户名称]) ,
CALCULATE(
AVERAGEX( '事实_订单', DATEDIFF( [订单日期] , LASTDATE( '维度_RFM日期'[Date] ) , DAY ) ) ,
TREATAS( VALUES( '维度_RFM日期'[Date] ) , '事实_订单'[订单日期])
)
)
R最大值
RFM R MAX =
MAXX( ALL('维度_客户'[客户名称]) ,
CALCULATE(
AVERAGEX( '事实_订单' , DATEDIFF( [订单日期] , LASTDATE( '维度_RFM日期'[Date] ) , DAY ) ) ,
TREATAS( VALUES( '维度_RFM日期'[Date] ) , '事实_订单'[订单日期])
)
)
R最小值
RFM R MIN =
MINX( ALL( '维度_客户'[客户名称]) ,
CALCULATE(
AVERAGEX( '事实_订单' , DATEDIFF( [订单日期] , LASTDATE( '维度_RFM日期'[Date] ) , DAY ) ) ,
TREATAS( VALUES( '维度_RFM日期'[Date] ) , '事实_订单'[订单日期] )
)
R平均值
RFM R AVG = CALCULATE( [RFM R] , ALL('维度_客户') )
2、确定F值
交易次数值需要感觉非重复计数获得,这里根据虚拟关系筛选计数顾客交易次数
RFM F =
AVERAGEX( DISTINCT('维度_客户'[客户名称]) ,
CALCULATE('度量值'[顾客交易次数] , TREATAS( VALUES('维度_RFM日期'[Date]) , '事实_订单'[订单日期]))
)
F最大值
RFM F MAX =
MAXX( ALL('维度_客户'[客户名称]) ,
CALCULATE('度量值'[顾客交易次数] , TREATAS( VALUES('维度_RFM日期'[Date]) , '事实_订单'[订单日期]))
)
F最小值
RFM F MIN = MINX( ALL('维度_客户'[客户名称]) , CALCULATE('度量值'[顾客交易次数] , TREATAS( VALUES('维度_RFM日期'[Date]) , '事实_订单'[订单日期])))
F平均值
RFM F AVG = CALCULATE( [RFM F] , ALL('维度_客户') )
3、确定M值
M值为每个客户共享的销售金额
RFM M = AVERAGEX( DISTINCT( '维度_客户'[客户名称]) , CALCULATE('度量值'[销售金额], TREATAS( VALUES( '维度_RFM日期'[Date] ) , '事实_订单'[订单日期] ) ))
M最大值
RFM M MAX = MAXX( ALL( '维度_客户'[客户名称]) , CALCULATE('度量值'[销售金额], TREATAS( VALUES( '维度_RFM日期'[Date] ) , '事实_订单'[订单日期] ) ))
M最小值
RFM M MIN = MINX( ALL('维度_客户'[客户名称]) , CALCULATE('度量值'[销售金额], TREATAS( VALUES( '维度_RFM日期'[Date] ) , '事实_订单'[订单日期]) ))
M平均值
RFM M AVG = CALCULATE( [RFM M] , ALL( '维度_客户' ) )
三、确定客户类型
确定RFM值后,我们将R、F、M分别与平均值比较,计数出RFM的得分情况
RFM R 分数 = IF( NOT ISBLANK( [RFM R] ) , DIVIDE( [RFM R MAX] - [RFM R] , [RFM R MAX] - [RFM R MIN] ) * 100 )
RFM F 分数 = IF( NOT ISBLANK( [RFM F] ) , DIVIDE( [RFM F] - [RFM F MIN] , [RFM F MAX] - [RFM F MIN] ) * 100 )
RFM M 分数 = IF( NOT ISBLANK( [RFM M] ) , DIVIDE( [RFM M] - [RFM M MIN] , [RFM M MAX] - [RFM M MIN] ) * 100 )
四、新建辅助表
1、新建RFM分类表
可以直接输入数据,也可以通过Excel导入数据。

2、新建权重参数表
权重参数从0到100进行设定
参数_RFM R权重 = GENERATESERIES(0, 100, 1)
参数_RFM F权重 = GENERATESERIES(0, 100, 1)
参数_RFM M权重 = GENERATESERIES(0, 100, 1)
3、新建TOP参数表
参数_RFM TOP X = GENERATESERIES(0, 100, 1)
五、制作可视化报告
1、制作表格,拖放已经计算好的数据

2、制作客户RFM权重占比环形图

3、制作客户分类占比环形图

4、制作客户RFM得分排名条形图

5、制作切片器
切片器拖放辅助表中的权重R\F\M字段和TopX字段,并设置显示格式为下拉。日期切片器直接设置开启滑块

六、总结
客户RFM分析首先需要根据订单数据来计算RFM的值,其次通过辅助表进行补充动态设定的参数。再次通过RFM的值和最大值、最小值对比使用平均函数进行计算出RFM得分情况。通过辅助表客户分类维度,来确定客户所属分类。该模型可以动态根据企业对R,F,M设定不同的权重来计算客户的价值。
对于销售分析的指标的分析模型还有动态ABC分析模型,在后续得文章中会给大家展现。

一步一步教你PowerBI数据分析:制作客户RFM数据分析的更多相关文章
- 一步一步教你PowerBI利用爬虫获取天气数据分析
对于爬虫大家应该不会陌生,我们首先来看一下爬虫的定义:网络爬虫是一种自动获取网页内容的程序,是搜索引擎的重要组成部分.网络爬虫为搜索引擎从万维网下载网页,自动获取网页内容的应用程序.看到定义我们应该已 ...
- 使用Python一步一步地来进行数据分析总结
原文链接:Step by step approach to perform data analysis using Python译文链接:使用Python一步一步地来进行数据分析--By Michae ...
- 一步一步教你如何在linux下配置apache+tomcat(转)
一步一步教你如何在linux下配置apache+tomcat 一.安装前准备. 1. 所有组件都安装到/usr/local/e789目录下 2. 解压缩命令:tar —vxzf 文件名(. ...
- 一步一步教你将普通的wifi路由器变为智能广告路由器
一步一步教你将普通的wifi路由器变为智能广告路由器 相信大家对WiFi智能广告路由器已经不再陌生了,现在很多公共WiFi上网,都需要登录并且验证,这也就是WiFi广告路由器的最重要的功能.大致就是下 ...
- 一步一步教你使用Git
一步一步教你使用Git 互联网给我们带来方便的同时,也时常让我们感到困惑.随便搜搜就出一大堆结果,然而总是有大量的重复和错误.小妖发出的内容,都是自己实测过的,有问题请留言. 现在,你已经安装了Git ...
- 使用WPF教你一步一步实现连连看
使用WPF教你一步一步实现连连看(一) 第一步: 问题,怎样动态的建立一个10*10的grid(布局) for (int i = 0; i < 10; i++){ RowDefinition r ...
- 一步一步教你用 Vue.js + Vuex 制作专门收藏微信公众号的 app
一步一步教你用 Vue.js + Vuex 制作专门收藏微信公众号的 app 转载 作者:jrainlau 链接:https://segmentfault.com/a/1190000005844155 ...
- Ace教你一步一步做Android新闻客户端(一)
复制粘贴了那么多博文很不好意思没点自己原创的也说不出去,现在写一篇一步一步教你做安卓新闻客户端,借此机会也是让自己把相关的技术再复习一遍,大神莫笑,专门做给新手看. 手里存了两篇,一个包括软件视图 和 ...
- 一步一步教你实现iOS音频频谱动画(二)
如果你想先看看最终效果再决定看不看文章 -> bilibili 示例代码下载 第一篇:一步一步教你实现iOS音频频谱动画(一) 本文是系列文章中的第二篇,上篇讲述了音频播放和频谱数据计算,本篇讲 ...
随机推荐
- D - Complete Tripartite
三分图染色 链接:https://codeforces.com/contest/1228/problem/D 三分图染色步骤:First 首先找一个点1作为集合A中的点,再找到与1相连的一个点设为2, ...
- Python - 和我聊Python节目最新一期介绍 - 257期:使用超级电脑,Python,射电天文学知识来探索银河系
今天,给大家简单介绍和我聊Python的最新一期节目,第257期:使用超级电脑,Python,射电天文学知识来探索银河系. 听着标题就觉得高大上,是的,我也是这么认为的.这次请的嘉宾来头很大,来自国际 ...
- jquery选择时分插件
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 10w+QPS 的 Redis 真的只是因为单线程和内存?360° 深入底层设计为你揭开 Redis 神秘面纱!
原文链接:10w+QPS 的 Redis 真的只是因为单线程和内存?360° 深入底层设计为你揭开 Redis 神秘面纱! 你以为 Redis 这么快仅仅因为单线程和基于内存? 那么你想得太少了,我个 ...
- js事件冒泡于事件捕获
事件冒泡 事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件. 事件冒泡是自下而上(从最深节点开始,向上传播事件)的触发事件 //例子 <div id="pa ...
- windows 删除非法目录
用PHP写错了路径,创建了非法目录,提示不存在该项目 复制下面 添加为批处理文件 DEL /F /A /Q \\?\%1RD /S /Q \\?\%1 将文件移入这个文件
- python学习07列表
'''列表''''''列表:是可变的序列,也是一种可以存储各种数据类型的集合 用[]中括号表示列表的开始和结束:元素之间用,逗号隔开 '''l1=[] #空列表print(len(l1))l2=[&q ...
- java学习(第一篇)
Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称.由James Gosling和同事们共同研发,并在1995年正式 ...
- [Inno Setup] How to create a OuterNotebook/welcome page in the uninstaller
By Martin Prikryl https://stackoverflow.com/questions/42625626/inno-setup-how-to-create-a-outernoteb ...
- java中异常的处理
异常分为运行时的异常和检测异常: java提供了两种异常机制.一种是运行时异常(RuntimeExepction),一种是检查式异常(checked execption). 运行时的异常就是在java ...