Логические функции
Ниже приведен список логических функций, которые можно использовать в выражениях.
Функция | Описание |
---|---|
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.
Вставим вычисляемый столбец с помощью следующего выражения:
if(Col1 < 2, Max(Col1), Max(Col1))
Результатом будет новый столбец с двумя разными значениями: одним в качестве максимума для всех значений, которые меньше 2, и вторым в качестве максимального значения для остальных значений (оно также является максимальным значением для всего столбца).
Функция If предназначена для разделения столбца на две группы, после чего вычисление выражений продолжается для этих новых групп.
Если вместо этого используется выражение Percentile, то результаты для одного и того же выражения процентиля будут разными в зависимости от того, как первое условие разбило столбец.
Вставьте два столбца с помощью следующих двух выражений:
if (Col2 < 4, 0, Percentile(Col2, 70))
if (Col2 < 6, 0, Percentile(Col2, 70))
Будет получен следующий результат:
Как видно, значение процентиля меняется в зависимости от того, как инструкция If сгруппировала данные.Дополнительные сведения об использовании инструкции Case в выражениях
При работе с выражениями Case условие после when вычисляется для всего столбца. Аргумент после then вычисляется для тех строк, которые определены условием when. Если в выражении указано несколько пар when- then, then ограничивается не только последним условием, но и всеми предыдущими.
Пример с использованием простого столбца типа Integer:
Вставьте два вычисляемых столбца («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
Результат: