2010-09-17 51 views
3

我有一個名爲Loans的事實表。在這張表中的貸款標識符,貸款的日期和貸款金額。Datawarehouse事實表問題

我不太清楚如何在數據倉庫中做的業務需求如下。貸款金額可以在未來調整。因此,讓我們說8月1日我們貸款的ID爲1,金額爲20,000。 10月1日這筆貸款調整至19,000。我是否在事實表中使用相同的標識符,以及不同的日期和金額?

我是否在貸款金額和日期中創建了一個新表(維度表)?什麼是做這種情況的最佳方式?

在生產數據庫中,我們有一個貸款總額表,然後是一個貸款餘額表,所以loanAmounts的總和等於totalLoanAmount。

回答

0

您是否確實需要多個版本取決於需求。您是否只需要按照原樣報告貸款金額,或者您是否需要知道原樣爲的位置?如果你不確定,那麼保留歷史(多個版本)可能是有意義的。我的假設是保持歷史。

我建議爲每個新版本和日期列創建新行以表示該版本適用的日期。

+0

我需要知道兩個貸款的數量是和現在一樣。但我還需要能夠說出是否有一筆貸款有兩筆貸款金額調整,即1筆貸款用於計算目的。所以我正在考慮爲貸款制定一個事實表,併爲分項貸款金額制定一個子表。那有意義嗎? – Rjc 2010-09-22 16:17:20

+0

鏈接2個事實表是否正確? – Rjc 2010-09-22 17:54:51

1

將LoanID視爲退化維度並單獨輸入修正。 你也可以使用一個交易類型維度來形容:貸款,付款,更正等

DateKey CustomerKey TransacionTypeKey LoanID Amount 
--------------------------------------------------------- 
20100801 175   1    1  20000.00 
20101001 175   2    1 - 1000.00 

顯示所有貸款客戶,按貸款

select 
     CustomerKey 
    , LoanID 
    , sum(Amount) as Amt 
from factLoan 
group by CustomerKey, LoanID 
order by CustomerKey, LoanID ; 
2

我總是建議治療這種事實表的完全可計算的,對於任何提升,支付,興趣等具有有效的移動交易 - 如果你這樣做,你可以有絕對的靈活性隨時間報告,按交易類型過濾等 - 在同一個事實表中存儲多個版本行或更新當您合併不同的我時,快照表可能是用於報告的其他選項trics跨越各個維度,但在基本層面上,通常將這些逐行事件分項列出。

中號

1

這就是所謂的漸變維度,以及它取決於業務需求,天氣或不是你想保留的發生該行或不在變化軌跡。 通常有3種緩慢變化的尺寸。

在1類緩慢變化的維度中,新信息只是覆蓋原始信息。換句話說,沒有歷史記錄。

在Type 2緩慢變化的維度中,將新記錄添加到表中以表示新信息。因此,原始記錄和新記錄都將出現。新記錄獲取自己的主鍵。

在類型3緩慢變化的維度中,將會有兩列指示感興趣的特定屬性,一個指示原始值,另一個指示當前值。還會有一列指示當前值何時變爲活動狀態。

有關緩慢變化尺寸的更多信息,請參閱kimball手冊。

0

正如你所說,貸款是一個事實。貸款可以調整,這意味着貸款額可以增加或減少。有兩種通用的方法可以解決這個問題:

  1. 插入一個新的行與事實的增量。在這裏現在有兩行貸款。這意味着貸款事實的主鍵不能只是貸款ID。它(邏輯上不一定是物理上)是加載ID和日期,或貸款ID和條目號(以日期作爲另一個屬性)。結果將如您所述。我會將TransactionTypeKey更改爲TransactionTypeCode,這是更正確的命名。

  2. 用新的餘額更新事實。在這種情況下,最終結果將被存儲,但更改將丟失。主鍵是LoanID;日期是一個屬性。

大多數其他應用程序(例如訂單處理)將使用第一個解決方案,這是我認爲您需要的。解決方案1還具有完全添加劑的優點。

至於Saad El Oualji的評論,這不是一個SCD的例子,而是一個詳細的事實設計。他對SCD的描述是正確的,但SCD描述了尺寸變化,而不是事實變化。