1. 程式人生 > >在SQL Server 2012 中開發 Analysis Services Multidimensional Project

在SQL Server 2012 中開發 Analysis Services Multidimensional Project



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

新建一個多維模型專案

建立資料來源

資料來源包含分析服務與源資料庫連線時的資訊。

新建資料來源

資料來源的資料必須是關係型的資料來源,並且分析服務可以從 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 維度中相同的結構