考点 1.2 Create and manage the data model
1.2.1 Add relationships to a data source
1.2.2 Add joins and unions
1.2.3 Explain when to use a join versus a relationship
啥是数据模型?
你可以想象当你打开一个数据源的时候,你就相当于打开了一个冰箱,冰箱里边有各种蔬菜,这些蔬菜就是一个个table,但是你不能吃一个个的菜,你得把它们混合到一起,你才能做出来一盘沙拉。
1.第一步你得把每个菜切一切,洗一洗,去掉一些你不吃的部分。
这就相当于你只保留每个table里边你只需要的column
2.把它们放到一个碗里,然后放点沙拉酱,开始搅拌
你开始创建不同Table之间的关系,比如Table A的customer ID应该跟Table B的Customer ID连接在一起。 Table A的Order ID应该跟Table C的Order ID连接在一起。整个这个过程就叫建模。
3. 搅拌完成,可以食用
这一步之后,你的数据模型就建成了,这个数据模型包含了你精心挑选的所有的数据,并且互相之间的关系都是你来定义的。
数据源
现在情况开始变得更加复杂,我们要做一个肉菜。 蔬菜都储存在我们的冰箱里,这是一个‘数据源’,但是呢,所有的肉都来自另一个冰柜,在这冰柜里,同样有各种各样的肉。这是一个新的‘数据源’。为了做这道菜,光用冰箱已经不够了。
一个更现实的问题是,冰柜里的肉不能放冰箱,因为放蔬菜的冰箱只有冷藏,没有冷冻功能。
回到我们的现实,有时候你的数据来源是一种混合的模式,一些可能来自于Excel,一些可能来自于数据库,这些数据都是数据,但是它们来自于不同的地方。如果把这些不同地方的数据混合起来并做成一道更复杂的菜需要更高级的技巧。与上一个数据模型的话题结合起来,就又分为了单一数据源的数据模型和多数据源的数据模型
数据关系
数据关系是Tableau一个复杂的知识,在解释各种名词之前,我先把这种关系分为弱关系和强关系。假设现在我们又要开始做菜了,在我们准备做菜的时候,一种是你想好了要做啥,300g青椒切成丝,100g猪肉剁碎,葱姜蒜啥的咔咔都配好了。 那你这菜出来就是妥妥的就是一道青椒炒肉啊。要是按照菜谱做,那就是这个味儿。 为了这道菜,你青椒就必须这么多,猪肉就必须这么多,那这就是一种强关系。你是奔着最后那道菜去的,为了做出这个味,所有的比例都得按菜谱来。
但是还有一种情况,你做菜做一半了,你发现唉这青椒好像有几个坏了,做青椒炒肉不够了,那我这个丝可以先留着,后边留着炒个鸡蛋啥的。也就是这个青椒的处理就不是像前边那种按照菜谱的做法,必须切多细的丝,配多少的肉了,青椒可以有很多种做法。
现在我们回到数据关系上来,假设我们现在有个sales order dataset,这其中有100名客户的数据,每个客户是以Customer ID的形式存在的。同时你还有另一个客户名单,这里边每个customerID都有它们的名字,住址,还有联系电话。 但是这个客户名单里只有80个客户,有20个customer ID这里边没有。强数据关系就是不行,虽然这100名客户的数据都有,但是只有其中80个客户有名有姓,所以我只保留这80个客户的数据,其他20我不要了,也不分析了。
弱关系就是,虽然有20个客户的ID我们找不到,但是呢,在数据模型里边先留着。 也不要把那20个没名没姓的顾客删了,删了毕竟数据就不全了啊。这时候呢,还有一种更复杂的情况,如果我们的客户清单里边有120名客户,但是只有80名客户在sales order里能找到。 如果你用强关系,那就只有那80名客户留在了最后的数据模型里,你不会知道其实一共有120名客户注册了公司的网站。
这里我们就可以得出结论: 强关系适合你在分析的时候有非常强的目的性,你已经知道数据当中的质量问题,并且有一个明确的解决方案,那这种时候就要用强关系。
弱关系适合在数据的初期,你不知道到底是不是所有的数据都能匹配上其他的数据时,适合你用来进行测试和探索,如果你用强关系,你就可能无意中排除或者包含了你不想要的数据。 而另一个弱关系的优势就是当你对某一个表格进行分析的时候,这个表格会以完整的形式存在,它不会受到因为数据关系的影响,对这个表格进行的分割或者是扩充。
强数据关系
假设此刻我们有两个表,左边的表示Customer Sales,右边的表是Customer Name. 当我们不施加任何强关系的时候,我们的销售总额是100+200+300+400+500=1500
在右侧呢,我们发现A1004居然对应着两个人名,然后Customer ID A1005没有人名. 在这种情况下,如果我们使用强数据关系,每个customer ID必须对应右边的人名的话。就会出现下边这种情况如果我们设定,在数据关系种必须保留每个customer ID. 就像Customer Sales和Customer Name说,不行我Customer ID 一个都不能少! 那Customer Name说好吧,都保留,你就会发现我们的所有Sales变成了1900,要是Customer Name说,我不要那个A1005,有我没她,那Customer Sales就说行,A1005就不要了,然后整个data model的总sales变成了一个奇怪的1400.
当我们对两个表之间施加了强关系,这两张表就不再是两张表,而是只有一张表,有且只有一张表。
极限拉扯之海王关系:弱关系
弱关系就是Customer Sales和Customer Name Table都变成了海王,这两个table之间都会说你别瞎说啊,我跟Customer Name没那种关系,我的总Sales是1500. 我跟Customer Name在一起的时候,我的总sales也是1500嗷。
Customer Name也说,我里边没有A1005嗷,你在Customer Sales当中看到了A1005但是我这可不认它。 Customer Sales和Customer Name两张表各自成为了海王,它们在与其他表连接时,却不会因为强关系而改变自身。两张表都是独立存在的,只有当两张表
弱关系当中的两个表还是两个表,只有它们一起用的时候,弱关系才会发挥作用。
强关系:JOIN
我们花了这么大的篇幅就去解释弱关系和强关系那么现在回到Tableau, Tablaeu把强关系定义为JOIN 也即是有非常明确的规则什么留下 什么删除,弱关系定义为RELATE.
Tableau内部建模区别于其他工具的一个重要特点就是Tableau支持不同的table之间创建弱关系。
Join分为三种Join, 如果我们把左边的table想象成一个男性朋友L, 右边想象成一个女性朋友R。现在A和B谈恋爱了。
Left Join就是L对R说,我微信通信录的好友可以都留着,你的微信通信录里只能留我认识的好友
Right Join就是R对L说,你微信通信录里我认识的女生可以留着,其他你都给我删了
INNER Join就是,好了,我们谁也别说谁,除了我们都认识的,剩下的都删了
FULL OUTER JOIN就是 我们谁也不删,我们的微信好友全留下来
右侧的这个完美的解释了数据中的哪部分会在最后留下来
创建强关系Join
Tableau在创建强关系的时候,有一步非常重要的操作,
就是在把Customer name拖拽到右侧之后,要点击向下箭头,选择open, 然后再把另一个table拖拽到右侧。有些同学觉得自己手拿把掐的然后考试时候转手就是那个选项在哪来着?
当我们拖拽过去之后,会自动出现一个菜单,让用户选择利用哪种join relationship.
在join之后,我们在右下角可以看到,两个table完全融合成了一个table
创建弱关系RELATE
弱关系RELATE的创建比强关系少了一步,在把Customer Sales拖拽到又边之后,你不需要打开Customer Sales Table. 你直接把Customer Name拖拽到右侧。
点击两个表格之间的直线,你就可以选择你想让两个表格之间的哪些column成为common column。当你点击时你会发现每个表格只显示自己的column而不是像上边的强关系一样,一次性显示所有的column.
弱连接的最后数据长什么样?
当我把右图中的各个column按照顺序移动到Tableau当中时,你会发现,最后的结果出现了一个不同于任何强连接的结果。
虽然A1004显示有两行数据,但是弱关系并没有像强关系一样把400又加了一次,最终的结果还是和Customer Sales的总和一样,只有1500. 这就是弱关系和强关系不同的地方。
Customer Sales保持了它的独立性。在弱关系当中,并没有收到Customer Name的影响。