IIf (MDX)

Retourne l'une des deux valeurs déterminées par un test logique.

Syntaxe

IIf(Logical_Expression, Expression1 [HINT <hints>], Expression2 [HINT <hints>]) [HINT <hints>]
<hints> ::= <hint> [<hints>]
<hint> ::= EAGER | STRICT | LAZY

Arguments

  • Logical_Expression
    Expression logique MDX (Multidimensional Expressions) valide qui prend la valeur true ou false.

  • Expression1 [HINT <hints>]
    Expression MDX (Multidimensional Expressions) valide. HINT <hints> est un modificateur facultatif qui détermine comment et quand l'expression est évaluée. Pour plus d'informations, consultez la section Remarques.

  • Expression2[HINT <hints>]
    Expression MDX (Multidimensional Expressions) valide. HINT <hints> est un modificateur facultatif qui détermine comment et quand l'expression est évaluée. Pour plus d'informations, consultez la section Remarques.

Notes

L'expression spécifiée par l'expression logique prend la valeur false uniquement si la valeur de cette expression est zéro. Toute autre valeur prend la valeur true.

Si l'expression logique spécifiée prend la valeur 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.

[!REMARQUE]

Dans MicrosoftSQL Server 2000, Analysis Services prenait uniquement en charge les valeurs de retour de type numérique et chaîne ; par ailleurs, les types des expressions spécifiées devaient être les mêmes. Ces restrictions ne s'appliquent pas à SQL ServerAnalysis Services.

La fonction IIf n'est pas conseillée pour créer un jeu de membres à partir de critères de recherche. Il vaut mieux utiliser à la place la fonction Filter pour évaluer chaque membre d'un jeu spécifié par rapport à une expression logique et retourner un sous-ensemble de membres.

[!REMARQUE]

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

Les indicateurs de plan sont une extension du langage MDX qui permet d'indiquer au moteur comment évaluer les expressions.

  • EAGER entraîne l'évaluation de l'expression dans l'intégralité du sous-espace IIF.

  • STRICT entraîne l'évaluation de l'expression uniquement dans le sous-espace résultant en fonction des résultats de l'expression de condition.

  • LAZY entraîne l'évaluation de l'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 obtenir des explications plus détaillées, consultez Améliorations des performances pour MDX dans SQL Server 2008 Analysis Services.

Exemples

La requête suivante illustre une utilisation simple de IIF à l'intérieur d'une mesure calculée pour retourner l'une des deux valeurs de chaîne distinctes 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 d'IIF est de gérer les erreurs de 'division par zéro' dans les 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])

Les éléments suivants sont un exemple de IIF qui retourne l'un des deux jeux à l'intérieur de la fonction Generate pour créer un jeu complexe de tuple 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])