DAX基础14:关于ALLSELECTED函数的基本使用理解

浏览: 2778

​ALLSELECTED函数,经常用但是也比较复杂。说复杂,大概也是因为没有理解清楚。时常在这个函数上感到迷茫。

从简单到复杂。不过也只是关于ALLSELECTED的基础使用。嵌套嵌套的那种,在特殊的解决方案里面再说。这里只有基础使用。基本上够的。

单一的一张表里的分析

没有外部Slicer和filter page的显性filter。

创建measures,定义如下:

SalesQuantity = SUM(Sales[Quantity])

展示结果如下:

创建ALLSELECTED应用下的计算值。

因为ALLSELECTED函数里面的参数是谁,就是对谁忽略,即不考虑这个字段的分类。所以如果想选择不考虑Color的计算,定义如下:

Quantity_Brand = CALCULATE(Sales[SalesQuantity],ALLSELECTED('Product'[Color]) )

结果如下:

所以当你应用ALLSELETED计算Quantity的时候,Power BI会先根据拉出来的Brand和Color创建好框架,然后再计算数据值。

其中因为我们指定了ALLSELECTED要忽视Color,所以得到的就是一个Brand下的所有Color的和。如果在这个表里加入其他的列,新建的Quantity_Brand都会发生变化。ta只特定歧视Color一个字段。你也可以在ALLSELECTED里面加入多个字段,也就是忽视多个字段。

特别写了字段Column_A作为ALLSELECTED参数的情况下,Power BI会先根据你拖拉出来的字段建立好上下文结构(就是行和列形成的特定组合)。如果你的行列里包含Column_A,那么你的计算字段就会选择性忽视这个Column_A里面的内容。这个就是官方文档里面写的

Removes context filters from columns and rows(去掉了Column_A) in the current query, while(但同时) retaining(保留了) all other (其他的)context filters or explicit filters.(Explicit filters显性的筛选也是保留的)

加入切片器Slicer的筛选之后

我们拖拖拉拉的切片器和数据表。显示的数据表还是行列组合成的结构。根据选择的不同的切片器数据内容,展示不同的行列组合结果。

如果是需要被歧视的字段。直接在上面结果的基础上拉一个Slicer,如下图:

我选了Gold,得到的是不同Brand下面的Gold的不同值。

如果我选了Gold和Grey。得到结果如下:

得到的结果是不同Brand下的所有Color的和。所以,总结下:

Power BI会先根据切片器Slicer和行列这些上下文来得到展示的框架 ,然后再计算这个框架下的Quantity的值。计算值的时候,考虑忽视Color。

NB!ALLSELECTED是在当前展示框架下的计算。

以上都是ALLSELECTED里面包含参数的,多个参数和一个参数的理解方式一样。就是你想忽视几个字段的问题。

因为ALLSELECTED里面的参数是可以不写的。建立一个无视所有的参数。

Quantity_ALLSelected = CALCULATE([SalesQuantity],ALLSELECTED())

得到结果如下:

果然是在架构结果的基础上忽视了所有。和之前的理解完全一致。加Slicer也和之前的理解是一致的。

那如果,ALLSELECTED里面的参数是一张表呢?还是和之前的理解一样的。没有什么特别之处。

不过,如果也在报表中展示出来,你就会发现,对于ALLSELECTED为空的情况下,两张原本有关系的表,展示出来字段之间是Cross Join的结果。即每一个Brand都有一个Category,但是,通过观察SalesQuantity,你可以看到,其实只有部分Brand才有相应的Category,但是因为Quantity_ALLSelected这个表达式里面ALLSELECTED(),这里选出的两个Brand包含了所有的Category。这里的计算还是很简单的。

忽视特定的,保留其他的。就是级别不同。

从ALLSELECTED()>ALLSELECTED('table')>ALLSELECTED('table'[column])

还有一些ALLSELECTED的复杂用法,但是也基本可以从这些基础来思考,毕竟我们是源于官方文档的理解的。

如果以后遇到嵌套的上层表函数有ALL或者VALUES(也可能是其他的,我只是把常用的两个提下),注意最临近ALLSELECTED这个函数应用的表达式。

想清楚了再做就很简单了。

谢谢阅读。关注转发吖~~


推荐 0
本文由 懒胖子 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册