本節提供範例連結,示範在下列案例中使用 DAX 公式。
-
執行複雜的計算
-
使用文字和日期
-
條件值和錯誤測試
-
使用時間智慧
-
排名和比較值
本文內容
開始使用
請造訪 DAX 資源中心 Wiki ,您可以在這裡找到 DAX 的各種相關信息,包括由業界頂尖專業人員和Microsoft所提供的部落格、範例、白皮書和影片。
案例:執行複雜計算
DAX 公式可以執行複雜的計算,包括自定義匯總、篩選及使用條件值。 本節提供如何開始使用自定義計算的範例。
建立數據透視表的自定義計算
CALCULATE 和 CALCULATETABLE 是功能強大且彈性的函數,可用於定義導出字段。 這些函數可讓您變更執行計算的上下文。 您也可以自定義要執行的匯總或數學運算類型。 如需範例,請參閱下列主題。
將篩選套用至公式
在 DAX 函數採用表格做為自變數的大部分位置,您通常可以改用篩選的數據表,方法是改用 FILTER 函數而非數據表名稱,或將篩選表達式指定為函數自變數之一。 下列主題提供如何建立篩選以及篩選如何影響公式結果的範例。 如需詳細資訊,請參閱 篩選 DAX 公式中的數據。
FILTER 函數可讓您使用表達式指定篩選準則,而其他函數則是特別設計來篩選空白值。
選擇性地移除篩選以建立動態比例
透過在公式中建立動態篩選,您可以輕鬆回答如下所示的問題:
-
目前產品銷售額占當年總銷售額的貢獻為何?
-
與其他部門相比,這個部門對所有營運年度的總利潤貢獻多少?
您在數據透視表中使用的公式可能會受到數據透視表上下文的影響,但您可以透過新增或移除篩選來選擇性地變更上下文。 ALL 主題中的範例會示範如何執行此動作。 若要找出特定經銷商的銷售比例與所有經銷商的銷售比例,您必須建立一個量值,以計算目前上下文的值,除以 ALL 上下文的值。
ALLEXCEPT 主題提供範例,說明如何選擇性地清除公式上的篩選。 這兩個範例都會根據數據透視表的設計,逐步引導您了解結果的變更方式。
如需如何計算比例和百分比的其他範例,請參閱下列主題:
使用外部迴圈的值
除了在計算中使用目前上下文的值之外,DAX 還可以使用前一個迴圈的值來建立一組相關的計算。 下列主題提供如何建立參照外部迴圈中值的公式的逐步解說。 EARLIER 函數最多支援兩個巢狀循環層級。
若要深入瞭解列上下文和相關表格,以及如何在公式中使用此概念,請參閱 DAX 公式中的上下文。
案例:使用文字和日期
本節提供 DAX 參考主題的連結,其中包含使用文字、擷取及撰寫日期和時間值,或根據條件建立值的常見案例範例。
透過串連建立索引鍵欄
Power Pivot 不允許複合索引鍵;因此,如果您的數據源中有複合索引鍵,您可能需要將它們合併成單一索引鍵欄。 下列主題提供一個範例,說明如何根據複合索引鍵建立計算結果列。
根據從文字日期擷取的日期部分撰寫日期
Power Pivot 使用 SQL Server 日期/時間數據類型來處理日期;因此,如果您的外部數據包含格式不同的日期,例如,如果日期是以 Power Pivot 數據引擎無法辨識的地區日期格式撰寫,或者您的數據使用整數替代索引鍵,您可能需要使用 DAX 公式來擷取日期部分,然後將部分撰寫成有效的日期/時間表示。
例如,如果您有一欄日期已經以整數表示,然後匯入為文字字串,您可以使用下列公式將字串轉換為日期/時間值:
=DATE (RIGHT ([Value1],4) ,LEFT ([Value1],2) ,MID ([Value1],2) )
Value1 |
結果 |
---|---|
01032009 |
1/3/2009 |
12132008 |
12/13/2008 |
06252007 |
6/25/2007 |
下列主題提供用於擷取及撰寫日期之函數的詳細資訊。
定義自訂日期或數位格式
如果您的資料包含不是以標準 Windows 文字格式之一表示的日期或數位,您可以定義自訂格式以確保正確處理值。 這些格式會在將值轉換為字串或從字串轉換時使用。 下列主題也會提供可處理日期和數位之預先定義格式的詳細清單。
使用公式變更數據類型
在 Power Pivot中,輸出的數據類型是由來源欄決定,而且您無法明確指定結果的數據類型,因為最佳數據類型是由 Power Pivot決定。 不過,您可以使用 Power Pivot 執行的隱含數據類型轉換來操作輸出數據類型。
-
若要將日期或數位字串轉換成數位,請乘以 1.0。 例如,下列公式會計算目前日期減 3 天,然後輸出對應的整數值。
= (TODAY () -3) *1.0
-
若要將日期、數位或貨幣值轉換為字串,請使用空字串串連值。 例如,下列公式會以字串的形式傳回今天的日期。
=“”& TODAY ()
下列函數也可以用來確保傳回特定的數據類型:
將實數轉換成整數
-
將實數、整數或日期轉換為字串
-
將字串轉換成實數或日期
案例:條件式值和錯誤測試
和 Excel 一樣,DAX 的函數可讓您測試數據中的值,並根據條件傳回不同的值。 例如,您可以建立將經銷商標示為[ 慣用 ] 或 [ 值 ] 的計算結果列,視每年銷售量而定。 測試值的函數也很適合用來檢查值的範圍或類型,以避免意外的數據錯誤破壞計算。
根據條件建立值
您可以使用巢狀 IF 條件來測試值,並條件化產生新的值。 下列主題包含一些條件式處理和條件值的簡單範例:
測試公式中的錯誤
不同於 Excel,您無法在計算結果列的一列中有有效的值,在另一列中不能有無效的值。 也就是說,如果 Power Pivot 欄的任何部分發生錯誤,整個欄都會加上錯誤標幟,因此您必須一律更正導致無效值的公式錯誤。
例如,如果您建立的公式除以零,您可能會得到無限結果或錯誤。 如果函數在預期數值時遇到空白值,部分公式也會失敗。 當您正在開發數據模型時,最好允許顯示錯誤,以便按兩下郵件並疑難解答問題。 不過,發佈活頁簿時,您應該納入錯誤處理,以防止非預期的值造成計算失敗。
為了避免傳回計算結果列中的錯誤,您可以使用邏輯和資訊函數的組合來測試錯誤,並一律傳回有效的值。 下列主題提供一些簡單的範例,說明如何在DAX中執行此動作:
案例:使用時間智慧
DAX 時間智慧函數包含可協助您從數據擷取日期或日期範圍的函數。 然後,您可以使用這些日期或日期範圍來計算類似期間的值。 時間智慧函數也包含可搭配標準日期間隔使用的函數,可讓您比較月、年或季的值。 您也可以建立一個公式,比較指定期間中第一個和最後一個日期的值。
如需所有時間智慧函數的清單,請參閱 時間智慧函數 (DAX)。 如需如何在 Power Pivot 分析中有效使用日期和時間的秘訣,請參閱 Power Pivot 中的日期。
計算累計銷售額
下列主題包含如何計算結帳和開啟餘額的範例。 這些範例可讓您建立跨天、月、季或年等不同間隔的執行餘額。
比較一段時間的值
下列主題包含如何比較不同時段的總和的範例。 DAX 支援的預設時段為月、季和年。
計算自定義日期範圍的值
請參閱下列主題以瞭解如何擷取自定義日期範圍的範例,例如促銷活動開始后的前15天。
如果您使用時間智慧函數來擷取一組自定義的日期,您可以使用該日期集做為執行計算之函數的輸入,以建立跨時段的自定義匯總。 如需如何執行此動作的範例,請參閱下列主題:
-
附註: 如果您不需要指定自定義的日期範圍,但使用標準的會計單位,例如月、季或年,建議您使用為此目的所設計的時間智慧函數來執行計算,例如 TOTALQTD、TOTALMTD、TOTALQTD 等。
案例:排名和比較值
若只要顯示欄或數據透視表中的前 n 個項目數,您有幾個選項:
-
您可以使用 Excel 中的功能來建立 [頂端] 篩選。 您也可以在數據透視表中選取一些頂端或底部的值。 本節的第一部分說明如何篩選數據透視表中前 10 個專案。 如需詳細資訊,請參閱 Excel 檔。
-
您可以建立公式,以動態方式為值排名,然後根據排名值進行篩選,或使用排名值做為交叉分析篩選器。 本節的第二部分說明如何建立此公式,然後在交叉分析篩選器中使用該排名。
每種方法都有優缺點。
-
Excel 頂端篩選很容易使用,但篩選僅供顯示之用。 如果數據透視表的基礎數據變更,您必須手動重新整理數據透視表才能看到變更。 如果您需要動態處理排名,可以使用DAX建立公式,將值與欄中的其他值進行比較。
-
DAX 公式更強大;此外,您可以將排名值新增至交叉分析篩選器,只要按下交叉分析篩選器即可變更顯示的頂端值數目。 不過,計算的成本高,而且這個方法可能不適合具有許多數據列的數據表。
僅顯示數據透視表中的前十個專案
顯示數據透視表中頂端或底部的值
|
使用公式動態排序專案
下列主題包含如何使用 DAX 建立儲存在計算結果列中的排名的範例。 由於 DAX 公式是以動態方式計算,因此即使基礎數據已變更,您隨時都可以確定排名正確無誤。 此外,由於公式是在計算結果列中使用,因此您可以使用交叉分析篩選器中的排名,然後選取前 5 名、前 10 名或甚至前 100 個值。