我正在处理一个棘手的问题。我已经多次尝试捕获数据,但都没有成功。
我在Power Bi中有一个表格如下:
键是按升序排列的,也是StartDate字段。我想在" Period Overlap Delta"中取得成果。现场,但在试图解决它时遇到了麻烦。
基本上,我想为之前一段时间内的任何时期(startdate-enddate组合)分配一个零值,并取出那些" super"的日期差异。周期。
以下是制作表格的DAX:
Cases = DATATABLE("Key", integer, "StartDate", datetime, "EndDate", datetime
,{
{1, "01/01/2018", "01/10/2018"}
, {2, "01/03/2018","01/03/2018"}
, {3, "01/05/2018","01/07/2018"}
, {4, "01/15/2018","01/16/2018"}
, {5, "01/21/2018","01/24/2018"}
, {6, "01/25/2018", "01/27/2018"}
, {7, "01/25/2018","01/27/2018"}
})
非常感谢!
答案 0 :(得分:2)
我们需要知道某行是否与前一行重叠。 previous
我们的意思是密钥小于当前行。 overlapped
我们的意思是StartDate
早于或等于当前行,EndDate
晚于或等于当前行,因此:
Overlapped =
COUNTROWS(
FILTER(
'Cases',
'Cases'[StartDate] <= EARLIER('Cases'[StartDate]) &&
'Cases'[EndDate] >= EARLIER('Cases'[EndDate]) &&
'Cases'[Key] < EARLIER('Cases'[Key])
)
)
有了这个,我们只需要将它包起来并用DATEDIFF
函数计算天数:
Period Overlap Delta =
VAR Overlapped =
COUNTROWS(
FILTER(
'Cases',
'Cases'[StartDate] <= EARLIER('Cases'[StartDate]) &&
'Cases'[EndDate] >= EARLIER('Cases'[EndDate]) &&
'Cases'[Key] < EARLIER('Cases'[Key])
)
)
RETURN
IF(Overlapped, 0, DATEDIFF('Cases'[StartDate], 'Cases'[EndDate], DAY) + 1)
P.S。使用DATATABLE
提供样本数据是很好的,应该更频繁地推广!