Пользовательский номер недели от даты приобретения каждого пользователя - PullRequest
0 голосов
/ 20 октября 2018

Есть ли способ расчета номеров пользовательских недель, которые начинаются с первой даты транзакции пользователя?Столбцы Users (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

Также удаленоСОРТИРОВАТЬ из приведенной выше формулы:

=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 вместо массиваМинимальные даты на пользователя.Куда я иду не так?

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

Для тех, кто может столкнуться с подобной проблемой, вот ответ:

=ARRAYFORMULA(IF(B2:B="","",ROUND((B2:B-VLOOKUP(C2:C,SORT({C2:C,B2:B},2,1),2,0))/7)+1))

Идея состоит в том, чтобы выполнить Vlookup для столбца C, передав ему переключенный и отсортированный диапазон дат в порядке возрастания.Эти первые даты затем вычитаются из дат столбца 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

Надеюсь, это поможет.

0 голосов
/ 20 октября 2018

Вы пытались использовать функцию MINIFS ()?

EG со следующими

Даты в ячейках B2: B10 Письма в ячейках C2: C10

Формула вв ячейке A2 указывается самая ранняя дата для адреса электронной почты в ячейке C2

=MINIFS($B$2:$B$10, $C2:$C10, "="&C2)

. Вы можете использовать это в своей формуле для расчета количества недель

.
...