Compartir a través de


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(<condición>, <then branch>, <else branch>).

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

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

  • Expression2 Hint [Eager|Strict|Lazy]]
    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. Los otros valores se evalúan 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 según un criterio de búsqueda. Utilice en su lugar la función Filter para evaluar a cada miembro de un determinado conjunto con 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 la función IIF en SQL Server Analysis Services 2008 y Planes de ejecución y sugerencias de planes para la función IIF de MDX y la instrucción CASE.

Ejemplos

En la consulta siguiente se muestra un uso simple de IIF dentro de una medida calculada para devolver uno de dos valores de cadena distintos cuando la medida Importe de venta por Internet es superior o inferior a 10 000 dólares:

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

El siguiente es un ejemplo de IIF que devuelve uno de los dos conjuntos existentes 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]

Vea también

Referencia

Referencia de funciones MDX (MDX)