IIF (MDX)
Retorna um de dois valores determinados por um teste lógico.
Sintaxe
IIf(Logical_Expression, Expression1 [HINT <hints>], Expression2 [HINT <hints>]) [HINT <hints>]
<hints> ::= <hint> [<hints>]
<hint> ::= EAGER | STRICT | LAZY
Argumentos
Logical_Expression
Uma expressão lógica MDX válida avaliada como verdadeira ou falsa.Expression1 [HINT <dicas>]
Uma expressão MDX válida. HINT <dicas> é um modificador opcional que determina como e quando a expressão será avaliada. Para obter mais informações, consulte a seção Comentários.Expression2[HINT <dicas>]
Uma expressão MDX válida. HINT <dicas> é um modificador opcional que determina como e quando a expressão será avaliada. Para obter mais informações, consulte a seção Comentários.
Comentários
A expressão especificada pela expressão lógica só será avaliada 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ção |
---|
No MicrosoftSQL 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 ServerAnalysis 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ção |
---|
Se qualquer expressão for avaliada como NULL, o conjunto de resultados será NULL quando aquela condição for atendida. |
Dicas de plano são uma extensão à linguagem MDX para indicar ao mecanismo como avaliar expressões.
EAGER faz com que a expressão a seja avaliada sobre o subespaço de IIF inteiro.
STRICT faz com que a expressão seja avaliada apenas no subespaço resultante de acordo com os resultados da expressão de condição.
LAZY faz com que a expressão seja avaliada em modo célula por célula.
EAGER e STRICT são mutuamente exclusivos na dica. Eles podem ser usados no mesmo IIF(,,) sobre expressões diferentes.
Consulte Aprimoramentos de desempenho para MDX no SQL Server 2008 Analysis Services para obter uma explicação mais detalhada.
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 de 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 seguinte é um exemplo de IIF retornando um dos dois conjuntos na 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])