2017-03-07 35 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鏈接,但是你所描述的鏈接類型在需要時可以在維度建模中被接受。