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

Sum row with next row value and grab next value in other column for the date selected

假设我有这个数据:

         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 我想将 1-May 的行与下一行 2-May 的列相加 Earn 并获取列 Earn Cum. 的下一个值 52,106。结果应该是:

1-May    7,498    52,106

另一个例子:如果选择的日期是 4 月 30 日,结果必须是:

30-Apr  13,173    50,699    

我正在挠头尝试使用 Power BI 中的度量来做到这一点。

访问日期情报会有所帮助,因此如果您还没有日期,请创建一个日期 table。下面的 dax 设置了一个小的 table,几乎没有覆盖示例中的样本数据。

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

在 table 中的日期和新的日期维度之间建立关系。使用日期维度向您的视觉对象添加切片器。

我们可以使用 IF 和 ISFILTERED 来检查是否进行了过滤。如果我们不对 Date 进行过滤,那么我们会得到正常的 table 行为。如果是,我们将看到修改后的结果。

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.]))

结果:

-未过滤-

-过滤-

我会打电话给你的 table "Data"。

创建度量:

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 )

结果:

注意:代码假定您的日期是连续的(没有间隔)。如果他们有差距,事情就会更复杂一些。