SWITCH
针对值列表计算表达式,并返回多个可能的结果表达式之一。 此函数可用于避免有多个嵌套 IF 语句。
语法
SWITCH(<expression>, <value>, <result>[, <value>, <result>]…[, <else>])
parameters
术语 | 定义 |
---|---|
表达式 | 返回单个标量值的任何 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 来实现的,如以下示例所示,该示例比较了产品的 Reorder Point 和 Safety Stock Level,以确定缺货的潜在风险:
= 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
)