喜乐君

Better Life, Loving Tableau

set action, Tableau

【Set Action】“集值”可视化对比八大绝技 -中级篇

[English]by BETHANY LYONS  | Tableau产品经理 2018/11/06
[译+说明]by 喜乐君 Tableau Partner

//本文是官方英文的翻译,同时增加了每个案例的步骤解读。不做搬运工,而是做解说家。——喜乐君

交互是高级分析的核心操作,它可以帮助用户回答更深的问题、帮助终端用户在互动中寻找答案,提供更好的客户用户体验。更加引入注目的互动可以为你的听众,比如客户和利益相关者呈现更丰富的内容,而这驱使他们的好奇心和参与感,正是好奇心和参与感,驱动每个人的数据素养。

目前,Tableau的互动依然关注于筛选和高亮这样已有的动作类型,遗憾的是这些互动的行为结果都是固定的,比如高亮可以突出显示,却不能把选择的部分单独标记颜色,筛选可以保留结果却不能对比它与整体的关系。因此,我们推出了新的互动形式——把集和动作结合的集值(此前曾经翻译为集动作)。

点击下载本文的多个案例(文件偏大,分为三个压缩包):

新的互动形式——集值set actions

集非常强大,它可以把用户的选择用于可视化和计算的各种地方,集可以对视图中的轴或者计算字段的字段进行着色、分组、筛选,它还可以聚合、组合字段、隐藏数据,以及筛选相关的字段,而这仅仅是个开始。

在2018.3版本中,集值可以帮助大家把视图中的数据建立选区,然后保存到集中。集值不仅仅是一种动作类型,它扩展了Tableau的交互方式,从而可以支持更多的用户自定义动作。

屏幕快照 2019-06-23 上午7.28.16

集可以在不同的工作簿中展现不同的结果,比如同一个集在视图A中用于着色,在视图B中用于隐藏数据,而在视图C中用于筛选数据轴。如今有了集值动作,任何一个工作簿中的集被修改,其他的目标工作簿都可以相应地更新。这种建立在一个集基础上的一致性体验可以增强展示的丰富性,为多种交互式分析程序的终端用户所使用。

屏幕快照 2019-05-07 上午7.47.50.png

这篇博客将集中介绍使用集值做对比分析,下一篇将更多地介绍集值带来的交互分析技术。

学习目标

集值连接了两个现有功能(集和动作),为基于已有功能创造新的交互功能提供了各种可能性。在这篇博客中,我们将探索“部分对比总体的占比分析”、“部分对比部分的比较分析”、“选区的差异分析”三个主题。虽然集值让这些分析成场景变得可能,不过这里的案例侧重于终端数据设计流。我们可以获得以下:

  • 对比分析的新方法,增强了对数据的理解和沟通
  • 数据结构如何影响计算结果,如何选择运用表计算还是详细级别表达式
  • 借助互动,一次性展示多重数据,比如随时间的变化、相对差异、部分与整体对比分析。

一、“部分VS整体”分析 Part-to-whole analysis

当我们分析选区相对于总体的贡献时,有时候,我们想计算它相对于总体的百分比,而又想知道相对于总体的绝对值;在另一些情形中,你还想计算选区的部分相当于总体的差异。接下来的几个例子,我们想论述这几个场景,这三个例子逐次递进,因此建议依次观察。

案例1:作为总体部分的选区  Selection as a percent of total

  • 概念:和筛选是仅保留筛选后的结果不同,集则根据选取数据分为了集内和集外两部分。保留了所有的数据意味着你可以轻松计算选中数据的总体占比。
  • 数据源:2018年世界杯球员和球队的市场价
  • 场景:2018年世界杯,选择的球队、组或者区域的市场价格占总体的比例多少?同时,对应的球队的数量占总体的比例多少?
  • 说明:当选择欧洲时,你可以发现它以44%的球队数量占比,贡献了66%的市场价值占比。
  • 注意:交互中你会发现帕累托法则(二八原则)。交互式分析有助于直观简洁地探索数据背后的概念。

% of total gif.gif

「喜乐君说明」说一下上面的动画视图,选择的国家构成集。左边地图颜色代表的每个国家的market value,右侧两个饼图,分别显示集的市场价值占比和球队数量占比——关键是共用一个集(team set)。选择几个国家,就会更新team set集,由此就会显示新集的金额占比和团队占比。

这里有一个需要注意的细节是,主视图中加入了多个详细级别,方便右键选择所在的群组。

屏幕快照 2019-05-03 下午3.25.30.png

案例2:比例刷 Proportional brushing

  • 概念:比例刷作为一种交互方式,用来对比选中的数据相对于总体的比例。
  • 场景:哪些球员位置的市场价最高?对于球队而言,哪些球员位置贡献了更大的市场价值比例?
  • 说明:当位置的市场价占比高于选择的球队占比,说明这些选中的球队拥有更高价值的球员。 当位置上的占比与总体的占比不同时,说明这些选择的球队在选区内的相对实力或者劣势。
  • 延伸说明:筛选帮助我们知道数据是多少,而集(通过占比分析)帮助我们理解和解释结果。
Example 2动画 - Proportional Brushing
【喜乐君说明】在第一个案例的基础上,增加了右侧的比例刷,默认的条形图代表的是集中各足球位置的市场价,坐标轴为市场价的金额,文本代表总体为100%。当我们选择欧洲时,原来的集就动态变为了欧洲所有国家的球队,此时条形图长度依然不变(代表所有国家球队各位置的市场价),而高亮的部分代表新集中球队相应的位置市场价占比。
在展示上,和饼图并无二致,只是增加了横轴标题,不过就可以进一步增强对比分析,此为比例刷。
不过,这里比较有参考价值的地方是建立了三种排序的方式——sort overall总体排序,by selection按照选区排序,%total按照占比排序,均为降序,这是如何实现的呢?秘诀在于“position位置”字段的自定义排序功能。使用了专门的自定义字段。
example 2 排序.png
排序的逻辑:新建一个参数“sort by”,控制参数空间的显示内容,建立默认的三个可选项。
屏幕快照 2019-05-04 上午9.00.54.png
然后把三个选项的参数,分别对应一个计算公式,通过sort函数来控制,每更换一个选项,对应更换了排序的依据,如下:
CASE [Sort By]
WHEN “Overall” then SUM([Market Value (£)])
WHEN “Selection” then SUM([Market Value for Selection])
ELSE [% of total]
END
而第二个和第三个结果均是自定义函数。

自定义字段 :Market Value for Selection

公式:if [Team Set] then [Market Value (£)] END

这里也可以使用iif函数,即:iif ( [Team Set], [Market Value (£)] ,0)

自定义字段:% of total

公式:SUM([Market Value for Selection])/SUM([Market Value (£)])

案例3:总体排序的差异和选区排序 Difference in overall rank and rank across a selection

  • 概念:集可以用于指定的筛选结果。筛选都是应用于视图中的所有字段,而集可以应用于单个坐标轴或者是某个字段的子集。
  • 场景:在上面的例子中,更改总体排序和选择的数据排序时,结果会跳动。用户有时候需要反复查看前后的结果才能作出准确的对比,如果能在一个视图中对比二者的排序结果岂不很好?
  • 说明:左侧条形图代表总体的足球位置市场价排名,而右侧的条形图代表被选择国家的足球位置排名。如果左右排名一致,连接线就是水平的;红色的右下倾斜线代表被选择国家的位置排名低于总体排名,反之代表被选择国家的总体排名高于总体排名。这样是不是非常直观?
  • 延伸说明:在交叉图标中,左侧的排名是固定不变的,集的使用实现了仅对右侧的坐标轴和颜色做筛选调整。
Example 3 动画- Diff in rank-2.gif

【喜乐君说明】右侧的条形图方法和案例二一致,通过自定义字段保留了集内成员的市场价值,这样就仅对集内成员做了筛选。

自定义字段 :Market Value for Selection

公式:if [Team Set] then [Market Value (£)] END

关键在于中间的条形图,视图中使用了两个度量值,显示方式则为线条。左侧是总体排序,rank(sum[market value]),右侧就是选择部分的排序rank(sum[market value for selection])。

屏幕快照 2019-05-04 下午6.27.58.png

二、“部分VS部分” 分析 Part-to-part analysis

在关系型数据结构中,跨列比较非常容易,比如利润除以销售额得出利润率。但是如果是在单列中跨行比较,就略显麻烦,比如欧洲比美洲的销售额,或者2017年比2018年的销售额等。集值帮助我们让这一类跨行比较更方便。

案例4 :标杆分析 Benchmarking

概念:比较两个子集的度量,需要生成新的中间字段。度量和维度列需要动态的转化为“子集1的度量”和“子集2的度量”。这可以通过集值来实现,集如同是针对度量的筛选器。

This can be achieved through set actions, because sets are like filters for individual measures.

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

场景:球队A和球队B的平均球员价值相差多少?两个球队各个球队位置的差异又如何?或者说欧洲国家前两强相对南美国家前两强的差异如何?作为主办方,俄罗斯与其他国家的比较如何?

说明:纵轴代表橘色分组中各球队的平均市场价值,而横轴代表蓝色分组中各球队的平均市场价值。散点图中的每个点,代表球员的位置。橘色的点意味着橘色国家的球员市场价更高,反之蓝色点代表蓝色国家的球员市场价更高。

延伸说明:过去,我们只能通过参数来做类似的标杆分析。如今,集值提供了更好的分析途径,它有几个显而易见的优势:

  • 可以多选,比如选择两个国家;
  • 动态的与国家字段绑定,毕竟集是以国家为基础字段建立的;
  • 在可视化分析中直接互动,而不是通过下拉选项选择;
  • 可以在筛选器之后自动更新,从而显示相关的结果。
Example 4动画 - Part to Part.gif
【喜乐君补充说明】因为是两个分组的比较,我们先建立两个不同的集,称之为 country1 和country2;之后基于这两个集创建对应的计算字段,提取各自集的球员市场价。两个自定义字段如下:

自定义字段:Market Value for selection 1

函数:SUM(if [Country 1] then [Market Value (£)] END)

自定义字段:Market Value for selection 2

函数:SUM(if [Country 2] then [Market Value (£)] END)

我们知道做两个度量的相关性分析,就是使用散点图,因此把上面的两个度量加入行列坐标,详细级别为球员位置,为了区分球队的差异,使用差异字段着色,因此颜色是下面的自定义字段:

自定义字段 Difference

函数 AVG([Market Value for selection 1]) – AVG([Market Value for selection 2])

之后把球员数量展示图形的大小,结果就是下面的图形:

屏幕快照 2019-05-04 下午8.21.58.png

接下来,我们需要把横纵坐标上面加上国家列表,并把国家的选择和集建立动态关联——集值动作。以country1为例,我们把选择的国家动态地加入集,如下图:

案例5 集值的操作 .jpg

最后做了必要的修饰,一是在右侧通过地图形象地添加了两个动态集对应的国家,使用了筛选器显示选择的结果;二是在主视图中,添加了一个辅助的45度参考线,这里使用了双轴,注意行的第二个轴,是从列复制的。

 

案例5:区间对比 Range comparisons

概念:随时间变化是一种非常重要的对比分析类型,这类分析中,视图用户需要灵活的选择对比的初始范围和结束范围。

数据源:1995至2018年伦敦房屋名义价格

场景:给定两个时间区间,从第一个时间区间到第二个时间区间的增长率是多少?不同的区域增长率的对比如何?

说明:上面的时间视图就像是虚拟的指示器,告诉大家增长是如何对比的。两个日期随时间对应蓝色和灰色的渐变,水平的参考线显示了随时间变化的平均值区间。而上面的文本差异(差异百分比和差异绝对值),总是和两个参考线的差异数值相同。

延伸说明:这里的差异计算方法和上面的案例4基本一致,虽然看上去是完全不同的使用场景。

Example 5动画 - Range Comparisons.gif

【喜乐君补充说明】
上面的工作簿由几个部分组成:两个时间轴、分区域的差异条形图、汇总文本表、移动平均区间。而可见的部分背后,使用了两个 集 来传递数据,year 1 和year 2 ,对应对比的开始日期和结束日期,默认是对比1996年和2003~2006年的数据差异。两个集对应两个自定义计算字段,分别保存该集的价格数据,在这两个单独列基础上计算差异(difference)和差异百分比(% difference)。
自定义字段: Year 1 price
 if [Year 1] then [Normalised Price] END
自定义字段: Year 2 price
 if [Year 2] then [Normalised Price] END

// year 1/2  集内的名义价格,单独生成字段

右下角的分析,使用了移动平均表计算,这里使用的参考线需要单独添加自定义计算字段。

三、选区差异 Difference from a selection

案例6:与选区平均值的差异 Difference from summary average across a selection

//这个题目在15大详细级别表达式中出现过,当时使用了exclude LOD表达式。在这里,我们可以直接把视图中的选择,通过集值的交互方式,传递给字段计算。

  • 概念:和筛选器是应用于视图的所有字段不同,集可以通过计算只应用于指定的单个条目。
  • 数据源:2018年世界杯球员和球队的市场价
  • 场景:每一个球队相当于市场平均价格的差异是多少?
  • 说明:视图展示了2018年世界杯各个球队的的市场价与总体平均值的差异。当用户选择国家、群组、地区,或者随意选择几个国家(比如西班牙语言国家),平均值会重新计算生成。
  • 延伸说明:集仅仅是计算了选中部分的平均值,而如果使用筛选器则会移除所有不在视图中的国家数据。
  • Noteworthy: The set is only filtering the average calculation, while a filter would remove all countries from the viz that are not in the selection.
Example 6动画 - Difference from Summary Average.gif
【喜乐君补充说明】这里的关键是建立了一个全局的集和集值,即创建一个过渡性的集,和建立在这个动态集基础上的集动作。集动作的结果被用于计算字段(计算差异),从而直接在视图中展示出来。底层的逻辑是:不管从左侧还是右侧选择一个或者多个国家,所选的国家会被传递给集,默认的集被更新;新集的平均值和每一行的数据相减,即是二者的差异。二者的差异结果作为单独的字段,同时被用于着色。在LOD案例8中,计算选择分类与其他分类的差异。使用exclude LOD,它的逻辑截然不同。首先建议一个参数传递选择的国家,通过if判断仅保留这个国家的度量值,单独生成一列;但是直接将每一行的聚合和被选择的国家相减会出错,因为详细级别不同,我们需要使用exclude LOD单独建立一个中间值,确保在任何一行上,参数值都是相等的,然后再求差异。看一下下图,我们需要至少四次计算,才能准确的生成互动。(【Tableau】15大详细级别表达式-思路解读版 (5)LOD 8 .jpg而如果使用集值的方法,我们可以一次选择多个分类,然后使用Exclude LOD,或者window_avg方法来传递中间值,是不是更加方便?示例如下:

Example 6 图示- Difference from Summary Average.jpg

(05/2019)在新推出的2019.2版本中,我们也可以使用参数+参数动作的方式来实现上述的互动方式。参数+参数动作也可以实现多选,并计算选择选取的平均值,具体可以参考另一篇文章:

案例7与选区的背景平均值差异 Difference from underlying average across a selection

  • 概念:在上一个案例中,我们计算了跨多个条形图的平均值,而有时候,我们需要计算被选择数据的背景数据,这些信息并非在视图中直接可用。
  • 数据源:1995年~2018年伦敦房产的名义价格
  • 场景:当我们计算每个辖区的平均房价和被选中的辖区房价平均值的差异时,这个比较需要用到一些背景的数据。这样才能保证每项房产都有相同的权重。如果计算总体的平均价格,最终的房屋价格差异将会和本辖区的房产密度成反比。(在后面的说明中我对比了错误的方式和差异——喜乐君)
  • 说明:视图中右上角的数字代表被选中的邮编辖区的平均房产价格。主视图中地图颜色代表每个辖区相对于右上角辖区的价格差异百分比,橙色代表更贵,而蓝色代表更便宜。
  • 延伸说明:这个工作簿算是动态分组的预览,如同右上角的图例高亮了当前选中的辖区,这就相当于生成了一个动态的分组。在下一篇文章中,我们会详细说明动态分组的功能。
Example 7 动画- Difference from Underlying Average Diff from underlyng average.gif
【喜乐君补充】这个题目和上一个题目多有相似之处,只是条形图改为地图更加抽象了一些。更重要的差别是:案例6的差异是在国家层面(或者说国家的详细级别)计算差异,当我们选中三个国家时,差异即是这三个国家的平均值;因此使用了表计算——表计算是在视图的详细级别基础上的二次计算。 但是在本案例中,当我们仅选择一个邮编单位时,使用window-avg表计算和使用exclude的结果是一样的;但是当我们同时选项多个区域(就像上面的动画中使用套索),两个结果就会完全不同。为什么?如果使用案例6的计算方法,表计算是在视图基础上的二次聚合,意味着选择部分的平均值,是每个辖区的房屋平均值的平均值,比如A区域均价9K,B区域均价8K,C区域均价7K,那么表计算的平均就是8K;但是如果使用exclude LOD计算,因为LOD表达式排除了outcode维度,它的计算是从数据源层面,也就是计算选中区域的所有房间的平均值,即区域A、B、C所有的房产价值的平均,这个是在更低的详细级别计算的。

Average Price for Selection

{EXCLUDE [Postcode Area],[Outcode]: AVG([Price for Selection])}

Example 7 -两种结果的计算差异.jpg

案例8:随变化的选区与总体差异 Difference in change between a selection and the total

概念:这个案例集成了前面的三个场景概念,部分比总体的占比分析、随时间的变化,与选区的差异。

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

场景:假设独立的分析某只股票,人们往往会把上涨或者下跌归因于这只股票的特征;但是它也可能是因为只是符合了大盘的某个特定的变化趋势。为了说明这个问题,我们就希望对比单只股票或者一组股票组合的价格随着大盘的价格波动而变化的情况。(portfolio of stocks=股票组合)

说明:比较股票的涨跌比例(the skew of distributions意译),即上涨、持平和下跌天数比较,可以反映关注的股票相对于其他股票的是不是增长更多,抑或下跌更多,而这个指标代表了股票的相对价值表现。绿色部分更多(上涨天数多),代表这支股票的表现优于大盘,而红色部分更多(左倾斜)即下跌天数多,则代表这支股票的表现落后于大盘。

延伸说明:注意,每只股票的日涨跌幅是在数据源层面提前计算好的(即包含在数据源中),因为这个是行级别的计算,不需要在股票后重新计算一遍。而对于选择的股票而言,每日变化则是详细级别表达式,因为详细级别表达式(LoDs)可以跨行来传递数据(propogate a value across rows)。每只股票和选择股票的每日涨跌幅差异也是行级别的计算(引用了详细级别表达式的结果),因为它必须要每天、每只股票的计算,这就是数据源的颗粒度。最终的直方图,显示每只股票及数据桶对应的股票上涨或者下跌相对于选区的天数。(这个看图才能好理解)

自定义字段:Change for selection

{ Fixed [Date]: AVG(if [Ticker] then [% Change] END) }
//指定每一天: 如果在集中,返回它的当日Change百分比,多个值以平均做聚合
//含义:每天,集内成员股票变化百分比的平均值。
//比如同时选择DATA、IBM和Facebook三家公司,则返回每天三家公司的变化平均值,如果数据源有100天,则返回100个数值。

Example 8 动画- Diff in Change.gif
【喜乐君说明】为了更好的理解视图,有几个可以阐述:
1、筛选不影响右侧视图的变化,即左侧添加/减少股票,不会影响右侧的两个集值动作;
2、选择左侧任意一个股票上的任意点,右侧的结果是一致的,也就是右侧的视图与所选股票有关,与所选时间无关;3、默认情况下,右侧两个视图,是以“全部股票”为集值,点击重建集,鼠标离开后,恢复“全部股票”为集值,可以参考 仪表板-操作,查看集值东西。(待续…)

自定义字段: Above or Below

if [Change for selection]> [% Change] then “Above”
ELSEIF [Change for selection]< [% Change] then “Below”
ELSE “Equal”
END
//如果集内的股票平均波动高于该股票的当日波动,则为 “above”(高于)
//反之,则为“below”(低于),否则即“equal“(相等)
//如果集为默认所有股票,则大盘高于本股票、低于该股票、平衡;
//如果集为选择几个股票,则……

集值让对比分析更强大、更灵活

借助集值,我们可以让对比分析更加强大和灵活。集值可以帮助我们实现多选和在视图中直接互动,而无法使用列表,也不需要使用参数来实现多重的交互对比。而且,集值是动态的链接,你可以通过拖拽直观的表达。

下一篇我们会介绍使用集值的的8种新技术。

May 6, 2019
May 26, 2019 revises

【Set Action】“集值”可视化对比八大绝技 -中级篇”的一个响应

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google photo

You are commenting using your Google account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s

%d 博主赞过: