Как вычислить ближайшую более раннюю дату в DAX в том же столбце, что и сравниваемая дата

#powerbi #dax

#powerbi #dax

Вопрос:

Я использую Power BI и DAX.

Я хочу вычислить ближайшую дату выставления счета, которая раньше текущей даты выставления счета для данной компании. Мой ожидаемый результат будет выглядеть следующим образом, хотя в настоящее время у меня есть первые 3 столбца, 4-й — это то, что я хочу вычислить.

InvoiceID Идентификатор компании InvoiceDate Ближайшая более ранняя дата
103111 219660 2018-04-30 00:00 null
555056 219662 2019-02-12 00:00 null
347454 219668 2018-09-28 00:00 2018-08-31 00:00
402587 219668 2018-10-31 00:00 2018-09-28 00:00
311889 219668 2018-08-31 00:00 2018-06-20 00:00
179054 219668 2018-06-20 00:00 2018-06-12 00:00
169563 219668 2018-06-12 00:00 null
167041 319670 2018-06-08 00:00 2018-06-01 00:00
572585 319670 2019-02-21 00:00 2018-06-01 00:00
144796 319670 2018-06-01 00:00 null
103274 319671 2018-04-30 00:00 null
210641 319671 2018-07-06 00:00 2018-04-30 00:00

Моя текущая формула выглядит следующим образом :

 ClosestEarlierInvoiceDate = 
CALCULATE(
    MIN('Invoices'[InvoiceDate]);

    FILTER('Invoices';EARLIEST('Invoices'[InvoiceDate]))
)
  

Но я знаю, что я не фильтрую для того же самого CompanyId , но когда я попытался, мне сказали, что у меня была циклическая ссылка, которую я понимаю. Но все же, я не знаю, как это реализовать.
Таким образом, приведенный выше запрос фактически возвращает мне самую раннюю дату во всей таблице, и это одно и то же значение в каждой строке.

Спасибо за помощь,

Ответ №1:

Вот мое предложение для вычисляемого столбца, который вы можете вставить в исходную таблицу вместо дублирования всей таблицы в вашей модели данных:

 Previous Invoice Date = 
VAR _last_invoice = Invoices[InvoiceDate]
RETURN
CALCULATE ( 
    MAX ( Invoices[InvoiceDate] ) ,
    ALLEXCEPT ( Invoices , Invoices[CompanyId] ) ,
    Invoices[InvoiceDate] < _last_invoice
)
  

Ответ №2:

Хорошо, в итоге я решил свой собственный вопрос. Я пытался примерно полтора дня, но теперь я задал это в Stack, я решил это через 45 минут…

Я создал дублирующуюся таблицу и создал этот вычисляемый столбец в первой таблице :

 ClosestEarlierInvoiceDate = 
CALCULATE(
    MAX('Invoices-Dates'[date]);

    FILTER('Invoices-Dates';'Invoices-Dates'[InvoiceDate] < 'Invoices'[InvoiceDate] amp;amp;
    'Invoices-Dates'[CompanyId] = 'Invoices'[CompanyId])
)