IIf (MDX)

Vengono restituite diverse espressioni del ramo a seconda che una condizione Boolean sia true o false.

Sintassi

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

Argomenti

La funzione IIf accetta tre argomenti: iif(<condition>, <then branch>, <else branch>).

  • Logical_Expression
    Condizione tramite cui viene restituito true (1) o false (0). Deve essere un'espressione logica MDX (Multidimensional Expression) valida.

  • Expression1 Hint [Eager|Strict|Lazy]]
    Utilizzato quando tramite l'espressione logica viene restituito true. Expression1 deve essere un'espressione MDX (Multidimensional Expression) valida.

  • Expression2 Hint [Eager|Strict|Lazy]]
    Utilizzato quando tramite l'espressione logica viene restituito false. Expression2 deve essere un'espressione MDX (Multidimensional Expression) valida.

Osservazioni

Tramite la condizione specificata dall'espressione logica viene restituito false quando il valore dell'espressione è zero. In caso di valori diversi viene restituito true.

Se la condizione è true, tramite la funzione IIf viene restituita la prima espressione. In caso contrario, la funzione restituisce la seconda espressione.

Le espressioni specificate possono restituire valori oppure oggetti MDX. Le espressioni specificate non devono inoltre essere necessariamente dello stesso tipo.

È consigliabile non utilizzare la funzione IIf per creare un set di membri in base a criteri di ricerca. Utilizzare invece la funzione Filter per valutare ogni membro di un set specificato in base a un'espressione logica e recuperare un subset di membri.

[!NOTA]

Se una delle espressioni restituisce NULL, quando la condizione viene soddisfatta il set di risultati sarà NULL.

Hint è un modificatore facoltativo che determina il modo e il momento in cui l'espressione viene valutata. Consente di eseguire l'override del piano di query predefinito specificando il modo in cui l'espressione viene valutata.

  • Tramite EAGER l'espressione viene valutata nel sottospazio IIF originale.

  • Tramite STRICT l'espressione viene valutata solo nel sottospazio limitato creato dall'espressione della condizione logica.

  • Tramite LAZY l'espressione viene valutata in modalità cella per cella.

Mentre EAGER e STRICT si applicano solo ai rami then-else di IIF, LAZY si applica a tutte le espressioni MDX. Qualsiasi espressione MDX può essere seguita da un HINT LAZY tramite cui l'espressione verrà valutata in modalità cella per cella.

EAGER e STRICT si escludono a vicenda nell'hint e possono essere utilizzati nella stessa funzione IIF(,,) in diverse espressioni.

Per ulteriori informazioni, vedere le pagine relative agli hint per la query della funzione IIF in SQL Server Analysis Services 2008 e ai piani di esecuzione e agli hint di piano per la funzione IIF di MDX e l'istruzione CASE.

Esempi

Nella query seguente viene illustrato un utilizzo semplice di IIF in una misura calcolata per restituire uno dei due diversi valori di stringa quando la misura Internet Sales Amount è maggiore o minore di 10.000 $:

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]

IIF viene spesso utilizzata per gestire gli errori delle divisioni per zero all'interno di misure calcolate, come nell'esempio seguente:

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

Nell'esempio seguente, IIF restituisce uno di due set nella funzione Generate per creare un set complesso di tuple in Rows:

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

In questo esempio viene infine illustrato l'utilizzo degli hint di piano:

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]

Vedere anche

Riferimento

Guida di riferimento alle funzioni MDX (MDX)