Data Analysis Expressions (DAX) 概觀

Data Analysis Expressions (DAX) 語言是一種公式語言,可以讓使用者在 PowerPivot 資料表 (「導出資料行」(Calculated Column)) 和 Excel 樞紐分析表 (「量值」(Measure)) 中定義自訂計算。DAX 包括使用於 Excel 公式中的一些函數,以及設計來處理關聯式資料及執行動態彙總的其他函數。

本節說明下列概念:

  • 在哪裡使用 DAX 公式

  • 如何建立 DAX 公式

  • 您可以使用 DAX 執行的運算類型

DAX 公式的概觀

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

不過,DAX 公式在下列重要方面是不同的:

  • DAX 函數一律參考完整的資料行或資料表。如果您只要使用資料表或資料行中的特定值,可以將篩選加入至公式。

  • 如果您想要逐資料列自訂計算,PowerPivot 提供的函數可讓您使用目前的資料列值或相關的值來執行依內容而改變的計算。

  • DAX 包含一種函數類型,該函數會傳回資料表 (而非單一值) 做為其結果。這些函數可用來提供其他函數的輸入,如此便可計算整個資料表或資料行的值。

  • 某些 DAX 函數會提供「時間智慧」(Time Intelligence),可讓您使用有意義的日期範圍建立計算,以及比較平行期間的結果。

在哪裡使用公式

您可以在 PowerPivot 資料表中,或 Excel 的樞紐分析表中使用 DAX 公式:

  • 您可以在「計算結果欄」(Calculated Column) 中加入資料行,然後在公式列中輸入運算式來使用公式。您可以在 PowerPivot 視窗中建立這些公式。如需詳細資訊,請參閱<建立導出資料行>。

  • 您可以在「量值」(Measure) 中使用公式。您可以在 Excel 的現有 PowerPivot 樞紐分析表或樞紐分析圖中,按一下 [加入量值] 來建立這些公式。如需詳細資訊,請參閱<建立量值>。

相同公式的行為會視該公式是用於計算結果欄還是量值而有所不同。在計算結果欄中,公式一律會套用到整個資料表之資料行中的每個資料列。根據資料列內容,這個值可能會有所不同。不過,在量值中,結果的計算與內容大大有關。也就是說,樞紐分析表的設計以及資料列和資料行標題的選擇會影響計算中所使用的值。如需詳細資訊,請參閱<DAX 公式中的內容>。

使用公式列建立公式

PowerPivot 就像 Excel 一樣,會提供公式列與「自動完成」功能,前者讓建立與編輯公式更容易,後者則會將輸入和語法上的錯誤降至最低。

輸入資料表的名稱:開始輸入資料表的名稱。「公式自動完成」會提供一個下拉式清單,其中包含以這些字母開頭的有效名稱。

輸入資料行的名稱:輸入方括弧,然後從目前資料表的資料行清單中選擇資料行。若是來自其他資料表的資料行,則先輸入資料表名稱的前幾個字母,然後從 [自動完成] 下拉式清單中選擇資料行。

如需如何建立公式的逐步解說,請參閱<建立計算的公式>。

使用自動完成的秘訣

  • 您可以透過巢狀函數,在現有的公式中間使用「公式自動完成」功能。插入點前方的文字用於顯示下拉式清單中的值,而在插入點之後的所有文字則維持不變。

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

  • PowerPivot 不會加入函數的右括號,也不會自動比對括號。您必須確定每個函數的語法正確,否則您無法儲存或使用公式。 

在公式中使用多個函數

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

許多 PowerPivot 函數的設計都是當做巢狀函數單獨使用。這些函數會傳回一個資料表,這個資料表是為了當做資料表函數的輸入而提供,無法直接儲存為 PowerPivot 活頁簿的結果。例如,SUMX、AVERAGEX 和 MINX 這些函數都需要使用資料表做為第一個引數。

[!附註]

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

DAX 函數和 Excel 函數的比較

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

  • 許多 DAX 函數與 Excel 函數擁有相同名稱和相同一般行為,但是已經修改為採用不同輸入類型,而且在某些情況下,可能會傳回不同的資料類型。一般而言,您無法在 Excel 活頁簿中使用 DAX 公式,也無法在不修改的情況下,於 PowerPivot 活頁簿中使用 Excel 公式。

  • DAX 函數絕對不接受資料格範圍或範圍做為參考,但是 DAX 函數可採用資料行或資料表做為參考。

  • DAX 日期和時間函數會傳回 datetime 資料類型。相較之下,Excel 日期和時間函數則會傳回將日期表示為序數的整數。

  • 許多新的 DAX 函數都會傳回值的資料表,或根據當做輸入之值的資料表進行計算。相較之下,Excel 沒有傳回資料表的函數,但是某些函數可以使用陣列。輕鬆參考完整的資料表和資料行的能力是 PowerPivot 中的新功能。

  • DAX 提供新的查閱函數,與 Excel 中的陣列和向量查閱函數類似。不過,DAX 函數要求在資料表之間建立關聯性。

  • DAX 不支援 Excel 中的 variant 資料類型。資料行中的資料應該永遠屬於相同的資料類型。如果資料不是相同的類型,DAX 會將整個資料行變更為最適合所有值的資料類型。

回到頁首

DAX 資料類型

您可以從可能支援不同資料類型的許多不同資料來源,將資料匯入 PowerPivot 工作表。當您將資料匯入或載入活頁簿,然後將資料用於計算或樞紐分析表中時,該資料會轉換為其中一種 PowerPivot 資料類型。如需資料類型的清單,請參閱<PowerPivot 活頁簿中支援的資料類型>。

資料表資料類型是 DAX 中新的資料類型,用於做為許多新函數的輸入或輸出。例如,FILTER 函數會採用資料表做為輸入,並輸出只包含符合篩選條件之資料列的另一份資料表。您可以結合資料表函數與彙總函式,透過動態定義的資料集執行複雜的計算。如需詳細資訊,請參閱<公式中的彙總>。

回到頁首

公式與關聯式模型

PowerPivot 視窗是一個區域,您可以在其中使用資料的多個資料表,並連接「關聯式模型」(Relational Model) 中的資料表。在此模型中,資料表會透過關聯性彼此連接,讓您與其他資料表中的資料行建立相互關聯,並建立更多有趣的計算。例如,您可以建立計算相關資料表之總和值,然後將值儲存在單一資料格中的公式。或者,若要控制相關資料表中的資料列,您可以將篩選套用到資料表和資料行。如需詳細資訊,請參閱<關聯性概觀>。

您可以使用關聯性來連結資料表,因此您的樞紐分析表也可以包含來自不同資料表之多個資料行中的資料。

不過,由於公式能夠處理整個資料表和資料行,因此您需要以不同於 Excel 的方式來設計計算。

  • 一般而言,資料行中的 DAX 公式會一律套用到資料行中的整組值 (絕不會只套用到幾個資料列或資料格)。

  • PowerPivot 中的資料表在每個資料列中必須一律擁有相同數目的資料行,而且資料行中的所有資料列都必須包含相同的資料類型。

  • 當資料表由關聯性連接時,您應該確認當做索引鍵使用的兩個資料行多半擁有相符的值。由於 PowerPivot 不會強制執行參考完整性,以致可能索引鍵資料行中有不相符的值而仍建立關聯性。不過,如果有空白或不相符的值,可能會影響公式的結果以及樞紐分析表的外觀。

  • 當您在活頁簿中使用關聯性來連結資料表時,便會放大評估公式所在的範圍或「內容」(Context)。例如,樞紐分析表中的公式可能會受到樞紐分析表中任何篩選或是資料行和資料列標題的影響。您可以撰寫操作內容的公式,但是內容也可能會以非預期的方式,使您的結果變更。如需詳細資訊,請參閱<DAX 公式中的內容>。

回到頁首

導出資料行和量值

您可以在 PowerPivot 的「導出資料行」(Calculated Column) 或「量值」(Measure) 中建立公式。

導出資料行

導出資料行是由您加入現有 PowerPivot 資料表的資料行。您不必貼上或匯入資料行的值,而可以建立定義資料行值的 DAX 公式。如果您將 PowerPivot 資料表加入樞紐分析表 (或樞紐分析圖) 中,便能以如同使用任何其他資料行的方式使用導出資料行。

導出資料行中的公式與您在 Excel 中建立的公式非常類似。然而與 Excel 不同的是,您不能為資料表中不同的資料列建立不同的公式,DAX 公式會自動套用到整個資料行。

當資料行包含公式時,會針對每個資料列計算其值。在您一建立公式之後,便會隨即計算資料行的結果。資料行值只有在基礎資料重新整理或使用手動重新計算的情況下才進行重新計算。

您可以根據量值及其他導出資料行,建立導出資料行。不過,請避免為導出資料行和量值使用相同的名稱,因為這可能會導致容易產生混淆的結果。如果指的是資料行,最好使用完整的資料行參考,以避免不小心叫用量值。

量值

量值是特別為了在使用 PowerPivot 資料的樞紐分析表 (或樞紐分析圖) 中使用而建立的公式。量值可以用標準彙總函式 (例如 COUNT 或 SUM) 做為基礎,或者,您也可以使用 DAX 自行定義公式。您應在樞紐分析表的 [值] 區域使用量值。如果想要將計算的結果放在樞紐分析表的其他區域,請改用導出資料行。

若要建立量值,必須先將樞紐分析表或樞紐分析圖加入 PowerPivot 活頁簿。當您定義量值的公式時,在您將量值放到樞紐分析表之前,都不會有任何作用。加入量值之後,即會針對樞紐分析表 [值] 區域內的每個資料格評估公式。由於結果是依據資料列與資料行標頭的每種組合而建立,每個資料格中量值的結果可能各有不同。

您為量值建立的定義是與來源資料的資料表儲存在一起。量值會出現在 PowerPivot 欄位清單中,可供活頁簿的所有使用者使用。

回到頁首

更新公式的結果

「資料重新整理」(Data Refresh) 和「重新計算」(Recalculation) 是兩個不同但相關的作業,當您要設計的資料模型包含複雜公式、大量資料,或包含從外部資料來源取得的資料時,應該先對這兩種作業有所了解。

「重新整理資料」(Refreshing Data) 是以外部資料來源的新資料來更新活頁簿中資料的程序。您可以在您指定的時間間隔手動重新整理資料。或者,如果您已經將活頁簿發行至 SharePoint 網站,您可以從外部來源排程自動重新整理。

「重新計算」(Recalculation) 是更新活頁簿中公式和導出資料行的結果,以反映公式的任何變更與基礎資料的變更之程序。重新計算可能會以下列方式影響效能:

  • 對於導出資料行而言,每當您變更公式時,公式的結果一定會針對整個資料行重新計算。

  • 不過,對於量值而言,則是直到量值放在樞紐分析表或樞紐分析圖的內容之中後,才會計算公式的結果。當您變更會影響資料篩選的任何資料列或資料行標題,或者當您手動重新整理樞紐分析表時,也都會重新計算公式。

如需詳細資訊,請參閱下列主題:

回到頁首