创建数据仓库

Posted

技术标签:

【中文标题】创建数据仓库【英文标题】:Creating Data Warehouse 【发布时间】:2011-11-22 23:12:13 【问题描述】:

我正在使用星型模式。我成功地构建了所有维度表,但我有点卡在事实表上。我需要将销售表作为事实表。它有 SalesKey、OrderKey、ProductKey 等...每个订单都是一次销售,因此每个订单都有一个唯一的 SalesKey,但是每次销售都会有多个产品。

最好的办法是构建这张表?

我应该创建类似的东西

SalesKey OrderKey ProductKey
-------- -------- ----------
s1         o1        p1
s1         o1        p2
s2         o2        p1

【问题讨论】:

【参考方案1】:

一般来说,当您设计一个星型模式时,最好是每个事实记录的每个维度都是单值的(即事实和维度之间具有 1:M 的关系)。

诀窍是包含一个 ORDER-LINE 维度,以便 1 个订单(=1 个销售)可以包含许多订单行。然后每个订单行包含 1 个产品。

因此,基本上您将使用雪花模式,其中事实表以 1:M 关系链接到 ORDER-LINE 维度。然后 ORDER-LINE 维度以 M:1 关系链接到 PRODUCT 维度。

使用 ORDER-LINE 维度作为桥接表解决了 Salesfact 和 PRODUCT 维度之间存在 M:M 关系的原始问题。

【讨论】:

【参考方案2】:

我要补充一点,订单项/行可能很棘手。有多种方法可以处理它。

在事实表中添加一列“订单行项目”或“交易控制 ID”。

这将允许您在事实中拥有 SalesKey、OrderKey、ProductKey,并带有“OrderLineItem”退化维度键,这通常是来自源系统的交易控制编号或订单行编号。

使用此方法时您可能会遇到的一个问题是,当您有订单行中不存在的订单级别度量(税金、收银员 ID 等)时。 Kimball 的首选方法是尽可能将这些措施分配到订单线。

这是 Kimball 关于退化维度的一篇好文章: http://www.kimballgroup.com/html/designtipsPDF/DesignTips2003/KimballDT46AnotherLook.pdf

【讨论】:

以上是关于创建数据仓库的主要内容,如果未能解决你的问题,请参考以下文章

Docker创建私有仓库 | 数据卷和数据卷容器 | 容器互联 操作详解

创建实时数据仓库

数据仓库和OLAP、ROLAP

为 Sakila 数据仓库创建 Actor 维度

Fitbit 数据导出 - 创建数据仓库

为数据仓库创建 SQL Server 数据库的最佳实践