Power BI之DAX神功番外篇:第2回 为什么这个度量值一端和多端均可筛选
一、网友提问:

网友使用的是《孙兴华讲PowerBI火力全开》
07.ALL函数、Allexcept函数、ALLSELECTED函数 中的案例
https://www.bilibili.com/video/BV1YE411E7p3
二、解答问题
我们将案例的数据量缩小,来举例:


【度量值】
销售表中的商品总数 = CALCULATE(COUNTROWS('商品表'),'销售表')
将公式拆分:
COUNTROWS('商品表') // 因为商品表里有4行,返回4
当Calculate使用筛选器是 '销售表' 时,销售表中有几种商品? 3种?
我们将销售表中有的商品从 COUNTROWS('商品表') 中筛选出来,结果就是3
【1】将度量值放到矩阵中,行标题使用商品表中的商品名称

【度量值】
销售表中的商品总数 = CALCULATE(COUNTROWS('商品表'),'销售表')
返回结果是3个品种
这3个品种分别是白菜、茄子、土豆,每个品种都是1
一对多关系,不管你的COUNTROWS来自哪张表,1端可以筛选自己,也可以筛选多端。
【2】将度量值放到矩阵中,行标题使用销售表中的商品名称

可能很多人会有疑问,为什么也可以筛选呢?
多端不是只能筛选自己,不能筛选一端表吗?
【度量值】
销售表中的商品总数 = CALCULATE(COUNTROWS('商品表'),'销售表')
分析:
COUNTROWS('商品表') // 返回的的确是一端表的行数
如果你将公式写成
销售表中的商品总数 = CALCULATE(COUNTROWS('商品表'))
放到矩阵中就不能筛选了:

那为什么我这样写就可以筛选呢?
首先,我们看一下另一个公式:
销售表中的商品总数固定值 = CALCULATE(COUNTROWS('商品表'),all(销售表'))
分析公式:
COUNTROWS('商品表') //返回商品表中的所有行,结果是4
all(销售表') //取消销售表的筛选,需要销售表中所有商品在COUNTROWS('商品表')中的固定值,结果是3,而这个3,因为使用了all(表) 所有字段内部筛选器和外部筛选都无效了。
那结果就出来了,当度量值没有使用all(表),而是直接使用 ‘表’ 就是允许这张表筛选。
所以下面这个度量值,即可以被商品表筛选也可以被销售表筛选。
【度量值】
销售表中的商品总数 = CALCULATE(COUNTROWS('商品表'),'销售表')
友情提示:这些原理知识需要有一定的基础和兴趣再来学习,学完《孙兴华讲PowerBI火力全开》以后,再来学习《孙兴华讲PowerBI之DAX神功》效果更加。

《孙兴华讲PowerBI火力全开》PowerBI必学课程
https://www.bilibili.com/video/BV1qa4y1H7wp
《DAX神功》文字版合集:
https://www.bilibili.com/read/readlist/rl442274
《DAX神功》视频版合集:
https://www.bilibili.com/video/BV1YE411E7p3
PowerBI(DAX函数)、PowerQuery(M函数)、Python办公自动化、Python爬虫、Python数据分析、ExcelVBA、WordVBA、AccessVBA、MySQL等等