IIf (MDX)

Avalia diferentes expressões de ramo dependendo se uma condição booleana é verdadeira ou falsa.

Syntax

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

Arguments

A função IIf assume três argumentos: iif(<condição>, <depois ramificar>, <else ramificar>).

Logical_Expression
Uma condição que avalia como verdadeira (1) ou falsa (0). Deve ser uma expressão lógica válida de Expressões Multidimensionais (MDX).

Dica de Expressão1 [Ansioso|Rigoroso|Preguiçoso]]
Usado quando a expressão lógica se avalia como verdadeira. Expressão1 deve ser uma expressão válida de Expressões Multidimensionais (MDX).

Dica de Expressão2 [Ansioso|Rigoroso|Preguiçoso]]
Usado quando a expressão lógica se avalia como falsa. Expression2 deve ser uma expressão válida de Expressões Multidimensionais (MDX).

Observações

A condição especificada pela expressão lógica avalia-se como falsa quando o valor desta expressão é zero. Qualquer outro valor é avaliado como verdadeiro.

Quando a condição é verdadeira, a função IIf devolve a primeira expressão. Caso contrário, a função devolve a segunda expressão.

As expressões especificadas podem devolver valores ou objetos MDX. Além disso, as expressões especificadas não precisam de coincidir em tipo.

A função IIf não é recomendada para criar um conjunto de membros com base em critérios de pesquisa. Em vez disso, use a função Filter para avaliar cada membro num conjunto especificado contra uma expressão lógica e devolver um subconjunto de membros.

Note

Se qualquer uma das expressões for avaliada como NULLA, o conjunto de resultados será NULL quando essa condição for cumprida.

Dica é um modificador opcional que determina como e quando a expressão é avaliada. Permite-lhe sobrepor o plano de consulta padrão especificando como a expressão é avaliada.

  • EAGER avalia a expressão sobre o subespaço IIF original.

  • STRICT avalia a expressão apenas no subespaço restrito criado pela expressão de condição lógica.

  • LAZY avalia a expressão em modo célula a célula.

Enquanto EAGER e STRICT só se aplicam aos ramos then-else do IIF, LAZY aplica-se a todas as expressões MDX. Qualquer expressão de MDX pode ser seguida por HINT LAZY, que irá avaliar essa expressão em modo célula a célula.

EAGER e STRICT são mutuamente exclusivos na dica; podem ser usados no mesmo IIF(,,) sobre diferentes expressões.

Para mais informações, consulte Dicas de Consulta de Função IIF no SQL Server Analysis Services 2008 e Planos de Execução e Dicas de Plano para a Função IIF MDX e Instrução CASE.

Examples

A consulta seguinte mostra uma utilização simples do IIF dentro de uma medida calculada para devolver um de dois valores de cadeia diferentes quando a medida Valor das Vendas na Internet for maior ou inferior a $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]  

Uma utilização muito comum do IIF é tratar erros de 'divisão por zero' dentro de medidas calculadas, como no seguinte exemplo:

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

Segue-se um exemplo de IIF que retorna um de dois conjuntos dentro da função Generate para criar um conjunto complexo de tuplas em Rows:

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 fim, este exemplo mostra como usar Dicas de Plano:

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]