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篩選函式有選擇地清除特定列上的篩選器。一個強大的DAX篩選函式來建立篩選上下文的例子是CALCULATE()。例如,請參考“場景 - 執行復雜計算”章節。

篩選上下文作為行上下文的補充

行上下文不會自動建立篩選上下文。您可以使用包含DAX篩選函式的DAX公式來實現相同的結果。

廣告
© . All rights reserved.