本節提供範例連結,示範在以下情境中使用 DAX 公式。
- 執行複雜計算
- 處理文字與日期
- 條件值與錯誤測試
- 使用時間智慧
- 排名與比較價值
本文內容
開始使用
造訪 DAX資源中心維基 ,您可以找到各種關於DAX的資訊,包括由業界頂尖專業人士及Microsoft提供的部落格、範例、白皮書及影片。
情境:執行複雜計算
DAX 公式能執行複雜的計算,包括自訂彙整、篩選及條件值的使用。 本節提供如何開始自訂計算的範例。
為樞紐分析表建立自訂計算
CALCULATE 和 CALCULATETABLE 是強大且靈活的函式,有助於定義計算欄位。 這些函式讓你能改變計算執行的情境。 你也可以自訂要執行的聚合或數學運算類型。 請參考以下主題作為範例。
對公式施加濾鏡
在大多數 DAX 函式以資料表作為參數的地方,你通常可以直接傳送過濾後的資料表,方法是用 FILTER 函式代替資料表名稱,或指定一個濾波器運算式作為函式參數之一。 以下主題提供如何建立過濾器及過濾器如何影響公式結果的範例。 欲了解更多資訊,請參閱 DAX 公式中的篩選資料。
FILTER 函式讓你透過表達式來指定篩選條件,而其他函式則專門設計用來過濾空白值。
選擇性地移除濾波器,以創造動態比例
透過在公式中建立動態篩選器,你可以輕鬆回答以下問題:
- 目前產品的銷售對全年總銷售的貢獻如何?
- 與其他部門相比,這個部門在所有營運年度的總利潤中貢獻了多少?
你在樞紐分析表中使用的公式可能會受到樞紐分析表上下文的影響,但你也可以選擇性地透過添加或移除篩選條件來改變上下文。 ALL 主題的範例會示範如何做到這點。 要找出特定經銷商銷售額與所有經銷商銷售額的比率,你建立一個衡量標準,計算當前情境的價值除以 ALL 情境的價值。
ALLEXCEPT 主題提供了一個如何選擇性清除公式過濾器的範例。 這兩個例子都帶你了解結果如何因樞紐分析表的設計而改變。
關於如何計算比率與百分比的其他範例,請參閱以下主題:
使用外部迴圈的值
除了在計算中使用當前上下文的值外,DAX 還能使用先前迴圈的值來建立一組相關計算。 以下主題將詳細說明如何建立一個引用外部迴圈值的公式。 EARLIER 函式支援最多兩層巢狀迴圈。
想了解更多關於列上下文及相關表格,以及如何在公式中使用這個概念,請參見 「DAX 公式中的上下文」。
情境:處理文字與日期
本節提供連結至 DAX 參考主題,包含常見情境範例,例如處理文字、擷取與組合日期與時間值,或根據條件建立值。
透過串接建立鍵欄位
Power Pivot 不支援複合金鑰;因此,如果你的資料來源中有複合鍵,可能需要將它們合併成單一鍵欄位。 以下主題提供一個基於複合鍵建立計算欄位的範例。
根據從文本日期中提取的日期部分,Compose a Date
Power Pivot 使用 SQL Server 的日期/時間資料型態來處理日期;因此,如果你的外部資料包含格式不同的日期——例如,你的日期是以區域日期格式寫入,無法被 Power Pivot 資料引擎識別,或你的資料使用整數代理鍵——你可能需要使用 DAX 公式來擷取日期部分,然後將這些部分組合成有效的日期。時間表示。
例如,如果你有一欄日期,這些日期先以整數表示,然後匯入成文字串,你可以用以下公式將字串轉換成日期/時間值:
=日期 (右 ([Value1],4) ,左 ([VALUE1],2) ,中 ([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天,然後輸出相應的整數值。
= (今日 () -3) *1.0 - 要將日期、數字或貨幣值轉換為字串,請將該值與空字串串接。 例如,以下公式會以字串形式回傳今天的日期。
=“”& 今天 ()
以下函式也可用來確保回傳特定資料型別:
將實數轉換為整數
- 圓函數
- 天花板功能
-
樓層功能
將實數、整數或日期轉換為字串 - 固定功能
-
格式函數
將字串轉換為實數或日期 - 價值函數
- DATEVALUE 函數
- TIMEVALUE 函數
情境:條件值與錯誤測試
像 Excel 一樣,DAX 有函式可以測試資料中的數值,並根據條件回傳不同的值。 例如,你可以建立一個計算欄位,根據年度銷售額將轉售商標示為 優先 或 價值 。 測試數值的函數也有助於檢查值的範圍或類型,以防止意外的資料錯誤導致計算失效。
根據條件建立價值
你可以使用巢狀 IF 條件來測試數值並有條件地產生新值。 以下主題包含一些條件處理與條件值的簡單範例:
公式內的錯誤測試
與 Excel 不同的是,計算欄位的一列不能有有效值,另一列則有無效值。 也就是說,如果 Power Pivot 欄位的任何部分有錯誤,整欄都會被標記為錯誤,因此你必須永遠修正導致無效值的公式錯誤。
例如,如果你建立一個除以零的公式,可能會得到無限大結果,或是錯誤。 有些公式如果函數在預期數值時遇到空白值也會失敗。 在建立資料模型時,最好讓錯誤出現,這樣你就能點擊訊息並排除問題。 不過,當你發佈工作簿時,應該加入錯誤處理,以防止意外值導致計算失敗。
為了避免計算欄位回傳錯誤,你會結合邏輯函數和資訊函式來測試錯誤,並且總是回傳有效值。 以下主題提供一些簡單的範例,說明如何在 DAX 中實現此操作:
情境:運用時間智慧
DAX 時間情報功能包含協助您從資料中擷取日期或日期範圍的功能。 你可以利用這些日期或日期範圍來計算相似期間的數值。 時間智慧功能還包含標準日期區間的功能,讓你能比較跨月份、年份或季度的數值。 你也可以建立一個公式,比較指定期間的第一和最後一日期的數值。
關於所有時間智慧函數的列表,請參見 DAX) (的時間智慧函數 。 關於如何在 Power Pivot 分析中有效使用日期與時間的建議,請參見 Power Pivot 中的日期。
計算累積銷售額
以下主題包含計算期末與期初餘額的範例。 這些範例讓你能在不同區間(如天、月、季或年)建立流動餘額。
比較隨時間變化的數值
以下主題包含如何比較不同時期總和的範例。 DAX 支援的預設時間範圍包括月份、季度和年份。
計算一個自訂日期範圍的值
請參閱以下主題,了解如何取得自訂日期範圍,例如促銷開始後的前15天。
如果你使用時間智慧函數來取得自訂的日期集合,你可以將這組日期作為一個函式的輸入,進行計算,從而建立跨時間段的自訂彙總。 請參考以下主題,了解如何進行此操作:
-
注意
如果您不需要指定自訂日期範圍,但使用標準會計單位如月份、季度或年份,我們建議您使用專為此目的設計的時間情報功能進行計算,例如 TOTALQTD、TOTALMTD、TOTALQTD 等。
情境:排名與比較價值
若要只顯示欄位或樞紐分析表中最前面 n 個項目,你有幾個選項:
- 你可以利用 Excel 的功能來建立頂尖篩選器。 你也可以在樞紐分析表中選擇多個頂或底值。 本節的第一部分說明如何篩選樞紐分析表中前十項項目。 更多資訊請參閱 Excel 文件。
- 你可以建立一個公式來動態排序數值,然後再用排名值來篩選,或者用排名值當作切片軟體使用。 本節第二部分將說明如何建立這個公式,然後在切片軟體中使用這個排名。
每種方法都有優缺點。
- Excel Top 篩選器使用簡單,但僅用於顯示。 如果樞紐分析表底層的資料有變動,你必須手動重新整理樞紐分析表才能看到變更。 如果你需要動態處理排名,可以用 DAX 建立一個公式,將數值與欄位內的其他數值做比較。
- DAX 公式更強大;此外,只要將排名值加入切片軟體,你只要點擊切片器即可更改顯示的頂尖數值。 然而,計算量龐大,且此方法可能不適合多列的資料表。
僅顯示樞紐分析表中前十項
顯示樞紐分析表中的頂值或底值
|
|---|
使用公式動態排序項目
以下主題將示範如何使用 DAX 建立排名,並儲存在計算欄位中。 由於 DAX 公式是動態計算的,即使底層資料改變,你也能確保排名正確。 此外,因為公式是用在計算欄位,你可以在切片軟體中使用排名,然後選擇前5、前10,甚至前100名。