DAX 公式中的內容

重要:  本文係由機器翻譯而成,請參閱免責聲明。本文的英文版本請見這裡,以供參考。

內容可以讓您執行動態分析,在這類分析中,公式的結果能夠變更以反映目前的資料列或資料格選擇以及任何相關的資料。了解內容並有效地使用內容對於建立高效能的公式、動態分析及排除公式內的問題而言將會非常重要。

本節定義三種不同類型的內容:「資料列內容」、「查詢內容」及「篩選內容」。此外將說明如何針對計算結果欄及樞紐分析表中的公式來評估內容。

本文最後一部分會提供詳細範例的連結,這些範例將示範公式的結果如何根據內容而變更。

了解內容

在樞紐分析表中套用的篩選、 表格之間的關聯及篩選在公式中使用,可能會影響Power Pivot中的公式。內容是什麼可以讓您執行動態分析。了解內容務必建置和疑難排解公式。

內容可分為以下不同類型:「資料列內容」(Row Context)、「查詢內容」(Query Context) 和「篩選內容」(Filter Context)。

「資料列內容」可以視為「目前的資料列」。如果您已經建立計算結果欄,資料列內容就是由每個個別資料列中的值,以及資料行中與目前資料列相關的值所組成。也有一些函數 (EARLIER 函數EARLIEST 函數) 可以從目前的資料列取得值,然後在整個資料表上執行運算時使用該值。

「查詢內容」指的是資料的子集,系統會根據資料列和資料行標頭,為樞紐分析表中的每個資料格隱含地建立這個資料。

「篩選內容」是根據套用到資料列,或由公式中的篩選運算式所定義之篩選條件約束,在每個資料行中所允許的一組值。

頁面頂端

資料列內容

如果您已經在計算結果欄中建立公式,該公式的「資料列內容」就會包含目前資料列中所有資料行的值。如果資料表與另一個資料表相關,則內容也會包含後者中與目前資料列相關的所有值。

例如,假設您建立計算結果的欄,= [運費] + [稅]]

,將相同資料表中的兩個資料行相加。這個公式的行為就像 Excel 資料表中的公式,會自動參考相同資料列的值。請注意,資料表與範圍不同:您無法使用範圍標記法參考目前資料列之前的值,而且也無法參考資料表或資料格中的任意單一值。您必須一律使用資料表和資料行。

資料列內容會自動追隨資料表之間的關聯性,以判斷相關資料表中哪些資料列與目前資料列相關聯。

例如,下列公式會根據訂單的運送區域,使用 RELATED 函數來提取相關資料表中的稅額值。稅額值的決定方式是使用目前資料表中的區域值,在相關資料表中查閱該區域,然後從相關資料表取得該區域的稅率。

= [運費] + RELATED('Region'[TaxRate])

此公式直接從 Region 資料表中取得目前區域的稅率。您不需要知道或指定連接不同資料表的索引鍵。

多個資料列內容

此外,DAX 也包含會反覆對資料表進行計算的函數。這些函數可以有多個目前資料列及目前資料列內容。以程式設計術語來說,您可以建立不斷遞迴內部和外部迴圈的公式。

例如,假設您的活頁簿包含產品] 資料表和Sales資料表。您可能會想要瀏覽整個銷售資料表,也就是完整的交易包含多個產品,並尋找最大排序每項產品在任何一次交易的數量。

在 Excel 中,這種計算需要一系列中繼摘要,如果資料變更,這些摘要都必須重建。如果您是 Excel 的進階使用者,也許能夠建立陣列公式執行這項重建工作。或者,您可以在關聯式資料庫中撰寫巢狀子選擇。

但是使用 DAX 時,您可以建立單一公式來傳回正確的值,而且每當您將資料加入至資料表,都會自動更新結果。

=MAXX(FILTER(Sales,[ProdKey]=EARLIER([ProdKey])),Sales[OrderQty])

如需此公式的詳細逐步解說,請參閱 EARLIER 函數

簡單地說,EARLIER 函數可儲存目前運算前之運算中的資料列內容。函數隨時都會在記憶體中儲存兩組內容:一組內容代表公式內部迴圈的目前資料列,另一組內容代表公式外部迴圈的目前資料列。DAX 會自動在兩個迴圈之間選取饋入值,讓您能夠建立複雜的彙總。

頁面頂端

查詢內容

「 查詢內容 」 指的是不會隱含地擷取公式的資料子集。當您量值或其他值欄位至樞紐分析表中的儲存格, Power Pivot引擎會檢查資料列和資料行標頭、 交叉分析篩選器和報表篩選,來決定內容。然後, Power Pivot可填入樞紐分析表中的每個儲存格必要的計算。擷取資料的設定為每個儲存格的查詢內容。

由於內容可以依您放置公式的位置而變更,公式的結果也會視您將公式用在具有許多群組和篩選的樞紐分析表中,或是用在沒有篩選只有最低限度內容的計算結果欄中而變更。

例如,假設您建立這個簡單公式來加總銷售table:=SUM('Sales'[Profit]) Profit資料行中的值。

如果您是使用此公式Sales資料表中的計算結果欄中,公式的結果會是相同的整個資料表,因為公式的查詢內容永遠是整個資料集的Sales資料表。結果會有 profit 所有地區]、 [所有產品、 [所有的年份,依此類推。

但是,您通常不會想要一直看到相同的結果,而會想取得特定年度、特定國家或地區、特定產品,或上述各項的某個組合的利潤,然後取得總計。

在樞紐分析表,您可以輕鬆變更內容,藉由新增或移除欄和列標題和藉由新增或移除 [交叉分析篩選器。您可以建立一個以上的量值,例如公式,然後再將它放到樞紐分析表。每當您將欄或列標題新增至樞紐分析表時,您可以變更其中計算量值的查詢內容。分割和篩選作業也會影響內容。因此,每個儲存格不同的查詢內容中評估相同的公式,在樞紐分析表中使用。

頁面頂端

篩選內容

當您使用公式的引數來指定資料行或資料表內允許之值組的篩選條件約束時,就會加入「篩選內容」。篩選內容會套用到其他內容 (如資料列內容或查詢內容) 之上。

例如,樞紐分析表計算每個儲存格根據查詢內容所述前一節的列與欄標題,其值。不過,在量值或您新增至樞紐分析表的計算結果的欄中,您可以指定控制公式,可使用的值的篩選運算式。您可以選擇性地清除特定的資料行的篩選。

如需有關如何在公式中建立篩選的詳細資訊,請參閱篩選函數 (DAX)

如需如何清除篩選以建立總計的範例,請參閱 ALL 函數

如需有關如何在公式中選擇性清除及套用篩選的範例,請參閱 ALLEXCEPT 函數

因此,您必須檢閱量值或這樣一來,知道篩選內容解譯公式的結果時,樞紐分析表中使用的公式的定義。

頁面頂端

決定公式內的內容

建立公式時,Power Pivot for Excel 會先檢查一般語法,然後針對目前內容中可能的資料行和資料表,檢查您提供的資料行和資料表名稱。如果 Power Pivot 找不到公式指定的資料行和資料表,您就會接到錯誤訊息。

如前幾節中所述,內容是使用活頁簿中可用的資料表、資料表之間的任何關聯性,以及已套用的任何篩選來決定。

例如,如果您剛將一些資料匯入新資料表中,而尚未套用任何篩選,則資料表中的整組資料行都是目前內容的一部分。如果您有多個以關聯性連結的資料表,而且您執行工作的樞紐分析表已經透過加入資料行標題及使用交叉分析篩選器進行篩選,則內容會包含相關的資料表以及資料的任何篩選。

內容是效用強大的概念,但也可能會使公式的疑難排解變得很困難。建議您從簡單的公式和關聯性開始,以了解內容的運作情形,然後再在樞紐分析表中使用簡單公式開始進行實驗。下一節也提供一些範例,說明公式如何使用不同類型的內容以動態方式傳回結果。

公式中的內容範例

  • RELATED 函數可擴充目前資料列的內容來包含相關資料行內的值,這可以讓您執行查閱。本主題中的範例說明篩選與資料列內容的互動。

  • FILTER 函數可讓您指定要包含在目前內容中的資料列。本主題的範例也將說明如何在執行彙總的其他函數中嵌入篩選。

  • ALL 函數可在公式之中設定內容。您可以使用它來覆寫套用為查詢內容結果的篩選。

  • ALLEXCEPT 函數可讓您移除所指定篩選以外的所有篩選。兩個主題都包含範例,可讓您逐步建立公式及了解複雜的內容。

  • EARLIER 和 EARLIEST 函數都可讓您透過執行計算對資料表執行迴圈,同時參考內部迴圈的值。如果您很熟悉遞迴的概念以及內部和外部迴圈,將深刻領會 EARLIER 和 EARLIEST 函數所提供的強大效用。如果您不太熟悉這些概念,應該小心地遵循範例中的步驟執行,以了解內部和外部內容如何運用於計算中。

頁面頂端

參考完整性

本節討論與以關聯性連接之 Power Pivot 資料表中遺漏值的一些相關進階概念。如果您有包含多個資料表的活頁簿和複雜的公式,而且需要協助以瞭解結果,本節就會非常有用。

如果您不熟悉關聯式資料的概念,我們建議您先閱讀簡介主題:關聯性概觀

參考完整性與 Power Pivot 關聯性

Power Pivot 不需要在兩個資料表間強制執行參考完整性來定義有效的關聯性, 而會在每個一對多關聯性的「一」端都會建立一個空白資料列,此資料列會用來處理相關資料表中所有非相符的資料列。它會有效地作為 SQL 外部聯結運作。

在樞紐分析表中,如果您依關聯性的一側分組資料,在關聯性多側上任何不相符的資料都會群組在一起,而且會包含在具有空白資料列標題的總計中。空白標題大致相當於「未知的成員」。

了解未知的成員

如果您已使用過了多維度資料庫系統 (如 SQL Server Analysis Services),應該就很熟悉未知成員的概念。如果這對您來說是新的詞彙,下列範例會說明什麼是未知的成員及其影響計算的方式。

假設您建立的計算加總的每個儲存、 每月銷售額,但是Sales資料表中的欄就會缺少存放區名稱的值。資料表儲存銷售連線存放區名稱,將您的預期發生在公式中?如何應該樞紐分析表中群組或顯示與現有的存放區不相關的銷售數字嗎?

這是資料倉儲中常見的問題,其中事實資料的大型資料表在邏輯上必須與維度資料表相關,而這些維度資料表會包含有關商店、地區和其他用來分類與計算事實的屬性。為了解決這個問題,與現有實體不相關的任何新事實都會暫時指派給未知的成員。基於這個緣故,不相關的事實會在樞紐分析表中的空白標題底下以群組的方式出現。

空白值與空白資料列處理方式的比較

空白值不同於為了容納未知成員而加入的空白資料列。空白值是用來表示 Null、空字串及其他遺漏值的一個特殊值。如需有關空白值以及其他 DAX 資料類型的詳細資訊,請參閱資料模型中的資料類型

頁面頂端

附註: 機器翻譯免責聲明︰本文係以電腦系統翻譯而成,未經人為介入。Microsoft 提供此等機器翻譯旨在協助非英語系使用者輕鬆閱讀 Microsoft 產品、服務及技術相關內容。基於本文乃由機器翻譯而成,因此文中可能出現詞辭、語法、文法上之錯誤。

擴展您的技能
探索訓練
優先取得新功能
加入 Office 測試人員

這項資訊有幫助嗎?

感謝您的意見反應!

感謝您的意見反應! 我們將協助您與其中一位 Office 支援專員連絡以深入了解您的意見。

×