本節說明如何在 DAX) 公式 (資料分析運算式中建立篩選。 您可以在公式內建立篩選,以限制計算中使用的來源資料中的值。 要執行這項操作,請將資料表指定為公式的輸入,然後定義篩選運算式。 您提供的篩選運算式是用來查詢資料,且只會傳回來源資料的子集。 每次更新公式結果時,篩選都會根據資料的目前內容動態套用。
本文內容
在公式中使用的表格上建立篩選
您可以在公式中套用篩選條件,這些公式會採用資料表做為輸入。 您可以使用 FILTER 函數來定義指定資料表中的資料列子集,而非輸入資料表名稱。 然後,該子集會傳遞給另一個函數,以進行自訂彙總等作業。
例如,假設您有一個包含轉銷商訂單資訊的資料表,而您想要計算每個轉銷商的銷售額。 不過,您只想針對銷售多件高價值產品的轉銷商顯示銷售金額。 下列公式以 DAX 範例活頁簿為基礎,示範如何使用篩選建立此計算的一個範例:
=SUMX (
FILTER ('ResellerSales_USD', 'ResellerSales_USD'[Quantity] > 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 函數也會傳回唯一值的清單,但也會傳回未知成員。 當您使用透過關聯聯結的兩個資料表中的值,而其中一個資料表中缺少某個值而另一個資料表中出現值時,此功能便十分有用。 如需 Unknown 成員的詳細資訊,請參閱 DAX 公式中的內容。
這兩個函數都會傳回一整欄的值;因此,您可以使用函數來取得值清單,然後傳遞給另一個函數。 例如,您可以使用下列公式,使用唯一產品金鑰取得特定轉銷商銷售的不同產品清單,然後使用 COUNTROWS 函數計算該清單中的產品:
=COUNTROWS (DISTINCT ('ResellerSales_USD'[ProductKey]) )
內容如何影響篩選
當您將 DAX 公式新增至樞紐分析表或樞紐分析圖時,公式的結果可能會受到內容的影響。 如果您使用 Power Pivot 資料表,內容是目前的資料列及其值。 如果您使用的是樞紐分析表或樞紐分析圖,內容是指由切片或篩選等作業所定義的資料集或子集。 樞紐分析表或樞紐分析圖的設計也會強制設定自己的內容。 例如,如果您建立一個樞紐分析表,其中依地區和年份將銷售量分組,則只有適用於這些地區和年份的資料會出現在樞紐分析表中。 因此,您新增至樞紐分析表的任何量值,都是在欄和列標題加上量值公式中的任何篩選的內容中計算。
如需詳細資訊,請參閱 DAX 公式中的內容。
移除篩選條件
使用複雜的公式時,您可能想要確切知道目前的篩選條件,或可能想要修改公式的篩選部分。 DAX 提供數個函式,可讓您移除篩選,以及控制要保留哪些資料行作為目前篩選內容的一部分。 本節提供這些函數如何影響公式結果的概觀。
使用 ALL 函數覆寫所有篩選條件
您可以使用函數覆 ALL 寫先前套用的任何篩選,並將表格中的所有資料列傳回正在執行彙總或其他作業的函數。 如果您使用一或多個欄而非表格做為 的ALL引數ALL,函數會傳回所有資料列,並忽略任何內容篩選。
注意
如果您熟悉關聯式資料庫術語,您可以將想法 ALL 視為產生所有資料表的自然左外部聯結。
例如,假設您有 [銷售] 和 [產品] 資料表,而您想要建立一個公式,來計算目前產品的銷售總和除以所有產品的銷售量。 您必須考慮到以下事實:如果在量值中使用公式,樞紐分析表的使用者可能會使用交叉分析篩選器來篩選特定產品,並讓產品名稱出現在列上。 因此,無論是否有任何篩選或交叉分析篩選器,都必須取得分母的真實值,您必須新增 ALL 函數來覆寫任何篩選。 下列公式是一個範例,說明如何使用 [全部] 來覆寫先前篩選的效果:
=SUM (Sales[Amount]) /SUMX (Sales[Amount], FILTER (Sales, ALL (Products) ) )
- 公式的第一部分 SUM (Sales[Amount]) 會計算分子。
- 加總會考量目前的內容,這表示如果您將公式新增到計算結果欄中,就會套用資料列內容;如果您將公式新增到樞紐分析表做為量值,則會套用樞紐分析表中套用的任何篩選 (篩選內容) 。
- 公式的第二部分,計算分母。 ALL 函數會覆寫可能套用
Products至資料表的任何篩選。
如需詳細資訊,包括詳細範例,請參閱 ALL 函數。
使用 ALLEXCEPT 函數覆寫特定篩選
ALLEXCEPT 函數也會覆寫現有的篩選,但您可以指定保留某些現有的篩選。 您命名為 ALLEXCEPT 函數引數的欄,可指定要繼續篩選的欄。 如果您想要覆寫大部分欄而非所有欄的篩選,ALLEXCEPT 比 ALL 更方便。 當您要建立可能會篩選在許多不同欄上的樞紐分析表,而且想要控制公式中使用的值時,ALLEXCEPT 函數特別實用。 如需詳細資訊,包括如何在樞紐分析表中使用 ALLEXCEPT 的詳細範例,請參閱 ALLEXCEPT 函數。