IIf (MDX)IIf (MDX)

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2008)noDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Vengono restituite diverse espressioni del ramo a seconda che una condizione Boolean sia true o false.Evaluates different branch expressions depending on whether a Boolean condition is true or false.

SintassiSyntax


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

ArgomentiArguments

La funzione IIf accetta tre argomenti: iif (<condition >, <quindi creare un branch >, <else branch >).The IIf function takes three arguments: iif(<condition>, <then branch>, <else branch>).

Logical_ExpressionLogical_Expression
Una condizione che restituisce true (1) o false (0).A condition that evaluates to true (1) or false (0). Deve essere un'espressione logica MDX (Multidimensional Expression) valida.It must be a valid Multidimensional Expressions (MDX) logical expression.

Hint di expression1 [Eager | Strict | Lazy]]Expression1 Hint [Eager|Strict|Lazy]]
Utilizzato quando l'espressione logica restituisce true.Used when the logical expression evaluates to true. Expression1 deve essere un'espressione MDX (Multidimensional Expression) valida.Expression1 must be a valid Multidimensional Expressions (MDX) expression.

Hint di expression2 [Eager | Strict | Lazy]]Expression2 Hint [Eager|Strict|Lazy]]
Utilizzato quando l'espressione logica restituisce false.Used when the logical expression evaluates to false. Expression2 deve essere un'espressione MDX (Multidimensional Expression) valida.Expression2 must be valid Multidimensional Expressions (MDX) expression.

OsservazioniRemarks

La condizione specificata dall'espressione logica restituisce false quando il valore di questa espressione è zero.The condition specified by the logical expression evaluates to false when the value of this expression is zero. Qualsiasi altro valore restituisce true.Any other value evaluates to true.

Se la condizione è true, IIf funzione restituisce la prima espressione.When the condition is true, the IIf function returns the first expression. In caso contrario, la funzione restituisce la seconda espressione.Otherwise, the function returns the second expression.

Le espressioni specificate possono restituire valori oppure oggetti MDX.The specified expressions can return values or MDX objects. Le espressioni specificate non devono inoltre essere necessariamente dello stesso tipo.Furthermore, the specified expressions need not match in type.

Il IIf funzione non è consigliata per la creazione di un set di membri in base ai criteri di ricerca.The IIf function is not recommended for creating a set of members based on search criteria. Utilizzare invece il filtro funzione per valutare ogni membro di un set specificato in base a un'espressione logica e restituire un subset di membri.Instead, use the Filter function to evaluate each member in a specified set against a logical expression and return a subset of members.

Nota

Se una delle espressioni restituisce NULL, quando la condizione viene soddisfatta il set di risultati sarà NULL.If either expression evaluates to NULL, the result set will be NULL when that condition is met.

Hint è un modificatore facoltativo che determina il modo e il momento in cui l'espressione viene valutata.Hint is an optional modifier that determines how and when the expression is evaluated. Consente di eseguire l'override del piano di query predefinito specificando il modo in cui l'espressione viene valutata.It allows you to override the default query plan by specifying how the expression is evaluated.

  • Tramite EAGER l'espressione viene valutata nel sottospazio IIF originale.EAGER evaluates the expression over the original IIF subspace.

  • Tramite STRICT l'espressione viene valutata solo nel sottospazio limitato creato dall'espressione della condizione logica.STRICT evaluates the expression only in the restricted subspace that is created by the logical condition expression.

  • Tramite LAZY l'espressione viene valutata in modalità cella per cella.LAZY evaluates the expression in cell-by-cell mode.

    Mentre EAGER e STRICT si applicano solo ai rami then-else di IIF, LAZY si applica a tutte le espressioni MDX.While EAGER and STRICT only apply to the then-else branches of IIF, LAZY applies to all MDX expressions. Qualsiasi espressione MDX può essere seguita da un HINT LAZY tramite cui l'espressione verrà valutata in modalità cella per cella.Any MDX expression can be followed by HINT LAZY which will evaluate that expression in cell-by-cell mode.

    EAGER e STRICT si escludono a vicenda nell'hint e possono essere utilizzati nella stessa funzione IIF(,,) in diverse espressioni.EAGER and STRICT are mutually exclusive in the hint; they can be used in the same IIF(,,) over different expressions.

    Per ulteriori informazioni, vedere hint per la Query funzione IIF in SQL Server Analysis Services 2008 e piani di esecuzione e pianificare gli hint per la funzione IIF di MDX e l'istruzione CASE.For more information, see IIF Function Query Hints in SQL Server Analysis Services 2008 and Execution Plans and Plan Hints for MDX IIF Function and CASE Statement.

EsempiExamples

La query seguente viene illustrato un utilizzo semplice di IIF all'interno di una misura calcolata per restituire uno dei due diversi valori di stringa quando la misura Internet Sales Amount è maggiore o minore di $10000:The following query shows a simple use of IIF inside a calculated measure to return one of two different string values when the measure Internet Sales Amount is greater or less than $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:A very common use of IIF is to handle 'division by zero' errors within calculated measures, as in the following example:

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

Di seguito è riportato un esempio di IIF restituisce uno di due set nella funzione Generate per creare un set complesso di tuple su righe:The following is an example of IIF returning one of two sets inside the Generate function to create a complex set of tuples on 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:Lastly, this example shows how to use 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]

Vedere ancheSee Also

Riferimento alla funzione MDX ( MDX )MDX Function Reference (MDX)