使用多值参数加速报告

时间:2018-03-18 14:13:02

标签: sql reporting-services ssrs-2012

当我添加mutli值参数时,我的报告运行速度非常慢。从来没有真正对Reporting Services进行任何适当的培训,所以请关注我是否遵循创建报告的正确协议以及如何提高性能。

该报告有5个数据集 - 这些数据集都不是存储过程,每个查询在SQL管理工作室2012中运行大约需要5秒钟,并返回大约4000行。

有5个参数 - 1.Date From 2.Date To 3.Country 4.Town 5.LocalAuthority

我的参数在每个查询中设置,如下所示

where Date between @Date From  and @Date To
 and Country in (@Country)
  and Town in (@Town)
   and LocalAuthority in (@LocalAuthority)

该报告在没有参数的情况下运行良好,并且仅适用于国家/地区参数,但是当我在其他地方添加了事情真正开始放缓的情况时,它就会超时。

报告本身只显示了一些表格,其中添加了几个过滤器

我想知道是否更适合尝试创建一个查询而不是拥有大量日期集?无论如何,任何帮助都将非常感激,希望我已经包含了足够的信息。

1 个答案:

答案 0 :(得分:0)

如果没有看到您正在做的事情,却无法真正评论您的数据集/ SQL性能,但可以帮助您处理多值参数。

理想情况下,您应该使用split function将多值参数值转换为多个值,以便您可以使用IN运算符。如果您没有任何拆分功能,请尝试将多值参数转换为临时表,然后将JOIN临时表转换为主表。这将使生活变得轻松。

例如,如果您有以下变量:

DECLARE @Countries VARCHAR(MAX) = 'Australia,France,New Zealand,United Kingdom'

由于:

SELECT @Countries AS Countries

作为

Countries
----------
Australia,France,New Zealand,United Kingdom

以下SQL

DECLARE @Countries VARCHAR(MAX) = 'Australia,France,New Zealand,United Kingdom'
CREATE TABLE #Countries (Country  VARCHAR(30));

DECLARE @Insert VARCHAR(MAX) = 'INSERT INTO #Countries VALUES ('''+REPLACE(@Countries,',','''),(''')+''');';
EXEC (@Insert);

将mutli-valued @Countries变量转换为临时表。 所得:

SELECT Country FROM #Countries

作为

Country
--------
Australia
France
New Zealand
United Kingdom

现在,您可以使用主表JOIN此临时表。试试这个,如果你能看到一些不同,请告诉我们。