Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Utvärderar olika grenuttryck beroende på om ett boolesk villkor är sant eller falskt.
Syntax
IIf(Logical_Expression, Expression1 [HINT <hints>], Expression2 [HINT <hints>])
Arguments
IIf-funktionen tar tre argument: iif(<villkor>, <sedan gren>, <annars gren>).
Logical_Expression
Ett villkor som utvärderar till sant (1) eller falskt (0). Det måste vara ett giltigt Multidimensional Expressions (MDX) logiskt uttryck.
Uttryck1 Tips [Ivrig|Strikt|lat]]
Används när det logiska uttrycket utvärderas till sant. Expression1 måste vara ett giltigt Multidimensional Expressions (MDX)-uttryck.
Expression2 Hint [Ivrig|Strikt|lat]]
Används när det logiska uttrycket utvärderas till falskt. Expression2 måste vara ett giltigt Multidimensional Expressions (MDX)-uttryck.
Remarks
Villkoret som anges av det logiska uttrycket utvärderas till falskt när värdet på detta uttryck är noll. Alla andra värden utvärderas som sanna.
När villkoret är sant returnerar IIf-funktionen det första uttrycket. Annars returnerar funktionen det andra uttrycket.
De specificerade uttrycken kan returnera värden eller MDX-objekt. Dessutom behöver de specificerade uttrycken inte matcha i typ.
IIf-funktionen rekommenderas inte för att skapa en uppsättning medlemmar baserat på sökkriterier. Använd istället Filter-funktionen för att utvärdera varje medlem i en specificerad mängd mot ett logiskt uttryck och returnera en delmängd av medlemmarna.
Anmärkning
Om något av uttrycken utvärderas till NULL, kommer resultatmängden att vara NULL när det villkoret uppfylls.
Hint är en valfri modifierare som avgör hur och när uttrycket utvärderas. Det låter dig åsidosätta standardfrågeplanen genom att specificera hur uttrycket utvärderas.
EAGER utvärderar uttrycket över det ursprungliga IIF-delrummet.
STRICT utvärderar uttrycket endast i det begränsade delutrymme som skapas av det logiska villkorsuttrycket.
LAZY utvärderar uttrycket i cell-för-cell-läge.
Medan EAGER och STRICT endast gäller för de då-else-grenarna av IIF, gäller LAZY för alla MDX-uttryck. Varje MDX-uttryck kan följas av HINT LAZY som utvärderar uttrycket cell-för-cell-läge.
EAGER och STRICT utesluter varandra i hinten; de kan användas i samma IIF(,,) över olika uttryck.
För mer information, se IIF Function Query Hints i SQL Server Analysis Services 2008 och Execution Plans and Plan Hints for MDX IIF Function and CASE Statement.
Examples
Följande fråga visar en enkel användning av IIF inuti ett beräknat mått för att returnera ett av två olika strängvärden när måttet Internet Sales Amount är större eller mindre än 10 000 dollar:
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]
En mycket vanlig användning av IIF är att hantera 'division med noll'-fel inom beräknade mått, som i följande exempel:
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])
Följande är ett exempel på att IIF returnerar en av två mängder inuti Genere-funktionen för att skapa en komplex mängd tupler på rader:
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])
Slutligen visar detta exempel hur man använder Plan Hints:
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]