DAX分享17:筛选器Slicer的应用--隐藏筛选出的字段

浏览: 57

​这个是最近比较好玩的案例了。

不过解决方案不是我想的。很久之前Tony同学就和我说过这个solution,当时没有在意。最近我也做这个change,才发现这个solution真的挺好玩的。

先说下需求吧。

如下图所示:主表中有三个内容,一个关于Color的Slicer,一个Others表,一个Selected表。

要求,在Color筛选Slicer里面选中任意的Color内容:

在"Others"表里面显示全部的Color的Quantity的和,但是不包括选中的Color内容;在“Selected"表里面显示选中的Color的Quantity的和。

Selected表没啥可说的,就是最常规的一个表;不过有一点,如果什么Color都没有选择的时候,Selected表默认应该是空的

说到这里,可能大家已经能想到一些应用场景。

场景举例:如上图所示,可能Black,Silver和White这三个Color最近在做活动,比如满减,捆绑销售,或者打折什么的。这样必将影响总体销量。如果分析的时候,可以把已知做活动的Color先拿出来,然后再看其他Color的销量情况,占比变化等。

接下来,分析下已知内容

对于Power BI Report中的Visual表:Others Table和Selected Table。他们里面的内容,都是一个维度信息(Color)和一个聚合数字(Quantity)。 聚合数字和Color筛选Slicer是没有关系的,聚合数字只是根据显示的不同的Color,来显示汇总值。所以计算聚合数字(Quantity)的时候,Others Table要考虑忽略Color的筛选Slicer的变化影响。而Selected Table,按照常规做就可以。

这个案例,简单来说就是:当启动了Color筛选器之后,Others Table要隐藏被选择的内容,Selected Table要显示被选择的内容。

在现有Product表的Color字段和Sales表的Quantity字段来说,对于选择了的Color筛选Slicer的内容,怎么做都不能实现Others Table里面的隐藏被选择内容。所以,肯定是要新建一个表来做辅助表了。

1. 点击New table, 定义辅助表Dim_Color的DAX内容如下:

Dim_Color = DISTINCT('Product'[Color])

2. 建立关系

3. 创建度量值Hide_Show处理对于筛选Color控制显示和隐藏的Flag (点)

Hide_Show = IF(NOT(ISFILTERED('Product'[Color])),0,  IF(SELECTEDVALUE('Product'[Color]) in VALUES('Dim_Color'[Color]), 1,0))

这个DAX写的挺巧妙的。简单,但是功能强大。

4. 创建度量值Quantity_Sum,DAX内容如下:

Quantity_Sum = CALCULATE(SUM(Sales[Quantity]),ALL('Product'[Color]))

这个主要是用在Others Table里面的。为了不受选择了的Color 筛选Slicer影响,这里用了All函数。

5. 建立一个Others Table如下图所示

Others Table,设置Hide_Show永远为0.

 

建立Selected Table如下图:

Selected Table,设置Hide_Show永远为1.

NB!Others Table和Selected Table里面的Color字段来自于辅助表Dim_Color中的Color字段;

Color筛选Slicer来自于Prodcut表的Color字段;

Others Table和Selected Table这两个Visual,要添加Visual级别的Filter。

最终效果:随便选了几个Color,如下图所示。Others表里是不包括选中的Color,Selected表里是包括选中的Color。

默认情况下,如下图所示:

这么做下来好像也还可以。对Product表的Color字段,既然做了筛选Slicer,它就是一个子集了。在Others Table里,我们首先需要一个Color全集,然后隐藏筛选Color子集。Product表的Color字段不可能即做子集又做全集,所以我们创建了辅助表Dim_Color。这里Hide_Show这个Flag蛮巧妙的。挺好的体现了Simple but not easy.

本文得到了Tony同学的Solution授权。并且Tony同学提供了很多很好的意见和建议,丰富了这篇文章的内容和细节。谢谢!

谢谢关注!


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

0 个评论

要回复文章请先登录注册