Инструкция SQL Server для формулы DAX

#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 я нашел способ рассчитать сумму…