前沿:本文摘自《数据可视化分析:Tableau原理与实践》书稿(二审前)。图书预计五月底上线!我更加迫不及待的等待它的真容。

全彩印、多年所思尽在此书、电子工业出品

4.5 数据模型:理解数据关系(data relationship)

数据关系是一种全新的合并数据方法:基于共同的字段在多个相互独立、层次不同的数据表之间建立关系,既无需像连接(join)合并在一起,又不像数据混合(blend)无法反复使用。
因此,数据关系是真正的模型,它将Tableau数据合并技术提升到了一个全新的高度。
按照官方的计划,这个功能在2020.2的版本中发布,本书在补充本小节时还停留着“预发布”(pre-release)阶段,抢先读到本书的读者可能还需要等一下才能一睹它的面目。我在试用beta版本之后就深知,这个功能必将是2020最重要的产品功能,足以与“Tableau高级分析三剑客”比肩齐名,因此急切地加入本书分享给读者。

4.5.1 从物理表到逻辑表:数据关系的背景与特殊性

首要的问题是,新推出的“数据关系”与数据连接join、并集,甚至混合blend有什么区别?回答这个问题需要先理解一个更大的知识背景:Tableau定义了两个截然不同的层次——物理层(physical layer)和逻辑层(logical layer)来理解数据合并的两种方式。
何为物理,何为逻辑?
举个形象的例子来说,基于血缘关系,母亲和儿女是事实上的家人,自出生开始直系血亲不可更改,此为“物理”(physical),即“固定的、不变的”;而基于法律上的公证,养父与养子养女之间、夫妻之间也可以成为家人,既可以基于法律建立,也可以基于法律原则而撤销,这样的关系是形式上的、法律上的关系,此为“逻辑”——我们遵守法律,实质上是认可法律背后的逻辑推理。
同样的道理,我们每一位自然人都是物理意义上的人,此为“物理”;而我所开设的公司只是法律意义上的实体,法律称之为“法人”——法律意义上的拟人化;作为“法人的代表”,我可以按照法律设立,也可以按照法律撤销,此为“逻辑”。有人说“公司是人类在商业历史上最伟大的发明”,这一点我非常认可,法人的出现降低了人才的创业风险,将自然人和“法人”(最主要的形式是公司)既相互绑定,又相互独立。“逻辑”意义上的认知,是推动文明进步的重要力量,对于数据分析而言亦是如此。
用这样的思考理解数据关系,就容易理解了。
最普遍的物理表,是每一个excel工作簿、每一种数据库包含的数据表,它们都是实实在在存在的、分析过程不能更改其存在本身的“物理表”(physical table)。基于连接(join)和并集(union),多个“物理表”可以合并为一个全新的“物理表”:不可更改的、牢固的、全新的数据源。
相比之下,数据混合(blend)是建立在两个独立的数据源基础上的灵活匹配关系,这种灵活更改、保持了数据源独立性的数据合并,只是逻辑意义上的合并——因此它的结果称之为“逻辑表”。如图4-53所示:

图 4-53 数据连接和并集创建物理表,数据混合是逻辑关系匹配

图 4-53 数据连接和并集创建物理表,数据混合是逻辑关系匹配
“数据关系”相当于此前数据连接的位置,但是并非以物理表的形式,而是以数据混合一样的逻辑关系的方式出现。这样,它就既具有数据混合的灵活性,保持数据表相互独立的同时,根据分析需要实现不同详细级别的数据合并,又具有数据连接的稳定特征,还可以发布之后反复使用。
“数据关系”绝对是集万千优势于一身。
准确的说,数据模型,就是基于数据分析的需求而建立的各种物理表之间的相互关系,以逻辑的关系代替物理的连接。借助于数据关系,之前的数据连接面板就从单一的物理层,变成了逻辑层和物理层两层结构。
下面,结合案例介绍如何建立、使用数据模型。

4.5.2 数据模型(上):以数据关系实现数据连接

由于Tableau推出了逻辑层概念,因此2020.2版本Desktop在界面上做出了极大的调整。此前默认做连接的界面环节改为了数据关系,而数据连接和并集包含在数据关系中的每一个物理表中。
依然以超市数据为例,我们希望分析退货商品的属性,比如退货的区域、门店、日期等等,不过退货数据表中仅有“订单ID”和“商品ID”,因此需要从销售明细中匹配获得。在这里使用“数据关系”更加灵活的实现数据匹配,并与数据连接做比较。
使用数据关系实现数据匹配,可以分为连接数据源、增加关系并设置关系字段、设置性能选择选项(非必须)三步骤。
数据关系的起点依然是单个表,添加数据的方式与数据连接完全一样。
只是双击第二个数据时,之前出现连接类型标识的地方,如今只是一根线,如图4-55所示。点击线条可以编辑关系字段。按照之前对退货的分析,必须同时为订单ID和商品ID建立关联。

图 4-54 设置逻辑关系

图 4-54 使用数据关系为APAC区域的交易与退货建立关系(版本2020.2)
建立好数据关系,就可以创建工作表开始分析了。
如图4-55所示,基于数据关系的Desktop在分析区域也做了调整,模糊了维度和度量的分界线,而是以数据表为分类显示的主体。每个数据表最后都有一个“计数”字段,就是之前的“记录数”。在这里,简单分析一下“各个细分中的退货交易笔数”,可以双击细分和第二个表的“退货商品明细.csv(计数)”字段,结果如4-55视图中所示。

图 4 55 基于数据关系创建数据视图(版本2020.2)图 4‑55 基于数据关系创建数据视图(版本2020.2)

可见,“消费者”细分中有12笔退货,远高于其他两个分类。
不过,这里的商品交易数据仅为APAC区域,如何更新为所有区域的全部交易呢?相同数据结构的数据合并,使用并集。并集是在行级别上的合并,那如何在上图关系基础上实现并集呢?
双击视图左下角的“数据源”切换到数据连接面板。
如图4-56所示,直接在“订单APAC”上右键“转化为并集”,把左侧的其他区域拖入并集窗口,点击确认即可。此时再去看图4-55中的可视化图形,会发现各细分的退货交易均有增加,“消费者”从之前的12笔变成了114笔。

图 4 56 将数据关系的交易数据改为并集(版本2020.2)

图 4‑56 将数据关系的交易数据改为并集(版本2020.2)
这样,我们就建立了包含多层物理表的数据关系。数据关系是逻辑关系,逻辑关系的对象是多个物理表。
基于“数据关系”模型与基于连接(join)的数据连接面板有两个区别:
(1)  由于数据连接并没有合并两个数据,因此点击每个表,都仅仅包含当前物理表内的字段(包括并集默认生成的“路径”字段),但不包含逻辑层另一个物理表的数据。每一个物理表,都可以独立使用别名、分组、计算字段等数据整理功能。如图4-57所示:

图 4 57数据关系的多个表之间相互独立(版本2020.2)

图 4‑57 数据关系的多个表之间相互独立(版本2020.2)
(2)  新建一个工作簿,“数据”窗格会分别显示多个表的字段,每个表包含表内的维度和度量字段;这样的显示方法比之前更加清晰。此前的“记录数”被每个表的单独计数所取代——因为数据关系下的数据源是相对独立的(见本小节图4-55)。
在新建工作表之前的所有设置,比如连接数据源、设置关系、修改字段类型等,都是数据整理和数据准备的过程。进入工作表,就可以开始可视化了。
 

4.5.3数据模型(下):建立物理层和逻辑层的多层关系

上一小节中,使用数据关系匹配了商品交易数据和退货交易数据,二者是一对一的关系,并且是在行级别的匹配。不过,数据关系通常用于不同详细级别直接的数据关联,基于超市数据,本小节介绍将销售的交易数据与客户星级数据、产品级别数据建立关系,保持数据独立的同时实现灵活的关联分析。
(1)准备数据
由于笔者缺少客户星级和产品级别数据,首先使用Prep输出两个独立的数据。如图4-58所示。

图 4 58 使用Prep生成客户星级和产品级别数据

图 4‑58 使用Prep生成客户星级和产品级别数据
在图4-58的流程中,使用了聚合和判断过程。聚合节点用于在产品id的层面生成每个产品的累计销售额和累计利润,从而在下一个节点中创建“产品级别”字段。

图 4 58 使用Prep生成客户星级和产品级别数据

图 4‑59 使用聚合和判断为每个产品增加级别字段
而在基于客户的累计销售额增加“客户星级”字段时,使用了另一种方法——Fixed LOD表达式。如图4-60所示,Fixed LOD指定客户层次返回每位客户的累计销售额,并使用if判断新建“客户星级”字段。此处的聚合字段用于返回每位客户的首次订单日期,并间接起到了筛选字段的作用。

图 4 60 使用Fixed LOD计算每位客户的累计销售额,从而增加星级判断

图 4‑60 使用Fixed LOD计算每位客户的累计销售额,从而增加星级判断
基于这两个数据结果,接下来与销售交易明细建立关系,实现在不同层次的数据关联。
(2)使用数据关系,建立不同层次的数据关联
数据关系的优势在于既保留了之前的并集和连接方式,又能像数据混合一样基于不同详细级别的数据建立连接模型。
创建数据关系与数据连接方法一致,如图4-61所示,同一个文件夹下的数据表可以依次双击加入右侧关系面板。点击两个数据表之间的弧线可以编辑关系,为“客户星级评定”数据设置“客户ID”字段匹配,为“产品及属性”数据设置“产品ID”字段匹配。

图 4 61 通过双击加入三个数据表,建立数据关系

图 4‑61 通过双击加入三个数据表,建立数据关系
至此,数据关系就默认完成了。
(3)数据可视化
新建一个工作表,如图4-62左侧所示,左侧会显示所有数据表的字段,默认按照文件排列。和数据连接不同,字段按照数据表不同相互独立;也和数据混合不同,所有字段来自一个数据源。把“商品交易明细”文件下的“订单日期”和销售额“分别拖放到列和行的位置;再把“客户星级评定”下的“客户星级”字段拖放到标记中的“颜色”,就会生成图4-62的图形。

图 4 62 基于数据关系的可视化

图 4‑62 基于数据关系的可视化
同样的方式,也可以创建“各年度不同产品级别的销售金额”的堆叠条形图。如图4-63所示。

图 4 63 各年度不同产品级别的销售额

图 4‑63 各年度不同产品级别的销售额
(4)基于“商品交易明细”数据建立物理表连接
数据关系的魅力不仅在于不同数据表之间的灵活性,而且在于物理层和逻辑层之间的层次性。Tableau数据模型结合了物理层的稳定和逻辑性的灵活。
比如在上面的“商品交易明细”与“客户星级评定”、“产品等级数据”的数据关系基础上,希望在“商品交易明细”中排除所有的“退货交易”。由于退货交易要从“商品交易明细”中排除,最稳定的方法是在“商品交易明细”物理表基础上做连接,之后基于“订单ID”排除。
如图4-64所示,双击或者右键打开“商品交易明细”,在弹出的界面中,增加“退货商品明细.csv”数据,设置“订单ID”和“产品ID”的相等匹配,并选择左连接,之后关闭数据连接。由于此前单一的物理表已经改为了两个物理表的连接,此时可以右键“重命名”,修改为“商品交易增加退货标记”。

图 4 64 在数据关系中增加物理层的数据连接

图 4‑64 在数据关系中增加物理层的数据连接
上面的“商品交易明细”也可以通过并集创建,为了更好的展示逻辑层和物理层的关系,并集、连接和关系之间的关系,可以用图4-65来展示上面的数据模型。

图 4 65 物理层和逻辑层的层次关系

图 4‑65 物理层和逻辑层的层次关系
2020.2版本中数据模型的意义,就在于在此前物理层的基础上增加逻辑层的数据关联。逻辑层的关联不仅支持相同详细级别下的一对一匹配,也支持不同详细级别之间的多对一匹配(比如“客户星级评定”中的一行数据,对应商品交易数据中的多行数据)。
 
下篇:
  • 4.5.4 改善数据模型的性能(上):关系类型

  • 4.5.5 改善数据模型的性能(下):引用完整性

  • 4.5.6 从数据合并迈向数据建模

    预告:我的Tableau图书预计五月底上市,首印2500册,除去大客户预定,其余上线京东,期待大家提前购买😄

    欢迎关注微信公众号,届时第一时间推送。