PowerBI DAX學習路線圖 增強版(2018版)
Excel120 在 3月初隨著SQLBI.com的改版,也進行了學習補充,並就最新的Power BI學習路線圖做了釋出。本文釋出為增強版,對之前的內容做一個更詳盡的說明。
DAX級別劃分
如果將PowerBI DAX學習者比作修行煉的忍者,則可以分為三個級別:
Power BI只要拖拽欄位就可以實現視覺化僅僅是表象,在其背後的 Vertipaq 引擎提供更加強大的動力支援;一旦開始寫度量值就會一頭霧水,而限於國內資料很少,大部分國內圖書仍然是帶大家入門,要解決實際業務的複雜問題並不容易。
如果真正度過第一個坎,便可以有以一當十之感覺,曾經一度迷戀Excel的公式的靈活的強大以及視覺化的靈活多樣甚至一去不復返了,這是一種變革性的魔力。
即使完全掌握了DAX的使用,而對於如何幫助實際企業完成數字化轉型,進一步講就是從業務中發現真正的指標(index),一旦發生變化如何驅動行為,以及如何在業務中計算其度量值(Measure),最終形成一套標準化指標體系(Metric)依然是個難題,因為在這部分甚至不是一個人能決定或完成的。雖然這表面與Power BI DAX無關,但Power BI DAX也許是幫助在業務中實現這些的基礎,忘掉技術,從頭再來。
DAX初學者
DAX初學者,剛剛進入DAX世界直到可以寫簡單的DAX表示式處理問題。
在這個階段的正面表現包括:
- 驚訝於DAX的能力和使用方式與Excel是那麼的不同
- 可以使用 SUM , MAX , VALUES , DISTINCTCOUNT 等函式
- 理解了行上下文與篩選上下文
- 理解了上下文轉換
- 理解了篩選的傳遞
- 可以使用 FILTER( ALL( T ) , T[C] = X ) 結構
- 可以使用時間智慧函式,如:DATEADD等
- 可以使用簡單的分組函式,如:SUMMARIZE等
在這個階段的制約表現包括:
- 不理解CALCULATE所有執行細節流程與先後順序,因此無法自信於自己的公式邏輯
- 不理解迭代器這種偏技術的說法
- 不知道SUM是SUMX的變形
- 不知道VAR的早期繫結或晚期繫結
- 無法處理多對多的關係以及不知道擴充套件表原理
- 有時會遇到產生迴圈依賴的錯誤不知道咋回事
- 遇到RANKX會頭暈
- 沒開始使用DAX Studio
這類朋友通常希望Power BI能想他理想地一樣美好,但隨著業務的複雜提升,往往開始無法滿足這個心願。有一部分朋友會選擇繼續晉升到忍者階段。
DAX忍者
DAX忍者,掌握了資料建模並可使用DAX處理各種實際問題。
在這個階段的正面表現包括:
- 可以使用時間智慧類計算
- 可以實現參數列
- 可以實現使用靜態分組
- 可以實現ABC分析
- 理解了擴充套件表
- 正確使用VAR
- 使用ADDCOLUMNS( VALUES( T[C] ) , "NewColumn" , << expression >> )
- 廣泛使用DAX表函式
- 使用DAX Studio
正是因為這些正面表現,使得這個階段的能力可以處理很多在傳統Excel中無法完成的工作,並依託自己的業務能力遠遠不再需要依賴於IT,有種:“給我一個資料庫密碼,就能撬起企業資料”的讚歎。
在這個階段的制約表現包括:
- 開始考慮效能的問題
- 開始思考 ALL 到底在做什麼
- 開始意識到 基表 的概念
- 開始研究到 日期表 的原理(例如:為何不需要標記為日期表)
- 開始完整理解 CALCULATE 的完整執行順序
- 如何測量DAX的效能
- 開始考慮如何做整體建模
- 開始使用 TREATAS
這些疑惑的解除往往會尋求在<<DAX聖經>>的閱讀中獲得答案並實戰。這類朋友開始習慣用DAX的思維習慣思考問題,並感受到DAX:simple but not easy。
DAX禪師
因為我不是DAX禪師,所以不知道怎麼定義,但我希望禪師是這樣的,也許和SQLBI有些類似。
DAX禪師,精通了DAX聖經及效能優化,對DAX各處細節瞭如指掌,分享並幫助他人成長。
在這個階段的正面表現包括:
- 理解Power BI底層Vertipaq引擎工作原理
- 理解FE(公式引擎)與SE(儲存引擎)的特性
- 理解應該如何讓FE與SE支援DAX執行得更好
- 理解並能優化資料模型
- 可以用DAX實現資料模型能支援的所有業務問題
- 可以量化測試DAX公式的效能並找到瓶頸
- 可以理解Vertipaq的邏輯查詢計劃與物理查詢計劃
- 可以理解SE對Vertipaq的查詢
- 能夠對DAX公式做效能優化
達到這些級別的人,例如SQLBI的大師會發出這樣的感慨:
We started learning DAX in 2010 and we are writing this book in 2015. Unbelievably, it took us five years to master the code of DAX and of the engine, with a lot of discussions and meetings with the development team in the meantime.
Doing that is still hard for us, too.
-- DAX聖經 第十一章末
大師的意思是:(添油加醋版)
別看表面上我們很牛,我們從2010年就可以搞這個了(在此前已經是SQL方面的多年使用者),搞了5年才說自己掌握了DAX以及底層機制,也才寫出了這本書,這些年不知道因為這麼多坑找了微軟開發組多少次去和他們撕,開了多少會來搞清楚這些問題,哎,能讀到這書,只要多讀幾次,比我們都幸運。如果你感覺難,那太正常了,我們現在都仍然覺得難呢。
經過對大師部落格、文章以及書籍的認真學習,體會到他們應該在思考包括但不限於:
- 把DAX的內容更加體系化和簡單化地揭示出來,他們不斷有著作和培訓視訊誕生
- 開發出可以輔助的工具
- 更廣泛的傳播給其他人
- 幫助到所有遇到DAX麻煩的人
- ...
再有就是我也領悟不到的東西了。很難想象他們從那個2010年,應該是Excel 2010的Power Pivot開始的,看到現在的Power BI,真心不會去用Excel 2010的Power Pivot。
學習路線圖
PowerBI的老夥伴都知道,學習PowerBI的問題最終會歸結為學習DAX的問題。而DAX存在於微軟的三套工具中,他們分別是:
- Power BI系列(包括Power BI Desktop以及Power BI服務)
- Excel PowerPivot
- SQL Server Analysis Service
這些工具的物件使用者略有不同,包括:
- 從PowerBI開始接觸整個體系,一般是資料建模分析人員。
- 從Excel PowerPivot開始接觸整個體系,一般是Excel使用者,如:財務。
- 從SSAS開始接觸整個體系,一般是IT技術人員。
下面分別說明SQLBI更新的學習路線圖:
如果從PowerBI開始
如果從Excel開始
如果從IT技術(SSAS)開始
SQLBI.COM 學習路線圖參考:https://www.sqlbi.com/guides/dax/
強烈建議從Power BI開始。注意:而不是Excel PowerPivot。
重點書籍
在學習路線圖中陸續出現了幾本圖書,它們的學習順序大致為:
其中,免費圖書為:
其中,免費視訊為:
https://www.sqlbi.com/p/introducing-dax-video-course/
另外,大部分圖書的英文電子版已共享於Excel120 QQ群檔案。
Power BI DAX 自我測評
對於有一定DAX基礎的夥伴,建議可以可以先評估自我的Power BI DAX水平:
或
點選答題
提交您的Email地址或加入Excel120交流群,可以收到一份詳盡的試題詳解:
根據詳解中給出了考點來明確自己存在的薄弱環節,再返回學習書籍。如果沒有獲得這個答案,可以關注Excel120留言索取
終極學習法
如果想徹底學會一件事物,就要徹底地學。如何才算徹底?窮舉式地全部研究(而不是看)完。
對於一項技術,正如SQLBI大師所言,越研究越是坑,能爬出來就更加開朗。如果說有捷徑的話,就是精讀有限的被斟酌過最多次的書。什麼叫斟酌,就是裡面的每個用詞都仔細地考慮過,所以作者必然是操作過所有細節的,以<<DAX聖經>>為例,我們來看看它被斟酌過的地方。
例如,對於 ALL 這個函式的解釋,微軟的DAX文件是這樣解釋的:( 閱讀原文 )
Returns all the rows in a table, or all the values in a column, ignoring any filters that might have been applied. This function is useful for clearing filters and creating calculations on all the rows in a table.
中文是:
返回表中的所有行或者返回列中的所有值,同時忽略可能已應用的任何篩選器。 此函式可用於清除篩選器並對錶中的所有行建立計算。
看一個例子,如果 DimDate表 有2556條記錄,那麼 CountRows( DimDate ) 返回2556條記錄,如果與 DImDate 關聯的 FactSales 在其中的1096天有銷售記錄,那麼以下3個DAX表示式結果應該是多少:
- Calculate( CountRows( DimDate ) , FactSales )
- Calculate( CountRows( DimDate ) , All( FactSales ) )
- Calculate( CountRows( DimDate ) , Filter( All( FactSales ) , true ) )
答案是:公式1返回1096,公式2返回2556,公式3返回1096。請思考為什麼?
DAX聖經中給出的答案在:Page 444。但書中第一次提及ALL的使用規則是在:Page 92。關於對ALL的英文描述包括:
- Return all rows ... 中文是 返回所有行
- Remove filters ... 中文是 移除 篩選器
- Ignore filters ... 中文是 忽略 篩選器
如果您仔細考究它們是有嚴重區別的:
- 返回所有行不意味著篩選器被移除了,可能是ALL的特殊性,可能篩選器依然存在,篩選器會影響其他計算。
- 移除篩選器,就是這個篩選器沒了,沒了後那會不會返回內容,沒了的話那別的計算也不會再受影響。
- 忽略篩選器,就是計算過程中對此視而不見,忽略的潛臺詞就是依然存在,並未移除,那別的計算會繼續受到影響。
怎麼樣?有沒有凌亂但有很細微的差異的感覺。
這裡列舉微軟文件和SQLBI的說明,就是為了比對,官方文件的記載可能真沒有考慮到這麼細緻;而SQLBI的書中則在每一個必要的環節都有所顧及,而如果是翻譯的話(或者不加強調的用白話描述),能夠在合理的地方做出這樣精準的描述恐怕真的是太難了。
因此,研習英文版的DAX聖經是非常有必要的。
如果還有餘力,建議研習的著作包括:
最重要的一件事情是,您應該關注:
相關文章
- Python 基礎學習路線圖【有PDF版】Python
- Java學習課件框架,12月最新Java學習路線圖(完整詳細版)Java框架
- 最新Java學習路線圖(完整詳細版)-千鋒Java教學出品Java
- Eudic歐路詞典 for Mac(英語學習工具) v4.5.3增強啟用版Mac
- 大資料初學者必備的詳細版學習路線圖大資料
- 小米盒子3增強版評測 小米盒子3 增強版區別
- Java排序理解增強版Java排序
- quartz叢集增強版🎉quartz
- Android 開發者學習路線(2020 版)Android
- Flutter 學習路線圖Flutter
- SwiftUI 學習路線圖SwiftUI
- Vue學習路線圖Vue
- Java 學習路線圖Java
- Hive學習路線圖Hive
- oracle學習路線圖Oracle
- JavaScript 學習路線圖JavaScript
- CSS 學習路線圖CSS
- API 學習路線圖API
- Mac版強大的滑鼠增強推薦:BetterMouse中文版Mac
- DirectX修復工具增強版
- Eudic歐路詞典 for Mac v4.5.6增強啟用版:強大的詞典,實用的學習工具Mac
- Java學習路線(完整詳細2019版)Java
- 【強化學習】強化學習/增強學習/再勵學習介紹強化學習
- C++學習路線圖C++
- Android 學習路線圖Android
- Python學習路線圖Python
- Hadoop學習路線圖Hadoop
- oracle 的學習路線圖Oracle
- 新手如何學習Java——Java學習路線圖Java
- 小米遊戲本和增強版區別對比 小米遊戲本增強版升級了什麼?遊戲
- 資料庫學習線路圖資料庫
- 大資料學習路線圖大資料
- 公務員考試學習路線圖
- Facebook增強版LASER開源:零樣本遷移學習,支援93種語言遷移學習
- JavaCPP快速入門(官方demo增強版)Java
- 滑鼠增強工具:BetterMouse for Mac中文版Mac
- 滑鼠增強器:BetterMouse for mac 中文版Mac
- 【MySQL】5.7版本 Semisync Replication 增強MySql