欢迎光临散文网 会员登陆 & 注册

Power BI之DAX神功:第4卷第15回 计算同店销售金额「同类对比」

2021-12-25 15:35 作者:孙兴华zz  | 我要投稿

我经常跟大家说:四张表含以上,不是大神就是笑话。

《权威指南》这节课你蒙了吗?没蒙的人≈最接近神的人,蒙的人=新人

新人经过努力,总有一天,你会成为超越神的人,相信自己的潜力,加油!

一、先谈业务需求与表格准备

【1】铁打的江山流水的兵

江山好比一个企业,每家门店就相当于兵,门店可能因为各种因素停业(拆迁、亏损撤店、被人举报、装修等等),同时也会有新店开张。

在分析过程中,会遇到这样一种情况,张三是一店的店长,这个店没有停业,由于某个类别没有销售(也可以深入到某个商品),原因很多:根据法律(含民族习惯等原因),此地区不适宜销售此类别商品、店铺面积原因精简销售品类(100平米和10000平米品类肯定不同)等等。

如果我们按常规的分析:

返回结果如下图所示:红圈显示的都是BLANK,那么这些店铺手柄这个类是销售为零呢?还是因为店铺在这个月份没有营业?或者采购就没有给店铺上这个品类?我们做销售分析时,应该只看有这个商品的店铺之间的对比。

例如:有一部电影A国销售1万份,B国没引进,C国引进了但是销售为0。这时你要用A国与C国对比,而不应该把B国参考进来。

【2】状态表找谁要

从我们上面提供的状态表中可以看出:

类别G2(手柄)在每家店铺每个月是否经营:(如果装修,闭店等所有类别全是关)

问题来了,状态表找谁要?不同企业负责部门不同,但是有一个通用部门他一定有:采购

当一家店铺新开张时:采购会通知供货商铺货

当一家店铺倒闭时:采购会通知供货商退货

当一家店铺要开始装修时:采购会通知供货商退货

当一家店铺装修后重新营业时:采购会通知供货商铺货

当一家店铺新增加一个品类时:采购会通知供货商铺货

当一家店铺撤销一个品类时:采购会通知供货商退货

我说的是企业,你别拿小卖部这里说:)

好了,这个数据你找采购要,如果他们不给你,你把我上面这6句话念给他们听,祝平安!

因为这些事情你自己用数据无法分析,第1次出现销售并不代表这个品类上线时间是这天或这个月,茅台、五粮液可能三年卖了两瓶。

【3】我们需要一个什么结果

游戏机的类别是G1,2021年1月至3月,G1类别都有开通的店铺是:一店和二店

二店在2021年1月是0销售,所以应该对为参照店。

因为三店并不是在2021年1月至3月期间都有经营游戏机,所以此日期之内对比游戏机这个类别销售时,三店不应该做参照店。

二、再谈关系建模

【1】为什么建日期表

因为销售表【日期】是详细到天的,状态表【日期】是年月

你会不会问我?那我们新建一个销售表【年月】不香吗?

是因为销售表【年月】状态表【日期】是多对多关系吗?

不是,这里多对多关系是无法避开的,日期表在这里只是为了更多颗粒度。

我担心有些人不想学习,照着案例去套用,所以这里没敢省略日期表。

【2】为什么要准备类别表

因为商品表【类别】状态表【类别】是多对多关系,我们这里是避开多对多关系

详见《DAX神功》第4卷第8回 使用公共维度处理多对多关系

【3】关系模型应该如何建立

商品表~销售表:1对多关系,通过商品编码连接

类别表~商品表:1对多关系,通过类别号~类别

类别表~状态表:1对多关系,通过类别号~类别

店铺表~状态表:1对多关系,通过店号连接

店铺表~销售表:1对多关系,通过店号连接

日期表~销售表:1对多关系,通过Date~日期

日期表~状态表:多对多关系,日期表筛选状态表,通过年月~日期

这7条线,只有日期表~状态表,避不开的多对多,即便使用公共维度来处理,也要修改箭头方向。其它表与表关系,完全是业务,是自己的业务就不会连错。

三、开始分析

【1】每家店铺经营状态

但是这样做并不智能,如下图所示,我没有筛选类别时

因二店在2021年3月有两个状态,他只显示其中一个状态。如果我们只让他显示唯一,否则返回BLANK(),我们首先应该想到的是SELECTEDVALUE()函数。

原理详见《DAX神功》第2卷第19回

【2】将上面的状态列以度量值形式显示

如下图所示:2021年3月因为同时拥有开和关两个状态,所以在未筛选时,会显示BLANK()

当我筛选时,只要它有唯一值,就会返回唯一值,如下图所示:

【3】只需要让2021年1月、2月、3月全为开的店铺显示

只需要删除对日期表[年月]的筛选

这里有个小技巧:你不可能所有店全关了,都倒闭了还分析什么?取消了日期表[年月]的筛选就显示大家都有的状态【开】,在不筛选时,2021年1月至3月只有一店状态全开

当我筛选游戏机时,2021年1月至3月只有一店和二店在游戏机这个类别上状态全开

【4】我们的需要是要将这些状态全开的店铺对应的销量筛选出来

那你看看模型关系,状态表能筛选销售表吗?肯定不行,这时需要用到数据沿袭

我们在前面课程中多次实践,SUMMARIZE保留第1参数的数据沿袭。我们在新建表中测试:

返回结果:得到了店名与类别非重复组合,且保留数据沿袭

我们利用上一步写出的度量值【显示全部为开的店】筛选这个表:

语法:filter(表,度量值="某个值")  咱们讲Filter时提到的知识,为什么Calculate可以筛选,还要学filter因为当度量值="某个值"你就用到Filter高级筛选器了。

返回:2021年1月至3月店铺类别状态都为“开”的组合

【5】写出我们的度量值

切片器没有筛选时,在2021年1月至3月期间只有一店和二店拥有状态全开

当我筛选手柄时:因为只有一店状态全开,所以只显示一店销量

当我筛选游戏机时:因为只有一店和二店状态全开,所以只显示一店和二店销量

《孙兴华讲PowerBI火力全开》PowerBI必学课程

https://www.bilibili.com/video/BV1qa4y1H7wp

《DAX神功》文字版合集:

https://www.bilibili.com/read/readlist/rl442274

《DAX神功》视频版合集:

https://www.bilibili.com/video/BV1YE411E7p3

《DAX神功番外篇》文字版合集:

https://www.bilibili.com/read/readlist/rl478271

PowerBI(DAX函数)、PowerQuery(M函数)、Python办公自动化、Python爬虫、Python数据分析、ExcelVBA、WordVBA、AccessVBA、MySQL等等

https://www.bilibili.com/read/cv10222110

Power BI之DAX神功:第4卷第15回 计算同店销售金额「同类对比」的评论 (共 条)

分享到微博请遵守国家法律