Логические функции

Ниже приведен список логических функций, которые можно использовать в выражениях.

Функция Описание
Case Инструкция Case имеет две разные формы.

Простая:

case Arg1 when Arg2 then Arg3 else Arg4 end

Выражение Arg1 вычисляется, а когда аргумент Arg1 равен Arg2, возвращается Arg3. Можно ввести несколько выражений when/then, которые будут вычислены в порядке слева направо.

Поиск:

case when Arg1 then Arg2 else Arg3 end

Возвращается аргумент Arg2, если Arg1=true, и Arg3, если Arg1=false. Можно

ввести несколько выражений when/then, которые будут вычислены в порядке слева направо.

Дополнительные сведения см. ниже.

Пример.

case when 1 < 2 then "a" when 1 < 3 then "b" else "c" end

case [Column] when 3 then "a" when 2 then "b" else "c" end

Дополнительные примеры см. ниже и в разделе Столбцы, вычисляемые на основе условий.

If(Arg1,Arg2,Arg3) Возвращается аргумент Arg2, если Arg1=true, и Arg3, если Arg1=false. Arg1 имеет логический тип (обычно это результат сравнения). Аргументы Arg2 и Arg3 могут принадлежать к любому типу, однако оба они должны иметь одинаковый тип или иметь значение NULL.

Второй и третий аргументы обрабатывают только подмножества строк, что влияет на все методы на основе столбцов и методы аккумулирования. Дополнительные сведения см. ниже.

Примеры.

If([Count] > 3, "many", "few")

If(true, null, null) -> (Empty)

If(true, 1, null) -> 1

If(false, null, 2) -> 2

If(null, 1, 2) -> (Empty)

If(1 < 2, "Small", "Big")-> Small

If([Column] Is Null,"0","has value")

Дополнительные примеры см. ниже и в разделе Столбцы, вычисляемые на основе условий.

Is Not Null Используется в инструкции If или Case, чтобы определить, выдает ли выражение пустое значение (NULL).

Пример.

If([Column] Is Not Null, "value was not null", "value was null")

Если выражение содержит пустые значения (NULL), то, чтобы заменить их указанным значением, можно использовать функцию SN (см. раздел Функции преобразования).

Is Null

Используется в инструкции If или Case, чтобы определить, выдает ли выражение пустое значение (NULL).

Пример.

If([Column] Is Null, "value was null", "value was not null")

Если выражение содержит пустые значения (NULL), то, чтобы заменить их указанным значением, можно использовать функцию SN (см. раздел Функции преобразования).

Дополнительные сведения об использовании инструкции if в выражениях

При использовании в выражении инструкции if условие, заданное в первом аргументе, ограничивает значения, которые будут вычисляться в третьем аргументе. Чтобы понять, как это работает, сначала возьмем в качестве примера простой столбец типа Integer.

Col1
1
2
3

Вставим вычисляемый столбец с помощью следующего выражения:

if(Col1 < 2, Max(Col1), Max(Col1))

Результатом будет новый столбец с двумя разными значениями: одним в качестве максимума для всех значений, которые меньше 2, и вторым в качестве максимального значения для остальных значений (оно также является максимальным значением для всего столбца).

Col1 if(Col1 < 2, Max(Col1), Max(Col1))
1 1
2 3
3 3

Функция If предназначена для разделения столбца на две группы, после чего вычисление выражений продолжается для этих новых групп.

Если вместо этого используется выражение Percentile, то результаты для одного и того же выражения процентиля будут разными в зависимости от того, как первое условие разбило столбец.

Col2
1
2
3
4
5
6
7
8
9
10

Вставьте два столбца с помощью следующих двух выражений:

if (Col2 < 4, 0, Percentile(Col2, 70))

if (Col2 < 6, 0, Percentile(Col2, 70))

Будет получен следующий результат:

Col2 if (Col2 < 4, 0, Percentile(Col2, 70)) if (Col2 < 6, 0, Percentile(Col2, 70))
1 0 0
2 0 0
3 0 0
4 8,2 0
5 8,2 0
6 8,2 8,8
7 8,2 8,8
8 8,2 8,8
9 8,2 8,8
10 8,2 8,8
Как видно, значение процентиля меняется в зависимости от того, как инструкция If сгруппировала данные.

Дополнительные сведения об использовании инструкции Case в выражениях

При работе с выражениями Case условие после when вычисляется для всего столбца. Аргумент после then вычисляется для тех строк, которые определены условием when. Если в выражении указано несколько пар when- then, then ограничивается не только последним условием, но и всеми предыдущими.

Пример с использованием простого столбца типа Integer:

Col1
1
2
3
4
5
6
7
8

Вставьте два вычисляемых столбца («Case Min» и «Case Max») с помощью следующих выражений:

Case Min:

case 
		when [Col1]<Avg([Col1]) then Min([Col1]) 
		when [Col1]<(Avg([Col1]) + 1) then Min([Col1]) 
		else Min([Col1]) 
end

Case Max:

case
		when [Col1] < Avg([Col1]) then Max([Col1])
		when [Col1] < (Avg([Col1]) + 1) then Max([Col1])
		else Max([Col1]) 
end

Результат:

Col1 Case Min Case Max
1 1 4
2 1 4
3 1 4
4 1 4
5 5 5
6 6 8
7 6 8
8 6 8
Также см. раздел Функции.