使用分析服務(wù)多維模式建立簡(jiǎn)單的分析模型
此篇使用的版本是SQL Server 2012,對(duì)應(yīng)的Visual Studio Shell是2010,名稱也改為SQL Data Tools。
首先,打開SQL Data Tools,點(diǎn)擊File->New->Project…
接下來會(huì)打開新建項(xiàng)目窗口。這個(gè)界面可能對(duì)于很多c#開發(fā)人員再數(shù)據(jù)不過,這里可以告訴你,SQL Server BI下很多項(xiàng)目都是在這下面建立的,比如,數(shù)據(jù)集成項(xiàng)目,它主要負(fù)責(zé)BI項(xiàng)目中的ETL過程(數(shù)據(jù)的清洗轉(zhuǎn)換和加載),還有報(bào)表服務(wù)項(xiàng)目,很多BI項(xiàng)目的報(bào)表都是通過這個(gè)項(xiàng)目模版實(shí)現(xiàn)的。自從微軟.net戰(zhàn)略之后,很多開發(fā)基本都是在Visual Studio進(jìn)行的。這里就是一個(gè)具體的體現(xiàn)。
在左面項(xiàng)目模版中選擇Analysis Services,然后選擇Analysis Services Multidimensional and Data Mining Project。
在這里我們可以看到在最新的版本中還提供了另外一種分析服務(wù)項(xiàng)目模版,就是Analysis Services Tabular Project,關(guān)于這個(gè)新特性,可以參考我的另外一篇隨筆:
使用SQL Server Analysis Services Tabular Model建立分析模型
Tabular Model的最終產(chǎn)出結(jié)果跟多維數(shù)據(jù)集差不多,只不過它更面向于業(yè)務(wù)人員和開發(fā)人員之間的用戶,而本文提及的多維數(shù)據(jù)集是定位在開發(fā)人員之上的。
另外,留意一下項(xiàng)目類型的Data Mining,意思就是在這個(gè)項(xiàng)目下,也可以建立數(shù)據(jù)挖掘項(xiàng)目,關(guān)于如何玩轉(zhuǎn)這個(gè)功能,請(qǐng)參考我的另外一篇隨筆:
使用SQL Server Analysis Services數(shù)據(jù)挖掘的關(guān)聯(lián)規(guī)則實(shí)現(xiàn)商品推薦功能
接下來,我們看一下項(xiàng)目的結(jié)構(gòu):
可以看到項(xiàng)目包含幾個(gè)文件夾。
第一個(gè)是數(shù)據(jù)源,這里定義SSAS數(shù)據(jù)庫要連接的是哪個(gè)數(shù)據(jù)源,通常來說就是數(shù)據(jù)倉庫所在的位置。
第二個(gè)是數(shù)據(jù)源視圖,里面定義了多維數(shù)據(jù)集需要的各種表,事實(shí)表和維度表。
Cubes里面定義數(shù)據(jù)立方體,也就是我們所說的多維數(shù)據(jù)集。
Dimensions文件夾里定義了維度,這里可以理解為維度的一個(gè)抽象,比如時(shí)間維度,在具體的一個(gè)立方體里可能對(duì)應(yīng)的就是比如"開始時(shí)間"或者"結(jié)束時(shí)間"這樣的泛化維度。
挖掘結(jié)構(gòu),里面是跟數(shù)據(jù)挖掘相關(guān)的。
角色,里面定義多維數(shù)據(jù)庫的安全信息。
了解完以上項(xiàng)目里的文件夾后,下面開始一步一步建立一個(gè)簡(jiǎn)單的多維數(shù)據(jù)集。
首先,右鍵Data Sources文件夾,點(diǎn)擊New Data Source…。
接下來出現(xiàn)數(shù)據(jù)源向?qū)Ы缑妗?/p>
點(diǎn)擊界面中的New新建一個(gè)連接。留意左面的Data Connections界面,里面會(huì)列出你以前用過的數(shù)據(jù)連接。
服務(wù)器名稱選擇本地,敲一個(gè)點(diǎn)就可以,然后數(shù)據(jù)庫選擇AdventureWorksDW2012。
AdventureWorks是微軟提供的數(shù)據(jù)庫示例,里面包含了業(yè)務(wù)數(shù)據(jù)庫(上圖中不帶DW字樣的)以及數(shù)據(jù)倉庫示例(剛才選擇的)。此外還包含很多跟SQLServer的其它示例,關(guān)于如何獲取并且部署這些項(xiàng)目,可以參考我的這篇隨筆:
微軟SQLServer官方示例項(xiàng)目部署-數(shù)據(jù)引擎和分析服務(wù)部分
設(shè)置好連接屬性后,點(diǎn)擊下一步。
這里要面設(shè)置模擬信息。這里手動(dòng)指定用戶,使用你登陸機(jī)器的管理員賬號(hào)就可以。當(dāng)然實(shí)際生產(chǎn)環(huán)境中不建議這么做。
指定好模擬信息后,點(diǎn)擊下一步。
給數(shù)據(jù)源起一個(gè)名字,點(diǎn)擊完成。接下來就可以看到在數(shù)據(jù)源文件夾下生成了一個(gè)ds后綴的數(shù)據(jù)源文件。
下面,右鍵數(shù)據(jù)源視圖文件夾,點(diǎn)擊New Data Source View…。
在數(shù)據(jù)源視圖中距中,在左面可以看到剛才建立的數(shù)據(jù)源連接,選中它,點(diǎn)擊下一步。
這一步會(huì)列出數(shù)據(jù)源連接下的表和視圖。
這里我們建立一個(gè)簡(jiǎn)單的多維數(shù)據(jù)集,從左面可用對(duì)象列表里依次選擇FactInternetSales,DimCustomer,DimDate,DimGeography,DimProduct,DimProductCategory和DimProductSbcategory到右面的列表中,然后點(diǎn)擊下一步。
給數(shù)據(jù)源視圖起一個(gè)名字,然后點(diǎn)擊完成。
然后在數(shù)據(jù)源視圖中,可以看到剛剛選中的事實(shí)表和維度表。
可以看到在微軟提供的示例中,已經(jīng)定義好了表間關(guān)系。在實(shí)際的項(xiàng)目中,我也這些關(guān)系要定義好,盡管很多項(xiàng)目都不太情愿這么做,并且確實(shí)也會(huì)帶來一些麻煩,但這絕對(duì)是一個(gè)好的習(xí)慣和規(guī)范。
此外,在這個(gè)界面中也可以定義命名查詢,或者在表里添加一些計(jì)算列。
確認(rèn)完畢數(shù)據(jù)源視圖之后,開始創(chuàng)建多維數(shù)據(jù)集。右鍵Cubes文件夾,選擇New Cube…。
選擇第一項(xiàng)使用已經(jīng)存在的表。
多維數(shù)據(jù)集在SQL Server 2005之后,支持正向和逆向的方式創(chuàng)建多維數(shù)據(jù)集。通常來說是現(xiàn)有數(shù)據(jù)倉庫然后再有多維數(shù)據(jù)集,但是通過這個(gè)特性,可以先建立多維數(shù)據(jù)集,然后再根據(jù)多維數(shù)據(jù)集的結(jié)構(gòu)反向生成數(shù)據(jù)倉庫里的表。通常來說后面的方法用的比較少。
點(diǎn)擊下一步。
選擇事實(shí)表FactInternetSales,點(diǎn)擊下一步。系統(tǒng)往往不能正確的事別你得事實(shí)表和維度表,所以每次到這里都建議檢查一下勾選的事實(shí)表是否正確。
點(diǎn)擊下一步。
指定多維數(shù)據(jù)集里的度量值,這些都是從事實(shí)表中來,所以像Promotion Key等這些鍵值字段拿來統(tǒng)計(jì)是沒有意義的,取消掉。還有需要留意系統(tǒng)會(huì)在最下面加入一個(gè)Count字段,在項(xiàng)目中可以根據(jù)Shijiazhuang情況來考慮是否要加入這個(gè)字段。
點(diǎn)擊下一步,開始確認(rèn)多維數(shù)據(jù)集的維度。
這里暫時(shí)不需要更改任何內(nèi)容,因?yàn)闀?huì)在接下來的步驟中進(jìn)行維度的詳細(xì)設(shè)計(jì)。這里直接點(diǎn)擊下一步。
最后,給多維數(shù)據(jù)集取一個(gè)名字,并且在預(yù)覽區(qū)域中檢查一下多維數(shù)據(jù)集的結(jié)構(gòu),然后點(diǎn)擊完成結(jié)束向?qū)А?/p>
然后就系統(tǒng)會(huì)自動(dòng)打開多維數(shù)據(jù)集的設(shè)置界面。這里先給維度重新命名,去掉前面的Dim前綴。
#p#
接下來設(shè)置維度屬性,首先雙擊Date.Dim,進(jìn)入到維度設(shè)置界面。
在界面左側(cè)可以看到維度已經(jīng)擁有了哪些屬性,右面的數(shù)據(jù)源視圖中可以看到維度表中都支持哪些字段。
這里可以拖拽我們需要的字段到維度屬性中,方法就是依次拖拽CalendarYear,MonthNumberOfYear和DayNumberOfMonth到維度屬性列表中。再將其重命名為Date, Month和Year。
設(shè)置成友好名稱,首先是為了友好并且維護(hù)方便,其次比較關(guān)鍵的是可以讓后期的MDX寫起來更舒服些。
接下來,修改Month的OrderBy屬性為Key。
指定好排序依據(jù)什么排序。如果不設(shè)置,就可能出現(xiàn)如下的錯(cuò)誤情況:
指定根據(jù)Key排序后,月份的排列順序就正確了。
此外還需要設(shè)置Day的OrderBy屬性同樣為Key。
接下來建立維度層次。建立維度層次后,在前段分析工具就可以很方便的使用諸如年-月-日這樣的層次下鉆關(guān)系。
創(chuàng)建的方法是,首先拖拽Year到中間的Hierarchies中,會(huì)自動(dòng)生成一個(gè)層次結(jié)構(gòu),然后再將Month和Day依次拖拽到新建的層次中。
時(shí)間維度創(chuàng)建完畢,接下來據(jù)創(chuàng)建產(chǎn)品維度。從數(shù)據(jù)源視圖中拖拽到Product, SubCategory和Category到維度屬性列表,然后再創(chuàng)建一個(gè)名為ProductHierarchy的層次結(jié)構(gòu)。方法同時(shí)間維度的創(chuàng)建。
簡(jiǎn)單的多維數(shù)據(jù)集設(shè)置完畢后,接下來需要做的就是部署到分析服務(wù)實(shí)例上。
不過在這之前,需要確認(rèn)一下部署的設(shè)置,在解決方案管理器中右鍵選擇Properties。
在配置界面中,左邊選擇Deployment,然后在右邊的Server和Database里設(shè)置SSAS數(shù)據(jù)庫要部署到哪一個(gè)服務(wù)器以及部署之后數(shù)據(jù)庫的名稱叫什么。
這里我們選擇部署到本地并且使用默認(rèn)數(shù)據(jù)庫名稱。
設(shè)置完畢后點(diǎn)擊確定關(guān)閉。
接下來同樣右鍵項(xiàng)目,選擇Process。
處理之前系統(tǒng)會(huì)檢測(cè)本地的版本跟服務(wù)器的版本,如果本地的版本比服務(wù)器上的新,那么就會(huì)出現(xiàn)過期提示,選擇是,替換服務(wù)器的版本。
#p#
部署完畢后,會(huì)出現(xiàn)處理界面。
對(duì)于上面的這個(gè)界面,你可能會(huì)問,為什么沒有Change Settings…按鈕。這個(gè)按鈕,只要你把窗體的高度再讓它高一些就出來了。點(diǎn)擊這個(gè)按鈕后,會(huì)出現(xiàn)設(shè)置更改金額面。
這里最常用的就是Dimension key errors。在實(shí)際的數(shù)據(jù)倉庫操作中,很難避免會(huì)出現(xiàn)維度對(duì)應(yīng)不上或者重復(fù)鍵或者缺失等情況,為了忽略這些錯(cuò)誤,就可以進(jìn)到這個(gè)界面進(jìn)行相應(yīng)的維度處理錯(cuò)誤設(shè)置。這里先忽略設(shè)置直接點(diǎn)Cancel回到處理界面然后點(diǎn)Run開始處理。
在處理進(jìn)度界面中,可以看到系統(tǒng)正在處理哪部分內(nèi)容,假如處理的過程中發(fā)生了錯(cuò)誤,也可以在這個(gè)界面中詳細(xì)看到是哪里出的錯(cuò)。處理完畢后,點(diǎn)擊Close關(guān)閉。
關(guān)于SSAS數(shù)據(jù)庫的部署方法也很多,詳細(xì)的內(nèi)容可以參考我先前的一篇隨筆:
在Solution Explorer中雙擊剛才建立的多維數(shù)據(jù)集,然后在多維數(shù)據(jù)集設(shè)置界面中選擇Browser選項(xiàng)卡。
通過這個(gè)界面可以簡(jiǎn)單的瀏覽一下剛才在多維數(shù)據(jù)集里聚合的數(shù)據(jù),比如,拖拽一個(gè)度量到中間的空白區(qū)域中,然后再拖拽幾個(gè)維度,就可以對(duì)任意一個(gè)度量進(jìn)行維度分解。
此外,在最新的2012版本的瀏覽界面中,加入了一個(gè)小按鈕,就是在Excel中查看。
點(diǎn)擊之后,會(huì)自動(dòng)打開Excel,在Excel文檔中會(huì)自動(dòng)建立好了到這個(gè)多維數(shù)據(jù)集的連接,省去了先前在Excel中還要點(diǎn)擊好多步驟的麻煩。
當(dāng)然,在Excel連接多維數(shù)據(jù)集并且對(duì)其進(jìn)行分析只是多維數(shù)據(jù)集應(yīng)用其中的一個(gè)方面,關(guān)于它還有一個(gè)概念就是MDX,它就如同SQL對(duì)數(shù)據(jù)庫一樣,MDX主要就是查詢多維數(shù)據(jù)庫用的,它的結(jié)構(gòu)也同樣是SELECT FROM WHERE這樣的結(jié)構(gòu)。關(guān)于這方面的應(yīng)用開發(fā),可以參考我早先的兩篇隨筆:
在Silverlight下用Visifire顯示多維數(shù)據(jù)集中的數(shù)據(jù)
在Silverlight下用Visifire顯示多維數(shù)據(jù)集中的數(shù)據(jù)(二)
此外,在處理多維數(shù)據(jù)集的過程中,可以選擇增量的方式進(jìn)行處理,詳細(xì)的方法可以參考我的這篇隨筆:
以及,關(guān)于在多維數(shù)據(jù)集的處理上我的幾點(diǎn)個(gè)人建議:
BI筆記之---合理處理SSAS數(shù)據(jù)庫的幾點(diǎn)建議
至此,如何建立一個(gè)簡(jiǎn)單的多維數(shù)據(jù)集就介紹到這里。在實(shí)際項(xiàng)目中建立一個(gè)多維數(shù)據(jù)集還需要做很多的細(xì)化工作,這里只是簡(jiǎn)單的對(duì)其中關(guān)鍵幾個(gè)過程進(jìn)行介紹和演示。如果想了解關(guān)于多維數(shù)據(jù)集的更多功能,可以參考此篇中提到的微軟提供的Adventure Works示例,雖然里面都是示例數(shù)據(jù),但很多表中都很值得我們參考,個(gè)人建議在實(shí)際項(xiàng)目中開發(fā)多維數(shù)據(jù)集的時(shí)候,對(duì)于很多細(xì)節(jié)問題不知道該如何做的時(shí)候,都回過來參考下微軟的這個(gè)示例。
原文鏈接:http://www.cnblogs.com/aspnetx/archive/2013/03/16/2963965.html