DAX學習分享:十條經驗
很多人說國內的學習資料太少,在學習的過程中坎坷不斷,我與大多數PowerBI學習者一樣,一邊讀外文的博客摸索一邊鋪路,在不斷嘗試和與人分享的過程中,總結了個人認為最寶貴的十條DAX學習經驗,分享給讀者。
一、理解上下文
學習DAX的難點在於理解上下文概念,一旦想通了這個,就好比打通了任督二脈,青雲直上。只是這個概念被一些計算機專業辭彙搞得妖魔化了,然而究其本質極其簡單。
以「四大皆空」這個詞舉例。
除了上述舊意和新意外,你還可以說「我出國旅遊一圈回來,四大皆空」,意思是錢包、銀行卡、支付寶、微信賬戶都花光了。漢語博大精深,同一個詞在不同的語境下表達的意思都可能不同。
而這不同的語境就好比DAX的「上下文」。使用不同的切片器、篩選器、數據透視表的行和列,都會創造不同的「語境」(篩選上下文)。在不同的表中新建計算列,也會有不同的「語境」(行上下文)。
自然而然,度量值、計算列在不同的語境下輸出的結果也會不同。這個道理就是「畢竟西湖六月中,風光不與四時同」。懂得了這點,你會少走很多彎路。
所以,第一條經驗是,在寫公式之前,先理解上下文是什麼。
二、使用度量值,而不是計算列
在PowerBI中有三個地方可以寫DAX公式:度量值、列、表。這三者理想的使用頻率是由大到小,度量值>列>表。
很多人剛開始學習PowerBI時,喜歡使用計算列,然而這意味著你並沒有體驗到PowerBI的精華。計算列不是什麼新知識,就好像在Excel中使用Vlookup添加一列一樣,這一列是基於現有的表基礎上做運算,它是「靜態」的,運算結果不會因為切片器或透視篩選而變化,當你建立好後,它就會保存在文件中,增加你的內存,影響你的文件運轉速度。
而度量值是什麼?它被稱作「Excel20年歷史上最好的事情」和「移動的公式」,讓你實現了質的飛躍,其靈活性可以說傳統Excel、VBA、甚至其他計算機語言都望塵莫及。
比如在上一篇文章中最實用的帕累托分析模板, 求每種商品由大到小的累計金額,添加計算列的方法只能輸出當前表中的結果,而使用度量值你可以做到ABC動態產品分類。求北京市、咖啡大類、2017年3月份的ABC,這是瞬間就可以完成的事情。
所以這第二條經驗是,使用度量值,在不得已的情況下再去考慮使用計算列。
三、思考DAX的邏輯
我一開始學習DAX是急功近利,不懂公式的基本邏輯,直接套用到實踐中使用。這是件很麻煩的事情,欲速則不達。
所以我建議先掌握公式的基本邏輯再來應用,你就可以做到以不變應萬變的效果。無論哪個場景,哪個行業,金融、製造、電商、餐飲...無論哪個崗位,財務、人力、銷售...只要是用數學表達式能夠得到的指標你基本都可以找到通用的DAX方法實現度量。
有人建議我把DAX函數歸個類,便於框架梳理學習。我是這樣想的:
第一,去微軟的官網你可以看到清楚的分類(時間、文本、統計、篩選函數等等)
第二,我更喜歡簡單地把所有函數都分為兩類,篩選和計算。下圖這個圖是我經常用來腦補DAX的工作原理,度量值和計算列都是先執行篩選再來計算,而所謂的「DAX用作查詢語言」其實就是主要應用了篩選功能,所以某些觀點「DAX查詢將取代數據透視表」是沒有道理的,一個東西你只用了一半的功能,那不是半吊子嗎?
這第三條經驗是,按照篩選+計算的邏輯思考你的公式。
四、數據模型的布局
雖然下面這張圖只有六張表,但上手這幾張表的第一反應我還真是無從下手。當你的表越來越多,模型可能會像地下管道一樣錯綜複雜,甚至干擾你的思路。
專業布局的方式有星型和雪花型,這兩種布局的概念都要學習了解,但是在使用中我更推薦一種簡單的思考方式,在Matt的《Learn to write DAX》書中提出的Lookup表在上,數據表在下的方式。這種布局很清晰,而且有助於按照箭頭自上而下來思考公式的邏輯。
第四條經驗,最佳入門布局,Lookup表在上,數據表在下。
五、數據類型
為什麼圖表不對?為什麼地圖沒有正常顯示?為什麼兩表之間無法建立關聯?為什麼輸出的結果很奇怪?為什麼公式報錯?
你可能遇到很多這樣的情況,最後找到的答案都是一個。第一時間到編輯查詢器和建模界面中,去檢查數據類型、格式、分類的設置是否正確。這往往是無意識發生的錯誤,即便是PowerBI高手。
六、學會組裝
使用PowerBI建立一個商業分析模型,就好像組裝一樣,你不可能一下子把所有的零件都拼裝起來,而是分步完成,最後再整合到一起。
同樣的道理,我不建議你把公式都寫到一個度量值中。比如,當你求拿鐵咖啡銷售量時: 你可以寫[銷售量]=sum(銷售明細表[數量])和Calculate([銷售量],產品表[咖啡種類]="拿鐵") ;也可以一氣呵成地寫Calculate(sum(銷售明細表[數量]),產品表[咖啡種類]="拿鐵")
我會建議使用第一種方法,分開來做。不要因為[銷售量]這個度量值很簡單就不去寫。因為你在後續工作中求環比、同比增長率、單店平均值等等都會重複利用到它。而且這樣的方式更便於梳理邏輯和修正錯誤。
第六條經驗,讓我們一步步來,一口吃個胖子消化不好。
七、使用PowerBI並下載最新版本
在另一篇文章中從Excel到PowerBI的5個理由, 曾經提及過PowerBI對比Excel的優勢。如果是僅僅完成多個文件的匯總整理,沒有後續的分析和可視化工作,你完全可以使用Excel的編輯查詢器。
但是寫DAX做建模分析,我更倡導使用PowerBI,除了更簡單友好的界面,更穩定、更快速的引擎外,像新建表、雙向箭頭應對多對多關係等功能Excel是不具備的,或者操作起來需要繞彎路才能實現。並且新增的DAX公式也會第一時間在PowerBI中上線。隨著新功能的不斷增加,擁抱未來是早晚的事。
這就好比工作電腦要會用windows, 日常手機用Android或IOS。第七條經驗,在沒有什麼一統江湖的產品之前,讓我們採用取長補短策略 Excel+PowerBI=Better Together 。
八、逆向思維
高效人士的習慣之一是「以結果為出發點」的思維方式。在搭建模型前,先想好兩個問題:
你有什麼?你想要什麼?明確了目標,有了設計的雛形再付諸行動。如果這兩個問題沒有想明白就上手寫公式,很容易誤入歧途、白費工夫。
同樣的道理,你要知道學習PowerBI是用來做什麼。
如果你的目標是解決重複性的多文件匯總和自動化基礎數據清洗工作,先學PowerQuery;如果你想實現多維度的商業指標分析,就一定要攻克最核心的PowerPivot建模;如果是想利用PowerBI做出炫酷的可視化效果,那就鑽研各種自定義圖表。如果目的是企業級部署,你需要研究產品的特性和共享協作方案。
不同的目標,學習的側重點也會大有不同,而前提是你要知道你想要的是什麼。
九、能抓住耗子就是好貓
傳統Excel、PowerQuery、PowerPivot數據建模,雖然工具不同,但很多時候能夠實現的目的是相同的。比如在Excel中可以使用最簡單的Vlookup來查詢另一張表中的對應結果,在PowerQuery中可以通過合併查詢來實現,在PowerPivot中也可以用Related或者Lookupvalue完成同樣的效果。
沒有絕對的最好方法,這取決於你的應用場景和個人習慣問題。總體來講,我認為無論白貓黑貓,能抓住耗子的就是好貓。
在這個基礎上進行優化選擇時,大多數的場景可以採用就近原則來判斷,即距離數據源較近的方法。比如能在數據源頭(向IT部門提需求或者利用SQL取數時)達到理想的數據形式,一般是最優解。其次是在PowerQuery中進行編輯,最後再選擇PowerPivot。
十、三種境界
清代文學家王國維談讀書有三大境界,我想學習DAX亦是如此。
第一大境界,昨夜西風凋碧樹,獨上高樓,望盡天涯路。
當你在眾多的工具中選擇了PowerBI,選擇了DAX,這絕對是一處可以讓你站得高,看得遠的高樓。在這個環節,你已經知道了DAX是什麼,能給你帶來什麼,接下來需要的是帶著求知的心態堅持走下去。
第二種境界,衣帶漸寬終不悔,為伊消得人憔悴。
很多學習DAX的人談到自己的心得是上班路上思考邏輯,甚至夢中也在寫公式...如果你有這樣的經歷,恭喜你,距離成功不遠了。
第三種境界,眾里尋他千百度,驀然回首,那人卻在燈火闌珊處。
當你頓悟了這門知識,回首過來,原來一切並沒有那麼複雜。而這個時候,DAX已經成為了你的必殺技,隨手一用都可以震撼你的老闆和同事。
以上是我總結的十條寶貴經驗,有些也是我自己走過的彎路。我不相信有什麼幾周內成為分析師的一說,或者7天速成一門計算機語言。但我已經看到很多人在學習了DAX數月之後,那種站在Excel的肩膀上,超越Excel,笑看過往的喜悅。
你,到了第幾層境界了呢?
祝好,
微信公眾號PowerBI大師推薦閱讀:
※Power BI 即將放出的黑科技—Microsoft Data Insight Summit精華回顧
※使用Power Query自定義生成日期表
※聚合與Calculate函數
※給新手們的學習建議
TAG:PowerBI | MicrosoftExcel | 数据分析 |