在文章《死磕Calculate之1:改变筛选上下文之忽略(”删“)》里,我说“把筛选上下文给去掉(删),用All函数”,如下所示:
这里面,可能强调得不够的是,对于All函数,很多朋友可能会理解为是用某表的“全部”作为筛选条件,毕竟All这个单词也有这方面的意思,而且,在DAX公式相对简单的情况下,这种基本的理解也很少会有什么问题,但是,如果碰到今天在群里这个购物篮分析的问题,可能就会犯迷糊了:
注:Calculatetable和Calculate函数类似。
这里,如果你把All('课程表A')和All('课程表B')理解为按照课程表A或课程表B的所有内容进行筛选,那你就会想,因为课程表A和课程表B不是一摸一样的吗?那结果就应该是一样的哦。
——这其实就是对All函数理解最容易出现的误差,因此,再次强调:All函数是用来“忽略(删除)计值上下文筛选器”的,不是用来输入筛选条件的!
所以,当我看到一个DAX公式时,首先要考虑的是,该公式当前的计值上下文是什么?回到这个购物篮分析的问题,度量如下:
该度量的应用环境如下:
显然,度量“共同购买的数量”当前的筛选上下文有两个:课程A和课程B,那么对于公式:
Calculatetable(
values('销售订单表'[买家]),
all('课程表B')
)
其中,values('销售订单表'[买家])首先会受到筛选器“课程A”和“课程B”的共同影响,然后,通过all('课程表B')忽略(删)掉“课程表B”这个筛选器,因此最终得到的是根据筛选器“课程A”得到的结果。
同样的,对于另一条关于All('课程表A')的结果也可以这样理解。
首期关于《Excel报表自动化及Power BI入门案例介绍》已在千聊开播,借实际企业案例,讲述Power BI如何使企业数据分析真正创造效益,欢迎观看。