IIf (MDX)
Retourne l'une des deux valeurs déterminées par un test logique.
Syntaxe
IIf(Logical_Expression, Expression1, Expression2)
Arguments
Logical_Expression
Expression logique MDX (Multidimensional Expressions) valide qui prend la valeur True ou False.Expression1
Expression MDX (Multidimensional Expressions) valide.Expression2
Expression MDX (Multidimensional Expressions) valide.
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.
Notes
Dans Microsoft SQL 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 Server Analysis 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.
Notes
Si l'une des expressions prend la valeur NULL, l'ensemble des résultats est NULL une fois cette condition satisfaite.
Exemples
La requête suivante illustre une utilisation simple de IIF à l'intérieur d'une mesure calculée pour retourner l'une de deux valeurs de chaîne différentes lorsque la mesure Montant des ventes sur Internet 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])
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]