檢查篩選內容
VALUES
DAX 函式可讓公式判斷篩選內容中的值。
VALUES
函式語法如下所示:
VALUES(<TableNameOrColumnName>)
函式需要傳入資料表參考或資料行參考。 當您傳入資料表參考時,其會傳回具有相同資料行的資料表物件,其中包含篩選內容中的資料列。 當您傳入資料行參考時,其會傳回篩選內容中唯一值的單一資料行資料表。
函式一律會傳回資料表物件,且資料表可以包含多個資料列。 因此,若要測試特定值是否在篩選內容中,您的公式必須先測試 VALUES
函式是否會傳回單一資料列。 有兩個函式可協助您完成這項工作:HASONEVALUE
和 SELECTEDVALUE
DAX 函式。
當指定的資料行參考已篩選成單一值時,HASONEVALUE
函式會傳回 TRUE
。
SELECTEDVALUE
函式可簡化決定單一值的工作。 當函式傳遞資料行參考時,其會傳回單一值,或當篩選內容中有一個以上的值時,其會傳回空白 (或您傳遞給函式的替代值)。
在下列範例中,您將使用 HASONEVALUE
函式。 在 Sales 資料表中新增下列量值,以計算銷售傭金。 請注意,在 Adventure Works 中,除了 美國 以外,所有國家/地區的收益率為 10%。 在美國,銷售人員享有 15% 的傭金。 將量值格式化為具有兩個小數位數的貨幣,然後將其至報表 Page 3 上可找到的資料表中。
Sales Commission =
[Revenue]
* IF(
HASONEVALUE('Sales Territory'[Country]),
IF(
VALUES('Sales Territory'[Country]) = "United States",
0.15,
0.1
)
)
請注意,總 [銷售傭金] 結果為空白。 原因在於 Sales Territory 資料表的 Country 資料行篩選內容中有多個值。 在此情況下,HASONEVALUE
函式會傳回 FALSE
,這會導致 [收益] 量值乘以空白 (值乘以空白等於空白)。 若要產生總計,您必須使用迭代器函式,稍後在此課程模組中將會說明。
您可以用來測試篩選狀態的其他三個函式包括:
-
ISFILTERED
- 當傳入的資料行參考「直接」進行篩選時,會傳回TRUE
。 -
ISCROSSFILTERED
- 當傳入的資料行參考「間接」進行篩選時,會傳回TRUE
。 當套用至相同資料表或相關資料表中其他資料行的篩選條件會透過篩選作業影響參考資料行時,此資料行就是進行交叉篩選。 -
ISINSCOPE
- 當傳入的資料行參考是層級階層中的層級時,會傳回TRUE
。
回到報表的 Page 2,然後修改 Revenue % Total Country 量值定義,以測試 Sales Territory 資料表中的 Region 資料行是否在範圍內。 如果不在範圍內,量值結果應該是空白。
Revenue % Total Country =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalCountryRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS('Sales Territory'[Region])
)
RETURN
IF(
ISINSCOPE('Sales Territory'[Region]),
DIVIDE(
CurrentRegionRevenue,
TotalCountryRevenue
)
)
在 [矩陣] 視覺效果中,請注意,只有當區域在範圍內時,才會顯示 [總國家/地區收益 %] 的值。