篩選 DAX 公式中的資料

本節說明如何在資料分析運算式(DAX)公式中建立篩選。 您可以在公式中建立篩選,以限制計算中所使用之來來源資料的值。 您可以將表格指定為公式的輸入,然後定義篩選運算式來執行此動作。 您所提供的篩選運算式是用來查詢資料,並只傳回來源資料的子集。 每當您更新公式的結果時,都會動態套用篩選,視資料的目前內容而定。

本文內容

在公式中使用的資料表建立篩選

移除重複專案的篩選

內容對篩選有何影響

移除篩選

使用 ALL 函數覆寫所有篩選

使用 ALLEXCEPT 函數覆寫特定篩選

在公式中使用的資料表建立篩選

您可以在公式中套用篩選,以將表格做為輸入。 您可以使用 FILTER 函數,從指定的資料表中定義列的子集,而不是輸入資料表名稱。 然後,該子集會傳遞到另一個函數,以進行自訂匯總等作業。

例如,假設您有一個包含轉銷商相關訂單資訊的資料表,而您想要計算每個轉售商銷售量的數量。 不過,您只想要為那些銷售多個較高價值產品之單位的轉銷商顯示銷售金額。 下列公式是根據 DAX 範例活頁簿,顯示如何使用篩選來建立此計算的一個範例:

= SUMX (
     篩選("ResellerSales_USD","ResellerSales_USD" [數量] > 5 &&
     "ResellerSales_USD" [ProductStandardCost_USD] > 100)]
,      "ResellerSales_USD" [SalesAmt]
     )

  • 公式的第一部分會指定其中一個 Power Pivot 匯總函數,並將資料表做為引數。 SUMX 會計算表格的總和。

  • 公式的第二部分 FILTER(table, expression),告訴 SUMX 要使用的資料。 SUMX 需要表格或運算式來產生表格。 在這裡,您可以使用 FILTER 函數指定要使用資料表中的哪些資料列,而不是使用資料表中的所有資料。

    篩選運算式有兩個部分:第一個部分命名要套用篩選的資料表。 第二個部分定義一個運算式,用來做為篩選準則。 在這種情況下,您是在銷售超過5個裝置的轉銷商,以及高於 $100 的產品。 運算子( &&)是一個邏輯 AND 運算子,這表示條件的兩個部分都必須為 true,才能歸屬到已篩選子集的資料列。

  • 公式的第三部分會告訴 SUMX 函數應該將哪些值加總。 在這種情況下,您只會使用銷售金額。

    請注意,函數(例如篩選)會傳回資料表,不會直接傳回資料表或列,但永遠會內嵌在另一個函數中。 如需篩選的詳細資訊,以及用於篩選的其他函數,包括更多範例,請參閱篩選函數(DAX)

    附註: 篩選運算式會受到使用它的內容影響。 例如,如果您在量值中使用篩選,且在樞紐分析表或樞紐分析圖中使用度量單位,則所傳回的資料子集可能會受到使用者在樞紐分析表中套用的其他篩選或交叉分析篩選器影響。 如需有關內容的詳細資訊,請參閱DAX 公式中的內容

移除重複專案的篩選

除了針對特定值進行篩選之外,您還可以從另一個資料表或資料行傳回一組唯一的值。 如果您想要計算欄中唯一值的數目,或針對其他操作使用唯一值的清單,這會很有説明。 DAX 提供兩個傳回不同值的函數: Distinct 函數values 函數

  • DISTINCT 函數會檢查您指定做為函數引數的單一資料行,並傳回只包含不同值的新資料行。

  • VALUES 函數也會傳回唯一值的清單,但也會傳回未知的成員。 當您使用由關聯所聯接的兩個數據表中的值,而某個資料表中的值卻遺失時,這就很有用。 如需未知成員的詳細資訊,請參閱DAX 公式中的內容

這兩個函數會傳回一整欄的值;因此,您可以使用函數來取得值的清單,然後傳遞到另一個函數。 例如,您可以使用下列公式來取得特定轉銷商銷售的不同產品清單(使用唯一的產品金鑰,然後使用 COUNTROWS 函數計算該清單中的產品):

= COUNTROWS (DISTINCT ("ResellerSales_USD" [ProductKey]))

頁面頂端

內容對篩選有何影響

當您將 DAX 公式新增至樞紐分析表或樞紐分析圖時,該公式的結果可能會受到內容影響。 如果您使用的是 Power Pivot 資料表,則內容是目前的列及其值。 如果您是在樞紐分析表或樞紐分析圖中工作,則內容代表由諸如切片或篩選等操作所定義的資料集或子集。 樞紐分析表或樞紐分析圖的設計也會有自己的內容。 例如,如果您建立的樞紐分析表是依地區和年份分組銷售額,則只有套用至這些地區與年份的資料會出現在樞紐分析表中。 因此,您新增至樞紐分析表的任何量值,都是在欄和列標題的內容中計算,加上量值公式中的任何篩選器。

如需詳細資訊,請參閱DAX 公式中的內容

頁面頂端

移除篩選

使用複雜公式時,您可能會想要確切知道目前的篩選是什麼,或者您可能想要修改公式的篩選部分。 DAX 提供數個可讓您移除篩選的功能,以及控制哪些欄會保留為目前篩選內容的一部分。 本節概要說明這些函數如何影響公式的結果。

使用 ALL 函數覆寫所有篩選

您可以使用 ALL 函數來覆寫先前已套用的任何篩選,並將資料表中的所有列傳回執行匯總或其他運算的函數。 如果您使用一或多個資料行(而不是資料表)作為 ALL的引數,則 ALL 函數會傳回所有資料列,忽略任何內容篩選器。

附註: 如果您熟悉關係資料庫的術語,就可以考慮 ALL 產生所有資料表的自然左外部連接。

例如,假設您有 [資料表]、[銷售] 和 [產品],而且您想要建立公式,以計算目前產品的銷售額總和除以所有產品的銷售額。 您必須考慮的是,如果在量值中使用公式,樞紐分析表的使用者可能會使用交叉分析篩選器來篩選特定產品,並在資料列上加上產品名稱。 因此,無論任何篩選或交叉分析篩選器,若要取得分母的 true 值,您必須新增 ALL 函數來覆寫任何篩選器。 下列公式就是如何使用 ALL 來覆寫先前篩選的效果的一個範例:

= SUM (銷售 [金額])/SUMX (銷售額 [金額],篩選(銷售,全部(產品)))

  • 公式的第一部分 [SUM] (Sales [金額])會計算分子。

  • 加總會考慮目前的內容,這表示如果您在計算結果欄中新增公式,則會套用列內容,如果您將公式新增至樞紐分析表做為度量單位,則會套用在樞紐分析表中套用的任何篩選(篩選內容)。

  • 公式的第二部分會計算分母。 ALL 函數會覆寫任何可能套用至 Products 資料表的篩選。

如需詳細資訊(包括詳細範例),請參閱ALL 函數

使用 ALLEXCEPT 函數覆寫特定篩選

ALLEXCEPT 函數也會覆寫現有的篩選,但您可以指定一些現有的篩選應保留。 您將其命名為 ALLEXCEPT 函數引數的欄,指定哪些欄將會繼續篩選。 如果您想要覆寫來自大多數欄但不全部的篩選,ALLEXCEPT 會比 ALL 更方便。 當您建立的樞紐分析表可能會在許多不同的欄上篩選,而您想要控制公式中使用的值時,ALLEXCEPT 函數特別有用。 如需詳細資訊,包括如何在樞紐分析表中使用 ALLEXCEPT 的詳細範例,請參閱ALLEXCEPT 函數

頁面頂端

附註:  本頁面是經由自動翻譯而成,因此文中可能有文法錯誤或不準確之處。 讓這些內容對您有所幫助是我們的目的。 告訴我們這項資訊是否有幫助? 這裡是供您參考的英文文章

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

這項資訊有幫助嗎?

感謝您的意見反應!

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

×