IIf (MDX)
Devuelve uno de los dos valores determinados por una prueba lógica.
Sintaxis
IIf(Logical_Expression, Expression1, Expression2)
Argumentos
Logical_Expression
Expresión lógica MDX (Expresiones multidimensionales) válida que se evalúa en true o false.Expression1
Expresión MDX (Expresiones multidimensionales) válida.Expression2
Expresión MDX (Expresiones multidimensionales) válida.
Comentarios
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 Microsoft SQL Server 2000, Analysis Services solo 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 Server Analysis 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.
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])
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]