DAX-фильтр-меры на основе нескольких критериев

Вопрос или проблема

У меня есть большой набор данных с множеством строк. Я хочу иметь возможность фильтровать визуализацию таблицы 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-меры

  1. Определение переменной: Мы определяем переменную CurrentDate, которая получает сегодняшнюю дату с помощью функции TODAY(). Это облегчает дальнейшие расчеты.

  2. Функция FILTER: Здесь мы фильтруем таблицу 'dataset' с использованием двух условий:

    • ISBLANK('dataset'[Delivered Date]) — проверяем, есть ли в строке пустое значение в столбце даты доставки.
    • DATEDIFF('dataset'[Order Date], CurrentDate, DAY) > 3 — используя функцию DATEDIFF, вычисляем разницу в днях между датой заказа и текущей датой, проверяя, больше ли она 3.
  3. Функция CONCATENATEX: На выходе мы используем CONCATENATEX, чтобы соединить идентификаторы заказов, удовлетворяющих критериям, через запятую.

Настройка взаимодействия с слайсерами

Чтобы сделать вашу меру интерактивной в Power BI, вы можете добавить её в качестве параметра, который будет контролироваться слайсерами. Это может быть полезно для дополнительной фильтрации по странам или другим критериям.

Заключение

Создание мер на основе нескольких критериев в DAX требует понимания синтаксиса и логики работы функций, таких как FILTER, ISBLANK, и DATEDIFF. В приведённом примере описан эффективный подход к фильтрации ваших данных, который можно использовать для решения вашей задачи. Благодаря этому подходу Power BI становится мощным инструментом для анализа и визуализации данных.

Если у вас есть дополнительные вопросы или нужны более сложные примеры, пожалуйста, дайте знать!

Оцените материал
Добавить комментарий

Капча загружается...