2013-08-05 3 views
1

Я занимаюсь большим приложением, в котором я использую группировку столбцов в своих отчетах. К сожалению, производительность жалобно медленная, и мой клиент жалуется на это. Например, если они запускают отчет за 24-часовой период, для возврата требуется ~ 10 минут (~ 800 отображаемых страниц данных). Если они запустили его на месяц, он никогда не вернется!Улучшение скорости группировки столбцов в службах Microsoft Reporting Services

Сам запрос на 24-часовой период возвращается через ~ 20 секунд. Баланс времени поворачивается и генерирует отчет.

Есть ли у вас какие-либо предложения, как я мог бы это сделать?

Спасибо!

ответ

0

Убедитесь, что вы сортируете на стороне отчета, а не на стороне запроса. Это может ускорить процесс. Сортировка групп или сортировка по совокупным значениям намного проще в отчете, чем в запросе, и часто более эффективны.

Ознакомьтесь с этими советами для ускорения работы. Troubleshooting Reports: Report Performance

0

Reporting Services состоит из трех этапов в создании отчета:

  • извлечения данных (выполнение запросов для возврата результатов набора данных)
  • обработки (группировки и объединения возвращаемых данных в соответствии с доклада макет)
  • Rendering (генерирование выбранного выхода, например HTML, Excel)

Если ваш запрос возвращает данные за ~ 20 секунд, но отчет занимает 10 минут для рендеринга, то основная проблема связана со скоростью обработки отчета (рендеринг редко является узким местом производительности), как вы правильно приняли. Лучший способ повысить производительность - отключить загрузку как можно большей части агрегации в исходную базу данных, переписав свой запрос, чтобы выполнить агрегацию. Платформа базы данных обычно намного быстрее при агрегировании данных, чем в службах Reporting Services. В идеале вы хотите вернуть минимальный объем данных, необходимых для отчета, чтобы иметь как можно меньше обработки.

Если у вас есть доступ к базе данных ReportServer, выполнить этот запрос, чтобы подтвердить, где узкое место:

SELECT ItemPath, Format, TimeStart, TimeEnd, TimeDataRetrieval, TimeProcessing, TimeRendering, [Status], ByteCount, [RowCount] 
FROM ExecutionLog3 
WHERE ItemPath LIKE '%My Report Name%' 

TimeDataRetrieval, TimeProcessing и TimeRendering должны дать вам четкое представление о том, где проблема. Если проблема связана с TimeProcessing, попробуйте переписать запрос, чтобы уменьшить данные для отчета, а также просмотрите possible design issues, чтобы узнать, применимо ли какое-либо из них.

+0

Благодарим вас за консультацию ... Основная проблема с обработкой отчета - использование групп столбцов и связанного с ними поворота, который сопровождает эти группы. Я повторно написал запрос для поворота в связанной хранимой процедуре, однако производительность снижалась настолько низко, что я даже не смог придумать время, которое теперь потребовалось для запроса данных; Я отказался от запроса, прежде чем он вернется! Я использовал команду PIVOT, а также сделал поворот вручную. – jasonc24

+0

Запрос на самом деле довольно прост, и, помимо поворота результирующего набора, не происходит многого. Это двухстоечное внутреннее соединение - ничего необычного. Однако в отчете есть много «логики». Такие вещи, как цветные кодирующие ячейки, показывающие/скрывающие столбцы на основе других полей, гиперссылок и т. Д. Насколько эти факторы влияют, в отличие от самой группировки столбцов? – jasonc24

+0

Знаете ли вы, что производительность других отчетов на этом сервере? Просто пытайтесь работать, если у вас есть проблема с сервером или проблема с отчетами. – Nathan