PowerPivot 中的資料分析運算式 (DAX)

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

DAX) 資料分析表達 (一開始聽起來有點嚇人,但別被這個名稱騙了。 DAX 基礎其實相當容易理解。 首先——DAX 並不是程式語言。 DAX 是一種公式語言。 您可以使用 DAX 來定義計算 欄位度量 的自訂計算 (也稱為計算欄位) 。 DAX 包含部分 Excel 公式中使用的功能,以及設計用於關聯資料及動態聚合的額外函式。

理解 DAX 公式

DAX 公式與 Excel 公式非常相似。 要建立一個等號,接著是函式名稱或表達式,以及所需的值或參數。 像 Excel 一樣,DAX 提供多種函式,可以用來處理字串、利用日期和時間進行計算,或建立條件值。

然而,DAX 公式在以下重要方面有所不同:

  • 如果你想逐列自訂計算,DAX 包含函式,讓你可以使用當前列值或相關值來執行依情境不同的計算。
  • DAX 包含一種函式,將資料表作為結果回傳,而非單一值。 這些函式可用來提供其他函式的輸入。
  • DAX 中的時間智慧功能允許利用日期範圍進行計算,並比較平行期間的結果。

DAX 公式的使用

你可以在 Power Pivot 中建立公式,無論是在計算欄位或計算欄位。

計算資料行

計算欄位是你加入現有 Power Pivot 表格的欄位。 你不是貼上或匯入欄位的值,而是建立一個 DAX 公式來定義欄位的值。 如果你在樞紐分析表 (或樞透圖) 中包含 Power 樞紐分析表,計算欄位可以像使用其他資料欄位一樣使用。

計算欄位中的公式和你在 Excel 中建立的公式很像。 然而,與 Excel 不同的是,你無法為表格中不同的資料列建立不同的公式;取而代之的是,DAX 公式會自動套用到整個欄位。

當欄位包含公式時,會對每一列計算該值。 結果會在你建立公式時立即計算出欄位。 欄位值僅在底層資料被刷新或手動重新計算時才會重新計算。

你可以建立基於度量和其他計算欄位的計算欄位。 然而,避免將計算的欄位與測度名稱使用相同,因為這可能導致結果混淆。 在參考欄位時,最好使用完全限定的欄位參考,以避免意外呼叫到測度。

欲了解更多詳細資訊,請參閱 Power Pivot 中的計算欄位

措施

衡量是一個專門為樞紐分析表 (或樞紐圖) 所建立的公式,這些資料使用 Power Pivot 資料。 衡量可以基於標準的聚合函數,如 COUNT 或 SUM,或者你也可以用 DAX 自行定義公式。 在樞紐分析表的 區中使用一個度量。 如果你想把計算結果放在樞紐分析表的其他區域,請改用計算欄位。

當你定義一個明確測度的公式時,除非你將測度加入樞紐分析表,否則什麼都不會發生。 當你加入測度時,公式會針對樞紐分析表中每個 儲存 格的值進行評估。 由於每個列與欄標題的組合都會產生結果,因此每個儲存格的測度結果可能不同。

你所建立的度量定義會隨其來源資料表一同儲存。 它會出現在樞紐分析表欄位列表中,並對所有工作簿使用者開放。

欲了解更多詳細資訊,請參閱 《權力轉型中的措施》。

利用公式欄建立公式

Power Pivot 與 Excel 類似,提供公式欄以便更方便建立與編輯公式,並具備自動補全功能,以減少輸入錯誤與語法錯誤。

輸入表格名稱 開始輸入表格名稱。 Formula AutoComplete提供一個下拉選單,包含以這些字母開頭的有效名稱。

輸入欄位名稱 輸入一個括號,然後從目前表格的欄位列表中選擇欄位。 對於來自其他資料表的欄位,開始輸入該資料表名稱的首字母,然後從自動補全下拉選單中選擇該欄位。

更多細節及如何建立公式的教學,請參閱「 在 Power Pivot 中建立計算公式」。

使用自動完成的技巧

你可以在已有公式中途使用公式自動補全,並搭配巢狀函式。 插入點前的文字用於下拉列表中的值,插入點之後的所有文字保持不變。

你為常數建立的定義名稱不會顯示在自動完成的下拉選單中,但你仍然可以輸入它們。

Power Pivot 不會新增函式的結尾括號,也不會自動匹配括號。 你應該確保每個函式在語法上正確,否則無法儲存或使用該公式。 

在公式中使用多重函數

你可以巢狀函數,也就是說,你用一個函數的結果作為另一個函數的參數。 你可以在計算出的欄位中巢狀多達 64 層的函式。 然而,巢狀設計會讓建立或排除公式變得困難。

許多 DAX 函式設計僅作為巢狀函式使用。 這些函式會回傳一個表格,無法直接儲存;它應該作為資料表函式的輸入提供。 例如,SUMX、AVERAGEX 和 MINX 這三個函式都需要一個表格作為第一個參數。

注意

函數巢狀在度量內存在一定限制,以確保效能不會因欄位間依賴性所產生的眾多計算而受到影響。

比較 DAX 函式與 Excel 函式

DAX 函式庫是基於 Excel 函式庫,但這些函式庫有許多差異。 本節總結 Excel 函式與 DAX 函式的差異與相似之處。

  • 許多 DAX 函式與 Excel 函式名稱相同,且行為相同,但已修改以接受不同類型的輸入,且在某些情況下可能回傳不同的資料型態。 一般來說,你不能在 Excel 公式中使用 DAX 函式,或在 Power Pivot 中使用 Excel 公式,除非經過一些修改。
  • DAX 函式從不以儲存格的參考或範圍作為參考,而是以欄位或表格作為參考。
  • DAX 日期與時間函式回傳一個日期時間的資料型別。 相較之下,Excel 日期與時間函數則回傳一個整數,該整數代表日期作為序號。
  • 許多新的 DAX 函式要麼回傳值表,要麼根據值表作為輸入進行計算。 相較之下,Excel 沒有回傳資料表的函式,但有些函式可以搭配陣列使用。 能夠輕鬆參考完整表格和欄位的功能是 Power Pivot 的新功能。
  • DAX 提供了類似 Excel 陣列與向量查詢函式的新查詢函數。 然而,DAX 函式要求資料表間建立關係。
  • 欄位中的資料預期永遠屬於相同的資料型態。 若資料型別不相同,DAX 會將整個欄位改為最適合所有值的資料型態。

DAX 資料型別

你可以從多個可能支援不同資料型態的資料來源匯入 Power Pivot 的資料模型。 當你匯入或載入資料,然後在計算或樞紐分析表中使用時,資料會被轉換成 Power Pivot 的其中一種資料型態。 關於資料型態的列表,請參見 資料模型中的資料型別

資料表資料型態是 DAX 中一種新的資料型態,作為許多新函式的輸入或輸出。 例如,FILTER 函式會輸入一個資料表,輸出另一個只包含符合濾波條件的資料表。 透過結合表格函數與聚合函數,你可以在動態定義的資料集上執行複雜的計算。 欲了解更多資訊,請參閱 Power Pivot 中的聚合

公式與關聯模型

Power Pivot 視窗是一個可以處理多個資料表,並在關聯模型中連結這些資料表的區域。 在這個資料模型中,資料表之間透過關聯連結,讓你能與其他資料表中的欄位建立關聯,並產生更有趣的計算。 例如,你可以建立公式,將相關表格的值加總,然後將該值儲存在單一格子中。 或者,要控制相關資料表的列數,你可以對資料表和欄位套用篩選器。 欲了解更多資訊,請參閱 資料模型中資料表間的關係

因為你可以透過關聯來連結資料表,你的樞紐分析表也可以包含來自不同資料表的多個欄位資料。

不過,因為公式可以處理整個表格和欄位,你需要用不同於 Excel 的方式設計計算。

  • 一般而言,欄位中的 DAX 公式總是套用於該欄位的整個值集合 (絕不會只套用於) 的幾列或儲存格。
  • Power Pivot 中的表格必須在每列中保持相同欄位數,且同一欄位中的所有資料欄位必須包含相同的資料型態。
  • 當資料表以關係連接時,你應該確保用作鍵的兩欄值大致相符。 由於 Power Pivot 不強制執行參照完整性,即使某個關鍵欄位的值不匹配,仍可建立關聯。 然而,存在空白或不匹配的值可能會影響公式結果及樞紐分析表的呈現方式。 欲了解更多資訊,請參閱 「Power Pivot 公式中的查詢」。
  • 當你用關係連結表格時,你擴大了公式評估的範圍或上下文。 例如,樞紐分析表中的公式可能會受到樞紐分析表中任何篩選器或欄位與列標題的影響。 你可以寫出操控上下文的公式,但上下文也可能讓你的結果以你意想不到的方式改變。 欲了解更多資訊,請參閱 DAX 公式中的情境

公式結果的更新

資料刷新與重新計算是兩個獨立但相關的操作,設計包含複雜公式、大量資料或來自外部資料來源的資料模型時,你應該了解它們。

資料刷新是將工作簿中資料更新為外部資料來源的新資料的過程。 你可以在指定的時間間隔手動刷新資料。 或者,如果你已經將工作簿發佈到 SharePoint 網站,也可以排程從外部來源自動刷新。

重新計算 是更新公式結果,以反映公式本身的任何變動,以及底層資料中的這些變化的過程。 重新計算可能會以以下方式影響效能:

  • 對於計算出的欄位,每次更改公式時,公式的結果都應該重新計算整個欄位。
  • 對於指標,公式的結果直到該指標被置於樞紐分析表或樞紐分析圖的上下文中時才會被計算出來。 當你更改任何影響資料篩選器的列或欄標題,或手動刷新樞紐分析表時,公式也會重新計算。

故障排除公式

撰寫公式時的錯誤

如果在定義公式時出現錯誤,該公式可能包含 語法錯誤、語 意錯誤計算錯誤

句法錯誤是最容易解決的。 它們通常包含缺少括號或逗號。 如需個別函式語法的協助,請參閱 DAX 函式參考。

另一種錯誤發生在語法正確,但所引用的值或欄位在公式上下文中不合邏輯時。 此類語意與計算錯誤可能由以下任一問題引起:

  • 此公式指的是不存在的欄位、表格或函式。
  • 這個公式看起來是正確的,但當資料引擎取得資料時,發現了型別不匹配,並產生錯誤。
  • 該公式會傳遞錯誤數量或參數類型給函數。
  • 該公式指的是另一欄有錯誤,因此其值無效。
  • 該公式指的是尚未處理的欄位,意即它有元資料,但沒有可用於計算的實際資料。

在前四個案例中,DAX 會標記包含無效公式的整個欄位。 在最後一種情況下,DAX 會將欄位變灰,表示該欄位處於未處理狀態。

在排序或排序欄位值時出現錯誤或異常的結果

當排序或排序包含 NaN (非數字) 的欄位時,可能會出現錯誤或意外的結果。 例如,當計算將 0 除以 0 時,會回傳 NaN 結果。

這是因為公式引擎透過比較數值來進行排序與排序;然而,NaN 無法與欄位中的其他數值比較。

為了確保結果正確,你可以用條件語句搭配 IF 函數測試 NaN 值,並回傳一個數值 0。

與分析服務的表格模型及 DirectQuery 模式相容

一般來說,你在 Power Pivot 中建立的 DAX 公式與 Analysis Services 的表格模型完全相容。 然而,如果你將 Power Pivot 模型遷移到 Analysis Services 實例,然後以 DirectQuery 模式部署模型,會有一些限制。

  • 若以 DirectQuery 模式部署模型,部分 DAX 公式可能會回傳不同的結果。
  • 當你將模型部署到 DirectQuery 模式時,有些公式可能會造成驗證錯誤,因為該公式包含一個 DAX 函式,而該函式在關聯式資料來源下不被支援。

欲了解更多資訊,請參閱 SQL Server 2012 BooksOnline 中的分析服務表格建模文件。