Share via


IIf (MDX)

Restituisce uno di due valori determinati da un test logico.

Sintassi

IIf(Logical_Expression, Expression1, Expression2)

Argomenti

  • Logical_Expression
    Espressione logica MDX (Multidimensional Expression) valida che restituisce true o false.

  • Expression1
    Espressione MDX (Multidimensional Expression) valida.

  • Expression2
    Espressione MDX (Multidimensional Expression) valida.

Osservazioni

L'espressione specificata dall'espressione logica restituisce false solo se il valore dell'espressione è zero. Se il valore è diverso, l'espressione restituisce true.

Se l'espressione logica specificata restituisce true, la funzione IIf restituisce 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.

Nota

In Microsoft SQL Server 2000, Analysis Services supporta solo tipi restituiti numerici e stringa e i tipi delle espressioni specificate devono essere uguali. Queste restrizioni non si applicano a SQL Server Analysis Services.

È 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.

Esempi

Nella query seguente viene illustrato un utilizzo semplice di IIF in una misura calcolata per restituire uno di due diversi valori della stringa quando 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]