Перевод SQL с помощью функции соединения и окна в DAX - PullRequest
1 голос
/ 04 ноября 2019

У меня есть рабочий SQL-запрос, но он должен быть переведен в DAX, и я изо всех сил.

Это то, чего я пытаюсь достичь:

У меня есть действующие соглашенияот startdate до enddate в таблице фактов. Соглашение, действующее в течение всего года, считается 1, что означает DATEDIFF(startdate, enddate) / 365.0, который дает «вес» соглашения. Нужно посмотреть на любой месяц и получить сумму итоговых весов за последний год. У меня также есть таблица измерений, связанная с таблицей фактов со всеми датами (отдельные дни и в каком году / месяце они принадлежат), что дает мне возможность выполнить следующий запрос SQL, чтобы получить именно то, что я хочу:

SELECT
   sub.yearMonth
   ,SUM(sub.[cnt]) OVER (ORDER BY sub.[yearMonth] DESC ROWS BETWEEN 11 PRECEDING AND CURRENT ROW) / 365.0 AS [runningYear]
FROM
   (SELECT 
       d.yearMonth
       ,COUNT(*) AS [cnt] 
    FROM Agreememts AS a
    INNER JOIN Date AS d
       ON d.date >= a.startddate AND d.date <= a.enddate
    GROUP BY d.yearMonth
) AS sub

Я попытался воспроизвести это в показателе DAX, в результате чего получилось следующее:

AgreementWeights:=
CALCULATE (
   CALCULATE (
      COUNTROWS ( 'Agreements' );
      FILTER (
        'Agreements';
        'Agreements'[startdate] <= MAX ( 'Date'[date] )
            && 'Agreements'[enddate] >= EDATE ( MAX( 'Date'[date] ); -12)
      )
   );
   CROSSFILTER ( 'Agreements'[receiveddate]; 'Date'[sys_date_key]; NONE )
)

Последняя строка должна сократить отношение от recieveddate к измерению даты, что здесь не имеет значения,Этот DAX-запрос дает слишком много строк, но дает правильный результат при делении, например (result/365)*100, и я просто не могу понять, почему.

Пример таблицы фактов Agreements:

  ID   startdate   enddate     recieveddate
  0    10-04-2014  12-06-2015  10-03-2014
  1    11-06-2014  11-07-2014  11-05-2014

Пример таблицы размеров Date:

  ID   date        yearMonth   sys_date_key
  0    10-04-2014  April2014   10042014
  1    11-04-2014  April2014   11042014

Спасибо:)

...