Condividi tramite


IIf (MDX)

Restituisce uno di due valori determinati da un test logico.

Sintassi

IIf(Logical_Expression, Expression1 [HINT <hints>], Expression2 [HINT <hints>]) [HINT <hints>]
<hints> ::= <hint> [<hints>]
<hint> ::= EAGER | STRICT | LAZY

Argomenti

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

  • Expression1 [HINT <hint>]
    Espressione MDX (Multidimensional Expressions) valida. HINT <hint> è un modificatore facoltativo che determina il modo e il momento in cui l'espressione deve essere valutata. Per ulteriori informazioni, vedere le sezione Note.

  • Expression2[HINT <hint>]
    Espressione MDX (Multidimensional Expressions) valida. HINT <hint> è un modificatore facoltativo che determina il modo e il momento in cui l'espressione deve essere valutata. Per ulteriori informazioni, vedere le sezione Note.

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 MicrosoftSQL 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 ServerAnalysis 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.

Gli hint di piano sono un'estensione del linguaggio MDX per indicare al motore come valutare le espressioni.

  • EAGER fa sì che l'espressione venga valutata sull'intero sottospazio IIF.

  • STRICT fa sì che l'espressione venga valutata solo nel sottospazio risultante in base ai risultati dell'espressione della condizione.

  • LAZY fa sì che l'espressione venga valutata cella per cella.

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

Per una descrizione approfondita, vedere Miglioramenti nelle prestazioni per MDX in SQL Server 2008 Analysis Services.

Esempi

Nella query seguente viene illustrato un utilizzo semplice di IIF in una misura calcolata per restituire uno di due valori stringa diversi quando la misura Internet Sales Amount è maggiore o minore di $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]

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