DAX查詢進階:駕駛DAX Studio

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-04-30-49.jpg)

沒有愛上車是因為還沒學會駕駛。

前情回顧

在上一篇DAX查詢入門:DAX Studio介紹中哄孤,我們已經初步了解了DAX Stuido去扣。
它提供的能力包括:

  • DAX查詢編寫
  • DAX查詢/DAX代碼格式化
  • 數據模型元數據查看
  • 當前DAX引擎支持函數查看
  • 當前DAX引擎DMV
  • DAX查詢結果查看
  • DAX查詢結果數據導出
  • DAX引擎運行監(jiān)控(為代碼優(yōu)化做準備)
  • DAX引擎時間跟蹤
  • DAX代碼性能優(yōu)化
    我們初步了解了:
  • Excel透視表可以用等效的DAX查詢表示
  • DAX查詢可以表示出任意復雜的查詢結果较鼓,這種能力遠遠超過Excel透視表本身
  • DAX Studio是編寫DAX查詢的強大武器
  • DAX Studio除了編寫DAX查詢外,還具備其他更多特性
  • 理解如何借助DAX Studio完成DAX查詢與Excel的連接
  • 理解如何直接在原生Excel中實現DAX查詢
  • 理解如何在Power BI Desktop中進行DAX查詢
  • 理解如何借助DAX Studio測試DAX查詢(返回表或返回值)

本文將詳細說明暢快駕駛DAX Studio的方法岳悟。

現在打開你的DAX Studio以及示例文件Contoso.pbix(你可以使用自己的測試文件)浙滤。如下:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-02-07-50.jpg)

DAX查詢編寫

DAX查詢的語法為:
根據 微軟官方DAX查詢參考 可知:
DAX 語言提供了一種新語法伶授,可從查詢中返回表數據为黎。
通過 DAX 查詢组砚,用戶可從內存分析引擎 (VertiPaq) 來檢索由表表達式定義的數據。 用戶可將度量值作為查詢的一部分創(chuàng)建违诗;查詢結束后某抓,這些結果會被釋放纸兔,除非導出這些結果。

DAX 查詢 的語法如下:

[DEFINE {  MEASURE <tableName>[<name>] = <expression> }
EVALUATE <table>
[ORDER BY {<expression> [{ASC | DESC}]}[, …]
[START AT {<value>|<parameter>} [, …]]]

具體參考微軟官方文檔否副,不做過多說明汉矿。

其中,EVALUATE是重點备禀。包含用于生成查詢結果的表表達式洲拇。 表達式可以使用任何定義的度量值奈揍。表達式必須返回表。 如果需要標量值赋续,則度量值的作者可以將其標量包裝在 ROW() 函數內男翰,以便生成包含所需標量的表。

在DAX中蚕捉,常見的返回表的情況包括:

  • 直接返回表本身奏篙,如:
EVALUATE Product
  • 返回被過濾的表,如:
EVALUATE
FILTER ( 'Product', 'Product'[Color] = "red" )
  • 返回CACULATETABLE計算后的表迫淹,如:
EVALUATE
CALCULATETABLE (
    DISTINCT ( 'Product'[Product Name] ),
    'Product Category'[Category] = "audio"
)
  • ALL和VALUES也是返回表的函數秘通,在DAX Studio中可以很好的看到它們的特性敛熬,如:
EVALUATE
ALL('Product Category'[Category])

EVALUATE
VALUES('Product Category'[Category])

結果如下:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-02-28-48.jpg)

注意:DAX Studio 2.6 開始支持返回多結果,也就是一次性寫多個EVALUATE進行計算话原。

另外一個結果是:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-02-30-55.jpg)

發(fā)現了嗎?ALL和VALUES在這種情況下返回的結果是一樣的诲锹。你還可以自行實驗有 重復值 列的情況繁仁。

流暢的代碼編寫體驗

之所以說當你熟悉了DAX的感覺后會不能再沒有她,正是因為她能幫助你流暢地編寫DAX代碼归园。這表現在:

  • DAX 函數及模型元數據智能感知黄虱,如:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-02-37-07.jpg)

DAX Studio 可以自動識別當前DAX引擎可用的DAX函數以及當前模型的元數據(表及列)并迅速進行提示,這使得編寫代碼的速度很快庸诱。

  • DAX 代碼著色及格式化
    DAX Studio 使用DAXFormatter.com對代碼進行格式化捻浦,如下:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-02-42-19.jpg)

點擊:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-02-42-37.jpg)

得到:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-02-43-02.jpg)

在編寫復雜的 DAX 查詢 時,代碼著色以及括號匹配能幫助我們避免很多錯誤桥爽。

  • 語法檢測及錯誤提醒
    如果你的代碼出現錯誤朱灿,DAX Studio可以進行語法檢查并幫助排除錯誤。例如在上述的DAX查詢中钠四,對[Category Code]不小寫多寫了一個空格成為[Category Code ]盗扒,這也是不允許的,DAX Studio會報錯形导,如下:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-02-47-23.jpg)

DAX Studio 幫助鎖定了出錯的位置是第4行第17列环疼,并提示了錯誤信息“找不到列Category Code 或該列不能用于此表達式”。

DAX 查詢編寫最佳實踐

基于DAX查詢具有的特點:DAX查詢是嵌套進行的朵耕§帕ィ可以逐層地來構造查詢,以確保在每一步都可以進行調試阎曹。

注意利用 DAX Studio 2.6 版本以后可返回多結果的功能伪阶。

例如:構建一個返回分類及子分類下銷售額匯總的表煞檩。這個在DAX Studio中逐步編寫代碼的過程大致如下:

DEFINE
    //定義度量值計算銷售額
    MEASURE Sales[Total Sales] =
        SUMX ( Sales, Sales[Net Price] * Sales[Quantity] )
EVALUATE
//總銷售額
ROW ( "values", [Total Sales] )
EVALUATE
//生成類別層級表
SELECTCOLUMNS (
    GENERATE ( 'Product Category', RELATEDTABLE ( 'Product Subcategory' ) ),
    "Category", 'Product Category'[Category],
    "Sub Category", 'Product Subcategory'[Subcategory]
)
EVALUATE
//為類別層級表添加銷量
ADDCOLUMNS (
    SELECTCOLUMNS (
        GENERATE ( 'Product Category', RELATEDTABLE ( 'Product Subcategory' ) ),
        "Category", 'Product Category'[Category],
        "Sub Category", 'Product Subcategory'[Subcategory]
    ),
    "Total Sales", [Total Sales]
)

可以看出在上述過程中,并沒有刪除每一步的代碼栅贴,而總是利用每一次的代碼繼續(xù)下一步斟湃。并得到結果:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-03-15-26.jpg)

可以發(fā)現,有的類別層級組合是沒有銷售額的檐薯,不希望顯示這樣的結果凝赛,于是可以進一步用FILTER來進行過濾,甚至進一步格式化輸出結果坛缕,如下:

EVALUATE
//為類別層級表添加銷量并過濾空行
//格式化輸出結果
FILTER (
    ADDCOLUMNS (
        SELECTCOLUMNS (
            GENERATE ( 'Product Category', RELATEDTABLE ( 'Product Subcategory' ) ),
            "Category", 'Product Category'[Category],
            "Sub Category", 'Product Subcategory'[Subcategory]
        ),
        "Total Sales", FORMAT( [Total Sales] / 10000 , "0.0W" )
    ),
    ISBLANK ( [Total Sales] ) = FALSE () && [Total Sales] <> ""
)

結果為:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-03-20-59.jpg)

這已經很完美墓猎。

尤其是在編寫復雜的 DAX 查詢 時,可以采用逐步測試的方法并配合注釋使得DAX代碼可以被長期維護赚楚。

使用DAX Studio理解模型中的元數據

DAX Studio可以幫助分析師了解模型的元數據毙沾,如下:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-03-24-25.jpg)

包括Power BI Desktop自動生成的代碼左胞,例如:Power BI Desktop會自動為每個日期列添加一個適用于時間智能的隱藏日期表烤宙。這個隱藏的日期表在Power BI Desktop默認是看不到的俭嘁,但是在DAX Studio中卻一覽無遺兄淫。

如果禁用Power BI Desktop自動生成日期表的功能捕虽,如下:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-03-27-50.png)

此時回到DAX Studio中查看模型的元數據將不再存在隱藏的日期表泄私,如下:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-03-28-51.jpg)

使用DAX Studio理解所有DAX函數

DAX Studio可以讀取DAX引擎支持的所有函數晌端,如下:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-03-30-07.jpg)

這可以幫助分析師快速了解所有的DAX函數咧纠,包括DAX引擎更新后可能新加入的函數泻骤。

使用DAX Studio初步理解DMV并使用Power BI Desktop作為分析服務

Analysis Services Dynamic Management Views (DMV)梧奢,即:分析服務的動態(tài)管理視圖亲轨,它提供了對當前運行的分析服務動態(tài)信息進行查詢的接口惦蚊。如下:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-03-39-29.jpg)

由于Excel Power Pivot蹦锋,Power BI Desktop以及SSAS均使用分析服務引擎端姚,所以都具備這個DMV。通過查詢DMV巫湘,用戶可以知道由于當前分析服務的幾乎所有信息尚氛,這為基于Power BI Desktop的高級應用提供了基礎阅嘶。

例如:DMV透露了作為當前分析服務的實例载迄,那便可以使用該實例作為服務器护昧。將Excel作為客戶端惋耙,與之進行連接。

這里顯示了端口號:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-03-49-55.jpg)

用Excel作為客戶端工具與之連接湿酸,如下:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-03-54-36.jpg)

輸入剛剛在DAX Studio中得到的連接信息推溃,如下:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-03-55-43.jpg)

Excel提示可以與當前的分析服務連接美莫,如下:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-03-57-13.jpg)

此時,在Power BI Desktop定義的模型便可以直接在Excel中使用了窝撵,如下:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-03-59-22.jpg)

至此碌奉,Excel與Power BI Desktop完全連接起來赐劣,不需要在Excel中建立數據模型一樣可以直接對數據模型加以利用哩都。

有關DMV的深度利用漠嵌,超出了本文范圍儒鹿,后續(xù)再做描述。

使用DAX Studio輸出DAX查詢

這又是一項DAX Studio非常出彩的功能植阴。我們知道在Excel中單表限制是100W行數據掠手;而在Power BI Desktop中又無法導出數據狸捕。這就存在一個問題,那就是:是否可能將加載進數據模型(Excel 數據模型或Power BI Desktop數據模型)的大數據量級事實表(如:超過1000W行)導出?

對于分析師而言株搔,這是一個非常重要的功能纯蛾。這項功能也是由DAX Studio提供的翻诉。

在示例PBI文件中便使用了多達1200W行的銷售數據,如下:

EVALUATE
ROW ( "rows of sales", COUNTROWS ( Sales ) )

結果:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-04-08-21.jpg)

這甚至不能只能在DAX Studio的輸出視圖中顯示舒岸,這有可能導致內存不足。但可以通過DAX Studio把輸出目標改為文件俄认,這樣就像在內存數據模型與硬盤目標文件之間建立了管道眯杏,數據像流水一樣岂贩,順暢地流入目標文件萎津。

在DAX Studio設置輸出目標為:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-04-11-22.jpg)

執(zhí)行這項“危險”的操作如下:

EVALUATE
Sales

執(zhí)行查詢姜性,并設置保存的文件格式為CSV格式:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-04-14-36.jpg)

DAX Studio大致以每秒15000行的速度導出數據:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-04-15-35.jpg)

如果此時觀察任務管理器部念,可以看到:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-04-16-51.jpg)

DAX Studio進程以全速工作儡炼,并以1.5~2M/S每秒的速度與磁盤交互乌询,在它身邊正是Power BI Desktop啟動的本地分析服務妹田。
導出結果如下:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-04-40-14.jpg)

文件大小為2G鹃共。Power BI Desktop源文件(包含Sales在內所有模型表)整個大小為300M霜浴。DAX引擎的壓縮能力在此也可見一斑。

分析師電腦配置在硬盤方面使用固態(tài)硬盤便是為此處考慮晌纫。增加硬盤的讀寫速度箭养,對于大數據量級數據讀寫有明顯優(yōu)勢露懒。

總結

至此懈词,現在我們已經可以基本駕駛DAX Studio完成大多數DAX查詢相關工作坎弯,包括:

  • 流暢地編寫DAX查詢抠忘。
  • 使用DAX Studio實現逐步編寫DAX查詢崎脉。
  • 使用DAX Studio學習理解所有DAX函數。
  • 使用DAX Studio理解模型的元數據祭衩。
  • 初步使用DAX Studio理解DMV掐暮。
  • 使用DAX Studio導出DAX查詢路克。

如果說現在已經可以通過DAX Studio暢快地駕駛DAX查詢精算,那還有最后一個階段殖妇,那就是:透徹地理解DAX引擎谦趣,完成修車前鹅,彎道急速超車等高難度動作舰绘。

推薦<<極品飛車>>這一電影蹂喻,其中一個片段是:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-04-33-04.jpg)

有好車,不一定人人能開出極速捂寿。所有的分析師都可以使用Power BI Desktop口四,但真正的高手是能開出極速的。

其中還有一個片段:

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-04-36-10.jpg)

夢想秦陋,比工作更重要蔓彩。

這兩個片段,你找到了嗎驳概?

對于如何像電影的感覺一般與DAX查詢?yōu)槲閷⒃诘谌轮欣^續(xù)探索赤嚼。
如果你對本文感興趣,歡迎分享到你的朋友圈顺又。
后臺留言便可獲取示例文件更卒。

![](http://files.excel120.com/MD/Excel120/DAX Studio/_image/2017-06-06-04-31-12.jpg)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末腌闯,一起剝皮案震驚了整個濱河市斤彼,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖昼汗,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡漆魔,警方通過查閱死者的電腦和手機阿纤,發(fā)現死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荆忍,“玉大人微宝,你說我怎么就攤上這事《ど裕” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵以现,是天一觀的道長恰矩。 經常有香客問我萎胰,道長灵奖,這世上最難降的妖魔是什么擅编? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任慨削,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己地梨,他們只是感情好万细,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布弓千。 她就那樣靜靜地躺著呆抑,像睡著了一般妹萨。 火紅的嫁衣襯著肌膚如雪熏兄。 梳的紋絲不亂的頭發(fā)上摩桶,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天士飒,我揣著相機與錄音缓苛,去河邊找鬼酷师。 笑死瘫里,一個胖子當著我的面吹牛,可吹牛的內容都是我干的荡碾。 我是一名探鬼主播谨读,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼坛吁!你這毒婦竟也來了劳殖?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤拨脉,失蹤者是張志新(化名)和其女友劉穎哆姻,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體玫膀,經...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡矛缨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了帖旨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片箕昭。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖解阅,靈堂內的尸體忽然破棺而出盟广,到底是詐尸還是另有隱情,我是刑警寧澤瓮钥,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布筋量,位于F島的核電站,受9級特大地震影響碉熄,放射性物質發(fā)生泄漏桨武。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一锈津、第九天 我趴在偏房一處隱蔽的房頂上張望呀酸。 院中可真熱鬧,春花似錦琼梆、人聲如沸性誉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽错览。三九已至纫雁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間倾哺,已是汗流浹背轧邪。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留羞海,地道東北人忌愚。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像却邓,于是被迫代替她去往敵國和親硕糊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內容

  • DAX除了進行計算外腊徙,更可以直接作為一門查詢語言简十,如果說SQL是IT的數據庫查詢語言,那么DAX就可以認為是分析師...
    PowerBI戰(zhàn)友聯盟閱讀 30,642評論 6 37
  • 個人學習批處理的初衷來源于實際工作昧穿;在某個迭代版本有個BS(安卓手游模擬器)大需求,從而在測試過程中就重復涉及到...
    Luckykailiu閱讀 4,718評論 0 11
  • ¥開啟¥ 【iAPP實現進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程橙喘,因...
    小菜c閱讀 6,404評論 0 17
  • 潤心讀書會每日一誦第64誦:儀封人請見时鸵。曰:君子之至于斯也,吾未嘗不得見也厅瞎。從者見之饰潜。出曰:二三子的,何患于喪乎和簸?...
    宋允兒閱讀 134評論 0 0
  • █ █今天我們要介紹的是《巴黎圣母院》彭雾。作者是我們熟悉的法國教科書級小說家雨果。中文版全書共11卷锁保,40多萬字薯酝。1...
    法的守夜人閱讀 882評論 0 1