ブール条件が真か偽かに応じて異なる分岐式を評価する。
構文
IIf(Logical_Expression, Expression1 [HINT <hints>], Expression2 [HINT <hints>])
引数
IIf関数は3つの引数を取ります:iif(<condition>、 <then branch>、 <else branch>)。
Logical_Expression
真(1)または偽(0)と評価される条件。 それは有効な多次元表現(MDX)論理式でなければなりません。
表情1ヒント [熱心|厳格|レイジー]]
論理式が 真に評価される場合に使われます。 Expression1は有効な多次元表現(MDX)表現でなければなりません。
Expression2 ヒント [熱心|厳格|レイジー]]
論理式が 偽に値するときに使われます。 expression2は有効な多次元表現(MDX)表現でなければなりません。
Remarks
論理式で指定された条件は、この式の値がゼロの場合に false に評価されます。 それ以外の 値は真と評価されます。
条件が 真である場合、 IIf 関数は最初の式を返します。 そうでなければ、関数は2番目の式を返します。
指定された式は値やMDXオブジェクトを返すことができます。 さらに、指定された式は型が一致する必要はない。
IIf関数は検索条件に基づいてメンバーの集合を作成するために推奨されません。 代わりに 、フィルター 関数を使って指定された集合内の各メンバーを論理式に対して評価し、その部分集合を返します。
Note
どちらかの式がNULLに値すると、その条件が満たされた時点で結果集合はNULLとなります。
ヒントは、式がどのように、いつ評価されるかを決定する任意の修飾子です。 この方法により、式の評価方法を指定することで、デフォルトのクエリ計画を上書きできます。
EAGERは元のIIF部分空間上で式を評価します。
STRICTは論理条件式によって生成される制限部分空間でのみ式を評価します。
LAZYは細胞ごとに発現を評価します。
EAGERとSTRICTはIIFの当時elseの分岐にのみ適用されますが、LAZYはすべてのMDX表現に適用されます。 任意のMDX発現を追跡すると、HINT LAZYを追跡し、細胞ごとにその発現を評価できます。
EAGERとSTRICTはヒントの中で相互排他的です。同じIIF(,,)で異なる式でも使うことができます。
詳細については、SQL Server Analysis Services 2008のIIF関数クエリヒントおよびMDX IIF関数およびCASE文の実行計画および計画ヒントをご覧ください。
Examples
以下のクエリは、計算された指標内で IIF を使い、測定対象のインターネット売上金額が$10000より大きいか小さい場合に2つの異なる文字列値のいずれかを返す方法を示しています。
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 が生成関数内の2つの集合のいずれかを返して、行上の複素タプルの集合を作成する例です。
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]