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 verwendet drei Argumente: iif(<condition>, <then branch>, <else branch>).

Logical_Expression
Eine Bedingung, die zu TRUE (1) oder FALSE (0) ausgewertet wird. Es muss sich um einen gültigen logischen Multidimensional Expressions (MDX)-Ausdruck handeln.

Expression1-Hinweis [Eager| Strict| Verzögert]]
Wird verwendet, wenn der logische Ausdruck als TRUE ausgewertet wird. Expression1 muss ein gültiger Multidimensional Expressions (MDX)-Ausdruck sein.

Expression2-Hinweis [Eager| Strict| Verzögert]]
Wird verwendet, wenn der logische Ausdruck als FALSE ausgewertet wird. Expression2 muss ein gültiger Multidimensional Expressions (MDX)-Ausdruck sein.

Bemerkungen

Die vom logischen Ausdruck angegebene Bedingung wird als FALSE ausgewertet, wenn der Wert dieses Ausdrucks 0 (null) ist. Jeder andere Wert wird als 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 nicht empfohlen, um einen Satz von Membern basierend auf Suchkriterien zu erstellen. Verwenden Sie stattdessen die Filter-Funktion , um jedes Element in einer angegebenen Menge anhand eines logischen Ausdrucks auszuwerten und eine Teilmenge von Membern zurückzugeben.

Hinweis

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 IIF Function Query Hints in SQL Server Analysis Services 2008 (IIF-Funktionsabfragehinweise in SQL Server Analysis Services 2008) und Execution Plans and Plan Hints for MDX IIF Function and CASE Statement (Ausführungspläne und Planhinweise für die MDX-IIF-Funktion und CASE-Anweisung).

Beispiele

Die folgende Abfrage zeigt eine einfache Verwendung von IIF in einem berechneten Measure, um einen von zwei verschiedenen Zeichenfolgenwerten zurückzugeben, wenn das Measure Internet Sales Amount größer oder kleiner als 10000 USD 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 durch Null"-Fehlern innerhalb berechneter Measures, 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])

Das folgende Beispiel zeigt, wie IIF eine von zwei Sätzen innerhalb der Generate-Funktion zurückgibt, um einen komplexen Satz von Tupeln für Rows zu erstellen:

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]

Weitere Informationen

MDX-Funktionsreferenz (MDX)