Excel 同一分类下进行跨行计算

例题描述

Excel 文件记录不同用户的事件发生时间,数据已按 USER ID 和 DATE 列排序,部分数据如下:


A

B

C

1

USER ID

EVENT ID

DATE

2

1

4

2020-01-01

3

1

5

2020-01-05

4

1

6

2020-01-13

5

2

7

2020-01-03

6

2

8

2020-01-05

7

2

9

2020-01-06

现在要计算事件真假列isTrue,规则是:同一个USER ID内,第1起事件一定为真,从第2起事件开始,如果与上一真事件的间隔大于等于10天,则该事件为真,其他事件均为假。结果应当如下:


A

B

C

D

1

USER ID

EVENT ID

DATE

isTrue

2

1

4

2020-01-01

1

3

1

5

2020-01-05

0

4

1

6

2020-01-13

1

5

2

7

2020-01-03

1

6

2

8

2020-01-05

0

7

2

9

2020-01-06

0

解法及简要说明

使用 Excel 插件 SPL XLL

在 D1 单元格写入公式:

=spl("=E(?).new(if('USER ID'!='USER ID'[-1],(t=DATE,1),if(DATE-t>=10,(t=DATE,1),0)):isTrue)",A1:C7)

如图:

..

简要说明:

如果本行的 USER ID 与上一行不同,则说明当前行是组内第 1 起事件,此时赋值 isTrue=1,同时临时变量 t= 本行 DATE。如果本行的 USER ID 与上一行相同,则进入组内计算,用临时变量和本行的日期计算间隔,大于等于 10 时赋值 isTrue=1,同时修改临时变量 t= 本行 DATE。

问答搜集

https://stackoverflow.com/questions/63838362/date-diff-between-many-rows-in-excel