IIf (MDX)

Évalue différentes expressions de branche, selon qu'une condition booléenne renvoie true ou false.

Syntaxe

  
IIf(Logical_Expression, Expression1 [HINT <hints>], Expression2 [HINT <hints>])  

Arguments

La fonction IIf prend trois arguments : iif(<condition>, <puis branche>, <else branch>).

Logical_Expression
Condition qui prend la valeur true (1) ou false (0). Ce doit être une expression logique MDX (Multidimensional Expressions) valide.

Expression1 Hint [Eager| Strict| Paresseux]]
Utilisé lorsque l’expression logique prend la valeur true. Expression1 doit être une expression MDX (Multidimensional Expressions) valide.

Expression2 Hint [Eager| Strict| Paresseux]]
Utilisé lorsque l’expression logique prend la valeur false. Expression2 doit être une expression MDX (Multidimensional Expressions) valide.

Remarques

La condition spécifiée par l’expression logique prend la valeur false lorsque la valeur de cette expression est zéro. Toute autre valeur prend la valeur true.

Lorsque la condition est true, la fonction IIf retourne la première expression. Sinon, la fonction retourne la seconde expression.

Les expressions spécifiées peuvent retourner des valeurs ou des objets MDX. De plus, leurs types ne doivent pas obligatoirement correspondre.

La fonction IIf n’est pas recommandée pour créer un ensemble de membres en fonction de critères de recherche. Utilisez plutôt la fonction Filter pour évaluer chaque membre d’un jeu spécifié par rapport à une expression logique et retourner un sous-ensemble de membres.

Notes

Si l'une des expressions prend la valeur NULL, le jeu de résultats est NULL une fois cette condition satisfaite.

HINT est un modificateur facultatif qui détermine comment et quand l'expression est évaluée. Il vous permet de modifier le plan de requête par défaut en spécifiant la façon dont l'expression est évaluée.

  • EAGER évalue l'expression dans le sous-espace IIF d'origine.

  • STRICT évalue l'expression uniquement dans le sous-espace limité créé par l'expression de condition logique.

  • LAZY évalue l'expression en mode cellule-par-cellule.

Tandis que EAGER et STRICT s'appliquent uniquement aux branches then-else de IIF, LAZY s'applique à toutes les expressions MDX. Toutes les expressions MDX peuvent être suivies par HINT LAZY, qui évaluent cette expression en mode cellule-par-cellule.

EAGER et STRICT s'excluent mutuellement dans l'indicateur ; ils peuvent être utilisés dans la même fonction IIF(,,) sur des expressions différentes.

Pour plus d’informations, consultez Indicateurs de requête de fonction IIF dans SQL Server Analysis Services 2008 et Plans d’exécution et indicateurs de plan pour la fonction IIF MDX et l’instruction CASE.

Exemples

La requête suivante montre une utilisation simple d’IIF à l’intérieur d’une mesure calculée pour renvoyer l’une des deux valeurs de chaîne différentes lorsque la mesure Internet Sales Amount est supérieure ou inférieure à 10 000 $ :

WITH MEMBER MEASURES.IIFDEMO AS

IIF([Measures].[Internet Sales Amount]>10000

, "Sales Are High", "Sales Are Low")

SELECT {[Measures].[Internet Sales Amount],MEASURES.IIFDEMO} ON 0,

[Date].[Date].[Date].MEMBERS ON 1

FROM [Adventure Works]

Une utilisation très courante de l’IIF consiste à gérer les erreurs de « division par zéro » dans des mesures calculées, comme dans l’exemple suivant :

WITH

//Returns 1.#INF when the previous period contains no value

//but the current period does

MEMBER MEASURES.[Previous Period Growth With Errors] AS

([Measures].[Internet Sales Amount]-([Measures].[Internet Sales Amount], [Date].[Date].CURRENTMEMBER.PREVMEMBER))

/

([Measures].[Internet Sales Amount], [Date].[Date].CURRENTMEMBER.PREVMEMBER)

,FORMAT_STRING='PERCENT'

//Traps division by zero and returns null when the previous period contains

//no value but the current period does

MEMBER MEASURES.[Previous Period Growth] AS

IIF(([Measures].[Internet Sales Amount], [Date].[Date].CURRENTMEMBER.PREVMEMBER)=0,

NULL,

([Measures].[Internet Sales Amount]-([Measures].[Internet Sales Amount], [Date].[Date].CURRENTMEMBER.PREVMEMBER))

/

([Measures].[Internet Sales Amount], [Date].[Date].CURRENTMEMBER.PREVMEMBER)

),FORMAT_STRING='PERCENT'

SELECT {[Measures].[Internet Sales Amount],MEASURES.[Previous Period Growth With Errors], MEASURES.[Previous Period Growth]} ON 0,

DESCENDANTS(

[Date].[Calendar].[Calendar Year].&[2004],

[Date].[Calendar].[Date])

ON 1

FROM [Adventure Works]

WHERE([Product].[Product Categories].[Subcategory].&[26])

Voici un exemple d’IIF retournant l’un des deux jeux à l’intérieur de la fonction Generate pour créer un ensemble complexe de tuples sur les lignes :

SELECT {[Measures].[Internet Sales Amount]} ON 0,

//If Internet Sales Amount is zero or null

//returns the current year and the All Customers member

//else returns the current year broken down by Country

GENERATE(

[Date].[Calendar Year].[Calendar Year].MEMBERS

, IIF([Measures].[Internet Sales Amount]=0,

{([Date].[Calendar Year].CURRENTMEMBER, [Customer].[Country].[All Customers])}

, {{[Date].[Calendar Year].CURRENTMEMBER} * [Customer].[Country].[Country].MEMBERS}

))

ON 1

FROM [Adventure Works]

WHERE([Product].[Product Categories].[Subcategory].&[26])

Enfin, cet exemple indique comment utiliser les indicateurs de plan :

WITH MEMBER MEASURES.X AS

IIF(

[Measures].[Internet Sales Amount]=0

, NULL

, (1/[Measures].[Internet Sales Amount]) HINT EAGER)

SELECT {[Measures].x} ON 0,

[Customer].[Customer Geography].[Country].MEMBERS ON 1

FROM [Adventure Works]

Voir aussi

Guide de référence des fonctions MDX (MDX)