[PowerBI]使用PowerBI进行篮子分析

使用PowerBI进行篮子分析

简述
商业分析中我们通过篮子分析来发现产品之间的关联及客户的购买行为,“啤酒和尿布”的故事已经成为了难以过时的经典,业务部门渴望知道购买A产品的客户有多大概率会购买B,但前提是我们需要知道购买A产品的人有多少购买了B产品(或其他产品),即P(B|A). 而PowerBI允许我们利用DAX建立一种在产品之间的动态关系,当我们选择一个产品后,可以让页面显示客户先买了哪些产品,而后(或同时)又买了哪些产品。

方法
关于这方面的操作,我们已知的做法是Macro Russo曾经发布过的一个Blog,这上面的方法非常好,也写得很详尽全面,但问题在于没有考虑客户购买不同产品的时间先后,而且代码理解起来也有点复杂,我尝试出了一个简单粗暴的方法,其原理就是分别计算出客户购买A产品的最早时间和客户购买其他产品的最早时间,如果前者大于后者,就说明该客户是先购买了A产品才购买了其他产品,最后,我们就可以把首先购买了A产品的客户筛选出来(以及这些客户同时或在此之后又购买了哪些产品)。

过程
原数据表格如下:
数据源来自Tableau
由于不想让表格看起来太冗长,可视化方面用产品类别代替产品:

先购买本产品的客户数 = 
VAR
pro = IF(HASONEVALUE('Sheet1'[产品 ID]),VALUES('Sheet1'[产品 ID]),0)
var
date_a = CALCULATE(min('Sheet1'[订单日期]),'Sheet1'[产品 ID]=pro,all(Sheet1[产品 ID]))
var
date_o = CALCULATE(min('Sheet1'[订单日期]),'Sheet1'[产品 ID]<>pro,all(Sheet1[产品 ID]))
return
if(date_a<date_o,DISTINCTCOUNT(Sheet1[客户名称]),0)

利用筛选上下文和行上下文的特性,每一个在行级别被筛选的产品类别都会通过变量传递至“date_a"和”date_o"的calculate的筛选条件上,其中date_a得出购买该产品的最早订单日期,date_a得出购买除该产品以外的产品的最早订单日期。效果如下:
在这里插入图片描述
接下来,我们需要做到的是,当用户选择一个产品类别,对应筛选出首先购买该产品的客户及其订单详情,此外,也需要同时展示这些客户除购买了这些产品,其同时或在此之后又购买了哪些产品。这里,同样简单粗暴的方法,复制原表,写出两个度量值用于筛选:

FilterCategory = 
IF(FIRSTNONBLANK('Sheet1 (2)'[子类别],0) = FIRSTNONBLANK('Sheet1'[子类别],0),"T","F")
FilterCust = 
IF(FIRSTNONBLANK('Sheet1 (2)'[客户名称],0) IN VALUES('Sheet1'[客户名称]),"T","F")

效果如下:
在这里插入图片描述
在这里插入图片描述
其他 希望这篇博客能够帮助到有需求的人,同时更希望各位大婶(神)能够分享出更好的解决方法或相关补充:)