Я пытаюсь перевести существующий отчет Access в отчет SSRS 2008 на стороне клиента и испытываю ужасную производительность при фильтрации.
В качестве фона я упросту цель отчета. Это упрощенный вид модели:
Orgainzation
|
Person
|
Credential
В организациях есть люди, а у людей есть полномочия. В отчете перечислены люди, сгруппированные по организациям, и два столбца, в которых указан человек, представляют собой разделенные запятыми списки учетных данных, которые они имеют в организации (они, конечно, хранятся в нормализованном виде, но я объединяю их в процедуре который извлекает список, используя обычный FOR XML PATH
трюк). При этом отчет работает нормально и работает приемлемо. Проблема заключается в том, что в существующем отчете содержится сводка по каждому типу учетных данных, представленному в списке, а также общее количество.
Поскольку два составных списка различаются, я не могу получить внешние результаты по отдельности и просто сгруппировать их. Вместо этого мне нужно выполнить второй поиск, чтобы собрать все отдельные типы учетных данных по организации. Это не проблема, и SQL работает быстро, но отчет - это другая история.
Для тех, кто ведет счет дома, набор результатов для человека составляет примерно 10000 строк, скажем, в 500 группах. Сводный результирующий набор на уровне организации, вероятно, состоит из 1500-2000 строк в 500 группах (это, в основном, 3-4 различных типа учетных данных на организацию)
Основной отчет выложен в виде таблицы, а в нижнем колонтитуле группы мне пришлось разместить подотчет, который обрабатывает сводные данные уровня организации для учетных данных. В подотчете я добавил фильтр строк, который фильтрует организацию, используя параметр отчета. Элемент подотчета в нижнем колонтитуле группы берет сгруппированную организацию и передает ее в подотчет. Это функционал , но его производительность не приемлема. Рендеринг отчета о тестировании для подмножества данных (только 200 внешних строк) занял почти 30 минут. Попытка запустить весь набор результатов вызвала OutOfMemoryException
примерно через час, и приложение использовало ~ 900 МБ памяти.
Учитывая, что основной отчет без вложенный отчет выполняется быстро, я предполагаю, что это связано либо с вложенными отчетами, фильтрацией, либо с обоими.
Итак, вот мой вопрос:
Есть ли способ улучшить производительность фильтров строк в подотчете?