數(shù)倉建?!聦嵄砀韶浗坛?/h2>
事實在字典里指事情的真實情形,在維度建模中,通常表示某個業(yè)務(wù)的度量,如商品的數(shù)量、金額等。本文作者針對維度建模事實表進行了分析,一起來看一下吧。

上周在《數(shù)據(jù)倉庫建模超詳細(xì)攻略》一文中,給大家簡單介紹了數(shù)倉建模的常見模型:ER模型和維度建模的一些基本知識,本周我們針對維度建模事實表進行更詳細(xì)的講解。
一、什么是事實
事實在字典里指事情的真實情形,在維度建模中,通常表示某個業(yè)務(wù)的度量。如訂單中商品的數(shù)量、金額等。
1. 事實類型
此處的事實類型是指度量值的類型,而非事實表的類型。事實(度量值)共分為三類,分別是可加事實,半可加事實和不可加事實。
1)可加事實
可加事實是指可以按照與事實表相關(guān)的所有維度進行累加,事務(wù)型事實表中的事實,例如上篇文章講述的訂單事實表。
2)半可加事實
半可加事實是指只能按照與事實表相關(guān)的一部分維度進行累加,例如周期型快照事實表中的事實。以上述各倉庫中各商品的庫存每天快照事實表為例,這張表中的庫存事實可以按照倉庫或者商品維度進行累加,但是不能按照時間維度進行累加,因為將每天的庫存累加起來是沒有任何意義的。
3)不可加事實
不可加事實是指完全不具備可加性,例如比率型事實。不可加事實通常需要轉(zhuǎn)化為可加事實,例如比率可轉(zhuǎn)化為分子和分母。
二、什么是事實表
事實表是指存儲有事實記錄的表,如用戶登錄記錄表、下單記錄、優(yōu)惠券領(lǐng)取記錄表等,事實表作為數(shù)據(jù)倉庫維度建模的核心,其緊緊圍繞著業(yè)務(wù)過程來設(shè)計。一般包含與該業(yè)務(wù)過程有關(guān)的維度引用(維度表外鍵)以及該業(yè)務(wù)過程的度量(通常是可累加的數(shù)字類型字段)。
引用上篇文章我們講過的下單業(yè)務(wù)過程為例,如圖所示:訂單明細(xì)表作為訂單業(yè)務(wù)的事實表,訂單明細(xì)表中含有買家、賣家、時間、地域、商品、物流等維度,訂單價格作為訂單過程的度量。
事實表有三種類型:分別是事務(wù)事實表、周期快照事實表和累積快照事實表,每種事實表都具有不同的特點和適用場景,我們依次介紹一下:
1. 事務(wù)型事實表
事務(wù)型事實表用來記錄各業(yè)務(wù)過程,它保存的是各業(yè)務(wù)過程的原子操作事件,即最細(xì)粒度的操作事件。粒度是指事實表中一行數(shù)據(jù)所表達(dá)的業(yè)務(wù)細(xì)節(jié)程度。事務(wù)型事實表可用于分析與各業(yè)務(wù)過程相關(guān)的各項統(tǒng)計指標(biāo),由于其保存了最細(xì)粒度的記錄,可以提供最大限度的靈活性,可以支持無法預(yù)期的各種細(xì)節(jié)層次的統(tǒng)計需求。
1)事務(wù)型事實表設(shè)計流程
設(shè)計事務(wù)事實表時一般可遵循以下四個步驟:
選擇業(yè)務(wù)過程→聲明粒度→確認(rèn)維度→確認(rèn)事實。
①選擇業(yè)務(wù)過程
在業(yè)務(wù)系統(tǒng)中,挑選我們要分析的業(yè)務(wù)過程,業(yè)務(wù)過程可以概括為一個個不可拆分的行為事件,例如電商交易中的下單,取消訂單,付款,退單等,都是業(yè)務(wù)過程。通常情況下,一個業(yè)務(wù)過程對應(yīng)一張事務(wù)型事實表。
②聲明粒度
業(yè)務(wù)過程確定后,需要為每個業(yè)務(wù)過程聲明粒度。即精確定義每張事務(wù)型事實表的每行數(shù)據(jù)表示什么,應(yīng)該盡可能選擇最細(xì)粒度,以此來應(yīng)各種細(xì)節(jié)程度的需求。
典型的粒度聲明如下:
訂單事實表中一行數(shù)據(jù)表示的是一個訂單中的一個商品項。
③確定維度
確定維度具體是指,確定與每張事務(wù)型事實表相關(guān)的維度有哪些。確定維度時應(yīng)盡量多地選擇與業(yè)務(wù)過程相關(guān)的環(huán)境信息。因為維度的豐富程度就決定了維度模型能夠支持的指標(biāo)豐富程度。
④確定事實
此處的“事實”一詞,指的是每個業(yè)務(wù)過程的度量值(通常是可累加的數(shù)字類型的值,例如:次數(shù)、個數(shù)、件數(shù)、金額等)。
經(jīng)過上述四個步驟,事務(wù)型事實表就基本設(shè)計完成了。第一步選擇業(yè)務(wù)過程可以確定有哪些事務(wù)型事實表,第二步可以確定每張事務(wù)型事實表的每行數(shù)據(jù)是什么,第三步可以確定每張事務(wù)型事實表的維度外鍵,第四步可以確定每張事務(wù)型事實表的度量值字段。

(事務(wù)事實表 示例)
2)事務(wù)型事實表不足之處
事務(wù)型事實表可以保存所有業(yè)務(wù)過程的最細(xì)粒度的操作事件,故理論上其可以支撐與各業(yè)務(wù)過程相關(guān)的各種統(tǒng)計粒度的需求。但對于某些特定類型的需求,其邏輯可能會比較復(fù)雜,或者效率會比較低下。例如:
1)存量型指標(biāo)
對于商品庫存,賬戶余額等指標(biāo),虛擬貨幣業(yè)務(wù)包含的業(yè)務(wù)過程主要包括獲取貨幣和使用貨幣,兩個業(yè)務(wù)過程各自對應(yīng)一張事務(wù)型事實表,一張存儲所有的獲取貨幣的原子操作事件,另一張存儲所有使用貨幣的原子操作事件。
假定現(xiàn)有一個需求,要求統(tǒng)計截至當(dāng)日的各用戶虛擬貨幣余額。由于獲取貨幣和使用貨幣均會影響到余額,故需要對兩張事務(wù)型事實表進行聚合,且需要區(qū)分兩者對余額的影響(加或減),另外需要對兩張表的全表數(shù)據(jù)聚合才能得到統(tǒng)計結(jié)果。可以看到,不論是從邏輯上還是效率上考慮,這都不是一個好的方案。
2)多事務(wù)關(guān)聯(lián)統(tǒng)計
如現(xiàn)需要統(tǒng)計最近30天,用戶下單到支付的時間間隔的平均值。統(tǒng)計思路應(yīng)該是找到下單事務(wù)事實表和支付事務(wù)事實表,過濾出最近30天的記錄,然后按照訂單id對兩張事實表進行關(guān)聯(lián),之后用支付時間減去下單時間,然后再求平均值。 邏輯上雖然并不復(fù)雜,但是其效率較低,因為下單事務(wù)事實表和支付事務(wù)事實表均為大表,大表join大表的操作應(yīng)盡量避免。
在上述兩種場景下事務(wù)型事實表的表現(xiàn)并不理想。下面要介紹的另外兩種類型的事實表就是為了彌補事務(wù)型事實表的不足的。
2. 周期型快照事實表
周期快照事實表以具有規(guī)律性的、可預(yù)見的時間間隔來記錄事實,主要用于分析一些存量型(例如在線人數(shù),賬戶余額,商品庫存)或者狀態(tài)型(空氣溫度,行駛速度)指標(biāo)。
對于商品庫存、賬戶余額這些存量型指標(biāo),業(yè)務(wù)系統(tǒng)中通常就會計算并保存最新結(jié)果,所以定期同步一份全量數(shù)據(jù)到數(shù)據(jù)倉庫,構(gòu)建周期型快照事實表,就能輕松應(yīng)對此類統(tǒng)計需求,而無需再對事務(wù)型事實表中大量的歷史記錄進行聚合了。
對于空氣溫度、行駛速度這些狀態(tài)型指標(biāo),由于它們的值往往是連續(xù)的,我們無法捕獲其變動的原子事務(wù)操作,所以無法使用事務(wù)型事實表統(tǒng)計此類需求。而只能定期對其進行采樣,構(gòu)建周期快照事實表。
1)周期快照事實表設(shè)計流程
①確定粒度
周期型快照事實表的粒度可由采樣周期和維度描述,故確定采樣周期和維度后即可確定粒度。
采樣周期通常選擇每日。
維度可根據(jù)統(tǒng)計指標(biāo)決定,例如指標(biāo)為統(tǒng)計每個倉庫中每種商品的庫存,則可確定維度為倉庫和商品。
確定完采樣周期和維度后,即可確定該表粒度為每日-倉庫-商品。
②確認(rèn)事實
事實也可根據(jù)統(tǒng)計指標(biāo)決定,例如指標(biāo)為統(tǒng)計每個倉庫中每種商品的庫存,則事實為商品庫存。

(周期快照事實表 示例)
3. 累積快照事實表
累計快照事實表是基于一個業(yè)務(wù)流程中的多個關(guān)鍵業(yè)務(wù)過程聯(lián)合處理而構(gòu)建的事實表,如交易流程中的下單、支付、發(fā)貨、確認(rèn)收貨業(yè)務(wù)過程。
累積快照事實表通常具有多個日期字段,每個日期對應(yīng)業(yè)務(wù)流程中的一個關(guān)鍵業(yè)務(wù)過程(里程碑)。
累積快照事實表主要用于分析業(yè)務(wù)過程(里程碑)之間的時間間隔等需求。例如前文提到的用戶下單到支付的平均時間間隔,使用累積型快照事實表進行統(tǒng)計,就能避免兩個事務(wù)事實表的關(guān)聯(lián)操作,從而變得十分簡單高效。
1)累積快照事實表設(shè)計流程
累積快照事實表的設(shè)計流程同事務(wù)型事實表類似,也可采用以下四個步驟,下面重點描述與事務(wù)型事實表的不同之處。
選擇業(yè)務(wù)過程→聲明粒度→確認(rèn)維度→確認(rèn)事實。
①選擇業(yè)務(wù)過程
選擇一個業(yè)務(wù)流程中需要關(guān)聯(lián)分析的多個關(guān)鍵業(yè)務(wù)過程,多個業(yè)務(wù)過程對應(yīng)一張累積型快照事實表。
②聲明粒度
精確定義每行數(shù)據(jù)表示的是什么,盡量選擇最小粒度。
③確認(rèn)維度
選擇與各業(yè)務(wù)過程相關(guān)的維度,需要注意的是,各個業(yè)務(wù)過程均需要一個日期維度。
④確認(rèn)事實
選擇各業(yè)務(wù)過程的度量值。

(累積型事務(wù)事實表 示例)
本文由 @菜鳥數(shù)據(jù)之旅 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載
題圖來自Unsplash,基于CC0協(xié)議
該文觀點僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)。
更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
事實在字典里指事情的真實情形,在維度建模中,通常表示某個業(yè)務(wù)的度量,如商品的數(shù)量、金額等。本文作者針對維度建模事實表進行了分析,一起來看一下吧。
上周在《數(shù)據(jù)倉庫建模超詳細(xì)攻略》一文中,給大家簡單介紹了數(shù)倉建模的常見模型:ER模型和維度建模的一些基本知識,本周我們針對維度建模事實表進行更詳細(xì)的講解。
一、什么是事實
事實在字典里指事情的真實情形,在維度建模中,通常表示某個業(yè)務(wù)的度量。如訂單中商品的數(shù)量、金額等。
1. 事實類型
此處的事實類型是指度量值的類型,而非事實表的類型。事實(度量值)共分為三類,分別是可加事實,半可加事實和不可加事實。
1)可加事實
可加事實是指可以按照與事實表相關(guān)的所有維度進行累加,事務(wù)型事實表中的事實,例如上篇文章講述的訂單事實表。
2)半可加事實
半可加事實是指只能按照與事實表相關(guān)的一部分維度進行累加,例如周期型快照事實表中的事實。以上述各倉庫中各商品的庫存每天快照事實表為例,這張表中的庫存事實可以按照倉庫或者商品維度進行累加,但是不能按照時間維度進行累加,因為將每天的庫存累加起來是沒有任何意義的。
3)不可加事實
不可加事實是指完全不具備可加性,例如比率型事實。不可加事實通常需要轉(zhuǎn)化為可加事實,例如比率可轉(zhuǎn)化為分子和分母。
二、什么是事實表
事實表是指存儲有事實記錄的表,如用戶登錄記錄表、下單記錄、優(yōu)惠券領(lǐng)取記錄表等,事實表作為數(shù)據(jù)倉庫維度建模的核心,其緊緊圍繞著業(yè)務(wù)過程來設(shè)計。一般包含與該業(yè)務(wù)過程有關(guān)的維度引用(維度表外鍵)以及該業(yè)務(wù)過程的度量(通常是可累加的數(shù)字類型字段)。
引用上篇文章我們講過的下單業(yè)務(wù)過程為例,如圖所示:訂單明細(xì)表作為訂單業(yè)務(wù)的事實表,訂單明細(xì)表中含有買家、賣家、時間、地域、商品、物流等維度,訂單價格作為訂單過程的度量。
事實表有三種類型:分別是事務(wù)事實表、周期快照事實表和累積快照事實表,每種事實表都具有不同的特點和適用場景,我們依次介紹一下:
1. 事務(wù)型事實表
事務(wù)型事實表用來記錄各業(yè)務(wù)過程,它保存的是各業(yè)務(wù)過程的原子操作事件,即最細(xì)粒度的操作事件。粒度是指事實表中一行數(shù)據(jù)所表達(dá)的業(yè)務(wù)細(xì)節(jié)程度。事務(wù)型事實表可用于分析與各業(yè)務(wù)過程相關(guān)的各項統(tǒng)計指標(biāo),由于其保存了最細(xì)粒度的記錄,可以提供最大限度的靈活性,可以支持無法預(yù)期的各種細(xì)節(jié)層次的統(tǒng)計需求。
1)事務(wù)型事實表設(shè)計流程
設(shè)計事務(wù)事實表時一般可遵循以下四個步驟:
選擇業(yè)務(wù)過程→聲明粒度→確認(rèn)維度→確認(rèn)事實。
①選擇業(yè)務(wù)過程
在業(yè)務(wù)系統(tǒng)中,挑選我們要分析的業(yè)務(wù)過程,業(yè)務(wù)過程可以概括為一個個不可拆分的行為事件,例如電商交易中的下單,取消訂單,付款,退單等,都是業(yè)務(wù)過程。通常情況下,一個業(yè)務(wù)過程對應(yīng)一張事務(wù)型事實表。
②聲明粒度
業(yè)務(wù)過程確定后,需要為每個業(yè)務(wù)過程聲明粒度。即精確定義每張事務(wù)型事實表的每行數(shù)據(jù)表示什么,應(yīng)該盡可能選擇最細(xì)粒度,以此來應(yīng)各種細(xì)節(jié)程度的需求。
典型的粒度聲明如下:
訂單事實表中一行數(shù)據(jù)表示的是一個訂單中的一個商品項。
③確定維度
確定維度具體是指,確定與每張事務(wù)型事實表相關(guān)的維度有哪些。確定維度時應(yīng)盡量多地選擇與業(yè)務(wù)過程相關(guān)的環(huán)境信息。因為維度的豐富程度就決定了維度模型能夠支持的指標(biāo)豐富程度。
④確定事實
此處的“事實”一詞,指的是每個業(yè)務(wù)過程的度量值(通常是可累加的數(shù)字類型的值,例如:次數(shù)、個數(shù)、件數(shù)、金額等)。
經(jīng)過上述四個步驟,事務(wù)型事實表就基本設(shè)計完成了。第一步選擇業(yè)務(wù)過程可以確定有哪些事務(wù)型事實表,第二步可以確定每張事務(wù)型事實表的每行數(shù)據(jù)是什么,第三步可以確定每張事務(wù)型事實表的維度外鍵,第四步可以確定每張事務(wù)型事實表的度量值字段。
(事務(wù)事實表 示例)
2)事務(wù)型事實表不足之處
事務(wù)型事實表可以保存所有業(yè)務(wù)過程的最細(xì)粒度的操作事件,故理論上其可以支撐與各業(yè)務(wù)過程相關(guān)的各種統(tǒng)計粒度的需求。但對于某些特定類型的需求,其邏輯可能會比較復(fù)雜,或者效率會比較低下。例如:
1)存量型指標(biāo)
對于商品庫存,賬戶余額等指標(biāo),虛擬貨幣業(yè)務(wù)包含的業(yè)務(wù)過程主要包括獲取貨幣和使用貨幣,兩個業(yè)務(wù)過程各自對應(yīng)一張事務(wù)型事實表,一張存儲所有的獲取貨幣的原子操作事件,另一張存儲所有使用貨幣的原子操作事件。
假定現(xiàn)有一個需求,要求統(tǒng)計截至當(dāng)日的各用戶虛擬貨幣余額。由于獲取貨幣和使用貨幣均會影響到余額,故需要對兩張事務(wù)型事實表進行聚合,且需要區(qū)分兩者對余額的影響(加或減),另外需要對兩張表的全表數(shù)據(jù)聚合才能得到統(tǒng)計結(jié)果。可以看到,不論是從邏輯上還是效率上考慮,這都不是一個好的方案。
2)多事務(wù)關(guān)聯(lián)統(tǒng)計
如現(xiàn)需要統(tǒng)計最近30天,用戶下單到支付的時間間隔的平均值。統(tǒng)計思路應(yīng)該是找到下單事務(wù)事實表和支付事務(wù)事實表,過濾出最近30天的記錄,然后按照訂單id對兩張事實表進行關(guān)聯(lián),之后用支付時間減去下單時間,然后再求平均值。 邏輯上雖然并不復(fù)雜,但是其效率較低,因為下單事務(wù)事實表和支付事務(wù)事實表均為大表,大表join大表的操作應(yīng)盡量避免。
在上述兩種場景下事務(wù)型事實表的表現(xiàn)并不理想。下面要介紹的另外兩種類型的事實表就是為了彌補事務(wù)型事實表的不足的。
2. 周期型快照事實表
周期快照事實表以具有規(guī)律性的、可預(yù)見的時間間隔來記錄事實,主要用于分析一些存量型(例如在線人數(shù),賬戶余額,商品庫存)或者狀態(tài)型(空氣溫度,行駛速度)指標(biāo)。
對于商品庫存、賬戶余額這些存量型指標(biāo),業(yè)務(wù)系統(tǒng)中通常就會計算并保存最新結(jié)果,所以定期同步一份全量數(shù)據(jù)到數(shù)據(jù)倉庫,構(gòu)建周期型快照事實表,就能輕松應(yīng)對此類統(tǒng)計需求,而無需再對事務(wù)型事實表中大量的歷史記錄進行聚合了。
對于空氣溫度、行駛速度這些狀態(tài)型指標(biāo),由于它們的值往往是連續(xù)的,我們無法捕獲其變動的原子事務(wù)操作,所以無法使用事務(wù)型事實表統(tǒng)計此類需求。而只能定期對其進行采樣,構(gòu)建周期快照事實表。
1)周期快照事實表設(shè)計流程
①確定粒度
周期型快照事實表的粒度可由采樣周期和維度描述,故確定采樣周期和維度后即可確定粒度。
采樣周期通常選擇每日。
維度可根據(jù)統(tǒng)計指標(biāo)決定,例如指標(biāo)為統(tǒng)計每個倉庫中每種商品的庫存,則可確定維度為倉庫和商品。
確定完采樣周期和維度后,即可確定該表粒度為每日-倉庫-商品。
②確認(rèn)事實
事實也可根據(jù)統(tǒng)計指標(biāo)決定,例如指標(biāo)為統(tǒng)計每個倉庫中每種商品的庫存,則事實為商品庫存。
(周期快照事實表 示例)
3. 累積快照事實表
累計快照事實表是基于一個業(yè)務(wù)流程中的多個關(guān)鍵業(yè)務(wù)過程聯(lián)合處理而構(gòu)建的事實表,如交易流程中的下單、支付、發(fā)貨、確認(rèn)收貨業(yè)務(wù)過程。
累積快照事實表通常具有多個日期字段,每個日期對應(yīng)業(yè)務(wù)流程中的一個關(guān)鍵業(yè)務(wù)過程(里程碑)。
累積快照事實表主要用于分析業(yè)務(wù)過程(里程碑)之間的時間間隔等需求。例如前文提到的用戶下單到支付的平均時間間隔,使用累積型快照事實表進行統(tǒng)計,就能避免兩個事務(wù)事實表的關(guān)聯(lián)操作,從而變得十分簡單高效。
1)累積快照事實表設(shè)計流程
累積快照事實表的設(shè)計流程同事務(wù)型事實表類似,也可采用以下四個步驟,下面重點描述與事務(wù)型事實表的不同之處。
選擇業(yè)務(wù)過程→聲明粒度→確認(rèn)維度→確認(rèn)事實。
①選擇業(yè)務(wù)過程
選擇一個業(yè)務(wù)流程中需要關(guān)聯(lián)分析的多個關(guān)鍵業(yè)務(wù)過程,多個業(yè)務(wù)過程對應(yīng)一張累積型快照事實表。
②聲明粒度
精確定義每行數(shù)據(jù)表示的是什么,盡量選擇最小粒度。
③確認(rèn)維度
選擇與各業(yè)務(wù)過程相關(guān)的維度,需要注意的是,各個業(yè)務(wù)過程均需要一個日期維度。
④確認(rèn)事實
選擇各業(yè)務(wù)過程的度量值。
(累積型事務(wù)事實表 示例)
本文由 @菜鳥數(shù)據(jù)之旅 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載
題圖來自Unsplash,基于CC0協(xié)議
該文觀點僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)。
辛苦了