Как написать 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
Типы данных JavaScript
Типы данных JavaScript
В JavaScript существует несколько типов данных, включая примитивные типы данных и ссылочные типы данных. Вот краткое объяснение различных типов данных...
Как сделать движок для футбольного матча? (простой вариант)
Как сделать движок для футбольного матча? (простой вариант)
Футбол. Для многих людей, живущих на земле, эта игра - больше, чем просто спорт. И эти люди всегда мечтают стать футболистом или менеджером. Но, к...
Знайте свои исключения!
Знайте свои исключения!
В Java исключение - это событие, возникающее во время выполнения программы, которое нарушает нормальный ход выполнения инструкций программы. Когда...
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик
CSS Flex: что должен знать каждый разработчик Модуль flexbox, также известный как гибкий модуль разметки box, помогает эффективно проектировать и...
Введение в раздел &quot;Заголовок&quot; в HTML
Введение в раздел "Заголовок" в HTML
Говорят, что лучшее о человеке можно увидеть только изнутри, и это относится и к веб-страницам HTML! Причина, по которой некоторые веб-страницы не...
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. Это очень поможет вам.

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

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