CASE 语句 (MDX)
允许您有条件地从多次比较中返回特定值。 有两种类型的 Case 语句:
简单 Case 语句将某个表达式与一组简单表达式进行比较,以返回特定的值。
搜索 Case 语句计算一组布尔表达式,以返回特定的值。
语法
Simple Case Statement
CASE [input_expression]
WHEN when_expression THEN when_true_result_expression
[...n]
[ELSE else_result_expression]
END
Search Case Statement
CASE
WHEN Boolean_expression THEN when_true_result_expression
[...n]
[ELSE else_result_expression]
END
参数
input_expression
解析为标量值的多维表达式 (MDX)。when_expression
用于计算 input_expression 的指定标量值,当计算结果为 True 时,返回 else_result_expression 的标量值。when_true_result_expression
当 WHEN 子句计算结果为 True 时返回的标量值。else_result_expression
当没有任何 WHEN 子句的计算结果为 True 时返回的标量值。Boolean_expression
计算结果为标量值的 MDX 表达式。
注释
如果没有 ELSE 子句,而且所有 WHEN 子句的计算结果都为 False,则结果是空单元。
简单 Case 表达式
MDX 通过将 input_expression 解析为标量值来计算简单 Case 表达式。 然后,将该标量值与 when_expression 的标量值进行比较。 如果这两个标量值匹配,则 CASE 语句返回 when_true_expression 的值。 如果这两个标量值不匹配,则计算下一个 WHEN 子句。 如果所有的 WHEN 子句计算结果均为 False,则返回来自 ELSE 子句的 else_result_expression 的值(如果存在 ELSE 子句)。
在下例中,对几个 WHEN 子句计算 Reseller Order Count 度量值,并且基于每年的 Reseller Order Count 度量值的值返回一个结果。 如果 Reseller Order Count 值与 WHEN 子句中的 when_expression 指定的标量值不匹配,则返回 else_result_expression 的标量值。
WITH MEMBER [Measures].x AS
CASE [Measures].[Reseller Order Count]
WHEN 0 THEN 'NONE'
WHEN 1 THEN 'SMALL'
WHEN 2 THEN 'SMALL'
WHEN 3 THEN 'MEDIUM'
WHEN 4 THEN 'MEDIUM'
WHEN 5 THEN 'LARGE'
WHEN 6 THEN 'LARGE'
ELSE 'VERY LARGE'
END
SELECT Calendar.[Calendar Year] on 0
, NON EMPTY [Geography].[Postal Code].Members ON 1
FROM [Adventure Works]
WHERE [Measures].x
Case 搜索表达式
若要使用 Case 表达式执行更为复杂的计算,请使用 Case 搜索表达式。 使用此搜索表达式的变体可以计算输入表达式是否位于一个值范围内。 MDX 按 WHEN 子句出现在 CASE 语句中的顺序计算这些子句。
下例中,为每个 WHEN 子句针对指定的 Boolean_expression 计算 Reseller Order Count 度量值。 根据每年的 Reseller Order Count 度量值的值返回一个结果。 因为按照 WHEN 子句出现的顺序计算这些子句,所以可简单地将所有大于 6 的值赋值为“VERY LARGE”,而无需显式地指定每个值。 对于没有在 WHEN 子句内指定的 Reseller Order Count 值,则返回 else_result_expression 的标量值。
WITH MEMBER [Measures].x AS
CASE
WHEN [Measures].[Reseller Order Count] > 6 THEN 'VERY LARGE'
WHEN [Measures].[Reseller Order Count] > 4 THEN 'LARGE'
WHEN [Measures].[Reseller Order Count] > 2 THEN 'MEDIUM'
WHEN [Measures].[Reseller Order Count] > 0 THEN 'SMALL'
ELSE "NONE"
END
SELECT Calendar.[Calendar Year] on 0,
NON EMPTY [Geography].[Postal Code].Members on 1
FROM [Adventure Works]
WHERE [Measures].x