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  

論點

input_expression
一個多維表達式(MDX)表達式,解析為純量值。

when_expression
一個指定的純量值,作為 input_expression 值的評估基準,當該值值為真時,回傳該 else_result_expression的純量值。

when_true_result_expression
當 WHEN 子句被評估為 true 時,標量值會回傳。

else_result_expression
當所有 WHEN 子句都未被值為真時,標量值會回傳。

Boolean_expression
一個 MDX 表達式,取值為純量值。

備註

若不存在 ELSE 子句,且所有 WHEN 子句皆為 false,則結果為空格。

簡單情況表達式

MDX 透過將 input_expression 解析為純量值來評估一個簡單的案例表達式。 接著將此純量值與 when_expression的純量值比較。 若兩個純量值相符,CASE 陳述式會回傳 when_true_expression值。 若兩個純量值不匹配,則會評估下一個 WHEN 子句。 若所有 WHEN 子句皆為 false,則返回 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 依照 CASE 陳述中 WHEN 條款出現的順序來評估這些條款。

以下範例中,經銷商訂單數量衡量會針對多個 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