如果有基于截止日期的数据,则处理最后两行

时间:2019-06-20 00:11:05

标签: date powerbi dax date-arithmetic measure

这个问题是this one ...的稍微不同的版本...

现在我使用的是Measures而不是Calculated columns,日期是静态的,而不是基于下拉列表。

这是Power BI测试.pbix文件:

https://drive.google.com/open?id=1OG7keqhdvDUDYkFQFMHyxcpi9Zi6Pn3d

此打印屏幕描述了我要完成的工作:

enter image description here

P6 Update表中的日期基本上用作 截止日期 ,并且将是固定的\静态的。它是从Excel表格中导入的,用户可以在其中根据需要对其进行自定义。

当在P6 Update日期的测试数据表中找到匹配行时,将发生以下情况:

  • Earned Daily列-如果有,则必须将其值与下一行相加;
  • Earned Cum-必须获取下一行的值;

  • 所有先前的行应保持不变,也就是说,它们的值不会改变;

  • 所有后续行的值都必须分配为0。

例如:

如果P6 Update 2018年5月1日,则这是预期结果:

1-May    7,498    52,106
2-May        0         0

如果P6 Update 2018年4月30日,则这是预期的结果:

30-Apr  13,173    50,699
1-May        0         0
2-May        0         0 

如果P6 Update 2018年4月29日,则这是预期的结果:

29-Apr  11,906    44,608
30-Apr       0         0
1-May        0         0
2-May        0         0 

以此类推...

希望这很有道理。

这在Excel中更容易,但是在Power BI中尝试这样做会使我发疯。

1 个答案:

答案 0 :(得分:2)

我将忽略先前询问的相关问题,并从头开始。

首先,创建一个度量:

Current Earn = 
CALCULATE (
        SUM( 'Test data'[Value]),
        'Test data'[Act Rem] = "Actual Units",
        'Test data'[Type] = "Current"
    )

此度量将用于其他度量,以免您一次又一次键入所有这些条件(“实际单位”和“当前”)。在其他措施中重复使用措施是一个好习惯-节省工作,使代码更整洁并且易于重构。

创建另一个度量:

Cut Date = SELECTEDVALUE('P6 Update'[Date])

我们将在需要截止日期时使用此度量。请注意,它不必进行硬编码-如果P6表包含日期列表,则可以从日期中创建下拉切片器,并可以动态选择截止日期。该公式将正常工作。

创建第三个度量:

Next Earn =
VAR Cut_Date = [Cut Date]
VAR Current_Date = MAX ( 'Test data'[Date] )
VAR Next_Date = Current_Date + 1
VAR Current_Earn = [Current Earn]
VAR Next_Earn = CALCULATE ( [Current Earn], 'Test data'[Date] = Next_Date )
RETURN
    SWITCH (
        TRUE,
        Current_Date < Cut_Date, Current_Earn,
        Current_Date = Cut_Date, Current_Earn + Next_Earn,
        BLANK ()
    )

我不确定“下一个收入”是否是一个好名字,希望您会找到一个更直观的名字。工作方式:我们将所有必要的输入保存到变量中,然后使用SWITCH函数定义结果。希望它是不言自明的。 (注意:如果需要在“截止日期”之前为0,则将BLANK()替换为0)。

最后,我们定义了累积收入的度量。它不需要任何特殊的逻辑,因为先前的措施可以正确处理它:

Cum Earn = 
VAR Current_Date = MAX('Test data'[Date])
RETURN
CALCULATE(
    [Next Earn],
    FILTER(ALL('Test data'[Date]), 'Test data'[Date] <= Current_Date))

结果:

enter image description here