BI筆記之---增量方式處理多維數據集

本文將模擬一個數據倉庫系統,其中有用戶數據,產品數據以及訂單數據。根據這些數據結構建立多維數據集,並且以增量更新的方式對其進行處理。

之所以強調增量的方式,是考慮到事實表中數據的增長,假設以後增長到幾十億,全量處理就變得很不現實,所以方案中着重演示以增量方式處理多維數據集的方案。

增量處理多維數據集的關鍵是要將事實數據分爲兩部分處理,一個是增量事實表,一個是歷史事實表,多維數據集第一次處理歷史事實表中的數據,以後每次週期性的處理都是處理增量表中的數據。

本文中提及的SQLServer和Visual Studio都是2008版本,2005版本同樣也適用。

數據假設:一張用戶表,一張產品表,一張訂單表,訂單裏記錄的是誰買了什麼。多維數據集統計的需求就是根據訂單統計誰買過什麼。

首先,建立數據倉庫,在數據引擎下新建BIDemo庫。

clip_image002

接下來建立用戶表,結構如下:

clip_image004

此外還有產品表:

clip_image006

以及歷史訂單表和建立增量訂單表,它們的結構是一樣的:

clip_image008

爲了測試方便,我們在用戶表中加入一些測試數據:

clip_image010

然後在產品表中加入一些測試數據

clip_image012

至於事實表,手動加入測試數據就不現實了,所以這裏寫了一個程序利用隨機數來灌測試數據:

clip_image014

這個程序的代碼可以在本文中找到。生成後的數據基本如下所示:

clip_image016

到此,測試的數據結構以及數據就已經準備好了,相當於有了一個小型的數據倉庫。

接下來在Visual Studio中建立BI解決方案,方案下分爲一個SSIS項目和一個SSAS項目。

在SSAS項目下建立數據源和數據源視圖,這裏需要注意的是,事實表用歷史表,而不是增量表,儘管其還沒有數據。

首先建立數據源,連接剛纔建立的數據庫,並且在數據源視圖裏定義好關係,如下圖:

clip_image018

然後,根據此數據源視圖建立多維數據集,需要注意的是,度量選擇歷史表,維度選擇用戶和產品兩個表。

最後,部署多維數據集。這裏只部署就可以了,不需要處理,處理任務將在以後的SSIS包中處理。

下面來看SSIS項目。在SSIS包裏建立四個任務模塊,類型分別如下:

clip_image020

前兩個多維數據集處理模塊是用來處理多維數據集的,數據流負責把增量事實表的數據導到歷史事實表中,最後執行一個SQL任務把增量表中的數據刪除。

兩個多維數據集模塊,前一個是專門處理維度,第二個是處理cube。這裏之所以要把多維數據集維度處理單獨拿出來放在前面,是因爲在筆者經驗中,對多維數據集的處理雖然是全部處理,但是新增維度的數據不會被聚合到其中,所以需要單獨拿出來放在前面處理。

(題外話:對於這個地方筆者一直也不是很理解,按理說既然是全部處理那麼怎麼連維度都不處理呢,還需要單拿出來)

以下是設置維度處理模塊,在界面中選擇維度即可。

clip_image022

然後是cube處理模塊,如下圖。

clip_image024

然後指定增量更新,並且配置增量更新的數據表,這裏指定增量表。

clip_image026

多維數據集處理完成之後就可以把增量表的數據放到歷史表中了,以保證第二天加入的數據都是增量數據。

需要注意的是,在實際的運行當中,一定要保證BI的處理過程時業務系統沒有發生數據,否則就會造成數據遺漏而導致不平。所以,BI的處理一般都是在凌晨。

然後是第三步的數據流模塊,此部分的主要任務是將增量表的數據轉移到歷史表中。

clip_image028

最後的一個SQL任務是一個Delete或者Truncate table任務,把增量表裏的數據清空。

最終的任務流程如下圖:

clip_image030

執行包,全部成功之後應該如下圖所示:

clip_image032

執行成功後,打開歷史表,可以發現數據已經在裏面了,而且增量表中的數據已經不存在了。

查詢多維數據集,可以看到新的數據被聚合到其中。

clip_image034

通過以上透視表可以清晰的看到誰買了什麼樣的產品。

再次運行Rubbish往增量表裏灌幾條數據,然後重新運行此SSIS包,可以發現新增的數據已經被聚合到多維數據集中了,注意處理的方式是增量的。

本文提及的數據結構模型都很簡單,主要介紹的是多維數據集處理的流程以及方法,重點闡述增量部分的方案,以及需要注意的問題。希望有知道更好方法的兄弟一起交流探討。

 

本文提及的相關數據庫,項目文件以及程序下載

 

FAQ:

1.增量數據是怎麼來的?

筆者個人認爲這個需要跟業務系統配合來做,比如加入觸發器等。或者通過時間戳,到業務系統中能提取到。

2.如果有更新和刪除怎麼辦?

通常是在本文提到的方案之上,再加一個度量值位,標識爲1,代表新增。對於刪除的記錄,實際上是加入了一個同樣的記錄,並且表示爲爲-1。更新則是加入了兩條記錄,一條記錄爲-1跟刪除差不多,一條就爲1代表修改後的記錄,三個一樣的記錄靠時間戳來標記哪一個是修改後的記錄。主要就是以這個標識位作爲度量進行統計。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章