C# ReportViewer控件停止加载
我有一个报表查看器控件,如下所示:C# ReportViewer控件停止加载,c#,asp.net,reporting-services,ssas,reportviewer,C#,Asp.net,Reporting Services,Ssas,Reportviewer,我有一个报表查看器控件,如下所示: <rsweb:ReportViewer ID="ReportViewer1" style="margin-bottom:78px;" runat="server" AsyncRendering="true" SizeToReportContent="true" Width="100%" Height="100%" KeepSessionAlive="true"></rsweb:ReportViewer> 问题是报表查看器开始正常加
<rsweb:ReportViewer ID="ReportViewer1" style="margin-bottom:78px;" runat="server"
AsyncRendering="true" SizeToReportContent="true" Width="100%" Height="100%"
KeepSessionAlive="true"></rsweb:ReportViewer>
问题是报表查看器开始正常加载,并在大约一分钟后随机停止。现在,有很多数据正在从OLAP多维数据集中检索(大约100000行),报告中的数据正试图加载。它与SSRS中的展开/折叠功能分组。当我从报告中筛选数据时,它会正常加载。报表也会在Visual Studio 2012中以及ReportManager上正常加载(需要几分钟,但会加载)
所以我的问题是:这对ReportViewer控件来说是太多了,还是我遗漏了什么?
编辑:
之所以将其分组到SSR中,是因为我绝对不是MDX方面的专家。我使用的MDX查询是由SSR自动生成的查询。生成了MDX查询(更改了列、维度和度量值的名称):
它是按
[Dimension1].[Value1].[Value1]
而且
[Dimension2].[Value2].[Value2]
在SSR中
提前感谢。您可能在ASP中遇到超时: 事实上,我自己也在处理类似的问题。我找到的唯一真正的解决方案(除了上述链接,并因此等待报告提交)是:
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
使用ReportServer
选择els.UserName
,c.姓名报告
,els.参数
,els.状态
,els.Format
,els.TimeStart
,els.TimeEnd
,CAST(FLOOR(DATEDIFF(SECOND,TimeStart,TimeEnd)/60.0)为varchar(100))+“”“”+CAST(ABS(60*FLOOR(DATEDIFF(SECOND,TimeStart,TimeEnd)/60.0)-DATEDIFF(SECOND,TimeStart,TimeEnd))为varchar(100))+“”“TotalTime”
,CAST(FLOOR(TimeDataRetrieval/1000.0/60.0)为varchar(100))+“”“”+CAST(ABS(FLOOR(TimeDataRetrieval/1000.0/60.0)*60-TimeDataRetrieval/1000)为varchar(100))+“””数据
,CAST(FLOOR(TimeProcessing/1000.0/60.0)为varchar(100))+“”“”+CAST(ABS(FLOOR(TimeProcessing/1000.0/60.0)*60-TimeProcessing/1000)为varchar(100))+“””处理
,CAST(FLOOR(TimeRendering/1000.0/60.0)作为varchar(100))+“”“+CAST(ABS(FLOOR(TimeRendering/1000.0/60.0)*60-TimeRendering/1000)作为varchar(100))+“””渲染
,els.[行计数]
,强制转换(四舍五入(强制转换([RowCount]为十进制)/(TimeDataRetrieval=0.00时为空,否则TimeDataRetrieval结束/1000),2)为十进制(18,1))行秒
从ExecutionLogels存储
c.ItemID=els.ReportID上的左联接目录c
其中c.名称在(“”)中,并且
格式='RPL'和
状态='rsSuccess'和
1=1
按时间结束描述订购
看看你的报告在哪里花费的时间最多
另外,您介意提供MDX查询吗?奇怪的是,您返回了10万行,然后将它们分组到SSR中。通常更好的做法是让MDX进行分组/聚合,并在计算出的度量值中进行计算,然后将其提供给报表。ReportViewer是否有类似分页的功能。。?是否可以重构为ReportViewer加载或返回数据的查询,以返回较小的记录集..?没有任何分页。报告的要求和布局要求所有数据都在那里,因为需要使用它进行一些计算。只是一个F.Y.I.它不显示100000行,因为它是分组的。由于分组的数据太多,因此可能会显示约20行。也许您需要实现使用ReportViewer的替代方法。。10万行对于一个报告浏览者来说听起来相当沉重,他亲自向你征求反馈意见。是的,我们正在讨论另一种选择。感谢您的快速回复。我用查询编辑了问题。查看您的查询,我不确定您是否在报告中使用了所有维度。报表tablix是按行和列分组的矩阵吗?我认为我们可以从您的查询中删除一些可能不需要的维度([Dimension2].[Value3].[Value3],[TimeDimension].[Value4].[Value4],[Dimension2].[Value5].[Value5]),并大幅缩短渲染时间。这是一个表格。对于要删除的列,我同意这将极大地提高性能,但它们需要进行报告所要求的一些计算。我们目前正在寻找一种替代方案,将这些计算包含在多维数据集本身中,因此不必将细节包含在报告中(这就是问题所在)。谢谢你的帮助,这确实是问题所在。SSAS的真正好处是它能够快速聚合和执行聚合计算。尝试在查询设计器中创建计算度量值,如果有问题,请在[SSAS]和[mdx]标记下发布后续信息。
[Dimension2].[Value2].[Value2]
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