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]