Запись в таблице содержит ряд допустимых дат, например: * tbl1.start_date * и * tbl1.end_date *. Поэтому, чтобы гарантировать, что я получаю все записи, которые действительны для определенного диапазона дат, логика выбора: <...> WHERE end_date >= @dtFrom AND start_date < @dtTo
(параметр @dtTo, используемый в инструкции SQL, фактически является расчетным на следующий день параметра * @ prmDt_To *, используемого в отчет).SSRS 2008 - множественные группировки для диапазона дат
Теперь в отчете мне нужно подсчитать количество записей за каждый день в указанном диапазоне данных и включить дни, если они есть, для которых не было действительных записей. Таким образом, полученная запись может быть подсчитана в несколько разных дней. Я могу сделать это относительно легко с рекурсивным CTE в наборе данных, но мое эмпирическое правило заключается в том, чтобы избежать ненужной загрузки базы данных SQL и вместо этого вернуть только необходимые необработанные данные и позволить процессору Report обрабатывать группировки. Итак, есть ли способ сделать это в SSRS?
Спасибо, Сергей
Рекурсивный КТЭ, по-видимому, является болезненным запросом, всего за пару дней извлечение данных занимает почти 20 секунд, что неприемлемо в среде, в которой этот отчет разработан. Если я просто извлечу данные для диапазона дат, без CTE, выполнение будет менее 2 секунд. Вот почему я пытаюсь создать механизм для создания Report Designer. – krysolov
Часть этого будет зависеть от данных, которые вы присоединяетесь к CTE. Попробуйте заменить CTE на таблицу temp, чтобы узнать, изменит ли это производительность. Если это так, то SQL выбирает плохой план для CTE, но таблица temp должна быть прекрасным обходным решением. Кроме того, убедитесь, что у вас есть соответствующие индексы на ваших таблицах. –