Freigeben über


IIf (MDX)

Wertet verschiedene Verzweigungsausdrücke abhängig davon aus, ob eine boolesche Bedingung "True" oder "False" ist.

Syntax

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

Argumente

Die IIf-Funktion akzeptiert drei Argumente: iif(<condition>, <then branch>, <else branch>).

  • Logical_Expression
    Eine Bedingung, die true (1) oder false (0) ergibt. Es muss sich um einen gültigen logischen Multidimensional Expressions (MDX)-Ausdruck handeln.

  • Expression1 Hint [Eager|Strict|Lazy]]
    Wird verwendet, wenn der logische Ausdruck true ergibt. Expression1 muss ein gültiger Multidimensional Expressions (MDX)-Ausdruck sein.

  • Expression2 Hint [Eager|Strict|Lazy]]
    Wird verwendet, wenn der logische Ausdruck false ergibt. Expression2 muss ein gültiger Multidimensional Expressions (MDX)-Ausdruck sein.

Hinweise

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

Wenn die Bedingung true ist, 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.

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.

Ein Tipp ist ein optionaler Modifizierer, der festlegt, wie und wann der Ausdruck ausgewertet wird. Er ermöglicht es Ihnen, den Standard-Abfrageplan zu überschreiben, indem Sie angeben, wie der Ausdruck ausgewertet wird.

  • EAGER wertet den Ausdruck für den ursprünglichen IIF-Teilbereich aus.

  • STRICT wertet den Ausdruck nur im eingeschränkten Teilbereich aus, der durch den logischen Bedingungsausdruck erstellt wird.

  • LAZY wertet den Ausdruck im zellenweisen Modus aus.

Während EAGER und STRICT nur für then-else-Verzweigungen von IIF gelten, gilt LAZY für alle MDX-Ausdrücke. Nach jedem MDX-Ausdruck kann HINT LAZY folgen, sodass dieser Ausdruck im zellenweisen Modus ausgewertet wird.

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

Weitere Informationen finden Sie unter IF 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 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])

Schließlich wird in diesem Beispiel gezeigt, wie PLAN-Tipps verwendet werden:

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]

Siehe auch

Verweis

MDX-Funktionsreferenz (MDX)