IIf (MDX)
Gibt in Abhängigkeit von einem logischen Test einen von zwei Werten zurück.
Syntax
IIf(Logical_Expression, Expression1, Expression2)
Argumente
Logical_Expression
Ein gültiger logischer MDX-Ausdruck (Multidimensional Expressions), dessen Auswertung TRUE oder FALSE ergibt.Expression1
Ein gültiger MDX-Ausdruck (Multidimensional Expressions).Expression2
Ein gültiger MDX-Ausdruck (Multidimensional Expressions).
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.
Hinweis |
---|
In Microsoft SQL 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 Server Analysis 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.
Hinweis |
---|
Wenn die Auswertung einer der beiden Ausdrücke NULL ergibt, ist das Resultset NULL, wenn diese Bedingung erfüllt wird. |
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-Hinweise 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]