SWITCH
針對值清單評估運算式,並傳回多個可能結果運算式的其中一個。 此函式可用於避免有多個巢狀 IF 陳述式。
語法
SWITCH(<expression>, <value>, <result>[, <value>, <result>]…[, <else>])
參數
詞彙 | 定義 |
---|---|
expression | 任何傳回單一純量值的 DAX 運算式,其中運算式會 (針對每個資料列/內容) 多次評估。 |
value | 要與 expression 結果相符的常數值。 |
result | expression 的結果符合對應的 value 時,要評估的任何純量運算式。 |
else | expression 的結果不符合任何 value 引數時,要評估的任何純量運算式。 |
傳回值
如果有與 value 相符的項目,則會傳回來自對應 result 的純量值。 如果沒有與 value 相符的項目,則會傳回來自 else 的值。 如果沒有任何 value 相符,且未指定 else,則會傳回 BLANK。
備註
- 要評估的 expression 可能是常值或運算式。 此函式的常見用法是將第一個參數設定為 TRUE。 請參閱以下的範例。
- 所有 result 運算式和 else 運算式都必須屬於相同的資料類型。
- 條件的順序很重要。 一旦 value 相符,就會傳回對應的 result,且不會評估其他後續的 value。 確保限制最嚴格的 value 會比限制較少的 value 先指定。 請參閱以下的範例。
範例
SWITCH 的常見用法是比較 expression 與常數 value。 下列範例會建立月份名稱的計算結果欄:
= SWITCH (
[Month Number Of Year],
1, "January",
2, "February",
3, "March",
4, "April",
5, "May",
6, "June",
7, "July",
8, "August",
9, "September",
10, "October",
11, "November",
12, "December",
"Unknown month number"
)
SWITCH 的另一個常見用法是取代多個巢狀 IF 陳述式。 這可藉由將運算式設定為 TRUE 來完成,如下列範例所示,它會比較產品上的重新排序點和安全庫存量,以找出庫存用完的潛在風險:
= SWITCH (
TRUE,
[Reorder Point] > [Safety Stock Level], "Good: Safety stock level exceeded",
[Reorder Point] = [Safety Stock Level], "Minimal: Safety stock level met",
[Reorder Point] < [Safety Stock Level], "At risk: Safety stock level not met",
ISBLANK ( [Reorder Point] ), "Incomplete: Reorder point not set",
ISBLANK ( [Safety Stock Level] ), "Incomplete: Safety stock level not set",
"Unknown"
)
value 的順序很重要。 在下列範例中,永遠不會傳回第二個 result,因為第一個值的限制小於第二個值。 此範例的結果一律是 “A” 是 “C” ,但絕不會是 “B”。
= SWITCH (
TRUE,
Product[Standard Cost] < 100, "A",
Product[Standard Cost] < 10, "B",
"C"
)
下列陳述式會傳回錯誤,因為 result 引數中的資料類型不同。 請記住,所有 result 和 else 引數中的資料類型必須相同。
= SWITCH (
[Class],
"L", "Large",
"H", 0.1
)