本文介绍如何使用接受多个值的参数的 SSRS 多值存储过程来创建报表。例如,存储过程按国家/地区显示销售额,参数接受多个国家/地区的名称。
右键单击“数据集”文件夹以创建新的数据集。下面的屏幕截图显示了我们在本 SSRS 带有参数的多值存储过程示例中使用的报表数据集。
我们在上面的 SSRS 示例中使用的 SQL 存储过程如下所示。如果您查看下面的 SQL 存储过程,它有一个带 @Country 参数的 where 条件。
USE [AdventureWorksDW2019]
GO
CREATE PROCEDURE [dbo].[SP_MultiValueCountrySales]
@Country VARCHAR(100)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Str VARCHAR(MAX)
SET @Str = REPLACE(@Country, ',', ''',''')
DECLARE @Statement NVARCHAR(MAX)
SET @Statement =
'SELECT Geo.EnglishCountryRegionName AS Country,
Geo.StateProvinceName AS State,Geo.City,
SUM(Fact.OrderQuantity) AS Orders,
SUM(Fact.TotalProductCost) AS ProductCost,
SUM(Fact.SalesAmount) AS Sales,
SUM(Fact.TaxAmt) AS Tax INTO ##CountryTemp
FROM FactInternetSales AS Fact INNER JOIN DimCustomer
ON DimCustomer.CustomerKey = Fact.CustomerKey
INNER JOIN DimGeography AS Geo ON DimCustomer.GeographyKey = Geo.GeographyKey
WHERE Geo.EnglishCountryRegionName IN (''' + @Str + ''')
GROUP BY Geo.EnglishCountryRegionName, Geo.StateProvinceName, Geo.City'
EXECUTE( @Statement)
SELECT * FROM ##CountryTemp
DROP TABLE ##CountryTemp
END
选择存储过程名称后,单击“刷新字段”以打开“定义查询参数”窗口。在此处,添加或传递参数值,然后单击“确定”。这非常重要;如果您忘记单击“刷新字段”并提供值,则在“报表数据”中将看不到任何列来设计报表。

使用多值参数的存储过程创建 SSRS 报表
下图显示了存储过程的可用列以及自动创建的“国家/地区”参数。但首先,我将创建另一个数据集来获取唯一的国家/地区名称,以用作“国家/地区”参数的可用字段。
SELECT DISTINCT EnglishCountryRegionName FROM DimGeography
双击 @Country 以打开“报表参数属性”窗口。首先,选中“允许多选”选项。

接下来,转到“可用值”选项卡,选择“从查询获取值”选项,然后选择“国家/地区列表”数据集、值和标签字段。

我们设计了一个简单的按国家/地区划分销售额的表报表,并格式化了字体和颜色。

如果转到报表预览,它将显示一个下拉列表供您选择国家/地区。例如,我将选择加拿大来显示加拿大的销售额。

我们也可以选择多个参数值,报表也能正常工作。
