表与表关系
各位表哥表姐、表弟表妹们,我们生活一个表的世界,大家可能每天都在跟表格打交道,我们这节就来重新认识表这个家族。
1
数据表与Lookup表
在原有咖啡数据表的基础上请允许我再扩展四个小表格。
在查询编辑器中获取数据并整理好后,选择关闭并应用,数据就会被自动加载到数据模型中。我们在数据关系视图模式可以查看到加载的表。
现在开始设计模型的框架,表的分类一般有两种,数据表(又叫做事实表)和Lookup表(又叫做维度表)。
上面图中表的布局方式有多种,如星式结构,雪花结构等。对于初学者,建议按照上面这个Lookup表在上,数据表在下的结构去设计,完全可以满足大部分需求,这样的方法可以帮助你在后面的学习中按过滤器一样去思考,打开阀门,数据好像水流一样自上而下的从Lookup表流入数据表。
我们在《数据分析原理》中曾讲过,数据是由两部分构成,一个是类别,一个是度量值。
理想情况下,类别来自于Lookup表,度量值来自于数据表,如下图的数据透视表,往往1234筛选的字段为类别(数据来自Lookup表),值字段5为度量值(数据来自数据表)。
我们再看可视化图形中,往往轴和图例是来自于Lookup表的类别,值是来自于数据表的度量值。下面这个例子中年份月份来自于'日期表',体积来自于'杯型表',值销售量=数据表中数量列的求和。
2
建立关系
注意到在关系视图中,表与表之间是有关联的。这个关联是怎样建立的?'咖啡数据'中有每天的销售情况,'日期表'中有每天的日期和对应的年月日星期等。这两张表有共同的日期列,并且是一对多的关系(日期表中的日期是不重复的,咖啡数据中的日期会有重复多项)。
我们只要鼠标拖动'咖啡数据'中的[日期]到'日期表'中的[日期],松开鼠标,两张表的关系便建立起来了。现在可以清楚地看到“1--->*”代表着一对多的关系。
鼠标双击这个关系箭头线,可以看到具体的关系来进行进一步编辑。
同样的方法,我们把其他几张表关联起来,一个漂亮的数据模型基础就这样搭建成了,怎么样,没有想象的那么高深吧。在管理关系选项中可以看到几张表之间的联系。
我们为什么要建立关系呢?利用可视化图形中最像数据透视表的矩阵表来举例说明,插入一个矩阵,随意放几组数据,比如行放'区域负责人名单'表中的[年龄],列放'杯型'表中的[体积],值放销售量(数量列的求和)。一张年龄与杯子体积对应的销售量数据表展现在眼前。
注意到这里的行和列我们用的不是咖啡数据表里的数据!通过关系的建立,我们得以把所有的表中数据放在了一张表里,这就是数据模型的力量。
我们可以这样想象一下背后的过程,当我们在矩阵中选择Lookup表中的[年龄]和[体积]时,它好像赋予漏斗器一个数据筛选信号,这个信号自上而下由Lookup表流入了数据表中,以年龄24和体积360ml得出的数字1655为例,输出结果的过程分为两步,筛选和计算:
1)筛选-在数据表中的[城市]列筛选Lookup表中年龄"24”对应的城市(有南京、武汉、秦皇岛、安庆、赣州);再在[杯型]列筛选"小"因为360ml对应的是小杯。
2)计算-在筛选后的计算表里求数量列的加和。
如果没有Power Pivot,我们过去只能用扁平化方法,即使用Vlookup公式手工地把每张表的数据汇总到一张扁平的大表上,这样的老旧方法有几点常见弊端:
1)Vlookup输入公式的重复性工作
2)当数据量大时,Vlookup计算会让Excel缓慢运行或卡死
3)当Lookup表和数据表有更新时,不能及时更新到数据表中,甚至需要重新Vlookup
掌握了关联的知识,我建议在今后的数据处理中尽量抛弃把表扁平化的想法,你会发现它强大的力量。但这并不意味着Vlookup的扁平化方法变得一无是处,我们可以完全抛弃了,每一种方法都有自己的优劣,判断是否要用扁平化可参考下面这个小表。
本节举的例子是常见的一对多关系,在实践中可能会有更复杂的情况,比如多对一、多对多、筛选器箭头方向需要为双向等,为了避免知识的混淆,考虑到这种复杂情况相对较少,在本节我们先不做这方面的介绍。
此外,还需要特别嘱咐大家的是一对多关系是Lookup表与数据表的关联,切记不要在Lookup表之间建立关联;还有在多个数据表的情况下,也不要在数据表之间建立关联。
很多初学者学会了关联,看到两张表有相同的字段就去关联,然而这是没有意义的,而且会引起错误。任何知识都需要先理解了原理再去应用。