创建数据仓库

时间:2011-11-22 23:12:13

标签: database data-warehouse dimensional-modeling star-schema

我正在使用星型模式创建数据仓库。我成功构建了所有维度表,但我有点卡在事实表中。我需要将Sales表作为Fact表。它有SalesKey,OrderKey,ProductKey等...每个订单都是一个销售,所以每个订单都有一个独特的SalesKey,但每个销售将有多个产品。

构建此表最好的是什么?

我应该创建类似的东西

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

2 个答案:

答案 0 :(得分:2)

通常,当您设计星际图时,最好每个维度对于每个事实记录都是单值的(事实和维度之间的关系为1:M)。

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

所以基本上你将使用雪花模式,其中facttable以1:M关系链接到ORDER-LINE维度。然后,ORDER-LINE维度以M:1关系链接到PRODUCT维度。

有了这个,Salesfact和PRODUCT维度之间具有M:M关系的原始问题已经通过ORDER-LINE维度作为桥接表来解决。

答案 1 :(得分:2)

我想补充说订单商品/行可能很棘手。有多种方法可以处理它。

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

这将允许您使用“OrderLineItem”退化维度密钥来生成SalesKey,OrderKey,ProductKey,这通常是来自源系统的事务控制号或订单行号。

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

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