IIf (MDX)

Vyhodnocuje různé větvové výrazy v závislosti na tom, zda je Booleovská podmínka pravdivá nebo nepravdivá.

Syntax

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

Arguments

Funkce IIf má tři argumenty: iif (podmínka, pak větev<>, jinak větev>). <><

Logical_Expression
Podmínka, která se vyhodnocuje jako pravda (1) nebo nepravda (0). Musí to být platný logický výraz pro Multidimensional Expressions (MDX).

Expression1 Hint [Eager|Přísný|Líný]]
Používá se, když logický výraz vyhodnocuje jako true. Výraz1 musí být platným výrazem Multidimenzionálních výrazů (MDX).

Expression2 Hint [Eager|Přísný|Líný]]
Používá se, když logický výraz vyhodnocuje jako nepravdivé. Výraz 2 musí být platný výraz Multidimenzionálních výrazů (MDX).

Remarks

Podmínka daná logickým výrazem se vyhodnocuje jako nepravdivá , pokud je hodnota tohoto výrazu nulová. Jakákoli jiná hodnota je hodnotí jako pravda.

Když je podmínka pravdivá, funkce IIf vrátí první výraz. Jinak funkce vrátí druhý výraz.

Specifikované výrazy mohou vracet hodnoty nebo MDX objekty. Dále specifikované výrazy nemusí odpovídat typem.

Funkce IIf se nedoporučuje pro vytváření sady členů na základě vyhledávacích kritérií. Místo toho použijte funkci Filtr k vyhodnocení každého člena ve specifikované množině vůči logickému výrazu a vraťte podmnožinu členů.

Note

Pokud některý z výrazů vyhodnotí na NULL, výsledná množina bude NULL, pokud je tato podmínka splněna.

Hint je volitelný modifikátor, který určuje, jak a kdy je výraz vyhodnocován. Umožňuje vám přepsat výchozí plán dotazů tím, že specifikujete, jak je výraz vyhodnocován.

  • EAGER vyhodnocuje výraz přes původní podprostor IIF.

  • STRICT vyhodnocuje výraz pouze v omezeném podprostoru, který je vytvořen výrazem logické podmínky.

  • LAZY hodnotí expresi v režimu buňka po buňce.

Zatímco EAGER a STRICT platí pouze pro větve IIF v then-else, LAZY platí pro všechny MDX výrazy. Jakoukoli exprimaci MDX lze následovat pomocí HINT LAZY, který tuto expresi vyhodnotí v režimu buňka po buňce.

EAGER a STRICT jsou v nápovědě vzájemně vylučující; mohou být použity ve stejném IIF(,,) nad různými výrazy.

Pro více informací viz IIF Function Query Hints in Analytické služby SQL Serveru 2008 a Execution Plans and Plan Hints for MDX IIF Function and CASE Statement.

Examples

Následující dotaz ukazuje jednoduché použití IIF uvnitř vypočítané míry k vrácení jedné ze dvou různých hodnot řetězce, pokud je hodnota Internet Sales Amount větší nebo menší než $10000:

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]  

Velmi běžným využitím IIF je řešení chyb "dělení nulou" v rámci vypočítaných měření, jak je uvedeno v následujícím příkladu:

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

Následuje příklad IIF vrací jednu ze dvou množin uvnitř funkce Generuj a vytváří tak komplexní množinu n-tic na řádkech:

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

Nakonec tento příklad ukazuje, jak používat Plan Hunts:

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]