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后,渲染速度非常快。所以...我不知道问题是什么。任何帮助都会非常感激!答案 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,它将使用逗号(或您想要使用的其他分隔符)分隔列表,并返回一个可以加入的表。
然后你可以在你的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