Declaração do CASO (MDX)

Permite que você retorne valores específicos condicionalmente de múltiplas comparações. Existem dois tipos de enunciados de caso:

  • Uma instrução caso simples que compara uma expressão com um conjunto de expressões simples para retornar valores específicos.

  • Uma instrução de caso pesquisada que avalia um conjunto de expressões booleanas para retornar valores específicos.

Sintaxe

  
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  

Argumentos

input_expression
Uma expressão de Expressões Multidimensionais (MDX) que resolve para um valor escalar.

when_expression
Um valor escalar especificado contra o qual o input_expression é avaliado, que, quando avaliado como verdadeiro, retorna o valor escalar do else_result_expression.

when_true_result_expression
O valor escalar retornado quando a cláusula WHEN é avaliada como verdadeira.

else_result_expression
O valor escalar retorna quando nenhuma das cláusulas WHEN avalia como verdadeira.

Boolean_expression
Uma expressão MDX que avalia para um valor escalar.

Remarks

Se não houver cláusula ELSE, e todas as cláusulas WHEN avaliarem como falsas, o resultado é uma célula vazia.

Expressão de Caso Simples

O MDX avalia uma expressão de caso simples resolvendo o input_expression para um valor escalar. Esse valor escalar é então comparado ao valor escalar do when_expression. Se os dois valores escalares coincidirem, a instrução CASE retorna o valor do when_true_expression. Se os dois valores escalares não coincidirem, a próxima cláusula WHEN é avaliada. Se todas as cláusulas WHEN avaliarem como falsas, o valor de else_result_expression da cláusula ELSE, se houver, é retornado.

No exemplo a seguir, a medida de Contagem de Ordens de Revendedor é avaliada em relação a várias cláusulas WHEN e retorna um resultado baseado no valor da medida de Contagem de Ordens de Revendedor para cada ano. Para valores de contagem de ordens de revendedor que não correspondem a um valor escalar especificado em uma cláusula when_expression WHEN, o valor escalar da else_result_expression é retornado.

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  

Expressão de Caso Pesquisada

Para usar a expressão de caso para realizar avaliações mais complexas, utilize a expressão de caso pesquisado. Essa variação da expressão de busca permite avaliar se uma expressão de entrada está dentro de um intervalo de valores. O MDX avalia as cláusulas WHEN na ordem em que essas cláusulas aparecem na instrução CASE.

No exemplo a seguir, a medida de Contagem de Ordens de Revendedor é avaliada em relação à Boolean_expression especificada para cada uma das várias cláusulas WHEN. Um resultado é retornado com base no valor da medida de Contagem de Ordens de Revendedor para cada ano. Como as cláusulas WHEN são avaliadas na ordem em que aparecem, todos os valores maiores que 6 podem facilmente ser atribuídos ao valor "MUITO GRANDE" sem precisar especificar cada valor explicitamente. Para valores de contagem de ordens de revendedor que não estão especificados em uma cláusula WHEN, o valor escalar da else_result_expression é retornado.

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