Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reporting services 2012年SSRS的糟糕表现_Reporting Services - Fatal编程技术网

Reporting services 2012年SSRS的糟糕表现

Reporting services 2012年SSRS的糟糕表现,reporting-services,Reporting Services,SSRS 2012中的SPLIT(JOIN())函数是否存在问题 这就是为什么我要问 我刚刚安装了一台SSRS 2012服务器。我在SSRS2008R2中构建了一个现有的报告,它来自2005年的数据库。我在MVS2010中创建了一个新项目,并添加了现有的rdl 当我预览报表时,其性能至少比我在MVS 2008中预览报表时差5倍。我运行了一个跟踪,发现SSR甚至花了相当长的时间来执行SP。一旦执行了,它就会快速呈现 我试图想出一些可能会减慢SP执行速度的方法。我唯一想到的是,我有很多多值参数,我使

SSRS 2012中的SPLIT(JOIN())函数是否存在问题

这就是为什么我要问

我刚刚安装了一台SSRS 2012服务器。我在SSRS2008R2中构建了一个现有的报告,它来自2005年的数据库。我在MVS2010中创建了一个新项目,并添加了现有的rdl

当我预览报表时,其性能至少比我在MVS 2008中预览报表时差5倍。我运行了一个跟踪,发现SSR甚至花了相当长的时间来执行SP。一旦执行了,它就会快速呈现

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

有没有人遇到过这个问题,或者知道一系列在2008年运行良好但在新版本中不太好的事情

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


编辑:我觉得很傻。我刚刚跟踪了2008年报告的执行情况,结果发现它做了同样的事情,这是我以前从未注意到的。SP出现在探查器中后,渲染速度非常快。所以…我不知道问题出在哪里。任何帮助都将不胜感激

我会坚持使用如下谓词:

Where thing in (@Sets)
其中“Sets”变量可以来自我创建的另一个数据集,该数据集是从SQL获取的,如:

Select 'Brett' as Name
Union
Select 'Anna'
Union
Select 'John'
Union
Select 'Jenny'
简单选择从“从数据集获取数据”获取集合的数据。一旦设置了变量,SQL 2008R2及更高版本应该为您做一些提升,找出(@set)中Where thing表达式中谓词的子句实际转换为:

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

加速SSRS报告和减少服务器负载的主要解决方案是缓存报告。如果你这样做(比如我在早上7:30预装缓存)或者在命中时缓存报告,你会发现加载速度大大提高。

请注意,我每天都做这件事,而且很专业,我不仅仅是在SSR上写诗意

SSRS中的缓存

预加载缓存

如果您不喜欢初始报告花费很长时间,并且您的数据是静态的,即每日总账等,这意味着数据在一天中是相对静态的,您可以增加缓存寿命

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

您还可以在SSRS中使用参数,以方便用户进行解析并加快查询速度。在查询生成器中,在要参数化的筛选器列下键入(@SSN),然后您将在BIDS GUI左上角数据源上方的参数文件夹中找到它。 [如果在SSRS中看不到数据源部分,请按CTRL+ALT+D


在这里可以看到一个几乎相同的问题:

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

然后,您可以在存储过程中设置一个参数,例如@TheList varchar(max)

然后,您应该能够在联接中使用它,使用它创建临时表,然后在查询中对其进行联接,或者将其用作子选择

我们经常使用它,并且发现如果您主要使用的是整数值,那么返回的表应该是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

首先,为什么要进行拆分联接?根据我对SSR的经验,速度的最终破坏者是在SSR函数不需要或可以通过以下方式实现的情况下过度使用SSR函数:1.SQL而不是2.在代码中使用一点VB.NET。在很多情况下,当我大量使用函数时,性能会从几秒钟提高到几分钟。你能详细解释一下为什么需要执行这些函数吗?我也见过很多次,在开发人员的机器上调试一段代码比在实际的服务器上调试函数要慢。我有8个多值参数,所有这些参数都需要传递到主存储过程中。我不知道如何在不使用SPLIT的情况下传递一组选择JOIN。我很抱歉地说,我是VB.NET的勒德主义者。我记得看到过一些关于定义自定义代码来实现这一点的东西,但我没有意识到性能会如此不同,所以我没有费心去学习。这就是你所指的吗?我比VB.NET更喜欢C#,但通常你可以用mult val做你需要的事情ue具有类似于“where column in(@multiValue)”的谓词。我不确定这是否适用于进程或函数,但适用于查询。您需要一个拆分联接(或.NET代码)要将多值数组转换为逗号分隔的字符串,IN不这样做就无法工作。它将与select查询一起工作,我一直在SSRS中使用多值参数。当我设置多值参数时,用户,如:选择“John”作为用户联合选择“Brett”联合选择“Bill”,并将其设置为t“从查询中获取值”。然后,我可以在主数据集中执行以下操作:从用户所在的用户(@users)中选择*。