1

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 中后,渲染速度非常快。所以......我不知道问题可能是什么。任何帮助将不胜感激!

4

3 回答 3

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 中使用参数,以便用户轻松解析并加快查询速度。在查询构建器中,在您希望参数化的过滤器列下键入 IN(@SSN),然后您会在 BIDS GUI 左上角的数据源上方的参数文件夹中找到它。[如果您在 SSRS 中看不到数据源部分,请按 CTRL+ALT+D。

在此处查看几乎相同的问题:SSRS 的性能问题

于 2013-06-29T16:21:54.427 回答
1

我会坚持使用如下谓词:

Where thing in (@Sets)

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

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

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

Where thing in ('Brett', 'Anna', 'John', 'Jenny')
于 2013-06-17T21:22:03.720 回答
0

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

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

然后你可以在你的存储过程中设置一个参数,比如@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
于 2016-08-17T21:30:50.810 回答