清晰易懂!用5W2H方法進行維度建模,一篇搞定!

0 評論 12194 瀏覽 42 收藏 13 分鐘

編輯導(dǎo)語:數(shù)據(jù)模型是數(shù)據(jù)組織和存儲的方法,模型的好壞,決定了數(shù)倉能支撐企業(yè)業(yè)務(wù)多久。而維度建模是數(shù)據(jù)倉庫建設(shè)中的一種數(shù)據(jù)建模方法。這篇文章詳細(xì)地為大家講解數(shù)倉界的泰斗Kimball的維度建模,這種建模方式被廣泛應(yīng)用在阿里滴滴等公司。感興趣的朋友一起來看看吧。

一、維度模型介紹

Kimball大師的模型流程是:從需求→模型→數(shù)據(jù),且整個流程是自下而上的。

這種結(jié)構(gòu)也被成為數(shù)據(jù)集市總線架構(gòu)( Data Mart Bus Architecture )或者數(shù)據(jù)倉庫總線架構(gòu) (DataWarehouse Bus Architecture)。

Kimball模型最核心的部分在于維度建模,理解好這部分,對Kimball模型的理解基本上可以事半功倍。本文重點來介紹下維度建模。

二、應(yīng)用環(huán)境

1. 定義

維度建模是一種數(shù)據(jù)結(jié)構(gòu)技術(shù),主要目的為了幫助用戶進行大規(guī)模且高效的數(shù)據(jù)查詢。

2. 適用

上邊的定義說明了維度建模的目的是優(yōu)化數(shù)據(jù)庫以更快地查詢數(shù)據(jù)。

維度模型旨在讀取、匯總、分析數(shù)據(jù)倉庫中的數(shù)值信息,例如:想看匯總值、分位值等等,這種特性更加適合數(shù)倉環(huán)境。而事務(wù)數(shù)據(jù)庫(OLTP)中,不適合這種設(shè)計方式,因為事務(wù)數(shù)據(jù)庫有如下特點:

  • 適合快速更新和插入數(shù)據(jù)
  • 鎖定一定需要被最小化
  • 只適合一小部分?jǐn)?shù)據(jù)查詢
  • 需要被標(biāo)準(zhǔn)化

我們再來看下數(shù)倉環(huán)境的特點:

  • 適合更加快速的查詢數(shù)據(jù)
  • 鎖定操作是非必須的
  • 適合大量數(shù)據(jù)的查詢
  • 插入和更新是非必要的

所以維度建模需要在數(shù)倉環(huán)境中被應(yīng)用。

三、名詞解釋

在介紹整體建模流程之前,有些名詞需要給大家詳細(xì)介紹下,這樣下面的內(nèi)容閱讀起來會更加通暢一點:

1. 關(guān)于事實

經(jīng)常也被成為度量,事實是可以體現(xiàn)業(yè)務(wù)流程中真實表現(xiàn)的數(shù)據(jù)。

例如:對于銷售業(yè)務(wù)流程,最核心的體現(xiàn)是季度銷售金額;對于招聘流程,最核心的體現(xiàn)是招聘人數(shù);對于技術(shù)團隊,最核心的體現(xiàn)是開發(fā)了多少功能。

特性:不同的事實反映出不同的業(yè)務(wù)性質(zhì);事實之間相互獨立;事實是業(yè)務(wù)量化的表示。通常情況下維度要比事實更多。

2. 關(guān)于維度

維度是經(jīng)常被大家說道的一個詞,其實維度更多的是一個視角,是從不同的角度去觀察和分析事實的一個方法。誰在那干啥?

例如:以銷售流程為例,需要分析的維度有:

  • 誰買了商品——客戶名稱
  • 在哪買了商品——售賣地點
  • 買了啥商品——商品名稱

3. 關(guān)于屬性

屬性就是維度建模中維度的特征,我們以地理位置維度為例,他的屬性就是:省份、城市、區(qū)域等等。

4. 關(guān)于事實表

維度建模中的核心表,星型結(jié)構(gòu)中的中心位置表,該表包含了以下因素:

  • 事實表
  • 維度表的主鍵(事實表的外鍵)

5. 關(guān)于維度表

包含事實的維度,通過外鍵和事實表進行關(guān)聯(lián)。

特點:維度表可以為事實表進行特征描述,維度表可以包含一個或多個層次關(guān)系。

四、建模流程

1. 描述業(yè)務(wù)過程(為啥做Why)

從實際的業(yè)務(wù)過程中提取分析維度,并且把業(yè)務(wù)過程轉(zhuǎn)化為事實。

確定所需覆蓋的實際業(yè)務(wù)流程。

根據(jù)組織的數(shù)據(jù)分析需求,可能是營銷、銷售、人力資源等組織的訴求。

業(yè)務(wù)流程的選擇還取決于該流程可被應(yīng)用的質(zhì)量尚可的數(shù)據(jù)。這是數(shù)據(jù)建模過程中最重要的一步,如果在這一步出錯,整個維度建模必將以失敗告終,所以第一步一定要謹(jǐn)慎且細(xì)致的對業(yè)務(wù)進行描繪。

要描述業(yè)務(wù)流程,可以通過語言進行描述,也可以使用基本的業(yè)務(wù)流程建模符號 (BPMN) 或統(tǒng)一建模語言 (UML)進行業(yè)務(wù)描述。

比如商城業(yè)務(wù),整個商城流程分為商家端,用戶端,平臺端,運營需求是總訂單量,訂單人數(shù),及用戶的購買情況等。

2. 聲明粒度(做到啥程度How much)

粒度可以用來確定事實表中行表示什么。

例如:一個用戶有一個身份證、一個籍貫、多個手機號、多個銀行卡,此時與用戶粒度相同的粒度屬性為身份證粒度、籍貫粒度,因為用戶和身份證、籍貫都是一一對應(yīng)的。而對于手機粒度、銀行卡粒度是比用戶更加細(xì)致的粒度,因為存在一對多的關(guān)系。

同一事實表中,必須有相同的粒度。原子粒度是最低級別的數(shù)據(jù)粒度,原子粒度能夠承受無法預(yù)期的用戶查詢。通過原子粒度進行上卷,可以滿足各類需求。

在此階段設(shè)計之前,你需要思考下幾個問題:

  • 是按月、每周、每天還是每小時存儲產(chǎn)品銷售信息?這個問題取決于高管要求的報告的性質(zhì)。
  • 上個問題中的選擇將對數(shù)據(jù)庫大小有什么影響?

3. 標(biāo)識維度(是啥在哪何時What Where When)

維度是事實表的基礎(chǔ),維度是通過不同的視角去看數(shù)據(jù),把一堆數(shù)據(jù)進行分類,從而進行細(xì)分對比。例如:時間維度中可分天、周、月、年這樣的維度。用戶也可以分新生期、成熟期、衰退期、流失期各個生命周期這樣的維度。

細(xì)化一下這個例子: 管理者希望每天了解不同地點各類產(chǎn)品的銷售額,此時維度、屬性、層次結(jié)構(gòu)可以進行如下分解:

  • 維度:產(chǎn)品、地點和時間
  • 屬性:(以產(chǎn)品為例)產(chǎn)品編號(外鍵)、名稱、類型、規(guī)格
  • 層次:(以位置為例)區(qū)域、省份、城市、區(qū)縣、街道

4. 標(biāo)識事實(解釋是啥What)

事實表示用來度量的,基本上都以數(shù)值來表示,這一步驟是用來標(biāo)識事實表中的每一行。此步驟與系統(tǒng)的業(yè)務(wù)用戶相關(guān)聯(lián),因為這是他們訪問存儲在數(shù)據(jù)倉庫中,大多數(shù)事實表行都是數(shù)值,如價格等等等。

舉個例子:管理者希望每天了解不同地點特定產(chǎn)品的銷售額。

這里的事實表示通過產(chǎn)品分類、銷售時間、銷售位置等得到的銷售額總和。

一般的維度模型講解在這里會劃上尾聲,但其實維度建模還隱藏了第五步:

5. 構(gòu)建架構(gòu)

在此步驟中,只有這一步完成其實才真正的實現(xiàn)了維度建模。模式只不過是數(shù)據(jù)庫結(jié)構(gòu)(表的排列)。有兩種流較為通用的架構(gòu):

(1)星型架構(gòu)

星型架構(gòu)很容易設(shè)計。稱為星型模式是因為構(gòu)建的形狀圖類似于星形,點從中心向外輻射。星的中心是事實表,星的點是維度表(樣圖可見本文第3部分)。

這里要特別說明以下星型模式中的事實表是第三范式,而維度表是非規(guī)范化的。

(2)雪花架構(gòu)

雪花模式是星型模式的擴展。在雪花模式中,每個維度都被規(guī)范化并連接到更多維度表。所以從結(jié)構(gòu)上來看,花花模式更為復(fù)雜一點。

小結(jié):星型表和雪花表的對比

五、建模實例

場景:小明在2021.11.11 晚上12點買了3件棉服。他用支付寶的方式進行支付,并且在2021.11.13收到了書。

拆解:由于最近天冷了(為啥Why),小明(誰 Who)2021.11.11 晚上12點(何時 When)花費3千(多少How much)在淘寶(在哪Where)買了3件棉服(啥 What)。他用支付寶(如何 How)的方式進行支付,并且在2021.11.13收到了書。

1. 描述業(yè)務(wù)過程(為啥做Why)

由于天冷,需要保暖。

2. 聲明粒度(做到啥程度How much)

花費3k買。

3. 標(biāo)識維度(是啥在哪何時What Where When)

在淘寶上于2021.11.11 晚上12點買了3件棉服。

4. 標(biāo)識事實(解釋是啥how)

用支付寶進行購買。

六、維度改變

當(dāng)維度改變時,將會發(fā)生啥?

舉個場景來說,上海的ABC商店將會從華東區(qū)域劃分為華南區(qū)域,如果管理者想看劃分前后的對比情況應(yīng)該如何看呢?

1. 改變維度的方式一

  • 用新的信息去重寫已知維度;
  • 優(yōu)點:方便實施;
  • 缺點:無法去看之前的表現(xiàn);
  • 實施之后,所有歷史的數(shù)據(jù)信息將看不到。

2. 改變維度的方式二

  • 保留所有歷史的維度信息;
  • 有點:更加方便的看出歷史的情況;
  • 缺點:實施起來復(fù)雜性較高;
  • 實施之后,更容易看到在華東區(qū)域的歷史數(shù)據(jù)。

3. 改變維度的方式三

  • 保留所有歷史的信息,并且新增一個值;
  • 有點:同時提供歷史數(shù)據(jù)和新的數(shù)據(jù)情況;
  • 缺點:歷史數(shù)據(jù)表現(xiàn)將會受限制;
  • 實施之后,變化前后的數(shù)據(jù)都將可以看到,但是查看歷史數(shù)據(jù)的情況將會受限制。

 

本文由 @業(yè)務(wù)數(shù)智化 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載

題圖來自 pexels,基于CC0協(xié)議

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發(fā)揮!