简单记录下数据仓库之维度建模。
写在前面
基本概念
事实表
在多维数据仓库中,保存度量值的详细值或事实的表称为“事实表”;一般用来存储历史数据(如销售额、利润等);事实数据表不应该包含描述性的信息。如下面销售数据事实表。
| 时间维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