首先讨论一下事实这个概念
在我最初期的认识中,一条业务数据是一个事实,比如有一个客户把一个商品放入了购物车中,那么,这一条数据,就是描述了这一个事实。
这个认识对初学者来说还挺普遍的。但这个认识其实是错误的,在数据仓库领域中,事实这个术语,指的是数字型的度量。还是以一个客户把一个商品放入购物车中这么一条数据来举例,在这一条数据中,一定包含了以下信息:
1、商品种类
2、商品名称
3、商品单价
4、商品数量
……
以上述四条信息举例,商品种类与商品名称不是事实,而商品单价与商品数量是事实。
因为,事实是指数据中的数字型度量,商品种类与商品名称明显不是数字型的,而数量与单价是数字型的。
而事实,也分为三种,可加型事实,半可加型事实,不可加型事实。
三种事实的分类其实也比较明确。
可加型事实,指的是在所有维度加起来都有意义的数字型度量。
半可加型事实,指的是在特定维度下加起来有意义,另一些维度下加起来无意义的数字型度量。
不可加型事实,是指在所有维度下,加起来都没有意义的数字型度量。
比如一条订单数据,包含有以下列
1、订单用户id
2、订单用户vip等级
3、订单总额
4、用户账户余额
订单总额是典型的可加型事实,在所有维度都可以进行统计。例如,直接对所有数据的订单总额相加,就是历史累计订单总额,如果对地区金额进行相加,就是各地区的历史订单总额,如果对当日的订单总额统计,加起来的就是当日订单金额。在所有维度下,相加都是有意义的。
用户账户余额是典型的半可加型事实,只有在用户维度下相加,得出的所有用户余额总额这个数字是有意义的,其他维度下相加是没有意义的。
vip等级是典型的不可加型事实,任何维度下,对vip等级的相加,结果都是没有意义的数字。
然后是维度概念
维度是看待事实的角度。
直接拿上面的订单数据来举例,我们可以以什么角度来看这条数据。
首先,时间角度,这条订单数据是在哪天发生的,这就是时间维度。
然后,地域角度,这条订单数据的用户是哪个省份的,这就是地域维度。
其次,品牌维度,这条订单的商品是什么品牌,这就是品牌维度。
最后,商品种类维度,这条订单商品是什么种类,是电器还是厨具,这就是商品种类维度
……
这只是我第一眼看到这条数据,想到的可以看待的角度,我们可以以更多的角度来看待这条数据,例如,消费区间,这条数据是在万元以上还是万元以下的消费,消费终端,是在电脑还是手机上下的单,只要想,可以在一条数据上扩充出非常多的维度。
所以现在再看开头那句话,维度是看待事实的角度。
众所周知,数据仓库的事实表中是有数字度量的,一般会根据这些数据度量以及提前规定好的一致性维度来进行统计等工作。
那么事实表中的数字度量分三种:1.可加事实,2.半可加事实,3.不可加事实
下面让我们来看看它们的定义与区别
1.可加事实
可加事实指的是该度量可以按照和事实表关联的任一维度进行汇总。比如商品的单价,可以按照品类维度进行汇总,按照店铺维度进行汇总等等。(20201105修正,这里的例子应该是每天新增人口数,这个事实可以基于各个关联的维度汇总,商品单价的话不能基于时间维度汇总,应该属于半可加。)
2.半可加事实
指的就是该度量在某些维度下不可进行汇总,或者说汇总起来没有意义,比如说价差额,价差额在时间维度下的汇总就没有意义。
记录静态数据(库存数据,金融账户余额)的所有度量针对于日期属性以及其它可能维度天然具有非可加性,但是例如库存数据针对产品种类或者商店汇总,是可加的,所以这种数据就是半可加事实。
3.不可加事实
指的是该度量在所有与该事实表关联的维度下都不可进行汇总,比如说比率型数据,对于这种数据,如果确实是有汇总的必要,可以将其分子分母分别存储,然后在最后汇总之后再进行除法操作,从而得到“汇总”后的比率型数据。