
DAX除了進(jìn)行計(jì)算外,更可以直接作為一門查詢語言,如果說SQL是IT的數(shù)據(jù)庫(kù)查詢語言,那么DAX就可以認(rèn)為是分析師的查詢語言。理解了DAX查詢,意味著開始真正駕馭DAX。
你知道透視表就是等效的DAX查詢嗎
DAX在使用上,分成兩大類,一類以DAX計(jì)算為核心,另一類以DAX查詢?yōu)楹诵?。本文是專?duì)后者進(jìn)行介紹的。
在之前的篇章,我們提到過:DAX計(jì)算就是在建立了關(guān)系的多個(gè)表構(gòu)成的數(shù)據(jù)模型上,DAX通過篩選,找到需要進(jìn)行計(jì)算的一個(gè)數(shù)據(jù)模型的子集,然后進(jìn)行迭代處理后,完成聚合型計(jì)算。所以,一般而言,分析師用DAX計(jì)算關(guān)注某個(gè)值(度量值),而分析師常常可能需要的不僅僅是一個(gè)值,而是一個(gè)結(jié)果表。例如:不同類別及子類別下的銷售額。
當(dāng)然這個(gè)需求,可以用透視表實(shí)現(xiàn),那相當(dāng)于借助了Excel界面的拖拽來生成一個(gè)表,在具體的值位置,使用了DAX的度量值,這讓我們得到了透視表結(jié)果。
如下所示:

這是Excel透視表默認(rèn)的視圖,它很簡(jiǎn)潔,稍加變化該透視表等效于:

可以使用如下的DAX查詢實(shí)現(xiàn)等效的結(jié)果:
EVALUATE
FILTER (
ADDCOLUMNS (
SELECTCOLUMNS (
GENERATE ( DimProductCategory, RELATEDTABLE ( DimProductSubcategory ) ),
"Category", [ProductCategoryName],
"SubCategory", [ProductSubCategoryName]
),
"銷售額", [銷售額]
),
[銷售額] <> BLANK ()
)
結(jié)果如下:

可以看到這與透視表的結(jié)果是完全等效一致的。
注:在Excel中使用透視表對(duì)數(shù)據(jù)模型進(jìn)行操作時(shí),實(shí)際使用的是MDX查詢。但由于 MDX查詢 和 DAX查詢 具有等效性,相當(dāng)于 透視表操作 等效于 MDX查詢 等效于 DAX查詢。關(guān)于MDX查詢不在這里討論的范圍。
不難發(fā)現(xiàn):
- 透視表可以實(shí)現(xiàn)的數(shù)據(jù)視圖,使用DAX查詢都可以做到。
- 一些更復(fù)雜的數(shù)據(jù)視圖,很難用透視表實(shí)現(xiàn),而DAX查詢也可以做到。
- 就使用難度而言,透視表是拖拽式的,而DAX查詢則要學(xué)習(xí)DAX語言。
- 透視表面向普通辦公場(chǎng)景,而DAX查詢則是分析師專屬。
作為數(shù)據(jù)分析師,我們必然是要掌握DAX查詢的,以便獲得DAX的全部能力,當(dāng)然,這不是拖拖拽拽就能實(shí)現(xiàn)的,讓我們一起開始學(xué)習(xí)吧。
進(jìn)入DAX查詢前的準(zhǔn)備
要學(xué)習(xí)DAX查詢,首先應(yīng)該做好如下準(zhǔn)備:
- 了解并能初步使用Power Pivot。
- 了解并能初步使用Power BI Desktop。
- 大致了解Power Pivot與Power BI Desktop在DAX方面的共性。
更準(zhǔn)確地說,需要理解DAX計(jì)算并至少在Excel Power Pivot或Power BI Desktop中實(shí)踐過至少以下一種:
- 自行創(chuàng)建度量值,并在Excel Power Pivot中借助透視表工具和度量值進(jìn)行結(jié)合實(shí)踐。
- 自行創(chuàng)建度量值,并在Power BI Desktop中借助可視化化工具和度量值進(jìn)行結(jié)合實(shí)踐。
理解DAX查詢的對(duì)象
所謂查詢,那么一定具體指的是用戶從A處按照某需求查詢出結(jié)果B的過程。例如,我們熟知的SQL查詢是用戶從數(shù)據(jù)庫(kù)(兼容SQL查詢標(biāo)準(zhǔn))按照業(yè)務(wù)需求(如:select * from user t where t.age > 20)查詢出結(jié)果(大于20歲的用戶)。
DAX查詢從這個(gè)意義上講,是完全一致的。DAX查詢,是分析師從數(shù)據(jù)模型(內(nèi)置DAX引擎)按照業(yè)務(wù)需求查詢出結(jié)果的過程。
具備內(nèi)置DAX引擎的數(shù)據(jù)模型目前有:
- Excel 數(shù)據(jù)模型(歸并在Power Pivot主題下)
- Power BI / Power BI Desktop 數(shù)據(jù)模型
- SSAS服務(wù)
關(guān)于SSAS服務(wù)的內(nèi)容超過自助商務(wù)智能的范疇,不在討論范圍之內(nèi)。
下面分別說明如何在Excel及Power BI Desktop下展開DAX查詢。
DAX Studio:DAX查詢的專屬工具
DAX Studio是一個(gè)專門編寫DAX查詢的免費(fèi)工具??梢栽谶@里獲取:http://daxstudio.codeplex.com/
下載安裝啟動(dòng)后,可以看到:

這里提示要連接到的數(shù)據(jù)模型,有三種選擇,這與之前介紹的內(nèi)置DAX引擎的三種數(shù)據(jù)模型相一致。
需要注意的是:
- DAX Studio與Excel 數(shù)據(jù)模型的連接需要從Excel里啟動(dòng)DAX Studio,第一項(xiàng)可用。
- 如果當(dāng)前本地打開了Power BI Destop,則第二項(xiàng)可用。
連接后DAX Studio顯示主界面如下:

各主要板塊大致如下:

借助DAX Studio,我們可以完成:
- DAX查詢編寫
- DAX查詢/DAX代碼格式化
- 數(shù)據(jù)模型元數(shù)據(jù)查看
- 當(dāng)前DAX引擎支持函數(shù)查看
- 當(dāng)前DAX引擎DMV
- DAX查詢結(jié)果查看
- DAX查詢結(jié)果數(shù)據(jù)導(dǎo)出
- DAX引擎運(yùn)行監(jiān)控(為代碼優(yōu)化做準(zhǔn)備)
- DAX引擎時(shí)間跟蹤
- DAX代碼性能優(yōu)化
也就是說,編寫DAX查詢僅僅是DAX Studio支持的基礎(chǔ)功能,這也是本文要介紹的主題,由于DAX Studio的深度使用,將在后續(xù)的文章中單獨(dú)說明。
在Excel中使用DAX查詢
在Excel中使用DAX查詢必須滿足一個(gè)前提,那就是:Excel已經(jīng)使用了數(shù)據(jù)模型。
安裝DAX Stuido以后,Excel會(huì)出現(xiàn)一個(gè)新的選項(xiàng)卡,如下:

必須在這里點(diǎn)擊DAX Studio才能打開DAX Studio與Excel數(shù)據(jù)模型的連接。
注:DAX引擎內(nèi)置在Excel進(jìn)程里,所以必須從Excel中打開DAX Studio以匹配該進(jìn)程。
如下所示:

可以看到,連接的Excel數(shù)據(jù)模型顯示為:Microsoft_SQLServer_AnalysisService,這進(jìn)一步說明Excel內(nèi)置了SSAS引擎。
DAX查詢的語法是以 EVALUATE 開頭的返回表的DAX表達(dá)式。那最簡(jiǎn)單的可以直接用一個(gè)已有的表,如下:

為了把這個(gè)結(jié)果返回到Excel,可以設(shè)置DAX查詢的輸出位置,如下:

這個(gè)加載到Excel中的表與其他表的不同在于,它是DAX查詢返回的表,如下:

可以看到這個(gè)表格帶有【編輯DAX】的菜單,如下:

看到這里,你應(yīng)該意識(shí)到,這基本上屬于開啟了Excel的一個(gè)隱藏功能,而且是一個(gè)威力非常巨大的隱藏功能,你可以在這里編寫任意的DAX查詢以駕馭Excel數(shù)據(jù)模型。而編寫DAX的任務(wù)可以完全在DAX Studio中完成,只需要把結(jié)果鏈接輸出到這里或者把測(cè)試滿足預(yù)期的DAX查詢代碼粘貼至此即可。
作為Excel透視表用戶,也應(yīng)該能意識(shí)到此時(shí)你將擺脫以前Excel數(shù)據(jù)透視表給你帶來的任何限制,你可以實(shí)現(xiàn)任何你想象到的任務(wù)只有你具有這方面的數(shù)據(jù)即可。
我們完成本文開頭的代碼,填入:

這就得到了本文一開始等效于透視表的結(jié)果。
這里我們并不用特別在意該段DAX代碼的,這需要知道DAX查詢可以實(shí)現(xiàn)的效果。關(guān)于DAX查詢?nèi)绾沃鸩骄帉憣儆诹硗獾莫?dú)立話題。
如果沒有安裝DAX Studio,在Excel中其實(shí)還有一種打開DAX查詢這項(xiàng)隱藏技術(shù)的門,操作步驟如下:
【步驟一】從外部獲取數(shù)據(jù),一般是Power Query獲取數(shù)據(jù)并加載到數(shù)據(jù)模型。(如:表DimProductCategory)。
【步驟二】從【現(xiàn)有連接】打開表,如下:

下一步:

點(diǎn)擊【打開】:

選擇數(shù)據(jù)在工作簿的顯示方式為【表】以及數(shù)據(jù)放置位置為【新工作表】,如下:

這種表就是使用DAX查詢得到的表,如下:

此時(shí)便可以自由地編寫DAX查詢了。
注意:盡量用剛才的方式加載一個(gè)小表作為占位符表,然后再修改DAX查詢。如果選擇了一個(gè)FactSales這樣幾百萬行的表,Excel是無法加載進(jìn)工作表的,當(dāng)然大表也會(huì)占據(jù)更多時(shí)間。
至此,已經(jīng)借助DAX Studio或從Excel原生開啟了DAX查詢的序幕。接下來就完全是DAX查詢的階段了。
在Power BI Desktop中使用DAX查詢
在Power BI Desktop中使用DAX查詢相比在Excel使用DAX查詢更加簡(jiǎn)單,因?yàn)槭紫饶憧吹降囊磺性赑ower BI Desktop拖拽生成的圖形元素背后,都是DAX查詢的結(jié)果,類似于本文開篇透視表的結(jié)果。
也就是說,不管是餅圖,條形圖或是地圖等,背后用到的數(shù)據(jù)都是DAX查詢的結(jié)果,當(dāng)然Power BI Desktop做了數(shù)據(jù)量級(jí)的限制以確保圖形的合理顯示。
Power BI Desktop圖形元素自動(dòng)生成DAX查詢不在本文討論范圍之內(nèi),后續(xù)再說明。
首先Power BI Desktop直接給出了可以返回表的機(jī)會(huì),也就是直接可以編寫DAX查詢?nèi)缦拢?/p>

當(dāng)然,Power BI Desktop也可以與DAX Studio相連接,如下:

只要Power BI Desktop是打開的,隨后再打開DAX Studio就可以選擇Power BI Desktop進(jìn)行連接。連接后如下所示:

略加觀察不難發(fā)現(xiàn),這里的連接是具體的Power BI Desktop文件名稱。回憶前述的DAX Studio連接Excel的方式是不顯示具體文件名稱的。因?yàn)?,Power BI Desktop會(huì)開啟獨(dú)立的SSAS進(jìn)程。
強(qiáng)調(diào)這兩點(diǎn)是在引導(dǎo)一種對(duì)于分析師更強(qiáng)大的組合使用模式,那就是:分析師可以直接使用Power BI Desktop作為本機(jī)的分析服務(wù)器。而DAX查詢將最大化地發(fā)揮分析師的能力。
分析師可以在DAX Studio中完成DAX 查詢的調(diào)試后,放入Power BI Desktop構(gòu)建獨(dú)立的表。
開始在DAX Studio中編寫DAX查詢
在DAX Studio中編寫DAX查詢是以EVALUATE開始的,可以在DAX Studio中實(shí)現(xiàn)對(duì)任意DAX表達(dá)式的測(cè)試,這不僅有利于完全理解DAX表達(dá)式的運(yùn)行以深入學(xué)習(xí)DAX,也可以完成非常復(fù)雜的表達(dá)式的編寫和調(diào)試工作。
測(cè)試返回表的表達(dá)式:
DAX查詢可以測(cè)試返回表的DAX表達(dá)式
EVALUATE
ADDCOLUMNS ( 'Product Category', "Total", [Sales Amount] )
返回:

只是希望返回類別和銷售額?如何進(jìn)一步特定化DAX查詢,將在后續(xù)進(jìn)一步說明。
測(cè)試返回值的表達(dá)式:
EVALUATE
ROW( "Total", [Sales Amount] )
返回:

由于DAX查詢必須返回表,可以用ROW來構(gòu)建一個(gè)表,但實(shí)質(zhì)是為了測(cè)試一個(gè)值。
總結(jié)
通過本文的介紹,我們可以知道:
- Excel透視表可以用等效的DAX查詢表示
- DAX查詢可以表示出任意復(fù)雜的查詢結(jié)果,這種能力遠(yuǎn)遠(yuǎn)超過Excel透視表本身
- DAX Studio是編寫DAX查詢的強(qiáng)大武器
- DAX Studio除了編寫DAX查詢外,還具備其他更多特性
- 理解如何借助DAX Studio完成DAX查詢與Excel的連接
- 理解如何直接在原生Excel中實(shí)現(xiàn)DAX查詢
- 理解如何在Power BI Desktop中進(jìn)行DAX查詢
- 理解如何借助DAX Studio測(cè)試DAX查詢(返回表或返回值)
現(xiàn)在,趕快下載DAX Studio開啟DAX查詢的無限可能吧。
在你完成一定探索后,會(huì)發(fā)現(xiàn)一些問題,相信在后續(xù)關(guān)于DAX Studio及DAX查詢的文章中會(huì)找到你要的答案。
如果你喜歡本文,歡迎在朋友圈進(jìn)行分享。
留言后下載本文使用示例數(shù)據(jù)文件。
