Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Bewertet verschiedene Zweigausdrücke, je nachdem, ob eine boolesche Bedingung wahr oder falsch ist.
Syntax
IIf(Logical_Expression, Expression1 [HINT <hints>], Expression2 [HINT <hints>])
Argumente
Die IIf-Funktion nimmt drei Argumente an: iif(<Bedingung>, <dann Branch>, <else Branch>).
Logical_Expression
Eine Bedingung, die auf wahr (1) oder falsch (0) auswertet. Es muss ein gültiger Multidimensional Expressions (MDX) logischer Ausdruck sein.
Ausdruck1 Hinweis [Eifrig|Strict|Faul]]
Verwendet, wenn der logische Ausdruck auf true auswertet. Expression1 muss ein gültiger Multidimensional Expressions (MDX)-Ausdruck sein.
Expression2 Hinweis [Eifrig|Strict|Faul]]
Verwendet, wenn der logische Ausdruck auf falsch auswertet. Expression2 muss ein gültiger Multidimensional Expressions (MDX)-Ausdruck sein.
Bemerkungen
Die durch den logischen Ausdruck angegebene Bedingung gilt als falsch , wenn der Wert dieses Ausdrucks null ist. Jeder andere Wert wird als wahr bewertet.
Wenn die Bedingung wahr ist, gibt die IIf-Funktion den ersten Ausdruck zurück. Andernfalls gibt die Funktion den zweiten Ausdruck zurück.
Die angegebenen Ausdrücke können Werte oder MDX-Objekte zurückgeben. Außerdem müssen die angegebenen Ausdrücke nicht im Typ übereinstimmen.
Die IIf-Funktion wird nicht empfohlen, um eine Gruppe von Mitgliedern basierend auf Suchkriterien zu erstellen. Stattdessen verwenden Sie die Filter-Funktion , um jedes Element in einer bestimmten Menge mit einer logischen Expression zu evaluieren und eine Teilmenge von Mitgliedern zurückzugeben.
Note
Wenn einer der Ausdruck auf NULL auswertet, ist die Ergebnismenge NULL, wenn diese Bedingung erfüllt ist.
Hinweis ist ein optionaler Modifikator, der bestimmt, wie und wann der Ausdruck ausgewertet wird. Es erlaubt Ihnen, den Standard-Abfrageplan zu überschreiben, indem Sie angeben, wie der Ausdruck ausgewertet wird.
EAGER bewertet den Ausdruck über dem ursprünglichen IIF-Unterraum.
STRICT bewertet den Ausdruck nur im eingeschränkten Teilraum, der durch den logischen Bedingungsausdruck erzeugt wird.
LAZY bewertet die Expression im Zell-für-Zell-Modus.
Während EAGER und STRICT nur für die damaligen else-Zweige von IIF gelten, gilt LAZY für alle MDX-Ausdrücke. Jede MDX-Expression kann von HINT LAZY gefolgt werden, die diese Expression im Zell-für-Zell-Modus auswertet.
EAGER und STRICT schließen sich im Hinweis gegenseitig aus; sie können im selben IIF(,,) über verschiedene Ausdrücke verwendet werden.
Weitere Informationen finden Sie unter IIF Function Query Hints in SQL Server Analysis Services 2008 und Execution Plans and Plan Hints for MDX IIF Function and CASE Statement.
Beispiele
Die folgende Abfrage zeigt eine einfache Verwendung von IIF innerhalb eines berechneten Messwerts, um einen von zwei verschiedenen String-Werten zurückzugeben, wenn der Maß Internet Sales Amount größer oder kleiner als 10.000 $ ist:
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]
Eine sehr häufige Verwendung von IIF ist die Behandlung von 'Division by Zero'-Fehler innerhalb berechneter Maße, wie im folgenden Beispiel:
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])
Im Folgenden ist ein Beispiel dafür, wie IIF eine von zwei Mengen innerhalb der Generage-Funktion zurückgibt, um eine komplexe Menge von Tupeln auf Zeilen zu erzeugen:
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])
Abschließend zeigt dieses Beispiel, wie man Plan Hints verwendet:
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]