事務事實表概念
事務事實表用來描述業務過程,跟蹤空間或時間上某點的度量事件,保存的是最原子的數據,也稱為“原子事實表“
設計過程
任何類型的事件都可以被理解為一種事務。比如交易過程中的創建訂單、買家付款,物流過程中的攬貨、發貨、簽收,退款中的申請退款、申請小二介入等,都可以被理解為一種事務。
事務事實表, 即針對這些過程構建的一類事實表,用以跟蹤定義業務過程的個體行為,提供豐富的分析能力,作為數據倉庫原子的明細數據。
下面以淘寶交易事務事實表為例,闡述事務事實表的一般設計過程。
選擇業務過程
上圖給出了淘寶交易訂單的流轉過程,其中介紹了四個重要過程:創建訂單、買家付款、賣家發貨、買家確認收貨,即下單、支付、發貨和成功完結四個業務過程。
這四個業務過程不僅是交易過程中的重要時間節點,而且也是下游統計分析的重點,因此淘寶交易事務事實表設計着重從這四個業務過程進行展開。
Kimball 維度建模理論認為,為了便於進行獨立的分析研究,應該為每個業務過程建立一個事實表。
確定粒度
業務過程選定以后,就要針對每個業務過程確定一個粒度,即確定事務事實表每一行所表達的細節層次。
下面先介紹淘寶訂單的產生過程。
淘寶出售商品主要分兩類賣家: 一類是個人性質的閑置賣家,主要出售閑置的或者二手商品: 一類是擁有店鋪的賣家,以出售新商品為主。接下來主要以店鋪類交易訂單為例進行介紹。
在淘寶下單交易時,有兩種方式:
- 選定商品后直接購買,這樣會產生一個交易訂單
- 將多種商品加入到購物車中,然后一起結算
此時對於每一種商品都會產生一個訂單,同時對於同一個店鋪會額外產生一個訂單,即父訂單;由於是在同一個店鋪購買的,所以父訂單會承載訂單物流、店鋪優惠等信息。而對於每一種商品產生的訂單就稱為子訂單,子訂單記錄了父訂單的訂單號,並且有子訂單標志。如果在同一個店鋪只購買了-種商品,則會將父子訂單進行合並,只保留一條訂單記錄。
了解了淘寶交易訂單的產生過程后,現在為淘寶交易事務事實表確定粒度。如第 l 步所述,在淘寶交易過程中有四個重要業務過程,需要
為每個業務過程確定一個粒度。
其中下單、支付和成功完結三個業務過程選擇交易子訂單粒度,即每個子訂單為事務事實表的一行,每個子訂單所表達的細節信息為: 交易時間、賣家、買家、商品,即選擇圖l 1. 2和圖11.3 中訂單ID 為1 、4 、5、6 、7 、8,、9 的子訂單作為事務事實表的每一行。賣家發貨這個業務過程可以選擇子訂單粒度,即將每個子訂單作為賣家發貨事實表的一個細節。
然而,在實際操作中發現,賣家發貨更多的是物流單粒度而非子訂單粒度,同一個子訂單可以拆開成多個物流單進行發貨。在事務事實表設計過程中,秉承確定為最細粒度的原則,因此對於賣家發貨確定為物流單粒度,和其他三個業務過程不同,這樣可以更好地給下游統計分析帶來靈活性。
確定維度
選定好業務過程並且確定粒度后,就可以確定維度信息了。在淘寶交易事務事實表設計過程中,按照經常用於統計分析的場景,確定維度包含:買家、賣家、商品、商品類目、發貨地區、收貨地區、父訂單維度以及雜項維度。
由於訂單的屬性較多,比如訂單的業務類型、是否無線交易、訂單的 attributes 屬性等,對於這些使用較多卻又無法歸屬到上述買賣家或商品維度中的屬性,則新建一個雜項維度進行存放
確認事實表
作為過程度量的核心,事實表應該包含與其描述過程有關的所有事實。
以淘寶交易事務事實表為例,選定三個業務過程一一下單、支付和成功完結,不同的業務過程擁有不同的事實。比如在下單業務過程中,
需要包含下單金額、下單數量、下單分攤金額;在支付業務過程中,包含支付金額、分攤郵費、折扣金額、紅包金額、積分金額;在完結業務過程中包含確認收貨金額等。
由於粒度是子訂單,所以對於一些父訂單上的金額需要分攤到子訂單上,比如父訂單郵費、父訂單折扣等。
根據 Kimball 維度建模理論,經過以上四步,淘寶交易事務事實表已成型,可以滿足下游分析統計的需要。然而,淘寶數據倉庫在建
模時,基於以上四步增加了一步一一退化維度,這個過程在 Kimball 維度建模中也有所提及;但淘寶數據倉庫出於效率和資源的考慮,將常用維度全部退化到事實表中,使下游分析使用模型更加方便。
冗余維度
在確定維度時,包含了買賣家維度、商品維度、類目維度、收發貨維度等, Kimball 維度建模理論建議在事實表中只保存這些維表的外鍵,而淘寶交易事務事實表在 Kimball 維度建模基礎之上做了進一步的優化,將買賣家星級、標簽、店鋪名稱、商品類型、商品特征、商品屬性、類目層級等維度屬性都冗余到事實表中,提高對事實表進行過濾查詢、統計聚合的效率
經過以上五個步驟,完成了淘寶交易事務事實表的設計。
事實的設計准則
事實完整性
事實表包含與其描述的過程有關的所有事實,即盡可能多地獲取所有的度量。在淘寶交易事務事實表中,比如支付業務過程,在子訂單粒
度上的支付金額、支付郵費、支付紅包、支付積分、支付折扣都有所包含,覆蓋全面。
事實一致性
在確定事務事實表的事實時,明確存儲每一個事實以確保度量的一致性。以淘寶交易事務事實表為例,在下單業務過程中,有下單商品數
量和商品價格兩個事實,但在事實表中計算了下單金額和下單有效金額,它們可以通過商品數量乘以商品價格進行計算。雖然下游在取數時也可以通過這種方式完成計算,但是在事實表中統一計算可以保證度的一致性,其他如支付過程中的分攤金額等也是類似的。
事實可加性
事實表確定事實時,往往會遇到非可加性度量,比如分攤比例、利潤率等,雖然它們也是下游分析的關鍵點,但往往在事務事實表中關注
更多的是可加性事實,下游用戶在聚合統計時更加方便。在淘寶交易事務事實表中,存儲了分攤比例這樣的度量,但更多的是存儲各類金額的度量。