2.2.1 create sets by using marks and the data pane

Set集合的概念

如果我们抛开Tableau不谈, 只谈集合的话, 集合其实是一个数学概念. 在高中数学的时候, 你是否还记得实数集, 整数集这些名字, 他们名字当中的这个集就是集合. 然后集合和集合之间还有计算, 比如计算两个集合的交集, 并集等等. 哪怕你前边没有接触过, 或者已经不记得集合的概念也没有关系. 今天我们不研究数学,只研究Tableau.

集合如果我们单从字面的意思来看, 那就是把一些东西聚集在一起,创建一个Group. 但是有的同学会说,唉,我们前边不是已经学习过Group了, 这里为啥还要再创建一个概念叫set呢. 其实这个问题问的非常好. 如果我用Group作为对比, 你就可以更加容易的了解Set.

首先让我们来回忆Group的创建的过程, 我们右键点击Subcategory, 然后点击Create Group, 手动的一个一个把每个值分配到不同的组, 然后给他们的这个Group命名. 这其中一个最核心的点是, 是你自己决定Subcategory当中的某一个值进入到某个Group, 而这其中Tablaeu没有任何参与.

我们现在把情况稍微改变一下, 我们想把销售额前三的subcategory自动归为一组, 然后看这三个subcategory到底都包含什么产品的话,如果用group我们会怎么做, 我们需要先创建一个表格, 把每一个subcategory的total sales都算出来, 然后手动地把这三个subcategory归为一个group. 在Create Group Using Headers, 我们就是这么做的对吧.

现在问题又来了, 我们数据当中的年份是从2020年到2023年. 我们所有的计算都是基于这个时间段的数据. 那么如果我们的后台数据更新了, 2024年的数据添加进来了呢. 我们的top 3 subcategory是不是就不一定还是我们当初的那三个了? 我们得重新算吧.

这里就出现了我们需要集合的第一个场景:
我们需要创建一个使用自定义条件创建的Group而不是一个手动分配的Group. 只要满足提前设置好的条件, 这个Group会自动根据当前数据进行调整, 而无需我的干预.

而Group与Set还有第二个区别. 在Group当中,你可以创建多个Group. 在我们的Group例子当中,Supplier A是一个group, Supplier B是另一个group, 然后其他是一个group.
但是在Set当中, 最后相当于只有两个Group:
所有满足条件的值进入到In这个Group当中, 而所有不满足条件的值进入到Out这个Group当中. In的含义就是你满足了条件,在集合内 In the set, 而Out就是没有满足, Out of the set.

那么为什么会只有In&Out这两个结果呢? 这就要谈到Set的第三点: Set和Set之间是可以互相计算的

假设我们创建了Set A和Set B, 两个Set:

Set A使用的条件是: 在Subcategory当中, 所有年份总销售额排名前三的Subcategory
Set B使用的条件是: 在Subcategory当中,平均年销售额大于十万的Subcategory

在SetA和SetB的基础上,我们可以创建一个新的Set: Set C.

Set C的条件就是Set C中的Subcategory必须同时出现在Set A 的 In + Set B 的 In 当中, 换句话说, 同时满足这两个条件的Subcategory就会进入Set C.

到了这里我们可以稍微总结一下Set:

1. Set会根据设置好的条件来给数据分组. 条件分组的依据

2. 分组最终的结果只有两个: In 和 Out组. In代表所有满足条件的值, Out代表不满足条件的值

3. Set和Set之间可以进行计算, 再创建一个新的Set.

Set真正要解决的问题: 间接过滤问题

前边的部分主要是帮助你理解这个概念, 但是这不代表Set和Group的区别就是一个是手动定义, 一个是根据条件自定义. Set的本质上,更趋近于一个Filter, 也就是过滤器. 虽然我们还没有讲到过过滤器, 但是只要你使用过Excel, 或者接触过数据, Filter的定义就不难理解, 比如我想让Subcategory只保留Appliance, 我想让Region只保留Central等等.

我会管这种Filter叫做直接过滤. 这个词是我自己发明的啊, 我不知道别人怎么叫. 那么现在再来看看Set, 我们此刻的条件是基于Subcategory等于什么吗? 我们是只关注某个特定的subcategory么? 如果是的话, 我用费这么大劲讲set吗.

我们真正关注的其实这些subcategory后边的total sales, 哪个subcategory的total sales高 我就关注那个subcategory. 那么这个问题就是直接过滤所无法解决的,我管这个叫间接过滤, 这才是Set这个功能真正要解决的问题. 我们通过total sales来间接筛选subcategory.

间接过滤问题下的排序问题或者说叫Top N问题

现在让我们再回顾一下Set A: 在Subcategory当中, 找出所有年份总销售额排名前三的Subcategory 创建一个set. 如果按照逻辑顺序, 我们需要下边这些计算步骤:

1. 计算每个subcategory的total sales

2. 计算这些total sales的rank, 也就是顺序, 假设我们管这个结果叫做[Sales Rank by Subcategory]

3. [Sales Rank by Subcategory] <=3

在上述这些过程当中, 其实还有一个问题当前在Tableau当中没有办法解决. 那就是如何计算Rank的问题. Tableau当前的Rank Function并不支持LOD而只是一个Table Function, 因此如果你想要在数据源层面计算排序, 目前是做不到的. 这句话以你当前的知识是没法理解的. 这是Tableau当前或者说LOD当前一个很大的局限.

你只需要记住这一条: 如果你想要显示Top N of xxx, 不要尝试用Rank Function, 不用尝试Rank, 不要尝试Rank. 而是直接使用Set来创建

Set并不会告诉你具体某个Subcategory的 Total Sales Rank到底是多少, 但是你创建的Set, 你把它想象成一个Filter, 这个Filter里一定包含前三.

如果给你一个口诀就是: 只要遇到Top N, SET咣咣踹你门! 就这一句话就能帮你剩下不知道多少时间.

Bottom N 和 Middle N问题

今天既然讲到这了, 老师就得把问题讲透. 什么是Bottom N, 我们老说Top N Top N的, 但是实际上Set是一样可以定义Bottom N的, 也就是Bottom 3 Subcategory by total sales. 这个一样是可以通过Set来解决的. Set 在提供了Top选项的同时也提供了Bottom这个选项, 你不仅可以计算Top, 同样可以计算Bottom.

接下来难度升级, 就到了拔高的部分. 如果我现在要求显示根据total sales排序, 创建一个只包括排名第四到第六名的subcategory, 同学你该如何应对呢? 这就是我在标题当中写的Middle N问题. 我们再换个角度, 倒数第四到第六名的subcategory呢? 这个问题你思考过没有? 这里我先留个悬念, 在下边创建Set的部分我会给出答案.


如何创建Set?

第一步: 右键点击Sub-Category, 然后选择Create Set, 然后我们就来到了Create Set的这个界面

第二步: 设置Create Set

Create Set - General

当我们选中Create Set的这个选项之后, 就能看到左侧截图当中的这个界面.

首先最上边是设置这个Set的名字. 然后它的下边有3个tab, 分别是General, Condition和Top.

General选项就是我前边所提到的Direct Filter, 所有你☑️的值就会加入到创建的set中, 成为In Group, 所有没有被选中的值,就会自动成为Out

Create Set - Condition

Conditon对应我们所说的间接过滤.
在左侧所显示的这个界面当中, 我所选中的是根据Subtegory的SUM(Sales)>=10,000 来创建一个Set.

如果你不是很确定这个数值怎么办? Tableau给你提供了一个辅助工具, 如果你点击load, Tableau会告诉你, 每个sub category的total sales 最低是8,532, 最高是335,768

你如果想要设置一个值, 不要超过这个范围. 这个Range of Values不是让你设置最大值 最小值的, 而是让你根据当前数据当中的最大值, 最小值来合理的设置你的条件

Create Set - Top

Top选项才是Set的重点, 在左边的截图当中, 我们创建了一个叫做Top 3 Subategory by Total Sales 的set

在设置条件的部分, 我们选择的是Top 3 by Sales Sum. 在Top的部分, 其实有一个下拉⬇️, 如果你点击这个箭头, 就会出现Bottom的选项. 也就是我们可以只包括Bottom 3 Subcategory by Sales Sum.


Set最终使用的Condition

我们在上一个部分展示了Set可以用三种方式来定义 但是如果这三个都选了会发生什么?

在左侧的这个界面当中, 最下方有一个叫做Summary的版块.

这个summary的版块会告诉你当前这个Set已经有哪些Condition了.

换句话说, General, Contion, Top会共同作用在我们所创建的set当中, 而不是其中的某一个.

Selected 4 of 17 values意味着我们只勾选了四个值.

Condition: Sum([Sales]) >= 100000是我们在Condition下边所添加的条件

Limit: Top 3 by Sum([Sales]) 是我们在Top部分所添加的条件