SWITCH
根据值列表计算表达式,并返回多个可能的结果表达式之一。 此函数可用于避免使用多个嵌套 IF 语句。
语法
SWITCH(<expression>, <value>, <result>[, <value>, <result>]…[, <else>])
parameters
术语 | 定义 |
---|---|
expression |
返回单个标量值的任何 DAX 表达式,其中表达式将多次计算(对于每行/上下文)。 |
value |
要与 expression 结果匹配的常量值。 |
result |
如果 expression 的结果与相应的 value 匹配,则计算的任何标量表达式。 |
else |
如果 expression 的结果与任何 value 参数不匹配,则计算的任何标量表达式。 |
返回值
如果匹配 value
,则返回相应 result
中的标量值。 如果与 value
不匹配,则返回来自 else
的值。 如果未指定任何 values
匹配且未指定 else
,则返回 BLANK。
备注
- 要计算的
expression
可以是常量值或表达式。 此函数的常见用途是将第一个参数设置为TRUE
。 请参阅以下示例。 - 所有
result
表达式和else
表达式都必须具有相同的数据类型。 - 条件的顺序很重要。 一旦一个
value
匹配,就会返回相应的result
,并且不会评估其他后续values
。 请确保在限制较少的values
之前指定要评估的最严格的values
。 请参阅以下示例。
示例
SWITCH 的常见用途是将 expression
与常量 values
进行比较。 以下示例创建月份名称的计算列:
= 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"
)
values
的顺序很重要。 在以下示例中,从不返回第二个 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
)