【Tableau小钉子】1212:如何实现商品关联分析?(购物篮分析)
今天在做Tableau技能培训时,有个学员提到了一个问题:
学员的企业是个连锁超市,想知道在Tableau中如何实现关联分析,场景是想知道超市中指定的商品与其它商品的关联度,具体的说就是想知道,购买A商品的同时,客户还会买什么商品?同时,还想知道与A商品关联度最高的B商品,反过来看看B商品关联度最高的又是什么商品?
网上关于购物篮分析的内容很多,所以将实现的过程来进行解析一下。
超市销售的特点是,顾客一般都会有小票,小票上是同时购买的商品的清单,一般情况下顾客购物只会产生一张小票,所以我们的切入点就是小票的数量,来判断关联度。
首先,需要给到分析人员,一个可以选择商品的列表,但不能使用筛选器;
其次,需要根据被选中的商品,来判断出购买该商品的小票有哪些;
然后,通过这些小票,来筛选出关联的商品;
最后,通过关联的商品清单和小票数,来定义关联度。
在Tableau中采用2020.3中文版超市数据,按这个思路来尝试解决一下。
首先,我们加载”示例 – 超市”数据集中的”订单”表,在工作表1中,将产品名称拖到行,再将商品名称拖到文本,形成一个产品清单
然后在行中的产品名称胶囊上右键,去掉”显示标题”的勾选,将它隐藏起来。
新建一张工作表,创建一个参数”指定产品A”,改成字符串,选择列表,然后在工作簿打开时来源于数据源中的”产品名称“字段。
(这个参数的目的,是为了让被选中的商品名称,参与计算,并且后续计划采用仪表板中的修改参数操作,来进行更新。)
那么,有了选中的产品A的信息,我们就可以开始进行判断了计算了,新建一个计算字段,在数据中如果发现有包括指定产品A的行,就计1笔,否则计为null值,公式如下:
IF [产品名称]=[指定产品A] THEN 1 END
然后,我们要将所有购买了指定商品A的订单,分辨出来,就可以根据”包含指定商品数”是否大于等于1来判断,我们用订单id来创建一个集“购买指定产品A的订单?”,用公式来约束集的结果,如下:
SUM([包含指定产品数])>=1
然后,我们需要把购买指定商品A的关联商品都列出来,可以通过计算字段,把产品名称不等于指定产品A的,都显示出来,把指定产品A显示为null值,字段命名为“指定产品A关联产品”,公式如下:
IF [产品名称]<>[指定产品A] THEN [产品名称] END
再然后,我们来统计一个订单的数据,写一个单独的计算字段,对订单id计数不同,命名为“订单数量”,公式如下:
COUNTD([订单 Id])
到这里,就可以开始进行图表的处理了,把“购买指定产品A的订单?”集,拖到筛选器,排除掉没有购买指定产品A的订单,把”指定产品A关联产品”拖到行,把”订单数量“拖到列,然后按降序排序,并且把”订单数量”拖到标签:
这时,发现列表中最大的是null,也就是指定产品A,需要排除它,所以把”指定产品A关联产品“拖到筛选器,然后”排除”null,就可以了:
这样,我们就得到了指定产品A的关联产品的排名,订单数量最多的,就是关联度最高的产品,然后我们需要让产品的选择清单与关联商品清单交互,这需要在仪表板中实现,所以新建一个仪表板:
将工作表1放在仪表板左边,将工作表2放在仪表板右边,如下:
在顶部菜单中,选择“仪表板”->”操作“->”添加操作”->”更改参数”,如下:
将操作命名为”指定产品A修改”,然后设置为由工作表1修改(因为我们要在工作表1中选择指定产品),目标参数为“指定产品A”,字段为”产品名称”,操作方式为“选择”,并且在清除选定内容时“保留当前值”,确定,再确定。如下:
这样,就实现了,当我们在工作表1中选择某个产品时,工作表2就会给出相应产品的关联产品的排名。
这样,我们就完成了第一步,然后,如前面的问题的后半部分,“同时,还想知道与A商品关联度最高的B商品,反过来看看B商品关联度最高的又是什么商品?“,其实思考一下,实现方法与指定产品A是完全一样的,只不过用关联商品清单,再做了一次关联,如下:
新建参数“指定产品B”
新建计算字段”包含指定产品B数“
IF [产品名称]=[指定产品B] THEN 1 END
在订单id上新建集” 购买指定产品B的订单?“
SUM([包含指定产品B数])>=1
然后新建计算字段”指定产品B关联产品”
IF [产品名称]<>[指定产品B] THEN [产品名称] END
然后,新建工作表3,拖出一样的条形图
然后将工作表3放入仪表板
最后,同样的选择“仪表板”->”操作“->”添加操作”->”更改参数”设置参数操作,只不过,这次是用工作表2中的”指定产品A关联产品”字段去修改”指定产品B”参数了。
完成之后,就可以实现多级的关联产品的查看了。
好了,说完了,一颗小钉子,希望可以锤到你~