数据仓库之维度建模简谈

简单记录下数据仓库之维度建模。

写在前面


基本概念

事实表

在多维数据仓库中,保存度量值的详细值或事实的表称为“事实表”;一般用来存储历史数据(如销售额、利润等);事实数据表不应该包含描述性的信息。如下面销售数据事实表。

时间维ID 地域维ID 销售额
20150101 J0001 $3000
20150215 C1011 $1500
20161212 D1100 $5000

总结:事实表主要是用来存储事实的度量值和各个维的码值(即维度表的主键ID)

维度表

维度表是用来存储维度属性,是观察问题的不同角度。如下地区维表

地域维ID 国家 省份 城市
J0001 CHINA 广东省 广州市
C1011 CHINA 山东省 济南市
D1100 CHINA 山西省 太原市

案例

下面以维度建模中常用的星星模型举个栗子:假如某业务部门想要统计过去几年的销售情况,就可以像如下进行数据建模。

ps:图片摘自网络。

接下来


四步法(Kimball理论)

Step1:确定业务过程

该过程主要对关键的业务逻辑以及规则进行处理,通常是选择多个业务过程对主题合理的划分。

以淘宝购物举个例子:


业务过程通常用行为动词表示,表示业务执行的活动,比如上面的黄色棱形框。一旦业务过程确定之后,事实表的基本构建已经明确。

Step2:确定事实粒度(声明粒度)

粒度的声明确定了事实表每一行代表什么业务,一般以最小粒度进行事实表的构建,这样做是方便向下钻取

Tips:

粒度:定义为“如何描述事实表的单个行?”;以上面淘宝购物为例,对于订单这个过程,就可以选择订单这个粒度。不同的业务场景有不同的粒度,比如产品粒度,时间粒度等等

钻取:olap概念,后续细说。。。

Step3:确定维度

完成了粒度的声明,也就意味着维主键已经确认,对应的维度字段就可以确认了。比如上面淘宝购物栗子,相关的维度信息:买家维度、卖家维度、商品维度、时间维度。

Step4:确定事实

事实可以通过回答“过程的度量是什么”来确定。应该选择与业务过程有关所有事实,且事实的粒度要与所声明的事实表粒度一致。事实有可加性、半可加性、非可加性事实,需要将不可加事实分解为可加的组件。

在淘宝购物的订单付款事务事实表中,同粒度的事实有子订单分摊的支付金额、邮费、优惠金额等。

写在最后


以上为构建数仓常用的一些理论知识,后续会不断完善和提高。。。

参考:

https://yq.aliyun.com/articles/110992

http://itindex.net/detail/52754-%E7%BB%B4%E5%BA%A6-%E6%A6%82%E5%BF%B5

各位客官,留点碎银子呗✧(≖ ◡ ≖✿)奴家会再接再厉的!!!