[英]Fact Table Recommendation
我有一個數據集市,只需要捕獲產品的序列號,活動的日期以及活動發生的位置(哪個帳戶)。
有五種可能的活動。 我的問題是這個。 其中兩項活動在倉庫級別進行。 其余三個發生在帳戶級別(WH不適用)。 最終,每個倉庫最終都匯總到一個主帳戶。
因此,如果我有一個事實表,則基本上需要兩個FK,並且您必須遍歷事實表才能構建WH>帳戶層次結構,這似乎很難維護。 我想要一維表。
還是建議我將其分為兩個事實表,即使每個表的唯一不同之處是活動是否在倉庫進行。
報告的目標將在帳戶級別,但是在某些時候擁有WH信息可能會有用。 而且我需要檢查是否有重復項,這就是為什么我傾向於第一個,但是不知道如何適當地處理層次結構的原因。
單事實表設計
雙事實表設計
表格1
表2
我已經將您的情況解釋為:
在這種情況下,您應該可以使用單個FACT表設計:
[ACTIVITY_FACT]
SK (Optional, i find unique surrogate PKs useful)
ITEM_SK (Link to your ITEM_DIM table)
ACCOUNT_SK (Link to your ACCOUNT_DIM table)
WAREHOUSE_SK (Link to your WAREHOUSE_DIM table, -1 for no warehouse activities)
ACTIVITY_TYPE_SK (Link to your ACTIVITY_TYPE_DIM table)
ACTIVITY_DATE_SK (Link to your DATE_DIM table)
ITEM_SERIAL_NUMBER
ITEM_COUNT
在您的WAREHOUSE維度中有一個記錄NONE或NOT APPLICABLE,並為其分配一個明顯的特殊條件SK值-1或-9或您的商店用於此類事情的任何值。
對於引用倉庫的活動記錄,請放置適當的倉庫sk和屬於該倉庫的科目sk。
對於不涉及倉庫的活動,請在倉庫sk中填充NONE / NOT APPLICABLE倉庫維記錄和相應的帳戶SK。
現在,您的事實表可以連接到“帳戶”和“倉庫”維表,而不必擔心外部聯接或空條件處理。 這將使您和您的用戶可以根據需要使用倉庫維度數據,而不必費心管理兩個包含相同日期的表。
一種可能性是在單個維表中定義層次結構。 在猜測您要處理的內容時,我提出了以下建議。
尺寸表概述:
TABLE: Account
Account_ID <surrogate key>
Account <Account name, identifier>
Warehouse (Warehouse name, identifier)
樣本數據:
Account_ID Account Warehouse
1 A n/a
2 B n/a
3 C n/a
4 W wh1
5 W wh2
6 Z wh3
7 Z n/a
Account_ID只是一個代理密鑰,沒有內在的含義或值
帳戶列出帳戶。 在這里,我顯示了五個,分別是A,B,C,W和Z。 通過Account_ID加入一個事實表,其中Account =“ W”獲取該帳戶的所有數據(但適用於許多倉庫)。
倉庫列出所有倉庫及其關聯的帳戶; 在這里,“ W”是兩個單獨倉庫(wh1,wh2)的帳戶; Z與倉庫wh3相關聯,但具有“無”倉庫的事實表也可以使用Z。 通過Account_ID加入一個事實表,其中Warehouse =“ wh1”獲取該倉庫的所有數據。
使用此功能,在事實表中使用Account_ID,您可以細化任何給定帳戶或特定倉庫的所有條目(或如果沒有價值,則無倉庫)。
這種方法可能有很多變化和排列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.