我有一个有效的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
谢谢:)