直接过滤 Direct Filter
直接过滤和间接过滤不是什么Tableau术语, 这俩名字是我自己起的, 用来帮助你理解的. 那什么是直接过滤? 简单的说, 直接过滤就是你在Tableau的这个制图界面中的Filters里能找到的Filter.
这时候你可能会说: 啊? 难道还有找不到的? 是的, 有在这找不到的.
直接filter非常好理解, 基本上就是你把一个field拖拽到这里, 然后弹出一个画面, 你按照需求设置就好了. 再者就是你创建一个计算, 比如[date] >= #2024-01-01# 然后选择True. 一个直接Filter就创建好了.
间接过滤 Indirect Filter
间接过滤是指一个Filter可以隐藏在计算当中而不会出现在直接过滤所使用的Filters区域. 我将用接下来这个例子来解释为什么需要使用Indirect Filter
下边的这个截图里显示的是每个Region, 每一年的Sales, Profit和quantity. 假设我现在要求创建一个它旁边的这个截图里的报告, 第一个column是来自Central Region的Sales, 第二个column是来自East的quantity, 第三个column是来自South的Profit. 遇到这种情况你用直接Filter还能做到么?
Indirect Filter的创建
间接Filter是通过创建一个
IF + Filter + THEN + MEASURE + END 的计算来实现的.
比如 Central Sales 就是IF [Region] = 'Central' THEN [Sales] END
East Quantity 就是IF [Region] = 'East' THEN [Quantity] END
间接Filter的这种写法在Tableau当中极其常见, 但是我认为在Tableau的教学当中, 没有给予足够的重视, 或者说可能不会把这个部分放在Filter下边所以我认为间接Filter必须学习Filter的过程当中重点提及.
间接过滤的实现原理
下面这张图完美的展示了我们的间接Filter是如何工作的.
我们以Central Sales为例, 如果[Region]这个Column里的值等于Central, 那么Central Sales就会把同一行里[Sales]这一列里的值复制过去, 而如果[Region]不等于Central. 那么Central Sales的值就是Null.
因此Central Sales你无论放在什么样的图表里, 它的基因里都带着Region = Central的这个Filter. 而同时这个Filter又不会出现在你习惯.
直接过滤和间接过滤的不同原理
接下来, 我就用上边的这个动图来解释一下直接过滤和间接过滤在原理上的不同.
首先我在已有的表格上添加了一个Field: CNT(Orders). 我在前边一再讲过, CNT(Orders)是Tableau所提供的辅助计算. 这个辅助计算会告诉你在这个计算的背后, 一共有多少行数据被包括进去.
比如在动图当中, 在2020年这一行, 不管是Central Sales还是East Quantity 后边都有2051行数据在支持他们. 更为关键的是: 在这2051行数据当中, 哪一个区域的数据都有.
当我点开View Data, 你会发现所有的数据都在那, 唯一的区别就是如果不满足Indirect Filter, 那我们所创建的计算里的值就是空值.
接下来我们用相同的方法来研究一下Direct Filter. 当我把Region添加到Filter区域并只选择East的时候, 你会发现Count of Orders这一列的值发生了变化. 所有的值都变小了.
当我再打开View Data时, 这个Worksheet后边的数据就只有Region = East的保留了下来, 而其他Region的数据都不见了.
Indirect Filter不会把数据排除出当前的分析范围, 而只是会把不满足Filter的值替换成空值. Direct Filter则是直接斩草除根, 不满足Filter的数据, 直接被排除当前Workfsheet的分析范围之外, 直接让所有的计算无法引用Filter之外的数据. 间接过滤实际上没有过滤掉任何数据, 只是偷偷的把他们替换成了没有意义的值.