- Создатель Эдуард Столяр , отредактировано февр. 01, 2025
Вы просматриваете старую версию данной страницы. Смотрите текущую версию.
Сравнить с текущим View Version History
« Предыдущий Версия 4 Следующий »
Функция проверяет указанное выражение на соответствие ряду условий и возвращает значения в зависимости от этих условий. Это позволяет более гибко управлять логикой вычислений, заменяя несколько вложенных операторов IF.
Синтаксис
SWITCH(<Expression>, <Value 1>, <Result 1>[, <Value 2>, <Result 2>], ... [, <Else>])
где
<Expression>
– выражение, которое будет вычислено и использовано для проверки значений. Допускается любое скалярное выражение или логическая константа (TRUE или FALSE).<Value 1>, <Result 1>, ...
– пары значений и соответствующих им результатов. Если<Expression>
совпадает с<Value n>
, то возвращается<Result n>
. Вы можете указать множество таких пар.<Else>
– (необязательно) значение, которое возвращается, если<Expression>
не совпадает ни с одним из указанных значений.
Данная реализация функции SWITCH не поддерживает использование произвольных логических выражений в качестве первого аргумента. Например:
Category = SWITCH( MAX(Table[Column]) > 100, SUM('Продажи_Факт'[Продажи]) < 5000, "Low", SUM('Продажи_Факт'[Продажи]) >= 5000 && SUM ('Продажи_Факт'[Продажи]) < 10000, "Medium", SUM('Продажи_Факт'[Продажи]) >= 10000, "High", "Unknown" )
При этой такой код допустим:
Category = SWITCH( TRUE, SUM('Продажи_Факт'[Продажи]) < 5000, "Low", SUM('Продажи_Факт'[Продажи]) >= 5000 && SUM ('Продажи_Факт'[Продажи]) < 10000, "Medium", SUM('Продажи_Факт'[Продажи]) >= 10000, "High", "Unknown" )
Пример 1
Предположим, у вас есть таблица с данными о продажах и вы хотите вычислить общую сумму продаж с учетом повышения цен для различных годов. Для этой цели можно использовать следующую формулу:
Сумма продаж после повышения цен = SUMX( 'факты онлайн продаж', 'факты онлайн продаж'[unitprice] * SWITCH ( YEAR('факты онлайн продаж'[datekey]), 2022, 1.2, 2023, 1.3, 2024, 1.4, 1 ) )
где
'факты онлайн продаж'[unitprice]
– цена за единицу товара.SWITCH
– определяет коэффициент повышения цены в зависимости от года, взятого из столбца[datekey]
В 2022 году цена увеличивается в 1,2 раза. В 2023 году цена увеличивается в 1,3 раза. В 2024 году цена увеличивается в 1,4 раза. Для всех других лет применяется коэффициент 1 (то есть, цена не изменяется).
Пример 2
Предположим, вы хотите классифицировать уровень продаж в зависимости от их объема. Для этого можно использовать следующую формулу:
Уровень продаж = SWITCH( TRUE, SUM('Продажи_Факт'[Продажи]) < 15000, "Низкий", SUM('Продажи_Факт'[Продажи]) >= 15000 && SUM('Продажи_Факт'[Продажи]) < 30000, "Средний", SUM('Продажи_Факт'[Продажи]) >= 30000, "Высокий", "Неизвестно" )
где
SWITCH
– используется для выбора значения из списка альтернатив на основе условий.TRUE
– используется для последовательной проверки условий. Это позволяет выполнять условия в стиле "если-иначе" (if-else).SUM('Продажи_Факт'[Продажи]) < 15000
– первое проверяемое условие. Если сумма продаж в таблице 'Продажи_Факт' меньше15000
, то результат будет"Низкий"
.SUM('Продажи_Факт'[Продажи]) >= 15000 && SUM('Продажи_Факт'[Продажи]) < 30000
– второе проверяемое условие. Если сумма продаж находится в диапазоне от15000
до29999
(включительно), результат будет"Средний"
.SUM('Продажи_Факт'[Продажи]) >= 30000
– третье проверяемое условие. Если сумма продаж равна или больше30000
, результат будет"Высокий"
.5.
"Неизвестно"
– если по какой-то причине ни одно из условий не выполняется, будет возвращено значение"Неизвестно"
.
Пример 3
С помощью функции SWITCH
вы также можете реализовать сценарий переключения мер на виджете с помощью выбора нужного значения в фильтре.
Предположим, у вас есть таблица Меры с текстовыми значениями, с которыми вы будете сравнивать подготовленные меры из таблицы Products (см. ниже). Текстовые значения в таблице Меры:
Максимальная стоимость;
Минимальная стоимость;
Средняя стоимость.
Для реализации нужного нам сценария мы сделаем следующее:
Создадим фильтр и добавим туда столбец Меры:
В таблице Products создадим три меры, которые будут возвращать минимальное значение цены, среднее и максимальное:
Максимальная стоимость = MAX(Products[UnitPrice])
Минимальная стоимость = MIN(Products[UnitPrice])
Средняя стоимость = AVERAGE(Products[UnitPrice])
Создадим меру, которая будет возвращать значение в зависимости от выбранного в фильтре условия:
Стоимость = SWITCH( TRUE, MIN('Меры'[Меры]) = "Максимальная стоимость", Products[Максимальная стоимость], MIN('Меры'[Меры]) = "Минимальная стоимость", Products[Минимальная стоимость], MIN('Меры'[Меры]) = "Средняя стоимость", Products[Средняя стоимость], 0 )
где
MIN('Меры'[Меры]) = "Максимальная стоимость"
– если выбранное значение в фильтре равноМаксимальная стоимость
, формула возвращает значение из столбца[Максимальная стоимость]
таблицыProducts
.MIN('Меры'[Меры]) = "Минимальная стоимость"
– если выбранное значение в фильтре равноМинимальная стоимость
, формула возвращает значение из столбца[Минимальная стоимость]
таблицыProducts
.MIN('Меры'[Меры]) = "Средняя стоимость"
– если выбранное значение в фильтре равноСредняя стоимость
, формула возвращает значение из столбца[Средняя стоимость]
таблицыProducts
.
Теперь мы создадим таблицу, добавим в нее нашу меру Стоимость и столбец Бренд и отфильтруем по минимальной стоимости:
Для текстовых данных (как в нашем примере) функция MIN
возвращает первую запись в алфавитном порядке. В таблице Меры
первой записью является значение Максимальная стоимость
. Это означает, что если в фильтре не выбрано никакое значение, функция MIN
вернет Максимальная стоимость
. В результате в таблице или визуализации будет отображаться максимальная стоимость.
Смотрите также
📄 Моделирование данных с помощью DAX
📄 Поддерживаемые функции DAX
📄 Математические операторы
Нужна дополнительная помощь?
- Нет меток