2017-03-07 52 views
0

我有两个事实表: 1. FactPOLine:它具有所有的PO行。 2. FactInvoiceLines:它包含所有发票行。事实与事实的关系

发票和宝之间有一对多的关系。即每个发票行只能有一个po行,但一个po行可以有多个发票行。

我该如何模拟这种关系?我认为不建议连接两个事实。

谢谢。

回答

2

将事实表连接起来,用它们共有的维度进行分析。例如,FactPOLine和FactInvoiceLines可能都有按键的尺寸如下:

  • 项目/产品
  • 客户
  • 供应商
  • 载波
  • 日期

日是一个特殊的在这种情况下,它们可能是与每一行相关的多个日期。但是,如果您可以减少每个表的一个主要日期,则可以使分析更容易,从而可以按年,季度和月份分析。

最后,增加一个垃圾维度来保存po编号和行并将两个表链接到它是很有用的。在这种情况下,用户可以通过PO分析。这对于更多操作类型的报告很有用。

编辑: 在你的意见中,你注意到企业希望通过PO分析。如果公司每年只有少量的采购订单,这很有意义。然而,更有可能的情况是,他们有成千上万,甚至更多,这对于进行详细的分析非常困难。

我建议问5个问题,并试图发现他们的目标。即为什么你想通过PO分析?为什么你想看到所有的数据?为什么你想看到那些没有填充的PO? ...

最终,您会得到一些可以添加到报告和数据模型的硬性措施。例如开放采购订单项次的标志,或完成%的半添加量。不管他们以后是什么,你都可以根据他们的需要获得他们所需要的信息,而不是通过采购订单行的1000页报告。

+0

谢谢您的回复。我有这些维度,两个事实都与他们有关。但业务部门想要分析发票与发票的对比,因此我们需要在采购单和发票之间建立直接联系。两种方式来实现这一点。将发票行中的FK添加到采购单行,或添加此垃圾维度。我该走哪条路,或者你认为还有另一种方式? – BoNDoK

+1

不要以任何方式将FK从事实添加到事实中。最简洁的方法是通过维度链接它们。这也是你的双向工具所期望的,所以它会让用户体验变得更加笨拙。我会根据您的意见更新我的答案并提供另一个提示 –

+1

PO号码不适合垃圾尺寸 - 它是PO线路事实上的退化尺寸。另外,尽管通常通过尺寸相互关联的确是如此,但确实如此,发票号码作为一个事实中的退化维度并且PO号码作为另一事实中的退化维度是相关的 - 没有理由阻止加入。 – Rich

2

我认为这将被称为退化维度。完美的例子是采购订单或发票号码。所有的po属性都与其他维度相关联,但PO#除外。这些数字感觉像一个维度属性,但它们在事件事件发生之前不存在。它们属于事实表,但将用于创建包含单个属性的新维度。所有其他属性仍将存在于其他分析维度中。

http://www.kimballgroup.com/2003/01/fact-tables-and-dimension-tables/

http://www.kimballgroup.com/2003/06/design-tip-46-another-look-at-degenerate-dimensions/

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

0

这些ID都可以被建模为在事实表本身“退化维度”为每从韦斯答案。

对于那些必须加入这些ID的情况,您可以在InvoiceLine表中将InvoiceLine#旁边的POLine#一起插入。

您甚至可以在POLIne中拥有一个事实表替代关键字,您可以在InvoiceLine中将其用作外键。它并不完美,但其实用性。

马克是正确的,你通常通过维度链接而不是通过这样的ID链接,但是你所描述的链接类型在需要时可以在维度建模中被接受。