如何检查当前开始日期和结束日期是否在上一期间(开始日期和结束日期)

时间:2018-06-13 23:39:23

标签: powerbi dax powerbi-desktop

我正在处理一个棘手的问题。我已经多次尝试捕获数据,但都没有成功。

我在Power Bi中有一个表格如下:

enter image description here

键是按升序排列的,也是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"}
        }) 

非常感谢!

1 个答案:

答案 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])
    )
)

Overlapped

有了这个,我们只需要将它包起来并用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)

Period Overlap Delta

P.S。使用DATATABLE提供样本数据是很好的,应该更频繁地推广!