Как написать SQL в DAX?

Я пытаюсь написать следующий код 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.

Пожалуйста, помогите, так как я не мог найти что-то полезное в Интернете, и я новичок в этом. Спасибо!

SQL на самом деле не «переводится» в DAX, и вам придется нелегко, если вы не изучите основы, такие как контекст оценки. Одна и та же мера в DAX будет давать разные ответы в зависимости от контекста, в то время как SQL всегда будет возвращать один и тот же ответ. Я предлагаю некоторые основы на SQLBI.com.

David Bacci 13.02.2023 15:24
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
1
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Я дам вам несколько простых советов о том, как преобразовать SQL в DAX, учитывая, что у вас есть одна таблица, которую вы импортировали в табличную модель Power BI или SSAS, а именно:

Вам необходимо разделить запрос следующим образом:

  1. Функция агрегирования в вашем примере SUM (сумма) в SQL-запросе будет в DAX: Общая сумма задолженности = сумма ('BILBL_WO' [сумма])

  2. Где условие в столбце даты: Обычно я создаю измерение даты и создаю связь с таблицей, в которой есть столбец даты. Вы можете сделать это, когда в качестве начала будете вдаваться в подробности, касающиеся контекста оценки в Power BI и архитектуре схемы Star, но в вашем случае, если тип данных столбца является строкой, преобразуйте его в тип даты, а затем используйте столбец даты в качестве фильтра на странице отчета Power Bi, позволяя пользователям отчета выбирать разные даты, а не только «2023-02-11».

  3. Для ваших условий в 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)
)                

Измененный скрипт SQL

  1. Если мое вышеприведенное предположение верно и вам нужно написать меру DAX с условиями Segment и Days_Without_Payments, вы можете написать ее следующим образом:
    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. Это очень поможет вам.

Надеюсь, я чем-то помог; если да, отметьте это как ответ и проголосуйте за него :)

Другие вопросы по теме