簡體   English   中英

事實表建議

[英]Fact Table Recommendation

我有一個數據集市,只需要捕獲產品的序列號,活動的日期以及活動發生的位置(哪個帳戶)。

有五種可能的活動。 我的問題是這個。 其中兩項活動在倉庫級別進行。 其余三個發生在帳戶級別(WH不適用)。 最終,每個倉庫最終都匯總到一個主帳戶。

因此,如果我有一個事實表,則基本上需要兩個FK,並且您必須遍歷事實表才能構建WH>帳戶層次結構,這似乎很難維護。 我想要一維表。

還是建議我將其分為兩個事實表,即使每個表的唯一不同之處是活動是否在倉庫進行。

報告的目標將在帳戶級別,但是在某些時候擁有WH信息可能會有用。 而且我需要檢查是否有重復項,這就是為什么我傾向於第一個,但是不知道如何適當地處理層次結構的原因。

單事實表設計

  • 項目:1
  • 帳戶:14
  • 倉庫:2
  • 活動類型:3
  • 日期:20130204
  • 編號:123456
  • 數:1

雙事實表設計

表格1

  • 項目:1
  • 倉庫:2
  • 活動類型:3
  • 日期:20130204
  • 編號:123456
  • 數:1

表2

  • 項目:1
  • 帳號:2
  • 活動類型:3
  • 日期:20130204
  • 編號:123456
  • 數:1

我已經將您的情況解釋為:

  • 所有活動都需要一個帳戶
  • 一些活動涉及倉庫。
  • 倉庫的選擇意味着一個帳戶。 上面兩點提到的科目是同一類型(只有1個科目維度表)

在這種情況下,您應該可以使用單個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM