Partilhar via


IIF (MDX)

Retorna um de dois valores determinados por um teste lógico.

Sintaxe

IIf(Logical_Expression, Expression1, Expression2)

Argumentos

  • Logical_Expression
    Uma expressão lógica MDX válida avaliada como verdadeira ou falsa.

  • Expression1
    Uma expressão MDX (Multidimensional Expression) válida.

  • Expression2
    Uma expressão MDX (Multidimensional Expressions) válida.

Comentários

A expressão especificada pela expressão lógica só avaliará como false se o valor dessa expressão for zero. Qualquer outro valor é avaliado como true.

Se a expressão lógica especificada for avaliada como true, a função IIf retornará a primeira expressão. Caso contrário, a função retornará a segunda expressão.

As expressões especificadas podem retornar valores ou objetos MDX. Além disso, as expressões especificadas não precisam corresponder ao tipo.

ObservaçãoObservação

No Microsoft SQL Server 2000, o Analysis Services oferecia suporte apenas a tipos de retorno de cadeia de caracteres e numérico, e os tipos de expressões especificadas deveriam ser iguais. Essas restrições não se aplicam a SQL Server Analysis Services.

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 em um conjunto especificado em relação a uma expressão lógica e retorne um subconjunto de membros.

ObservaçãoObservação

Se qualquer expressão for avaliada como NULL, o conjunto de resultados será NULL quando aquela condição for atendida.

Exemplos

A consulta a seguir mostra um uso simples de IIF em uma medida calculada para retornar um de dois valores de cadeia de caracteres diferentes quando a medida Valor das Vendas pela Internet for maior ou menor do que US$ 10.000:

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]

IIF normalmente é usado para tratar erros de “divisão por zero” em medidas calculadas, como no exemplo a seguir:

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

O exemplo de IIF a seguir retorna um dos dois conjuntos na função Generate para criar um conjunto complexo de tuplas em Linhas:

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 Planos:

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]

Consulte também

Referência