分布分析用于展现同一维度下不同个体的分布情况。例如,散点图、直方图就是分布分析的普遍应用。
本章内容涵盖次数分布分析、时间分布分析、合计百分比分布分析等案例。
7.1 次数分布分析
商业场景:
本节案例为分析客户购买次数分布,主要目的在于找出一段时间范围内客户
购买的规律。
图71.1所示为依据客户D统计客户购买次数的分布情况。结果呈现正态分布,
即大部分客户的购买次数为5~7次,分析师可进一步分析这组客户的用户特征,获取更有价值的洞察。
可视化: 柱形图
数据源:示例-超市(订单)
新建表:
客户表 = VALUES('订单'[客户 ID]) //返回以客户ID为唯一值的一张表,要建立连接
新建列:
客户表中:
购买次数 = CALCULATE(DISTINCTCOUNT('订单'[订单 ID]))
新建度量值:
客户不重复计数 = DISTINCTCOUNT('客户表'[客户 ID])
7.2 时间分布分析
商业场景:客户二次购买时间分布分析,用于分析新用户在初次购买后,会在多久发生第二次购买。
如图7.2.1所示,在2015年的第2季度获得的新客户中,有38人在1个季度后会进行第二次购买,矩形的颜色越深,意味着客户数量越密集。
通过分析客户二次购买的时间分布规律,可以为不同客户群提供不同的销售策略,以少流失客户的可能性。
可视化: 矩阵图(Matrix)与表格不同的是,矩阵图的横坐标轴和纵坐标轴都可
设置为维度,横坐标和纵坐标交叉处为矩阵点,可用颜色进行标记,如图7.2.1所示。
数据源:示例-超市
新建表:
客户表 = VALUES('订单'[客户 ID]) //注意要建立连接
新建列:
最初购买日期 = CALCULATE(MIN('订单'[订单日期]))
购买次数 = CALCULATE(DISTINCTCOUNT('订单'[订单 ID]))
第二次购买日期 = CALCULATE( MINX(EXCEPT(VALUES('订单'[订单日期]),VALUES('客户表'[最初购买日期])),[订单日期]))
新建度量值:
客户不重复计数 = DISTINCTCOUNT('客户表'[客户 ID])
7.3 合计百分比分布分析
商业场景:本节案例为7.1节的案例的延伸。
分析客户购买次数,仅仅是客户分析的开始。在实际中仍然需要继续细化分析。
例如得出不同购买次数的客户数在总客户数中的占比。
如图73.1所示,这里统计了客户的购买平均次数(比如统计平均每季度购买一次的客户数,平均每两季度购买一次的客户数等),并计算出相应的客户数在总客户数中的占比。
可视化: 柱形图
数据源:示例-超市
新建表:
客户表 = VALUES('订单'[客户 ID]) //注意要建立连接
新建列:
最初购买日期 = CALCULATE(MIN('订单'[订单日期]))
购买次数 = CALCULATE(DISTINCTCOUNT('订单'[订单 ID]))
第二次购买日期 = CALCULATE( MINX(EXCEPT(VALUES('订单'[订单日期]),VALUES('客户表'[最初购买日期])),[订单日期]))
二次购买日期(季度) = DATEDIFF([最初购买日期],[第二次购买日期],QUARTER)
末次购买日期 = CALCULATE(MAX('订单'[订单日期]))
客户成长期(季度) = DATEDIFF([最初购买日期],[末次购买日期],QUARTER)
购买平均次数(箱) = ROUND('客户表'[客户成长期(季度)]/[购买次数],0)
购买平均次数 = '客户表'[客户成长期(季度)]/[购买次数]
新建度量值:
客户不重复计数 = DISTINCTCOUNT('客户表'[客户 ID])
全体购买平均次数 = AVERAGEX(ALLSELECTED('客户表'),[购买平均次数])
与平均值差 = AVERAGE('客户表'[购买平均次数(箱)]) - [全体购买平均次数]
7.4 静态象限图分析
商业场景:很少用到,
可视化: 【Quadrant Chart by MAQ Software】
数据源:2019GartnerBI魔力象限.xlsx
7.5 动态象限图分析(略)
7.6 帕累托分析
商业场景:
帕累托分析的原理就是我们日常所说的“80/20”原则,比如企业中80%的
利润来自20%的商品销售;反之,80%的商品创造了20%的利润。
帕累托分析有助于让企业关注利润价值高的商品,同时减少利润少的商品,提升企业的总体利润。
本节使用帕累托分析洞察商品与利润之间的关联。
可视化:
帕累托图( Plato Chart )。帕累托图用于显示合计百分比的分析结果。
在本节实例中,主要计算包含两个维度的合计百分比:产品数量合计百分比和产品利润合计百分比。
数据源:示例-超市
新建表:(注意:关联)
子类别表 = VALUES('订单'[子类别])
新建列:
利润 = CALCULATE([利润求和])
利润排名 = COUNTROWS(FILTER(ALL('子类别表'),EARLIER('子类别表'[利润])<=[利润]))
合计利润 = SUMX(FILTER(ALL('子类别表'),EARLIER('子类别表'[利润])<=[利润]),[利润])
合计利润百分比% = [合计利润]/SUM('订单'[利润])
子类别个数汇总百分比 = [利润排名]/COUNTA('子类别表'[子类别])
新建度量值:
利润求和 = SUM('订单'[利润])
注意:
因为产品过多,所以取掉一些后面的产品。创建子类表再关联。
我使用计算列,避开复杂的度量值计算