IIf (MDX)

Evalúa diferentes expresiones de bifurcación en función de si una condición booleana es true o false.

Sintaxis

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

Argumentos

La función IIf toma tres argumentos: iif(<condition>, <then branch>, <else branch>).

Logical_Expression
Condición que se evalúa como true (1) o false (0). Debe ser expresión lógica MDX (Expresiones multidimensionales) válida.

Sugerencia expression1 [Diligente| Strict| Diferida]]
Se usa cuando la expresión lógica se evalúa como true. Expression1 debe ser una expresión MDX (Expresiones multidimensionales) válida.

Sugerencia expression2 [Diligente| Strict| Diferida]]
Se usa cuando la expresión lógica se evalúa como false. Expression2 debe ser una expresión MDX (Expresiones multidimensionales) válida.

Comentarios

La condición especificada por la expresión lógica se evalúa como false cuando el valor de esta expresión es cero. Cualquier otro valor se evalúa como true.

Cuando la condición es true, la función IIf devuelve la primera expresión. De lo contrario, la función devuelve la segunda expresión.

Las expresiones especificadas pueden devolver valores u objetos MDX. Además, no es necesario que coincida el tipo de las expresiones especificadas.

No se recomienda la función IIf para crear un conjunto de miembros en función de los criterios de búsqueda. En su lugar, use la función Filter para evaluar cada miembro de un conjunto especificado en una expresión lógica y devolver un subconjunto de miembros.

Nota

Si una de las expresiones se evalúa en NULL, el conjunto de resultados será NULL cuando se cumpla esa condición.

Hint es un modificador opcional que determina cómo y cuándo se evalúa la expresión. Permite invalidar el plan de consulta predeterminado si se especifica cómo se evalúa la expresión.

  • EAGER evalúa la expresión sobre el subespacio IIF original.

  • STRICT evalúa la expresión solo en el subespacio restringido creado por la expresión de condición lógica.

  • LAZY evalúa la expresión en modo celda por celda.

Mientras que EAGER y STRICT solo se aplican a las bifurcaciones then-else de IIF, LAZY se aplica a todas las expresiones MDX. Cualquier expresión MDX puede ir seguida de HINT LAZY, que evaluará esa expresión en modo celda por celda.

EAGER y STRICT son mutuamente exclusivos en la sugerencia; se pueden utilizar en el mismo IIF(,,) a través de expresiones diferentes.

Para obtener más información, vea Sugerencias de consulta de función IIF en SQL Server Analysis Services 2008 y planes de ejecución y sugerencias de plan para la función MDX IIF y la instrucción CASE.

Ejemplos

En la consulta siguiente se muestra un uso sencillo de IIF dentro de una medida calculada para devolver uno de dos valores de cadena diferentes cuando la medida Internet Sales Amount es mayor o menor que $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]

Un uso muy común de IIF es controlar los errores de "división por cero" dentro de las medidas calculadas, como en el ejemplo siguiente:

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

A continuación se muestra un ejemplo de IIF que devuelve uno de dos conjuntos dentro de la función Generate para crear un conjunto complejo de tuplas en filas:

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

Por último, este ejemplo muestra cómo utilizar sugerencias de plan:

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]

Consulte también

Referencia de funciones MDX (MDX)