#sql #sql-server #powerbi
Вопрос:
Мне нужна помощь в преобразовании SQL-запроса в DAX, потому что на данный момент мой код DAX выглядит странно и не работает.
Есть данные в долларах США и валютах DOP, поэтому я хотел бы получить такой результат:
Код T-SQL:
DECLARE @CURRENCY INT;
SET @CURRENCY = 1
SELECT
A.REASON,
--calculation for dop currency
CASE @CURRENCY
WHEN 1
THEN
CASE A.CURRENCY
WHEN 1 THEN SUM(ADJUDICADO) SUM(MONTO_COTIZADO)
WHEN 2 THEN (SUM(ADJUDICADO) SUM(MONTO_COTIZADO)) / 57
ELSE 0
END
WHEN 2
THEN
CASE A.CURRENCY
WHEN 1 THEN (SUM(ADJUDICADO) SUM(MONTO_COTIZADO)) * 57
WHEN 2 THEN SUM(ADJUDICADO) SUM(MONTO_COTIZADO)
ELSE 0
END
ELSE 0
END AS DOP,
--calculation for usd currency
CASE @CURRENCY
WHEN 1
THEN
CASE A.CURRENCY
WHEN 1 THEN SUM(ADJUDICADO) SUM(MONTO_COTIZADO)
WHEN 2 THEN (SUM(ADJUDICADO) SUM(MONTO_COTIZADO)) / 57
ELSE 0
END
WHEN 2
THEN
CASE A.CURRENCY
WHEN 1 THEN (SUM(ADJUDICADO) SUM(MONTO_COTIZADO)) * 57
WHEN 2 THEN SUM(ADJUDICADO) SUM(MONTO_COTIZADO)
ELSE 0
END
ELSE 0
END AS USD
FROM
--TMP TABLE
(SELECT
'Not Enough Founds' AS REASON,
23423423423.321 AS ADJUDICADO,
-34234234234.55 AS MONTO_COTIZADO,
1 AS CURRENCY
UNION
SELECT
'Fees' AS REASON,
23423423.2 AS ADJUDICADO,
-423423.09 AS MONTO_COTIZADO,
2 AS CURRENCY
UNION
SELECT
'Others' AS REASON,
123123321.21 AS ADJUDICADO,
-1231231.53 AS MONTO_COTIZADO,
1 AS CURRENCY) A
GROUP BY
A.REASON, A.CURRENCY
В основном параметр 1 преобразует валюту из USD в DOP и наоборот, если мы выберем 2 для данных в долларах США и DOP соответственно.
В конце концов, я не знаю, возможно ли создать таблицу вычислений с этими расчетами по регистру и группировке, это код, который у меня есть прямо сейчас:
Monto =
VAR CURRENCY = SELECTEDVALUE(DIM_MONEDA[key])
VAR TOTAL = 0
RETURN (
IF(CURRENCY = 1, SUMX(FILTER(FACT_DEALS, FACT_DEALS[MONEDA_KEY] = 1),
TOTAL = TOTAL (SUM(FACT_DEALS[ADJUDICADO]) SUM(FACT_DEALS[MONTO_COTIZADO])) / 57 ),
IF(CURRENCY = 2, SUMX(FILTER(FACT_DEALS, FACT_DEALS[MONEDA_KEY] = 2),
TOTAL = TOTAL (SUM(FACT_DEALS[ADJUDICADO]) SUM(FACT_DEALS[MONTO_COTIZADO])),
IF(CURRENCY = 3, TOTAL = TOTAL (SUM(FACT_DEALS[ADJUDICADO]) SUM(FACT_DEALS[MONTO_COTIZADO])))
))))
Спасибо за вашу помощь.
Комментарии:
1. К вашему сведению
case
, это выражение , а не утверждение .2. В соответствии с руководством по вопросам, пожалуйста, не размещайте изображения кода, данных, сообщений об ошибках и т.д. — Скопируйте или введите текст в вопрос. Пожалуйста, зарезервируйте использование изображений для диаграмм или демонстрации ошибок рендеринга, вещей, которые невозможно точно описать с помощью текста.
Ответ №1:
Хорошо проведя некоторые исследования в документах Microsoft, я нашел способ, которым я могу перевести запрос,
Monto =
VAR CURRENCY = SELECTEDVALUE(DIM_MONEDA[key])
RETURN (
SWITCH(
TRUE(),
CURRENCY = 1, SUMX(FILTER(FACT_DEALS, FACT_DEALS[MONEDA]="DOP"), FACT_DEALS[MONTO_COTIZADO])
(SUMX(FILTER(FACT_DEALS, FACT_DEALS[MONEDA]="USD"), FACT_DEALS[MONTO_COTIZADO]) * 57),
CURRENCY = 2, SUMX(FILTER(FACT_DEALS, FACT_DEALS[MONEDA]="USD"), FACT_DEALS[MONTO_COTIZADO])
(SUMX(FILTER(FACT_DEALS, FACT_DEALS[MONEDA]="DOP"), FACT_DEALS[MONTO_COTIZADO]) / 57),
CURRENCY = 3, SUM(FACT_DEALS[MONTO_COTIZADO]) SUM(FACT_DEALS[ADJUDICADO])
)
)
В основном с помощью SWITCH и SUMX я нашел способ рассчитать сумму…