IIf(MDX)

논리 테스트로 확인된 두 값 중 하나를 반환합니다.

구문

IIf(Logical_Expression, Expression1 [HINT <hints>], Expression2 [HINT <hints>]) [HINT <hints>]
<hints> ::= <hint> [<hints>]
<hint> ::= EAGER | STRICT | LAZY

인수

  • Logical_Expression
    true나 false가 되는 유효한 MDX 논리 식입니다.

  • Expression1 [HINT <hints>]
    유효한 MDX 식입니다. HINT <hints>는 식이 계산되는 방식과 시기를 결정하는 선택적 한정자입니다. 자세한 내용은 주의 섹션을 참조하십시오.

  • Expression2[HINT <hints>]
    유효한 MDX 식입니다. HINT <hints>는 식이 계산되는 방식과 시기를 결정하는 선택적 한정자입니다. 자세한 내용은 주의 섹션을 참조하십시오.

주의

논리 식으로 지정된 식은 해당 식의 값이 0인 경우에만 false로 평가됩니다. 다른 값은 true로 평가됩니다.

지정된 논리 식이 true가 될 경우 IIf 함수는 첫 번째 식을 반환합니다. 그렇지 않은 경우 이 함수는 두 번째 식을 반환합니다.

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

[!참고]

MicrosoftSQL Server 2000에서 Analysis Services는 숫자 및 문자열 반환 형식만 지원했기 때문에 지정된 식의 형식이 동일해야 했습니다. SQL ServerAnalysis Services에는 이러한 제한 사항이 없습니다.

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

[!참고]

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

계획 힌트는 식을 계산하는 방법을 엔진에 나타내는 MDX 언어의 확장입니다.

  • EAGER를 사용하면 식이 전체 IIF 하위 공간에 대해 계산됩니다.

  • STRICT를 사용하면 식이 조건 식의 결과에 따라 결과 하위 공간에서만 계산됩니다.

  • LAZY를 사용하면 식이 셀별 모드에서 계산됩니다.

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

자세한 내용은 SQL Server 2008 Analysis Services의 MDX 성능 향상을 참조하십시오.

다음 쿼리에서는 계산 측정값 내에 IIF를 사용하여 Internet Sales Amount 측정값이 $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]

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 함수 내의 두 집합 중 하나를 반환하여 Rows에서 복잡한 튜플 집합을 만드는 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])

참고 항목

참조