• [译+解读] by 喜乐君  2019/5

【高能预警】本文难度指数五颗星100%,难度指数比肩最复杂的LOD,建议使用Tableau至少半年以上用户进入。

2018.3发布的新功能集值,进一步扩展了Tableau的交互功能,通过用户选择数据实现了更深入、更多样化的数据对比,并有更多的机会以全新视角理解数据。如今,你可以为数据的访问者提供更丰富的分析、更灵活的探索和更优雅的用户体验。有关集值如何应用于数据对比方面,可以参考上一篇博客

集值使得交互更加具有感染力,无需编程即可对仪表板提供更加精准的控制。它们使得用户能够针对数据访问用户设计交互反馈。借助集值,可以通过单一的选择协调多个可视化视图的不同交互动作,从而创造接近无限的组合。

Amazing! 这个功能,大概会让无数分析师兴奋!

筛选器 VS. 集值 Filter actions vs. set actions

以往,和视图的交互往往被认为就是筛选,其实,筛选只是一种互动形式。有时候,我们还想要更多的互动形式,比如以下的场景:

1、查询与选择相关的数据,同时保留全部数据而非“仅保留”精准匹配的那一部分数据。

2、保留符合任意一个条件的数据条目,而不是满足所有条件的;

3、对所选数据的排序、对齐、分组、下钻操作,同时保留这些数据的背景数据;

4、隐藏数据,而非过滤数据,因此可以在计算中继续使用。

上面的几种情形,都无法使用筛选来实现——筛选就意味着排除,意味着仅仅保留了部分数据。和筛选是保留选择的数据不同,集是把数据分成两类:集内和集外——因此我们可以在保留集外数据的基础上对集内数据进行精准控制。严格的讲,筛选是集的一种特殊形式,其实,集可以实现筛选实现的所有功能,但是反过来可不行。你可以把筛选的结果理解为“只保留”符合特定条件的“集内”成员,而集外成员被排除了。

屏幕快照 2019-05-26 上午10.50.44.png

【喜乐君】为了更好地理解集动作和筛选动作的差异,我做了一个对比图,用来强调集动作是保留了全体数据。

屏幕快照 2019-06-03 上午6.39.27.png

借助集值功能,访问者在视图中选择的数据标记可以保存在集中。由于集可以嵌套(比如创建合并集),也可以应用在计算字段中,因此用户就可以设计更加多样的交互动作,比如类似A或者B的筛选,建立在关系上的筛选等,这就为一些复杂问题比如购物篮分析提供了新的解决方案。在下面分享的视频中,我们将重点论述大家可能遇到的一些特殊场景下的用户操作流程,比如基于关系的筛选,排序和对齐标记,类似于A或者B的筛选,动态分组,运行表计算等。你可以学到以下的内容:

  • 在交互中呈现数据关系和重叠分析
  • 借助Tableau的运算,以运算辅助分析型思考
  • 使用提示和技巧来设计和着色

点击这里下载博客使用的数据源  【这里】 和工作簿  here.

 

案例1 :关系筛选  Filtering on relationships

概念:一些数据代表意义,而另一些数据代表关系。我们都是面向于那些代表意义的数据类型做选择。以2018年世界杯球队举例,人们不会问“哪些球队属于 分组E?”而是这样问,“哪些球队属于巴西所在的分组?”(ps:“巴西”是有意义的数据,而分组E则代表的是数据包含的关系)分组字段只有在我们做检查时有意义。筛选总是选择用户选中的标记,而集可以选择与用户选择有关系的其他字段。

 

数据源:2018年世界杯比赛结果

场景:选择一支球队,统计它参加的比赛数量以及输赢打平的对象,每支球队赢球和失球的数量。

说明:当我们选择一个国家时,进球和失球的数量正好相同,因此进球是相对于所选择的球队而言的。

延伸说明:购物篮分析可以用这个方法来分析,把订单好代替球队,产品代替球队即可。

【常识】
W、D、L分别是 wins、draws、losses,即胜、平、负;
GS 代表“进球”(goals scored),GA 代表“失球”(goals against),GD 代表“净胜球”(goals difference);P 就是“积分”(points)

Example 1 - Filtering on a Related Field.gif

 

【喜乐君解读】借这个题目,我查找了一些球赛知识,仔细看了引用数据源,算是补充了一下足球常识(我是从来不看球赛的人)。

Example 1 世界杯数据源- Filtering on a Related Field.jpg

我们先重新解读一下题目,选择一支球队,看它输赢了多少球,每次的对手是谁,要显示各自的比赛和得分数量。这里的立场是某一种球队,同时要显示相关球队的输赢;因此,最关键的是指定当前球队,输出对应球队立场的输赢——我的赢球就是对方的输球。

首先,我们创建一个team set集,当我们选择一支球队,用它来更新这个集。当时,我们还需要筛选这只球队参加的比赛,排除它没有参加的比赛(game ID),就像上面的图示,我们通过team这个意义字段,来筛选team 关键的game ID字段。因此这里又创建了第二个集 Games played by selected team,它是建立在game id字段上的集,但是判断的标准是关联字段team,因此添加必须是聚合的,这里输入了max( [team] ) ,如下图:

屏幕快照 2019-05-26 下午2.21.43.png

因此,添加集动作后,访问者选择的team会更新team set这个集,这个集进而筛选保留关联的game ID。因此视图中就只保留了所选球队的比赛信息。下图是有无第二个筛选器的对比:

Example 1 世界杯- Filtering on a Related Field.jpg

然后,我们需要在视图中添加比赛信息和得分信息。

每支球队对应的比赛数量比较好计算,Game ID计数即可;关键是如何显示输赢的信息。假设我们要看Russia 队的赢球和输球信息,选择Russia更新集,我们把比赛数据,即每次赢球和输球字段加入视图,如下图。这里Scored默认显示的是每支球队自己在该场的赢球数量。比如第8场Russia VS Croatia,Russia赢3输4,对方反之。

但是,我们只想看主场的立场,即在scored列显示Russia赢球的数量,和对应球队输球的数量,因此需要以此转换。因此新增了两个字段:

Scored!-set集成员视角
if [Team Set] then [Scored] else [Scored Against] END 

Scored against-set集成员视角
if [Team Set] then [Scored Against] else [Scored] END

Example 1 世界杯 转化视角- Filtering on a Related Field.jpg

在此基础上,把数据转化为条形图,输球用负数显示,与赢球双轴对称,比赛输赢用颜色标记。

Example 1-4 世界杯 双轴和颜色- Filtering on a Related Field.jpg

到这里,肯定还有不少人不明白,为什么啊?为什么啊? 特别是像我这样不看球的人,肯定是一脸雾水 ,最后我做一个对比。如下,如果不能转化视角,视图的解释是不对称的。

Example 1-5 世界杯转化视角的对比- Filtering on a Related Field.jpg

可以参考public 效果,可以下载源文件:

https://public.tableau.com/profile/david3363#!/vizhome/Example1-FilteringonaRelatedField/2018WorldCupGamesandGoals

 

案例2:选择数据的排序与对齐 Sorting and aligning on a selection

概念:堆叠条形图(Stacked bar charts)常被用来统计部分相对于总体的占比。最大的部分相对于总体的占比比较清晰,但是要看其他的部分的占比就不太容易,因为它们不是在一个基准上。通过排序和对齐选择的数据标记,交互可以解决这个问题。

数据源:2017-2018年股市数据

场景:每只股票上涨或者下跌的频率如何,涨跌幅度是多少?哪些股票波动最大,而哪些最为稳定?同样,哪些股票上涨更多,而哪些下跌更多?

说明:每个条形代表的是股票每日涨跌幅度的分布情况,深红色部分代表经常下跌的股票,而深紫色代表经常上涨的股票。颜色的深浅代表涨跌变化的程度。选择不同的部分,可以回答关于涨跌幅度、程度和涨跌方向的高级问题。

延伸说明:虽然每只股票的条形长度总是一样,选个一个或者多个分类时,条形都会自动对齐到最小的区间。
Noteworthy: While the bar lengths are always identical across stocks, selecting one or multiple bins realigns the bars against the minimum selected bin.

Example 2 gif- Sorting and Aligning on a Selection

【喜乐君解读】

我梦寐以求的股票分析,不过第一次看到还是被惊讶了,不好理解。我们需要从分析数据源开始。

做任何的分析之前,一定要先看数据源的数据详细级别、数据维度,这样才能更好地理解文中的各个计算字段。本文的数据源是:每个股票每天的变化情况,具体包括股票名称和代码、日期(天)开盘价open、收盘价close、最高价high、最低价low、变化change、百分比变化%change、成交量volume。特别注意这里的change和%change是数据源已经提供好的,是之后我们计算波动的关键。

第一,把所有的股票按照每天的波动百分比划分为七个区间,分布代表跌幅高于3%、跌幅1-3%之间、跌幅0-1%之间、无变化、涨幅0-1%、涨幅1-3%、涨幅3%以上。因为每只股票的当日变化,在数据源层面已经提供了,也就是根据 %change 这个字段,对所有股票每日行情打标记。这里使用了最基本的行级别函数——if函数。

change bin :

if [% Change]>0.03 then “>3% increase”
ELSEIF[% Change]>0.01 then “1-3% increase”
ELSEIF [% Change]>0 then “0-1% increase”
ELSEIF [% Change]=0 then “No Change”
ELSEIF [% Change]>-0.01 then “0-1% decrease”
ELSEIF [% Change]>-0.03 then “1-3% decrease”
ELSEIF [% Change]<=-0.03 then “>3% decrease”
END

注意if判断是对每一行依次判断,因此从最大值开始判断,逐步缩小判断范围,因此在判断涨幅为1~3%区间是,不需要再次声明要 [% Change]< 0.03 。

可视化阶段,为了生成图例,这里使用了柱状图,度量选择了记录数求平均,这样就强制拉平了所有数据的高度。当然,你也可以使用其他计算实现最终的效果,比如显示股票的数量之后做单元格级别的总额百分比;不过相比之下,使用记录数,性能更快。它让每个柱形图的结果都是1.

另外需要注意的是,维度的顺序默认是数据源顺序,需要作出必要的调整,我这里使用了手动排序。

屏幕快照 2019-06-03 上午7.18.47.png

第一部分完成了,关键的第二部分分布来了。

……

 

案例3: “A或B”类型的查询   OR logic applied across selection criteria

概念:多个筛选器总是对数据标记执行“并集”查找操作,而集可以执行“A或B”类型的查询操作。

数据源:伦敦的名义房产价格(1995~2018)

场景:以房产类型分类,对应的房产的总额占比(此句有些费解 :What proportion of properties have a selected estate type OR are categorised by a selected property type? )哪一类房产对应两种标准?对于仅对应一种产品类型的房产而言,产权类型和房屋类型的占比分别是多少?

Scenario: What proportion of properties have a selected estate type OR are categorised by a selected property type? What proportion meet both criteria? Of the proportion that meet only one criteria, what percent meets the estate type criteria and what percent meets the property type criteria?

说明:百分比分析结合“A或者B”条件可以帮助我们分析跨选区的重叠情况。例如,几乎每套房产都对应一种产权类型;但是在独立产权和联排房产(terraced properties)之间有很高的重合度,而独立产品和套内平层(相当于公寓)直接则几乎没有重叠。

延伸说明:增加筛选器时,视图的标记数量一定会减少(因为是求重),而增加“A或者B”类型的集,却可以在结果集中增加标记的数量。

Example 3 gif- OR Filters.gif

【喜乐君】这个题目使用了两个集+四个计算字段,还展示“地产类型”和“房产类型”的相对关系,这里最难的如何把需求转化为数据语言。

为了理解方便,我增加了必要的中文说明,在图形下面添加了交叉表辅助说明。

Example 3 - OR Filters .jpg

这里面使用了两个集、四个计算字段,和关联二者的两个集动作。为了做下面的三个图形,都使用了双轴+同步轴。

Example 3 gif- OR Filters 字段.png

动态分组 Dynamic Grouping

 

案例4:合并详细级别 Merging levels of detail

概念:数据都是按照严格的层次结构保存的,有时候分析经常需要把不同详细级别的数据合并到一个字段上。例如,销售主管经常想要看他们团队每个人的销售达成情况,以此和其他团队的达成做对比。

数据源:2018年世界杯球员和球队的市场价值

场景:选中一个分组,其中每个球队的平均球员价值是多少?与其他分组的球员平均价值相比,差异如何?(ps 注意,前一个问题是球队级别,后一个对比是对比分组级别)

说明:德国队的平均球员价值比其他分组的平均值更高,而和德国队统一分组的其他球队,瑞典队、墨西哥队、韩国队却低于其他分组的平均值。看来墨西哥和瑞典队能超越德国队挺进16强,也算是表现卓越了。

延伸说明:集值的合并详细级别的功能,可以帮助你同时对比组内的成员信息和跨组的信息。

 
4 Merging LoDs.gif

【喜乐君】我们知道,通过拖拽生成的视图,必然是在一个详细级别,如果你想显示两个详细级别的数值,比如同时显示球队和所在group的金额,就要使用LODs详细级别表达式,比如下面的简单示例:

Example 4 - LOD .jpg

这种LODs的方法是不更改数据的标题,而实现的。如果我们想要在左侧标题这里把team和group作为一列标题,也就是混合详细级别显示,应该如何呢? 由于没有这样的默认字段,必然要使用自定义字段来实现。在这里,当我们选择一个球队team时,我们想要显示它所在group分组的所有球队的名称,而其他的group依然是group,通过字段实现如下:

Teams in selected group 

if [Selected Group] then [Team] ELSE [Group] END
//如果在集内,则显示球队名称team
//否则,显示分组名称group

它的逻辑是这样的:

集动作:选择一个team,集自动更新为team所在的group

——> 计算字段:集更新后,上述字段变化,集内的球队名称和其他分组group并并入同一个字段,实现字段混合

——> 视图变化:计算字段变化,引起视图变化。

如同下图所示,熟悉用法之后,辅助说明的第二个视图可以删除。

Example 4 - LOD -2.jpg

之后,就是必要的修饰,比如为着色、显示标签,为了用颜色区分集内和集外,我们可以直接把集字段拖到标记颜色,但是出现一个问题就是多个视图中的同一个分组颜色不一样。为了增强这方面的效果,就要使用地图中的图例group着色,但是如何仅仅突出被选的group呢?

模板中绕了一个圈,通过一个单独的计算字段,隔离没有被选定的group,把它合并到原来的视图中。

Example 4 - LOD  -3.jpg

完整的理解这个逻辑,可以参考下图:

屏幕快照 2019-06-20 上午8.03.46.png

具体可以参考:public 

 

案例5:分组与其他聚合对比 Selection vs other/ conditional aggregation

原理概念:保留筛选动作会移除未选择的分类,而集可以把未选中的分类标记为“其他”。

数据源:伦敦名义房产价格(1995-2018)

场景:选择一个或者多个区域,它们与其他街区的房屋名义价格波动的变化趋势对比。

说明:每当我们多选一个区域,这个区域就会从“其他”的分类中被移除。

延伸说明:如果使用筛选,删除此前的筛选器,视图会显示每个分类的单独的时间趋势线,而使用集合,清除选择会显示这些数据的聚合数据(With filters, clearing selections displays a separate time series for each category.With sets, clearing selections displays aggregate data. )当我们有很多的分类需要选择时,这个功能格外好用。

Example 5动画 - Selection vs Other

【喜乐君】这个可以理解为案例5的简化版本,同时显示集内成员和集外汇总,相当于两个详细级别。为了更好的理解这个题目的逻辑,我做了下面的仪表板,并设置了集动作,左上角可以多选,可以引起左下角集的变化,通过自定义字段,让集内成员显示名称,集外成为统一标记为other,然后把集内成员和other一起显示到时间序列折线上(右上角);相比之下,不使用辅助字段直接把集拖到时间序列的颜色上,只会显示两条折线,分别代表集内和集外(右下角)。

Example 5 - Selection vs Other .jpg

这里还有一个关键地方需要注意:如何保证第一个视图中Districts成员的颜色标记和右侧一致?
最简单的方法是直接使用已经生成的计算字段 Selected Districts,相当于集内成员分别着色,集外成为统一着色(other)。也可以直接在标记那里双击输入:if [District Set] then [District] END 相当于把集外的标记为空值。
因此,多个工作簿颜色统一的逻辑是,通过计算字段确保使用同一个字段,Tableau会自动保持同一个图例使用同一个颜色。 官方的案例中单独生成了一个着色字段,说实话,我没太明白这个的必要性:
colour
if MAX([District Set]) then index() else 0 END
可以参考我的public:案例5 

 

案例6 单个成员下钻 Single member drill down

概念:把某个分类的子类展开,可以帮助我们在一个尺度基础上,对比不同详细级别的数据。

数据源:2018年世界杯球员和球队的市场价

场景:指定分组的球队平均价,或者球队的球员平均价相对于各分组的球员平均价值的差异是多少?

Example 6 动画 - Single Member Drill Down.twbx

延伸说明:比率可以跨分层结构来对比,而绝对值往往不行。比如,我们一般不会比较一个球员相对整个球队的价值,除非是为了突出几个明星球员。例如,球员Lionel Messi单人的市场价值高于整个俄罗斯队。当你使用这个功能时,务必要考虑好比较的度量和分析的目的。

【喜乐君解读】

Tableau通过集值,可以把某个分类的子分类,以及子分类的细分类下钻展开,这里的行功能区,默认情况下包含了一个维度和两个计算字段——只是默认的计算字段为空集,当点击分类或者子分类时,集开始有成员,对应的计算字段返回对应的球队或球员信息,从而出现下钻效果。

具体方法,就是基于两个集创建两个计算字段,可以根据集的变化而变化,从而出现随着点击折叠的效果。

Example 6  - Single Member Drill Down 2.jpg

 

操作顺序 Order of operations

案例7:筛选器计算排序  Compute Rank before filters

概念:像排序之类等表计算都是在筛选器之后才执行的,是在结果集的基础上的计算,然后,有时候你会希望在筛选之间执行表计算。

数据源:2018年世界杯的球员和球队的市场价

场景:选择一个国家,它的每个球员在所在球队、区域以及总体的排序是多少?

说明:Lionel Messi在Argentina队、南非和全球都是排名第一。Harry Kane 在英国队、欧洲都是排名第一,而在全球排名第二。Kylian 在法国队排名第一,欧洲排名第二,世界排名第三。

延伸说明:和筛选不同,聚焦选择的集会在球员的层面做数据分区,同时隐藏集之外的国家。这样就可以保证排序是在所有数据基础上做排序,而非可见的数据做排序。

Noteworthy: Rather than filtering by the selected team, the set capturing the selection partitions the player detail view and hides the countries that are out of the set. This ensures that ranks are computed across all data, not only the visible data.

Example 7动画 - Compute Rank Before Filters

 

案例8:移动平均计算 Computing moving averages across data that is removed from the view

概念:时间序列分析经常需要筛选到指定的时间区间,同时在计算中还需要保留之前时间的数据。(这就要求不能使用筛选器)

数据源:1995-2008年伦敦名义房产价格

场景:可以选择一个时间区域,从而查看每周的销售数量,以及52周的移动平均销售的对比情况。

延伸说明:这里使用了一个自定义计算字段,它返回选择区域的销售数量,未选中部分返回空值(null)。隐藏空值就可以把视图自动放大到指定时间区间。

Example 8动画 - Moving Average

 

集值让互动更上一层楼

集值提供了强大而灵活的设计工具,从而使得整个交互更具有吸引力。它把更多的交互控制权交给设计者,意味着可以终端用户也可以沉浸于更好的自定义体验和交互过程。虽然博客仅仅是展示了几个例子,集值的交互潜力是无限的,我们希望在社区中看到更多的人能发挥集值的强大功能。

探索集值的更多信息

 

May 11, 2019