#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])
)