PowerBI之DAX神功番外篇26. 消除多对多关系
网友提问:

图片放大:



请注意:您结果那里有两个数计算的不对
济南的金额不是25,是31。时间2022/1/7~2022/2/28

青岛的金额不是25,是15。因为你是2022/1/7~2022/2/28

如果不是这样,那你的切片器筛选到天,不就没有实际意义了吗?
一、先分析需求:
1、度量值:金额、目标、完成率。完成率就是一个安全除法,没什么可说的。我也不做了。
2、切片器

切片器一会我们再做,假设日期是从2022/1/7~2022/2/18我们写成固定值,来解决第1个问题
先导入数据

我们发现目标表中【月度】列都变成了每月1日,这是个坑!一会讲

导入的数据中:流水表与目标表 无任何连线关系
二、注意日期问题
切片器时间范围:2022/1/7~2022/2/28
有些小伙伴想起使用函数Datesbetween,讲解于《火力全开》笔记27.03.03
你想一想,你的目标表中没有日期只有年月,导入后都显示每月1日,那你从7日开始取数据,必然会丢数据。所以这时不推荐使用Datesbetween,强用也有办法,但是不推荐
很多小伙伴这里出了问题,但是他不知道,说白了还是对自己的表不够了解才会出错。

推荐逻辑: 开始日期 <= 日期 <= 终止日期
在DAX里是这样写法(&&是and关系): 日期<= 开始日期 && 日期>=终止日期
或者写成:And(条件1,条件2)
tb1筛选出目标表2022年1月和2月的所有行,再对tb1的【目标】列进行求和。
这是我们的第1个度量值,起名:目标1
我们需要一个总金额度量值,这是我们的第2个度量值,起名:总金额
计算网友需要的金额也是同理,
(1) 我们要先筛选日期范围内的流水表tb2的所有行,因为流水表中日期是到天的,所以我们可以从2022年1月7日开始获取
(2) tb2是多端表,我们对其分组聚合,
(3) 对tb2分组聚合适配金额时,要先建立数据沿袭。详见《DAX神功》第2卷第21回
这是第3个度量值,起名:金额1
放到表中:省和城市来源于目标表,两个度量值是独立存在的,不牵扯来自己哪张表,有时间的人可以单建一个存度量值的地方。这些《火力全开》中都讲过。

当我们把城市拿下去

三、搞定日期切片器
我是不是在这里讲过,https://www.bilibili.com/read/cv18734121

在你的实际工作中,对我讲的知识是要灵活运用的,没有哪里是独立存在,你可以记不住怎么写,但是你要知道我讲过,有这回事,你再查都来得及。
1、新建日期表
详见《火力全开》笔记28.04

新建表公式:
2、做切片器

3、取切片器最大值与最小值
下面两个都是度量值
4、修改目标1和金额1这两个度量值
返回结果:


本文章配套课件在评论区置顶中,可以下载参考
本案例只限PowerBI中使用,PowePivot中我没测试过,我从来不去纠结谁用什么载体
只是我本人是学知识的,我没有必要使用多个载体讲同一个知识。
就好比我讲Python用PyCharm,有些人让我用jupyter,如果我用jupyter,一定有人让我用PyCharm。我又不是卖课的,我不是应该把精力放在思路和逻辑上面吗?
我自己选一个我需要的,我用PowerBI的原因:
单位用WPS的人多,只有部分电脑有office,如果我用PowerPivot人家用WPS的看不了。
有可能你们在外企没有这个情况,但并不是所有人都在外企。
就跟我用中文案例、中文变量是一样的,中国人能看懂英文的一定也能看懂中文
我不能只考虑英语好的,忽略英语不好的,我不筛选观众和读者。
至于PowerPivot的图表数量、函数多与少的问题,我本身也不用,也不关心这个。

PowerBI学习顺序:
【1】Access基础篇,学习s01开头的集数,理解表格数据规范和表关系
https://www.bilibili.com/video/BV1tf4y117Sh
【2】PowerBI火力全开,学习函数语法,与应用场景
https://www.bilibili.com/video/BV1qa4y1H7wp
【3】DAX神功,学习DAX函数原理
https://www.bilibili.com/read/readlist/rl442274
【4】PowerBI可视化图表