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

Попытка определить количество дней для игрового события каждого пользователя по отношению к его первому событию.т.е. (t1-f), (t2-f) и т. д. для каждого идентификатора пользователя

Ввод

     date        id     event   changepoint of user id
    1/25/2019   10002   Play    f
    1/25/2019   10002   Play    t
    1/1/2019    10004   Play    f
    1/30/2019   10012   Play    f
    1/30/2019   10012   Play    t
    2/13/2019   10012   Play    t
    1/19/2019   10013   Play    f
    1/19/2019   10013   Play    t
    1/19/2019   10013   Play    t
    1/21/2019   10013   Play    t
    2/3/2019    10019   Play    f
    2/3/2019    10019   Play    t

С формулой, которую я использую, я просто получаю разницу дней междутекущий и предыдущий день.

Ожидаемый результат

date         id     event   cp  days
1/25/2019   10002   Play    f   0
1/25/2019   10002   Play    t   0  (t-f)
1/1/2019    10004   Play    f   0
1/30/2019   10012   Play    f   0
1/30/2019   10012   Play    t   0  (t-f)
2/13/2019   10012   Play    t   14 (t-f)
1/19/2019   10013   Play    f   0
1/19/2019   10013   Play    t   0  (t-f)
1/19/2019   10013   Play    t   0  (t-f)
1/21/2019   10013   Play    t   2  (t-f)
2/3/2019    10019   Play    f   0  (t-f)
2/3/2019    10019   Play    t   0  (t-f)

1 Ответ

0 голосов
/ 20 февраля 2019

Здесь я делаю несколько предположений:

  • что данные всегда сортируются по дате и идентификатору,
  • что идентификатор не появляется снова после изменения идентификатора (например,10002 больше не появляется после идентификатора 10019),
  • f всегда предшествует t, а последний t - это место, где требуется разница.

=IF(B2<>B3,IF(MIN(COUNTIFS(B:B,B2,D:D,"t"),COUNTIFS(B:B,B2,D:D,"f"))=0,0,MAXIFS($A:$A,$D:$D,"t",$B:$B,$B2)-MINIFS($A:$A,$D:$D,"f",$B:$B,$B2)),0)

enter image description here

MIN(COUNTIFS(B:B,B2,D:D,"t"),COUNTIFS(B:B,B2,D:D,"f"))=0 эта часть гарантирует, что в данных для расчета должны быть как минимум 1 t и 1 f.Если есть только f, MAXIFS вернет 0, а MINIFS вернет дату f, что приведет к большому отрицательному значению.

MAXIFS($A:$A,$D:$D,"t",$B:$B,$B2)-MINIFS($A:$A,$D:$D,"f",$B:$B,$B2) дает разницу в днях.

IF(B2<>B3, ... , 0) проверяет, не является ли следующий идентификатор другим, и если он такой же, просто укажите 0 (в противном случае разница в днях появится в каждой строке для идентификатора)


Если ваш Excel не поддерживает MINIFS и MAXIFS, вам придется использовать более длинную формулу массива (используйте Ctrl + Shift + Enter для правильного использования. Вы знаете, что сделали это правильно, если Excel поставил скобки вокруг формулы):

=IF(B2<>B3,IF(MIN(COUNTIFS(B:B,B2,D:D,"t"),COUNTIFS(B:B,B2,D:D,"f"))=0,0,MAX(IF(($D:$D="t")*($B:$B=$B2),$A:$A))-MIN(IF(($D:$D="f")*($B:$B=$B2),$A:$A))),0)

enter image description here


Послекомментарии, я понимаю, что я неправильно понял проблему.Вот новая формула, которая должна быть больше, чем вы ожидали:

=IF(D2="t",IF(COUNTIFS(B:B,B2,D:D,"t")=0,0,A2-SUMIFS($A:$A,$D:$D,"f",$B:$B,$B2)),0)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...