Добрый вечер, уважаемые форумчане. Появился вопрос по MS Access. Есть две таблицы - одна ответственные, другая статусы. Обе таблицы имеют поля id, дата начала и дата окончания и ответственного/статус за указанный промежуток времени. Периоды не совпадают. Т.е. ответственный может меняться со временем, а статус нет, и наоборот. Ранее работал с двумя таблицами, теперь появилась необходимость в их объединении в одну. В прилагаемом файле сделал таблицу итог, которая отображает то, что я хотел бы видеть - id, дата начала, дата окончания, статус, ответственный. Но что-то своими силами решить проблему не могу. Пытался через объединение двух таблиц с последующей "чисткой" ненужных значений. Но вариант получился достаточно громоздкий. Размер исходных данных около 5 млн. строк в одной таблице и около 12 млн. в другой. Решение необходимо в access. Буду благодарен, если подскажете в каком направлении копать, чтобы сделать это объединение.
Добрый вечер, уважаемые форумчане. Появился вопрос по MS Access. Есть две таблицы - одна ответственные, другая статусы. Обе таблицы имеют поля id, дата начала и дата окончания и ответственного/статус за указанный промежуток времени. Периоды не совпадают. Т.е. ответственный может меняться со временем, а статус нет, и наоборот. Ранее работал с двумя таблицами, теперь появилась необходимость в их объединении в одну. В прилагаемом файле сделал таблицу итог, которая отображает то, что я хотел бы видеть - id, дата начала, дата окончания, статус, ответственный. Но что-то своими силами решить проблему не могу. Пытался через объединение двух таблиц с последующей "чисткой" ненужных значений. Но вариант получился достаточно громоздкий. Размер исходных данных около 5 млн. строк в одной таблице и около 12 млн. в другой. Решение необходимо в access. Буду благодарен, если подскажете в каком направлении копать, чтобы сделать это объединение.GReeNbI4
Здравствуйте, Pelena. Спасибо большое за Ваш ответ. На файле с примером расчет аналогичен тому, что я сделал руками. Сегодня пытался разобраться с Вашим макросом, но, к сожалению, пока безуспешно. Ранее макросы в акцессе использовал только лишь для поочередного выполнения запросов (выборка, объединение, удаление). Завтра продолжу. Пытался так же перенести данный макрос на рабочую базу, но попытка была неудачной. Раза 4 точно начинал все с начала, и опять ошибка. Выскакивает дебаггер и приехали. Может есть вариант решения моей проблемы посредством выполнения ряда запросов? С запросами мне лично будет проще - и в работе и в дальнейшей возможной модификации. За ранее спасибо.
Здравствуйте, Pelena. Спасибо большое за Ваш ответ. На файле с примером расчет аналогичен тому, что я сделал руками. Сегодня пытался разобраться с Вашим макросом, но, к сожалению, пока безуспешно. Ранее макросы в акцессе использовал только лишь для поочередного выполнения запросов (выборка, объединение, удаление). Завтра продолжу. Пытался так же перенести данный макрос на рабочую базу, но попытка была неудачной. Раза 4 точно начинал все с начала, и опять ошибка. Выскакивает дебаггер и приехали. Может есть вариант решения моей проблемы посредством выполнения ряда запросов? С запросами мне лично будет проще - и в работе и в дальнейшей возможной модификации. За ранее спасибо.GReeNbI4
На файле с примером расчет аналогичен тому, что я сделал руками.
Не мешает еще разок проверить, и очень кропотливо - даты не бьют, однако... ps Решение требуется в Аксе, а пример - в XL, почему? Где ваши попытки запросов , объединений данных в Аксе?
На файле с примером расчет аналогичен тому, что я сделал руками.
Не мешает еще разок проверить, и очень кропотливо - даты не бьют, однако... ps Решение требуется в Аксе, а пример - в XL, почему? Где ваши попытки запросов , объединений данных в Аксе?TimSha
Поэтому я и писала, что данных маловато для отладки. На какой строке ошибка появляется? Сделайте пример с реальной структурой.
Обычными запросами здесь вряд ли получится, потому что надо объединять даты по принципу все+все (UNION) Хотя... попробую. Но на Вашем примере с реальной структурой и достаточным количеством данных
Поэтому я и писала, что данных маловато для отладки. На какой строке ошибка появляется? Сделайте пример с реальной структурой.
Обычными запросами здесь вряд ли получится, потому что надо объединять даты по принципу все+все (UNION) Хотя... попробую. Но на Вашем примере с реальной структурой и достаточным количеством данных
Ошибка у меня появлялась в этой строке - Set rst1 = CurrentDb.OpenRecordset(sq1) Хотя с вероятностью процентов 99, что это моя ошибка. С реальным примером "из жизни" будет достаточно сложно. т.к. с недавних пор прикрыт и интернет (пишу уже с дома вечером) и отправка писем на внешние ящики. Но постараюсь что-нить придумать.
Ошибка у меня появлялась в этой строке - Set rst1 = CurrentDb.OpenRecordset(sq1) Хотя с вероятностью процентов 99, что это моя ошибка. С реальным примером "из жизни" будет достаточно сложно. т.к. с недавних пор прикрыт и интернет (пишу уже с дома вечером) и отправка писем на внешние ящики. Но постараюсь что-нить придумать.GReeNbI4
Pelena, Начали разбираться с Вашим решением. Вопросы, которые возникли: 1) У Вас установлена связь между таблицами (Работа с базами данных - Схема данных). Ранее такого объединения не встречал. Если эту связь убрать, то макрос все равно считает. Нужна ли данная связь или ее можно убрать? Следует отметить, что один и тот же id может повторяться от 0 до бесконечности раз в каждой из таблиц, т.е. может быть статус, но не быть ответственного, быть один статус и один ответственный и один статус и десятки ответственных и соответственно наоборот. 2) переписать макрос на мою базу так и не получилось. Поэтому были добавлены мои данные в Ваш файл. Запустили макрос. Через 20 минут остановили. Посчиталось всего около 8 тыс. срок. Т.е. для полного расчета может уйти 2-3 часа, а может и более. Данную процедуру придется выполнять ежедневно. Т.е. сейчас на обновление всех баз уходит около 35-45 минут, и минуты 3-5 на обновление данных в PowerPivot. Если приходить на работу в 8-30, то не позднее чем в 9-30 все данные уже обновлены (т.е. добавлена вчерашняя дата (обновление происходит ночью) и в мои данные внесены все изменения за прошедшие периоды (если таковое было)). Сегодня добавлю файл-пример с большим количеством записей.
Pelena, Начали разбираться с Вашим решением. Вопросы, которые возникли: 1) У Вас установлена связь между таблицами (Работа с базами данных - Схема данных). Ранее такого объединения не встречал. Если эту связь убрать, то макрос все равно считает. Нужна ли данная связь или ее можно убрать? Следует отметить, что один и тот же id может повторяться от 0 до бесконечности раз в каждой из таблиц, т.е. может быть статус, но не быть ответственного, быть один статус и один ответственный и один статус и десятки ответственных и соответственно наоборот. 2) переписать макрос на мою базу так и не получилось. Поэтому были добавлены мои данные в Ваш файл. Запустили макрос. Через 20 минут остановили. Посчиталось всего около 8 тыс. срок. Т.е. для полного расчета может уйти 2-3 часа, а может и более. Данную процедуру придется выполнять ежедневно. Т.е. сейчас на обновление всех баз уходит около 35-45 минут, и минуты 3-5 на обновление данных в PowerPivot. Если приходить на работу в 8-30, то не позднее чем в 9-30 все данные уже обновлены (т.е. добавлена вчерашняя дата (обновление происходит ночью) и в мои данные внесены все изменения за прошедшие периоды (если таковое было)). Сегодня добавлю файл-пример с большим количеством записей.GReeNbI4
В настоящее время обновляю все записи. Это с 1\1\2014. Думаю можно разделить данные, т.е. выделить скажем последние три месяца, которые желательно обновлять ежедневно, т.к. различного рода правки бывают. Они конечно могут быть и по событиям установленным в прошлом году, но это происходит значительно реже. Скажем таблицу за прошлый год обновлять ежемесячно, последний квартал ежедневно.
В настоящее время обновляю все записи. Это с 1\1\2014. Думаю можно разделить данные, т.е. выделить скажем последние три месяца, которые желательно обновлять ежедневно, т.к. различного рода правки бывают. Они конечно могут быть и по событиям установленным в прошлом году, но это происходит значительно реже. Скажем таблицу за прошлый год обновлять ежемесячно, последний квартал ежедневно.GReeNbI4
Добавил файл с разными договорами, статусами и ответственными. Еще раз хотел обратить внимание на то, что договор может появиться в таблице со статусами, однако в таблице с ответственными может появиться либо позже, либо вообще не появиться. Т.е. такие id_договора терять нельзя, пусть отображаются пустыми. Даты не могут быть пустыми в таблице, т.е. не может быть установлена только дата начала и пустая дата окончания. Если дата окончания открытая, то я ограничиваю сегодняшней датой, т.е. dateserial(now();now();now()). Может есть вариант оптимальней, но этот способ работает :-)
Добавил файл с разными договорами, статусами и ответственными. Еще раз хотел обратить внимание на то, что договор может появиться в таблице со статусами, однако в таблице с ответственными может появиться либо позже, либо вообще не появиться. Т.е. такие id_договора терять нельзя, пусть отображаются пустыми. Даты не могут быть пустыми в таблице, т.е. не может быть установлена только дата начала и пустая дата окончания. Если дата окончания открытая, то я ограничиваю сегодняшней датой, т.е. dateserial(now();now();now()). Может есть вариант оптимальней, но этот способ работает :-)GReeNbI4
Сегодня взял за основу макрос Pelena, точнее его начало. Выбрал все возможные комбинации на id дат начала и дат окончаний. Пытался в даты добавить еще строки (Дата начала -1) и (Дата окончания+1) Но ряд дат все равно теряется. Может есть какие-либо предложения по созданию таблицы?
Сегодня взял за основу макрос Pelena, точнее его начало. Выбрал все возможные комбинации на id дат начала и дат окончаний. Пытался в даты добавить еще строки (Дата начала -1) и (Дата окончания+1) Но ряд дат все равно теряется. Может есть какие-либо предложения по созданию таблицы?GReeNbI4
У Вас в исходных данных есть несколько ошибок: дата начала превышает дату окончания. Я исправила, но надо ставить какую-то защиту от неверного ввода. Получилось довольно громоздко, поэтому и не выкладывала раньше. На 5 млн строк несколько часов считать будет, и львиную долю времени занимает именно объединение по датам. Тем более пришлось ставить дополнительные проверки.
У Вас в исходных данных есть несколько ошибок: дата начала превышает дату окончания. Я исправила, но надо ставить какую-то защиту от неверного ввода. Получилось довольно громоздко, поэтому и не выкладывала раньше. На 5 млн строк несколько часов считать будет, и львиную долю времени занимает именно объединение по датам. Тем более пришлось ставить дополнительные проверки.Pelena
У Вас в исходных данных есть несколько ошибок: дата начала превышает дату окончания. Я исправила, но надо ставить какую-то защиту от неверного ввода.
Данный пример я делал вручную, видимо допустил ошибки. Хотя проверял. Это моя ошибка, извиняюсь. В общей базе такого не может быть, т.е. программа не даст установить дату окончания меньше даты начала.
Получилось довольно громоздко, поэтому и не выкладывала раньше. На 5 млн строк несколько часов считать будет, и львиную долю времени занимает именно объединение по датам. Тем более пришлось ставить дополнительные проверки.
У Вас в исходных данных есть несколько ошибок: дата начала превышает дату окончания. Я исправила, но надо ставить какую-то защиту от неверного ввода.
Данный пример я делал вручную, видимо допустил ошибки. Хотя проверял. Это моя ошибка, извиняюсь. В общей базе такого не может быть, т.е. программа не даст установить дату окончания меньше даты начала.
Получилось довольно громоздко, поэтому и не выкладывала раньше. На 5 млн строк несколько часов считать будет, и львиную долю времени занимает именно объединение по датам. Тем более пришлось ставить дополнительные проверки.
Спасибо за помощь. Смотрю, пытаюсь разобраться.GReeNbI4