다음을 통해 공유


IIf(MDX)

Boolean 조건이 true 또는 false인지에 따라 다른 분기 식을 계산합니다.

구문

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

인수

IIf 함수는 iif(<condition>, then branch>, <<else branch>)의 세 가지 인수를 사용합니다.

Logical_Expression
true(1) 또는 false(0)로 평가되는 조건입니다. 유효한 MDX(다차원 식) 논리 식이어야 합니다.

Expression1 힌트 [Eager|Strict|Lazy]]
논리 식이 true로 평가되는 경우 사용됩니다. Expression1은 유효한 MDX(다차원 식) 식이어야 합니다.

Expression2 힌트 [Eager|Strict|Lazy]]
논리 식이 false로 평가되는 경우 사용됩니다. Expression2는 유효한 MDX(Multidimensional Expressions) 식이어야 합니다.

설명

논리 식에서 지정한 조건은 이 식의 값이 0이면 false로 평가됩니다. 다른 모든 값은 true평가됩니다.

조건이 true면 IIf 함수는 첫 번째 식을 반환합니다. 그렇지 않으면 함수는 두 번째 식을 반환합니다.

지정된 식은 값 또는 MDX 개체를 반환할 수 있습니다. 또한 지정된 식은 형식이 일치할 필요가 없습니다.

IIf 함수는 검색 조건에 따라 멤버 집합을 만드는 데 권장되지 않습니다. 대신 Filter 함수를 사용하여 지정된 집합의 각 멤버를 논리 식에 대해 평가하고 멤버의 하위 집합을 반환합니다.

참고 항목

두 식 중 하나가 NULL인 경우 조건을 만족하면 결과 집합은 NULL이 됩니다.

힌트는 식이 계산되는 방법과 시기를 결정하는 선택적 한정자입니다. 식을 평가하는 방법을 지정하여 기본 쿼리 계획을 재정의할 수 있습니다.

  • EAGER는 원래 IIF 하위 영역에 대한 식을 평가합니다.

  • STRICT는 논리 조건 식에 의해 만들어진 제한된 하위 영역에서만 식을 평가합니다.

  • LAZY는 셀별 모드에서 식을 계산합니다.

EAGER 및 STRICT는 IIF의 다음 다른 분기에만 적용되지만 LAZY는 모든 MDX 식에 적용됩니다. 모든 MDX 식은 셀별 모드에서 해당 식을 계산하는 HINT LAZY 뒤에 올 수도 있습니다.

EAGER 및 STRICT는 힌트에서 함께 사용할 수 없으며 동일한 IIF(,,)에서 서로 다른 식에 대해 사용할 수 있습니다.

자세한 내용은 SQL Server Analysis Services 2008 의 IIF 함수 쿼리 힌트와 MDX IIF 함수 및 CASE 문에 대한 실행 계획 및 계획 힌트를 참조하세요.

다음 쿼리에서는 측정값 Internet Sales Amount가 $10000보다 크거나 작을 때 계산된 측정값 내에서 IIF를 간단히 사용하여 두 개의 서로 다른 문자열 값 중 하나를 반환하는 방법을 보여 있습니다.

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의 매우 일반적인 사용은 다음 예제와 같이 계산된 측정값 내에서 '0으로 나누기' 오류를 처리하는 것입니다.

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

다음은 Generate 함수 내에서 두 집합 중 하나를 반환하여 행에 복잡한 튜플 집합을 만드는 IIF의 예입니다.

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

마지막으로 이 예제에서는 계획 힌트를 사용하는 방법을 보여 줍니다.

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]

참고 항목

MDX 함수 참조(MDX)