PowerBI DAX學習路線圖 增強版(2018版)

b10l07發表於2018-03-22
3370562-bae8f4e741d482e1.png

Excel120 在 3月初隨著SQLBI.com的改版,也進行了學習補充,並就最新的Power BI學習路線圖做了釋出。本文釋出為增強版,對之前的內容做一個更詳盡的說明。

DAX級別劃分

如果將PowerBI DAX學習者比作修行煉的忍者,則可以分為三個級別:

3370562-02532e859e124add.png

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開始

3370562-68af8aefe9fe601b.png

如果從Excel開始

3370562-7eda36fece410f01.png

如果從IT技術(SSAS)開始

3370562-a1c758e37e354b26.png

SQLBI.COM 學習路線圖參考:https://www.sqlbi.com/guides/dax/

強烈建議從Power BI開始。注意:而不是Excel PowerPivot。

重點書籍

在學習路線圖中陸續出現了幾本圖書,它們的學習順序大致為:

3370562-e60a46c7f9d202fb.png

其中,免費圖書為:

3370562-6f11b10cb8dbee0f.png

下載地址:https://aka.ms/Cj3zc4

其中,免費視訊為:

https://www.sqlbi.com/p/introducing-dax-video-course/

另外,大部分圖書的英文電子版已共享於Excel120 QQ群檔案。

Power BI DAX 自我測評

對於有一定DAX基礎的夥伴,建議可以可以先評估自我的Power BI DAX水平:

3370562-5736e4c8ea75ca2f.png


點選答題

提交您的Email地址或加入Excel120交流群,可以收到一份詳盡的試題詳解:


3370562-1d83ebe757231af6.png

根據詳解中給出了考點來明確自己存在的薄弱環節,再返回學習書籍。如果沒有獲得這個答案,可以關注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表示式結果應該是多少:

  1. Calculate( CountRows( DimDate ) , FactSales )
  2. Calculate( CountRows( DimDate ) , All( FactSales ) )
  3. 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聖經是非常有必要的。

如果還有餘力,建議研習的著作包括:


3370562-19bb0230dfa3e10f.png

最重要的一件事情是,您應該關注:

3370562-44bd71a64b02dfb6.png

相關文章