2011-11-22 135 views
2

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

什么是最好的是建立这个表?事实和维度米之间的关系:

如果当你设计一个starschema最好是每个维度是单值对每个事实记录(即有1创建类似的东西

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

回答

2

一般)。

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

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

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

2

我会添加订单项/行可能会很棘手。有多种方式来处理它。

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

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

使用此方法时可能遇到的一个问题是订单级度量不存在于订单行(税收,收银员ID等)时。如果可能的话,Kimball的首选方法是将这些措施分配到订单行。

下面是由Kimball提供的关于退化维数的一篇好文章: http://www.kimballgroup.com/html/designtipsPDF/DesignTips2003/KimballDT46AnotherLook.pdf