从数据到信息
从信息到洞察

视觉筛选器的生效原理

视觉筛选器位于画布右侧的筛选器栏,栏位里总共有四种筛选器,作用级别分别是视觉、页面、钻取和报告。

聊聊视觉筛选器在层级结构中的实现视觉筛选器

如果你没找到这个视觉筛选器,选中任意图表就看到了,这恰好也能说明它的作用范围,只对当前图表生效,这个东西的功能比较简单,我们先从基本场景开始分析。
聊聊视觉筛选器在层级结构中的实现
这是用一张2013到2018年的日期表生成的柱形图,按年统计天数。视觉筛选器中的天数和year是图表创建后自动添加的,我加入一个新的筛选条件week,它是数据源中的一个计算列,返回当前日期对应的周数,从1到52(或53)循环。下面我们来做几项测试看看视觉筛选器是如何起作用的。

先用天数筛选图表

聊聊视觉筛选器在层级结构中的实现筛选天数是366的年份

换用week筛选一下

聊聊视觉筛选器在层级结构中的实现

不同年份第一周的天数有所差别,没问题。

筛选条件加入一个新的度量值

不知道你注意没有,视觉筛选器是所有筛选器中唯一支持度量值做筛选条件的,因为只有图表环境才能提供明确的计值上下文
定义一个度量值Sum of weeknum = SUM(DIMDATE[Week])  加入筛选器,新的度量值会在左侧图表的上下文环境计值,要用它筛选图表,必须先搞清楚它的计值结果。
聊聊视觉筛选器在层级结构中的实现

相同的维度,sum of weeknum的结果

所以我如果想用这个度量值筛选原表,比如筛选出2016年,可以这么设定
聊聊视觉筛选器在层级结构中的实现新度量值只参与筛选,没有被显示

以上三个例子都比较直观:修改筛选条件,计值结果发生相应变化。但这里可以问一个问题:

视觉筛选器里的约束条件是在原表计算完成后施加的?还是在原表计算前,先调整了公式的计值上下文后,原表计算才发生的?

仔细想想,出于性能考虑应该是后者,否则耗时计算出的结果最后没有使用,岂不是浪费资源。(结论的证明在文章最后给出)

其实这个规律也是其他筛选器通用的,之所以选择视觉筛选器,是因为它还可以添加度量值做筛选条件,会让结果不那么直观。

上面举的都是简单的例子,下面我们进入正题,看看在层级结构中视觉筛选器是如何生效的。这篇文章的引子来自一位朋友的问题:
聊聊视觉筛选器在层级结构中的实现提问截图

两个一模一样的图,都按季度计算[period_choice]的大小(忽略另一个度量值),从左边那个可以看出,从2015Q1开始[period_choice](折线)的值都为1。右边的图表Copy了左边的,只在视觉筛选器设置了period_choice=1,结果与左边的图对不上了,只剩下2017Q3和2017Q4。与之前三个例子不同的是,这里的横轴用了时间层级结构。

所以这个反直觉的结果是怎么得出的?题目中的公式定义的比较复杂,为了便于理解,抽象成一个简单问题。
聊聊视觉筛选器在层级结构中的实现
稍微修改一下开始时候用的例子,加入层级

还是用开始的例子,仿照步骤1,COPY筛选条件 天数=366,看一下什么结果聊聊视觉筛选器在层级结构中的实现

结果为空

看来在层级结构下,这次视觉筛选器的效果确实有点反直觉,不过因为这个例子足够简单,你大概能猜出来是怎么回事,筛选条件的计值上下文从年转移到了月。于是筛选条件改成[天数]=31试试看聊聊视觉筛选器在层级结构中的实现

果然,返回了每年31天的月份对应的总天数。

    对于包含层级结构的图表,视觉筛选器总在最细粒度执行计算后返回满足条件的虚拟表,随后虚拟表作为筛选上下文被添加到图表所用度量值的计值环境,影响了度量值的最终结果。

同一个度量值,在同一个图表中,因为出现的位置不同,使用了不同的计值环境。

如果把上图的筛选过程翻译成DAX语言,是这样的
聊聊视觉筛选器在层级结构中的实现

代码佐证了在本文中提出的计值顺序的问题:视觉筛选器创建了一个筛选条件,随后将其施加到了图表公式,改变了[天数]计值的上下文环境,这里解决了文章中的那个关于计值顺序的疑问;而在筛选条件中计算的[天数]同时考虑了年和月,这是结果反直觉的原因。

 

原创内容 转载请联系作者授权:PowerBI极客 » 视觉筛选器的生效原理

说点什么

avatar
1000
 
鼓掌微笑开心憧憬爱你色并不觉得吃瓜doge二哈喵喵思考笑哭捂脸悲伤大哭抓狂汗偷笑打脸捂眼黑线问号晕拜拜闭嘴衰咒骂ok作揖
  订阅本文评论  
提醒