在SSRS 2012中表现糟糕

时间:2013-06-11 22:22:06

标签: reporting-services

SSRS 2012中的SPLIT(JOIN())功能是否存在问题?

这就是我问的原因......

我刚刚设置了SSRS 2012服务器。我有一个我在SSRS 2008 R2中构建的现有报告,该报告来自2005年的数据库。我在MVS 2010中创建了一个新项目并添加了现有的rdl。

当我预览报告时,性能至少比我在MVS 2008中预览时的性能差5倍。我跑了一条痕迹,发现SSRS甚至花了很长时间才能执行SP。一旦它完成,它很快就会呈现。

我试图想一些可能会减慢SP执行速度的事情。我唯一想到的是我有很多多值参数,我使用SPLIT(JOIN())函数传递给SP。那些被2012年的新东西取代了吗?如果没有,我甚至不知道从哪里开始寻找问题。我最初的谷歌搜索没有任何结果。

有没有人遇到过这个问题,或者知道一系列在2008年运作良好但在新版本中效果不佳的清单?

我希望这个问题不要太模糊。谢谢你的阅读!

编辑:我觉得很傻。我只追溯了2008年的报告执行情况,结果发现它做了同样的事情,我以前从未注意过。 SP出现在Profiler后,渲染速度非常快。所以...我不知道问题是什么。任何帮助都会非常感激!

3 个答案:

答案 0 :(得分:1)

我会坚持使用谓词:

Where thing in (@Sets)

'Sets'变量可以来自我从SQL获得的另一个数据集,如:

Select 'Brett' as Name
Union
Select 'Anna'
Union
Select 'John'
Union
Select 'Jenny'

简单地选择从“从数据集中获取数据”获取集合的数据。设置变量之后,SQL 2008R2及更高版本应该为您解决,并在(@Sets)实际转换为Where的内容中表达谓词的子句:

Where thing in ('Brett', 'Anna', 'John', 'Jenny')

答案 1 :(得分:1)

加速SSRS报告和降低服务器负载的主要解决方案是缓存报告。如果这样做(例如我在上午7:30预加载缓存)或缓存报告命中,那么会发现加载速度大幅上升。

请注意我每天和专业这样做,而不是简单地在SSRS上打造诗意

SSRS中的缓存 http://msdn.microsoft.com/en-us/library/ms155927.aspx

预加载缓存 http://msdn.microsoft.com/en-us/library/ms155876.aspx

如果您不喜欢初始报告需要很长时间且数据是静态的,即每日总帐等,这意味着数据在当天相对静态,可能会延长缓存寿命

最后,您也可以选择业务经理通过电子邮件订阅接收这些报告,这会向他们发送一个他们可能会发现的Excel报告的时间点更系统化。

您还可以使用SSRS中的参数,以便用户轻松解析和更快的查询。在查询构建器中,在要参数化的Filter列下键入IN(@SSN),然后您将在BIDS GUI左上角的数据源正上方的参数文件夹中找到它。 [如果在SSRS中没有看到数据源部分,请按CTRL + ALT + D.

在此处查看几乎相同的问题:Performance Issuses with SSRS

答案 2 :(得分:0)

创建一个UDF,它将使用逗号(或您想要使用的其他分隔符)分隔列表,并返回一个可以加入的表。

https://blogs.msdn.microsoft.com/amitjet/2009/12/11/convert-comma-separated-string-to-table-4-different-approaches/

然后你可以在你的sproc中设置一个参数,比如@TheList varchar(max)

然后,您应该能够在JOIN中使用它,使用它来创建临时表,然后在查询中加入它,或者将其用作子选择。

我们经常使用它,并发现如果你主要使用的是整数值,那么返回的表应该是一个INT表来提高性能。

伪示例:

declare @TheList varchar(max)

set @TheList = ('1,2,3,4,5,6,7,8')

select *
from dbo.MyRecords r
join dbo.udf_CreateArrayTable(@TheList) at on r.RecID = at.RecID