撰寫 DAX 公式

已完成

每個模型計算類型、計算資料表、計算結果欄或量值都是由其名稱所定義,後面接著等號 (=),再緊接著 DAX 公式。 使用下列範本建立模型計算:

<Calculation name> = <DAX formula>

例如,複製 Date 資料表中資料的 Ship Date 計算資料表的定義如下:

Ship Date = 'Date'

DAX 公式是由一組會傳回結果的運算式所組成。 結果可能是資料表物件或純量值。 計算資料表公式必須傳回資料表物件;計算結果欄和量值公式必須傳回純量 (單一值)。

公式是依照下列方式組合:

  • DAX 函式
  • DAX 運算子
  • 參考模型物件
  • 常數值,例如數字 24 或是常值文字 "FY" (會計年度的縮寫)
  • DAX 變數
  • 空白

提示

在 Power BI Desktop 中輸入 DAX 公式時,IntelliSense 能夠為您提供協助。 IntelliSense 是程式碼完成輔助工具,會列出函式和模型資源。 在選取 DAX 函式時,此工具也會提供您該函式的定義和描述。 建議啟用 IntelliSense 工作,讓您快速建立精確的公式。

DAX 函式

如同 Microsoft Excel,DAX 是函式語言,這表示公式需要依賴函式來達成特定目標。 一般而言,DAX 函式包含引數,可允許傳入變數。 公式能夠呼叫其他函式,也常會出現巢狀化函式。

在公式中,函式名稱後面必須加上括弧。 在括弧內,變數會被傳入。

注意

有些函式沒有引數,或是帶有選擇性引數。

本課程模組隨後會說明如何使用 DAX 函式。

DAX 運算子

公式也需要仰賴運算子,這些運算子能夠進行數學計算、比較值、處理字串,或是測試條件。

本課程模組隨後會進一步探討 DAX 運算子。

參考模型物件

公式只能夠參考三種模式物件,分別是資料表、資料行,或是量值。 公式不能參考階層或階層層級。 (請記得階層層級是以資料行為準,所以您的公式可以參考階層層級的資料行。)

資料表參考

在公式中參考資料表時,就名義上,會將資料表名稱以單引號括住。 在下列計算資料表定義中,請注意 Date 資料表是以單引號括住。

Ship Date = 'Date'

不過,在下列兩個條件同時成立時,可以省略單引號:

  1. 資料表名稱不包含內嵌空格。
  2. 資料表名稱不是 DAX 所使用的保留字。 所有 DAX 函式名稱和運算子都是保留字。 Date 是 DAX 的函式名稱,這也是為什麼當您在參考名為 Date 的資料表時,必須將該名稱以單引號包住。

在下列計算資料表定義中,參考 Airport 資料表時可以省略單引號:

Arrival Airport = Airport

資料行參考

在參考公式中的資料行時,必須將資料行名稱括在方括弧內。 也可以選擇在資料行前新增資料表名稱。 舉例來說,下列量值定義參考到 Sales Amount 資料行。

Revenue = SUM([Sales Amount])

由於資料行名稱在資料表中唯一存在,但在模型中則不一定是如此,因此您可以在資料行參考前方,加上其資料表名稱,以便區分。 這種明確指出的資料行又稱為完整資料行。 有些 DAX 函式需要傳入完整的資料行。

提示

若要改善公式的可讀性,建議您一律在資料行參考前方,加上資料表名稱。

先前的範例量值定義可以改寫為:

Revenue = SUM(Sales[Sales Amount])

量值參考

在參考公式中的量值 (像是資料行名稱參考) 時,必須將量值名稱括在方括弧內。 舉例來說,下列量值定義參考到收益支出量值。

Profit = [Revenue] - [Cost]

如果您尚不熟悉 DAX,當您在嘗試閱讀公式時,資料行和量值參考都一律會括在方括弧內這點,可能會使您感到混淆。 然而,隨著您越來越熟悉 DAX 基本概念,您將能夠判斷物件的類型,因為在 DAX 公式中,資料行和量值各有不同的使用方式。

提示

可以在量值參考前面加上其資料表的名稱。 不過,量值是模型層級物件。 在被指派給主資料表時,只具有表面的關聯性,以便在 [欄位] 窗格中有邏輯地組織量值。

因此,我們建議您一律在資料行參考前加上資料表名稱,並針對量值才取相反的做法:我們建議您一律不要在量值參考前面加上其資料表名稱。

如需詳細資訊,請參閱資料行和量值參考

DAX 變數

公式可以宣告 DAX 變數,用來儲存結果。

本課程模組隨後會說明 DAX 變數的使用方式與使用時機。

空白

空白字元能夠用來將您的公式格式化,讓公式便於理解。 空白字元包括:

  • 空格
  • Tab
  • 歸位字元

空白字元可以選用,而且不會改變您的公式邏輯或對效能產生負面影響。 強烈建議您採用一種格式樣式並保持前後一致,並且請考慮下列建議:

  • 在運算子之間使用空格。
  • 使用 Tab 將巢狀函式呼叫縮排。
  • 使用歸位字元來分隔函式引數,特別是在引數太長,無法放入一行時可以這麼處理。 以這種方式格式化,可以更輕鬆地進行疑難排解,特別是在公式遺漏括弧時更是如此。
  • 這個錯誤是發生在太多空白的那一邊。

提示

在公式列中,若要輸入歸位字元,請按 Shift+Enter。 單獨按 Enter 將會認可您的公式。

請考慮下列以單行撰寫,並且包含五個 DAX 函式呼叫的量值定義:

Revenue YoY % = DIVIDE([Revenue] - CALCULATE([Revenue], SAMEPERIODLASTYEAR('Date'[Date])), CALCULATE([Revenue], SAMEPERIODLASTYEAR('Date'[Date])))

下列範例是相同的量值定義,但已完成格式化,所以能夠更輕鬆地閱讀和理解:

Revenue YoY % =
DIVIDE(
    [Revenue]
        - CALCULATE(
            [Revenue],
            SAMEPERIODLASTYEAR('Date'[Date])
    ),
    CALCULATE(
        [Revenue],
        SAMEPERIODLASTYEAR('Date'[Date])
    )
)

請試著將量值格式化。 開啟 Adventure Works DW 2020 M02.pbix \(英文\) Power BI Desktop 檔案,然後在 [欄位] 窗格中,展開 Sales 資料表並選取 Revenue YoY % 量值。 在公式列中,使用 Tab 和歸位字元來產生與上一個範例相同的結果。 當您要新增歸位字元時,請記住要按 Shift+Enter

此量值定義可針對可讀性和效能進行進一步的改善,其將會在此課程模組稍後加以說明。

提示

DAX 格式器 是另一種絕佳的格式化工具,能協助您將計算結果格式化。 此工具可讓您貼上計算結果,並設定其格式。 然後,您可以將已設定格式的計算結果複製到剪貼簿,並將其貼回 Power BI Desktop。