Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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]