Есть несколько способов справиться с этим. Сначала вы можете перенести создание данных на запуск самого отчета. Я считаю, что это лучший способ обработки, тогда вы можете использовать временные таблицы для временного размещения ваших данных, и ни у кого не возникнет проблем с параллелизмом, если несколько человек попытаются запустить отчет одновременно. В зависимости от того, сколько отчетов мы говорим, это может занять некоторое время, поэтому вам может потребоваться и другое краткосрочное решение.
Во-вторых, вы можете переместить все таблицы отчетов в другую базу данных, для которой задан простой режим, и обрезать их перед выполнением запросов для заполнения. Это ближе всего к вашему текущему процессу, но если несколько пользователей пытаются запустить один и тот же отчет, может возникнуть проблема.
В-третьих, вы можете настроить задание для заполнения таблиц (все еще в отдельной базе данных, настроенной на простое восстановление) один раз в день (усечение в это время). Тогда любой, кто запустит отчет в тот день, увидит те же данные, и проблем с параллелизмом не возникнет. Однако данные не будут актуальными. Вы также можете настроить хранилище данных отчетности, но в вашем случае это, вероятно, излишне.