
- Excel DAX 教程
- DAX - 首頁
- DAX - 概述
- DAX - 計算列
- DAX - 計算欄位/度量值
- DAX - 編輯計算欄位
- DAX - 刪除計算欄位
- DAX - 語法
- DAX - 運算子
- DAX - 標準引數
- DAX - 函式
- DAX - 理解 DAX 函式
- DAX - 評估上下文
- DAX - 公式
- 更新 DAX 公式的結果
- 更新資料模型中的資料
- DAX - 重新計算 DAX 公式
- DAX 公式重新計算故障排除
- DAX - 公式錯誤
- DAX - 時間智慧
- DAX - 篩選器函式
- DAX - 場景
- 執行復雜計算
- DAX - 使用文字和日期
- 條件值和錯誤測試
- DAX - 使用時間智慧
- DAX - 排名和比較值
- Excel DAX 有用資源
- DAX - 快速指南
- DAX - 有用資源
- DAX - 討論
Excel DAX 快速指南
Excel DAX - 概述
DAX 代表 **D**ata **A**nalysis **Ex**pressions。DAX 是一種公式語言,是函式、運算子和常量的集合,可用於公式或表示式中計算和返回一個或多個值。DAX 是與 Excel Power Pivot 資料模型關聯的公式語言。
它不是一種程式語言,而是一種公式語言,允許使用者在計算列和計算欄位(也稱為度量值)中定義自定義計算。DAX 幫助您從資料模型中已存在的資料中建立新資訊。DAX 公式使您能夠執行資料建模、資料分析,並將結果用於報告和決策制定。
DAX 包含一些在 Excel 公式中使用的函式,但功能已修改,並增加了旨在處理關係資料和執行動態聚合的其他函式。
DAX 的重要性
DAX 的基礎是資料模型,即 Excel 中的 Power Pivot 資料庫。資料模型由表組成,可以在表之間定義關係,以便組合來自不同來源的資料。資料模型的資料連線可以根據源資料變化隨時重新整理。資料模型利用 Power Pivot xVelocity 記憶體分析引擎 (VertiPaq),使資料操作儘可能快,並容納數千行資料。有關資料模型的更多資訊,請參閱教程 – Power Pivot。
DAX 結合資料模型,使 Excel 中的幾個強大功能成為可能——Power Pivot、Power Pivot 表、Power Pivot 圖表和 Power View。您可以使用 DAX 來解決許多基本計算和資料分析問題。
DAX 在 Power BI 中也很有用,可以建立新的 Power BI Desktop 檔案並將一些資料匯入其中。此外,DAX 公式提供了諸如分析跨產品類別和不同日期範圍的增長百分比、計算與市場趨勢相比的同比增長等功能。
學習如何建立有效的 DAX 公式將幫助您充分利用您的資料。當您獲得所需的資訊時,您可以開始解決影響您底線的實際業務問題。這就是 Power BI 的強大功能,而 DAX 將幫助您實現這一點。
本教程的先決條件
本教程是 Excel Power Pivot 教程的擴充套件,您已經學習了 Power Pivot 功能、資料模型、關係、Power Pivot 表、Power Pivot 圖表等。在深入研究 DAX 之前,最好複習一下本教程,因為本教程更多的是關於 DAX 語言,您可以在其中為資料模型中的資料分析編寫公式並報告這些結果。
本教程還介紹了 DAX 函式,這些函式類似於 Excel 函式,但有一些變化。提供了 Excel 函式和 DAX 函式的比較,以幫助您區分兩者。同樣,比較了 Excel 公式和 DAX 公式,並討論了它們的異同。充分了解這些差異將有助於您高效地編寫有效的 DAX 公式。
本教程不需要了解 Excel 函式和 Excel 公式,因為 DAX 完全用於 Power Pivot 視窗中的資料模型。您只需進入 Excel 工作表以檢視基於資料模型的 Power Pivot 表、Power Pivot 圖表和 Power View 視覺化效果。但是,如果您是 Excel 專業人士,並且對 Excel 函式和公式有豐富的知識,最好記下上一節中提到的內容以及本教程中提供的詳細資訊。
計算列
計算列是您可以透過 DAX 公式新增到資料模型中表的列。您已經在 Excel Power Pivot 教程中學習過它們,但您將在“計算列”一章中詳細瞭解,因為 DAX 都是關於計算列、計算欄位和 DAX 函式的。
計算欄位/度量值
您不能透過編輯來更改資料模型中表的中的值。但是,您可以向表中新增計算欄位,這些欄位可用於 Power Pivot 表中。透過指定名稱和定義 DAX 公式來定義計算欄位。有關詳細資訊,請參閱“計算欄位”一章 - 計算欄位。
在 Excel 2013 之前的 Excel 版本中,計算欄位被命名為度量值。在 Excel 2016 中,它們被重新命名為度量值。在本教程中,我們將稱它們為計算欄位。但是,請注意,術語“計算欄位”和“度量值”是同義詞,在各方面都指的是相同的內容。
定義和儲存計算欄位後,您可以對其進行編輯。您可以更改定義中使用的 DAX 公式,也可以重新命名計算欄位。您將在“編輯計算欄位”一章中瞭解這一點 - 編輯計算欄位。您可以刪除計算欄位。請參閱“刪除計算欄位”一章 - 刪除計算欄位。
DAX 公式
DAX 公式構成 DAX 語言的核心。您可以透過使用 DAX 公式定義來建立計算欄位和計算列。您可以為資料分析操作編寫 DAX 公式。DAX 公式不引用表中單個單元格或單元格範圍,而是引用資料模型中的表和列。資料模型中表中的列必須包含相同的資料型別。
DAX 公式包含表、列、計算列、計算欄位、DAX 運算子和 DAX 函式。請參閱“DAX 公式”一章 - DAX 公式 以詳細瞭解。
DAX 語法
與任何語言一樣,作為公式語言的 DAX 也具有語法。您的 DAX 公式應遵循 DAX 語法,否則,您要麼在設計時或執行時遇到錯誤,要麼收到不正確的結果。
您將在“DAX 語法”一章中學習以下內容 - DAX 語法 −
- 表、列的 DAX 命名要求
- DAX 運算子
- DAX 特殊值
- DAX 資料型別
- DAX 隱式資料型別轉換
DAX 運算子
DAX 是一種公式語言,因此在定義公式時會使用運算子。DAX 有以下型別的運算子 -
- DAX 算術運算子
- DAX 比較運算子
- DAX 文字連線運算子
- DAX 邏輯運算子
DAX 運算子優先順序順序也已定義,並且與 Excel 運算子優先順序順序不同。請參閱“DAX 運算子”一章 - DAX 運算子。
DAX 標準引數
DAX 函式語法對引數有一定的要求。這是因為 DAX 函式引數可以是表或列或計算欄位或其他 DAX 函式。請參閱“DAX 標準引數”一章 - DAX 標準引數。
DAX 函式
Excel 2013 有 246 個 DAX 函式,您可以在 DAX 公式中使用它們。您將在“DAX 函式”一章中按類別學習這些函式。但是,有關每個 DAX 函式語法、引數、用法和返回值的詳細資訊,您必須參考我們的教程 - DAX 函式。每個 DAX 函式描述中使用的部分名稱在“理解 DAX 函式”一章中給出 - 理解 DAX 函式。
由於 DAX 函式需要在編寫 DAX 公式中使用,並且所用 DAX 函式的結果取決於它們的使用上下文,因此您可能需要在這兩個教程之間來回切換,才能掌握您將在使用 DAX 和 Power BI 的資料建模中使用的 DAX。
DAX 特殊函式
DAX 有一些函式使 DAX 功能強大。這些 DAX 函式屬於以下類別 - DAX 時間智慧函式和 DAX 篩選器函式,需要特別說明。您將在“理解 DAX 時間智慧”一章中瞭解 DAX 時間智慧函式 - 理解 DAX 時間智慧。您將在“DAX 篩選器函式”一章中瞭解 DAX 篩選器函式的用法 - DAX 篩選器函式。
DAX 評估上下文
DAX 公式的結果可能會因用於評估的上下文而異。DAX 有兩種型別的評估上下文 - 行上下文和篩選器上下文。請參閱“DAX 評估上下文”一章 - DAX 評估上下文。
DAX 公式
DAX 是一種公式語言,您必須充分利用它來編寫 DAX 公式。請參閱“DAX 公式”一章以瞭解公式語法以及如何輕鬆正確地建立它們。
只要資料重新整理和 DAX 公式重新計算,DAX 公式的結果就會發生變化。您必須瞭解資料重新整理和重新計算之間的區別。請參閱“更新 DAX 公式的結果”一章 - 更新 DAX 公式的結果。
資料模型中的資料預計會並且會不時發生變化。這是因為資料用於資料分析活動,這些活動需要在任何時間點獲取最新的資料。要了解重新整理資料的不同方法,請參閱“更新資料模型中的資料”一章 - 更新資料模型中的資料。
您將在“重新計算 DAX 公式”一章中瞭解不同型別的 DAX 公式重新計算 - 重新計算 DAX 公式。
DAX 公式的重新計算需要考慮資料依賴關係並遵循特定的順序。否則,您可能會遇到錯誤或錯誤的結果。有關詳細資訊,請參閱章節 - DAX 公式重新計算疑難解答。
在章節 - DAX 公式錯誤 中,您將深入瞭解一些常見的 DAX 公式錯誤,並學習如何修復這些錯誤。
DAX 應用場景
如果您開始學習一門新語言,瞭解在哪裡使用什麼詞彙是熟悉這門語言的最佳方法。同樣,DAX 作為一種用於資料分析的公式語言,您需要了解它可以應用於哪些不同的場景。
請參閱以下章節以獲取詳細資訊。
Excel DAX - 計算列
計算列是您透過定義列值的 DAX 公式新增到工作簿資料模型中現有表的一列。您建立計算列,而不是匯入列中的值。
您可以像使用任何其他表列一樣,在資料透視表、資料透檢視、Power Pivot 表、Power Pivot 圖或 Power View 報表中使用計算列。
瞭解計算列
用於建立計算列的 DAX 公式類似於 Excel 公式。但是,在 DAX 公式中,您不能為表中的不同行建立不同的公式。DAX 公式會自動應用於整列。
例如,您可以建立一個計算列,使用 DAX 公式從現有的“日期”列中提取年份 -
= YEAR ([Date])
YEAR 是一個 DAX 函式,Date 是表中現有的列。如您所見,表名用方括號括起來。您將在章節 - DAX 語法 中瞭解更多相關內容。
當您使用此 DAX 公式向表中新增列時,列值將在您建立公式後立即計算。將建立一個新的列,其標題為 CalculatedColumn1,並填充年份值。
列值會在必要時重新計算,例如在重新整理基礎資料時。您可以根據現有列、計算欄位(度量值)和其他計算列建立計算列。
建立計算列
考慮以下螢幕截圖中顯示的包含奧運會結果的資料模型。

- 單擊資料檢視。
- 單擊“結果”選項卡。
您將檢視“結果”表。

如上圖所示,最右側列的標題為“新增列”。
- 單擊功能區上的“設計”選項卡。
- 單擊“列”組中的“新增”。

指標將出現在公式欄中。這意味著您正在使用 DAX 公式新增一列。
- 在公式欄中鍵入 =YEAR([Date])。

如上圖所示,標題為“新增列”的最右側列已突出顯示。
- 按 Enter 鍵。
計算需要一段時間(幾秒鐘)。請等待。
新的計算列將插入到最右側“新增列”的左側。

如上圖所示,新插入的計算列已突出顯示。整列中的值根據所使用的 DAX 公式顯示。列標題為 CalculatedColumn1。
重新命名計算列
要將計算列重新命名為有意義的名稱,請執行以下操作 -
- 雙擊列標題。列名將被突出顯示。

- 選擇列名。
- 鍵入 Year(新名稱)。

如上圖所示,計算列的名稱已更改。
您也可以透過右鍵單擊列,然後在下拉列表中單擊“重新命名”來重新命名計算列。
只需確保新名稱與表中現有的名稱不衝突。
檢查計算列的資料型別
您可以按如下方式檢查計算列的資料型別 -
- 單擊功能區上的“開始”選項卡。
- 單擊“資料型別”。

如您在上圖中看到的,下拉列表包含列的可能資料型別。在此示例中,已選擇預設(自動)資料型別,即整數。
計算列中的錯誤
計算列中可能由於以下原因而發生錯誤 -
更改或刪除表之間的關係。這是因為使用這些表中列的公式將變得無效。
公式包含迴圈或自引用依賴關係。
效能問題
如前面奧運會結果示例中所見,“結果”表大約有 35000 行資料。因此,當您使用 DAX 公式建立列時,它會立即計算列中的所有 35000 多個值,這需要花費一些時間。資料模型和表旨在處理數百萬行資料。因此,當 DAX 公式包含太多引用時,它可能會影響效能。您可以透過執行以下操作來避免效能問題 -
如果您的 DAX 公式包含許多複雜的依賴關係,則將其分步驟建立,並將結果儲存在新的計算列中,而不是一次建立單個大型公式。這使您能夠驗證結果並評估效能。
資料修改發生時,需要重新計算計算列。您可以將重新計算模式設定為手動,從而節省頻繁的重新計算。但是,如果計算列中的任何值不正確,則該列將顯示為灰色,直到您重新整理並重新計算資料。
Excel DAX - 計算欄位/度量值
資料模型中表中的計算欄位是透過 DAX 公式獲得的欄位。在早期版本的 Power Pivot 中,計算欄位被稱為度量值。在 Excel 2013 中,它被重新命名為計算欄位。但是,在 Excel 2016 中它被重新命名回度量值。如果您參考任何文件,您可能會觀察到這兩個術語的混淆。請注意,術語“計算欄位”和“度量值”是同義詞。在本教程中,我們使用術語“計算欄位”。
瞭解計算欄位
計算欄位是專門為在資料透視表(或資料透檢視)中使用而建立的公式。
您可以根據標準聚合函式(如 COUNT 或 SUM)建立計算欄位,或者透過定義您自己的 DAX 公式來建立計算欄位。
以下是計算欄位和計算列之間的區別 -
計算欄位只能用於資料透視表的“值”區域。
包含計算結果的計算列也可以用於“行”、“列”和“篩選器”區域。
儲存計算欄位
計算欄位將與其源表一起儲存在資料模型中。它在 Power Pivot 表或 Power Pivot 圖欄位列表中顯示為表中的欄位。
使用計算欄位
要使用計算欄位,您必須從 Power Pivot 表字段列表中選擇它。計算欄位將新增到“值”區域,並將評估用於計算欄位的公式。將為每一行和列欄位組合建立結果。
計算欄位 - 示例
考慮以下奧運會資料的 Data Model -

如上圖所示,“結果”表有一個“獎牌”欄位,其中包含“金牌”、“銀牌”或“銅牌”的值,每個值對應包含“運動” - “專案” - “國家/地區” - “日期”組合的行。假設您想要每個國家的獎牌數量,那麼您可以建立一個計算欄位“獎牌數量”,並使用以下 DAX 公式 -
Medal Count := COUNTA([Medal])
在表中建立計算欄位
要在“結果”表中建立計算欄位“獎牌數量”,請執行以下操作 -
單擊“結果”表中“獎牌”列下方計算區域中的單元格。該單元格將被突出顯示。
在公式欄中鍵入 Medal Count:=COUNTA([Medal])。

按 Enter 鍵。

如上圖所示,計算欄位顯示在選定的單元格中,顯示值為 34,094。此數字是“結果”表中的總行數。因此,乍一看它沒有多大意義。如前所述,計算欄位的真正用途只有透過將其新增到 Power Pivot 表或 Power Pivot 圖中才能看到。
在 Power Pivot 表中使用計算欄位
要使用計算欄位計算每個國家的獎牌數量,請執行以下操作 -
- 在 Power Pivot 視窗中單擊功能區上的“資料透視表”。
- 在下拉列表中單擊“資料透視表”。

出現“建立資料透視表”對話方塊。
- 單擊“現有工作表”。
- 選擇要放置資料透視表的位置。
將建立一個空資料透視表。
- 單擊“資料透視表字段”列表中的“結果”表。
- 單擊欄位 - “國家/地區”和“獎牌數量”。

如您所觀察到的,“獎牌數量”已新增到“值”區域,“國家/地區”已新增到“行”區域。資料透視表已建立,行中顯示欄位“國家/地區”的值。並且對於每一行,都會計算和顯示“獎牌數量”值。這就是計算欄位評估所使用的 DAX 公式並顯示值的方式。
- 將“結果”表中的“運動”欄位新增到“行”區域。

如您在上圖中看到的,已按國家/地區和運動計算“獎牌數量”,並且還顯示了國家/地區的子總數。
這就是 DAX 如何補充 Power 功能的方式。
計算欄位的型別
計算欄位有兩種型別 - 隱式和顯式。
隱式計算欄位是在 Power Pivot 表字段列表窗格中建立的。
顯式計算欄位是在 Power Pivot 視窗中的表中建立的,或者是在 Excel 視窗中的 PowerPivot 功能區中建立的。
建立隱式計算欄位
隱式計算欄位可以透過兩種方式建立,這兩種方式都在 Power Pivot 表字段窗格中。
在資料透視表字段列表中建立隱式計算欄位
您可以按如下方式從“資料透視表字段”列表中的“獎牌”欄位建立“獎牌計數”欄位 -
- 取消選中“獎牌數量”欄位。
- 右鍵單擊“獎牌”欄位。
- 在下拉列表中單擊“新增到值”。

“獎牌計數”出現在“值”區域中。“獎牌計數”列將新增到資料透視表中。

在“值”區域中建立隱式計算欄位
您可以在“值”區域中建立隱式計算欄位 - “父行百分比”,以表示每個國家/地區贏得的每項運動的獎牌數量佔該國家/地區贏得的總獎牌數量的百分比。
- 單擊“值”區域中“獎牌計數”框中的向下箭頭。
- 在下拉列表中點選“數值欄位設定”。

“數值欄位設定”對話框出現。
- 在“自定義名稱”框中輸入“% Medals”。
- 點選“顯示數值方式”選項卡。
- 點選“顯示數值方式”下的框。
- 點選“父行總計的百分比”。

- 點選“數字格式”按鈕。
“設定單元格格式”對話框出現。
- 點選“百分比”。
- 在小數位數中輸入“0”。
- 點選“確定”。
- 在“數值欄位設定”對話方塊中點選“確定”。
- 選擇“不顯示小計”。

您建立了另一個隱式計算欄位“% Medals”,並且您可以觀察到,對於每個國家/地區,都顯示了按運動專案計算的獎牌百分比。
隱式計算欄位的缺點
隱式計算欄位易於建立。事實上,您甚至在 Excel 資料透視表和資料透視圖表中一直在建立它們。但是,它們具有以下缺點:
它們是易失性的。這意味著,如果您取消選擇用於計算欄位的欄位,它將被刪除。如果您想再次顯示它,則必須再次建立它。
它們的範圍僅限於建立它們的數 據透視表或資料透視圖表。如果您在另一個工作表中建立另一個數據透視表,則必須再次建立計算欄位。
另一方面,顯式計算欄位將與表一起儲存,並在您選擇該表時可用。
建立顯式計算欄位
您可以透過兩種方式建立顯式計算欄位:
在資料模型中表的計算區域中。您已經在“在表中建立計算欄位”部分學習了這一點。
從 Excel 表格中的 PowerPivot 功能區。您將在下一節中學習這種建立顯式計算欄位的方法。
從 PowerPivot 功能區建立顯式計算欄位
要從 PowerPivot 功能區建立顯式計算欄位,請執行以下操作:
- 在工作簿的 Ribbon 中點選“POWERPIVOT”選項卡。
- 點選“計算”區域中的“計算欄位”。
- 點選下拉列表中的“新建計算欄位”。

“計算欄位”對話框出現。
- 填寫以下螢幕截圖中所示的必要資訊。

- 點選“檢查公式”按鈕。
- 僅當公式中沒有錯誤時才點選“確定”。
您可以觀察到,您可以在此對話方塊中定義計算欄位的類別和格式。此外,您可以使用 IntelliSense 功能來了解函式的使用方法,並使用自動完成功能輕鬆完成函式、表和列的名稱。有關 IntelliSense 功能的詳細資訊,請參閱“DAX 公式”章節 – DAX Formulas。
這是建立顯式計算欄位的推薦方法。
Excel DAX - 編輯計算欄位
您可以編輯計算欄位以修改它。但是,在編輯計算欄位之前,您應該知道它儲存在哪裡。這意味著,計算欄位儲存在哪個表中。這對於隱式和顯式計算欄位都適用。計算欄位只能與資料模型中的一個表關聯。
查詢計算欄位
要在資料模型中查詢計算欄位,請執行以下操作:
- 在 Power Pivot 視窗的 Ribbon 中點選“高階”選項卡。
- 點選“顯示隱式計算欄位”。

- 點選“圖表檢視”。

如您在上面的螢幕截圖中看到的,“顯示隱式計算欄位”在 Ribbon 上突出顯示。如果它沒有突出顯示,請再次點選它。
您還可以觀察到有 4 個複選框 - 列、計算欄位、層次結構和 KPI。預設情況下,所有 4 個都已選中。
- 取消選中“列”、“層次結構”和“KPI”框。
這將只保留“計算欄位”框選中。

如上圖所示,只有“結果”表顯示了欄位。其他兩個表是空白的。這表明只有“結果”表具有計算欄位。您還可以觀察到,隱式計算欄位顯示了一個圖示 ,而顯式計算欄位“獎牌計數”沒有該圖示。
在表中檢視計算欄位
您可以按如下方式在表中檢視計算欄位:
- 點選計算欄位。
- 右鍵點選並選擇下拉列表中的“轉到”。

該表將顯示在資料檢視中。

如上圖所示,計算欄位顯示在表的計算區域中。
更改表中的計算欄位
您可以在表中更改用於計算欄位的公式。
- 點選資料模型資料檢視中表中的計算欄位。
- 選擇公式欄中的公式 - 在 := 的右側。
公式將突出顯示。

- 輸入新公式。
- 按 Enter 鍵。
您將在後續章節中詳細瞭解 DAX 公式。
重新命名資料模型中的計算欄位
您可以在資料表中透過資料檢視或圖表檢視更改計算欄位的名稱。
在資料檢視中重新命名計算欄位
- 點選資料模型資料檢視中表中的計算欄位。
- 選擇公式欄中的計算欄位名稱 - 在 := 的左側。
計算欄位名稱將突出顯示。

- 輸入計算欄位的新名稱。
- 按 Enter 鍵。
您將在後續章節中詳細瞭解 DAX 語法。
在圖表檢視中重新命名計算欄位
- 右鍵點選圖表檢視中表中的計算欄位名稱。
- 點選下拉列表中的“重新命名”。

名稱將進入編輯模式。輸入計算欄位的新名稱。
在 Excel 視窗中檢視計算欄位
您可以按如下方式在 Excel 視窗中檢視計算欄位:
- 點選 Ribbon 上的“POWERPIVOT”選項卡。
- 點選“計算”組中的“計算欄位”。
- 點選下拉列表中的“管理計算欄位”。

“管理計算欄位”對話框出現。資料模型中顯式計算欄位的名稱將顯示在對話方塊中。

更改“管理計算欄位”中的計算欄位
您可以在“管理計算欄位”對話方塊中更改計算欄位。
- 點選“獎牌計數”。
- 點選“編輯”按鈕。

“計算欄位”對話框出現。
- 選擇公式框中 = 右側的公式。

- 輸入新公式。
- 點選“確定”。
- 點選“管理計算欄位”對話方塊中的“關閉”。
重新命名“管理計算欄位”中的計算欄位
您可以在“管理計算欄位”對話方塊中重新命名計算欄位。
- 點選“獎牌計數”。
- 點選“編輯”按鈕。
“計算欄位”對話框出現。
- 選擇計算欄位名稱框中的名稱。

- 輸入計算欄位的新名稱。
- 點選“確定”。
- 點選“管理計算欄位”對話方塊中的“關閉”。
在資料模型中移動計算欄位
您可以在建立它的表的計算區域內移動計算欄位。但是,它不能移動到另一個表。
- 右鍵點選計算欄位。
- 點選“剪下”。
- 將指標移動到同一表計算區域中的不同位置。
- 點選“貼上”。
注意 - 計算欄位在表的計算區域中的位置實際上並不重要,因為計算欄位的 DAX 公式中的資料引用是按列名進行的,並且是明確說明的。
Excel DAX - 刪除計算欄位
您可以刪除顯式和隱式計算欄位。本章將介紹幾種執行此操作的方法。
但是,在刪除計算欄位之前,您需要記住以下幾點:
顯式計算欄位可以在多個數據透視表和/或資料透視圖表中使用。因此,您需要確保刪除顯式計算欄位不會影響您已生成的任何報表。
顯式計算欄位可以在其他顯式計算欄位的計算中使用。因此,您需要確保顯式計算欄位未在任何其他顯式計算欄位的計算中使用。
隱式計算欄位僅限於使用它的資料透視表或資料透視圖表。因此,在刪除隱式計算欄位之前,只需確保可以從相應的資料透視表或資料透視圖表中刪除它即可。
建立隱式計算欄位比建立顯式計算欄位更簡單。因此,在刪除顯式計算欄位之前需要更加謹慎。
如果名稱與隱式計算欄位的名稱衝突,則無法建立顯式計算欄位。因此,您可能需要在建立顯式計算欄位之前刪除該隱式計算欄位。
刪除資料模型中的顯式計算欄位
您可以在資料模型的資料檢視或圖表檢視中刪除顯式計算欄位。
在資料檢視中刪除顯式計算欄位
- 在資料檢視的計算區域中找到計算欄位。
- 右鍵點選計算欄位。
- 點選下拉列表中的“刪除”。

出現刪除確認訊息。

點選“從模型中刪除”。顯式計算欄位將被刪除。
在圖表檢視中刪除顯式計算欄位
- 在圖表檢視中找到資料表中的計算欄位。
- 右鍵點選計算欄位名稱。
- 點選下拉列表中的“刪除”。

出現刪除確認訊息。

點選“從模型中刪除”。顯式計算欄位將被刪除,並且在資料表的欄位列表中將看不到它。
在 Excel 視窗中刪除顯式計算欄位
您可以按如下方式從 Excel 視窗中刪除顯式計算欄位:
- 點選 Ribbon 上的“POWERPIVOT”選項卡。
- 點選“計算”組中的“計算欄位”。
- 點選下拉列表中的“管理計算欄位”。

“管理計算欄位”對話框出現。
- 點選顯式計算欄位名稱。
- 點選“刪除”按鈕。

出現刪除確認訊息。

- 點選“是”。頂部會出現一條資料模型已更改的資訊訊息。
- 點選對話方塊中的“關閉”按鈕。

顯式計算欄位將被刪除,並且在工作簿中的資料透視表/資料透視圖表欄位列表中將看不到它。
刪除隱式計算欄位
您可以在資料模型的資料檢視或圖表檢視中刪除隱式計算欄位。
在資料檢視中刪除隱式計算欄位
- 在資料檢視的計算區域中找到計算欄位。
- 右鍵點選計算欄位。
- 點選下拉列表中的“刪除”。

出現刪除確認訊息。

- 點選“從模型中刪除”。隱式計算欄位將被刪除。
在圖表檢視中刪除隱式計算欄位
- 在圖表檢視中找到資料表中的計算欄位。
- 右鍵點選計算欄位名稱。
- 點選下拉列表中的“刪除”。

出現刪除確認訊息。

點選“從模型中刪除”。隱式計算欄位將被刪除,並且在資料表的欄位列表中將看不到它。
Excel DAX - 語法
如前所述,DAX 是一種公式語言,包含運算子、值、函式和公式。在本章中,您將瞭解 DAX 語法。
DAX 語法可以歸類為:
在開始學習 DAX 語法之前,您必須瞭解 Excel 公式和 DAX 公式之間的區別。
Excel 公式和 DAX 公式的區別
DAX 公式與 Excel 公式類似,您可以在公式欄中輸入它們。但是,兩者之間存在一些重要區別。
Excel 公式 | DAX 公式 |
---|---|
Excel 公式是在 Excel 視窗的公式欄中輸入的。 |
DAX 公式是在 Power Pivot 視窗的公式欄中輸入的。 |
在 Excel 公式中,您可以引用單個單元格或資料陣列。 |
在 DAX 公式中,您只能引用完整的資料表或列,即引用只能指向表和表中的欄位。 但是,如果您需要僅對列資料的一部分執行計算,則可以使用篩選並提供所需唯一資料值進行計算的 DAX 函式。 |
Excel 公式支援某些資料型別。 |
DAX 提供的資料型別比 Excel 多。因此,DAX 公式也可以使用其他資料型別。 |
Excel 不支援任何隱式資料轉換。 |
DAX 在計算期間執行隱式資料型別轉換。 |
Excel DAX - 運算子
DAX 是一種公式語言,包含函式、運算子和值,這些函式、運算子和值可用於公式或表示式中,以計算和返回一個或多個值。
您可以使用DAX 運算子來比較值、執行算術計算和連線字串。在本節中,您將瞭解 DAX 運算子及其使用方法。
DAX 運算子的型別
DAX 支援以下型別的運算子:
DAX 運算子優先順序順序
您的 DAX 公式可以包含許多 DAX 運算子,這些運算子組合多個值或表示式。在這種情況下,最終結果將取決於執行操作的順序。DAX 為您提供了預設的運算子優先順序順序,以及覆蓋預設優先順序順序的方法。
DAX 預設運算子優先順序在以下表格中列出。
優先順序順序 | 運算子 | 操作 |
---|---|---|
1 | ^ | 求冪 |
2 | – | 符號 |
3 | * 和 / | 乘法和除法 |
4 | ! | NOT |
5 | + 和 – | 加法和減法 |
6 | & | 連線 |
7 | =, <, >, <=, >= 和 <> | 等於、小於、大於、小於等於、大於等於和不等於 |
DAX 表示式語法
您需要首先了解 DAX 表示式語法以及如何使用運算元和運算子進行表示式求值。
所有表示式都以等號 (=) 開頭。等號表示後續字元構成表示式。
在等號右側,您將擁有由 DAX 運算子連線的運算元。例如,= 5 + 4 > 5。
= 5 * 6 - 3.
表示式始終從左到右讀取,並且根據上一節中給出的 DAX 運算子優先順序按該順序進行計算。
如果 DAX 運算子具有相同的優先順序值,則它們從左到右進行計算。例如,=5*6/10。* 和 / 具有相同的優先順序順序。因此,表示式的計算結果為 30/10 = 3。
如果表示式中的 DAX 運算子具有不同的優先順序值,則它們將按從左到右的優先順序順序進行計算。
= 5 + 4 > 7。預設優先順序是 + 優先,然後是 >。因此,表示式從左到右計算。- 5 + 4 首先計算,結果為 9,然後計算 9 > 5,結果為 TRUE。
= 5 * 6 - 3。預設優先順序是 * 優先,然後是 -。因此,表示式從左到右計算。- 5 * 6 首先計算,結果為 30,然後計算 30 - 3,結果為 27。
= 2 * 5 - 6 * 3。預設優先順序是 * 優先,然後是 *,最後是 -。因此,表示式的計算結果為 10 – 18,然後為 -8。請注意,它不是 10 - 6,結果為 4,然後 4*3,結果為 12。
使用括號控制 DAX 計算順序
您可以透過使用括號更改 DAX 預設運算子優先順序順序,對運算元和運算子進行分組以控制計算順序。
例如,= 5 * 6 - 3 使用 DAX 預設運算子優先順序順序計算結果為 27。如果使用括號對運算元和運算子進行分組,如 = 5 * (6 - 3),則首先計算 6 - 3,結果為 3,然後計算 5 * 3,結果為 15。
= 2 * 5 - 6 * 3 使用 DAX 預設運算子優先順序順序計算結果為 -8。如果使用括號對運算元和運算子進行分組,如 = 2 * (5 - 6) * 3,則首先計算 5 - 6,結果為 -1,然後計算 2 * (-1) * 3,結果為 -6。
如您所見,使用相同的運算元和運算子,透過不同的分組方式可以得到不同的結果。因此,當您在 DAX 公式中使用 DAX 運算子時,應注意計算順序。
Excel 和 DAX 的區別
儘管 DAX 與 Excel 公式有相似之處,但兩者之間存在一些顯著差異。
由於其底層記憶體駐留計算引擎,DAX 比 Excel 更強大。
DAX 支援的資料型別比 Excel 多。
DAX 提供了關係資料庫資料模型的其他高階功能,包括對日期和時間型別的更豐富的支援。
在某些情況下,DAX 中計算的結果或函式的行為可能與 Excel 中的不同。這是由於以下差異造成的:
- 資料型別轉換
- 資料型別
資料型別轉換的差異
在 DAX 中,當您有一個表示式 =value1 operator value2 時,兩個運算元 value1 和 value2 應具有相同的資料型別。如果資料型別不同,DAX 將首先隱式地將它們轉換為通用資料型別。有關詳細資訊,請參閱章節 – DAX 語法。
例如,您必須比較兩個不同資料型別的運算元,例如公式產生的數字,例如 =[Amount] * 0.08 和一個整數。第一個數字可以是小數點後有多位小數的十進位制數,而第二個數字是整數。然後 DAX 處理如下:
首先,DAX 將使用可以儲存這兩種數字的最大數字格式將兩個運算元都轉換為實數。
接下來,DAX 將比較這兩個實數。
相反,Excel 嘗試比較不同資料型別的值,而無需首先將它們強制轉換為通用資料型別。因此,您可能會發現對於相同的比較表示式,DAX 和 Excel 中的結果不同。
資料型別的差異
DAX 和 Excel 中的運算子優先順序順序相同。但是,Excel 支援的運算子百分比 (%) 和資料範圍不受 DAX 支援。此外,DAX 支援表作為資料型別,而 Excel 中則沒有。
此外,在 Excel 公式中,您可以引用單個單元格、陣列或單元格範圍。在 DAX 公式中,您不能引用任何這些。DAX 公式對資料的引用應透過表、列、計算欄位和計算列進行。
如果您從 Excel 中複製公式並將其貼上到 DAX 中,請確保 DAX 公式的正確性,因為 DAX 語法與 Excel 公式語法不同。此外,即使某個函式在 DAX 和 Excel 中具有相同的名稱,其引數也可能不同,函式的結果也可能不同。
您將在後續章節中詳細瞭解所有這些內容。
Excel DAX - 標準引數
DAX 具有標準引數名稱,以方便使用和理解 DAX 函式。此外,您可以在引數名稱前使用某些字首。如果字首足夠清晰,您可以使用字首本身作為引數名稱。
標準引數名稱
以下是 DAX 標準引數名稱:
序號 | 引數名稱和說明 |
---|---|
1 |
expression 任何返回單個標量值的 DAX 表示式,其中表達式將被多次求值(對於每一行/上下文)。 |
2 |
value 任何返回單個標量值的 DAX 表示式,其中表達式將在所有其他操作之前恰好求值一次。 |
3 |
table 任何返回資料表的 DAX 表示式。 |
4 |
tableName 使用標準 DAX 語法的現有表的名稱。它不能是表示式。 |
5 |
columnName 使用標準 DAX 語法的現有列的名稱,通常是完全限定的。它不能是表示式。 |
6 |
name 一個字串常量,將用於提供新物件的名稱。 |
7 |
order 用於確定排序順序的列舉。 |
8 |
ties 用於確定如何處理關聯值的列舉。 |
9 |
type 用於確定 PathItem 和 PathItemReverse 的資料型別的列舉。 |
引數名稱字首
您可以使用字首限定引數名稱:
字首應描述引數的使用方式。
字首應以避免參數的歧義讀取的方式。
例如,
Result_ColumnName - 指的是用於在 DAX LOOKUPVALUE() 函式中獲取結果值的現有列。
Search_ColumnName - 指的是用於在 DAX LOOKUPVALUE() 函式中搜索值的現有列。
僅使用字首作為引數
如果字首足以描述引數,則可以省略引數名稱並僅使用字首。有時,省略引數名稱並僅使用字首可以幫助避免讀取時出現混亂。
例如,考慮 DATE (Year_value, Month_value, Day_value)。您可以省略重複三次的引數名稱 – value,並將其寫成 DATE (Year, Month, Day)。如您所見,僅使用字首可以使函式更易讀。
但是,有時為了清晰起見,必須同時使用引數名稱和字首。
例如,考慮 Year_columnName。引數名稱為 ColumnName,字首為 Year。兩者都需要讓使用者瞭解引數需要對年份的現有列進行引用。
Excel DAX - 函式
大多數DAX 函式與 Excel 函式具有相同的名稱和功能。但是,DAX 函式已被修改為使用 DAX 資料型別並與表和列一起使用。
DAX 有一些您在 Excel 中找不到的附加函式。這些 DAX 函式是為了特定目的而提供的,例如基於與資料模型的關係資料庫方面相關聯的關係執行查詢、能夠迭代表以執行遞迴計算、執行動態聚合以及用於利用時間智慧的計算。
在本節中,您將瞭解 DAX 語言支援的函式。有關這些 DAX 函式用法的更多資訊,請參閱本教程庫中的教程 – DAX 函式。
什麼是 DAX 函式?
DAX 函式是 DAX 語言內建的函式,用於在資料模型中的表格資料上執行各種操作。如前所述,DAX 用於資料分析和商業智慧目的,需要支援從資料中提取、整合和得出見解。基於資料模型的 DAX 函式為您提供了這些實用程式,使您的工作更簡單,一旦您掌握了 DAX 語言和 DAX 函式的使用方法。
Excel 函式與 DAX 函式
您所瞭解的 Excel 函式與 DAX 函式之間存在一些相似之處。但是,也存在一些差異。您需要了解這些差異,以便避免在使用 DAX 函式以及編寫包含 DAX 函式的 DAX 公式時出錯。
Excel 函式和 DAX 函式之間的相似之處
許多 DAX 函式與 Excel 函式具有相同的名稱和相同的總體行為。
DAX 具有查詢函式,類似於 Excel 中的陣列和向量查詢函式。
Excel 函式和 DAX 函式之間的差異
DAX 函式已被修改以採用不同型別的輸入,並且某些 DAX 函式可能會返回不同的資料型別。因此,即使它們具有相同的名稱,您也需要分別瞭解這些函式的使用方法。在本教程中,您會發現每個 DAX 函式都以 DAX 為字首,以避免與 Excel 函式混淆。
您不能在 Excel 公式中使用 DAX 函式,也不能在 DAX 中使用 Excel 公式/函式,除非進行了必要的修改。
Excel 函式以單元格引用或單元格範圍作為引用。DAX 函式從不以單元格引用或單元格範圍作為引用,而是以列或表作為引用。
Excel 日期和時間函式返回一個整數,表示日期作為序列號。DAX 日期和時間函式返回 DAX 中的 datetime 資料型別,而在 Excel 中則沒有。
Excel 沒有返回表的函式,但某些函式可以與陣列一起使用。許多 DAX 函式可以輕鬆引用完整的表和列來執行計算,並返回一個表或一列值。DAX 的此功能增強了 Power Pivot、Power View 和 Power BI 的功能,DAX 在其中得到使用。
DAX 查詢函式要求在表之間建立關係。
Excel 在資料列中支援變體資料型別,即您可以在一列中擁有不同資料型別的資料。而 DAX 期望表中一列中的資料始終為相同的資料型別。如果資料不是相同的資料型別,DAX 會將整列更改為最適合列中所有值的型別。但是,如果資料是匯入的並且出現此問題,DAX 可能會標記錯誤。
要了解 DAX 資料型別和資料型別轉換,請參閱“DAX 語法參考”一章。
DAX 函式的型別
DAX 支援以下型別的函式。
- DAX 表值函式
- DAX 篩選函式
- DAX 聚合函式
- DAX 時間智慧函式
- DAX 日期和時間函式
- DAX 資訊函式
- DAX 邏輯函式
- DAX 數學和三角函式
- DAX 其他函式
- DAX 父子函式
- DAX 統計函式
- DAX 文字函式
在本節中,您將學習按函式類別級別的 DAX 函式。有關 DAX 函式語法以及 DAX 函式返回和執行的操作的詳細資訊,請參閱本教程庫中的 DAX 函式教程。
DAX 時間智慧函式和 DAX 篩選函式功能強大,需要特別提及。有關詳細資訊,請參閱“瞭解 DAX 時間智慧”和“DAX 篩選函式”章節。
DAX 表值函式
許多 DAX 函式將表作為輸入或輸出表,或同時執行這兩項操作。這些 DAX 函式稱為 DAX 表值函式。因為表可以具有單列,所以 DAX 表值函式也採用單列作為輸入。您有以下型別的 DAX 表值函式:
- DAX 聚合函式
- DAX 篩選函式
- DAX 時間智慧函式
瞭解 DAX 表值函式有助於您有效地編寫 DAX 公式。
DAX 聚合函式
DAX 聚合函式聚合錶行上的任何表示式,並在計算中很有用。
以下是一些 DAX 聚合函式:
ADDCOLUMNS (<table>, <name>, <expression>, [<name>, <expression>] …)
AVERAGE (<column>)
AVERAGEA (<column>)
AVERAGEX (<table>, <expression>)
COUNT (<column>)
COUNTA (<column>)
COUNTAX (<table>, <expression>)
COUNTBLANK (<column>)
COUNTROWS (<table>)
COUNTX (<table>, <expression>)
CROSSJOIN (<table1>, <table2>, [<table3>] …)
DISTINCTCOUNT (<column>)
GENERATE (<table1>, <table2>)
GENERATEALL (<table1>, <table2>)
MAX (<column>)
MAXA (<column>)
MAXX (<table>, <expression>)
MIN (<column>)
MINA (<column>)
MINX (<table>, <expression>)
PRODUCT (<column>)
PRODUCTX (<table>, <expression>)
ROW (<name>, <expression>, [<name>, <expression>] …)
SELECTCOLUMNS (<table>, <name>, <scalar_expression>,
[<name>, <scalar_expression>] …)
SUM (<column>)
SUMMARIZE (<table>, <groupBy_columnName>, [<groupBy_columnName>] …, [<name>, <expression>] …)
SUMX (<table>, <expression>)
TOPN (<n_value>, <table>, <orderBy_expression>, [<order>], [<orderBy_expression>, [<order>]] …)
DAX 篩選函式
DAX 篩選函式返回與當前行相關的列、表或值。您可以使用 DAX 篩選函式返回特定資料型別、在相關表中查詢值以及按相關值篩選。DAX 查詢函式透過使用表以及它們之間的關係來工作。DAX 篩選函式使您能夠操縱資料上下文以建立動態計算。
以下是一些 DAX 篩選函式:
ADDMISSINGITEMS(<showAllColumn>, [<showAllColumn>] …, <table>, <groupingColumn>, [<groupingColumn>] … [filterTable] …)
ALL( {<table> | <column>, [<column>], [<column>] …} )
ALLEXCEPT(<table>, <column>, [<column>] …)
ALLNOBLANKROW(<table>|<column>)
ALLSELECTED([<tableName> | <columnName>])
CALCULATE (<expression>, <filter1>, <filter2>…)
CALCULATETABLE (<expression>, <filter1>, <filter2>…)
CROSSFILTER (<columnName1>, <columnName2>, <direction>)
DISTINCT (<column>)
EARLIER(<column>, <number>)
EARLIEST(<column>)
FILTER(<table>,<filter>)
FILTERS(<columnName>)
HASONEFILTER(<columnName>)
HASONEVALUE(<columnName>)
ISCROSSFILTERED (<columnName>)
ISFILTERED (<columnName>)
KEEPFILTERS (<expression>)
RELATED(<column>)
RELATEDTABLE(<tableName>)
SUBSTITUTEWITHINDEX (<table>, <indexColumnName>, <indexColumnsTable>, <orderBy_expression>, [<order>], [<orderBy_expression>, [<order>]] …])
USERELATIONSHIP(<columnName1>,<columnName2>)
VALUES(<TableNameOrColumnName>)
DAX 時間智慧函式
DAX 時間智慧函式返回日期表或使用日期表來計算聚合。這些 DAX 函式透過使您能夠使用時間段(包括天、月、季度和年)來操作資料,幫助您建立支援商業智慧分析需求的計算。
以下是一些 DAX 時間智慧函式:
CLOSINGBALANCEMONTH (<expression>,<dates>[,<filter>])
CLOSINGBALANCEQUARTER (<expression>,<dates>, [<filter>])
CLOSINGBALANCEYEAR (<expression>,<dates>, [<filter>], [<year_end_date>])
DATEADD (<dates>,<number_of_intervals>, <interval>)
DATESBETWEEN (<dates>,<start_date>,<end_date>)
DATESINPERIOD (<dates>,<start_date>, <number_of_intervals>,<interval>)
DATESMTD (<dates>)
DATESQTD (<dates>)
DATESYTD (<dates>, [<year_end_date>])
ENDOFMONTH (<dates>)
ENDOFQUARTER (<dates>)
ENDOFYEAR (<dates> , [<year_end_date>])
FIRSTDATE (<dates>)
FIRSTNONBLANK (<column>,<expression>)
LASTDATE (<dates>)
LASTNONBLANK (<column>,<expression>)
NEXTDAY (<dates>)
NEXTMONTH (<dates>)
NEXTQUARTER (<dates>)
NEXTYEAR (<dates>, [<year_end_date>])
OPENINGBALANCEMONTH (<expression>,<dates>, [<filter>])
OPENINGBALANCEQUARTER (<expression>,<dates>, [<filter>])
OPENINGBALANCEYEAR (<expression>,<dates>, [<filter>], [<year_end_date>])
PARALLELPERIOD (<dates>,<number_of_intervals>, <interval>)
PREVIOUSDAY(<dates>)
PREVIOUSMONTH(<dates>)
PREVIOUSQUARTER(<dates>)
PREVIOUSYEAR (<dates>, [<year_end_date>])
SAMEPERIODLASTYEAR(<dates>)
STARTOFMONTH(<dates>)
STARTOFQUARTER(<dates>)
STARTOFYEAR(<dates>)
TOTALMTD (<expression>,<dates>, [<filter>])
TOTALQTD(<expression>,<dates>, [<filter>])
TOTALYTD(<expression>,<dates>, [<filter>], [<year_end_date>])
DAX 日期和時間函式
DAX 日期和時間函式類似於 Excel 日期和時間函式。但是,DAX 日期和時間函式基於 DAX 的 datetime 資料型別。
以下是一些 DAX 日期和時間函式:
- DATE(<year>, <month>, <day>)
- DATEVALUE(date_text)
- DAY(<date>)
- EDATE(<start_date>, <months>)
- EOMONTH(<start_date>, <months>)
- HOUR(<datetime>)
- MINUTE(<datetime>)
- MONTH(<datetime>)
- NOW()
- SECOND(<time>)
- TIME(hour, minute, second)
- TIMEVALUE(time_text)
- TODAY()
- WEEKDAY(<date>, <return_type>)
- WEEKNUM(<date>, <return_type>)
- YEAR(<date>)
- YEARFRAC(<start_date>, <end_date>, <basis>)
DAX 資訊函式
DAX 資訊函式檢視作為引數提供的單元格或行,並告訴您值是否與預期型別匹配。
以下是一些 DAX 資訊函式:
CONTAINS (<table>, <columnName>, <value>, [<columnName>, <value>]…)
CUSTOMDATA()
ISBLANK(<value>)
ISERROR(<value>)
ISEVEN(number)
ISLOGICAL(<value>)
ISNONTEXT(<value>)
ISNUMBER(<value>)
ISONORAFTER (<scalar_expression>, <scalar_expression>, [sort_order], [<scalar_expression>, <scalar_expression>, [sort_order]]…)
ISTEXT(<value>)
LOOKUPVALUE (<result_columnName>, <search_columnName>, <search_value>, [<search_columnName>, <search_value>]…)
USERNAME()
DAX 邏輯函式
DAX 邏輯函式返回有關表示式中值的的資訊。例如,DAX TRUE 函式讓您知道您正在評估的表示式是否返回 TRUE 值。
以下是一些 DAX 邏輯函式:
- AND(<logical1>,<logical2>)
- FALSE()
- IF(邏輯測試>,<如果為真時的值>, 如果為假時的值)
- IFERROR(值, 如果出錯時的值)
- NOT(<邏輯值>)
- OR(<邏輯值1>,<邏輯值2>)
- SWITCH(<表示式>, <值>, <結果>, [<值>, <結果>]…, [<其他>])
- TRUE()
DAX 數學和三角函式
DAX 數學和三角函式與 Excel 數學和三角函式非常相似。
以下是一些 DAX 數學和三角函式 -
- ABS(<數字>)
- ACOS(數字)
- ACOSH(數字)
- ASIN(數字)
- ASINH(數字)
- ATAN(數字)
- ATANH(數字)
- CEILING(<數字>, <基數>)
- COMBIN(數字, 選取的數字)
- COMBINA(數字, 選取的數字)
- COS(數字)
- COSH(數字)
- CURRENCY(<值>)
- DEGREES(角度)
- DIVIDE(<分子>, <分母>, [<備選結果>])
- EVEN(數字)
- EXP(<數字>)
- FACT(<數字>)
- FLOOR(<數字>, <基數>)
- GCD(數字1, [數字2], ...)
- INT(<數字>)
- ISO.CEILING(<數字>, [<基數>])
- LCM(數字1, [數字2], ...)
- LN(<數字>)
- LOG(<數字>,<底數>)
- LOG10(<數字>)
- INT(<數字>)
- MROUND(<數字>, <倍數>)
- ODD(數字)
- PI()
- POWER(<數字>, <冪>)
- PRODUCT(<列>)
- PRODUCTX(<表>, <表示式>)
- QUOTIENT(<分子>, <分母>)
- RADIANS(角度)
- RAND()
- RANDBETWEEN(<下限>,<上限>)
- ROUND(<數字>, <位數>)
- ROUNDDOWN(<數字>, <位數>)
- ROUNDUP(<數字>, <位數>)
- SIN(數字)
- SINH(數字)
- SIGN(<數字>)
- SQRT(<數字>)
- SUM(<列>)
- SUMX(<表>, <表示式>)
- TAN(數字)
- TANH(數字)
- TRUNC(<數字>,<位數>)
DAX 其他函式
這些 DAX 函式執行其他大多數函式所屬類別無法定義的唯一操作。
以下是一些 DAX 其他函式 -
EXCEPT(<表表達式1>, <表表達式2>)
GROUPBY (<表>, [<groupBy_列名1>], [<名稱>, <表示式>] … )
INTERSECT(<表表達式1>, <表表達式2>)
ISEMPTY(<表表達式>)
NATURALINNERJOIN(<左連線表>, <右連線表>)
NATURALLEFTOUTERJOIN(<左連線表>, <右連線表>)
SUMMARIZECOLUMNS (<groupBy_列名>, [<groupBy_列名>]…, [<篩選表>] …, [<名稱>, <表示式>]…)
UNION (<表表達式1>, <表表達式2>, [<表表達式>]…)
VAR <名稱> = <表示式>
DAX 父子函式
DAX 父子函式在管理資料模型中以父子層次結構呈現的資料方面很有用。
以下是一些 DAX 父子函式 -
- PATH(<ID_列名>, <父級_列名>)
- PATHCONTAINS(<路徑>, <專案>)
- PATHITEM(<路徑>, <位置>, [<型別>])
- PATHITEMREVERSE(<路徑>, <位置>, [<型別>])
- PATHLENGTH(<路徑>)
DAX 統計函式
DAX 統計函式與 Excel 統計函式非常相似。
以下是一些 DAX 統計函式 -
BETA.DIST(x, alpha, beta, cumulative,[A],[B])
BETA.INV(probability, alpha, beta,[A],[B])
CHISQ.INV(probability, deg_freedom)
CHISQ.INV.RT(probability, deg_freedom)
CONFIDENCE.NORM(alpha, standard_dev, size)
CONFIDENCE.T(alpha, standard_dev, size)
DATATABLE (ColumnName1, DataType1, ColumnName2, DataType2 ..., {{Value1, Value2...}, {ValueN, ValueN+1...}...})
EXPON.DIST(x, lambda, cumulative)
GEOMEAN(<列>)
GEOMEANX(<表>, <表示式>)
MEDIAN(<列>)
MEDIANX(<表>, <表示式>)
PERCENTILE.EXC(<列>, <k>)
PERCENTILE.INC(<列>, <k>)
PERCENTILEX.EXC(<表>, <表示式>, k)
PERCENTILEX.EXC(<表>, <表示式>, k)
POISSON.DIST(x, mean, cumulative)
RANK.EQ(<值>, <列名>[, <順序>])
RANKX(<表>, <表示式>[, <值>[, <順序>[, <並列>]]])
SAMPLE (<n_值>, <表>, <orderBy_表示式>, [<順序>], [<orderBy_表示式>, [<順序>]]…)
STDEV.P(<列名>)
STDEV.S(<列名>)
STDEVX.P(<表>, <表示式>)
STDEVX.S(<表>, <表示式>)
SQRTPI(數字)
VAR.P(<列名>)
VAR.S(<列名>)
VARX.P(<表>, <表示式>)
VARX.S(<表>, <表示式>)
XIRR(<表>, <值>, <日期>, [猜測])
XNPV(<表>, <值>, <日期>, <利率>)
DAX 文字函式
DAX 文字函式可用於表和列。使用 DAX 文字函式,您可以返回字串的一部分,在字串中搜索文字或連線字串值。您還可以控制日期、時間和數字的格式。
以下是一些 DAX 文字函式 -
- BLANK()
- CODE(文字)
- CONCATENATE(<文字1>, <文字2>)
- CONCATENATEX(<表>, <表示式>, [分隔符])
- EXACT(<文字1>,<文字2>)
- FIND(<查詢文字>, <查詢範圍文字>, [<起始位置>], [<未找到時的值>])
- FIXED(<數字>, <小數位數>, <不顯示逗號>)
- FORMAT(<值>, <格式字串>)
- LEFT(<文字>, <字元數>)
- LEN(<文字>)
- LOWER(<文字>)
- MID(<文字>, <起始位置>, <字元數>)
- REPLACE(<舊文字>, <起始位置>, <字元數>, <新文字>)
- REPT(<文字>, <重複次數>)
- RIGHT(<文字>, <字元數>)
- SEARCH(<查詢文字>, <查詢範圍文字>, [<起始位置>], [<未找到時的值>])
- SUBSTITUTE(<文字>, <舊文字>, <新文字>, <例項編號>)
- TRIM(<文字>)
- UPPER (<文字>)
- VALUE(<文字>)
Excel DAX - 瞭解 DAX 函式
在 Excel 2013 中,DAX 有 246 個函式。您已經在“DAX 函式”一章中瞭解了不同型別的 DAX 函式。但是,如果您必須在 DAX 公式中使用 DAX 函式,則需要詳細瞭解該函式。您應該瞭解函式的語法、引數型別、函式返回的內容等。
如果您正在編寫 DAX 公式,建議在適用時使用 DAX 函式。為此,您可以參考本教程庫中的“DAX 函式”教程,深入瞭解每個 246 個 DAX 函式的使用場景和使用方法。您始終可以在本教程和 DAX 函式教程之間來回切換,以掌握 DAX。
在本節中,您將瞭解如何閱讀和解釋 DAX 函式教程中的 DAX 函式。
DAX 函式 - 說明結構
在 DAX 函式教程中,每個 DAX 函式都以標準結構進行解釋,包括以下部分 -
- 描述
- 語法
- 引數
- 返回值
- 備註
- 示例
您將在以下部分了解每個部分。
描述
在“描述”部分,您將瞭解 DAX 函式的功能及其用途。
語法
在“語法”部分,您將瞭解確切的函式名稱和相應的引數。
引數
在“引數”部分,您將瞭解特定 DAX 函式的每個引數,引數是輸入還是輸出,以及是否有任何選項。如“DAX 標準引數”一章所示,將僅使用標準引數名稱。
返回值
在“返回值”部分,您將瞭解 DAX 函式將返回什麼值及其資料型別。
備註
在“備註”部分,您將瞭解有關 DAX 函式用法所需瞭解的任何額外資訊。
示例
DAX 函式說明將以函式用法的示例結尾。
Excel DAX - 評估上下文
在 DAX 中,“上下文”是一個重要的術語,在編寫 DAX 公式時應瞭解。DAX 上下文也稱為**評估上下文**,用於確定 DAX 公式的評估和相應的結果。這意味著 DAX 公式的結果可能會根據上下文而有所不同。您應該清楚地瞭解如何使用特定的 DAX 上下文以及結果如何不同。
評估上下文使您能夠執行動態分析,其中 DAX 公式的結果可以更改以反映當前行或單元格選擇以及任何相關資料。瞭解上下文並有效地使用上下文對於構建強大的 DAX 公式、執行動態資料分析和解決 DAX 公式中的問題非常重要。評估上下文是 DAX 所有高階功能的基礎,您需要掌握這些功能才能建立複雜的資料分析報告。
當您不斷引用 DAX 函式以在 DAX 公式中進行相關使用時,您需要參考本章關於 DAX 上下文的介紹,以獲得對結果的清晰認識。
DAX 中的上下文型別
DAX 支援以下評估上下文 -
- 行上下文
- 篩選上下文
當評估 DAX 公式時,將考慮所有上下文並按相關性應用。上下文一起存在,公式的結果將根據計算值時使用的上下文而有所不同。例如,當您在資料透視表中選擇行、列和篩選器欄位時,子總數將根據子總數/總數關聯的行和列以及行和列中的值動態計算,行和列中的值由使用的篩選器決定。
行上下文
行上下文表示 DAX 公式或 DAX 函式在任何時間點都知道它正在引用表的哪一行。您可以將行上下文視為當前行。公式將逐行計算,並使用行上下文。
某些 DAX 函式(例如 X 函式、FILTER())和所有計算列都具有行上下文。例如,如果您使用 DAX 公式 = YEAR([Date]) 建立一個名為 Year 的計算列,則計算列的值是透過在表中逐行應用給定的 DAX 公式獲得的,並應用於給定的列。
這意味著,如果您建立了一個計算列,則行上下文將包含每一行的值以及與當前行相關的列中的值,由使用的 DAX 公式確定。儘管 DAX 公式不包含對行的引用,但 DAX 在計算值時會隱式理解行上下文。
當您定義計算列時,DAX 會自動建立行上下文,並且使用 DAX 公式計算的所有計算值都將顯示在計算列中。
相反,當您使用 SUMX 等 DAX 函式時,逐行計算的值將相加,並且只會顯示最終結果。也就是說,中間值將被丟棄。
當您具有相關表時,行上下文將確定相關表中的哪些行與當前行關聯。但是,行上下文不會自動透過關係傳播。您必須為此使用 DAX 函式 - RELATED 和 RELATEDTABLE。
多個行上下文
DAX 具有 SUMX 等迭代器函式。您可以使用這些函式巢狀行上下文。透過這種方式,您可以在程式中對內部迴圈和外部迴圈進行遞迴,其中您可以擁有多個當前行和當前行上下文。
例如,您可以使用 DAX 函式 Earlier(),它儲存來自在當前操作之前進行的操作的行上下文。此函式在記憶體中儲存兩組上下文 - 一組上下文表示公式內部迴圈的當前行,另一組上下文表示公式外部迴圈的當前行。DAX 會自動在兩個迴圈之間提供值,以便您可以建立複雜的聚合。
例如,請參閱“場景 - 對值進行排名和比較”一章中的“建立動態排名值的 DAX 公式”方案。
篩選上下文
篩選上下文是指應用於 DAX 中資料模型的任何篩選。篩選上下文由資料透視表和 DAX 函式建立。
由資料透視表建立的篩選上下文
由資料透視表建立的篩選上下文是由對以下資料透視表字段所做的選擇應用的自然篩選 -
- 行
- 列
- 篩選器
- 切片器
由資料透視表建立的篩選上下文會篩選資料模型中的基礎表。如果表之間存在關係,則篩選器會從查詢表向下傳遞到資料表。這意味著,您可以根據查詢表的結果篩選資料表。篩選器傳播不會反向發生。但是,您可以使用 DAX 公式根據資料表的結果篩選查詢表。
DAX 函式建立的篩選上下文
您可以使用 DAX 篩選器函式來定義計算欄位和計算列,這些欄位和列包含控制 DAX 公式使用值的篩選器表示式。然後,這些計算欄位和計算列成為資料透視表字段列表的一部分,您可以將它們新增到資料透視表中。您還可以使用這些 DAX 篩選器函式有選擇地清除特定列上的篩選器。CALCULATE() 是一個強大的 DAX 篩選器函式,用於建立篩選上下文。有關示例,請參閱“方案 - 執行復雜計算”一章。
篩選上下文作為行上下文的補充
行上下文不會自動建立篩選上下文。您可以使用包含 DAX 篩選器函式的 DAX 公式實現相同的效果。
Excel DAX - 公式
DAX 是一種用於在 Power Pivot 表中建立自定義計算的公式語言。您可以在 DAX 公式中使用專為處理關係資料和執行動態聚合而設計的 DAX 函式。
DAX 公式與 Excel 公式非常相似。要建立 DAX 公式,請鍵入等號,然後鍵入函式名稱或表示式以及任何必需的值或引數。
DAX 函式與 DAX 公式
DAX 公式可以包含 DAX 函式並利用其用法。這就是 DAX 公式在重要方面往往不同於 DAX 函式的地方。
DAX 函式始終引用完整的列或表。如果只想使用表或列中的特定值,則可以向公式新增篩選器。
如果要基於逐行的方式自定義計算,Power Pivot 提供了一些函式,讓您可以使用當前行值或相關值來執行根據上下文變化的計算。
DAX 包含一種函式型別,其結果返回一個表,而不是單個值。這些函式可用於為其他函式提供輸入,從而計算整個表或列的值。
某些 DAX 函式提供時間智慧,使您能夠使用有意義的日期範圍建立計算,並在並行期間比較結果。
瞭解 DAX 公式語法
每個 DAX 公式都具有以下語法:
每個公式都必須以等號開頭。
在等號右側,您可以鍵入或選擇函式名稱,或鍵入表示式。表示式可以包含由 DAX 運算子連線的表名和列名。
以下是一些有效的 DAX 公式:
- [column_Cost] + [column_Tax]
- = Today ()
瞭解 IntelliSense 功能
DAX 提供了 IntelliSense 功能,使您能夠快速準確地編寫 DAX 公式。使用此功能,您無需完全鍵入表、列和函式名稱,而是在編寫 DAX 公式時從下拉列表中選擇相關的名稱。
開始鍵入函式名稱的前幾個字母。自動完成會顯示以這些字母開頭的可用函式列表。
將指標放在任何函式名稱上。將顯示 IntelliSense 工具提示,向您提供函式的用途。
單擊函式名稱。函式名稱將顯示在公式欄中,並顯示語法,這將在您選擇引數時為您提供指導。
鍵入所需的表名的第一個字母。自動完成會顯示以該字母開頭的可用表和列的列表。
按 Tab 鍵或單擊名稱以將自動完成列表中的專案新增到公式中。
單擊Fx按鈕以顯示可用函式的列表。要從下拉列表中選擇函式,請使用箭頭鍵突出顯示專案,然後單擊“確定”將函式新增到公式中。
透過從可能的表和列的下拉列表中選擇它們或鍵入所需的值來為函式提供引數。
強烈建議使用此方便的 IntelliSense 功能。
在何處使用 DAX 公式?
您可以在建立計算列和計算欄位時使用 DAX 公式。
您可以在計算列中使用 DAX 公式,方法是新增一列,然後在公式欄中鍵入表示式。您可以在 Power Pivot 視窗中建立這些公式。
您可以在計算欄位中使用 DAX 公式。您可以建立這些公式:
在 Excel 視窗的“計算欄位”對話方塊中,或
在 Power Pivot 視窗的表的計算區域中。
相同的公式在計算列或計算欄位中使用時,其行為可能會有所不同。
在計算列中,公式始終應用於整個表中列中的每一行。根據行上下文,值可能會發生變化。
但是,在計算欄位中,結果的計算在很大程度上取決於上下文。也就是說,資料透視表的設計以及行和列標題的選擇會影響計算中使用的值。
要編寫 DAX 公式,務必瞭解 DAX 中的上下文概念。在您開始使用 DAX 的初期,這可能有點困難,但一旦您掌握了它,您就可以編寫有效的 DAX 公式,這些公式是複雜和動態資料分析所必需的。有關詳細資訊,請參閱“DAX 上下文”一章。
建立 DAX 公式
您已經在上一節中瞭解了 IntelliSense 功能。在建立任何 DAX 公式時,請務必使用它。
要建立 DAX 公式,請執行以下步驟:
鍵入等號。
在等號右側,鍵入以下內容:
鍵入函式或表名的第一個字母,然後從下拉列表中選擇完整的名稱。
如果您選擇了函式名稱,請鍵入括號“(”。
如果您選擇了表名,請鍵入方括號“ [”。鍵入列名的第一個字母,然後從下拉列表中選擇完整的名稱。
用“]”關閉列名,用“)”關閉函式名。
在表示式之間鍵入 DAX 運算子或鍵入“,”以分隔函式引數。
重複步驟 1-5,直到 DAX 公式完成。
例如,您要查詢東部地區的總銷售額。您可以編寫如下所示的 DAX 公式。East_Sales 是表名。Amount 是表中的一列。
SUM ([East_Sales[Amount])
如“DAX 語法”一章中所述,建議在每次引用任何列名時都使用表名以及列名。這被稱為“完全限定名稱”。
DAX 公式會根據它是用於計算欄位還是計算列而有所不同。有關詳細資訊,請參閱以下各節。
為計算列建立 DAX 公式
您可以在 Power Pivot 視窗中為計算列建立 DAX 公式。
- 單擊要向其中新增計算列的表的選項卡。
- 單擊功能區上的“設計”選項卡。
- 單擊“新增”。
- 在公式欄中鍵入計算列的 DAX 公式。
= DIVIDE (East_Sales[Amount], East_Sales[Units])
此 DAX 公式對 East_Sales 表中的每一行執行以下操作:
將一行中 Amount 列的值除以同一行中 Units 列的值。
將結果放置在同一行的新新增列中。
重複步驟 1 和 2,直到完成表中的所有行。
使用上述公式,您添加了一列用於銷售這些單位的單價。
正如您所觀察到的,計算列也需要計算和儲存空間。因此,僅在必要時才使用計算列。儘可能使用計算欄位。
有關詳細資訊,請參閱“計算列”一章。
為計算欄位建立 DAX 公式
您可以在 Excel 視窗或 Power Pivot 視窗中為計算欄位建立 DAX 公式。對於計算欄位,您需要預先提供名稱。
要在 Excel 視窗中為計算欄位建立 DAX 公式,請使用“計算欄位”對話方塊。
要在 Power Pivot 視窗中為計算欄位建立 DAX 公式,請單擊相關表中計算區域中的一個單元格。以 CalculatedFieldName:= 開頭 DAX 公式。
例如,Total East Sales Amount:=SUM ([East_Sales[Amount])
如果您在 Excel 視窗中使用“計算欄位”對話方塊,則可以在儲存公式之前檢查公式,並將其養成強制習慣,以確保使用正確的公式。
有關這些選項的更多詳細資訊,請參閱“計算欄位”一章。
使用公式欄建立 DAX 公式
Power Pivot 視窗也有一個公式欄,它類似於 Excel 視窗公式欄。公式欄使建立和編輯公式變得更容易,使用自動完成功能可以最大程度地減少語法錯誤。
要輸入表名,請開始鍵入表名。公式自動完成功能提供了一個下拉列表,其中包含以這些字母開頭的有效表名。您可以從一個字母開始,並鍵入更多字母以縮小列表範圍(如果需要)。
要輸入列名,您可以從所選表中的列名列表中選擇它。在表名的右側鍵入方括號“ [”,然後從所選表中的列列表中選擇該列。
使用自動完成的提示
以下是一些使用自動完成的提示:
您可以在 DAX 公式中巢狀函式和公式。在這種情況下,您可以在包含巢狀函式的現有公式的中間使用公式自動完成。插入點之前的文字用於在下拉列表中顯示值,並且插入點之後的所有文字保持不變。
為常量建立的已定義名稱不會顯示在自動完成下拉列表中,但您仍然可以鍵入它們。
不會自動新增函式的右括號。您需要自己新增。
您必須確保每個函式在語法上都是正確的。
瞭解插入函式功能
您可以在 Power Pivot 視窗和 Excel 視窗中找到標記為fx的“插入函式”按鈕。
Power Pivot 視窗中的“插入函式”按鈕位於公式欄左側。
Excel 視窗中的“插入函式”按鈕位於“計算欄位”對話方塊中“公式”的右側。
當您單擊fx按鈕時,將出現“插入函式”對話方塊。“插入函式”對話方塊是查詢與您的 DAX 公式相關的 DAX 函式的最簡單方法。
“插入函式”對話方塊可幫助您按類別選擇函式,並提供每個函式的簡短說明。

在 DAX 公式中使用插入函式
假設您要建立以下計算欄位:
Medal Count: = COUNTA (]Medal])
您可以使用以下步驟使用“插入函式”對話方塊:
- 單擊“結果”表的計算區域。
- 在公式欄中鍵入以下內容:
Medal Count: =
- 單擊“插入函式”按鈕(fx)。
出現“插入函式”對話方塊。
在“選擇類別”框中選擇“統計”,如下面的螢幕截圖所示。
在“選擇函式”框中選擇 COUNTA,如下面的螢幕截圖所示。

如您所見,將顯示所選 DAX 函式語法和函式說明。這使您能夠確保它是您要插入的函式。
單擊“確定”。“Medal Count:=COUNTA(”將出現在公式欄中,並且還會出現顯示函式語法的工具提示。
鍵入 [. 這意味著您即將鍵入列名。當前表中所有列和計算欄位的名稱都將顯示在下拉列表中。您可以使用智慧感知來完成公式。
鍵入 M。下拉列表中顯示的名稱將僅限於以“M”開頭的名稱。
單擊 Medal。

雙擊 Medal。“Medal Count: = COUNTA([Medal]”將顯示在公式欄中。關閉括號。
按 Enter 鍵。您完成了。您也可以使用相同的過程來建立計算列。您還可以按照相同的步驟在 Excel 視窗的“計算欄位”對話方塊中使用“插入函式”功能插入函式。
單擊“公式”右側的“插入函式”(fx)按鈕。
出現“插入函式”對話方塊。其餘步驟與上述步驟相同。
在 DAX 公式中使用多個函式
DAX 公式最多可以包含 64 個巢狀函式。但是,DAX 公式不太可能包含如此多的巢狀函式。
如果 DAX 公式包含許多巢狀函式,則具有以下缺點:
- 公式將非常難以建立。
- 如果公式存在錯誤,則將非常難以除錯。
- 公式計算速度不會很快。
在這種情況下,您可以將公式拆分為更小的可管理公式,並逐步構建大型公式。
使用標準聚合建立 DAX 公式
執行資料分析時,您將對聚合資料執行計算。DAX 中有幾個聚合函式,例如 SUM、COUNT、MIN、MAX、DISTINCTCOUNT 等,您可以在 DAX 公式中使用它們。
您可以使用 Power Pivot 視窗中的“自動求和”功能自動建立使用標準聚合的公式。
- 單擊 Power Pivot 視窗中的“結果”選項卡。將顯示“結果”表。
- 單擊“Medal”列。將選擇整列 – Medal。
- 單擊功能區上的“開始”選項卡。
- 單擊“計算”組中“自動求和”旁邊的向下箭頭。

- 在下拉列表中單擊 COUNT。

如您所見,計算欄位“Medal 的計數”出現在列 – Medal 下方的計算區域中。DAX 公式也出現在公式欄中:
Count of Medal: = COUNTA([Medal])
“自動求和”功能為您完成了工作 – 建立了用於資料聚合的計算欄位。此外,“自動求和”已採用了 DAX 函式 COUNT 的適當變體,即 COUNTA(DAX 具有 COUNT、COUNTA、COUNTAX 函式)。
請注意 – 要使用“自動求和”功能,您需要單擊功能區上“自動求和”旁邊的向下箭頭。如果您改為單擊“自動求和”本身,則會得到:
Sum of Medal: = SUM([Medal])
並且會標記錯誤,因為 Medal 不是數字資料列,並且列中的文字無法轉換為數字。

您可以參考“DAX 錯誤參考”一章以瞭解有關 DAX 錯誤的詳細資訊。
DAX 公式和關係模型
您知道,在 Power Pivot 的資料模型中,您可以使用多個數據表,並透過定義關係來連線這些表。這將使您能夠建立有趣的 DAX 公式,這些公式使用相關表之間列的相關性進行計算。
當您在兩個表之間建立關係時,您需要確保用作鍵的兩個列的值至少對於大多數行(如果不是全部)都匹配。在 Power Pivot 資料模型中,即使在鍵列中存在不匹配的值,也可以建立關係,因為 Power Pivot 不強制執行引用完整性(有關詳細資訊,請參閱下一節)。但是,鍵列中存在空白或不匹配的值可能會影響 DAX 公式的結果和資料透視表的顯示。
引用完整性
建立引用完整性涉及構建一組規則,以在輸入或刪除資料時保留表之間定義的關係。如果您不完全確保這一點,因為 Power Pivot 不強制執行它,您可能無法在進行資料更改之前建立的 DAX 公式中獲得正確的結果。
如果您強制執行引用完整性,則可以防止以下陷阱:
在相關表中新增行,而主表中沒有關聯行(即,鍵列中具有匹配值的行)。
更改主表中的資料,這將導致相關表中出現孤立行(即,鍵列中資料值在主表鍵列中沒有匹配值的行)。
刪除主表中的行,而相關表的行中存在匹配的資料值。
更新 DAX 公式的結果
DAX 公式用於涉及大量資料的計算,包括來自外部資料來源的資料。由於 DAX 計算也適用於即時資料,因此資料可能會不時發生變化。
DAX 公式的結果需要在兩種情況下更新:
資料重新整理 - 資料重新整理時。
重新計算 - DAX 公式發生更改時。
瞭解資料重新整理與重新計算
資料重新整理和重新計算是兩個獨立但相關的操作。
資料重新整理是從外部資料來源獲取最新資料,更新工作簿中資料模型中資料的過程。
重新計算是更新工作簿中包含 DAX 公式的所有列、表和資料透視表的過程,以反映由於 DAX 公式本身的更改而導致的基礎資料中的更改。
在重新計算其中的 DAX 公式之前,您不應儲存或釋出工作簿。
更新資料模型中資料的不同方法
Power Pivot 不會自動檢測外部資料來源中的更改。
您可以從 Power Pivot 視窗手動重新整理資料,並以您可以指定的間隔重新整理資料。
如果已將工作簿釋出到 SharePoint 網站,則可以安排從外部源自動重新整理資料。
有關這些內容的詳細資訊,請參閱“更新資料模型中的資料”一章。
DAX 公式的重新計算
DAX 公式的重新計算是一項重要的任務,因為在重新計算期間,將檢查列依賴項,如果列已更改、資料無效或工作正常的 DAX 公式中出現錯誤,您將收到通知。
重新計算會以以下方式影響效能:
對於計算列,每當您更改 DAX 公式時,都應始終重新計算整個列的 DAX 公式的結果。
對於計算欄位,除非將計算欄位置於資料透視表或資料透檢視的上下文中,否則不會計算 DAX 公式的結果。當您更改影響資料篩選器的任何行或列標題或手動重新整理資料透視表時,將重新計算 DAX 公式。
在 DAX 中,可以自動或手動重新計算公式。
要詳細瞭解重新計算,請參閱“重新計算 DAX 公式”一章。
Excel DAX - 更新資料模型中的資料
DAX 用於計算 Excel Power Pivot 中資料模型中的資料。DAX 使資料建模和報告活動能夠以有效的方式進行處理。但是,這需要不時更新資料模型中的資料,以反映當前資料。
您可以透過建立資料連線將資料從外部資料來源匯入到工作簿的資料模型中。您可以隨時更新源中的資料。如果您從包含即時銷售資訊的關係資料庫或每天更新多次的資料饋送中獲取資料,此選項非常方便。
更新資料模型中資料的不同方法
您可以透過以下方式更新資料模型中的資料:
- 不時重新整理資料模型中的資料。
- 更改資料來源,例如連線屬性。
- 源資料更改後更新資料模型中的資料。
- 篩選資料以選擇性地載入資料來源中表中的行。
重新整理資料模型中的資料
除了從現有源獲取更新的資料外,每當您對源資料的架構進行更改時,您都需要重新整理工作簿中的資料。這些更改可能包括新增列或表,或更改匯入的行。
請注意,新增資料、更改資料或編輯篩選器始終會觸發依賴於該資料來源的 DAX 公式的重新計算。有關詳細資訊,請參閱“重新計算 DAX 公式”一章。
資料模型中有兩種型別的資料重新整理:
手動重新整理
如果您選擇手動重新整理選項,則可以隨時手動重新整理資料模型中的資料。您可以重新整理所有資料(這是預設設定),也可以手動選擇要為各個資料來源重新整理的表和列。
自動或計劃重新整理
如果已將工作簿釋出到支援 PowerPivot 的 PowerPivot 庫或 SharePoint 網站,則您或 SharePoint 管理員可以建立一個計劃來自動更新工作簿中的資料。在這種情況下,您可以在伺服器上安排無人值守的資料重新整理。
手動重新整理現有資料來源
您可以隨時手動重新整理資料,如果您需要更新來自現有資料來源的資料或獲取最新資料以設計新的 DAX 公式。您可以重新整理單個表、共享相同資料連線的所有表或資料模型中的所有表。
如果您已從關係資料來源(例如 SQL Server 和 Oracle)匯入資料,則可以在一個操作中更新所有相關表。將新資料或更新的資料載入到資料模型的操作通常會觸發 DAX 公式的重新計算,這兩者都可能需要一些時間才能完成。因此,在更改資料來源或重新整理從資料來源獲取的資料之前,您應該意識到潛在的影響。
要重新整理單個表或資料模型中所有表的資料,請執行以下操作 -
- 在 Power Pivot 視窗中的功能區上單擊“開始”選項卡。
- 單擊“重新整理”。
- 單擊下拉列表中的“重新整理”以重新整理選定的表。
- 單擊下拉列表中的“全部重新整理”以重新整理所有表。

要重新整理資料模型中使用相同連線的所有表的資料,請執行以下操作 -
- 在 Power Pivot 視窗中的功能區上單擊“開始”選項卡。
- 單擊“獲取外部資料”組中的“現有連線”。
將出現“現有連線”對話方塊。
- 選擇一個連線。
- 單擊“重新整理”按鈕。

將出現“資料重新整理”對話方塊,並且在 PowerPivot 引擎從選定的表或資料來源中的所有表重新載入資料時,將顯示資料重新整理進度資訊。
有三種可能的結果 -
成功 - 報告匯入到每個表中的行數。
錯誤 - 如果資料庫離線,您不再擁有許可權,則可能會發生錯誤。源中已刪除或重命名錶或列。
已取消 - 這表示 Excel 未發出重新整理請求,可能是因為連線上已停用重新整理。

單擊“關閉”按鈕。
更改資料來源
要更改資料模型中的資料,您可以編輯連線資訊或更新 Power Pivot 視窗中資料模型中使用的表和列的定義。
您可以對現有資料來源進行以下更改 -
連線
- 編輯資料庫名稱或伺服器名稱。
- 更改源文字檔案、電子表格或資料來源的名稱。
- 更改資料來源的位置。
- 對於關係資料來源,更改預設目錄或初始目錄。
- 更改用於訪問資料的身份驗證方法或憑據。
- 編輯資料來源上的高階屬性。
表
- 新增或刪除資料上的篩選器。
- 更改篩選器條件。
- 新增或刪除表。
- 更改表名。
- 編輯資料來源中的表和資料模型中的表之間的對映。
- 從資料來源中選擇不同的列。
列
- 更改列名。
- 新增新列。
- 從資料模型中刪除列(不影響資料來源)。
您可以透過以下方式編輯現有資料來源的屬性 -
您可以更改連線資訊,包括用作源的檔案、源或資料庫、其屬性或其他提供程式特定的連線選項。
您可以更改表和列對映,並刪除對不再使用的列的引用。
您可以更改從外部資料來源獲取的表、檢視或列。
修改現有資料來源的連線
您可以透過更改當前連線使用的外部資料來源來修改您已建立的到外部資料來源的連線。但是,要遵循的步驟取決於資料來源型別。
- 在 PowerPivot 視窗中的功能區上單擊“開始”選項卡。
- 單擊“獲取外部資料”組中的“現有連線”。

將出現“現有連線”對話方塊。選擇要修改的連線。
根據您正在更改的資料來源型別,提供程式可能會有所不同。此外,可用的屬性可能需要更改。考慮一個連線到包含資料的 Excel 工作簿的簡單示例。

單擊“編輯”按鈕。將出現“編輯連線”對話方塊。
單擊“瀏覽”按鈕以查詢相同型別(在此示例中為 Excel 工作簿)但名稱或位置不同的另一個數據庫。
單擊“開啟”按鈕。
將選擇新檔案。將顯示一條訊息,指出您已修改連線資訊,需要儲存並重新整理表以驗證連線。

單擊“儲存”按鈕。您將返回到“現有連線”對話方塊。
單擊“重新整理”按鈕。將出現“資料重新整理”對話方塊,顯示資料重新整理進度。將顯示資料重新整理的狀態。有關詳細資訊,請參閱 - 手動重新整理現有資料來源 部分。
資料重新整理成功後,單擊“關閉”。
在“現有連線”對話方塊中單擊“關閉”。
編輯表和列對映(繫結)
要在資料來源更改時編輯列對映,請執行以下操作 -
在 Power Pivot 視窗中單擊包含要修改的表的選項卡。
單擊功能區上的“設計”選項卡。
單擊“表屬性”。

將出現“編輯表屬性”對話方塊。

您可以觀察到以下內容 -
資料模型中所選表的名稱顯示在“表名”框中。
外部資料來源中對應表的名稱顯示在“源名稱”框中。
有兩個選項用於列名 - 源和模型。
如果資料來源和資料模型中的列名稱不同,則可以透過選擇這些選項在兩組列名稱之間切換。
對話方塊中將顯示所選表的預覽。
您可以編輯以下內容 -
要更改用作資料來源的表,請在“源名稱”下拉列表中選擇與所選表不同的表。
如有必要,更改列對映 -
要新增源中存在但資料模型中不存在的列,請選中列名稱旁邊的複選框。對要新增的所有列重複此操作。下次重新整理時,實際資料將載入到資料模型中。
如果資料模型中的一些列在當前資料來源中不再可用,則通知區域中將顯示一條訊息,列出無效列。您無需執行任何操作。
單擊“儲存”按鈕。
儲存當前的表屬性集時,您將收到一條訊息 - 請稍候。然後將顯示檢索到的行數。
在資料模型中的表中,任何無效列都將自動刪除,並將新增新列。
更改列名和資料型別
您可以按如下方式更改資料模型中表中列的名稱 -
雙擊列的標題。標題中的列名將突出顯示。
鍵入新的列名,覆蓋舊名稱。或者,您可以按如下方式更改資料模型中表中列的名稱
透過單擊其標題選擇列。
右鍵單擊該列。
在下拉列表中單擊“重新命名列”。

標題中的列名將突出顯示。鍵入新的列名,覆蓋舊名稱。
正如您所瞭解的,資料模型中表中列中的所有值必須具有相同的資料型別。
要更改列的資料型別,請執行以下操作 -
透過單擊其標題選擇要更改的列。
單擊功能區上的“開始”選項卡。
單擊“格式”組中的控制元件以修改列的資料型別和格式。

新增/更改資料來源的篩選器
在匯入資料以限制資料模型中表中的行數時,您可以向資料來源新增篩選器。稍後,您可以透過更改之前定義的篩選器來新增更多行或減少資料模型中表中的行數。
在匯入期間向資料來源新增篩選器
要在資料匯入期間向資料來源新增新的篩選器,請執行以下操作 -
- 在 Power Pivot 視窗中的功能區上單擊“開始”選項卡。
- 單擊“獲取外部資料”組中的一個數據源。
將出現“表匯入嚮導”對話方塊。
- 繼續執行“選擇表和檢視”步驟。
- 選擇一個表,然後單擊“預覽和篩選器”。

將出現“預覽所選表”對話方塊。
- 單擊要應用篩選器的列。
- 單擊列標題右側的下拉箭頭。

要新增篩選器,請執行以下操作之一 -
在列值列表中,選擇或清除一個或多個要篩選的值,然後單擊“確定”。
但是,如果值的數量非常多,則列表中可能不會顯示各個專案。相反,您將看到訊息 -“專案過多,無法顯示”。
單擊“數字篩選器”或“文字篩選器”(取決於列的資料型別)。
然後,單擊比較運算子命令之一(例如“等於”),或單擊“自定義篩選器”。在“自定義篩選器”對話方塊中,建立篩選器,然後單擊“確定”。
注意 - 如果您在任何階段出錯,請單擊“清除行篩選器”按鈕並重新開始。
- 單擊“確定”。您將返回到“表匯入嚮導”的“選擇表和檢視”頁面。

您可以觀察到,在“篩選器詳細資訊”列中,為定義了篩選器的列顯示了一個連結“已應用篩選器”。
您可以單擊該連結以查看向導構建的篩選器表示式。但是,每個篩選器表示式的語法都取決於提供程式,您無法編輯它。

- 單擊“完成”以匯入已應用篩選器的資料。
- 關閉“表匯入嚮導”。
更改現有資料來源的篩選器
匯入資料後,您可能需要不時更新它,方法是新增更多行或限制表中現有行。在這種情況下,您可以更改表上的現有篩選器或新增新的篩選器。
在 Power Pivot 視窗中的功能區上單擊“開始”選項卡。
單擊“獲取外部資料”組中的“現有連線”。將出現“現有連線”對話方塊。
單擊包含要更改篩選器的表的連線。
單擊“開啟”按鈕。

您將進入“表匯入嚮導”對話方塊。重複上一節中的步驟以篩選列。
Excel DAX - 重新計算 DAX 公式
DAX 公式的重新計算需要反映資料中的更改和公式本身的更改。但是,重新計算 DAX 公式會涉及效能成本。
即使如此,為了獲得準確的結果,重新計算也是必不可少的。在重新計算期間,將檢查列依賴項,如果列已更改,如果資料無效或如果以前有效的 DAX 公式中出現錯誤,您將收到通知。
重新計算型別
您有兩種重新計算 DAX 公式的選項 -
- 自動重新計算模式(預設)
- 手動重新計算模式
預設情況下,Power Pivot 會根據需要自動重新計算,同時最佳化處理所需的時間。但是,如果您使用的是複雜的公式或非常大的資料集,並且想要控制更新的時間,則可以選擇手動更新計算。
重新計算 DAX 公式的自動和手動模式都具有優勢。但是,建議使用自動重新計算模式。這樣,您可以使 Power Pivot 資料保持同步,並防止由資料刪除、名稱或資料型別更改或缺少依賴項引起的問題。
自動重新計算 DAX 公式
如果您選擇重新計算 DAX 公式的預設模式,即自動重新計算,則任何會導致任何 DAX 公式的結果發生變化的資料更改都將觸發包含 DAX 公式的整個列的重新計算。
以下更改始終需要重新計算 DAX 公式 -
外部資料來源中的值已重新整理。
DAX 公式本身已更改。
DAX 公式中引用的表或列的名稱已更改。
表之間的關係已新增、修改或刪除。
已新增新的計算欄位或計算列。
工作簿中對其他 DAX 公式進行了更改,因此需要重新計算依賴於這些 DAX 公式的列或計算。
表中已插入或刪除行。
您應用了一個需要執行查詢以更新資料集的篩選器。篩選器可以應用於 DAX 公式中,也可以應用於資料透視表或資料透檢視中。
何時使用手動重新計算模式?
在您準備好工作簿中所有所需的 DAX 公式之前,可以使用手動重新計算模式。這樣,您可以避免在仍處於草稿狀態的工作簿上計算公式結果的成本。
您可以在以下情況下使用 DAX 公式的手動重新計算:
您正在使用模板設計 DAX 公式,並且希望在驗證公式之前更改 DAX 公式中使用的列和表的名稱。
您知道工作簿中的一些資料已更改,但您正在使用未更改的不同列,因此您希望推遲重新計算。
您正在使用一個具有許多依賴項的工作簿,並且希望推遲重新計算,直到您確定所有必要的更改都已完成。
但是,您應該知道,只要工作簿配置為手動重新計算模式,就不會執行任何公式的驗證或檢查。這將導致以下結果:
您新增到工作簿中的任何新公式都將被標記為包含錯誤。
新計算列中不會顯示任何結果。
配置工作簿以進行手動重新計算
正如您所瞭解的,自動重新計算是任何工作簿的資料模型中的預設模式。要將工作簿配置為手動重新計算,請執行以下操作:
- 在 Power Pivot 視窗的“功能區”中單擊“設計”選項卡。
- 單擊“計算”組中的“計算選項”。
- 在下拉列表中單擊“手動計算模式”。

手動重新計算 DAX 公式
要手動重新計算 DAX 公式,請執行以下操作:
- 在 Power Pivot 視窗的“功能區”中單擊“設計”選項卡。
- 單擊“計算”組中的“計算選項”欄位。
- 在下拉列表中單擊“立即計算”欄位。

DAX 公式重新計算故障排除
每當工作簿的資料模型發生更改時,Power Pivot 都會對現有資料進行分析,以確定是否需要重新計算,並以最有效的方式執行更新。
在重新計算 DAX 公式期間,Power Pivot 處理以下內容:
- 依賴項
- 相關列的重新計算順序
- 事務
- 易失函式的重新計算
依賴項
當一個列依賴於另一個列,並且該另一個列的內容以任何方式更改時,所有相關列可能都需要重新計算。
Power Pivot 始終對錶執行完全重新計算,因為完全重新計算比檢查更改的值更有效。觸發重新計算的更改可能包括刪除列、更改列的數值資料型別或新增新列。這些更改被視為重大更改。但是,看似微不足道的更改(例如更改列的名稱)也可能觸發重新計算。這是因為列的名稱在 DAX 公式中用作識別符號。
在某些情況下,Power Pivot 可能會確定可以將列排除在重新計算之外。
相關列的重新計算順序
依賴項在任何重新計算之前計算。如果有多個列相互依賴,Power Pivot 將遵循依賴項的順序。這確保列以正確的順序以最大速度進行處理。
事務
重新計算或重新整理資料的操作作為事務進行。這意味著,如果重新整理操作的任何部分失敗,則其餘操作將回滾。這是為了確保資料不會處於部分處理狀態。但是,您無法像在關係資料庫中那樣管理事務或建立檢查點。
易失函式的重新計算
DAX 函式(如 NOW、RAND 或 TODAY)沒有固定值,被稱為易失函式。如果在計算列中使用此類 DAX 函式,則查詢或篩選的執行通常不會導致它們重新評估,以避免效能問題。
僅當重新計算整列時,才會重新計算這些 DAX 函式的結果。這些情況包括來自外部資料來源的重新整理或導致重新評估包含這些函式的 DAX 公式的資料的手動編輯。
但是,如果在計算欄位的定義中使用這些函式,則始終會重新計算這些函式。
Excel DAX - 公式錯誤
當您使用錯誤語法編寫**DAX 公式**時,可能會出現錯誤。計算欄位和計算列可以包含需要特定型別引數的 DAX 函式。DAX 函式的引數可以是表、列或其他 DAX 函式(巢狀 DAX 函式)。由於 DAX 函式可以返回表和列,因此應注意檢查是否將正確型別的引數傳遞給 DAX 函式。
DAX 公式錯誤可以是語法錯誤或語義錯誤。錯誤可以在設計時或執行時發生。
在本章中,您將瞭解一些常見的 DAX 錯誤、其原因以及如何修復這些錯誤。
DAX 錯誤:計算中止
嘗試使用 DAX 時間智慧函式建立(設計時)或使用(執行時)計算欄位時,可能會發生以下錯誤。在每種情況下,都會將非連續日期範圍傳遞給時間智慧函式。
“DAX 錯誤:計算中止:MdxScript(例項)(00,0)函式‘DATEADD’僅適用於連續日期選擇。”
執行時原因
當將包含 DAX 時間智慧函式的計算欄位放置在資料透視表的“值”區域中,並且在選擇年份之前選擇月份或季度作為切片器或篩選器時,可能會顯示此錯誤。例如,如果您有 2014 年、2015 年和 2016 年三年的資料,並且您嘗試僅使用 3 月份而不選擇“年份”欄位,則這些值不是連續資料值,您將收到錯誤。
如何在執行時修復錯誤?
在上面的示例中,
首先新增年份作為切片器或篩選器,並選擇一年。
然後,新增月份或季度作為切片器或篩選器。
然後,選擇一個或多個月份或季度來對所選年份進行切片或篩選。
設計時原因
DAX 時間智慧函式需要為日期引數指定一個日期列。日期列必須具有連續的日期範圍。如果日期列中的一行或多行中存在一個日期值與前一行和後一行的值不連續,則可能會返回此錯誤。
如果您從資料來源匯入包含日期的表,請記住,許多組織執行特殊的流程來掃描資料庫中的表以查詢無效值,並將其替換為特定值。也就是說,如果找到無效日期,則會為其分配一個特定日期值,該值可能與列中其他資料值不連續。
如何在設計時修復此錯誤?
請執行以下操作以在設計時修復錯誤:
如果您的日期表是從資料來源匯入的,請使用 Power Pivot 視窗中的“重新整理”重新匯入在源中找到的任何更改。
檢查日期列中的值,以確保它們按連續順序排列。如果發現任何值不在其位置,則必須在源處更正它,並且必須重新整理日期表。
在您的資料模型中建立單獨的日期表和日期列。將新日期列指定為導致錯誤的公式中的日期引數。日期表易於建立並新增到資料模型中。
DAX 語義錯誤 - 示例
以下 DAX 錯誤是語義錯誤:
“在用作表篩選器表示式的真假表示式中使用了函式‘CALCULATE’。這是不允許的。”
原因
當一個或多個篩選器表示式無法在計算欄位或計算列表達式的上下文中使用時,可能會出現此錯誤。
在大多數情況下,此錯誤是由指定為 DAX CALCULATE 函式引數的篩選器表示式引起的。CALCULATE 函式要求將篩選器定義為布林表示式或表表達式。
如何修復此類錯誤?
您可以使用 DAX FILTER 函式將篩選器定義為表表達式來修復此類錯誤,然後將其用作 DAX CALCULATE 函式的引數。
Excel DAX - 時間智慧
DAX 具有一個重要且強大的功能,稱為**時間智慧**。時間智慧使您能夠編寫引用時間段以在資料透視表中使用的 DAX 公式。
DAX 有 35 個專門用於隨時間推移聚合和比較資料的時間智慧函式。但是,這些 DAX 函式對您需要了解並謹慎使用的資料有一些限制,以避免錯誤。
為什麼時間智慧使 DAX 功能強大?
時間智慧函式使用不斷變化的資料,具體取決於您在資料透視表和 Power View 視覺化效果中選擇的上下文。眾所周知,大多數資料分析都涉及隨時間推移對資料進行彙總、跨時間段比較資料值、瞭解趨勢以及根據未來預測做出決策。
例如,您可能希望按產品彙總過去一個月的銷售額,並將總額與財政年度中其他月份的總額進行比較。這意味著,您必須使用日期作為一種方法來對特定時間段內的銷售交易進行分組和聚合。
這裡您可以觀察DAX的強大功能。您可以使用DAX時間智慧函式來定義計算欄位,幫助您分析隨時間推移的資料,而無需更改資料透視表中的日期選擇。這使您的工作更輕鬆。此外,您還可以構建其他方法無法構建的資料透視表。
DAX時間智慧函式的要求
DAX時間智慧函式有一定的要求。如果這些要求未滿足,您可能會遇到錯誤或它們可能無法正常工作。因此,您也可以將這些要求視為規則或約束。以下是某些DAX時間智慧函式的要求/規則/約束:
您需要在資料模型中有一個日期表。
日期表必須包含DAX認為是日期列的列。您可以根據需要命名該列,但它應符合以下條件:o 日期列應包含連續的日期集,涵蓋您分析資料的整個時間段。
每個日期必須在日期列中存在且僅存在一次。
您不能跳過任何日期(例如,您不能跳過週末日期)。
DAX時間智慧函式僅適用於標準日曆,並假定年份開始於1月1日,年份結束於12月31日,並且每年的月份和每個月的天數與公曆年份相同。
但是,您可以為不同的財政年度自定義標準日曆。在使用任何時間智慧函式之前,驗證上述要求是一個好習慣。
有關日期表及其在DAX公式中用法的更多詳細資訊,請參閱本教程庫中的教程= 使用DAX進行資料建模。
DAX時間智慧函式 - 類別
DAX時間智慧函式可以分類如下:
- 返回單個日期的DAX函式。
- 返回日期表的DAX函式。
- 在一段時間內評估表示式的DAX函式。
返回單個日期的DAX函式
此類別中的DAX函式返回單個日期。
此類別中有10個DAX函式:
序號 | DAX函式和返回值 |
---|---|
1 | FIRSTDATE (Date_Column) 返回當前上下文中Date_Column中的第一個日期。 |
2 | LASTDATE (Date_Column) 返回當前上下文中Date_Column中的最後一個日期。 |
3 | FIRSTNONBLANK (Date_Column, Expression) 返回表示式具有非空白值的第一個日期。 |
4 | LASTNONBLANK (Date_Column, Expression) 返回表示式具有非空白值的最後一個日期。 |
5 | STARTOFMONTH (Date_Column) 返回當前上下文中月份的第一個日期。 |
6 | ENDOFMONTH (Date_Column) 返回當前上下文中月份的最後一個日期。 |
7 | STARTOFQUARTER (Date_Column) 返回當前上下文中季度的第一個日期。 |
8 | ENDOFQUARTER (Date_Column) 返回當前上下文中季度的最後一個日期。 |
9 | STARTOFYEAR (Date_Column, [YE_Date]) 返回當前上下文中年份的第一個日期。 |
10 | ENDOFYEAR (Date_Column, [YE_Date]) 返回當前上下文中年份的最後一個日期。 |
返回日期表的DAX函式
此類別中的DAX函式返回日期表。這些函式主要用作DAX函式-CALCULATE的SetFilter引數。
此類別中有16個DAX函式。其中8個DAX函式是“前一個”和“下一個”函式。
“前一個”和“下一個”函式從當前上下文中的日期列開始,計算前一天、前一個月、前一季度或前一年。
“前一個”函式從當前上下文中的第一個日期開始向後工作,“下一個”函式從當前上下文中的最後一個日期開始向前移動。
“前一個”和“下一個”函式以單列表的形式返回結果日期。
序號 | DAX函式和返回值 |
---|---|
1 | PREVIOUSDAY (Date_Column) 返回一個表,該表包含一列表示當前上下文中Date_Column中第一個日期的前一天的所有日期。 |
2 | NEXTDAY (Date_Column) 返回一個表,該表包含一列表示當前上下文中Date_Column中指定的第一個日期的下一天開始的所有日期。 |
3 | PREVIOUSMONTH (Date_Column) 返回一個表,該表包含一列表示當前上下文中Date_Column中第一個日期的前一個月的所有日期。 |
4 | NEXTMONTH (Date_Column) 返回一個表,該表包含一列表示當前上下文中Date_Column中第一個日期的下一個月的所有日期。 |
5 | PREVIOUSQUARTER (Date_Column) 返回一個表,該表包含一列表示當前上下文中Date_Column中第一個日期的前一季度的所有日期。 |
6 | NEXTQUARTER (Date_Column) 返回一個表,該表包含一列表示當前上下文中Date_Column中指定的第一個日期的下一季度的所有日期。 |
7 | PREVIOUSYEAR (Date_Column, [YE_Date]) 返回一個表,該表包含一列表示當前上下文中Date_Column中最後一個日期的前一年的所有日期。 |
8 | NEXTYEAR (Date_Column, [YE_Date]) 返回一個表,該表包含一列表示當前上下文中Date_Column中第一個日期的下一年的所有日期。 |
四個(4)DAX函式計算一個時期內的一組日期。這些函式使用當前上下文中的最後一個日期執行計算。
序號 | DAX函式和返回值 |
---|---|
1 | DATESMTD (Date_Column) 返回一個表,該表包含一列表示當前上下文中本月至今的日期。 |
2 | DATESQTD (Date_Column) 返回一個表,該表包含一列表示當前上下文中本季度至今的日期。 |
3 | DATESYTD (Date_Column, [YE_Date]) 返回一個表,該表包含一列表示當前上下文中本年至今的日期。 |
4 | SAMEPERIODLASTYEAR (Date_Column) 返回一個表,該表包含一列日期,這些日期從當前上下文中指定的Date_Column中的日期向後偏移一年。 注意- SAMEPERIODLASTYEAR要求當前上下文包含連續的日期集。 如果當前上下文不是連續的日期集,則SAMEPERIODLASTYEAR將返回錯誤。 |
四個(4)DAX函式用於從當前上下文中的日期集轉移到新的日期集。
這些DAX函式比之前的函式更強大。
DAX函式 - DATEADD、DATESINPERIOD和PARALLELPERIOD從當前上下文偏移一些時間間隔。間隔可以是天、月、季度或年,分別由關鍵字- DAY、MONTH、QUARTER和YEAR表示。
例如
向後偏移2天。
向前移動5個月。
從今天起向前移動一個月。
回到上一年的同一季度。
DAX函式 - DATESBETWEEN計算指定開始日期和結束日期之間的日期集。
如果函式引數-間隔數(整數值)為正,則偏移為向前,如果為負,則偏移為向後。
序號 | DAX函式和返回值 |
---|---|
1 | DATEADD (Date_Column, Number_of_Intervals, Interval) 返回一個表,該表包含一列日期,這些日期從當前上下文中的日期向前或向後偏移指定數量的間隔。 |
2 | DATESINPERIOD (Date_Column, Start_Date, Number_of_Intervals, Interval) 返回一個表,該表包含一列日期,這些日期從start_date開始,持續指定數量的number_of_intervals。 |
3 | PARALLELPERIOD (Date_Column, Number_of_Intervals, Interval) 返回一個表,該表包含一列日期,這些日期表示與當前上下文中指定的Date_Column中的日期平行的時期,並且日期向前或向後偏移一定數量的間隔。 |
4 | DATESBETWEEN (Date_Column, Start_Date, End_Date) 返回一個表,該表包含一列日期,這些日期從start_date開始,持續到end_date。 |
在一段時間內評估表示式的DAX函式
此類別中的DAX函式在指定的時間段內評估表示式。
此類別中有九(9)個DAX函式:
此類別中的三個(3)DAX函式可用於在指定的時間段內評估任何給定的表示式。
序號 | DAX函式和返回值 |
---|---|
1 | TOTALMTD (Expression, Date_Column, [SetFilter]) 評估當前上下文中本月至今日期的表示式的值。 |
2 | TOTALQTD (Expression, Date_Column, [SetFilter]) 評估當前上下文中本季度至今日期的表示式的值。 |
3 | TOTALYTD (Expression, Date_Column, [SetFilter], [YE_Date]) 評估當前上下文中本年至今日期的表示式的值 |
此類別中的六(6)個DAX函式可用於計算期初和期末餘額。
任何時期的期初餘額與前一時期的期末餘額相同。
期末餘額包括截至期末的所有資料,而期初餘額不包括當前時期內的任何資料。
這些DAX函式始終返回在特定時間點評估的表示式的值。
我們關心的時間點始終是日曆期間的最後一個可能的日期值。
期初餘額基於前一時期的最後一天,而期末餘額基於當前時期的最後一天。
當前時期始終由當前日期上下文中的最後一天確定。
序號 | DAX函式和返回值 |
---|---|
1 | OPENINGBALANCEMONTH (Expression, Date_Column, [SetFilter]) 在當前上下文中月份的第一天評估表示式。 |
2 | CLOSINGBALANCEMONTH (Expression, Date_Column, [SetFilter]) 在當前上下文中月份的最後一天評估表示式。 |
3 | OPENINGBALANCEQUARTER (Expression, Date_Column, [SetFilter]) 在當前上下文中季度的第一天評估表示式。 |
4 | CLOSINGBALANCEQUARTER (Expression, Date_Column, [SetFilter]) 在當前上下文中季度的最後一天評估表示式。 |
5 | OPENINGBALANCEYEAR (Expression, Date_Column, [SetFilter], [YE_Date]) 在當前上下文中年份的第一天評估表示式。 |
6 | CLOSINGBALANCEYEAR (Expression, Date_Column, [SetFilter], [YE_Date]) 在當前上下文中年份的最後一天評估表示式。 |
Excel DAX - 篩選器函式
DAX具有強大的篩選器函式,與Excel函式有很大不同。查詢函式透過使用表和關係(如資料庫)來工作。篩選器函式允許您操作資料上下文以建立動態計算。
注意- 返回表的DAX篩選器函式不會將表新增到資料模型中。結果表用作另一個DAX函式中的引數。也就是說,此類DAX函式用作其他DAX函式的巢狀函式。
在下一節中,您將學習可以使用哪些DAX篩選器函式。有關這些函式的更多詳細資訊,請參閱本教程庫中的教程 - DAX函式。
DAX 篩選函式
以下是DAX篩選器函式:
序號 | DAX函式和函式的功能? |
---|---|
1 | ADDMISSINGITEMS (<showAllColumn>, [<showAllColumn>] …, <table>, <groupingColumn>, [<groupingColumn>] …, [filterTable] …) 如果表中尚不存在,則將多個列的專案組合新增到表中。新增哪些專案組合的確定是基於引用包含所有列可能值的源列。 要確定要評估的不同列的專案組合:
|
2 | ALL ( {<table> | <column>, [<column>], [<column>], … }) 返回給定表中的所有行,或表中指定列的所有值,忽略可能已應用的任何篩選器。 此函式可用於清除篩選器並在表中的所有行上建立計算。 |
3 | ALLEXCEPT (<table>, <column>, [<column>], …) 刪除表中的所有上下文篩選器,除了已應用於指定為引數的列的篩選器。 與 ALL 相比,當您想要刪除表中許多(但不是全部)列上的篩選器時,可以使用此函式。 |
4 | ALLNOBLANKROW (<table>|<column>) 從關係的父表中返回 -
此函式會忽略可能存在的任何上下文篩選器。 |
5 | ALLSELECTED ( [<tableName>|<columnName>] ) 從當前查詢中的列和行中刪除上下文篩選器,同時保留所有其他上下文篩選器或顯式篩選器。 |
6 | CALCULATE (<expression>, [<filter1>, <filter2> …)] 在由指定篩選器修改的上下文中評估表示式。 返回表示式的結果值。 |
7 | CALCULATETABLE (<expression>, <filter1>, <filter2>, …) 在由給定篩選器修改的上下文中評估表表達式。 返回一個值表。 |
8 | CROSSFILTER (<columnName1>, <columnName2>, <direction>) 指定在兩個列之間存在的關係的計算中使用的交叉篩選方向。不返回值。 |
9 | DISTINCT (<column>) 返回一個單列表,其中包含指定列中的不同值。換句話說,重複的值將被刪除,並且只返回唯一的值。 結果列用作另一個 DAX 函式的引數。 |
10 | EARLIER (<column>, <number>) 返回指定列在提到的列(由數字指定)的外部評估傳遞中的當前值。 |
11 | EARLIEST (<column>) 返回指定列在指定列的外部評估傳遞中的當前值。 |
12 | FILTER (<table>, <filter>) 返回一個僅包含篩選行的表。 FILTER 僅用作嵌入在其他需要表作為引數的函式中的函式。 |
13 | FILTERS (<columnName>) 返回直接應用於 columnName 的篩選器值。 FILTERS 僅用作嵌入在其他需要表作為引數的函式中的函式。 |
14 | HASONEFILTER (<columnName>) 當 columnName 上的直接篩選值的個數為 1 時返回 TRUE。否則,返回 FALSE。 |
15 | HASONEVALUE (<columnName>) 當 columnName 的上下文僅篩選到一個唯一值時返回 TRUE。否則,返回 FALSE。 |
16 | ISCROSSFILTERED (<columnName>) 當 columnName 或同一張表或相關表中的另一列正在被篩選時返回 TRUE。 |
17 | ISFILTERED (<columnName>) 當 columnName 正在被直接篩選時返回 TRUE。如果列上沒有篩選器,或者篩選是由於同一張表或相關表中的另一列被篩選而發生的,則函式返回 FALSE。 |
18 | KEEPFILTERS (<expression>) 修改在評估 CALCULATE 或 CALCULATETABLE 函式時如何應用篩選器。 |
19 | RELATED (<column>) 從另一張表返回相關值。 |
20 | RELATEDTABLE (<tableName>) 在由給定篩選器修改的上下文中評估表表達式。 |
21 | SUBSTITUTEWITHINDEX (<table>, <indexColumnName>, <indexColumnTable>, <orderBy_expression>, [<order>]) 返回一個表示兩個作為引數提供的表的左半連線的表。 半連線是透過使用公共列執行的,這些公共列由公共列名和公共資料型別確定。 正在連線的列將替換為返回表中的單個列,該列的型別為整數,幷包含索引。 索引是給定指定排序順序的右連線表中的引用。 |
22 | USERELATIONSHIP ( <columnName1>,<columnName2>) 指定在特定計算中使用的關係,作為 columnName1 和 columnName2 之間存在的關係。 |
23 | VALUES (<TableNameOrColumnName>) 返回一個單列表,其中包含指定表或列中的不同值。 換句話說,重複的值將被刪除,並且只返回唯一的值。 |
Excel DAX - 場景
在前面的章節中,您已經學習了 DAX 語法、DAX 運算子和 DAX 函式的使用。如您所知,DAX 是一種用於資料建模和資料分析的公式語言。
DAX 可用於各種場景。基於 DAX 場景,DAX 會最佳化效能並生成準確有效的結果。在本章中,您將瞭解一些 DAX 場景。
執行復雜計算
DAX 公式可以執行涉及自定義聚合、篩選和使用條件值的複雜計算。您可以使用 DAX 執行以下操作
- 為資料透視表建立自定義計算。
- 將篩選器應用於公式。
- 選擇性地刪除篩選器以建立動態比率。
- 使用外部迴圈中的值。
有關詳細資訊,請參閱“場景 - 執行復雜計算”一章。
處理文字和日期
DAX 可用於處理文字、提取和組合日期和時間值或基於條件建立值的場景。您可以使用 DAX 執行以下操作 -
- 透過連線建立鍵列。
- 基於從文字日期中提取的日期部分組合日期。
- 定義自定義日期。
- 使用公式更改資料型別。
- 將實數轉換為整數。
- 將實數、整數或日期轉換為字串。
- 將字串轉換為實數或日期。
有關詳細資訊,請參閱“場景 - 處理文字和日期”一章。
條件值和錯誤測試
DAX 函式能夠測試資料中的值,並根據條件返回不同的值。用於測試值的 DAX 函式也可用於檢查值的範圍或型別,以防止意外的資料錯誤導致計算中斷。您可以使用 DAX 執行以下操作 -
- 基於條件建立值。
- 測試公式中的錯誤。
有關詳細資訊,請參閱“場景 - 條件值和錯誤測試”一章。
使用時間智慧
您已在“瞭解 DAX 時間智慧”一章中學習了有關 DAX 時間智慧函式的知識。
DAX 時間智慧函式包括幫助您從資料中檢索日期或日期範圍的函式。然後,您可以使用這些日期或日期範圍來計算跨類似時期的值。時間智慧函式還包括處理標準日期間隔的函式,允許您跨月、年或季度比較值。您還可以建立一個 DAX 公式來比較指定時期的第一個和最後一個日期的值。
您可以瞭解有關 DAX 智慧函式及其功能的更多資訊,以下列出了一些示例 -
- 計算累計銷售額。
- 比較隨時間推移的值。
- 計算自定義日期範圍內的值。
有關詳細資訊,請參閱“場景 - 使用時間智慧”一章。
排名和比較值
如果您只想在列或資料透視表中顯示前 n 個專案,則有以下選項 -
- 應用篩選器以僅顯示前幾個或後幾個專案。
- 建立一個動態排名值並應用篩選器的 DAX 公式。
這些選項各有優缺點。
有關詳細資訊,請參閱“場景 - 排名和比較值”一章。
Excel DAX - 執行復雜計算
DAX 公式可以執行涉及自定義聚合、篩選和使用條件值的複雜計算。您可以使用 DAX 執行以下操作 -
- 為資料透視表建立自定義計算。
- 將篩選器應用於 DAX 公式。
- 選擇性地刪除篩選器以建立動態比率。
- 使用外部迴圈中的值。
為資料透視表建立自定義計算
DAX 函式 CALCULATE 和 CALCULATETABLE 功能強大且靈活。它們可用於定義計算欄位。這些 DAX 函式使您能夠更改執行計算的上下文。您還可以自定義要執行的聚合或數學運算的型別。
CALCULATE 函式
CALCULATE (<expression>, [<filter1>], [<filter2>]…)
CALCULATE 函式在由零個或多個指定篩選器修改的上下文中評估給定的表示式。
如果您的資料已被篩選,則 CALCULATE 函式會更改篩選資料的上下文,並在您透過篩選器指定的新的上下文中評估表示式。這意味著,指定列上的任何現有篩選器都將被刪除,並改為應用篩選器引數中使用的篩選器。
示例
假設您想按運動專案顯示獎牌百分比,並按國家/地區名稱進行篩選。您的計算應獲取覆蓋您在資料透視表中應用於國家/地區的篩選器的百分比值。
定義一個計算欄位 - 獎牌計數百分比,如下面的螢幕截圖所示。

使用此 DAX 公式,CALCULATE 函式將考慮結果表中的所有行,並使用包含 ALL 函式的篩選器。這樣,分母中就有總數。
您的資料透視表將如下面的螢幕截圖所示。

在上面的螢幕截圖中,國家/地區已篩選為美國,並且資料透視表中顯示了前 18 個值。接下來,您可以在資料透視表中動態篩選值。但是,由於您使用的自定義 DAX 公式,計算將是正確的。
CALCULATETABLE 函式獲取一個值表,並執行與 CALCULATE 函式相同的操作。
在公式中篩選資料
您可以在 DAX 公式中建立篩選器,以選擇源資料中的值用於計算。您可以透過定義篩選器表示式並將其與作為 DAX 公式輸入的表一起使用來實現。
篩選器表示式使您能夠獲取源資料的一個子集。每次更新 DAX 公式的結果時,都會動態應用篩選器,具體取決於資料的當前上下文,您可以確保獲得準確且預期的結果。
篩選器表示式通常包含一個 DAX 篩選器函式,該函式僅返回表的選定行,然後可以將其用作您用於資料聚合的另一個 DAX 函式的引數。
示例
下面的螢幕截圖顯示了計算欄位的定義,該欄位僅提供夏季運動的獎牌計數。

使用此計算欄位,資料透視表將如下面的螢幕截圖所示。

如您所見,右側資料透視表中使用新計算欄位的值與左側資料透視表中顯式應用“季節”欄位篩選器的值匹配。
注意 - DAX 篩選器和值函式返回一個表,但從不直接將表或行返回到資料模型,因此始終嵌入在另一個 DAX 函式中。
有關這些 DAX 函式的詳細資訊,請參閱“DAX 篩選器函式”一章。
動態新增和刪除篩選器
您在資料透視表中使用的 DAX 公式可能會受到資料透視表上下文的影響。但是,您可以透過新增或刪除篩選器來選擇性地更改上下文。您可以使用 DAX 函式 ALL 和 ALLEXCEPT 來動態選擇行,而不管資料透視表上下文如何。
此外,您可以使用 DAX 函式 DISTINCT 和 VALUES 返回唯一值。
使用外部迴圈中的值
您可以使用DAX EARLIER 函式在建立一組相關的計算時使用先前迴圈中的值。此DAX函式最多支援兩級巢狀迴圈。
Excel DAX - 處理文字和日期
DAX可用於處理文字、提取和組合日期和時間值或根據條件建立值的場景。您可以使用DAX執行以下操作:
- 透過連線建立表中的鍵列。
- 基於從文字日期中提取的日期部分組合日期。
- 定義自定義日期格式。
- 使用公式更改資料型別。
- 將實數轉換為整數。
- 將實數、整數或日期轉換為字串。
- 將字串轉換為實數或日期。
透過連線建立鍵列
PowerPivot中的資料模型僅允許一個鍵列。它不支援您可能在外部資料來源中找到的複合鍵。因此,如果資料來源中的表中存在任何複合鍵,則需要將其組合到資料模型中表的單個鍵列中。
您可以使用DAX函式CONCATENATE將表中資料模型中的兩列合併為一列。DAX函式CONCATENATE將兩個文字字串連線成一個文字字串。連線的專案可以是文字、數字或表示為文字的布林值,或者這些專案的組合。如果列包含適當的值,您也可以使用列引用。
= CONCATENATE ([Column1], [Column2])
DAX CONCATENATE函式僅接受兩個引數。如果任何引數不是文字資料型別,則將其轉換為文字。DAX CONCATENATE函式返回連線後的字串。
基於從文字日期中提取的日期部分的日期
Power Pivot中的資料模型支援用於日期和時間值的datetime資料型別。在日期和/或時間值上工作的DAX函式需要datetime資料型別作為引數。
如果您的資料來源包含不同格式的日期,則需要首先使用DAX公式提取日期部分,並將這些部分組合以構成有效的DAX datetime資料型別。
您可以使用以下DAX函式來提取和組合日期:
DATE - 以datetime格式返回指定的日期。
DATEVALUE - 將文字形式的日期轉換為datetime格式的日期。
TIMEVALUE - 將文字格式的時間轉換為datetime格式的時間。
定義自定義日期格式
假設資料來源中的日期未以標準格式表示。您可以定義自定義日期格式以確保正確處理這些值。DAX FORMAT函式使您可以根據指定的格式將值轉換為文字。
FORMAT (<value>, <format_string>)
FORMAT函式返回一個包含根據format_string定義的格式化值的字串。
您可以使用預定義的日期和時間格式,也可以為FORMAT函式的引數format_string建立使用者定義的日期和時間格式。
以下是預定義的日期和時間格式名稱。如果您使用除這些預定義字串之外的字串,則將其解釋為自定義日期和時間格式。
序號 | Format_String & 描述 |
---|---|
1 | "常規日期" 顯示日期和/或時間。例如,2015年2月10日上午10:10:32 |
2 | "長日期"或"中日期" 根據長日期格式顯示日期。例如,2016年3月7日星期三 |
3 | "短日期" 使用短日期格式顯示日期。例如,2016年2月3日 |
4 | "長時" 使用長時間格式顯示時間。 通常包括小時、分鐘和秒。 例如,上午10:10:32 |
5 | "中時" 以12小時格式顯示時間。 例如,晚上09:30 |
6 | "短時" 以24小時格式顯示時間。 例如,14:15 |
或者,您可以使用下表中的字元來建立使用者定義的日期/時間格式。
序號 | 字元 & 描述 |
---|---|
1 | : 時間分隔符。 時間分隔符。在格式化時間值時分隔小時、分鐘和秒。 |
2 | / 日期分隔符。 在格式化日期值時分隔日、月和年。 |
3 | % 用於指示應將以下字元讀取為單個字母格式,而不管任何尾隨字母。還用於指示將單個字母格式讀取為使用者定義的格式。 |
以下是各種字元的詳細資訊。
%d - 將日期顯示為不帶前導零的數字(例如 5)。
%dd - 將日期顯示為帶前導零的數字(例如 05)。
%ddd - 將日期顯示為縮寫(例如 Sun)。
%dddd - 將日期顯示為完整名稱(例如 Sunday)。
%M - 將月份顯示為不帶前導零的數字(例如,一月表示為 1)。
%MM - 將月份顯示為帶前導零的數字(例如,一月表示為 01)。
%MMM - 將月份顯示為縮寫(例如,一月表示為 Jan)。
%MMMM - 將月份顯示為完整月份名稱(例如,一月)。
%gg - 顯示時期/時代字串(例如 A.D.)。
%h - 使用12小時制顯示小時數,不帶前導零(例如 1:15:15 PM)。如果這是使用者定義的數字格式中的唯一字元,請使用%h。
%hh - 使用12小時制顯示小時數,帶前導零(例如 01:15:15 PM)。
%H - 使用24小時制顯示小時數,不帶前導零(例如 13:15:15、1:15:15)。如果這是使用者定義的數字格式中的唯一字元,請使用%H。
%HH - 使用24小時制顯示小時數,帶前導零(例如 13:15:15、1:15:15)。
%m - 將分鐘顯示為不帶前導零的數字(例如 2:1:15)。如果這是使用者定義的數字格式中的唯一字元,請使用 %m。
%mm - 將分鐘顯示為帶前導零的數字(例如 2:01:15)。
%s - 將秒顯示為不帶前導零的數字(例如 2:15:5)。如果這是使用者定義的數字格式中的唯一字元,請使用 %s。
%ss - 將秒顯示為帶前導零的數字(例如 2:15:05)。
%f - 顯示秒的小數部分。例如,ff 顯示百分之一秒,而ffff 顯示萬分之一秒。您可以在使用者定義的格式中使用最多七個f符號。如果這是使用者定義的數字格式中的唯一字元,請使用%f。
%t - 使用12小時制,並在中午之前的小時數顯示大寫A;在中午到晚上11:59之間的小時數顯示大寫P。如果這是使用者定義的數字格式中的唯一字元,請使用 %t。
%tt - 對於使用12小時制的區域設定,在中午之前的小時數顯示大寫AM;在中午到晚上11:59之間的小時數顯示大寫PM。對於使用24小時制的區域設定,不顯示任何內容。
%y - 顯示年份數字(0-9),不帶前導零。如果這是使用者定義的數字格式中的唯一字元,請使用%y。
%yy - 以兩位數字格式顯示年份,如果適用,則帶前導零。
%yyy - 以四位數字格式顯示年份。
%yyyy - 以四位數字格式顯示年份。
%z - 顯示時區偏移量,不帶前導零(例如 -8)。如果這是使用者定義的數字格式中的唯一字元,請使用%z。
%zz - 顯示時區偏移量,帶前導零(例如 -08)
%zzz - 顯示完整的時區偏移量(例如 -08:00)。
如您所見,格式化字串區分大小寫。使用不同的情況可以獲得不同的格式。
更改DAX公式輸出的資料型別
在DAX公式中,輸出的資料型別由源列確定,您不能顯式指定結果的資料型別。這是因為Power Pivot會確定最佳資料型別。但是,您可以使用Power Pivot執行的隱式資料型別轉換來操作輸出資料型別。否則,您可以使用某些DAX函式來轉換輸出資料型別。
使用隱式資料型別轉換
要將日期或數字字串轉換為數字,請乘以1.0。例如,= (TODAY()+5)*1.0。此公式計算當前日期加5天並將結果轉換為整數值。
要將日期、數字或貨幣值轉換為字串,請將該值與空字串連線起來。例如,= Today() & “”
使用DAX函式進行資料型別轉換
您可以使用DAX函式執行以下操作:
- 將實數轉換為整數。
- 將實數、整數或日期轉換為字串。
- 將字串轉換為實數或日期。
您將在以下部分學習這一點。
將實數轉換為整數
您可以使用以下DAX函式將實數轉換為整數:
ROUND (<number>, <num_digits>) - 將數字四捨五入到指定的位數,並返回十進位制數。
CEILING (<number>, <significance>) - 將數字向上舍入,舍入到最接近的整數或最接近的significance倍數,並返回十進位制數。
FLOOR (<number>, <significance>) - 將數字向下舍入,朝零方向,舍入到最接近的significance倍數,並返回十進位制數。
將實數、整數或日期轉換為字串
您可以使用以下DAX函式將實數、整數或日期轉換為字串:
FIXED (<number>, [<decimals>], [<no_comma>]) - 將數字四捨五入並將其結果作為文字返回。小數點右邊的位數為2或指定的位數。結果帶有逗號或可選地不帶逗號。
FORMAT (<value>, <format_string>) - 根據指定的格式將值轉換為文字。
您已經瞭解瞭如何使用Format函式將日期轉換為字串。
將字串轉換為實數或日期
您可以使用以下DAX函式將字串轉換為實數或日期:
VALUE (<text>) - 將表示數字的文字字串轉換為數字。
DATEVALUE (date_text) - 將文字形式的日期轉換為datetime格式的日期。
TIMEVALUE (time_text) - 將文字格式的時間轉換為datetime格式的時間。
條件值和錯誤測試
您可以使用DAX函式測試資料中的值,這些值根據條件產生不同的值。例如,您可以測試每年的銷售額,並根據結果將經銷商標記為“首選”或“價值”。
您還可以使用DAX函式檢查值的範圍或型別,以防止意外的資料錯誤導致計算中斷。
根據條件建立值
您可以使用巢狀的IF條件來測試值並有條件地生成新值。以下DAX函式對於條件處理和條件值很有用:
IF (<邏輯表示式>,<真值>, [<假值>]) − 檢查條件是否滿足。如果條件為 TRUE,則返回一個值;如果條件為 FALSE,則返回另一個值。Value_if_false 是可選的,如果省略且條件為 FALSE,則函式返回 BLANK ()。
OR (<邏輯表示式1>,<邏輯表示式2>) − 檢查引數之一是否為 TRUE 以返回 TRUE。如果兩個引數均為 FALSE,則函式返回 FALSE。
CONCATENATE (<文字1>, <文字2>) − 將兩個文字字串連線成一個文字字串。連線的專案可以是文字、數字或布林值(以文字表示),或這些專案的組合。如果列包含適當的值,您也可以使用列引用。
在 DAX 公式中測試錯誤
在 DAX 中,您不能在一行的計算列中包含有效值,而在另一行中包含無效值。也就是說,如果計算列的任何部分存在錯誤,則整個列都將標記有錯誤,您必須更正 DAX 公式以消除導致無效值的錯誤。
DAX 公式中的一些常見錯誤包括:
- 除以零。
- 函式的引數為空白,而期望的引數為數值。
您可以結合使用邏輯函式和資訊函式來測試錯誤並始終返回有效值,以避免在計算列中返回錯誤。以下 DAX 函式可以幫助您實現此目的。
ISBLANK (<值>) − 檢查值是否為空白,並返回 TRUE 或 FALSE。
IFERROR (值, 錯誤值) − 如果第一個引數中的表示式導致錯誤,則返回錯誤值。否則,返回表示式本身的值。
表示式的返回值和錯誤值必須具有相同的型別。否則,您將收到錯誤。
Excel DAX - 使用時間智慧
您已經在“理解時間智慧”一章中瞭解了 DAX 的強大功能時間智慧。在本節中,您將學習如何在各種場景中使用 DAX 時間智慧函式。
DAX 時間智慧函式包括:
幫助您從資料中檢索日期或日期範圍的函式,這些函式用於計算跨類似時期的值。
處理標準日期間隔的函式,允許您跨月、年或季度比較值。
檢索指定期間的第一個和最後一個日期的函式。
幫助您處理期初和期末餘額的函式。
計算累計銷售額
您可以使用 DAX 時間智慧函式建立用於計算累計銷售額的公式。以下 DAX 函式可用於計算期末和期初餘額:
CLOSINGBALANCEMONTH (<表示式>,<日期>, [<篩選器>]) − 在當前上下文中評估月份最後一天的表示式。
OPENINGBALANCEMONTH (<表示式>,<日期>, [<篩選器>]) − 在當前上下文中評估月份第一天表達式。
CLOSINGBALANCEQUARTER (<表示式>,<日期>, [<篩選器>]) − 在當前上下文中評估季度的最後一天的表示式。
OPENINGBALANCEQUARTER (<表示式>,<日期>, [<篩選器>]) − 在當前上下文中評估季度的第一天表達式。
CLOSINGBALANCEYEAR (<表示式>,<日期>, [<篩選器>], [<年末日期>]) − 在當前上下文中評估年份最後一天的表示式。
OPENINGBALANCEYEAR (<表示式>, <日期>, <篩選器>], [<年末日期>]) − 在當前上下文中評估年份的第一天表達式。
您可以使用以下 DAX 函式建立以下計算欄位,以在指定時間獲取產品庫存:
Month Start Inventory Value: = OPENINGBALANCEMONTH ( SUMX (ProductInventory, ProductInventory[UnitCost]*ProductInventory[UnitsBalance]), DateTime[DateKey] )
Month End Inventory Value: = CLOSINGBALANCEMONTH ( SUMX (ProductInventory, ProductInventory[UnitCost]*ProductInventory[UnitsBalance]), DateTime[DateKey] )
Quarter Start Inventory Value: = OPENINGBALANCEQUARTER ( SUMX ProductInventory, (ProductInventory[UnitCost]*ProductInventory[UnitsBalance]), DateTime[DateKey] )
Quarter End Inventory Value: = CLOSINGBALANCEQUARTER ( SUMX (ProductInventory, ProductInventory[UnitCost]*ProductInventory[UnitsBalance]), DateTime[DateKey] )
Year Start Inventory Value: = OPENINGBALANCEYEAR ( SUMX (ProductInventory, ProductInventory[UnitCost]*ProductInventory[UnitsBalance]), DateTime[DateKey] )
Year End Inventory Value: = CLOSINGBALANCEYEAR ( SUMX (ProductInventory, ProductInventory[UnitCost]*ProductInventory[UnitsBalance]), DateTime[DateKey] )
跨不同時間段比較值
DAX 支援的預設時間段為月、季和年。
您可以使用以下 DAX 時間智慧函式來比較跨不同時間段的總和。
PREVIOUSMONTH (<日期>) − 返回一個表,其中包含來自上個月的所有日期的列,基於當前上下文中日期列中的第一個日期。
PREVIOUSQUARTER (<日期>) − 返回一個表,其中包含來自上一季度的所有日期的列,基於當前上下文中日期列中的第一個日期。
PREVIOUSYEAR (<日期>, <年末日期>]) − 返回一個表,其中包含來自上一年的所有日期的列,基於當前上下文中日期列中的最後一個日期。
您可以使用 DAX 函式建立以下計算欄位,以計算在指定時間段內西部地區的銷售總額以進行比較:
Previous Month Sales: = CALCULATE ( SUM (WestSales[SalesAmount]), PREVIOUSMONTH (DateTime [DateKey]) )
Previous Quarter Sales: = CALCULATE ( SUM (WestSales[SalesAmount]), PREVIOUSQUARTER (DateTime [DateKey]) )
Previous Year Sales: = CALCULATE ( SUM (WestSales[SalesAmount]), PREVIOUSYEAR (DateTime [DateKey]) )
跨並行時間段比較值
您可以使用 DAX 時間智慧函式 PARALLELPERIOD 來比較跨與指定時間段平行的期間的總和。
PARALLELPERIOD (<日期>, <間隔數>, <間隔>)
此 DAX 函式返回一個表,其中包含一列日期,表示與當前上下文中指定日期列中的日期平行的期間,日期向前或向後移動一定數量的間隔。
您可以建立以下計算欄位來計算西部地區上一年的銷售額:
Previous Year Sales: = CALCULATE ( SUM (West_Sales[SalesAmount]), PARALLELPERIOD (DateTime[DateKey],-1,year) )
計算累計總計
您可以使用以下 DAX 時間智慧函式來計算累計總計或累計和。
TOTALMTD (<表示式>,<日期>, [<篩選器>]) − 在當前上下文中評估表示式在當月至今的值。
TOTALQTD (<表示式>,<日期>, <篩選器>]) − 在當前上下文中評估表示式在當季至今的日期的值。
TOTALYTD (<表示式>,<日期>, [<篩選器>], [<年末日期>]) − 在當前上下文中評估表示式的當年至今的值。
您可以使用 DAX 函式建立以下計算欄位,以計算在指定時間段內西部地區的銷售額的累計和:
月累計和:= TOTALMTD (SUM (West_Sales[SalesAmount]), DateTime[DateKey])
季累計和:= TOTALQTD (SUM (WestSales[SalesAmount]), DateTime[DateKey])
年累計和:= TOTALYTD (SUM (WestSales[SalesAmount]), DateTime[DateKey])
在自定義日期範圍內計算值
您可以使用 DAX 時間智慧函式檢索自定義日期集,您可以將其用作 DAX 函式的輸入,該函式執行計算以建立跨時間段的自定義聚合。
DATESINPERIOD (<日期>, <開始日期>, <間隔數>, <間隔>) − 返回一個表,其中包含一列日期,從開始日期開始,持續指定的間隔數。
DATESBETWEEN (<日期>, <開始日期>,
DATEADD (<日期>,<間隔數>,<間隔>) − 返回一個表,其中包含一列日期,相對於當前上下文中日期,向前或向後移動指定的間隔數。
FIRSTDATE (<日期>) − 返回指定日期列在當前上下文中第一個日期。
LASTDATE (<日期>) − 返回指定日期列在當前上下文中最後一個日期。
您可以使用 DAX 函式建立以下 DAX 公式,以計算指定日期範圍內西部地區的銷售總額:
DAX 公式,用於計算 2016 年 7 月 17 日之前的 15 天的銷售額。
CALCULATE ( SUM (WestSales[SalesAmount]), DATESINPERIOD (DateTime[DateKey], DATE(2016,17,14), -15, day) )
DAX 公式,用於建立一個計算欄位,計算 2016 年第一季度的銷售額。
= CALCULATE ( SUM (WestSales[SalesAmount]),DATESBETWEEN (DateTime[DateKey], DATE (2016,1,1), DATE (2016,3,31)) )
DAX 公式,用於建立一個計算欄位,獲取在當前上下文中西部地區首次進行銷售的日期。
= FIRSTDATE (WestSales [SaleDateKey])
DAX 公式,用於建立一個計算欄位,獲取在當前上下文中西部地區最後一次進行銷售的日期。
= LASTDATE (WestSales [SaleDateKey])
DAX 公式,用於計算比當前上下文中日期早一年的日期。
= DATEADD (DateTime[DateKey],-1,year)
Excel DAX - 對值進行排名和比較
如果只想在列或資料透視表中顯示前 n 個專案,則有以下兩種選擇:
您可以在資料透視表中選擇前 n 個值。
您可以建立一個 DAX 公式,動態對值進行排名,然後在切片器中使用排名值。
應用篩選器以僅顯示前幾個專案
要選擇前 n 個值以在資料透視表中顯示,請執行以下操作:
- 單擊資料透視表中行標籤標題中的向下箭頭。
- 單擊下拉列表中的“值篩選器”,然後單擊“前 10 名”。

將出現“前 10 名篩選器 (<列名>)”對話方塊。
- 在“顯示”下,從左到右在框中選擇以下內容。
- 前
- 18(要顯示的前幾個值的個數。預設為 10。)
- 專案。
- 在“按”框中,選擇“獎牌數”。

單擊“確定”。前 18 個值將顯示在資料透視表中。
應用篩選器的優缺點
優點
- 簡單易用。
- 適用於包含大量行的表。
缺點
篩選器僅用於顯示目的。
如果資料透視表的基礎資料發生變化,則必須手動重新整理資料透視表才能檢視更改。
建立動態對值進行排名的 DAX 公式
您可以使用包含排名值的 DAX 公式建立計算列。然後,您可以對生成的計算列使用切片器來選擇要顯示的值。
您可以透過計算同一表中具有大於正在比較的值的行數來獲得給定行中給定值的排名值。此方法返回以下結果:
表中最高值的排名值為零。
相等的值將具有相同的排名值。如果 n 個值相等,則相等值後的下一個值的排名值將不連續,增加 n。
例如,如果您有一個名為“Sales”的表包含銷售資料,則可以建立一個計算列,其中包含“銷售額”值的排名,如下所示:
= COUNTROWS (FILTER (Sales, EARLIER (Sales [Sales Amount]) < Sales [Sales Amount]) ) + 1
接下來,您可以在新的計算列上插入切片器,並按排名選擇性地顯示值。
動態排名的優缺點
優點
排名是在表中完成的,而不是在資料透視表中完成的。因此,可以在任意數量的資料透視表中使用。
DAX 公式是動態計算的。因此,即使基礎資料發生變化,您也可以始終確保排名是正確的。
由於DAX公式用在計算列中,因此您可以在切片器中使用排名。
適用於包含大量行的表。
缺點
由於DAX計算在計算上代價很高,因此此方法可能不適用於包含大量行的表格。