Столбцы, вычисляемые на основе условий

При вычислении столбцов можно получать разные результаты выражения в зависимости от того, выполнены ли определенные условия. Условия можно настроить в выражениях с помощью логических функций If() или Case().

If()

При использовании функции If() необходимо указать условие, которое может принимать значение True или False, а затем следует результат, возвращаемый в первом и во втором случае.

Примеры

Выражение

If(([Amount]<10),"low","high")

означает, что если значение строки в столбце «Количество» меньше 10, в качестве результата вернется значение «low», но если значение равно или больше 10, вернется значение «high».

Такой пример показан ниже:



Другими словами, функция If() делит строки на две группы. Одна группа состоит из строк, для которых указанное условие принимает значение True (возвращается результат «low»), а вторая — из строк, для которых указанное условие принимает значение False (возвращается результат «high»).

Прим.:

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

If(([Amount]<10),Avg([Amount]),Avg([Amount]))

которое содержит агрегирования типа «Среднее». В этом случае для двух групп указывается один тип агрегирования, но могут использоваться разные агрегации.



Для значений строк меньше 10, принадлежащих группе, которая принимает значение True, возвращается среднее значение 6 = ((5+7)/2), а для группы, которая принимает значение False, возвращается среднее значение 13 = ((14+10+15)/3).

Функцию if() можно также использовать в сочетании с операторами and и or. Чтобы привести пример — следующее выражение

If(([Customer age]<20) and ([Gender]="Female"),"girl","other")

формирует добавленный вычисляемый столбец:



Case()

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

Пример 1

Предположим, цены на книги и видео ниже были снижены на 10 % и 50 % соответственно, и список цен нужно обновить.



Так как снижение стоимости отличается в зависимости от типа продукта, выражение case() будет использоваться для расчета новых цен:

case [Type]
when "Book" then [Price]*0.9
when "Video" then [Price]*0.5
else [Price]
end



Здесь функция case() только проверяет тип (Type) для всех вариантов when в выражении.

Пример 2

Во втором примере функция case() используется для вычисления результатов тестов для определенного количества студентов. Предлагается три уровня оценки: Failed (неудовлетворительно — общий результат меньше 100), Passed (зачет) и Excellent (отлично — общий результат равен 160 и выше).



В этом примере с помощью функции Case() независимо вычисляется соответствие условию для всех вариантов when:

case  
when ([Test A] + [Test B])<100 then "Failed" 
when ([Test A] + [Test B])>=160 then "Excellent"
else "Passed"
end

В этом случае можно реализовать более сложные условия по сравнению с условиями в примере 1.

Итоговый вычисляемый столбец показан ниже:



Прим.: В обоих формах case() в выражение можно включить несколько условий when/then.

Последовательность выполнения условий

Различные компоненты выражений case() выполняются сверху вниз. Просмотрите выражение ниже и итоговый столбец:

case
when [Number]<40 then "yes"
when [Number]<70 then "no"
else "x"
end



Числа ниже 40 получают значение Yes (да), и оно не меняется. Следующая часть выражения, где для числа ниже 70 указывается значение No (нет), распространяется только на оставшиеся строки.