将行与下一行值相加,然后在其他列中获取所选日期的下一个值

时间:2019-06-18 21:00:43

标签: row powerbi dax next calculation

假设我有此数据:

         Earn     Earn Cum.
13-Apr       -        -   
14-Apr      48        48 
15-Apr     257       305 
16-Apr     518       823 
17-Apr     489     1,312 
18-Apr     837     2,149 
19-Apr   1,005     3,154 
20-Apr   1,021     4,175 
21-Apr   1,463     5,638 
22-Apr   2,630     8,268 
23-Apr   2,993    11,261 
24-Apr   3,354    14,615 
25-Apr   4,332    18,947 
26-Apr   4,885    23,832 
27-Apr   4,514    28,346 
28-Apr   4,356    32,702 
29-Apr   4,824    37,526 
30-Apr   7,082    44,608 
1-May    6,091    50,699 
2-May    1,407    52,106 

例如,当在下拉式切片器中选择日期时:1-May我想对 Earn 列的行1-May与下一行2-May求和赚取收入列的下一个值52,106。结果应该是:

1-May    7,498    52,106

另一个示例:如果所选日期为4月30日,则结果必须为:

30-Apr  13,173    50,699    

我正在努力尝试使用Power BI中的一种方法来做到这一点。

2 个答案:

答案 0 :(得分:1)

访问日期智能将有帮助,因此如果您还没有日期表,请创建一个日期表。以下dax设置了一个小表,该表仅涵盖了示例中的示例数据。

Date = CALENDAR(Date(2019,4,10),Date(2019,5,5))

在表中的日期和新的日期维度之间创建一个关系。使用“日期”维度将切片器添加到视觉效果。

我们可以使用IF和ISFILTERED来检查是否正在进行过滤。如果我们不在Date上进行过滤,那么我们将获得正常的表行为。如果是这样,我们将看到修改后的结果。

Earn _ Alt = 
var tomorrow = CALCULATE (
    SUM(Table1[Earn]),
    dateadd('Table1'[Date], 1, DAY)
 )

return Sum(Table1[Earn]) + IF(ISFILTERED`('Date'[Date]),tomorrow,0)`

Earn Cum. _ Alt = IF(ISFILTERED('Date'[Date]),
CALCULATE (
    SUM(Table1[Earn Cum.]),
    dateadd('Table1'[Date], 1, DAY)
 ),
SUM(Table1[Earn Cum.]))

结果:

-未过滤- enter image description here

-已过滤- enter image description here

答案 1 :(得分:1)

我将您的表称为“数据”。

创建度量:

Next Earn =
VAR Current_Date = MAX ( Data[Date] )
VAR Next_Date = Current_Date + 1
RETURN
    CALCULATE (
        SUM ( Data[Earn] ),
        Data[Date] = Current_Date || Data[Date] = Next_Date
    )

创建另一个度量:

Next Cum Earn = 
VAR Current_Date =  MAX ( Data[Date] )
VAR Next_Date = Current_Date + 1
RETURN
    CALCULATE ( SUM ( Data[Earn Cum] ), Data[Date] = Next_Date )

结果:

enter image description here

注意:该代码假定您的日期是连续的(没有间隔)。如果它们之间存在差距,则情况会更加复杂。