Я пытаюсь написать следующий код SQL в DAX.
select SUM(amount) from TABLE
where BusinessDate = '2023-02-11'
OR (Segment = 'General' and Days_Without_Payments < 210)
OR (Segment = 'Enterprise' and Days_Without_Payments < 1215)
OR (Segment = 'House' and Days_Without_Payments < 1945)
Я правильно понял первую часть (то есть SUM), но не могу разобраться с фильтрами.
Что я пробовал:
Measure = CALCULATE([Total Outstanding],
FILTER(VALUES(BILBL_WO[Date]),BILBL_WO[Date]=MAX(BILBL_WO[Date])),
AND(BILBL_WO[Days_Without_Payments] < 210, BILBL_WO[Segment] = "General") ||
AND(BILBL_WO[Days_Without_Payments] < 1215, BILBL_WO[Segment] = "Enterprise") ||
AND(BILBL_WO[Days_Without_Payments] < 1945, BILBL_WO[Segment] = "House")
)
Где Total Outstanding
— еще одна мера, которую я создал для суммирования Amount
.
Пожалуйста, помогите, так как я не мог найти что-то полезное в Интернете, и я новичок в этом. Спасибо!
В общем, когда люди начинают изучать DAX, большинство думает, что это похоже на запрос SQL, но это не так, потому что SQL — это язык структурированных запросов. Напротив, DAX — это язык формул, используемый для целей анализа, аналогичный уравнениям Excel.
Я дам вам несколько простых советов о том, как преобразовать SQL в DAX, учитывая, что у вас есть одна таблица, которую вы импортировали в табличную модель Power BI или SSAS, а именно:
Вам необходимо разделить запрос следующим образом:
Функция агрегирования в вашем примере SUM (сумма) в SQL-запросе будет в DAX: Общая сумма задолженности = сумма ('BILBL_WO' [сумма])
Где условие в столбце даты: Обычно я создаю измерение даты и создаю связь с таблицей, в которой есть столбец даты. Вы можете сделать это, когда в качестве начала будете вдаваться в подробности, касающиеся контекста оценки в Power BI и архитектуре схемы Star, но в вашем случае, если тип данных столбца является строкой, преобразуйте его в тип даты, а затем используйте столбец даты в качестве фильтра на странице отчета Power Bi, позволяя пользователям отчета выбирать разные даты, а не только «2023-02-11».
Для ваших условий в Segment и Days_Without_Payments, прежде чем преобразовать его в DAX, я думаю, что в исходном запросе отсутствует скобка. Если я правильно понял, пожалуйста, дайте мне знать, если я ошибаюсь.
select SUM(amount)
from TABLE
where BusinessDate = '2023-02-11'
and
(
(Segment = 'General' and Days_Without_Payments < 210)
OR
(Segment = 'Enterprise' and Days_Without_Payments < 1215)
OR
(Segment = 'House' and Days_Without_Payments < 1945)
)
Measure = CALCULATE([Total Outstanding] ,
KEEPFILTERS(
FILTER(
ALL(BILBL_WO[Segment] ,BILBL_WO[Days_Without_Payments]),
(BILBL_WO[Segment] = "General" && BILBL_WO[Days_Without_Payments] < 210)
||
(BILBL_WO[Segment] = "Enterprise" && BILBL_WO[Days_Without_Payments] < 1215)
||
(BILBL_WO[Segment] = "House" && BILBL_WO[Days_Without_Payments] < 1945))
)
)
А чтобы узнать больше о том, как фильтровать DAX с помощью нескольких столбцов, посмотрите это видео на YouTube https://thewikihow.com/video_kQjYG6TJVp8 и следите за каналом SQLBI. Это очень поможет вам.
Надеюсь, я чем-то помог; если да, отметьте это как ответ и проголосуйте за него :)
SQL на самом деле не «переводится» в DAX, и вам придется нелегко, если вы не изучите основы, такие как контекст оценки. Одна и та же мера в DAX будет давать разные ответы в зависимости от контекста, в то время как SQL всегда будет возвращать один и тот же ответ. Я предлагаю некоторые основы на SQLBI.com.