我有一份包含3个参数的SSRS报告:
@start (datetime)
@end (datetime)
@plantid (string from an external query)
当我定期运行报告时,它会超时。当我在设计器查询构建器中运行它时,它会超时。但是,当我将参数硬编码到查询构建器中时,它可以工作。 整个过程在Management Studio中运行良好
为什么当我在查询设计器中提供查询中的参数时,它会运行,但是当我通过报告填写参数时它不会? 这就是我在设计器查询构建器中所做的工作,使其能够快速进行测试。
Declare @start varchar(20),
@end varchar(20),
@plantid varchar(10)
set @start='07/13/2015'
set @end = '07/17/2015'
set @plantid = 'mnp'
Select Division as 'Division', SUM(SALESQTY) as 'salesQTY',rtrim(Ltrim(salesline.itemgroupid)) as 'itemGroup'
FROM MiscReportTables.dbo.PlantDivisions
inner join prodtable on prodtable.dimension2_ = MiscReportTables.dbo.PlantDivisions.Division
inner join SalesLine on SalesLine.InventrefId = ProdTable.ProdiD
WHERE PlantID IN (@plantid)
and SCHEDDATE between @start and @end
Group By Division,salesLine.itemgroupid
编辑:
我把它变成了一个存储过程并运行它,即使在管理工作室也需要很长时间(60多分钟)。我添加了option (recompile)
来阻止参数嗅探。
答案 0 :(得分:1)
您是否尝试将参数分配给查询中的其他变量?
我忘记了理论是什么,但在此之前,这对我有用。
Declare @start1 varchar(20),
@end1 varchar(20),
@plantid1 varchar(10)
set @start1 =@start
set @end1 = @end
set @plantid1 = @plantid
Select Division as 'Division', SUM(SALESQTY) as 'salesQTY',rtrim(Ltrim(salesline.itemgroupid)) as 'itemGroup'
FROM MiscReportTables.dbo.PlantDivisions
inner join prodtable on prodtable.dimension2_ = MiscReportTables.dbo.PlantDivisions.Division
inner join SalesLine on SalesLine.InventrefId = ProdTable.ProdiD
WHERE PlantID IN (@plantid)
and SCHEDDATE between @start and @end
Group By Division,salesLine.itemgroupid
尝试的另一件事(如果有的话)是部署到Report Server并从那里运行它。有些报告永远在Visual Studio中运行,但在RS中快速运行。
答案 1 :(得分:0)
我有一个类似的问题,使用了一种解决方法来创建单独的参数,但是使用附加参数对于可用性是不可行的。所以我然后将参数更改为使用默认值,这些默认值使用传入日期的值,这是有效的! (只需隐藏第二组参数。)