如何检查当前开始和结束日期是否在上一期间(开始和结束日期)
How to check if current start and end dates are in previous period (start and end dates)
我正在处理一个棘手的问题。我已经多次尝试捕获数据,但都没有成功。
我在 Power Bi 中有一个 table,如下所示:
密钥和 StartDate 字段都按升序排列。我想在 "Period Overlap Delta" 字段中获得结果,但在尝试弄清楚时遇到了麻烦。
基本上,我想为前一期间的任何期间(开始日期-结束日期组合)分配一个零值,并获取那些 "super" 期间的日期差异。
这是生成 table:
的 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"}
})
提前致谢!!!
我们需要知道某一行是否与前一行重叠。 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
提供样本数据是金,应该多多推广!
我正在处理一个棘手的问题。我已经多次尝试捕获数据,但都没有成功。
我在 Power Bi 中有一个 table,如下所示:
密钥和 StartDate 字段都按升序排列。我想在 "Period Overlap Delta" 字段中获得结果,但在尝试弄清楚时遇到了麻烦。
基本上,我想为前一期间的任何期间(开始日期-结束日期组合)分配一个零值,并获取那些 "super" 期间的日期差异。
这是生成 table:
的 DAXCases = 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"}
})
提前致谢!!!
我们需要知道某一行是否与前一行重叠。 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
提供样本数据是金,应该多多推广!