Dichiarazione CASE (MDX)

Ti permette di restituire valori specifici in modo condizionato da confronti multipli. Esistono due tipi di enunciati di caso:

  • Una semplice istruzione case che confronta un'espressione con un insieme di espressioni semplici per restituire valori specifici.

  • Una dichiarazione case ricercata che valuta un insieme di espressioni booleane per restituire valori specifici.

Sintassi

  
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
Un'espressione di Espressioni Multidimensionali (MDX) che si risolve in un valore scalare.

when_expression
Un valore scalare specificato rispetto al quale viene valutato il input_expression , che, una volta valutato come vero, restituisce il valore scalare del else_result_expression.

when_true_result_expression
Il valore scalare restituito quando la clausola WHEN si valuta come vero.

else_result_expression
Il valore scalare viene restituito quando nessuna delle clausole WHEN valuta come vero.

Boolean_expression
Un'espressione MDX che valuta a un valore scalare.

Osservazioni:

Se non esiste una clausola ELSE, e tutte le clausole WHEN si valutano come false, il risultato è una cella vuota.

Espressione del caso semplice

MDX valuta un'espressione di caso semplice risolvendo il input_expression in un valore scalare. Questo valore scalare viene poi confrontato con il valore scalare del when_expression. Se i due valori scalari corrispondono, l'istruzione CASE restituisce il valore della when_true_expression. Se i due valori scalari non corrispondono, viene valutata la clausola WHEN successiva. Se tutte le clausole WHEN si valutano come false, il valore di else_result_expression dalla clausola ELSE, se presente, viene restituito.

Nel seguente esempio, la misura del Conteggio degli Ordini del Rivenditore viene valutata rispetto a diverse clausole WHEN e restituisce un risultato basato sul valore della misura del Conteggio degli Ordini del Rivenditore per ogni anno. Per i valori del conteggio degli ordini rivenditori che non corrispondono a un valore scalare specificato in un when_expression in una clausola WHEN, viene restituito il valore scalare della 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  

Espressione del caso ricercato

Per usare l'espressione case per eseguire valutazioni più complesse, si utilizza l'espressione case searched. Questa variazione dell'espressione di ricerca permette di valutare se un'espressione di input rientra in un intervallo di valori. MDX valuta le clausole WHEN nell'ordine in cui queste clausole compaiono nell'istruzione CASE.

Nel seguente esempio, la misura del conteggio degli ordini del rivenditore viene valutata rispetto al Boolean_expression specificato per ciascuna delle diverse clausole WHEN. Un risultato viene restituito in base al valore della misura del Conteggio degli Ordini del Rivenditore per ogni anno. Poiché le clausole WHEN vengono valutate nell'ordine in cui appaiono, tutti i valori maggiori di 6 possono facilmente essere assegnati al valore "MOLTO GRANDE" senza dover specificare esplicitamente ogni valore. Per i valori del conteggio degli ordini rivenditori non specificati in una clausola WHEN, viene restituito il valore scalare del 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