数据仓库系列篇——DW | 维度与事实的思考

Posted 子房小语

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据仓库系列篇——DW | 维度与事实的思考相关的知识,希望对你有一定的参考价值。

穆晨,硕士毕业于华南理工大学计算机系,研究方向为数据仓库、数据挖掘、数据可视化等。 现在蚂蚁金服国际金融事业部从事数据体系架构研究,以及相关的应用与推广工作。 





维度与事实的困惑

近来穆晨打算基于阿里云的MaxCompute平台,在公司某业务域内搭建一个小型数据集市。本以为相关理论储备已ok,但建模时还是碰到个“钉子”。所幸问题已解决,在此分享给大家。

PS:由于业务涉密,穆晨将案例内容抽象包装成了“女生买包包”。




 问题描述

—— 事实表冗余了?


大多数参考书或技术博客上,在介绍数据仓库的维度建模概念时,都会使用类似下述的经典套路来讲解怎样划分维度表与事实表。

假设今早小敏在天猫花两万元买了个包包。那么以交易为主题进行分析,可从此段信息提取三个维度:时间维度(今早),地点维度(天猫), 商品维度(包包)。相对应的两万元消费则是一个“事实”。

数据仓库系列篇——DW | 维度与事实的思考

这是一个经典星型模式案例,很好理解。可现在小敏的男朋友小陈觉得这个包包太贵了,他有必要干预一下,因此数据域里就多了一个“干预者”维度;此外她母亲张阿姨也觉得很过分,需要适时提醒一下。ok,现在干预者维表里就有两条纪录了。

现在问题来了:请问事实表里,要不要放干预者外键?如果不放,张阿姨和小陈就无法干预;如果放了,事实表里一行纪录就不是一个“交易事实”了,此时一笔交易信息将对应交易事实表中的两条纪录(交易-小陈;交易-张阿姨)。

所以,到底该怎样?



 解决方案

—— 共享维度、复用事实


真相其实是这样的:由于新增了“干预者”维度,那么新增维表自然是必须的,但原来的事实表却不能动。正确做法是新建一张事实表,里面存放交易信息以及“干预者”外键。新事实表里的一条纪录,对应的将不是一笔交易,而是一条“交易 - 干预”信息。

数据仓库系列篇——DW | 维度与事实的思考

当我们需要分析交易本身,就用维表+事实表;当需要分析交易干预,就用维表+事实表。如此,维表就实现了共享;而与此同时,事实表之间也可以相互复用。


结 语

此刻又突然觉得这个问题好低级X﹏X。这明明是个很基础的建模问题,然而确实纠结了半天... 好吧,whatever,就当是开发日记吧。


——本文转自时光斋


数据仓库系列篇——DW | 维度与事实的思考




以上是关于数据仓库系列篇——DW | 维度与事实的思考的主要内容,如果未能解决你的问题,请参考以下文章

聊聊数据仓库中的缓慢变化维度(SCD)

数据仓库数仓建模之星型模型与维度建模

数据仓库商业智能及纬度建模初步读书笔记

数仓建模分层理论

如何设计好数仓?数仓到底是什么?---详解

如何设计好数仓?数仓到底是什么?---详解