IIf (MDX)
Devuelve uno de los dos valores determinados por una prueba lógica.
Sintaxis
IIf(Logical_Expression, Expression1 [HINT <hints>], Expression2 [HINT <hints>]) [HINT <hints>]
<hints> ::= <hint> [<hints>]
<hint> ::= EAGER | STRICT | LAZY
Argumentos
Logical_Expression
Expresión lógica MDX (Expresiones multidimensionales) válida que se evalúa en true o false.Expression1 [HINT <hints>]
Expresión MDX (Expresiones multidimensionales) válida. HINT <hints> es un modificador opcional que determina cómo y cuándo se evalúa la expresión. Para obtener más información, vea la sección Notas.Expression2[HINT <hints>]
Expresión MDX (Expresiones multidimensionales) válida. HINT <hints> es un modificador opcional que determina cómo y cuándo se evalúa la expresión. Para obtener más información, vea la sección Notas.
Notas
La expresión especificada por la expresión lógica equivale a false solo si el valor de esta expresión es cero. Los otros valores se evalúan como true.
Si la expresión lógica especificada equivale a 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.
[!NOTA]
En MicrosoftSQL Server 2000, Analysis Services sólo era compatible con los tipos de valores devueltos numéricos y de cadena y los tipos de las expresiones especificadas debían ser los mismos. Estas restricciones no se aplican a SQL ServerAnalysis Services.
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.
Las sugerencias del plan son una extensión al lenguaje MDX para indicar al motor cómo evaluar las expresiones.
EAGER hace que la expresión se evalúe en todo el subespacio de IIF.
STRICT hace que la expresión se evalúe solo en el subespacio resultante según los resultados de la expresión de condición.
LAZY hace que la expresión se evalúe 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.
Vea Mejoras en el rendimiento de MDX en SQL Server 2008 Analysis Services para obtener una explicación más extendida.
Ejemplos
En la consulta siguiente se muestra un uso simple de IIF dentro de una medida calculada para devolver uno de los dos valores de cadena distintos cuando la medida Internet Sales Amount es superior o inferior a 10000 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])