Вопрос или проблема
У меня есть большой набор данных с множеством строк. Я хочу иметь возможность фильтровать визуализацию таблицы Power BI, как указано ниже, на основе нескольких критериев с использованием меры, добавленной к параметру с слайсером.
Одним из выборов фильтра является возможность видеть заказы, которые не были доставлены, И дни с даты заказа уже превышают 3 дня.
ID заказа | Страна | Дата заказа | Дата упаковки | Дата доставки | Дни с заказа |
---|---|---|---|---|---|
A1111 | СГ | 2024-11-01 | 2024-11-03 | 2024-11-04 | 7 |
B2222 | MY | 2024-11-02 | 2024-11-04 | 2024-11-05 | 6 |
C3333 | ИН | 2024-11-03 | 2024-11-05 | 5 | |
D4444 | ID | 2024-11-04 | 2024-11-06 | 2024-11-07 | 4 |
E5555 | HK | 2024-10-31 | 2024-11-02 | 8 | |
F6666 | VN | 2024-11-01 | 2024-11-03 | 2024-11-04 | 7 |
G7777 | СГ | 2024-11-03 | 2024-11-05 | 2024-11-06 | 5 |
H8888 | MY | 2024-11-04 | 4 |
Мне удалось отфильтровать пустые строки для даты доставки с помощью этой меры DAX:
Нет даты доставки =
CONCATENATEX (
FILTER (
'dataset',
ISBLANK('dataset'[Delivered Date])
),
'dataset'[Delivered Date]),
", "
)
Если я добавляю другой критерий (дни с даты заказа > 3) для фильтрации на основе нескольких критериев, это не работает.
CONCATENATEX (
FILTER (
'dataset',
ISBLANK('dataset'[Delivered Date]) &&
'dataset'[Order Date]) + 3 > TODAY()
),
'dataset'[Delivered Date]),
", "
)
Буду признателен за любые советы по использованию меры DAX для фильтрации на основе нескольких критериев.
Ответ или решение
Для того чтобы создать DAX-меру в Power BI, которая фильтрует набор данных на основе нескольких критериев, включая отсутствие даты доставки и то, что прошло более 3 дней с момента заказа, необходимо правильно сформулировать условия фильтрации. Давайте рассмотрим данный сценарий более подробно.
Подход к фильтрации данных в DAX
На основании вашего описания и примера, ваша цель состоит в том, чтобы отобразить заказы, которые ещё не были доставлены и на которые время от заказа превысило 3 дня. Это можно сделать, создав DAX-меру, которая использует функцию FILTER
для фильтрации строк в соответствии с заданными критериями.
Пример DAX-меры для многокритериального фильтра
Приведём пример корректной DAX-меры, которая будет учитывать оба критерия:
NoDeliveryOverThreeDays =
VAR CurrentDate = TODAY()
RETURN
CONCATENATEX (
FILTER (
'dataset',
ISBLANK('dataset'[Delivered Date]) &&
DATEDIFF('dataset'[Order Date], CurrentDate, DAY) > 3
),
'dataset'[Order ID],
", "
)
Объяснение DAX-меры
-
Определение переменной: Мы определяем переменную
CurrentDate
, которая получает сегодняшнюю дату с помощью функцииTODAY()
. Это облегчает дальнейшие расчеты. -
Функция FILTER: Здесь мы фильтруем таблицу
'dataset'
с использованием двух условий:ISBLANK('dataset'[Delivered Date])
— проверяем, есть ли в строке пустое значение в столбце даты доставки.DATEDIFF('dataset'[Order Date], CurrentDate, DAY) > 3
— используя функциюDATEDIFF
, вычисляем разницу в днях между датой заказа и текущей датой, проверяя, больше ли она 3.
-
Функция CONCATENATEX: На выходе мы используем
CONCATENATEX
, чтобы соединить идентификаторы заказов, удовлетворяющих критериям, через запятую.
Настройка взаимодействия с слайсерами
Чтобы сделать вашу меру интерактивной в Power BI, вы можете добавить её в качестве параметра, который будет контролироваться слайсерами. Это может быть полезно для дополнительной фильтрации по странам или другим критериям.
Заключение
Создание мер на основе нескольких критериев в DAX требует понимания синтаксиса и логики работы функций, таких как FILTER
, ISBLANK
, и DATEDIFF
. В приведённом примере описан эффективный подход к фильтрации ваших данных, который можно использовать для решения вашей задачи. Благодаря этому подходу Power BI становится мощным инструментом для анализа и визуализации данных.
Если у вас есть дополнительные вопросы или нужны более сложные примеры, пожалуйста, дайте знать!