创建数据仓库
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
【讨论】:
以上是关于创建数据仓库的主要内容,如果未能解决你的问题,请参考以下文章