每个用户的获取日期的自定义周数
Custom Week number from Acquistion Date of each User
有没有办法计算从用户的第一个交易日期开始的自定义周数?用户 (emailId) 和 TransDate 列可能未处于排序状态,如下所示:
例如
+------+-------------+---------------------+
| WkNo | TransDate | emailId |
+------+-------------+---------------------+
| 1 | 2018-Aug-30 | moz.shea@abc.com |
| 1 | 2018-Aug-30 | moz.shea@abc.com |
| 10 | 2018-Nov-07 | moz.shea@abc.com |
| 1 | 2018-Aug-09 | zabi.prado@abc.com |
| 1 | 2018-Aug-09 | zabi.prado@abc.com |
| 6 | 2018-Sep-20 | zabi.prado@abc.com |
| 15 | 2018-Nov-23 | zabi.prado@abc.com |
| 21 | 2018-Dec-31 | zabi.prado@abc.com |
| 1 | 2018-Aug-20 | silo.whitte@abc.com |
| 5 | 2018-Sep-23 | silo.whitte@abc.com |
| 7 | 2018-10-11 | silo.whitte@abc.com |
| 7 | 2018-10-11 | silo.whitte@abc.com |
| 8 | 2018-Oct-14 | silo.whitte@abc.com |
| 9 | 2018-Oct-19 | silo.whitte@abc.com |
| 1 | 2018-Jul-01 | pablo.gucci@abc.com |
| 6 | 2018-Aug-10 | pablo.gucci@abc.com |
| 13 | 2018-Oct-03 | pablo.gucci@abc.com |
+------+-------------+---------------------+
我使用 FILTER 函数编写了以下公式,然后将每个用户的筛选日期提供给 DATEDIF 函数。但是,我没有得到如上所示的预期结果。
=ARRAYFORMULA(if(B2:B="","",1 + round(DATEDIF(min(sort(FILTER(B2:B,C2:C=C2:C),1,true)),sort(FILTER(B2:B,C2:C=C2:C),1,true),"D")/7)))
编辑:
公式结果:
1
7
7
7
8
10
10
13
13
14
16
16
16
17
19
22
27
还从上面的公式中删除了 SORT:
=ARRAYFORMULA(if(B2:B="","",1 + round(DATEDIF(min(sort(FILTER(B2:B,C2:C=C2:C),1,true)),FILTER(B2:B,C2:C=C2:C),"D")/7)))
公式结果:
10
10
19
7
7
13
22
27
8
13
16
16
16
17
1
7
14
两者似乎都有效,但给出了意想不到的结果,因为 MIN 计算的是单个日期 2018-Jul-01
,而不是每个用户的最小日期数组。我哪里错了?
您尝试过使用 MINIFS() 函数吗?
EG 具有以下内容
单元格中的日期 B2:B10
单元格中的电子邮件 C2:C10
单元格 A2 中的公式将给出单元格 C2 中电子邮件地址的最早日期
=MINIFS($B:$B, $C2:$C10, "="&C2)
您应该可以在公式中使用它来计算周数
对于那些可能面临类似挑战的人,这里是答案:
=ARRAYFORMULA(IF(B2:B="","",ROUND((B2:B-VLOOKUP(C2:C,SORT({C2:C,B2:B},2,1),2,0))/7)+1))
我们的想法是对 C 列进行 Vlookup,按升序向其传递经过切换和排序的日期范围。然后从 B 列日期中减去这些第一个日期,以获得所需的结果,即。几天或几周。
可以删除 +1,因为我用它只是将起始周显示为 1 而不是 0。因此结果可能略有不同。但是没有+1,结果是准确的,尤其是当你做队列的时候。
0
0
10
0
0
6
15
21
0
5
7
7
8
9
0
6
13
作为检查,我删除了 7 和 +1 的除法,然后检查了日期,它们是正确的。
0
0
69
0
0
42
106
144
0
34
52
52
55
60
0
40
94
希望对您有所帮助。
有没有办法计算从用户的第一个交易日期开始的自定义周数?用户 (emailId) 和 TransDate 列可能未处于排序状态,如下所示:
例如
+------+-------------+---------------------+
| WkNo | TransDate | emailId |
+------+-------------+---------------------+
| 1 | 2018-Aug-30 | moz.shea@abc.com |
| 1 | 2018-Aug-30 | moz.shea@abc.com |
| 10 | 2018-Nov-07 | moz.shea@abc.com |
| 1 | 2018-Aug-09 | zabi.prado@abc.com |
| 1 | 2018-Aug-09 | zabi.prado@abc.com |
| 6 | 2018-Sep-20 | zabi.prado@abc.com |
| 15 | 2018-Nov-23 | zabi.prado@abc.com |
| 21 | 2018-Dec-31 | zabi.prado@abc.com |
| 1 | 2018-Aug-20 | silo.whitte@abc.com |
| 5 | 2018-Sep-23 | silo.whitte@abc.com |
| 7 | 2018-10-11 | silo.whitte@abc.com |
| 7 | 2018-10-11 | silo.whitte@abc.com |
| 8 | 2018-Oct-14 | silo.whitte@abc.com |
| 9 | 2018-Oct-19 | silo.whitte@abc.com |
| 1 | 2018-Jul-01 | pablo.gucci@abc.com |
| 6 | 2018-Aug-10 | pablo.gucci@abc.com |
| 13 | 2018-Oct-03 | pablo.gucci@abc.com |
+------+-------------+---------------------+
我使用 FILTER 函数编写了以下公式,然后将每个用户的筛选日期提供给 DATEDIF 函数。但是,我没有得到如上所示的预期结果。
=ARRAYFORMULA(if(B2:B="","",1 + round(DATEDIF(min(sort(FILTER(B2:B,C2:C=C2:C),1,true)),sort(FILTER(B2:B,C2:C=C2:C),1,true),"D")/7)))
编辑:
公式结果:
1
7
7
7
8
10
10
13
13
14
16
16
16
17
19
22
27
还从上面的公式中删除了 SORT:
=ARRAYFORMULA(if(B2:B="","",1 + round(DATEDIF(min(sort(FILTER(B2:B,C2:C=C2:C),1,true)),FILTER(B2:B,C2:C=C2:C),"D")/7)))
公式结果:
10
10
19
7
7
13
22
27
8
13
16
16
16
17
1
7
14
两者似乎都有效,但给出了意想不到的结果,因为 MIN 计算的是单个日期 2018-Jul-01
,而不是每个用户的最小日期数组。我哪里错了?
您尝试过使用 MINIFS() 函数吗?
EG 具有以下内容
单元格中的日期 B2:B10 单元格中的电子邮件 C2:C10
单元格 A2 中的公式将给出单元格 C2 中电子邮件地址的最早日期
=MINIFS($B:$B, $C2:$C10, "="&C2)
您应该可以在公式中使用它来计算周数
对于那些可能面临类似挑战的人,这里是答案:
=ARRAYFORMULA(IF(B2:B="","",ROUND((B2:B-VLOOKUP(C2:C,SORT({C2:C,B2:B},2,1),2,0))/7)+1))
我们的想法是对 C 列进行 Vlookup,按升序向其传递经过切换和排序的日期范围。然后从 B 列日期中减去这些第一个日期,以获得所需的结果,即。几天或几周。
可以删除 +1,因为我用它只是将起始周显示为 1 而不是 0。因此结果可能略有不同。但是没有+1,结果是准确的,尤其是当你做队列的时候。
0
0
10
0
0
6
15
21
0
5
7
7
8
9
0
6
13
作为检查,我删除了 7 和 +1 的除法,然后检查了日期,它们是正确的。
0
0
69
0
0
42
106
144
0
34
52
52
55
60
0
40
94
希望对您有所帮助。