DAX 全稱 Data Analysis eXpressions,是面向 Microsoft Power BI,、Microsoft SQL Server Analysis Services (SSAS)和 Microsoft Power Pivot for Excel 的編程式數(shù)據(jù)分析語言。它創(chuàng)建于 2010 年,,隨 Power Pivot 的第一個版本 PowerPivot for Excel 2010 一起發(fā)布,。隨著時間的推移,DAX 已經(jīng)在商業(yè)智能和 Excel 社區(qū)中逐漸流行起來,。 DAX 的簡單和復雜微軟在官方的介紹中稱 DAX 是一種簡單的語言,。也就是說,DAX 的基本知識簡單易學:你可以在幾小時內(nèi)開始使用,。這確實是事實,,微軟在開發(fā) DAX 的時候從 Excel 中移植了很多函數(shù),它們名稱相同,,參數(shù)用法也類似,。但我想告訴你的是,這種簡單僅限于起步階段。DAX 和大多數(shù)編程語言不同,,它有很多獨特且重要的理論,,一旦涉及到這些概念,比如計值上下文,、迭代和上下文轉(zhuǎn)換,,一切都將變得復雜起來。但不要放棄,!請保持耐心,。一旦你的大腦開始理解這些概念,你就會發(fā)現(xiàn) DAX 確實是一種簡單的語言,,只是需要時間去適應,。 學習 DAX 的誤區(qū)不同于其他語言,DAX 需要你理解它的原理之后才能熟練使用,,如果你習慣于通過學習具體的函數(shù)建立起一門語言的知識體系(比如 Excel 函數(shù)),,請千萬不要將這種習慣帶入到 DAX 的學習中。因為它的一些原理很難通過歸納法(從具體實例推導出普遍規(guī)律的一種方法)來理解,。例如,,對計值上下文(The Evaluation Context)的理解需要用到演繹推理:先接觸理論本身,然后通過案例加深對理論的理解,。我知道許多人不習慣這種學習方式,,他們更喜歡在實踐中學習,先研究如何解決具體問題,,然后通過不斷的練習和積累,,歸納出公式背后的原理。如果你使用這種方式學習,,會常常發(fā)現(xiàn)寫出的公式能得出正確結(jié)果,,但自己卻不明白為什么。 以我的觀察,,有太多的學習者在這上面走了彎路,,他們把之前學習其他語言的方法套用在 DAX 上,以為只要學會了函數(shù)也就掌握了這門語言,。所以在這里我還想再強調(diào)一次,,函數(shù)本身并不復雜,真正的復雜性蘊含于 DAX 公式的計值過程中,,在簡單的計算中你可以忽略它的存在,,而一旦問題變得復雜,公式的計值流就會開始變得難以理解,。 DAX 的優(yōu)勢前文我們提到過,,DAX 可以運行在 Power BI、SQL Server Analysis Services (SSAS)和 Power Pivot for Excel 中,本質(zhì)上它們都是 SSAS 的表格模型,,只是形式略有不同,。Power Pivot for Excel 運行了一個 SSAS 表格模型的本地實例,而 Power BI 使用一個單獨的進程運行一個特殊的表格模型實例,。這是一個基于內(nèi)存的列式數(shù)據(jù)庫分析引擎,。 DAX 引擎DAX 的能力蘊含在 SSAS 表格模型的引擎,我們稱之為 VertiPaq 引擎,,這是它在開發(fā)階段的工程名稱,,大家已經(jīng)習慣用這個名稱代替它的官方用名「xVelocity 內(nèi)存分析引擎」。 Vertipaq 是基于內(nèi)存的列式數(shù)據(jù)庫引擎,,模型的所有數(shù)據(jù)都駐留在內(nèi)存中,。在 Vertipaq 引擎內(nèi)部,數(shù)據(jù)以列式存儲,,而傳統(tǒng)的 SQL 數(shù)據(jù)庫引擎通常使用行式存儲,。簡單的說,行式存儲適合進行事務處理(OLTP),,比如增刪改查,。而列式存儲則適合分析決策(OLAP),比如多維分析,。 列式數(shù)據(jù)庫有幾個優(yōu)點:
在這個基礎(chǔ)上,,基于內(nèi)存的列式數(shù)據(jù)庫還有比硬盤快 10 倍左右的數(shù)據(jù)讀取速度,這也是為什么當今主流的 BI 工具和大數(shù)據(jù)分析工具全部采用內(nèi)存式數(shù)據(jù)庫的原因,。所以 DAX 是非常適合計算的語言,,我曾經(jīng)在Excel Power Pivot 里測試過裝載并分析一億行數(shù)據(jù),理論上完全沒有問題,。關(guān)于 DAX 引擎,,后面會有專門的章節(jié)詳細分析,這里我們只做最簡單的介紹,。 DAX 能分析多少數(shù)據(jù)你已經(jīng)了解了這顆引擎的強大之處,,它絕不是吃素的,它帶給你的一個直觀感受就是數(shù)據(jù)處理能力的飛躍,。
與其他 BI 工具相比,,Power BI 的一大特點就是擁有自己的數(shù)據(jù)引擎和分析語言,靠的是微軟在數(shù)據(jù)庫領(lǐng)域深厚的積累,,絕非一日之功,。 動態(tài)計算的能力除了能分析大量的數(shù)據(jù),DAX 還可以根據(jù)計值環(huán)境(篩選上下文)的變化,,自動重新計算,。這是商業(yè)分析一項非常重要的能力,在解讀數(shù)據(jù)報告的時候,,我們需要基于業(yè)務特點不斷的提出新的問題,,并且這些問題需要立即得到回答,這樣才能最大程度挖掘數(shù)據(jù)的價值,,而不是像過去那樣,,分析師重新寫 SQL,重新運行,,然后所有人等待結(jié)果,。 這也是 DAX 和 Excel 公式、VBA 或者 PQ 的一個最大的不同,,這些語言都沒法做到 DAX 一樣的靈活性,,它們必須重新編輯公式、再次點擊運行然后等待結(jié)果產(chǎn)生,,而DAX 可以默默幫你完成所有步驟,。允許你以思維的速度展開分析。 這種動態(tài)計算的能力也是所有 BI 工具的標配,,并非 Power BI 獨有,。值得一提的是很多分析語言,比如 SQL,,Python,,R 也可以實現(xiàn)類似的靈活性,比如 R 的 Shiny 可以動態(tài)計算,。但需要做二次開發(fā),,不適合沒有技術(shù)背景的普通業(yè)務人員,, DAX 可以根據(jù)環(huán)境的變化自動重新計算,但嚴格來說,,它不是動態(tài)語言,,后者編程語言中的一個專有名詞:動態(tài)類型語言,是指數(shù)據(jù)類型的檢查是在計算時進行的,。用動態(tài)類型語言編程時,,不用給變量指定數(shù)據(jù)類型,語言會在你第一次賦值給變量時,,在內(nèi)部記錄數(shù)據(jù)類型 總結(jié)「一身轉(zhuǎn)戰(zhàn)三千里,,一劍可當百萬師」,DAX 是一門強大的語言,,它讓沒有任何 IT 背景的普通人借助 Excel 這樣的平民工具就可以處理幾百萬,、上千萬行的數(shù)據(jù);完備的函數(shù)體系允許你將復雜的業(yè)務邏輯抽象成一個個公式,,根據(jù)外部篩選條件的變化,,這些公式可以瞬間完成計算并返回結(jié)果。在過去,,這種分析可能需要依賴 IT 長達幾小時或數(shù)天的反饋才能完成,。借助 DAX,普通業(yè)務人員對數(shù)據(jù)的分析能力將可以實現(xiàn)質(zhì)的飛躍,,還可以更容易的從 Excel 切換到 SSAS 這樣的企業(yè)級 BI 工具,。 DAX 不是一門輕易就可以掌握的語言,你需要學習它的理論,,并通過做題來反復實踐,,在這個過程中你的認知會一次次的建立,又一次次被推翻,,不要灰心,,這是所有初學者的必經(jīng)之路,你并不孤獨,。不要被眼前的挫折困擾,,因為你的所有投入終將獲得回報。 千里之行,,始于足下,,讓我們從這里開始,一起進入這個全新的領(lǐng)域,。 本文經(jīng)「原本」原創(chuàng)認證,,作者 PowerBI 極客 |
|