Привет! Посмотрела несколько статей здесь на сайте, но не получилось найти подходящего решения для себя. Что есть: таблица на 600 тыс строк с почасовой выгрузкой обращений от пользователей. Нужно посчитать повторные обращения по полю emailHash, попадающие в период первого обращения(столбец A) и сутки после него. Пробовала вот такую формулу: [=ЕСЛИ(СЧЁТЕСЛИМН($A$2:$A$217;"<="&C2;$A$2:$A$217;">="&A2;$B$2:$B$217;B2)>1;1;0)] Она не считает корректный результат, пожалуйста, помогите разобраться, где я ошиблась.
Плюс просьба: если есть вариант написать макрос под такой кейс - буду благодарна в помощи, потому что расчёт формулы на основной таблице в 600 тыс строк руинит файл.
Сюда прилагаю фрагмент файла.
Привет! Посмотрела несколько статей здесь на сайте, но не получилось найти подходящего решения для себя. Что есть: таблица на 600 тыс строк с почасовой выгрузкой обращений от пользователей. Нужно посчитать повторные обращения по полю emailHash, попадающие в период первого обращения(столбец A) и сутки после него. Пробовала вот такую формулу: [=ЕСЛИ(СЧЁТЕСЛИМН($A$2:$A$217;"<="&C2;$A$2:$A$217;">="&A2;$B$2:$B$217;B2)>1;1;0)] Она не считает корректный результат, пожалуйста, помогите разобраться, где я ошиблась.
Плюс просьба: если есть вариант написать макрос под такой кейс - буду благодарна в помощи, потому что расчёт формулы на основной таблице в 600 тыс строк руинит файл.
dontthinkso999, не понятно что за строки без emailHash? Если читать вопрос как ТЗ то первым делом я бы сделал табличку с этими первыми обращениями и emailHash, и уже к ним подсчитывал сколько раз в основной таблице есть эти emailHash с условием что дата меньше чем текущая+1 Макрос тоже можно подумать как написать, но для этого нужно точно понимать задачу. И желательно знать основное - зачем?
P.S. а косяк потому что эксель не умеет этой функцией подсчитывать эти значения!
dontthinkso999, не понятно что за строки без emailHash? Если читать вопрос как ТЗ то первым делом я бы сделал табличку с этими первыми обращениями и emailHash, и уже к ним подсчитывал сколько раз в основной таблице есть эти emailHash с условием что дата меньше чем текущая+1 Макрос тоже можно подумать как написать, но для этого нужно точно понимать задачу. И желательно знать основное - зачем?
P.S. а косяк потому что эксель не умеет этой функцией подсчитывать эти значения!Hugo
В табличке в файле прилагаю фрагмент основной таблицы, там 4 столбца: дата и время обращения, emailHash - это аккаунт пользователя, дата времени обращения+1.
Мне нужно высчитать количество аккаунтов пользователей, которые обращались повторно спустя сутки после первого обращения. После я планирую выводить в сводную доли таких аккаунтов в масштабах месяца, квартала и тд. Для чего: для работы с повторными обращениями в разных срезах, каналах, продуктах.
Hugo, привет.
В табличке в файле прилагаю фрагмент основной таблицы, там 4 столбца: дата и время обращения, emailHash - это аккаунт пользователя, дата времени обращения+1.
Мне нужно высчитать количество аккаунтов пользователей, которые обращались повторно спустя сутки после первого обращения. После я планирую выводить в сводную доли таких аккаунтов в масштабах месяца, квартала и тд. Для чего: для работы с повторными обращениями в разных срезах, каналах, продуктах.dontthinkso999
dontthinkso999, вообще и та формула считает вроде как правильно, только файл нужно обрезать после 217-й строки чтоб не висло при тестах. Беру назад слова что не считает, в 365 вроде как считает. Другой вариант формулы
результаты совпадают, только я высчитывал сколько раз повторы в сутки, и без допстолбца. Там всего 8 таких emailHash. На PQ ведь тоже можно посчитать, раз уж там умные таблицы. Только я не возьмусь.
dontthinkso999, вообще и та формула считает вроде как правильно, только файл нужно обрезать после 217-й строки чтоб не висло при тестах. Беру назад слова что не считает, в 365 вроде как считает. Другой вариант формулы
результаты совпадают, только я высчитывал сколько раз повторы в сутки, и без допстолбца. Там всего 8 таких emailHash. На PQ ведь тоже можно посчитать, раз уж там умные таблицы. Только я не возьмусь.Hugo
dontthinkso999, написал макрос, но он сейчас ставит количество у всех где есть повтор в часе, не только у первого.
[vba]
Код
Sub tt() Dim a, i&, t$, Dic As Object, Dic2 As Object Dim el, k, kk, x&
a = Range("B2", Cells(Rows.Count, "A").End(xlUp)).Value ReDim b(1 To UBound(a), 1 To 2)
Set Dic = CreateObject("Scripting.Dictionary") With Dic .CompareMode = 1 For i = 1 To UBound(a) t = Trim(a(i, 2)) If Len(t) Then If Not .exists(t) Then .Add t, CreateObject("Scripting.Dictionary") .Item(t).Item(a(i, 1)) = i End If Next End With
For Each el In Dic.keys Set Dic2 = Dic.Item(el) If Dic2.Count > 1 Then For Each k In Dic2.keys x = 1 For Each kk In Dic2.keys If k <> kk Then If Abs(k - kk) < 1 Then x = x + 1: b(Dic2.Item(k), 1) = x End If Next Next End If
Next [f2].Resize(UBound(b), 1) = b End Sub
[/vba] Т.е. сейчас вот так отрабатывает, нужно ли оно такое, или что-то нужно подкрутить ещё...
dontthinkso999, написал макрос, но он сейчас ставит количество у всех где есть повтор в часе, не только у первого.
[vba]
Код
Sub tt() Dim a, i&, t$, Dic As Object, Dic2 As Object Dim el, k, kk, x&
a = Range("B2", Cells(Rows.Count, "A").End(xlUp)).Value ReDim b(1 To UBound(a), 1 To 2)
Set Dic = CreateObject("Scripting.Dictionary") With Dic .CompareMode = 1 For i = 1 To UBound(a) t = Trim(a(i, 2)) If Len(t) Then If Not .exists(t) Then .Add t, CreateObject("Scripting.Dictionary") .Item(t).Item(a(i, 1)) = i End If Next End With
For Each el In Dic.keys Set Dic2 = Dic.Item(el) If Dic2.Count > 1 Then For Each k In Dic2.keys x = 1 For Each kk In Dic2.keys If k <> kk Then If Abs(k - kk) < 1 Then x = x + 1: b(Dic2.Item(k), 1) = x End If Next Next End If
Next [f2].Resize(UBound(b), 1) = b End Sub
[/vba] Т.е. сейчас вот так отрабатывает, нужно ли оно такое, или что-то нужно подкрутить ещё...