根據布林條件為真或假,評估不同的分支表達式。
Syntax
IIf(Logical_Expression, Expression1 [HINT <hints>], Expression2 [HINT <hints>])
論點
IIf 函數包含三個參數:iif(<condition>, <then branch>, <else branch>)。
Logical_Expression
一個評估為 真 (1)或 假 (0)的條件。 它必須是有效的多維表達式(MDX)邏輯表達式。
表情1提示 [渴望|嚴格|懶惰]]
當邏輯表達式評估為 真時,會使用。 Expression1 必須是有效的多維表達式(MDX)表達式。
表情2 提示 [渴望|嚴格|懶惰]]
當邏輯表達式被評估為 假時,會使用。 Expression2 必須是有效的多維表達式(MDX)表達式。
備註
當邏輯表達式的值為零時,該條件被評估為 假 。 其他任何值都被評估為 真。
當條件為 真時, IIf 函數會回傳第一個表達式。 否則,函式會回傳第二個表達式。
指定的表達式可以回傳值或 MDX 物件。 此外,指定的表達式不必在型別上相符。
IIf 函數不建議用於根據搜尋條件建立一組成員。 相反地,請使用 篩選 函數(Filter function)對指定集合中的每個成員進行邏輯表達式評估,並回傳一部分成員。
Note
若任一表達式都被 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 陳述的執行計畫與計畫提示。
Examples
以下查詢展示了在計算出的衡量指標中簡單使用 IIF ,當衡量網路銷售金額大於或小於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 上複元組的範例:
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]