篩選 DAX 公式中的資料

本節說明如何在 DAX 公式的資料分析運算式 () 篩選。 您可以在公式中建立篩選,以限制用於計算之來源資料的值。 若要這麼做,請指定資料表做為公式的輸入,然後定義篩選運算式。 您提供的篩選運算式是用來查詢資料,並只返回來源資料的子集。 每次更新公式結果時,會視資料目前的上下文動態地使用篩選。

本文內容

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

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

例如,假設您有一個資料表,其中包含轉銷商的訂單資訊,而且您想要計算每個轉銷商的售價。 不過,您只想要顯示銷售高價值產品多個單位的轉銷商的銷售金額。 下列公式以 DAX 範例活頁簿為基礎,顯示一個範例,說明如何使用篩選建立此計算:

=SUMX (
     篩選 ( 5 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 函數應加總哪些值。 在這種情況下,您只是使用銷售金額。

    請注意,如 FILTER 等函數會返回資料表,因此永遠不會直接返回資料表或列,但會一直內嵌到另一個函數中。 有關 FILTER 和其他用於篩選的函數 ,包括更多範例,請參閱篩選函數 (DAX) 。

    附註: 篩選運算式會受其使用上下文影響。 例如,如果您在量值中使用篩選,且量值是在樞紐分析表或 樞紐分析圖 中使用,則所退回的資料子集可能會受到使用者在樞紐分析表中所申請的其他篩選或分析篩選器影響。 有關上下文詳細資訊,請參閱 DAX 公式中的上下文

移除重複的篩選

除了篩選特定值之外,您還可以從另一個資料表或欄返回一組唯一的值。 當您想要計算欄中的唯一值數目,或是將唯一值清單用於其他作業時,這項功能會很有説明。 DAX 提供兩個函數,可返回不同的值 :DISTINCT 函數VALUES 函數

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

  • VALUES 函數也會傳回唯一值清單,但也會傳回未知成員。 當您使用由關聯連接之兩個數據表中的值,而其中一個資料表中缺少值,而另一個資料表中顯示值時,這項功能會很有用。 有關未知成員的資訊,請參閱 DAX 公式中的上下文

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

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

頁面頂端

上下文如何影響篩選

當您新增 DAX 公式至樞紐分析表或樞紐分析圖時,公式的結果可能會受到上下文影響。 如果您是在資料表中 Power Pivot ,上下文就是目前的列及其值。 如果您是在樞紐分析表或資料樞紐分析圖,上下文代表由操作定義的資料集或子集,例如剪下或篩選。 樞紐分析表或樞紐分析表樞紐分析圖本身的情況。 例如,如果您建立的樞紐分析表會根據地區和年份分組銷售,則樞紐分析表中只會顯示適用于這些地區和年份的資料。 因此,您新加入樞紐分析表的任何量值,都是根據欄和列名,加上量值公式中任何篩選的上下文計算。

詳細資訊,請參閱 DAX 公式中的上下文

頁面頂端

移除篩選

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

使用 ALL 函數重寫所有篩選

您可以使用 ALL 函數來重寫先前已應用的任何篩選,並返回資料表中的所有列至執行匯總或其他作業的函數。 如果您使用一或多個資料行,而非表格做為資料表 ALLALL 函數會 ALL 所有資料列,忽略任何上下文篩選。

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

例如,假設您有資料表 ,即銷售與產品,而您想要建立一個公式,計算目前產品的銷售總和除以所有產品的銷售。 您必須考慮到以下事實:如果公式是用於量值,樞紐分析表的使用者可能會使用資料透視篩選器篩選特定產品,而資料列上有產品名稱。 因此,若要取得分母的真值,無論有任何篩選或S slicers,您必須新增 ALL 函數以重寫任何篩選。 下列公式是如何使用 ALL 來取代先前篩選效果的其中一個範例:

=SUM (Sales[amount]) /SUMX (Sales[Amount]、FILTER (銷售額、 (產品) ) )

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

  • 加總會考慮到目前的上下文,也就是說,如果您將公式新加到計算結果欄,則列上下文會採用,如果您將公式新增到樞紐分析表中做為量值,則樞紐分析表中所應用的任何篩選 (篩選上下文) 會採用。

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

詳細資訊 ,包括詳細範例,請參閱 ALL 函數

使用 ALLEXCEPT 函數重寫特定篩選

ALLEXCEPT 函數也會重寫現有的篩選,但您可以指定保留部分現有的篩選。 您指定為 ALLEXCEPT 函數引數的欄會指定會繼續篩選哪些欄。 如果您想要重寫大部分資料行的篩選,但並非全部,ALLEXCEPT 比 ALL 更方便。 當您建立樞紐分析表時,ALLEXCEPT 函數特別有用,因為樞紐分析表可能會篩選到許多不同的資料行,而且您想要控制公式中使用的值。 若要瞭解詳細資訊,包括如何在樞紐分析表中使用 ALLEXCEPT 的詳細範例,請參閱 ALLEXCEPT 函數

頁面頂端

需要更多協助?

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

這項資訊有幫助嗎?

×