Коллеги, добрый день. В очередной раз очень очень нужна Ваша помощь. Возможно ли сделать макрос: Существует файл, в котором примерно более 500 000 обращений, необходимо проверить повторяются один и тот же номер 2 раза с одной и той же темой, и сравнить разницу даты между создания второго обращения и даты закрытия первого обращения. Прилагаю файл, на первом листе - данные и где нужно чтобы работал макрос на втором листе содержится "Логика" по которой должен происходить расчет на третьем, что должно получаться.
Коллеги, добрый день. В очередной раз очень очень нужна Ваша помощь. Возможно ли сделать макрос: Существует файл, в котором примерно более 500 000 обращений, необходимо проверить повторяются один и тот же номер 2 раза с одной и той же темой, и сравнить разницу даты между создания второго обращения и даты закрытия первого обращения. Прилагаю файл, на первом листе - данные и где нужно чтобы работал макрос на втором листе содержится "Логика" по которой должен происходить расчет на третьем, что должно получаться.Vladimir32
Если примерно знать, сколько строк нужно анализировать (сколько обращений в течении 2х, 3х дней , то можно усложнить, но ускорить для большого объема. тут типа на 20 строк. Надо на 100, то заменить на 101 и 100, 21 и 20 в формуле
Если примерно знать, сколько строк нужно анализировать (сколько обращений в течении 2х, 3х дней , то можно усложнить, но ускорить для большого объема. тут типа на 20 строк. Надо на 100, то заменить на 101 и 100, 21 и 20 в формуле
bmv98rus, формула ранее тут и использовалась, количество строк постоянно меняется, а формулой он очень долго считает( поэтому и возникает вопрос в макросе.(
bmv98rus, формула ранее тут и использовалась, количество строк постоянно меняется, а формулой он очень долго считает( поэтому и возникает вопрос в макросе.(Vladimir32
Vladimir32, именно по этому и сделана формула 2. 500к строк это не мало, но с учетом ограничений в разумном количестве строк в которых может встретится "повтор" считать будет в разы быстрее. Вы попробуйте. Уже были примеры, когда также считалась статистика по огромному количеству строк и переходя от расчета по всему столбцу к потенциальному блоку получали расчет в секунды вместо минут. Можете данные полноценные дать? Мне интересно, я сам проверю.
Vladimir32, именно по этому и сделана формула 2. 500к строк это не мало, но с учетом ограничений в разумном количестве строк в которых может встретится "повтор" считать будет в разы быстрее. Вы попробуйте. Уже были примеры, когда также считалась статистика по огромному количеству строк и переходя от расчета по всему столбцу к потенциальному блоку получали расчет в секунды вместо минут. Можете данные полноценные дать? Мне интересно, я сам проверю.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Пятница, 22.02.2019, 07:50
то как тогда? Это повторка или нет? И приложите файлик побольше (как можно больше, чтобы в xlsb влез в 100 кb), где много повторов, самостоятельно рисовать не хочется
Vladimir32, у Вас в пояснении формула, сравнивающая две соседние строки. А если повтор через несколько строк? Например
то как тогда? Это повторка или нет? И приложите файлик побольше (как можно больше, чтобы в xlsb влез в 100 кb), где много повторов, самостоятельно рисовать не хочется_Boroda_
_Boroda_, Вы совершенно правы! если повтор, через несколько строк - это тоже повтор. К сожалению основной файл приложить не могу, т.к.содержит конф.информацию, и с рабочего места даже нельзя открывать форум, поэтому прорисовал файлик, добавив разный условий повторений. В целом суть этого макроса - Необходимо выявить повторку, а повторкой является код обращения, если клиент с таким же номером и по такой же теме (в основном файле тем больше 100) обратился повторно ранее чем за 2 ое суток после закрытия прежнего обращения. Он может обратиться и 10 раз, но если тема обращения будет другая, то это не повтор, а в файл они загружаются выгрузкой.
_Boroda_, Вы совершенно правы! если повтор, через несколько строк - это тоже повтор. К сожалению основной файл приложить не могу, т.к.содержит конф.информацию, и с рабочего места даже нельзя открывать форум, поэтому прорисовал файлик, добавив разный условий повторений. В целом суть этого макроса - Необходимо выявить повторку, а повторкой является код обращения, если клиент с таким же номером и по такой же теме (в основном файле тем больше 100) обратился повторно ранее чем за 2 ое суток после закрытия прежнего обращения. Он может обратиться и 10 раз, но если тема обращения будет другая, то это не повтор, а в файл они загружаются выгрузкой.Vladimir32
Михаил, чем определяется дата закрытия? Что делать, если последовательность дней для одного номера одного типа обращения: 1; 2; 4; 6 - это одно обращение?
Михаил, чем определяется дата закрытия? Что делать, если последовательность дней для одного номера одного типа обращения: 1; 2; 4; 6 - это одно обращение?anvg
Андрей, я так понял, и реализовано в формуле, что если от даты закрытия до даты открытия еще одного обращения, прошло меньше 2 дней, то это повтор. Правда не учтена ситуация, когда первое еще не закрыто, а второе уже открывается, но это второй вопрос. Посмотреть бы на реальные данные.
Андрей, я так понял, и реализовано в формуле, что если от даты закрытия до даты открытия еще одного обращения, прошло меньше 2 дней, то это повтор. Правда не учтена ситуация, когда первое еще не закрыто, а второе уже открывается, но это второй вопрос. Посмотреть бы на реальные данные.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
bmv98rus, формула ранее тут и использовалась, количество строк постоянно меняется, а формулой он очень долго считает( поэтому и возникает вопрос в макросе.(
bmv98rus, формула ранее тут и использовалась, количество строк постоянно меняется, а формулой он очень долго считает( поэтому и возникает вопрос в макросе.(Vladimir32
bmv98rus, если первое обращение еще не закрыто, оно не попадет в данную выгрузку, так как если его не закрывал, его не обрабатывали- следовательно повтора не спровоцирована. а приложить файл не могу( ранее описывал причину).
bmv98rus, если первое обращение еще не закрыто, оно не попадет в данную выгрузку, так как если его не закрывал, его не обрабатывали- следовательно повтора не спровоцирована. а приложить файл не могу( ранее описывал причину).Vladimir32
Vladimir32, Я не настаиваю, я просто написал формулу, которая ведет пересчет не по всему массиву а только разумной части. Разумная часть - это количество обращений за период дней в которых мы ищем повторные обращения. Ну нет смысла сравнивать обращения недельной давности если надо проверить ваши 2 дня. Кстати 2 дня - это 24 часа или …нужно что б просто даты отличались на 2 дня? Скажите, а конечная цель, именно пометить в общем списке или вывести список повторных или …. Просто запрос SQL или через PoweQuery мне кажется реальным.
[vba]
Код
SELECT `Лист1$`.`Дата закрытия`, `Лист1$`.`Дата создания`, `Лист1$`.`Код#обращения`, `Лист1$`.`Номер клиента`, `Лист1$`.`Тема обращения` FROM `Лист1$` `Лист1$`, `Лист1$` `Лист1$_1` WHERE `Лист1$`.`Номер клиента` = `Лист1$_1`.`Номер клиента` AND `Лист1$`.`Тема обращения` = `Лист1$_1`.`Тема обращения` AND `Лист1$`.`Дата создания` > `Лист1$_1`.`Дата закрытия` AND `Лист1$`.`Дата создания` < (`Лист1$_1`.`Дата закрытия`+2)
[/vba]
Пример положить в с:\temp или менять путь в Connetion
Vladimir32, Я не настаиваю, я просто написал формулу, которая ведет пересчет не по всему массиву а только разумной части. Разумная часть - это количество обращений за период дней в которых мы ищем повторные обращения. Ну нет смысла сравнивать обращения недельной давности если надо проверить ваши 2 дня. Кстати 2 дня - это 24 часа или …нужно что б просто даты отличались на 2 дня? Скажите, а конечная цель, именно пометить в общем списке или вывести список повторных или …. Просто запрос SQL или через PoweQuery мне кажется реальным.
[vba]
Код
SELECT `Лист1$`.`Дата закрытия`, `Лист1$`.`Дата создания`, `Лист1$`.`Код#обращения`, `Лист1$`.`Номер клиента`, `Лист1$`.`Тема обращения` FROM `Лист1$` `Лист1$`, `Лист1$` `Лист1$_1` WHERE `Лист1$`.`Номер клиента` = `Лист1$_1`.`Номер клиента` AND `Лист1$`.`Тема обращения` = `Лист1$_1`.`Тема обращения` AND `Лист1$`.`Дата создания` > `Лист1$_1`.`Дата закрытия` AND `Лист1$`.`Дата создания` < (`Лист1$_1`.`Дата закрытия`+2)
[/vba]
Пример положить в с:\temp или менять путь в Connetionbmv98rus
skais, да вот только что просмотрел файл, попробовал протестировать, он считает, но если кол-во повторов по 1 номеру больше, он их не видит видит только крайний. я ранее в сообщении #6 добавлял файл, там на Листе "Как должно быть" больше примеров, если скопировать их на первый лист 4 столбца, и попробовать выполнить, и с примером номера: 444444 - Продажи - там 3 обращения - 2 повтора - он видит только 3й((( Если повтор только 1 он считает хорошо.
skais, да вот только что просмотрел файл, попробовал протестировать, он считает, но если кол-во повторов по 1 номеру больше, он их не видит видит только крайний. я ранее в сообщении #6 добавлял файл, там на Листе "Как должно быть" больше примеров, если скопировать их на первый лист 4 столбца, и попробовать выполнить, и с примером номера: 444444 - Продажи - там 3 обращения - 2 повтора - он видит только 3й((( Если повтор только 1 он считает хорошо.Vladimir32
bmv98rus, попробовал запустить Ваш файл, он находит нужные обращения те - что нужны. Но вот вопрос, а как ( точнее где он находится ) можно изменить код, если поля называются чуть по другому? чтобы попробовать на основном файле нужно поправить поля, так как на ресурс этот не могу закинуть(
А что касается повтора, это является 2 дня, а именно 48 часов, т.е. если это 48 часов и 1 минута - это уже не повтор, но это я потестировал на Вашем файле в плоть до минуты, делает он все верно.
Конечной целью является любым способом вычислить повторку, т.е.останется в файле одна повторка, или же просто рядом проставится 1 абсолютно не важно, главное найти номера обращений с повторкой. Удобнее если возле обращения будет стоять 1 (или слово "Повторка"). Есть огромный файл базы в котором есть все обращения (это порядка 900 000 за 2 месяца) он собирает данные из многих файлов, и делает картину по каждому обращению. Т.е.в файле повторки он выявит повторные обращения, и макросом по массиву пройдет (аналогом ВРП) - и пометит повторное оно или нет.
Ваша мысль мне нравится, только вот не могу понять, где это прописать в файле(
bmv98rus, попробовал запустить Ваш файл, он находит нужные обращения те - что нужны. Но вот вопрос, а как ( точнее где он находится ) можно изменить код, если поля называются чуть по другому? чтобы попробовать на основном файле нужно поправить поля, так как на ресурс этот не могу закинуть(
А что касается повтора, это является 2 дня, а именно 48 часов, т.е. если это 48 часов и 1 минута - это уже не повтор, но это я потестировал на Вашем файле в плоть до минуты, делает он все верно.
Конечной целью является любым способом вычислить повторку, т.е.останется в файле одна повторка, или же просто рядом проставится 1 абсолютно не важно, главное найти номера обращений с повторкой. Удобнее если возле обращения будет стоять 1 (или слово "Повторка"). Есть огромный файл базы в котором есть все обращения (это порядка 900 000 за 2 месяца) он собирает данные из многих файлов, и делает картину по каждому обращению. Т.е.в файле повторки он выявит повторные обращения, и макросом по массиву пройдет (аналогом ВРП) - и пометит повторное оно или нет.
Ваша мысль мне нравится, только вот не могу понять, где это прописать в файле(Vladimir32
skais, да - только что протестировал, я не видел Вашего прежнего (его еще не было на тот момент когда отвечал #18). Это то что я хотел))) Спасибо Вам огромное!) Вот только один момент (я думаю это прям не критично) например с обращением 607 - там смысл в том, что у абонента 3 обращения третье дублирует первое (но это крайняя редкость, поэтому даже и не важно!). А вот еще такой вопрос (скорее всего это уже будет из мира фантастики, но все же), у нас получилось, что мы видим повторное обращение (после выполнения макроса), а возможно ли проставить "Повторка" возле обращение которое спровоцировала повторку, т.е.не возле второго закрытого, а возле того - что было закрыто первым?
skais, да - только что протестировал, я не видел Вашего прежнего (его еще не было на тот момент когда отвечал #18). Это то что я хотел))) Спасибо Вам огромное!) Вот только один момент (я думаю это прям не критично) например с обращением 607 - там смысл в том, что у абонента 3 обращения третье дублирует первое (но это крайняя редкость, поэтому даже и не важно!). А вот еще такой вопрос (скорее всего это уже будет из мира фантастики, но все же), у нас получилось, что мы видим повторное обращение (после выполнения макроса), а возможно ли проставить "Повторка" возле обращение которое спровоцировала повторку, т.е.не возле второго закрытого, а возле того - что было закрыто первым?Vladimir32