2

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

最好的办法是建造这张桌子?

我应该创造这样的东西吗

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

2 回答 2

2

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

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

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

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

于 2011-11-23T12:56:08.627 回答
2

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

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

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

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

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

于 2011-11-28T11:54:37.347 回答