2014-11-04 2 views
0

У меня есть элемент управления Report Viewer, как так:ReportViewer Control Останавливает Загрузка

<rsweb:ReportViewer ID="ReportViewer1" style="margin-bottom:78px;" runat="server" 
AsyncRendering="true" SizeToReportContent="true" Width="100%" Height="100%" 
KeepSessionAlive="true"></rsweb:ReportViewer> 

и следующие два свойства изменяются в C# код:

ReportViewer1.ServerReport.Timeout = Int32.MaxValue; 
ReportViewer1.ProcessingMode = ProcessingMode.Remote; 

Вопрос заключается в том, что начинается для просмотра отчетов загрузка обычно и случайным образом останавливается примерно через минуту или около того. Теперь в отчете, пытающемся загрузить, извлекается много данных из куба OLAP (около 100 000 строк). Он сгруппирован с функциональностью expand/collapse в SSRS. Когда я фильтрую данные из отчета, он загружается нормально. Отчет также обычно загружается в Visual Studio 2012, а также в ReportManager (занимает несколько минут, но загружается).

Так что мой вопрос: Это слишком много для средства управления ReportViewer для визуализации или я что-то упускаю?

Edit:

Причина в том, для того, чтобы быть сгруппированы в SSRS потому, что ни в коем случае я являюсь экспертом в MDX. Запросы MDX, которые я использую, это те, которые автоматически генерируются SSRS. Существует многомерные выражения запрос генерируется (Измененные имена столбцов, размеров и мер):

SELECT NON EMPTY { [Measures].[Column1], [Measures].[Column2], 
[Measures].[Column3], [Measures].[Column4], 
[Measures].[Column5], [Measures].[Column6], 
[Measures].[Column7] } ON COLUMNS, 
NON EMPTY { ([Dimension1].[Value1].[Value1].ALLMEMBERS * 
[Dimension2].[Value2].[Value2].ALLMEMBERS * 
[Dimension2].[Value3].[Value3].ALLMEMBERS * 
[TimeDimension].[Value4].[Value4].ALLMEMBERS * 
[Dimension2].[Value5].[Value5].ALLMEMBERS) } 
DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS FROM 
(SELECT (STRTOSET(@DateParameter, CONSTRAINED)) ON COLUMNS FROM [Monthly]) 
WHERE (IIF(STRTOSET(@DateParameter, CONSTRAINED).Count = 1, 
STRTOSET(@DateParameter, CONSTRAINED), [TimeDimension].[Value].currentmember)) 
CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, 
FONT_NAME, FONT_SIZE, FONT_FLAGS 

Он группируется по

[Dimension1].[Value1].[Value1] 

и

[Dimension2].[Value2].[Value2] 

В SSRS

Заранее спасибо.

+0

У ReportViewer есть что-то вроде пейджинга ..? может ли рефакторинг запроса, который загружает или возвращает данные для ReportViewer, для возврата меньшего набора записей?? – MethodMan

+0

Существует никакой подкачки вообще. Требования и макет отчета требуют, чтобы все данные были там, потому что с ним были сделаны некоторые вычисления. Просто F.Y.I. он не отображает 100 000 строк, потому что он сгруппирован. Есть, может быть, ~ 20 строк, так как так много данных сгруппировано. – Zaehos

+0

возможно, вам нужно реализовать альтернативу использованию ReportViewer .. 100 000 строк звучат довольно тяжело для ReportViewer, лично говорящего – MethodMan

ответ

2

Вы, вероятно, переживает тайм-аут в ASP:

ReportViewer timeouts in spite of timeout settings

Я на самом деле я работаю через подобные вопросы, сам на работе прямо сейчас. Единственные настоящие решения, которые я нашел (кроме указанной выше ссылке, и, следовательно, в ожидании отчета по визуализации) являются: настройка производительности

  1. Очень интенсивный SQL/MDX: Не всегда вариант, как иногда наборы данных являются оптимальными
  2. Кэширование отчетов: не всегда вариант, потому что в некоторых отчетах имеется слишком много возможных параметрируемых возможностей.

Я бы попытался запустить отчет с помощью Reportviewer reporterver и установить тайм-аут на 0 для отчета, чтобы получить базовый уровень того, сколько времени потребуется для выполнения отчета.

Затем запустите следующий запрос:

use ReportServer 

SELECT els.UserName 
, c.Name Report 
, els.Parameters 
, els.Status 
, els.Format 
,els.TimeStart 
,els.TimeEnd 
, CAST(FLOOR(DATEDIFF(SECOND,TimeStart, TimeEnd)/60.0) as varchar(100)) + ''' ' + CAST(ABS(60 * FLOOR(DATEDIFF(SECOND,TimeStart, TimeEnd)/60.0) - DATEDIFF(SECOND,TimeStart, TimeEnd)) as varchar(100)) + '"' TotalTime 
,CAST(FLOOR(TimeDataRetrieval/1000.0/60.0) as varchar(100)) + ''' ' + CAST(ABS(Floor(TimeDataRetrieval/1000.0/60.0)*60 - TimeDataRetrieval/1000) as varchar(100)) + '"' Data 
, CAST(FLOOR(TimeProcessing/1000.0/60.0) as varchar(100)) + ''' ' + CAST(ABS(Floor(TimeProcessing/1000.0/60.0)*60 - TimeProcessing/1000) as varchar(100)) + '"' Processing 
, CAST(FLOOR(TimeRendering/1000.0/60.0) as varchar(100)) + ''' ' + CAST(ABS(Floor(TimeRendering/1000.0/60.0)*60 - TimeRendering/1000) as varchar(100)) + '"' Rendering 
, els.[RowCount] 
, CAST(ROUND(CAST([RowCount] as decimal)/(CASE WHEN TimeDataRetrieval = 0.00 THEN NULL ELSE TimeDataRetrieval END /1000),2) as decimal(18,1)) RowsPerSecond 
FROM ExecutionLogStorage els 
LEFT JOIN Catalog c on c.ItemID = els.ReportID 
WHERE c.Name IN('<<REPORT NAME>>') AND 
Format = 'RPL' AND 
Status ='rsSuccess' AND 
1=1 
ORDER BY TimeEnd DESC 

И увидеть, где ваш отчет тратит больше всего времени.

Кроме того, не возражаете ли вы предоставить свой запрос MDX? Кажется странным, что вы возвращаете 100 тыс. Строк, а затем группируете их в SSRS.Как правило, лучше использовать MDX для группировки/агрегации и вычислять в вычисленных измерениях, а затем служить в отчете.

+0

Благодарим вас за большой и быстрый ответ. Я отредактировал вопрос с запросом. – Zaehos

+0

Глядя на ваш запрос, я не уверен, что вы используете все свои измерения в своем отчете. Является ли в отчете таблицей матрица, которая группируется по строкам и столбцам? Я думаю, что мы можем потенциально удалить некоторые из измерений ([Dimension2]. [Value3]. [Value3], [TimeDimension]. [Value4]. [Value4], [Dimension2]. [Value5]. [Value5]) из вашего запроса которые могут не понадобиться и значительно улучшить время рендеринга. – Michael

+0

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

Смежные вопросы