數據分析表達式 (DAX) 聽起來有點嚇人,但別讓這個名字騙了您。 DAX 基本概念其實相當容易理解。 首先,DAX 不是程式設計語言。 DAX 是一種公式語言。 您可以使用 DAX 來定義計算 結果列 和 量 值的自定義計算 (也稱為匯出欄位) 。 DAX 包含 Excel 公式中使用的一些函數,以及專為處理相關數據及執行動態匯總所設計的其他函數。
瞭解DAX公式
DAX 公式與 Excel 公式非常類似。 若要建立等號,請輸入等號,後面接著函數名稱或表達式,以及任何必要的值或自變數。 DAX 和 Excel 一樣,提供各種函數,可用來處理字串、使用日期和時間執行計算,或建立條件值。
不過,DAX 公式在下列重要方式中有所不同:
-
如果您想要逐列自定義計算,DAX 包含可讓您使用目前列值或相關值來執行因上下文而異的計算的函數。
-
DAX 包含傳回數據表結果的函數類型,而不是單一值。 這些函數可用來為其他函數提供輸入。
-
時間智慧函數 in DAX 允許使用日期範圍的計算,並比較平行期間的結果。
使用 DAX 公式的位置
您可以在匯出 c olumns 或導出 fields 中,以 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 公式中的查閱。
-
當您使用關聯鏈接數據表時,可以放大範圍,或 是使用 context 來評估公式。 例如,數據透視表中的公式可能會受到數據透視表中任何篩選或欄名和列名的影響。 您可以撰寫能操作上下文的公式,但上下文也可能會導致結果以您可能無法預期的方式變更。 如需詳細資訊,請參閱 DAX 公式中的上下文。
更新公式的結果
數據 r 凍結 和重新計算是兩個不同的但相關的作業,您在設計包含複雜公式、大量數據或從外部數據源取得的數據模型時應瞭解。
重新整理數據是使用來自外部數據源的新數據來更新活頁簿中數據的程式。 您可以在指定的時間間隔手動重新整理資料。 或者,如果您已將活頁簿發佈至 SharePoint 網站,您可以從外部來源排程自動重新整理。
重新計算 是更新公式結果的程式,以反映公式本身的任何變更,並在基礎數據中反映這些變更。 重新計算可能會以下列方式影響效能:
-
對於計算結果列,每當您變更公式時,一律應重新計算整個欄的公式結果。
-
對於量值,在量值置於數據透視表或樞紐分析圖的上下文中之前,不會計算公式的結果。 當您變更任何會影響數據篩選的列名或欄名,或當您手動重新整理數據透視表時,也會重新計算公式。
公式疑難解答
撰寫公式時發生錯誤
如果您在定義公式時收到錯誤,公式可能包含 語法錯誤、 語意錯誤或 計算錯誤。
語法錯誤是最簡單的解決方法。 通常會涉及括號或逗號遺失。 如需個別函數語法的說明,請參閱 DAX 函數參照。
另一種類型的錯誤會在語法正確時發生,但參照的值或欄在公式上下文中並不有意義。 這類語意和計算錯誤可能是由下列任一問題所造成:
-
公式參照到非現有的欄、表格或函數。
-
公式看起來正確無誤,但當數據引擎擷取數據時,它會找出類型不相符的狀況,並提出錯誤。
-
公式會將不正確的數位或參數類型傳遞給函數。
-
公式參照的欄有錯誤,因此其值無效。
-
公式參照的欄尚未處理,這表示它具有元數據,但沒有任何實際數據可供計算。
在前四個案例中,DAX 會標幟包含無效公式的整欄。 在最後一個案例中,DAX 會將數據行呈現灰色,表示該欄處於未處理狀態。
在排名或排序欄值時,不正確或異常的結果
當排名或排序包含值 NaN (非數位) 的數據行時,您可能會收到錯誤或非預期的結果。 例如,當計算將 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 BooksOnline 中的 Analysis Services 表格式模型檔。