Поделиться через


IIf (многомерные выражения)

Возвращает одно из двух значений, исходя из логического условия.

Синтаксис

IIf(Logical_Expression, Expression1, Expression2)

Аргументы

  • Logical_Expression
    Допустимое многомерное выражение иерархии, принимающее значение «true» или «false».

  • Expression1
    Допустимое многомерное выражение.

  • Expression2
    Допустимое многомерное выражение.

Замечания

Заданное логическое выражение принимает значение false, только если значение этого выражения равно нулю. Если выражение имеет любое другое значение, оно принимает значение true.

Если указанное логическое выражение принимает значение true, функция IIf возвращает первое выражение. В противном случае функция возвращает второе выражение.

Заданные выражения могут возвращать значения или объекты многомерных выражений. Более того, типы этих выражений не должны обязательно совпадать.

ПримечаниеПримечание

В службах Microsoft SQL Server 2000 Службы Analysis Services поддерживаются только числовые и строковые типы возвращаемых значений, а типы заданных выражений должны быть одинаковыми. Эти ограничения в службах SQL Server Службы Analysis Services не действуют.

Функцию IIf не рекомендуется использовать для создания набора элементов на основе критерия поиска. Вместо этого используйте функцию Filter для нахождения каждого элемента заданного набора по логическому критерию и возврата подмножества элементов.

ПримечаниеПримечание

Если любое из выражений возвращает значение NULL, результирующий набор будет содержать значение NULL, если будет выполнено условие, соответствующее этому выражению.

Примеры

В следующем запросе показано простое использование функции IIF в вычисляемой мере для получения одного из двух строковых значений в зависимости от значения меры «Продажи через Интернет — сумма продаж» (больше или меньше 10 000 долларов США):

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, чтобы создать сложный набор кортежей по строкам:

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]