Instruction CASE (MDX)

Permet de retourner des valeurs spécifiques à partir de plusieurs comparaisons sous certaines conditions. Il existe deux types d'instructions CASE :

  • Une instruction CASE simple qui compare une expression à un jeu d'expressions simples pour retourner des valeurs spécifiques.

  • Une instruction CASE recherchée qui évalue un jeu d'expressions booléennes pour retourner des valeurs spécifiques.

Syntaxe

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
    Expression MDX (Multidimensional Expressions) résolue en valeur scalaire.

  • when_expression
    Une valeur scalaire spécifique, par rapport à laquelle input_expression est évalué, retourne la valeur scalaire de else_result_expression lorsqu'elle prend la valeur True.

  • when_true_result_expression
    Valeur scalaire retournée lorsque la clause WHEN prend la valeur True.

  • else_result_expression
    Valeur scalaire retournée si aucune des clauses WHEN ne prend la valeur True.

  • Boolean_expression
    Expression MDX qui prend une valeur scalaire.

Notes

S'il n'existe aucune clause ELSE et si toutes les clauses WHEN prennent la valeur false, le résultat est une cellule vide.

Expression CASE simple

MDX évalue une expression CASE simple en résolvant l'argument input_expression à une valeur scalaire. Cette valeur scalaire est ensuite comparée à la valeur scalaire de l'argument when_expression. En cas de correspondance entre deux valeurs scalaires, l'instruction CASE retourne la valeur de l'argument when_expression. Si aucune correspondance n'est relevée, la clause WHEN suivante est évaluée. Si toutes les clauses WHEN prennent la valeur False, la valeur de la clause ELSE else_result_expression (le cas échéant) est retournée.

Dans l'exemple ci-dessous, la mesure Reseller Order Count (nombre de commandes du revendeur) est évaluée par rapport à plusieurs clauses WHEN et retourne un résultat fondé sur la valeur de la mesure Reseller Order Count pour chaque année. Pour les valeurs de la mesure Reseller Order Count qui ne correspondent pas à une valeur scalaire spécifiée dans un argument when_expression au sein d'une clause WHEN, c'est la valeur scalaire de l'argument else_result_expression qui est retournée.

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

Expression CASE recherchée

Pour procéder à des évaluations plus complexes à l'aide de l'expression CASE, optez pour l'expression CASE recherchée. Cette variante de l'expression de recherche vous permet d'évaluer si une expression d'entrée s'inscrit dans une plage de valeurs. MDX évalue les clauses WHEN dans l'ordre de leur apparition dans l'instruction CASE.

Dans l'exemple ci-après, la mesure Reseller Order Count est évaluée par rapport à l'argument Boolean_expression spécifié pour chacune des nombreuses clauses WHEN. Un résultat basé sur la valeur de la mesure Reseller Order Count pour chaque année est retourné. Du fait que les clauses WHEN sont évaluées dans l'ordre dans lequel elles apparaissent, toutes les valeurs supérieures à 6 peuvent aisément être affectées à la valeur « VERY LARGE » sans avoir à spécifier explicitement chaque valeur. Pour les valeurs de la mesure Reseller Order Count non définies dans une clause WHEN, la valeur scalaire retournée est celle de l'argument 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

Voir aussi

Autres ressources