У меня есть рабочий 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
Спасибо:)