2017-02-14 64 views
1

我正在构建基于Kimballs方法的EDW。我们的源系统中有父母/子女关系(订单/订单项)。我拥有的事实表在订单项grain中定义。业务部门希望能够通过额外的订单级别属性(即发货方式,订单类型等)对这些数据进行分片和裁片。我打算创建订单维度,而不是直接将这些属性添加到事实表。我不想将这些添加到事实表直接导致添加所有可能的属性将使这个事实表非常广泛。父母孩子的EDW情况表

所以问题是......是否可以设计一个订单维度具有属性来描述订单?由于所有措施仍在事实表中,因此没有任何措施。这只是描述事实的附加数据。

谢谢!

+0

这对我来说似乎很合理。 – BobC

+0

正确。这就是星型模式的构建方式:维度包含属性,事实包含度量。 – momobo

+0

将它引入维度很好,但维度建模方法会有一些不同的路线:我会试着将一个答案放在一起来描述它。 – Rich

回答

0

这是一个非常常见的尺寸建模dillemma。

你说得对,你不应该直接将这些添加到订单行级事实表。它们是维度属性,它们将用于在查询时过滤事实表。但是,如果您将它们全部放在订单维度中,那么您可能会得到一个非常大的维度,特别是如果您有订单号要包括的话,并且对订单类型或造船方法等任何分析都必须通过它进行分析。如果您正在对订单级别事实进行建模,那么订单类型/货运方法将保留在维度中,可能在作为“垃圾”维度创建的订单明细维度内(但这是另一个问题)。

Kimball Group推荐的方法是让订单行级别的事实'继承'您将在订单级别事实中使用的维度,因此它们可直接用于分析,而不是具有“订单”维度。请注意,在此实例中,订单#可以是事实表中的“退化维”,因为关于订单的所有有趣信息都已在其他维中捕获。

金博尔集团对此有一个有用的文章在这里:

http://www.kimballgroup.com/2007/10/design-tip-95-patterns-to-avoid-when-modeling-headerline-item-transactions/

其中,为了维理念的缺陷被突出显示和描述的推荐方法。