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

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

Data Analysis Expressions (DAX) 一開始聽起來有點嚇人,但別被這個名字所欺騙。 DAX 基本知識真的很容易理解。 首先 - DAX 不是程式設計語言。 DAX 是一種公式語言。 您可以使用 DAX 來定義 計算結果欄 和 量值 (也稱為計算欄位) 的自訂計算。 DAX 包含 Excel 公式中使用的部分函數,以及專為處理關聯式資料及執行動態彙總所設計的其他函數。

了解 DAX 公式

DAX 公式與 Excel 公式非常類似。 若要建立,請輸入等號,後面接著函數名稱或運算式,以及任何必要的值或引數。 與 Excel 一樣,DAX 提供各種函數,可用來處理字串、使用日期和時間執行計算,或建立條件值。

不過,DAX 公式在下列重要方面有所不同:

  • 如果您想要逐列自訂計算,DAX 包含可讓您使用目前資料列值或相關值來執行因內容而異的計算的函數。
  • DAX 包含一種函式類型,其會傳回資料表作為其結果,而不是單一值。 這些函數可用來提供其他函數的輸入。
  • DAX 中的時間智慧函數允許使用日期範圍進行計算,並比較不同平行期間的結果。

DAX 公式的使用位置

您可以在 Power Pivot 的計算結果欄或計算欄位中建立公式。

計算資料行

計算資料行是您新增到現有 Power Pivot 資料表的資料行。 相對於在資料行中貼上或匯入值,請改為建立定義資料行值的 DAX 公式。 如果您在樞紐分析表 (或樞紐分析圖) 中包含 Power Pivot 表格,則計算結果欄就能像使用任何其他資料欄一樣。

計算結果欄中的公式與您在 Excel 中建立的公式非常類似。 不過,與 Excel 不同的是,您無法為表格中的不同列建立不同的公式;相反地,DAX 公式會自動套用至整欄。

當欄包含公式時,會針對每一列計算值。 建立公式後,便會立即計算該欄的結果。 只有在重新整理基礎資料或使用手動重新計算時,才會重新計算欄值。

您可以建立以量值和其他計算資料行為基礎的計算資料行。 不過,請避免讓計算結果欄和量值使用相同的名稱,因為這可能會導致結果混淆。 參照欄時,最好使用完整欄參照,以避免意外叫用量值。

如需詳細資訊,請參閱 Power Pivot 中的計算結果欄。

措施

量值是專為用於樞紐分析表 (或使用 Power Pivot 資料的樞紐分析圖) 所建立的公式。 量值可以是以標準彙總函數為基礎,例如 COUNT 或 SUM,或者您可以使用 DAX 來定義自己的公式。 量值用於樞紐分析表的 [值 ] 區域。 如果您想要將計算結果放在樞紐分析表的不同區域,請改用計算結果欄。

當您為明確量值定義公式時,在您將量值加入樞紐分析表之前,不會發生任何動作。 當您新增量值時,會針對樞紐分析表 [ 值 ] 區域中的每個儲存格評估公式。 由於會為列標題和欄標題的每個組合建立結果,因此每個儲存格中量值的結果可能會不同。

您建立之量值的定義會與其來源資料表一起儲存。 它會出現在 [樞紐分析表欄位] 清單中,而且可供活頁簿的所有使用者使用。

如需詳細資訊,請參閱 Power Pivot 中的量值。

使用資料編輯列建立公式

Power Pivot 和 Excel 一樣,提供資料編輯列以讓您更容易建立和編輯公式,以及自動完成功能,以將輸入和語法錯誤降至最低。

若要輸入資料表名稱 開始輸入資料表名稱。 公式自動完成會提供包含以這些字母開頭之有效名稱的下拉式清單。

若要輸入欄名稱 輸入括號,然後從目前資料表的資料行清單中選擇資料行。 針對另一個資料表中的資料行,請先輸入資料表名稱的第一個字母,然後從 [自動完成] 下拉式清單中選擇該資料行。

如需更多詳細資訊及如何建立公式的逐步解說,請參閱在 Power Pivot 中建立計算公式。

使用自動完成的提示

您可以在巢狀函數的現有公式中間使用公式自動完成。 緊接在插入點之前的文字是用來顯示下拉式清單中的值,插入點後的所有文字都保持不變。

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

Power Pivot 不會新增函數的右括弧,或自動比對括弧。 您應該確定每個函數在語法上都正確無誤,否則您將無法儲存或使用該公式。 

在公式中使用多個函數

您可以巢狀函數,也就是您將一個函數的結果當做另一個函數的引數使用。 您可以在計算結果欄中巢狀多達 64 層的函數。 不過,巢狀可能會使建立公式或疑難排解公式變得困難。

許多 DAX 函數被設計成只能作為巢狀函數使用。 這些函數會傳回一個表格,而該表格無法直接儲存為結果;它應該作為表格函數的輸入提供。 例如,函數 SUMX、AVERAGEX 和 MINX 都需要表格作為第一個引數。

注意

量值中存在函數巢狀的一些限制,以確保效能不會受到資料行間相依性所需的許多計算的影響。

比較 DAX 函數和 Excel 函數

DAX 函數程式庫是以 Excel 函數程式庫為基礎,但程式庫之間有許多差異。 本節摘要說明 Excel 函數和 DAX 函數之間的差異及相似之處。

  • 許多 DAX 函數與 Excel 函數具有相同的名稱和一般行為,但已修改為採用不同類型的輸入,在某些情況下,可能會傳回不同的資料類型。 一般而言,您無法在 Excel 公式中使用 DAX 函數,或在 Power Pivot 中使用 Excel 公式,只需進行一些修改。
  • DAX 函數從不採用儲存格參照或範圍作為參照,而是 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 (Not a Number) 的欄進行排名或排序時,您可能會收到錯誤或非預期的結果。 例如,當計算將 0 除以 0 時,會傳回 NaN 結果。

這是因為公式引擎會透過比較數值來執行排序和排名;但是,NaN 無法與欄中的其他數字進行比較。

為了確保結果正確,您可以使用使用 IF 函數的條件陳述式來測試 NaN 值並傳回數值 0。

與 Analysis Services 表格式模型和 DirectQuery 模式的相容性

一般而言,您在 Power Pivot 中建置的 DAX 公式與 Analysis Services 的表格式模型完全相容。 不過,如果您將 Power Pivot 模型移轉至 Analysis Services 執行個體,然後以 DirectQuery 模式部署模型,則會出現一些限制。

  • 如果您在 DirectQuery 模式下部署模型,某些 DAX 公式可能會傳回不同的結果。
  • 將模型部署到 DirectQuery 模式時,某些公式可能會導致驗證錯誤,因為公式包含關聯式資料來源不支援的 DAX 函數。

如需詳細資訊,請參閱《SQL Server 2012 線上叢書》中的 Analysis Services 表格式模型文件。