Столбцы, вычисляемые на основе условий
При вычислении столбцов можно получать разные результаты выражения в зависимости от того, выполнены ли определенные условия. Условия можно настроить в выражениях с помощью логических функций 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() выполняются сверху вниз. Просмотрите выражение ниже и итоговый столбец:
case when [Number]<40 then "yes" when [Number]<70 then "no" else "x" end
Числа ниже 40 получают значение Yes (да), и оно не меняется. Следующая часть выражения, где для числа ниже 70 указывается значение No (нет), распространяется только на оставшиеся строки.