DAX 案例
本節提供的連結將由範例示範 DAX 公式在下列案例中的使用方式。
執行複雜計算
處理文字與日期
條件值及測試錯誤
使用時間智慧
對值進行排名與比較
使用者入門
如果您是 DAX 公式的新手,建議先檢閱 DAX 範例活頁簿中的範例來開始入門。 如需有關如何取得範例活頁簿的詳細資訊,請參閱<取得 PowerPivot 的範例資料>。
其他資源
您可以使用下列連結,找到影片、其他範例和逐步解說,協助您學習使用 DAX。
案例:執行複雜計算
DAX 公式可以執行涉及自訂彙總、篩選與使用條件值的複雜計算。 本節提供有關如何使用自訂計算的入門範例。
為樞紐分析表建立自訂計算
CALCULATE 和 CALCULATETABLE 是既靈活又強大的函數,在定義量值方面相當實用。 這些函數可以讓您變更計算將要執行之所在的內容。 您也可以自訂希望執行的彙總或數學運算的類型。 如需相關範例,請參閱下列主題。
將篩選套用至公式
在 DAX 函數採用資料表做為引數的大部分情況下,您通常可以改為傳入已篩選的資料表,也就是使用 FILTER 函數代替資料表名稱,或是指定篩選運算式當做函數的其中一個引數。 下列主題提供的範例會說明篩選的建立方式,以及篩選將如何影響公式的結果。 如需詳細資訊,請參閱<在公式中篩選資料>。
FILTER 函數可以讓您使用運算式來指定篩選準則,而其餘的函數則是專為篩除空白值所設計。
選擇性地移除篩選以建立動態比率
藉由在公式中建立動態篩選,您便能夠輕易回答類似下列的問題:
目前產品的銷售量在年度總銷售量所佔的比重是多少?
這個部門在公司營運至目前的累計總利潤中所佔的比重是多少?
樞紐分析表中所使用的公式可能會受到樞紐分析表內容的影響,但您可以透過加入或移除篩選,選擇性地變更內容。 ALL 主題內的範例將示範如何執行這項作業。 若要查出特定轉售商銷售額對所有轉售商總銷售額的比率,您要建立量值來計算目前內容的值除以 ALL 內容的值所得結果。
ALLEXCEPT 主題會提供如何選擇性地在公式上清除篩選的範例。 這兩個範例都將逐步解說何以結果會因樞紐分析表的設計而異的情形。
如需如何計算比例和百分比的其他範例,請參閱下列主題:
使用來自外部迴圈的值
DAX 不但可在計算中使用來自目前內容的值,也能使用來自前一個迴圈的值進而建立一組相關計算。 下列主題將逐步解說如何建置公式參考來自外部迴圈的值。 EARLIER 函數支援多達兩層的巢狀迴圈。
若要深入了解資料列內容和相關資料表,以及在公式中如何運用此概念的詳細資訊,請參閱<DAX 公式中的內容>。
回到頁首
案例:處理文字與日期
本節提供 DAX 參考主題的連結,這些主題包含了關於處理文字、擷取及建構日期和時間值,或是根據條件建立值等等幾種常見案例的範例。
藉由串連建立索引鍵資料行
PowerPivot 不允許使用複合索引鍵,所以如果您的資料來源有複合索引鍵,則您可能需要將其結合成為單一索引鍵資料行。 下列主題提供的範例將示範如何根據複合索引鍵,建立導出資料行。
根據擷取自文字日期的日期部分建構日期
PowerPivot 是使用 SQL Server 日期/時間資料類型來處理日期,所以如果您的外部資料包含了採用不同格式的日期,比如您的日期寫法為 PowerPivot 資料引擎無法辨識的地區日期格式,或者您的資料有使用整數 Surrogate 索引鍵,那麼您可能必須使用 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 文字格式表示的日期或數字,則您可透過定義自訂格式以確保能正確地處理其值。 每當值轉換成字串或從字串反向轉換時,便一律使用這些格式。 下列主題也提供可用於處理日期和數字的預先定義格式的詳細清單。
使用公式變更資料類型
在 PowerPivot 中,輸出的資料類型取決於來源資料行,而且您無法明示指定結果的資料類型,因為最理想的資料類型是由 PowerPivot 判定。 不過,您可以使用 PowerPivot 所執行的隱含資料類型轉換來操作輸出資料類型。 如需有關類型轉換的詳細資訊,請參閱<PowerPivot 活頁簿中支援的資料來源>。
若要將日期或數字的字串轉換成數字,請將其乘以 1.0。 例如,下列公式會先計算目前日期再減去 3 天,然後輸出相對應的整數值。
=(TODAY()-3)*1.0
若要將日期、數字或貨幣值轉換成字串,請將該值與空字串進行串連。 例如,下列公式會以字串傳回今天的日期。
=""& TODAY()
下列函數亦可用於確保傳回特定的資料類型:
實數轉換成整數
實數、整數或日期轉換成字串
字串轉換成實數或日期
回到頁首
案例:條件值及測試錯誤
DAX 如同 Excel 也提供一些函數,可讓您測試資料中的值以及根據條件傳回不同的值。 例如,您可以建立導出資料行,將轉售商依其年銷售量賦予「優良」或「尊貴」稱號。 利用函數測試值亦有助於檢查值的範圍或類型,以避免妨礙計算而發生意外的錯誤。
根據條件建立值
您可以使用巢狀 IF 條件來測試值,同時根據條件產生新值。 下列主題包含條件式處理與條件值的幾個簡單範例:
測試公式之中的錯誤
與 Excel 不同的是,導出資料行不能有一列為有效值而另一列為無效值的情形。 也就是說,如果 PowerPivot 資料行的任何部分存在錯誤,整個資料行都將標示為錯誤,因此您一定要對產生無效值的公式錯誤加以更正。
例如,假設您建立的公式是除以零,可能就會得到無限大的結果或是錯誤。 有些公式也會因為函數預期接受數值,但卻傳入空白值而發生失敗。 如果您的資料模型處在開發階段,則最好容許錯誤出現,這樣您便能夠藉由按一下訊息來疑難排解問題。 不過,當您要發行活頁簿時,就應該併入錯誤處理,以防有任何非預期的值導致計算失敗。
若要避免導出資料行傳回錯誤,請使用邏輯函數結合資訊函數,測試錯誤並且始終傳回有效值。 下列主題提供有關如何在 DAX 中執行這項作業的幾個簡單範例:
回到頁首
案例:使用時間智慧
DAX 時間智慧函數包含的函數可協助您從資料中擷取日期或日期範圍。 然後您可以使用這些日期或日期範圍來計算跨相似期間的值。 時間智慧函數也包含可處理標準日期間隔的函數,讓您能夠比較跨月份、年份或季度的值。 您還可以建立公式,比較指定的期間內第一個或最後一個日期的值。
如需所有時間智慧函數的清單,請參閱<時間智慧函數 (DAX)>。 如需如何在 PowerPivot 分析中有效地使用日期和時間的秘訣,請參閱<PowerPivot 中的日期>。
計算累計銷售額
下列主題包含有關如何計算期初餘額和期末餘額的範例。 這些範例可以讓您建立跨不同間隔 (例如日、月、季或年) 的滾存餘額。
CLOSINGBALANCEMONTH 函數, CLOSINGBALANCEQUARTER 函數, CLOSINGBALANCEYEAR 函數
OPENINGBALANCEMONTH 函數, OPENINGBALANCEQUARTER 函數, OPENINGBALANCEYEAR 函數
比較歷經一段時間的值
下列主題包含有關如何比較歷經各個不同期間之加總的範例。 DAX 支援的預設時間週期包括月、季和年。
計算落入自訂日期範圍內的值
如需如何擷取自訂日期範圍 (例如銷售促銷開始後的前 15 天) 的範例,請參閱下列主題。
如果您使用時間智慧函數來擷取自訂日期集,可以使用該日期集做為執行計算之函數的輸入,以建立跨期間的自訂彙總。 如需如何執行這項操作的範例,請參閱下列主題:
[!附註]
如果您無須指定自訂日期範圍,而要使用標準的會計單位,如月、季或年,則建議您使用特別為這種用途設計的時間智慧函數執行計算,例如 TOTALQTD、TOTALMTD、TOTALQTD 等。
回到頁首
案例:對值進行排名與比較
如果要在資料行或樞紐分析表中只顯示排行前 n 名的項目,您有幾個選擇:
您可以使用 Excel 2010 中的功能建立「最前」篩選。 或者,也可以在樞紐分析表中選取一個最高或最低值的數目。 本節第一部分描述如何在樞紐分析表中篩選前 10 名項目。 如需詳細資訊,請參閱 Excel 文件集。
您可以建立公式用動態的方式對值排名,然後依據次序值進行篩選,或使用次序值做為交叉分析篩選器。 本節第二部分描述如何建立這類公式,然後將該項排名用於交叉分析篩選器。
以上方法各有其優缺點。
Excel 中的「最前」篩選在使用上很簡單,但此篩選主要僅供顯示之用。 一旦樞紐分析表的基礎資料變更,您就必須手動重新整理樞紐分析表才能看到這些變更。 如果需要以動態方式處理排名,可以使用 DAX 來建立公式,在資料行中比較值與其他值。
DAX 公式的功能較為強大,尤其若將次序值加入至交叉分析篩選器,則只需要按一下交叉分析篩選器,即可變更所顯示的最高值數目。 不過,由於計算過程相當耗費資源,這種方法可能不太適合有很多資料列的資料表使用。
在樞紐分析表中只顯示前 10 名項目
若要在樞紐分析表中顯示最高或最低值 |
||||||||
|
使用公式以動態方式排序項目
下列主題包含範例,說明如何使用 DAX 來建立儲存於導出資料行中的排名。 因為 DAX 公式會以動態方式計算,所以即使基礎資料已經變更,您也一定能夠確定排名是正確的。 而且,由於公式是用在導出資料行中,您可以在交叉分析篩選器中使用排名,然後選取前 5 名、前 10 名甚至前 100 名的值。
回到頁首