IIf (MDX)

Gibt in Abhängigkeit von einem logischen Test einen von zwei Werten zurück.

Syntax

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

Argumente

  • Logical_Expression
    Ein gültiger logischer MDX-Ausdruck (Multidimensional Expressions), dessen Auswertung TRUE oder FALSE ergibt.

  • Expression1 [HINT <Hinweise>]
    Ein gültiger MDX-Ausdruck (Multidimensional Expressions). HINT <Hinweise> ist ein optionaler Modifizierer, der festlegt, wie und wann der Ausdruck ausgewertet wird. Weitere Informationen finden Sie im Abschnitt zu den Hinweisen.

  • Expression2[HINT <Hinweise>]
    Ein gültiger MDX-Ausdruck (Multidimensional Expressions). HINT <Hinweise> ist ein optionaler Modifizierer, der festlegt, wie und wann der Ausdruck ausgewertet wird. Weitere Informationen finden Sie im Abschnitt zu den Hinweisen.

Hinweise

Der vom logischen Ausdruck angegebene Ausdruck wird nur dann zu false ausgewertet, wenn der Wert dieses Ausdrucks 0 ist. Jeder andere Wert wird zu true ausgewertet.

Wenn der angegebene logische Ausdruck zu true ausgewertet wird, gibt die IIf-Funktion den ersten Ausdruck zurück. Andernfalls gibt die Funktion den zweiten Ausdruck zurück.

Die angegebene Ausdrücke können Werte oder MDX-Objekte zurückgeben. Ferner muss der Typ der angegebenen Ausdrücke nicht übereinstimmen.

HinweisHinweis

In MicrosoftSQL Server 2000 wurden von Analysis Services nur numerische und Zeichenfolgen-Rückgabewerte unterstützt, und der Typ der angegebenen Ausdrücke musste übereinstimmen. Diese Einschränkungen gelten nicht für SQL ServerAnalysis Services.

Die IIf-Funktion wird zum Erstellen einer Menge von Elementen basierend auf Suchkriterien nicht empfohlen. Verwenden Sie stattdessen die Filter-Funktion, um jedes Element in einer angegebenen Menge mit einem logischen Ausdruck auszuwerten und eine Teilmenge von Elementen zurückzugeben.

HinweisHinweis

Wenn die Auswertung einer der beiden Ausdrücke NULL ergibt, ist das Resultset NULL, wenn diese Bedingung erfüllt wird.

Planhinweise sind eine Erweiterung der MDX-Sprache und zeigen dem Modul an, wie Ausdrücke auszuwerten sind.

  • EAGER veranlasst eine Auswertung des Ausdrucks im gesamten IIF-Teilbereich.

  • STRICT veranlasst eine Auswertung des Ausdrucks, die auf den resultierenden Teilbereich begrenzt ist, der den Ergebnissen des Bedingungsausdrucks entspricht.

  • LAZY veranlasst eine Auswertung des Ausdrucks in einem zellenweisen Modus.

  • EAGER und STRICT schließen sich im Hinweis gegenseitig aus. Sie können im selben IIF (,,) für verschiedene Ausdrücke verwendet werden.

Eine ausführliche Erläuterung finden Sie unter Leistungsverbesserungen für MDX in SQL Server 2008 Analysis Services.

Beispiele

Die folgende Abfrage zeigt eine einfache Verwendung von IIF innerhalb einer berechneten Measure zur Rückgabe zweier unterschiedlicher Zeichenfolgen, wenn Internet Sales Amount-Measure größer bzw. kleiner als 10.000 US-Dollar 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]

Sehr häufig wird IIF zur Fehlerbehandlung bei „Division durch Null“ innerhalb von berechneten Measures eingesetzt 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 Beispiel gibt IIF eine von zwei Mengen innerhalb der Generate-Funktion zum Erstellen einer komplexen Menge Tupeln auf der ROWS-Achse zurück:

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])

Siehe auch

Verweis