CASE Statement (MDX)

Hiermee kun je voorwaardelijk specifieke waarden teruggeven uit meerdere vergelijkingen. Er zijn twee soorten casestatements:

  • Een eenvoudige case-instructie die een expressie vergelijkt met een set eenvoudige expressies om specifieke waarden terug te geven.

  • Een gezocht case-statement dat een set Booleaanse expressies evalueert om specifieke waarden terug te geven.

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
Een Multidimensionale Expressies (MDX) expressie die oplost tot een scalaire waarde.

when_expression
Een gespecificeerde scalaire waarde waartegen de input_expression wordt geëvalueerd, die, wanneer deze wordt gerealiseerd, de scalaire waarde van de else_result_expression teruggeeft.

when_true_result_expression
De scalaire waarde werd teruggegeven wanneer de WHENN-clausule naar waar wordt geëvalueerd.

else_result_expression
De scalaire waarde werd teruggegeven wanneer geen van de WHEN-clausules als waar geëvalueerd werd.

Boolean_expression
Een MDX-expressie die evalueert naar een scalaire waarde.

Remarks

Als er geen ELSE-clausule is, en alle WENN-clausules op false evalueren, is het resultaat een lege cel.

Eenvoudige Casusuitdrukking

MDX evalueert een eenvoudige casusuitdrukking door de input_expression op te lossen in een scalaire waarde. Deze scalaire waarde wordt vervolgens vergeleken met de scalaire waarde van de when_expression. Als de twee scalaire waarden overeenkomen, geeft de CASE-instructie de waarde van de when_true_expression terug. Als de twee scalairwaarden niet overeenkomen, wordt de volgende WENN-clausule geëvalueerd. Als alle WHEN-clausules op false evalueren, wordt de waarde van else_result_expression van de ELSE-clausule, indien aanwezig, teruggegeven.

In het volgende voorbeeld wordt de Reseller Order Count-maat geëvalueerd aan verschillende WENN-clausules en geeft een resultaat op basis van de waarde van de Reseller Order Count-maat voor elk jaar. Voor Reseller Order Count-waarden die niet overeenkomen met een scalaire waarde gespecificeerd in een when_expression in een WHEN-clausule, wordt de scalaire waarde van de else_result_expression teruggegeven.

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  

Gezocht Zaakuitdrukking

Om de case-expressie te gebruiken voor complexere evaluaties, gebruik je de gezocht case-expressie. Deze variatie van de zoekexpressie stelt je in staat te evalueren of een invoerexpressie binnen een bereik van waarden valt. MDX evalueert de WENN-clausules in de volgorde waarin deze clausules in de CASE-instructie voorkomen.

In het volgende voorbeeld wordt de Reseller Order Count-maat geëvalueerd aan de hand van de gespecificeerde Boolean_expression voor elk van de verschillende WHEN-clausules. Er wordt een resultaat teruggegeven op basis van de waarde van de Reseller Order Count-maat voor elk jaar. Omdat WHEN-clausules in de volgorde waarin ze voorkomen worden geëvalueerd, kunnen alle waarden groter dan 6 eenvoudig de waarde "ZEER GROOT" worden toegekend zonder dat elke waarde expliciet hoeft te specificeren. Voor Reseller Order Count-waarden die niet zijn gespecificeerd in een WENN-clausule, wordt de scalaire waarde van de else_result_expression teruggegeven.

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