篩選 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 的產品。運算子,& &,是邏輯與運算子,指出必須屬於篩選的子集資料列,則為 true 的條件的兩個部分。

  • 公式的第三部分則是告訴 SUMX 函數,應該加總哪些值。在這個案例中,您要加總的是銷售量。

    請注意,像 FILTER 這類傳回表格的函數,絕對不會直接傳回表格或資料列,而是內嵌在另一個函數中。有關 FILTER 及用於篩選的其他函數,詳情 (以及更多範例) 請參閱 Filter 函數 (DAX)

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

負責移除重複項目的篩選

除了針對特定值進行篩選之外,您也可以從另一個欄或表格傳回一組唯一值。如果您要計算欄中的唯一值數目,或是使用一份唯一值清單來進行其他作業時,就可以採用這項功能。DAX 有兩個可讓您傳回唯一值的函數:DISTINCT 函數VALUES 函數

  • DISTINCT 函數會檢查您作為引數指定給函數的某一欄,然後傳回含有唯一值的新欄。

  • VALUES 函數也會傳回唯一值的清單,但也會傳回未知的成員。當您使用的關聯,連接的兩個資料表中的值時,這是很有用,值為一個資料表中遺漏和其他簡報。如需有關未知的成員的詳細資訊,請參閱DAX 公式中的內容

這兩個函數都會傳回一整欄的值;因此您可以利用它們取得一份值清單,然後再傳給另一個函數。例如,您可以使用下面這個公式,以唯一產品金鑰取得一份由某特定經銷商所銷售的特有產品,然後再以 COUNTROWS 函數計算該清單內的產品數目:

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

頁面頂端

內容對於篩選有何影響

當您新增至樞紐分析表或樞紐分析圖的 DAX 公式時,公式的結果可能會影響的內容。如果您使用Power Pivot表格中,內容是目前資料列和其值。如果您使用樞紐分析表或樞紐分析圖中,設定或所定義之作業,例如切割,或篩選的資料子集,就表示內容。樞紐分析表或樞紐分析圖的設計,也會它自己的內容。例如,如果您建立的群組地區和年的銷售額樞紐分析表,只適用於這些區域與年數的資料會顯示樞紐分析表。因此您新增至樞紐分析表中的任何量值會計算欄和列標題加上任何篩選量值的公式中的內容中。

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

頁面頂端

移除篩選

在使用複雜公式時,您想要確實知道目前的篩選,或者想要修改公式的篩選部分。DAX 提供了幾個函數讓您移除篩選,並且控制哪些欄會保留為目前篩選內容的一部分。本節將為您概略說明這些函數對於公式結果有何影響。

以 ALL 函數覆寫所有的篩選

您可以使用ALL函數覆寫先前套用的任何篩選,並在資料表中的所有資料列返回執行彙總或其他作業的函數。如果您使用一或多個欄,而不是表格,為ALL的引數, ALL函數會傳回所有資料列,並忽略的所有內容篩選。

附註: 如果您很熟悉關聯式資料庫的術語,則可以將 ALL 視為是產生所有表格的自然左外部聯結。

舉個例說,假設您有 [Sales] 和 [Products] 這兩個表格,您想要建立一個公式,計算目前產品的銷售總和,除以所有產品的銷售額。您必須考慮的一點是,如果您把公式用於量值,則樞紐分析表的使用者,可能會使用交叉分析篩選器以及列上的產品名稱,針對特定產品進行篩選。因此,無論篩選或交叉分析篩選器為何,若要取得分母的真正值,必須加上 ALL 函數來覆寫所有的篩選。下面這個公式就是一個範例,它為我們示範如何使用 ALL 來覆寫之前篩選的效果:

= SUM (Sales [Amount]) / SUMX (Sales [Amount],篩選 (銷售、 ALL(Products)))

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

  • 總和會把目前內容考量進去,也就是說,如果您將公式加到計算結果欄位,就會套用列內容;如果您將公式加到樞紐分析表作為量值,就會套用所有套用到樞紐分析表 (篩選內容) 的篩選。

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

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

以 ALLEXCEPT 函數覆寫特定的篩選

ALLEXCEPT 函數也會覆寫現有的篩選,但您可以指定應該保留部分現有的篩選。您為 ALLEXCEPT 函數指定引數的欄,會指定哪些欄將繼續接受篩選。如果您要覆寫大部分欄 (但不是所有欄) 的篩選,則 ALLEXCEPT 比 ALL 更為方便。如果您建立的樞紐分析表,當中可能有許多欄會受到篩選,而您希望控制公式所用的值,這時候就特別適合使用 ALLEXCEPT 函數。如需詳細資訊 (包括一個詳細範例,示範如何在樞紐分析表使用 ALLEXCEPT),請參閱 ALLEXCEPT 函數

頁面頂端

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

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

這項資訊有幫助嗎?

感謝您的意見反應!

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

×