微軟BI 之SSAS 系列 - 在SQL Server 2012 中開發 Analysis Services Multidimensional Project


SQL Server 2012 中提供了開發 SSAS 項目的兩種模型,一種是新增加的 Tabular Model 表格模型,另一種就是原始的 Multidimensional Model 多維模型。

在這里演示的是 Multidimensional Model,如果要了解 Tabular Model 表格模型,請參看 - http://www.cnblogs.com/biwork/archive/2013/05/22/3093896.html

下面使用的環境是 VS2012 + SSDT 集成,可以參看 - http://www.cnblogs.com/biwork/archive/2013/05/12/BI_VS2012.html

數據庫 AdventureWorks 可以到這里下載 - http://msftdbprodsamples.codeplex.com/releases/view/55330


新建一個多維模型項目

創建數據源

數據源包含分析服務與源數據庫連接時的信息。

新建數據源

數據源的數據必須是關系型的數據源,並且分析服務可以從 SQL Server, Access, Oracle 或其它 OLE DB/ODBC 驅動的數據庫中讀取數據。

選擇 AdventureWorksDW2012

Windows 用戶名和密碼

 數據源創建完成,指向本機 BIWORK 的 AdventureWorksDW2012 數據庫

 

數據源視圖的創建

數據源視圖是物理數據庫和分析服務維度與多維數據集之間的邏輯數據模型,在創建數據源視圖的時候,需要在源數據庫中指定我們所需要的表或者視圖,這些表和視圖是我們進行維度創建和分析的基礎。

通常情況下,最好使用視圖,這樣即使源表結構有改動,也不需要重新修改數據源視圖,這樣對邏輯模型中的其它對象影響都會非常大。在本示例中,選擇的仍然是表。

選擇數據源

在這個例子中只創建了有關 Internet Sales 相關的表對象,Fact 開頭的是事實表,Dim 開頭的是維度表。

那么這個數據源視圖就包含了這么 5 張表,后面的維度設計和度量設計都是圍繞着這 5 張表。

可以在創建好的數據源視圖中看到這 5 張表的關系,很顯然這是一個雪花型 Snowflake 模型, 它也是 Star Scheme 星型模型的延伸。

創建了數據源視圖之后,根據需要可以做很多事情 -

  • 創建區域關系圖,本示例中表數量較少,如果表數量多的情況下,可以根據主題選擇相應的表邏輯性的將表與表之間的關系分開。
  • 增加主鍵以及表之間的關系,有的表的元數據不完整,沒有定義主鍵和表之間的關系,也可以在數據源視圖中修改。
  • 增加命名計算,可以根據已有列追加新的列,或者創建計算列,這個類似於 SQL Select 語句中根據已有列創建新的計算列。
  • 還可以根據這些表創建命名查詢表,比如關聯 A 表和 B 表查詢出來一個關聯表然后保存在數據源視圖對象中。

在這里不演示上述操作,只對表名做出友好的命名操作。

取一個簡單的名字

每個表都改一下,看起來更加簡潔一些。

數據源視圖設計完畢后,就可以根據這些邏輯模型來創建最基礎的維度和度量組了。

補充一點 - 在修改數據源視圖的時候要注意:不能將命名計算添加到命名查詢,也不能基於包含命名計算的表創建命名查詢。

維度的設計

創建維度的時候首先應該要熟悉源表的數據以及它們之間的邏輯關系,下面只演示創建維度的過程。

使用已存在的表,注意還有其它選項,比如可以根據需要創建時間維度表 -

可以從現有的表中創建時間維度。

可以向維度向導提供一個開始和結束日期,向導可以創建和填充關系型數據庫,並生成該表的時間維度。

可以向維度向導提供一個開始和結束日期,向導將生成只存在於分析服務數據庫中的時間維度。

選擇好剛創建的數據源是視圖表,再選擇 Date 表,這個表稍微有點特殊, 目前可以說沒有哪一個分析服務 OLAP 數據庫中不使用到時間維度的。這里 Key Column 和 Name Column 先默認吧,之后可以改的。

只選擇勾中的列,並且注意在維度設計器中,我們對應的 Date 表中列在這里叫做 Dimension Attribute, Dimension Attribute 有 Attribute Name, Enable Browing 和 Attribute Type 可供操作。

注意到 Dimension Attribute 的 Attribute Name 實際上對應的就是數據源視圖中 DimDate 表的列名,按字母開頭給自然分開了。

Enable Browsing 在維度設計瀏覽中是否出現。

Attribute Type - Dimension Attribute 的每一個 Attribute 都會有這個。在時間維度的設計過程中,我們可以通過這個屬性來指定每個屬性所代表的時間單元,分析服務將通過設定好的時間單元來進行復雜的時間計算。 除此之外,分析服務還提供了會計,貨幣轉換和地理等 Attribute Type。

時間屬性修改之后的效果

對比一下數據庫中的源數據再來理解一下這樣的設計。如果都是 Regular,那么 Date 維度中的屬性值是什么就是什么,分析服務不會把 FullDateAlternateKey, EnglishMonthName, CalendarQuarter, CalendarSemester, CalendarYear 當作用來統計和計算數據的時間對象了。比如要統計 2005年第一個季度或者第一個月 January 的數據,比如上半年或者下半年的數據,那么通過對 Attribute Type 的修改,分析服務就知道 CalendarSemester = 1 的時候是指 1- 6 月。

第一個時間維度就設計完成了,再次注意在時間維度里,之前表中的列在這里叫做 Attribute, 這些 Attribute 有其它的屬性來豐富它們各自的含義,比如像上面提到的有關時間的 Attribute Type 的設計。

這樣我們的第一個維度就算創建完成了,但是對於維度的創建和設計其實還有很多方面需要掌握 -

  • 通常情況下,應該掌握 3 種不同類型維度(標准,時間和父子維度)的創建方式。
  • 創建完維度之后,通過維度設計器增強維度,比如修改屬性層次結構,層次結構屬性的排序,創建屬性關系,設置默認成員,去除 ALL 級別等操作。

多維數據集 Cube 的實現和維度的自動創建

雖然上面只選擇了一個時間維度表,但是可以通過創建多維數據集將其它相關的維度也給同時創建出來。

在創建 Cube 的過程中,有一個很重要的對象將會出現,它就是度量值(組)。我們要做的事情就是把維度和度量值組中的數據在多維數據集中組合起來,這樣我們就可以大致通過維度來觀察不同角度下的數據。

使用已存在的表,這里的表還是從數據源視圖中選擇。

在創建 Cube 的時候,其實就是從數據源視圖中引入所有相關的事實表 Fact Table 和維度表 Dimension Table, 所以所有的事實表和維度表都必須包含在這個數據源視圖中。並且,對於每一個事實表,在這個過程中都會創建一個相應的度量值組,包含了由事實表中各個選擇出來的列所創建的度量值。

所以下面它首先要選擇的是 Measure Group Tables - 度量值組表。

Measures - 選擇度量值,只選擇需要的度量值。可以把這里的 Internet Sales 看作是視圖中的表,下面的 Measure 都是表中的列,實際上也就是這么來轉換的。

要注意的是,Cube 多維數據集中必須包含一個度量值組,而一個度量值組中必須包含一個度量值。簡單可以理解就是必須要有一個事實表,事實表中必要要有一列。

但是它們之間還是有着很大的區別,Measure Group 和 Measure 的概念只在 Cube 中存在而不是關系型數據庫中的表和列。

選擇已創建好的維度。

由於數據源視圖中,可以看到事實表和其它維度表之間存在着直接或者間接的關系 (Snowflake 雪花型模型)。因此在這里都會關聯起來,當然也可以不選擇這些維度,但通常情況下還是要選擇的。

注意到 Geography 是通過 Customer 關聯的,還有對於事實表 Internet Sales 來說,也會為它創建一個維度,這個有事實表構成的維度就叫做事實維度。

多維數據集 Cube 由 Measure Groups 度量值組和 Dimensions 維度組成。

在這里可以看到最原始的數據源視圖,創建的度量值組以及維度。

要注意的是,在多維數據集中顯示了三個維度,但是我們並沒有創建過,它們是 Order Date, Ship Date 和 Due Date,這個一會再來看。

修改維度,增加維度屬性。由於在創建 Cube 時選擇的事實表只有相關的外鍵關聯到這些維度表,因此創建完維度之后,默認情況下也就只為維度創建了這些維度屬性,比如 Customer 中的 Customer Key 和 Geography Key。 但事實上,只有這兩者是不夠的,需要繼續添加新的維度屬性,這些都是我們看數據(度量值)的“角度”。

在 VS2012 或者 SSDT 中非常方便的就可以直接拖拉過去,如果需要修改命名的話,可以修改屬性。

這是 Product 維度屬性的修改

 

再來看這三個維度 Due Date, Order Date 和 Ship Date。

實際上這里的三個維度仍然表示的是時間維度 Date, 只不過在時間維度與度量值的關聯過程中依次有三個緯度屬性與之相關聯。

而每一個 Date 無論是 Due Date, Ship Date 或是 Order Date 都應該具有相同的 Date 維度屬性 -

如果放在一起,試問又該如何區分這里的 Calendary Quarter 究竟是指 Order Date 還是 Ship Date 呢?因此就在這里將它們區分開來,它們都具有 Date 維度相同的屬性。這是用我們最簡單的思考方式來解釋 Cube 中的維度為什么要這么來操作,它們又如何存在的。

實際上,這三個維度有一個專有的名字 - Role Playing Dimension 角色扮演或者角色模仿維度。

角色模仿維度在這里就清晰的告訴了我們數據庫維度 Database Dimension 和多維數據集維度 Cube Dimension 之間的差異。

數據庫維度中我們能看到的只有 Date, Customer, Product 和 Internet Sales 這幾個維度。但是在多維數據集維度中,數據庫維度 Date 扮演了三個不同的維度角色,Role Date, Order Date 和 Ship Date。

一個多維數據集可能包含一個或者多個數據庫維度,它引用了數據庫維度中的屬性和數據,必要的時候會通過角色扮演維度來更好的維護和管理維度和度量值組之間的關系。

 

最后部署到本機來查看一下創建好的多維數據集 Cube。

部署成功后,能看到 SSAS 數據庫中的各個對象 -

  • 數據源
  • 數據源視圖
  • 多維數據集對象 Cube 與度量值組
  • 數據庫維度 - 此時數據庫維度中的 Date 在 Cube 中扮演了 Due Date, Order Date 和 Ship Date 這三個多維數據集維度,這三個多維數據集維度具有 Date 維度中相同的結構

 


更多 BI 文章請參看 BI 系列隨筆列表 (SSIS, SSRS, SSAS, MDX, SQL Server)

如果覺得這篇文章看了對您有幫助,請幫助推薦,以方便他人在 BIWORK 博客推薦欄中快速看到這些文章。


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM