IIf(MDX)

根據布林條件為真或假,評估不同的分支表達式。

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]