Повышение скорости печати отчетов
Какой смысл в быстродействующей базе данных, если она целый день распечатывает отчет? Единственная большая и оказывающая влияние на производительность разница между формами и отчетами заключается в способе обработки разделов. В форме существует заголовок формы, область данных и примечание формы. В отчете имеются заголовок и примечание отчета, заголовок и примечание страницы, заголовки и примечания разделов, а также область данных. При открытии формы запрос, на котором она основана, выполняется только один раз. При открытии отчета он должен создать запрос (основываясь на запросе в источнике записей) для каждого раздела. Если запрос очень сложен, отчет должен выполнять его или ^некоторые его части несколько раз.
Ниже приводятся советы, следуя которым можно повысить скорость создания отчетов.
• Запрос, на котором основывается отчет, должен быть как можно более простым.
• Рекомендуется перенести вычисления в отчет. Если поместить вычисления в запрос, они будут выполняться для каждой строки. Однако, если поместить вычисления в отчет, они будут выполняться только при необходимости и пользователь сразу после расчета одной страницы данных Access увидит результат.
• Следует основывать запрос на возможно меньшем количестве таблиц. Поскольку отчет выполняет запрос больше чем один раз, может оказаться полезным создать таблицу необходимого результирующего набора. Отчет может обработать эту таблицу гораздо быстрее, чем снова выполнить запрос. Данный подход особенно полезен в том случае, если отчет основан на запросах с подчиненными запросами.
• Необходимо избегать использования подчиненных запросов в источнике отчета. Отчетам необходим большой объем памяти, а запрос с подчиненными запросами поглощает больше памяти, чем требуется в действительности.
• Следует проверить, необходим ли на самом деле подчиненный отчет. Подчиненные отчеты не только усложняют форматирование вывода, но и поглощают память, а также снижают производительность отчета. Тем не менее, подчиненные отчеты имеют широкое применение. Если существует несколько доменных функций, может оказаться, что подчиненный отчет выполняется быстрее, чем несколько вызовов данных функций.
• Необходимо избегать сортировки или группировки выражений. Чтобы правильно отображать сортировку или группировку. Access будет вынужден просчитывать каждое выражение больше чем один раз. Значения следует рассчитать до того, как они перейдут в отчет.
• Рекомендуется индексировать все поля, использующиеся для сортировки или группировки. Поскольку индексы по умолчанию сортируют записи, отчет без особых сложностей может отсортировать и сгруппировать данные непосредственно из индексированных полей.
• Источник записей не должен содержать агрегирующие доменные функции (DIookup). Снова это вынуждает отчет выполнять дополнительную обработку данных, что задерживает отображение отчета.
• Нет смысла в отображении для пользователей пустого отчета с записями #Еггог. Если отчет не содержит данных, следует отправить пользователю соответствующее сообщение и закрыть отчет. Определить, содержит ли отчет данные для отображения, можно с помощью свойств HasData или NoData.
Многие из методик, которые используются для повышения производительности форм, можно использовать и для отчетов. В данном разделе были описаны только те подходы, которые ограничиваются отчетами.