跳至正文

【加印增补】Tableau常用筛选器及其优先级

//本文为《数据可视化分析:Tableau原理与实践》2021-5第五次加印修订的主要勘误内容,重写了5.5.1小节中除数据源筛选器之外的所有内容。

5.5.1  常用筛选器及其优先级

筛选是最常见的数据增强分析技术,意如其名,“基于筛选条件缩小数据样本”,见于从数据连接、数据整理、数据可视化一直到数据交互展示的每一个环节。在不同的环节,Tableau的筛选器功能和用法各有差别。

学习筛选器有两个关键:熟悉每个筛选器类型的分析阶段及其功能、熟悉多个筛选器相互之间的优先次序(官方称之为“操作顺序”operation orders),本小节涉及的主要形式如图5-67所示。

图567  常见的筛选器及先后顺序

如果在一个视图中同时出现多种筛选器,那么优先级决定先后执行的顺序。每一种筛选都是将上一个环节的数据进一步减少。

1.数据源级别:数据提取和数据源筛选器

数据提取和数据源筛选器都在Desktop数据连接面板界面,如图5-68所示,位置前后相依,目的却截然不同。

图568  数据提取与数据源筛选器

不少人纠结二者的优先级孰高孰低,其实不如思考它们分别的功能定位。数据提取筛选器与“实时连接”相对应,提取的本意是将数据库数据提取到本地,从而减轻分析过程的数据库压力,同时具备了随时随地使用的便携性能——目的是性能或者方便。数据提取并非必然需要筛选,选择“数据提取”默认会为所有数据创建本地缓存,默认“完全提取”。

如果面对海量数据,比如企业的SAP HANA大型数据库,则可以创建“数据提取筛选器”。如图5-69所示,点击数据提取右侧的“编辑”,会弹出如图5-69左侧所示的数据提起筛选器窗口。可以点击“添加筛选器”增加特定条件的筛选,比如选择“订单日期”,仅保留2020年的数据。也可以在下面的“行数”区域,将默认的“所有行”改为“前10000行”,按照数量提取数据。

图569  数据提取筛选器的设置与数据源筛选器

一般而言,数据提取筛选器要么在后期撤销,改为实时连接,要么发布到Tableau Server设置定时刷新,所以本地的数据提取往往具有临时性。

而数据源筛选器的功能截然不同,它是用来“排除异常值及错误值”的,而不是优化性能或移动办公等其他目的。也正因为此,它的筛选结果对此后的所有工作表、仪表板都有效;除非调整数据源设置,否则不会受提取、直连或者服务器设置影响。创建“数据源筛选器”的方式如图5-69所示,点击右上角筛选器下面的“编辑”,会弹出数据源筛选器窗口,添加方式和数据提取的条件筛选一样。比如筛选订单日期2019年的交易。

在第4章4.1.2小节中,使用连接join合并销售明细表和退货明细表,如果要仅保留正常交易的明细(即从左连接一侧剔除内连接的退货),就需要使用数据源筛选器排除(见第4章图4-13),不过这种方式对之后所有视图生效,就无法分析退货产品情况;如果既想分析正常交易的订单,还想分享退货产品的情况,那么就要在视图中使用维度筛选器完成——通过筛选“订单ID(退货交易)”为空NULL或者不为空实现。

总而言之,数据提取筛选器是为了创建分析使用的更小数据样本;而数据源筛选器是为了排除异常值,一经设置往往常年不变。排除错误应该在建立样本之后,在其他所有筛选器之前,这样更有助于性能,所以Tableau设置的优先级是数据提取筛选器优先于数据源筛选器。

2.可视化阶段筛选器分类综述

数据提取和数据源筛选器都是在数据源阶段的筛选,它们对所有工作表、仪表板、故事有效。不同问题的样本范围各有不同,此时就进入了可视化阶段。

从结构上看,筛选由“样本字段”和“筛选条件”两个部分构成,二者对应的字段可以为同一个字段,也可以完全不同,后者是筛选器中复杂形式。这里先简述几种常见的形式:

  • Equal/in 相等筛选——基于数据表明细的行级别判断:
    • 西北地区,各类别的销售额(总和) ——样本字段:地区,筛选条件:等于西北
    • 2020年,各类别的销售额(总和)——样本字段:订单日期,筛选条件:等于2020
    • 上海、北京、深圳城市,各个类别的销售额(总和)——样本字段:城市,筛选条件:等于上海,或等于北京,或等于深圳,即IN(上海,北京,深圳)
  • From~to范围筛选器——基于数据表明细的行级别判断
    • 从2021年1月1日,到4月1日,各类别的销售额——样本字段:日期/日,筛选条件:绝对日期的范围
    • 过去三个月,各类别的销售额——样本字段:日期/月,筛选条件:参考今天TODAY()的相对日期范围
    • 仅保留利润小于0的亏损交易明细,各类别的销售额与利润——样本字段:无/数据明细,筛选条件:利润小于0([利润]<0)。特别注意,这里的筛选条件没有聚合。
  • From~to范围筛选器——基于聚合的条件范围
    • 各子类别的销售额和利润,仅保留销售额总和大于50000元的子类别——样本字段:子类别(和视图层次一致),筛选条件:销售额总和大于5000元(聚合依据是子类别)
    • 筛选利润总和贡献大于1000元的大客户,分析它们在各个子类别的利润——样本字段:客户(与视图层次不一致),筛选条件:利润总和大于1000元(聚合依据是客户)
    • 保留利润总和贡献前10名的客户,分析它们在各个子类别的利润占比——样本字段:客户(与视图层次不一致),筛选条件:利润总和前10名(基于聚合的排序,聚合依据是客户),占比计算需要同时保留不符合条件的样本,使用集set保存样本
    • 首次订单日期在2020年1月1日至2020年5月31日之间的新客户,分析它们在各个子类别的利润总和——筛选字段:客户(与视图层次不一致),筛选条件:基于日期聚合的范围,MIN([订单日期])在2020年1月1日和2020年5月31日之间

总结上述的多种筛选情形,可以按照筛选字段或者筛选条件,划分为不同分类。按照第一字字段分类属性分维度筛选器、度量筛选器;按照第二字段分类属性分为相等判断筛选器(exg.东北、2020年的销售额)、基于连续的范围筛选器(exg.最近三个月、利润总和小于0的客户);按照是否聚合及计算所在层次可分为行级别筛选器、聚合筛选器、表计算筛选器(TC)、条件筛选器(Fixed LOD筛选器)。

当多种类型叠加,多种筛选器就有了优先级和重合,就需要“上下文筛选器”和各种计算筛选器来控制次序。比如“在2020年、东北地区,筛选利润总和大于1000元的客户,分析各个类别、细分的销售额总和、利润总和情况”(注意筛选字段由客户,但视图中没有)

这里先分类介绍,然后结合上下文筛选器分析多种组合时如何解决优先级问题。

3.简单筛选器:基于行级别的筛选器

基于行级别的筛选器,类似于Excel中明细的筛选器,或者SQL中where子句中的筛选器。

常见的筛选都是基于明细的,基于明细的一定不包含任何聚合的过程,比如“2020年的销售额”“消费者市场的客户数”“过去三年的销售额”“利润亏损的交易明细”。

把筛选条件对应的“字段”拖曳到“筛选器”面板中,之后按照提示设置。在构建基本视图之后,也可以在筛选字段上右键“显示筛选器”,字段自动加入筛选器面板,同时在视图右侧出现筛选控件,这种方式主要适用于维度字段。如图5-70所示。

图5-70 通过拖曳+显示度量,或者在视图中直接“显示筛选器”方式创建筛选器

筛选器的关键是日期筛选和度量筛选器,因为二者都具有连续性。

由于日期兼具连续和离散两种特征,两种情形下的筛选器设置略有不同,连续日期筛选器侧重于区间和范围,而离散日期筛选器则侧重于单选和多选。连续日期建立筛选器,又有相对范围(如本周)和绝对范围(如2020年第5周)两种,分别对应图5-71“相对日期”和“日期范围”,它们所显示的筛选器样式也大为不同。

图5-71 创建筛选器、连续日期筛选和离散日期筛选

虽然在上面的日期筛选器弹窗中也有“计数、计数(不同)、最小值、最大值”的聚合筛选选项,但是由于“维度是聚合的依据”,它们必须基于视图维度才有意义,因此不能独立称之为“筛选器”。

维度之外,另一个关键的行级别筛选是“所有值度量筛选器”,即基于数据表明细的度量筛选器。比如,分析“利润亏损(不大于0的交易)的交易,在各个地区的总利润亏损”。这就要求在明细中先仅保留“利润不大于0”的明细行,然后再按照视图的维度(地区)聚合,如图5-72所示。

图5-72 创建基于所有值的度量筛选器

不过,“度量默认聚合”,这里的行级别筛选对应“[利润]<=0”的行级别判断,聚合需要建立在维度基础上,考虑到优先级及其与视图维度的关系,接下来单列讲解。

4.简单聚合筛选:基于视图的聚合筛选器

基于聚合的筛选是略显复杂的形式,不过牢记“维度(层次)是聚合的依据”,一切就能迎刃而解。聚合所依赖的维度又有两种方式,其一是相对于视图的维度而建立聚合的筛选,并随着视图的维度变化而自动变化;其二是绝对指定聚合依赖的维度,不随视图变化而变化。前者是普通的聚合度量筛选器(Measure Filters on Aggregation),后者是高级的条件筛选器(Conditional Filters on Fixed LOD)。这里先介绍基于主视图维度层次的聚合筛选,后者单列下一小节。

简单的聚合筛选器,可以理解为Excel中数据透视表的求和项筛选,和SQL中having子句语法。

先创建一个简单视图“各个客户的利润总和”对离散字段计算连续聚合,列入排序问题类型选择条形图展示。默认展示所有客户的情况,接下来以视图的维度“客户名称”为依据,创建聚合的筛选条件,就可以对视图数据执行筛选动作了。如图7-73所示,把“利润”字段拖曳到筛选器面板,选择“总和”(或其他聚合方式)并设置筛选条件“至少15000”,视图中就仅显示了“利润总和大于1.5万的客户名称,各个客户的利润总和”。

图573  创建基于视图维度的聚合筛选器

聚合不仅仅来自于度量字段,也可以来自于维度字段”。在上图基础上,仅保留获客年度在2018年的客户,获客年度对应“每个客户的最小MIN订单日期”,“最小MIN”是对维度日期的聚合。

如图7-74所示,把“订单日期”拖曳到筛选器面板,选择“最小值”聚合并设置日期范围筛选条件,视图就仅显示了“最小订单日期(即获客日期)为2018年、同时利润总和大于1.5万的客户名称”。注意,这里的利润总和1.5万,是多年贡献的1.5万,而非仅仅在2018年(2018年是聚合条件只对维度有效,对利润总和不产生影响)。两个聚合筛选条件是独立的,计算重合部分。

图574  创建基于视图维度的维度聚合筛选器,并与度量聚合计算重合项

“维度是聚合的依据”,因此筛选器中的筛选条件都是以视图的层次为依据的。随着视图维度的变化,聚合也会变化。如果把视图中“客户名称”改为“产品名称”,那么视图就变成了“产品最小日期(即上架日期)为2018年,且利润总和大于等于1.5万的产品”。正因为此,要特别注意聚合条件在视图变化后对视图的影响。

既然在“筛选器”面板中直接增加聚合筛选条件会受视图维度的影响,如何绝对指定聚合条件依赖的字段,免于视图层次变化的影响呢?比如要做“客户利润总和大于等于1.5万的客户的探索分析”,希望从年度、类别、细分等多个角度展开分析。这就是“基于特定维度的聚合条件筛选”(Conditional Filters on Fixed LOD),简称“条件筛选器”(Conditional filters),它和第十章讲解的FIXED LOD表达式有相通之处。考虑到它的独特性,这里单独小节介绍。

5.基于特定维度的聚合条件筛选——“条件筛选器”及其特殊形式“顶部筛选器”

在这个类型中,聚合筛选条件依赖的维度字段需要明确指定,通常和视图中的维度不同。比如“仅筛选利润总和大于1.5万的大客户,分析他们在各类别上的销售额和利润总和”。波浪线部分代表分析样本,其中“客户”代表筛选字段,即聚合筛选条件的依据;蓝色代表问题层次,是答案的聚合依据。在样本子句和问题描述子句中,维度和聚合分别位于“的”的两侧。

此类问题的关键要点是,拖曳样本范围中的筛选字段,而非筛选条件。

先创建排序条形图“各类别上的销售额和利润总和”。之后把样本范围对应的筛选字段“客户名称”拖曳到视图中的“筛选器”面板,在弹出的窗口设置“筛选条件”——利润的总和大于15000,如图7-75所示。

图575  创建条件筛选器:独立于视图指定单独层次的聚合条件和筛选

特别注意,聚合筛选条件(SUM([利润])>=15000)的依据是“客户名称”,而视图中销售额、利润聚合的依据是“类别”,二者对应不同的问题层次。因此,条件筛选器的本质是在视图层次之外的层次完成预先聚合和判断,正因为此,它对应第10章Fixed another LOD计算——相对视图指定单独层次的预先聚合。

在“条件筛选器”中,有一种特殊的类型,称为“顶部/底部前N筛选器”,即在聚合的基础上嵌套排名,而后筛选。比如“销售额总和前10名的客户,对应客户的购买频次分别是多少”。 (对应函数RANK(SUM([销售额]))<=N,同时还要Fixed 客户LOD)

在“每个客户的购买频次COUNTD([订单ID])”的条形图中,把筛选字段“客户名称”拖曳到筛选器面板,在弹出的配置窗口选择“顶部”并完成设置即可。如图7-76所示。

图576  顶部/底部筛选器:独立于视图指定单独层次的聚合条件和筛选

诸如“客户名称”的离散维度拖曳到筛选器,对应的筛选条件有四种。如上图5-76左侧所示。 “常规”是单选或多选每一个客户 “通配符”执行模糊条件(比如以“吴”开头的客户名称),“条件”执行基于判断的筛选 “顶部”执行前N或后N的极值筛选。前面两种对应行级别的相等判断,后面两种基于条件,可以按字段聚合,可以按照公式单独聚合。需要特别注意的是,这里可以同时设置多个条件,比如销售额大于10万元且排在前20名的客户,最后取同时满足所有条件的数据。

至此,本书介绍了主要的筛选类型:

新用户可以使用Excel、高级用户可以使用SQL中的筛选对照理解这里的行级别筛选和聚合筛选,如表所示。难度逐步增加,最难的是“聚合筛选—基于特定维度的聚合条件筛选”

筛选类型实例ExcelSQLTableau
行级别筛选—维度华北地区中、2020年数据表明细筛选where子句维度
行级别筛选—度量利润小于0的明细度量—“所有值“
聚合筛选—基于视图层次利润总和大于1.5万的客户数据透视表中,根据“求和项:利润”筛选having 子句度量—“总和“筛选
聚合筛选—基于特定维度的聚合条件筛选仅保留利润总和大于1.5万的客户,查看各类别的利润总和/在where中嵌套select having子句条件筛选器/Fixed LOD计算

6.使用上下文筛选器调整优先级

在所有的维度筛选器中,条件筛选和顶部筛选在业务分析中使用频繁,又由于其优先级高于维度筛选器,因此经常需要“额外照顾”。

比如要分析“西北区域中,销售额排名前10的客户”。很明显,这个问题对应的可视化是“客户的销售额排名”,筛选条件是“西北”地区和客户筛选“前10名”,创建条形图,然后拖入两个筛选字段并设置筛选,结果如图5-77右侧所示。

图577  同时存在顶部筛选和维度筛选两种类型

很明显,只有3个客户,结果不是我们想要的。为什么?我们希望“先做区域筛选,再做客户名称前10筛选”,无形中给两个筛选器定了优先级预设,不过Tableau默认的逻辑正好相反,它是“先做客户名称前10筛选,再从结果中筛选哪几个在西北区域”,所以结果低于10个。

初学者可能会尝试更改两个筛选条件在筛选器中的位置,这个并不起作用,因为筛选器的逻辑顺序是程序设定的,与位置无关。

那怎么办呢?此时就需要请出来大名鼎鼎的“上下文筛选器”能把“地区筛选器”优先级调整到“客户名称”对应的“顶部前10筛选器”之前,从而得出正确的数据。不过要注意,“上下文筛选器”不是通过拖曳字段添加的,而是基于目前筛选器而设置的,如图5-78所示。

图578  上下文筛选器

“上下文筛选器”的英文是Context Filter,翻译为“上下文”,笔者更倾向于用Context的另一个含义来理解——背景筛选器。可视化如同在数据的大幕布上画画,筛选器是一层层的图层,越靠近数据源的优先级越高,通过把筛选器调整为“背景筛选器”,让它更靠近数据源,从而优先执行。

我们的每一个业务问题,都是“分析对象”和“筛选条件”的结合,所以熟练地使用筛选器,不断地缩小分析样本接近关键数据,才能准确地发现数据背后的真谛。

//喜乐君Apr 28, 2021


了解 喜乐君 的更多信息

订阅后即可通过电子邮件收到最新文章。

了解 喜乐君 的更多信息

立即订阅以继续阅读并访问完整档案。

Continue reading