Что представляет собой запрос PowerBI / DAX, эквивалентный этой оконной функции SQL

У меня есть следующая таблица:

   NDayNo   Customer    Date       CallID
     0          A     02/09/2018    48451
     24         A     26/09/2018    48452
     0          B     21/09/2018    48453
     4          B     25/09/2018    48454
     0          C     17/09/2018    48455
     8          C     25/09/2018    48456
     9          C     26/09/2018    48457
     9          C     26/09/2018    48458
     0          D     09/09/2018    48459

NDayNo. значение было вычислено с помощью этой функции в SQL:

COALESCE(DATEDIFF(day,FIRST_VALUE(Date) OVER (PARTITION BY Customer ORDER By Date),Date),0)

NDayNo. = определение первого контакта клиента в месяце (= 0), а затем определение количества дней до следующего контакта.

Я пытаюсь воспроизвести ту же логику в PowerBI. Кто-нибудь знает, как я могу рассчитать это как вычисляемый столбец / запрос DAX?


person dragonfury2    schedule 26.10.2018    source источник


Ответы (1)


Это должно сработать для вас:

введите здесь описание изображения

NDayNo =
DATEDIFF (
    CALCULATE ( MIN ( 'table'[Date] ), ALLEXCEPT ( 'table', 'table'[Customer] ) ),
    'table'[Date],
    DAY
)

Это выражение DAX возвращает для каждой строки разницу в днях между минимальным значением [дата] во всей таблице (фильтруется только для [Customer] в этой строке) и [date] в этой строке.

person Marco Vos    schedule 27.10.2018
comment
Для этого; DATEDIFF (CALCULATE (MIN ('table' [Date], ALLEXCEPT ('table', 'table' [customer])), 'table' [Date], DAY) Я получаю 'Слишком мало аргументов передано DATEDIFF, минимальное требование 3 '. Есть ли дополнительный код, вырезанный из вашего скриншота? Спасибо. - person dragonfury2; 28.10.2018
comment
Вы забыли закрывающую скобку после MIN('table'[Date]. Я добавлю код, чтобы его можно было скопировать / вставить. - person Marco Vos; 28.10.2018
comment
Спасибо. Что, если я хочу отфильтровать результаты? например, если рядом с ним есть столбец FLAG со значениями [1] или [0], и я отфильтровываю все [0] s, оставляя мне только [1] s. Будет ли этот вычисляемый столбец корректировать NDayNo? Итак, из приведенной выше таблицы, если бы я должен был отфильтровать верхнюю строку (CallID. 48451), NDayNo для CallID. 48452 должен измениться на 0. - person dragonfury2; 28.10.2018
comment
Нет, при фильтрации таблицы пересчет не производится. Это вычисляемый столбец, а не размер. - person Marco Vos; 28.10.2018
comment
Понятно, как в этом случае преобразовать это в меру? Гарантировать, что значение пересчитывается каждый раз, когда к таблице применяется фильтр? - person dragonfury2; 28.10.2018