DAX除了進(jìn)行計(jì)算外携兵,更可以直接作為一門查詢語言疾掰,如果說SQL是IT的數(shù)據(jù)庫查詢語言,那么DAX就可以認(rèn)為是分析師的查詢語言徐紧。理解了DAX查詢静檬,意味著開始真正駕馭DAX哪怔。
你知道透視表就是等效的DAX查詢嗎
DAX在使用上画切,分成兩大類糙麦,一類以DAX計(jì)算為核心嬉橙,另一類以DAX查詢?yōu)楹诵墓杓薄1疚氖菍笳哌M(jìn)行介紹的芳撒。
在之前的篇章禀梳,我們提到過:DAX計(jì)算就是在建立了關(guān)系的多個表構(gòu)成的數(shù)據(jù)模型上覆致,DAX通過篩選愈涩,找到需要進(jìn)行計(jì)算的一個數(shù)據(jù)模型的子集望抽,然后進(jìn)行迭代處理后,完成聚合型計(jì)算履婉。所以煤篙,一般而言,分析師用DAX計(jì)算關(guān)注某個值(度量值)谐鼎,而分析師常辰Ⅲ。可能需要的不僅僅是一個值趣惠,而是一個結(jié)果表。例如:不同類別及子類別下的銷售額身害。
當(dāng)然這個需求味悄,可以用透視表實(shí)現(xiàn),那相當(dāng)于借助了Excel界面的拖拽來生成一個表塌鸯,在具體的值位置侍瑟,使用了DAX的度量值,這讓我們得到了透視表結(jié)果丙猬。
如下所示:
這是Excel透視表默認(rèn)的視圖涨颜,它很簡潔,稍加變化該透視表等效于:
可以使用如下的DAX查詢實(shí)現(xiàn)等效的結(jié)果:
EVALUATE
FILTER (
ADDCOLUMNS (
SELECTCOLUMNS (
GENERATE ( DimProductCategory, RELATEDTABLE ( DimProductSubcategory ) ),
"Category", [ProductCategoryName],
"SubCategory", [ProductSubCategoryName]
),
"銷售額", [銷售額]
),
[銷售額] <> BLANK ()
)
結(jié)果如下:
可以看到這與透視表的結(jié)果是完全等效一致的茧球。
注:在Excel中使用透視表對數(shù)據(jù)模型進(jìn)行操作時庭瑰,實(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語言驾诈。
- 透視表面向普通辦公場景,而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查詢的對象
所謂查詢念脯,那么一定具體指的是用戶從A處按照某需求查詢出結(jié)果B的過程狞洋。例如,我們熟知的SQL查詢是用戶從數(shù)據(jù)庫(兼容SQL查詢標(biāo)準(zhǔn))按照業(yè)務(wù)需求(如:select * from user t where t.age > 20)查詢出結(jié)果(大于20歲的用戶)绿店。
DAX查詢從這個意義上講吉懊,是完全一致的。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是一個專門編寫DAX查詢的免費(fèi)工具”ぞ啵可以在這里獲燃孜:http://daxstudio.codeplex.com/
下載安裝啟動后,可以看到:
這里提示要連接到的數(shù)據(jù)模型羽戒,有三種選擇,這與之前介紹的內(nèi)置DAX引擎的三種數(shù)據(jù)模型相一致虎韵。
需要注意的是:
- DAX Studio與Excel 數(shù)據(jù)模型的連接需要從Excel里啟動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引擎時間跟蹤
- DAX代碼性能優(yōu)化
也就是說测萎,編寫DAX查詢僅僅是DAX Studio支持的基礎(chǔ)功能亡电,這也是本文要介紹的主題,由于DAX Studio的深度使用硅瞧,將在后續(xù)的文章中單獨(dú)說明份乒。
在Excel中使用DAX查詢
在Excel中使用DAX查詢必須滿足一個前提,那就是:Excel已經(jīng)使用了數(shù)據(jù)模型腕唧。
安裝DAX Stuido以后或辖,Excel會出現(xiàn)一個新的選項(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é)果返回到Excel阳啥,可以設(shè)置DAX查詢的輸出位置,如下:
這個加載到Excel中的表與其他表的不同在于捌省,它是DAX查詢返回的表苫纤,如下:
可以看到這個表格帶有【編輯DAX】的菜單,如下:
看到這里纲缓,你應(yīng)該意識到卷拘,這基本上屬于開啟了Excel的一個隱藏功能,而且是一個威力非常巨大的隱藏功能祝高,你可以在這里編寫任意的DAX查詢以駕馭Excel數(shù)據(jù)模型栗弟。而編寫DAX的任務(wù)可以完全在DAX Studio中完成,只需要把結(jié)果鏈接輸出到這里或者把測試滿足預(yù)期的DAX查詢代碼粘貼至此即可工闺。
作為Excel透視表用戶乍赫,也應(yīng)該能意識到此時你將擺脫以前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查詢得到的表烟零,如下:
此時便可以自由地編寫DAX查詢了。
注意:盡量用剛才的方式加載一個小表作為占位符表胸嘁,然后再修改DAX查詢瓶摆。如果選擇了一個FactSales這樣幾百萬行的表,Excel是無法加載進(jìn)工作表的性宏,當(dāng)然大表也會占據(jù)更多時間群井。
至此,已經(jīng)借助DAX Studio或從Excel原生開啟了DAX查詢的序幕毫胜。接下來就完全是DAX查詢的階段了书斜。
在Power BI Desktop中使用DAX查詢
在Power BI Desktop中使用DAX查詢相比在Excel使用DAX查詢更加簡單诬辈,因?yàn)槭紫饶憧吹降囊磺性赑ower BI Desktop拖拽生成的圖形元素背后,都是DAX查詢的結(jié)果荐吉,類似于本文開篇透視表的結(jié)果焙糟。
也就是說,不管是餅圖样屠,條形圖或是地圖等穿撮,背后用到的數(shù)據(jù)都是DAX查詢的結(jié)果,當(dāng)然Power BI Desktop做了數(shù)據(jù)量級的限制以確保圖形的合理顯示痪欲。
Power BI Desktop圖形元素自動生成DAX查詢不在本文討論范圍之內(nèi)悦穿,后續(xù)再說明。
首先Power BI Desktop直接給出了可以返回表的機(jī)會业踢,也就是直接可以編寫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)槊烫幔琍ower BI Desktop會開啟獨(dú)立的SSAS進(jìn)程绣的。
強(qiáng)調(diào)這兩點(diǎn)是在引導(dǎo)一種對于分析師更強(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)對任意DAX表達(dá)式的測試罢洲,這不僅有利于完全理解DAX表達(dá)式的運(yùn)行以深入學(xué)習(xí)DAX踢故,也可以完成非常復(fù)雜的表達(dá)式的編寫和調(diào)試工作。
測試返回表的表達(dá)式:
DAX查詢可以測試返回表的DAX表達(dá)式
EVALUATE
ADDCOLUMNS ( 'Product Category', "Total", [Sales Amount] )
返回:
只是希望返回類別和銷售額惹苗?如何進(jìn)一步特定化DAX查詢殿较,將在后續(xù)進(jìn)一步說明。
測試返回值的表達(dá)式:
EVALUATE
ROW( "Total", [Sales Amount] )
返回:
由于DAX查詢必須返回表桩蓉,可以用ROW來構(gòu)建一個表淋纲,但實(shí)質(zhì)是為了測試一個值。
總結(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測試DAX查詢(返回表或返回值)
現(xiàn)在,趕快下載DAX Studio開啟DAX查詢的無限可能吧伙窃。
在你完成一定探索后菩颖,會發(fā)現(xiàn)一些問題,相信在后續(xù)關(guān)于DAX Studio及DAX查詢的文章中會找到你要的答案为障。
如果你喜歡本文晦闰,歡迎在朋友圈進(jìn)行分享。
留言后下載本文使用示例數(shù)據(jù)文件鳍怨。