使用SQL Server Analysis Services Tabular Model建立分析模型
微軟在最新版本的SQL Server中加入了Tabular Model,目的在于降低數(shù)據(jù)分析的門(mén)檻,使各個(gè)業(yè)務(wù)部門(mén)的人員通過(guò)簡(jiǎn)單的IT培訓(xùn),制作出符合自己需要的分析模型。
由于其降低了操作門(mén)檻,所以各個(gè)部門(mén)的業(yè)務(wù)人員可以不用等IT部門(mén)的長(zhǎng)時(shí)間響應(yīng)就可以制作出簡(jiǎn)單的分析模型。
本文根據(jù)微軟提供的官方示例以及教程,簡(jiǎn)單介紹Tabular Model的建立過(guò)程,為了簡(jiǎn)便省略了官方教程中部分內(nèi)容,并加入了自己的理解和評(píng)論,這些內(nèi)容只代表本人(哥本哈士奇,代號(hào)aspnetx,英文名Wade)的觀(guān)點(diǎn),不代表微軟公司以及本人所在的公司的觀(guān)點(diǎn)。
?
?
一些跟文章不相關(guān)的內(nèi)容:
年前年后一忙,體重雖然沒(méi)漲,但人真的變了憔悴好多,最近也剛剛把書(shū)本拿起來(lái)看。此篇分兩個(gè)時(shí)間點(diǎn)編寫(xiě),中間隔了一周多。作為新東西,接觸起來(lái)好困難,畢竟微軟設(shè)計(jì)它的定位就不一樣,不過(guò)還是硬著頭皮看了下來(lái),也算是跟先前一個(gè)朋友的約定有個(gè)交代。
下面進(jìn)入正文。
?
?
在進(jìn)行實(shí)例的操作之,前需要檢查SSAS的Tabular Model是否有被安裝。需要注意的是,跟SQL Server 2012之前的版本不同,這個(gè)實(shí)例是單獨(dú)的一個(gè)分析服務(wù)實(shí)例,需要單獨(dú)安裝。
如圖,在SQL Server的分析服務(wù)安裝過(guò)程中,會(huì)多出來(lái)這樣一個(gè)分析服務(wù)類(lèi)型的選擇界面,選擇第二個(gè)Tabular Mode就可以。如果你的機(jī)器中已經(jīng)安裝過(guò)默認(rèn)的分析服務(wù)實(shí)例,那么這個(gè)服務(wù)只能以新實(shí)例的方式存在。
安裝完成之后,就可以在服務(wù)列表中看到被安裝的服務(wù)。
比如圖中,我有兩個(gè)分析服務(wù)的實(shí)例,一個(gè)是默認(rèn)的MSSQLSERVER,運(yùn)行多維和數(shù)據(jù)挖掘模式,一個(gè)MSBI實(shí)例,運(yùn)行Tabular Mode模式。兩個(gè)模式是不能存在于同一個(gè)分析服務(wù)實(shí)例當(dāng)中的,只能放到不同的實(shí)例當(dāng)中去。
?
確認(rèn)好實(shí)例已經(jīng)被安裝之后,打開(kāi)SQL Server Data Tools。跟前幾個(gè)版本一樣,這個(gè)工具實(shí)際上還是Visual Studio 2010的一個(gè)shell。但是跟以前的版本不同,這個(gè)版本不再以VS命名了,而是直接Data Tools來(lái)命名。而且如果你在用Windows 8,那么在小塊塊中找到SSDT確實(shí)很費(fèi)勁,比較好的方法是點(diǎn)下開(kāi)始按鈕出現(xiàn)Metro界面后直接在鍵盤(pán)上敲data,在過(guò)濾出來(lái)的應(yīng)用程序列表中,通常第一個(gè)就是。
?
打開(kāi)SQLServer Data Tools之后,選擇File->New Project新建SSAS Tabular Model項(xiàng)目。
在VS Shell下可以看到新建項(xiàng)目下除了以往的SSAS項(xiàng)目之外又多了一個(gè)Analysis Services Tabular Project,就是這個(gè)。
然后會(huì)彈出一個(gè)窗體讓你選擇一個(gè)分析服務(wù)實(shí)例,這里要選擇安裝了Tabular Model的分析服務(wù)實(shí)例。Compatibility Level根據(jù)已經(jīng)部署好的實(shí)例版本選擇就可以。
,
如果Compatibility Level和服務(wù)器的版本不匹配,會(huì)出現(xiàn)錯(cuò)誤提示:
確認(rèn)好之后,會(huì)看到解決方案管理器中的項(xiàng)目結(jié)構(gòu)。
這個(gè)結(jié)構(gòu)真的要比傳統(tǒng)的分析服務(wù)簡(jiǎn)單好多,只有一個(gè)bim文件,不想傳統(tǒng)的多維模式一樣,會(huì)單獨(dú)把數(shù)據(jù)遠(yuǎn)視圖,CUBE,維度等都單獨(dú)區(qū)分開(kāi)。也許IT開(kāi)發(fā)人員會(huì)覺(jué)得這樣就一個(gè)bim文件很別扭,但這個(gè)工具終究是定位給業(yè)務(wù)人員使用的,畢竟要遵從業(yè)務(wù)人員使用Excel和Access的大多數(shù)習(xí)慣。
雙擊打開(kāi)項(xiàng)目中自動(dòng)建立好的Model.bim文件,會(huì)看到VS Shell中的菜單中多出一個(gè)Model項(xiàng),點(diǎn)擊它,選擇Import From Data Source…
然后會(huì)看到項(xiàng)目支持的數(shù)據(jù)源類(lèi)型:
這里需要留意的是,根據(jù)Tabular Mode模式的不同,所支持的數(shù)據(jù)源類(lèi)型也會(huì)不同。在In Memory模式下,相對(duì)支持的數(shù)據(jù)源要多一些。而在Direct Query中,只支持微軟自家的數(shù)據(jù)源。
這里選擇默認(rèn)的Microsoft SQL Server,然后下一步。
這里選擇微軟官方的Data Warehouse for Adventure Works數(shù)據(jù)庫(kù)。這些示例的數(shù)據(jù)庫(kù)的下載和安裝方法請(qǐng)參考我先前關(guān)于如何獲取和安裝微軟SQL Server官方示例庫(kù)的文章,里面有詳細(xì)的介紹,你可以通過(guò)在本文下面的文章引用列表中找到。
然后會(huì)看到模擬信息對(duì)話(huà)框,由于這里是練習(xí),為了實(shí)驗(yàn)順利進(jìn)行,所以敲一個(gè)本地的管理員身份賬號(hào)進(jìn)去就可以了。當(dāng)然實(shí)際的生產(chǎn)環(huán)境中建議為其配置單獨(dú)的賬戶(hù)來(lái)維護(hù)數(shù)據(jù)源的權(quán)限訪(fǎng)問(wèn)信息。
輸入好之后點(diǎn)下一步。
這里會(huì)讓你指定如何導(dǎo)入數(shù)據(jù),是通過(guò)選擇表或者視圖的方式還是通過(guò)查詢(xún)的方式。這里默認(rèn)選擇第一個(gè),點(diǎn)下一步。
之后會(huì)列出剛才指定數(shù)據(jù)庫(kù)下的所有表,這里我們只選擇其中的幾張表,并且為它們重新定義一個(gè)友好一點(diǎn)的名稱(chēng)。
| Source name | Friendly Name |
| DimCustomer | Customer |
| DimDate | Date |
| DimGeography | Geography |
| DimProduct | Product |
| DimProductCategory | Product Category |
| DimProductSubcategory | Product Subcategory |
| FactInternetSales | Internet Sales |
?
選擇好需要用哪些表之后,因?yàn)橐粋€(gè)表里不一定所有的字段都是分析時(shí)要用到的,所以還要再對(duì)表里的字段進(jìn)行過(guò)濾。
首先過(guò)濾Customer表,選中這張表后,點(diǎn)擊Preview & Filter。
這里通過(guò)反勾選列上面的CheckBox過(guò)濾掉不需要的字段。在Customer中需要過(guò)濾掉的字段(注:是反選下列各表中提及的字段,以達(dá)到把相應(yīng)列從表模型中剔除出去的目的):
| Customer |
| SpanishEducation |
| FrenchEducation |
| SpanishOccupation |
| FrenchOccupation |
?
過(guò)濾完成后,可以看到已經(jīng)被過(guò)濾的表已經(jīng)打好了標(biāo)記:
然后,再按照如下表中的定義,把相應(yīng)的字段過(guò)濾掉。
| Date |
| DateKey |
| SpanishDayNameOfWeek |
| FrenchDayNameOfWeek |
| SpanishMonthName |
| FrenchMonthName |
| DateTimeAlternateKey |
?
| Geography |
| SpanishCountryRegionName |
| FrenchCountryRegionName |
| IpAddressLocator |
?
| Product |
| SpanishProductName |
| FrenchProductName |
| FrenchDescription |
| ChineseDescription |
| ArabicDescription |
| HebrewDescription |
| ThaiDescription |
| GermanDescription |
| JapaneseDescription |
?
| Product Category |
| SpanishProductCategoryName |
| FrenchProductCategoryName |
?
| Product Subcategory |
| SpanishProductSubcategoryName |
| FrenchProductSubcategoryName |
?
| Internet Sales |
| OrderDateKey |
| DueDateKey |
| ShipDateKey |
?
過(guò)濾完畢后,點(diǎn)擊完成,結(jié)束數(shù)據(jù)的導(dǎo)入設(shè)置,之后開(kāi)始導(dǎo)入數(shù)據(jù)。
導(dǎo)入完成后點(diǎn)擊Close,然后在VS Shell中看到被導(dǎo)入的數(shù)據(jù)。
?
然后,標(biāo)識(shí)時(shí)間表。選擇導(dǎo)入的Date表,選擇菜單欄的Table項(xiàng),Date下面的Mark As Date Table。
只有當(dāng)一個(gè)時(shí)間維度的表被這樣標(biāo)識(shí)過(guò)之后,一些基于時(shí)間的智能函數(shù)才會(huì)起作用。
?
接下來(lái)定義表之間的關(guān)系。
選擇菜單欄下的Model->Model View->Diagram View。
這里可以看到在Data Warehouse中定義的關(guān)系已經(jīng)被自動(dòng)導(dǎo)入了進(jìn)來(lái)。這里只需要確認(rèn)下就可以。
很多實(shí)際的項(xiàng)目當(dāng)中,開(kāi)發(fā)人員往往不愿意使用外鍵來(lái)關(guān)系表里的數(shù)據(jù),而是在傳統(tǒng)的多維模型項(xiàng)目中,靠維度用法來(lái)指定關(guān)系。如果是這種情況那么在這里,表間的關(guān)系是一定要指定的,否則系統(tǒng)將無(wú)法根據(jù)這些關(guān)系來(lái)"算"數(shù)據(jù)。
然后需要手動(dòng)設(shè)置Internet Sales和Date之間的關(guān)系。在表Internet Sales中,Order Date, Due Date和Ship Date跟Date表中的FullDateAlternateKey關(guān)聯(lián)。設(shè)置的方法跟以往的工具一樣,比如,拖拽表Internet Sales的字段Order Date到表Date中FullDateAlternateKey字段就可以。
?
關(guān)系創(chuàng)建好之后,再繼續(xù)計(jì)算列的添加。計(jì)算列也可以叫派生列,也就是一個(gè)新的列,這個(gè)列的值是由其它數(shù)據(jù)計(jì)算而來(lái)的。
首先,切換回表格模式,選擇Model->Model View->Data View。
選擇Date表,可以看到表的最右邊有一個(gè)Add Column。
選中下面任意一行,然后在fx里輸入公式:
=RIGHT(" " & FORMAT([MonthNumberOfYear],"#0"), 2) & " - " & [EnglishMonthName]
值得一提的是,公式編輯區(qū)的智能感知功能很贊。還有,這里不是MDX表達(dá)式,而是DAX,跟Excel的公式很像。
公式輸入完成后,按回車(chē),可以看到這一列右下角的更新進(jìn)度條。
更新完畢后,可以看到根據(jù)公式計(jì)算好的數(shù)據(jù),最后為其重新命名,右鍵新加的這一列,選擇Rename Column。
然后再為Product表創(chuàng)建度量。(此步不建議忽略,后面創(chuàng)建層次的時(shí)候要用到)
新列名:Product Subcategory Name
公式:=RELATED('Product Subcategory'[EnglishProductSubcategoryName])
新列名:Product Name
公式:=RELATED('Product Category'[EnglishProductCategoryName])
?
?
然后,為模型添加度量。
如上圖,在每個(gè)表界面中,分為上下兩個(gè)部分,上部分為導(dǎo)入的表,下部分為模型中包含的度量。
如果看不到下面的度量列表,可以點(diǎn)擊菜單中的Table->Show Measure Grid。
標(biāo)注:如果你熟悉以前的多維模式,那么你可以理解為上面是數(shù)據(jù)源視圖,下面為Cube設(shè)計(jì)視圖。
在Tabular Mode模式添加度量的方法是單擊度量視圖左上角。然后在公式區(qū)域輸入公式:
=COUNTROWS( DATESQTD( 'Date'[FullDateAlternateKey]))
待度量更新后,可以看到系統(tǒng)自動(dòng)為這個(gè)度量起了個(gè)名字:
然后將這個(gè)度量重新命名,方法是在公式區(qū)域直接選中Measure 1然后將其修改成想要的名字即可。這里將其修改成:
Days Current Quarter to Date
也可以在公式區(qū)域中輸入完整的格式,也就是度量值名稱(chēng)+公式的格式,比如再建立一個(gè)度量值,公式區(qū)域中直接輸入:
Days in Current Quarter:=COUNTROWS( DATESBETWEEN( 'Date'[FullDateAlternateKey], STARTOFQUARTER( LASTDATE('Date'[FullDateAlternateKey])), ENDOFQUARTER('Date'[FullDateAlternateKey])))
可以看到名稱(chēng)為Days in Current Quarter的度量已經(jīng)被建立。
?
最后,在事實(shí)表Internet Sales表中添加度量。相對(duì)前面的方法直接敲公式,這里的方法相對(duì)更簡(jiǎn)單一些。
切換到Internet Sales表,選中列SalesOrderNumber,然后單擊工具欄中的公式圖標(biāo)。
然后就可以看到一個(gè)以Distinct Count匯總方式計(jì)算的度量。
至此,一個(gè)基于事實(shí)表的度量值列添加完成。
?
接下來(lái)繼續(xù)添加維度層次關(guān)系。這里創(chuàng)建一個(gè)產(chǎn)品分類(lèi)的層次結(jié)構(gòu),其中根據(jù)數(shù)據(jù)包含產(chǎn)品的一級(jí)分類(lèi)和二級(jí)分類(lèi)。
切換到Diagram模式,右鍵Product表,點(diǎn)擊Create Hierarchy。
可以看到在表的下面一個(gè)層次關(guān)系已經(jīng)被建立。
右鍵單擊新建的層次,選擇Rename將其重命名為Category。
在表中找到Product Category Name和Product Subcategory Name兩列,依次拖拽到層次Category下。(注,這兩列是先前在Product表里創(chuàng)建的)
然后,將Category下的兩個(gè)層次分別命名成Category和SubCategory。
至此,Product的層次創(chuàng)建完成。
再演示下給Date表加一個(gè)時(shí)間層次。這個(gè)層次將包含從年到月再到天的時(shí)間導(dǎo)航。(根據(jù)需要你也可以加入半年合季度等層次)
首先還是根據(jù)前面的方法一樣,右鍵Date表選擇Create Hierarchy,創(chuàng)建好一個(gè)層次后再將其重命名為Calendar,然后將表中的CalendarYear,MonthNumberOfYear和DayNumberOfMonth一次拖拽到層次下。
然后再將這三個(gè)層次分別命名為Year, Month和Day。
這樣,一個(gè)Calendar層次結(jié)構(gòu)創(chuàng)建完成,此外,還可以根據(jù)這個(gè)表創(chuàng)建財(cái)務(wù)日期層次等多個(gè)層次。具體方法參考Calendar的創(chuàng)建即可。
?
?
到這里,這個(gè)Tabular Mode的分析模型創(chuàng)建好了,可以在Excel里查看下這個(gè)分析模型。
方法是在工具欄中點(diǎn)擊Analyze in Excel。
然后彈出對(duì)話(huà)框讓你指定用哪個(gè)用戶(hù)來(lái)瀏覽數(shù)據(jù)。
根據(jù)本篇的內(nèi)容這里直接選擇OK就可以。
每次出現(xiàn)這個(gè)界面可能很煩,但在實(shí)際開(kāi)發(fā)中它還是很方便的,因?yàn)槲覀兣渲煤脵?quán)限后,通過(guò)這里可以很好的去驗(yàn)證下配置的權(quán)限是否生效。
點(diǎn)擊OK后,熟悉的Excel界面被打開(kāi)。
可以看懂啊這就是一個(gè)透視表。從這里也可以看到,Tabular Mode最終暴露給的用戶(hù)接口實(shí)際上和傳統(tǒng)的多維模式一樣,只不過(guò)底層的數(shù)據(jù)存儲(chǔ)方案不一樣。相對(duì)中小規(guī)模的數(shù)據(jù)來(lái)說(shuō),Tabular Mode的In Memory緩存更有優(yōu)勢(shì),而對(duì)于比較大比較復(fù)雜的業(yè)務(wù)分析來(lái)說(shuō)用傳統(tǒng)的多維方式更具有優(yōu)勢(shì)。當(dāng)然,我們更愿意看到未來(lái)的版本中,會(huì)出現(xiàn)兩個(gè)方案的"中間方案"結(jié)合兩邊的優(yōu)點(diǎn)。
透視表對(duì)于業(yè)務(wù)部門(mén)來(lái)說(shuō)是最熟悉不過(guò)的工具,如何 操作屬于Excel部分的內(nèi)容,這里不再做具體的講解。
?
?
到這里,一個(gè)簡(jiǎn)單的基于Tabular Mode的分析模型構(gòu)建完成了。
?
?
?
總結(jié):
整個(gè)操作過(guò)程下來(lái),根絕Tabular Mode項(xiàng)目的操作模式跟傳統(tǒng)的多維模式區(qū)別很大,有些地方甚至很難去適應(yīng),想找的東西往往需要很久才可以找的到,甚至根本找不到,比如在線(xiàn)打開(kāi)一個(gè)Tabular Mode。不過(guò)微軟這樣設(shè)計(jì)也并不是沒(méi)有道理,傳統(tǒng)的多維模型定位是給IT人員的,我們已經(jīng)適應(yīng)了那種模式,而Tabular Mode是定位給業(yè)務(wù)部門(mén)來(lái)操作的,確實(shí)很多操作都跟Excel和Access很像。所以有這樣的區(qū)別也是可以理解的。
另外有一點(diǎn)需要注意的是,Tabular Mode中的查詢(xún)語(yǔ)言用的是DAX而不是傳統(tǒng)的MDX,DAX的寫(xiě)法也許更像Excel,相對(duì)來(lái)說(shuō)對(duì)于業(yè)務(wù)部門(mén)的人員來(lái)說(shuō)更容易讀懂。
總之,Tabular Model的提出降低了分析模型的開(kāi)發(fā)難度,使具有基本IT技能的各個(gè)業(yè)務(wù)部門(mén)可以根據(jù)已有的數(shù)據(jù)倉(cāng)庫(kù)開(kāi)發(fā)出符合自己需要的簡(jiǎn)單數(shù)據(jù)分析模型,而無(wú)需每次向IT提需求然后等待長(zhǎng)時(shí)間的響應(yīng)之后才可以繼續(xù)工作。另外它的內(nèi)存緩存模式確實(shí)也很具有吸引力,簡(jiǎn)單的數(shù)據(jù)分析模型可以在上面得到快速的響應(yīng)。
但在一定意義上來(lái)說(shuō),Tabular Model不會(huì)取代傳統(tǒng)的多維分析模型,更不會(huì)替代整個(gè)BI的架構(gòu)。首先它是分析服務(wù),在整個(gè)BI框架中它只是其中的一層,底層的數(shù)據(jù)倉(cāng)庫(kù)還需要做很多的ETL工作。而它對(duì)于傳統(tǒng)的多維模型,由于彼此的數(shù)據(jù)存儲(chǔ)形式不同,所以它們還是會(huì)長(zhǎng)時(shí)間的對(duì)立存在,表模式的更適合業(yè)務(wù)人員來(lái)操作,多維模型更適合復(fù)雜結(jié)構(gòu)并且有IT部門(mén)來(lái)完成的情況,更何況后者還有數(shù)據(jù)挖掘的部分。未來(lái)即使有整合,我個(gè)人預(yù)測(cè)也是在多位模型中加入In Memory Cache的功能,其它不會(huì)有太大的改變。
總結(jié)
以上是生活随笔為你收集整理的使用SQL Server Analysis Services Tabular Model建立分析模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: js 控制按钮点击后不可用(用于短信或者
- 下一篇: centos6.2 64位LNMP(li