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]