IIf (MDX)

Evalúa diferentes expresiones de rama dependiendo de si una condición booleana es verdadera o falsa.

Sintaxis

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

Argumentos

La función IIf toma tres argumentos: iif (<luego <>ramificar>, <else ramificar>).

Logical_Expression
Una condición que evalúa como verdadero (1) o falso (0). Debe ser una expresión lógica válida de Expresiones Multidimensionales (MDX).

Expresión 1 Pista [Ansioso|Strict|Perezoso]]
Se usa cuando la expresión lógica se evalúa como verdadera. Expression1 debe ser una expresión válida de Expresiones Multidimensionales (MDX).

Expresión 2 Pista [Ansioso|Strict|Perezoso]]
Se utiliza cuando la expresión lógica se evalúa como falsa. Expression2 debe ser una expresión válida de Expresiones Multidimensionales (MDX).

Remarks

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

Cuando la condición es verdadera, 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, las expresiones especificadas no tienen por qué coincidir en tipo.

La función IIf no se recomienda para crear un conjunto de miembros basados en criterios de búsqueda. En su lugar, se utiliza la función Filtro para evaluar cada miembro de un conjunto especificado frente a una expresión lógica y devolver un subconjunto de miembros.

Note

Si cualquiera de las expresiones se evalúa como 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 anular el plan de consulta por defecto especificando 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 que se crea por la expresión de condición lógica.

  • LAZY evalúa la expresión en modo célula por célula.

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

EAGER y ESTRICTA son mutuamente excluyentes en la pista; pueden usarse en el mismo IIF(,,) sobre diferentes expresiones.

Para más información, consulte Consejos de Consulta de Función IIF en SQL Server Analysis Services 2008 y Planes de Ejecución y Consejos de Planificación para la Función IIF MDX y la Sentencia CASE.

Examples

La siguiente consulta muestra un uso sencillo del IIF dentro de una medida calculada para devolver uno de dos valores de cadena diferentes cuando la medida Importe de Ventas por Internet 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 del IIF es manejar errores de 'división por cero' dentro de medidas calculadas, como en el siguiente ejemplo:

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 Generar 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 usar los consejos 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]