快速入門:30 分鐘學會 DAX 基本概念

套用到
Microsoft 365 Excel Excel 2024 Excel 2021 Excel 2019 Excel 2016

此快速入門程式適合剛接觸 Excel 中的 Power Pivot 或使用 SQL Server Data Tools 撰寫的表格模型專案的使用者。 本書旨在快速且簡易地介紹如何利用資料分析表達式 (DAX) 來解決多項基本的資料建模和分析問題。 這個主題包含概念性資訊、一系列可完成的任務,以及一些用來測試你所學內容的小測驗。 完成這個主題後,你應該能很好地理解 DAX 中最基本的基本概念。

什麼是 DAX?

DAX 是一組函數、運算子和常數,可以用來計算並回傳一個或多個值。 簡單來說,DAX 幫助你從模型中已有的資料創造新資訊。

為什麼 DAX 如此重要?

建立工作簿並匯入一些資料很簡單。 你甚至可以建立樞紐分析表或樞紐分析圖,顯示重要資訊而無需使用任何 DAX 公式。 但如果你需要分析多個產品類別及不同日期範圍的關鍵銷售數據呢? 或者,你需要將來自不同資料來源多個資料表的重要庫存資料合併? DAX 公式提供此功能及許多其他重要功能。 學會如何建立有效的 DAX 公式,將幫助你最大化利用資料。 當你獲得所需資訊後,就能開始解決影響你利潤的真實商業問題。 這就是商業智慧,DAX 會幫助你達成目標。

先決條件

你可能已經熟悉在 Microsoft Excel 中建立公式。 這些知識對理解 DAX 很有幫助,但即使你沒有 Excel 公式的經驗,這裡描述的概念也能幫助你立刻開始建立 DAX 公式並解決實際的商業智慧問題。

我們將專注於理解用於計算的 DAX 公式。 你應該已經熟悉 計算欄位測度 的基本概念 (也就是計算場) ,這兩者都在 Power Pivot 幫助中有詳細說明。 你也應該熟悉 Excel 中的 Power Pivot 製作環境和工具。

範例工作簿

學習 DAX 最好的方法是建立一些基本公式,搭配實際數據,自己看看結果。 這裡的範例和任務使用 Contoso 範例 DAX Formulas.xlsx 工作手冊。 你可以從 http://go.microsoft.com/fwlink/?LinkID=237472&clcid=0x409 下載這本練習簿。 當你把工作簿下載到電腦後,打開它,然後打開 Power Pivot 視窗。

讓我們開始吧!

我們將以三個非常重要的基本概念為框架,將 DAX 架構為核心:語法、函式與上下文。 當然,DAX 中還有其他重要概念,但理解這三個概念將成為建立 DAX 技能的最佳基礎。

語法

在你創造自己的公式之前,讓我們先看看 DAX 公式的語法。 句法包含構成公式的各種元素,更簡單地說,就是公式的書寫方式。 舉例來說,我們來看看一個簡單的 DAX 公式,用來為計算欄位(稱為 Margin)中每一列建立新的資料 (值) ,在 FactSales 表格中: (公式文字顏色僅供說明用途)

計算結果欄公式

此公式的語法包含以下元素:

  1. 等號算符 (=) 表示公式的起始,當計算出此公式時,會回傳一個結果或值。 所有計算值的公式都會以等號開頭。
  2. 參考欄位 [SalesAmount] 包含我們想要減去的數值。 公式中的欄位參考總是被括號 [] 包圍。 與 Excel 公式會參考儲存格不同,DAX 公式總是參考欄位。
  3. 減法 ( ) 數學運算子。
  4. 參考欄位 [TotalCost] 包含我們想從 [SalesAmount] 欄位的值中扣除的值。

在嘗試理解如何閱讀DAX公式時,將每個元素拆解成你每天思考和使用的語言通常很有幫助。 例如,你可以將這個公式解讀為:

在 theFactSalestable 中,對於 Margin 計算欄位的每一列,請將 [TotalCost] 欄位的 (-) 值從 [SalesAmount] 欄位的值減去,計算出 (=) 值。

讓我們來看看另一種公式,它用於一個度量:

計算結果欄公式

此公式包含以下語法元素:

  1. 該指標名稱為銷售金額總和。 測度公式可以包含測度名稱、冒號,再接計算公式。
  2. 等號算符 (=) 表示計算公式的起始。 計算出來後,會回傳一個結果。
  3. 函式 SUM 會將 [SalesAmount] 欄位中的所有數字加總起來。 你之後會學到更多關於函數的知識。
  4. 括號 () 包圍一個或多個論點。 所有函數至少需要一個參數。 參數會將一個值傳遞給函式。
  5. 參考表 FactSales。
  6. FactSales 表格中引用的欄位 [SalesAmount]。 有了這個論點,SUM函數就知道要在哪個欄位聚合SUM。

你可以將此公式解讀為:

對於名為 Sales Amount 的指標,計算 (=) theFactSalestable [SalesAmount] 欄位中所有值的總和。

當置於樞紐分析表欄位列表中的值下拉區時,此指標會計算並回傳樞紐分析表中每個儲存格所定義的值,例如美國的手機。

請注意,這個公式與我們用於利潤計算欄的公式有幾點不同。 特別地,我們引入了一個函數 SUM。 函數是預先寫好的公式,方便進行複雜的計算與操作,使用數字、日期、時間、文字等。 你之後會學到更多關於函數的知識。

與先前計算的利潤率欄位不同,你可以看到欄位 [SalesAmount] 前面有該欄位所屬的 FactSales 表格。 這稱為完全限定欄位名稱,因為它包含了資料表名稱前的欄位名稱。 同一表格中被參考的欄位不需將表格名稱包含在公式中。 這會讓引用多欄的長公式變得更短且更易閱讀。 不過,即使在同一個表格中,也最好在測度公式中包含表名稱。

注意

如果資料表名稱包含空格、保留關鍵字或不允許的字元,你必須用單引號包住資料表名稱。 若表格名稱包含 ANSI 英數字字元範圍外的字元,無論您的地點是否支援該字元集,也必須以引號包起來。

你的公式語法正確非常重要。 在大多數情況下,如果語法不正確,會回傳語法錯誤。 在其他情況下,語法可能正確,但回傳的值可能不是你預期的。 Power Pivot (與 SQL Server Data Tools) 包含 IntelliSense;一項功能,幫助你選擇正確的元素,從而建立語法正確的公式。

讓我們來創造一個簡單的公式。 這個任務將幫助你更深入理解公式語法,以及公式列中 IntelliSense 的功能如何幫助你。

任務:建立一個簡單的計算欄位公式

  1. 如果你還沒在 Power Pivot 視窗,可以在 Excel 的 Power Pivot 功能區點擊 Power Pivot 視窗
  2. 在 Power Pivot 視窗中,點擊 FactSales 表格 (分頁) 。
  3. 捲動到最右邊的欄位,然後在欄位標題點選 新增欄位
  4. 點擊模型設計視窗頂部的公式列。
    PowerPivot 公式列
    你的游標現在會出現在公式條中。 公式列是你可以輸入計算欄位或計算欄位公式的地方。
    讓我們花點時間看看公式欄左側的三個按鈕。
    公式條
    當公式列中的游標啟動時,這三個按鈕就會啟動。 最左邊的按鈕 X 鍵,其實就是取消按鈕。 請點它。 你的游標不再出現在公式列中,取消按鈕和勾選按鈕也不再出現。 再點一次公式列。 取消按鈕和勾選按鈕現在又重新出現了。 這表示你已經準備好開始輸入一個公式了。
    勾選按鈕就是檢查公式按鈕。 在你輸入公式之前,它的作用不大。 我們待會兒再回來談。
    點擊 效果 器按鈕。 你會看到一個新的對話框出現;插入函式對話框。 插入函式對話框是開始輸入 DAX 公式最簡單的方式。 稍後我們會在建立測度時加入函數到公式,但目前你不需要在計算出的欄位公式中加入函數。 請關閉「插入函式」對話框。
  5. 在公式欄中輸入等號 = ,然後輸入一個開括號 [。 你會看到一個小視窗,顯示 FactSales 表格中所有欄位。 這就是 IntelliSense 的實際應用。
    因為計算欄位總是在你所在的活動資料表中建立,因此不需要在欄位名稱前加上資料表名稱。 請往下滑,然後雙擊 [SalesQuantity]。 你也可以捲動到你想要的欄位名稱,然後按 Tab 鍵。
    你的游標現在在 [SalesQuantity] 右側啟用。
  6. 先輸入一個空間,然後輸入減法運算子—— (負號) ,接著再輸入另一個空間。
  7. 現在,再輸入另一個開口括號 [。 這次,選擇 [ReturnQuantity] 欄位,然後按下 Enter。
    如果遇到錯誤,請仔細檢查你的語法。 如有需要,請將其與先前描述的邊際計算欄位中的公式進行比較。
    按下 Enter 完成公式後,「 計算」 一詞會出現在 Power Pivot 視窗底部的狀態列。 即使你剛計算出超過三百萬筆的新數值,速度也很快。
  8. 右鍵點擊欄位標頭,並將欄位重新命名為 NetSales。

就是這麼簡單! 你只是創造了一個簡單卻非常強大的 DAX 公式。 對於 FactSales 資料表中的每一列,NetSales 公式會將 [ReturnQuantity] 欄位的值從 [SalesQuantity] 欄位的值減去,計算出一個值。 注意我們剛剛說的是「每一排」。 這是 DAX 另一個非常重要概念的一瞥;列情境。 你之後會學到更多關於列上下文的知識。

在 DAX 公式中輸入運算子時,有一點非常重要要了解你所使用的參數中的資料型別。 例如,如果你輸入以下公式 = 1 & 2,回傳的值會是文字值「12」。 這是因為 & 符號 (&) 運算子是用於文字串接。 DAX 將此公式解讀為:將值 1 作為文字,並將值 2 加入文字來計算結果。 現在,如果你輸入 = 1 + 2,DAX 的公式讀作:將數值 1 加上數值 2 來計算結果。 結果當然是「3」,一個數值。 DAX 根據公式中的運算子計算結果值,而非基於參數中使用的欄位資料型態。 DAX 中的資料型別非常重要,但不在本快速入門的範圍內。 欲了解更多關於DAX公式中資料型態與運算子的資訊,請參閱Books Online中的DAX參考文獻 (http://go.microsoft.com/fwlink/?LinkId=239769&clcid=0x409) 。

我們再試一次。 這次,你將透過輸入公式並使用 IntelliSense 來建立一個指標。 如果你不完全理解公式,不用太擔心。 這裡重要的是學會如何用多個元素以正確的語法組合出一個公式。

任務:建立測度公式

  1. FactSales 表格中,點擊計算區的任一空格。 這是電源樞紐視窗中表格下方的空白格子區域。

PowerPivot 計算區域

  1. 在公式列中輸入名稱 Previous Quarter Sales:
  2. 輸入等號 = 以開始計算公式。
  3. 輸入前幾個字母 CAL,然後雙擊你想用的功能。 在這個公式中,你要使用 CALCULATE 函數。
  4. 輸入開頭括號 ( 以開始傳給 CALCULATE 函式的參數。
    請注意,在輸入開頭括號後,IntelliSense 會顯示 CALCULATE 函式所需的參數。 你稍後會學到關於爭論的知識。
  5. 輸入 FactSales 表格的前幾個字母,然後在下拉選單中雙擊 FactSales[Sales]。
  6. 輸入逗號 (,) 以指定第一個篩選條件,接著輸入 PRE,然後雙擊 PREVIOUSQUARTER 功能。
    選擇 PREVIOUSQUARTER 函式後,會出現另一個開頭括號,表示需要另一個參數;這次是為了前區活動。
  7. 輸入前幾個字母 Dim,然後雙擊 DimDate[DateKey]。
  8. 在 PREVIOUSQUARTER 函式和 CALCULATE 函式中,輸入兩個閉尾括號,關閉 ) ) 。
    你的配方現在應該是這樣:
    前一季銷售:=計算 (FactSales[Sales],前季 (DimDate[DateKey]) )
  9. 點擊公式欄上的「檢查公式」按鈕以驗證公式。 如果出現錯誤,請檢查語法中的每個元素。

你做到了! 你只是用 DAX 建立了一個指標,而且這可不容易。 這個公式會根據樞紐分析表或樞紐分析圖中套用的篩選條件,計算上一季的總銷售額。

你剛剛接觸到DAX公式的幾個重要面向。 首先,這個公式包含兩個功能。 請注意,PREVIOUSQUARTER 函式是巢狀的,作為參數傳遞給 CALCULATE 函式。 DAX 公式最多可包含 64 個巢狀函式。 一個公式不太可能包含這麼多巢狀函數。 事實上,這樣的公式非常難以建立和除錯,而且速度可能也不快。

在這個公式裡,你也用了濾鏡。 過濾器可以縮小計算範圍。 在這個例子中,你選擇了一個濾波器作為參數,實際上那是另一個函式。 你之後會學到更多關於濾波器的知識。

最後,你用了 CALCULATE 功能。 這是 DAX 中最強大的功能之一。 當你撰寫資料模型並建立更複雜的公式時,你很可能會多次使用這個函式。 討論 CALCULATE 函式不在本快速入門指南的範圍之外,但隨著你對 DAX 的了解加深,請特別注意這部分。

注意

通常,若要在 DAX 公式中使用時間智慧函數,必須透過「標記為日期表」對話框指定唯一日期欄位。 在 Contoso DAX 公式 Samples.xlsx 工作手冊中,DimDate 表格中的 DateKey 欄位被選為唯一日期欄位。

額外加分

你可能會問:「我能創造出最簡單的 DAX 公式是什麼?」 答案是「你不必用的公式」。 而這正是你在度量中使用標準聚合函數時所能做到的。 幾乎所有資料模型都需要對彙總資料進行篩選與計算。 例如,你之前看到的銷售金額總和指標中的 SUM 函數,就是用來將某欄中所有數字加總的。 DAX 還包含其他幾個彙總數值的功能。 你可以利用 AutoSum 功能,使用標準聚合自動建立公式。

額外加分任務:利用自動加和功能建立衡量公式

  1. 在 FactSales 表格中,捲動到 ReturnQuantity 欄位,然後點擊欄位標頭以選取整欄。
  2. 「主頁 」分頁,在「 計算 」群組的色區,點擊 自動加和 按鈕。

PowerPivot 中的自動加總

點擊 自動加總旁邊的向下箭頭,然後點 選平均 () 也能看到其他標準的聚合功能。

立即建立一個名為 Average of ReturnQuantity 的新指標:後接公式 =AVERAGE ([ReturnQuantity]) 。

這不是很簡單嗎? 當然,並非所有你創造的公式都這麼簡單。 但透過使用自動加和功能,你可以用標準的彙總計算快速且簡單的公式。

這應該能讓你對 DAX 公式中使用的語法有相當好的理解。 你還被介紹了一些很酷的功能,比如 IntelliSense 和 AutoSum,幫助你快速、簡單且準確地製作公式。 當然,語法還有很多可以學的。 一個不錯的地方是 DAX 參考書或 SQL Books Online。

語法快速測驗

  1. 公式欄上的這個按鈕是做什麼的?
    函數按鈕
  2. 在 DAX 公式中,欄位名稱周圍總是有什麼?
  3. 你會如何寫出以下公式:
    在 DimProduct 表格中,對於 UnitMargin 計算欄位的每一列,是否要用 UnitPrice 欄位的值減去 UnitCost 欄位的值來計算一個值

答案會在本主題末尾提供。

函數

函式是預先定義的公式,透過特定值(稱為參數)以特定順序或結構進行計算。 參數可以是其他函式、其他公式、欄位參考、數字、文字、邏輯值如 TRUE 或 FALSE,或是常數。

DAX 包含以下功能類別:日期與時間、資訊、邏輯、數學、統計、文字及時間智慧功能。 如果你熟悉 Excel 公式中的函數,許多 DAX 函式看起來會很相似;然而,DAX 函式在以下方面具有獨特性:

  • DAX 函式總是參考完整的欄位或資料表。 如果你只想使用表格或欄位的特定值,可以在公式中加入篩選器。
  • 如果你需要逐列自訂計算,DAX 提供函式,讓你使用當前列值或相關值作為參數,執行依情境不同的計算。 你之後會更了解背景。
  • DAX 包含許多回傳資料表而非值的函式。 該表格不會顯示,但用於提供其他函式的輸入。 例如,你可以檢索一個表格,然後計算其中不同的值,或是計算跨過濾表格或欄位的動態求和。
  • DAX 包含多種時間情報功能。 這些函式讓你能定義或選擇日期範圍,並根據它們進行動態計算。 例如,你可以比較平行期間的總和。

有時候很難知道公式中需要使用哪些函數。 Power Pivot 以及 SQL Server Data Tools 中的表格模型設計器,包含了「插入函式」功能,這是一個對話框,幫助你依類別選擇函式,並為每個函式提供簡短說明。

插入函數

讓我們建立一個新公式,裡面包含一個你將透過「插入函式」功能選擇的函式:

任務:使用 Insert Function 為公式加入函數

  1. 在 FactSales 表格中,捲動到最右邊的欄位,然後在欄位標題點選 新增欄位
  2. 在公式欄中,輸入 a 等號,=。
  3. 點擊 「插入功能 」按鈕。 插入函數 這會開啟 「插入函式 」對話框。
  4. 「插入函式 」對話框中,點選「 選擇分類 清單」方塊。 預設情況下,會選擇 All ,且 All 類別中的所有函式列於下方。 函數很多,所以你會想篩選函數,這樣更容易找到你想要的函數類型。
  5. 對於這個公式,你要回傳一些已經存在於另一個資料表的資料。 為此,你會使用篩選器類別中的函式。 請點選 篩選類別 ,然後在 選擇函式中往下滑,雙擊「相關」函式。 點擊 確定 以關閉 「插入函式 」對話框。
  6. 使用 IntelliSense 幫助你找到並選擇 DimChannel[ChannelName] 欄位。
  7. 關閉公式,然後按下 Enter。
  8. 按下 Enter 完成公式後,「計算」一詞會出現在 Power Pivot 視窗底部的狀態列。 現在你會看到你剛剛在 FactSales 表格中建立了一個新的欄位,裡面有來自 DimChannel 表格的通路資訊。
  9. 把專欄改名為 Channel。
    你的公式應該是這樣:=相關 (DimChannel[ChannelName])

你剛剛被介紹到另一個非常重要的功能,DAX 裡的 相關 功能。 RELATED 函式會回傳另一個資料表的值。 只要你目前所在的資料表和包含你想要的值的那個資料表之間有關聯,你就可以使用 RELATED。 當然,相關功能有無限可能。 在這種情況下,你現在可以在 FactSales 表格中包含每筆銷售的銷售通路。 你現在可以將 DimChannel 表格從樞紐分析表欄位列表中隱藏,讓瀏覽更方便,只看到你真正需要的最重要的資訊。 就像前面提到的 CALCULATE 函數一樣,RELATED 函數也非常重要,你很可能會多次使用。

如你所見,DAX 中的函式可以幫助你創造非常強大的公式。 我們其實只談了基本的功能。 隨著你的DAX技能提升,你會用各種不同的函式來創造公式。 學習所有 DAX 函數細節的最佳地方之一是 DAX) 參考資料分析表達式 (

功能快速測驗

  1. 函式總是引用什麼?
  2. 一個公式可以包含多個函數嗎?
  3. 你會用什麼類別的函式來將兩個文字串接成一個字串?

答案會在本主題末尾提供。

內容

情境是 DAX 中最重要的概念之一。 DAX 中有兩種上下文類型;列上下文與篩選上下文。 我們先來看看列的上下文。

列上下文

列上下文最容易被認為是當前列。 例如,還記得你之前學語法時看到的「邊際計算」欄位嗎? 公式 =[SalesAmount] - [TotalCost] 計算表格中每一列的利潤欄位值。 每列的數值是從同一列的另外兩個欄位 [SalesAmount] 和 [TotalCost] 的值計算而來。 DAX 能計算 Margin 欄位每一列的值,因為它有上下文:每一列,它會從 [SalesAmount] 欄位的值中扣除。

在下方所選格子中,當前列的價值 $49.54 是從 [SalesAmount] 欄的 $101.08 減去 [TotalCost] 欄位的 $51.54 值。

PowerPivot 中的資料列競賽

列上下文不只適用於計算出來的欄位。 當公式有函式能套用篩選器來識別表格中單一列時,列上下文也同樣適用。 該函式會對被過濾的資料表的每一列套用一個列上下文。 這種列上下文最常適用於度量。

篩選上下文

篩選上下文比列上下文更難理解。 你最容易理解的濾波器上下文是:在計算中應用一個或多個濾波器來決定結果或值。

過濾上下文不存在於列上下文的位置;相反地,它同時適用於列上下文。 例如,為了進一步縮小計算中要包含的值,你可以套用一個篩選上下文,不僅指定列上下文,還只指定該列上下文中特定值 (篩選器) 。

過濾上下文在樞紐分析表中很容易看出。 例如,當你在價值區加 TotalCost,然後在列或欄中加入年份和地區,你就是在定義一個篩選情境,根據特定年份和地區選擇一部分資料。

為什麼濾波器上下文對 DAX 如此重要? 因為過濾上下文最容易應用的方式是透過在樞紐分析表中加入欄位與列標籤及切片器,但過濾上下文也可以透過定義如 ALL、RELATED、FILTER、CALCULATE、BY RELATIONSHIPS 及其他度量與欄位等函式來應用於 DAX 公式中。 例如,我們來看一個名為 StoreSales 的指標中的公式:

公式

顯然這個公式比你見過的其他一些公式更複雜。 然而,為了更好地理解這個公式,我們可以像拆解其他公式一樣將其拆解。

此公式包含以下語法元素:

  1. 該措施名稱為 StoreSales,後面接著冒號 :
  2. 等號運算子 (=) 表示公式的起始。
  3. CALCULATE 函式在被指定濾波器修改的上下文中,作為一個參數來評估表達式。
  4. 括號 () 包圍一個或多個論點。
  5. 與表達式同表中的 [Sales] 指標。 銷售量的公式為:=SUM (FactSales[SalesAmount]) 。
  6. 每個濾鏡之間會用逗號 (,) 分隔。
  7. 參考欄位以及特定值 DimChannel[ChannelName] =「Store」作為過濾器。

此公式將確保只有銷售量定義的銷售值作為過濾器,並僅計算 DimChannel[ChannelName] 欄位中值為「Store」的列。

如你所想,能夠在公式中定義濾波器上下文擁有巨大且強大的能力。 能夠只參考相關表格中的特定值就是其中一個例子。 如果你一開始沒完全理解上下文,也別擔心。 當你創建自己的公式時,你會更了解上下文,以及為什麼它在 DAX 中如此重要。

情境快速測驗

  1. 這兩種情境是什麼?
  2. 什麼是濾鏡上下文?
  3. 什麼是列上下文?

答案會在本主題末尾提供。

摘要

現在你已經對DAX中最重要的概念有了基本了解,就可以開始自己為計算欄位和度量創建DAX公式。 DAX 確實有點難學,但有很多資源可以選擇。 閱讀這個主題幾次,並嘗試一些你自己的公式後,你可以學到更多 DAX 概念和公式,幫助你解決自己的商業問題。 Power Pivot Help、SQL Server Books Online、白皮書,以及 Microsoft 與頂尖商業智慧專業人士的部落格中,提供了許多 DAX 資源可供參考。 DAX 資源中心的 Wiki (http://social.technet.microsoft.com/wiki/contents/articles/dax-resource-center.aspx) 是個很好的起點。 DAX) Reference (Data Analysis Expressions 也是很棒的資源。 記得把它存到你的最愛裡。

BI 表格模型白皮書中的 DAX(可下載 (http://go.microsoft.com/fwlink/?LinkID=237472&clcid=0x409) ,提供了更詳細的介紹,涵蓋此處介紹的概念以及許多其他進階概念與公式。 這份白皮書也使用了你已經擁有的 Contoso DAX 範例 Formulas.xlsx 工作簿。

快速測驗答案

語法:

  1. 開啟插入功能。
  2. 括號 []。
  3. =[單位價格] - [單位成本]

職能:

  1. 一張桌子和一根柱子。
  2. 是。 一個公式最多可包含 64 個巢狀函數。
  3. 文字功能

背景說明:

  1. 列上下文與篩選上下文。
  2. 計算中一個或多個濾波器,決定單一值。
  3. 現在的爭吵。