共用方式為


IIf (MDX)

根據布林值條件為 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 提示 [熱切|Strict|延遲]]
當邏輯運算式評估為 true 時使用。 Expression1 必須是有效的多維度運算式 (MDX) 運算式。

Expression2 提示 [急切|Strict|延遲]]
當邏輯運算式評估為 false 時使用。 Expression2 必須是有效的多維度運算式 (MDX) 運算式。

備註

當這個運算式的值為零時,邏輯運算式所指定的條件會評估為 false 。 任何其他值都會評估為 true

當條件為 true 時, IIf 函式會傳回第一個運算式。 否則,函式會傳回第二個運算式。

指定的運算式可以傳回值或 MDX 物件。 此外,指定的運算式在型別中不需要相符。

不建議使用 IIf 函式,根據搜尋準則建立一組成員。 請改用 Filter 函式,根據邏輯運算式評估指定集合中的每個成員,並傳回成員子集。

注意

如果任一運算式評估為 Null,當符合該條件時,結果集會是 Null。

提示是選擇性修飾詞,可決定運算式的評估方式和時間。 它可讓您藉由指定運算式的評估方式來覆寫預設查詢計劃。

  • EAGER 會評估原始 IIF 子空間上的運算式。

  • STRICT 只會在邏輯條件運算式所建立的受限制子空間中評估運算式。

  • LAZY 會以逐儲存格模式評估運算式。

雖然 EAGER 和 STRICT 僅適用于 IIF 的 then-else 分支,但 LAZY 會套用至所有 MDX 運算式。 任何 MDX 運算式都可以接著 HINT LAZY,以逐一儲存格模式評估該運算式。

EAGER 和 STRICT 在提示中互斥;它們可以用於相同 IIF(,,) 中的不同運算式。

如需詳細資訊,請參閱 SQL Server Analysis Services 2008 中的 IIF 函數查詢提示和 MDX IIF 函數和 CASE 語句 的執行計畫和計畫提示。

範例

下列查詢顯示計算量值內的 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 的常見用法是處理計算量值內的「除以零」錯誤,如下列範例所示:

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

以下是 IIF Generate 函式內傳回兩組集合之一的範例,以在 Rows 上建立一組複雜的 Tuple:

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)