我正在使用星型模式创建数据仓库。我成功地构建了所有维度表,但我有点卡在事实表中。我需要做一个销售表作为事实表。它有SalesKey,OrderKey,ProductKey等等。每个订单都是一个销售,所以每个订单都有一个唯一的SalesKey,但是每个销售都有多个产品。
构建这张表最好的方法是什么?
我应该创建这样的东西吗?
SalesKey OrderKey ProductKey
-------- -------- ----------
s1 o1 p1
s1 o1 p2
s2 o2 p1发布于 2011-11-23 20:56:09
通常,在设计星型模式时,最好是每个事实记录的每个维度都是单值的(即事实和维度之间有1:M的关系)。
诀窍是包含一个订单行维度,以便1个订单(=1个销售)可以包含多个订单行。然后,每个订单行包含1个产品。
因此,基本上您将使用雪花模式,其中facttable以1:M的关系链接到订单行维度。然后,订单行维度以M:1关系链接到产品维度。
这样,使用订单行维度作为桥接表,就解决了Salesface维和产品维度之间存在M:M关系的原始问题。
发布于 2011-11-28 19:54:37
我想补充的是,订单项目/行可能会很棘手。有多种方法可以处理它。
向事实数据表中添加列"order line item“或"transaction control id”。
这将允许您将SalesKey、OrderKey、ProductKey全部放在您的事实上,并使用一个"OrderLineItem“退化维键,它通常是来自源系统的事务控制编号或订单行号。
使用此方法时可能会遇到的一个问题是,当订单行中不存在订单级度量(税、收银员id等)时。如果可能的话,Kimball的首选方法是将这些措施分发到订单行。
这里有一篇由Kimball写的关于退化维度的好文章:http://www.kimballgroup.com/html/designtipsPDF/DesignTips2003/KimballDT46AnotherLook.pdf
https://stackoverflow.com/questions/8235232
复制相似问题