CASE 陈述(MDX)

允许你有条件地从多个比较中返回具体数值。 案例陈述有两种类型:

  • 一个简单的格句,将表达式与一组简单表达式进行比较,以返回特定值。

  • 一个搜索案例语句,用于评估一组布尔表达式以返回特定值。

Syntax

  
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  

Arguments

input_expression
一个多维表达式(MDX)表达式,解析为标量值。

when_expression
一个指定的标量值,作为对应的标量值, input_expression 值值为真时返回该 else_result_expression的标量值。

when_true_result_expression
当 WHEN 子句值为真时,标量值返回。

else_result_expression
当所有 WHEN 子句都不值为真时,标量值返回。

Boolean_expression
MDX表达式,取标量值。

Remarks

如果没有 ELSE 子句,且所有 WHEN 子句都值为假,则结果为空单元格。

简单格表达式

MDX通过将 input_expression 解析为标量值来评估一个简单的情况表达式。 然后将该标量值与 when_expression的标量值进行比较。 如果两个标量值相匹配,CASE语句返回 when_true_expression值。 如果两个标量值不匹配,则计算下一个 WHEN 子句。 如果所有 WHEN 子句都被判定为假,则返回 ELSE 子句中的 else_result_expression 值(如有的话)。

在以下示例中,经销商订单计数度量会针对多个WHEN条款进行评估,并基于每年经销商订单计数度量的价值返回结果。 对于经销商订单计数值与 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  

检索案例表达

要使用格表达式进行更复杂的求值,可以使用搜索的格表达式。 这种搜索表达式的变体可以让你判断输入表达式是否在某个值范围内。 MDX评估WHEN条款的顺序,这些从句出现在CASE语句中。

在以下示例中,经销商订单数量指标将针对多个WHEN条款中的每个指定 Boolean_expression 进行评估。 结果基于每年经销商订单计数的值返回。 由于 WHEN 子句的评估顺序是按出现顺序计算的,所有大于 6 的值都可以被赋予“非常大”的值,而无需具体指定每个值。 对于未在 WHEN 条款中指定的经销商订单计数值,返回 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