SSRS 报告 - 多个选择定义多个查询
SSRS Reporting - Multiple Selections Defining Multiple Queries
一个 SSRS 数据集有两个 T-SQL 查询。如果某个参数选择了两个或多个值,则一个查询只会 运行 。如果参数只选择了一个值,则另一个查询将仅 运行。如何让数据集知道从参数中选择了一个值还是多个值?
好问题。这是我找到的一种解决方法。
第 1 步: 在数据集的属性中,转到 "Parameters" 选项卡。使用以下表达式添加参数,将 MyParameterName
替换为您的参数名称。
=join(Parameters!MyParameterName.Value,",")
第 2 步: 如果您还没有,请在 SQL 服务器功能中添加一个拆分功能。简单的 google 搜索会将您定向到类似这样的内容:Split function equivalent in T-SQL?
步骤 3:Select SSRS 报告中使用的参数计数。根据结果,做你想做的:(我的分裂函数简称为分裂)
IF (select count(*) from Devl.dbo.Split(@MyParameterName,',')) = 1
BEGIN
/* Do your second query here, when one parameter is selected */
END
IF (select count(*) from Devl.dbo.Split(@MyParameterName,',')) > 1
BEGIN
/* Do your first query here, when more than one parameter is selected */
END
编辑:如果您不想(或不能)create/utilize 拆分函数,则步骤 2 和 3 的替代方案。
第 2 步: 在顶部的主查询中,包括以下内容(基本上是拆分函数的 in-line 版本)
declare @string varchar(max), @delimiter char(1)
declare @temptable table (items varchar(max))
set @string = @MyParameterName
set @delimiter = ','
declare @idx int, @slice varchar(max)
select @idx = 1
if len(@String)<1 or @String is null return
while @idx!= 0
begin
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String
if(len(@slice)>0)
insert into @temptable(Items) values(@slice)
set @String = right(@String,len(@String) - @idx)
if len(@String) = 0 break
end
步骤 3:Select SSRS 报告中使用的参数计数。根据结果,做你想做的:(我的分裂函数简称为分裂)
IF (select count(*) from @temptable) = 1
BEGIN
/* Do your second query here, when one parameter is selected */
END
IF (select count(*) from @temptable) > 1
BEGIN
/* Do your first query here, when more than one parameter is selected */
END
您可以创建一个名为 NumberOfValues
的附加整数参数,将其设置为 hidden
并在默认值中使用如下所示的表达式:
=Parameter!YourMultipleValueParam.Value.Count
然后在数据集中你可以使用NumberOfValues
参数来确定在YourMultipleValueParam
参数中选择的值的数量。
IF @NumberOfValues > 1 BEGIN ....
一个 SSRS 数据集有两个 T-SQL 查询。如果某个参数选择了两个或多个值,则一个查询只会 运行 。如果参数只选择了一个值,则另一个查询将仅 运行。如何让数据集知道从参数中选择了一个值还是多个值?
好问题。这是我找到的一种解决方法。
第 1 步: 在数据集的属性中,转到 "Parameters" 选项卡。使用以下表达式添加参数,将 MyParameterName
替换为您的参数名称。
=join(Parameters!MyParameterName.Value,",")
第 2 步: 如果您还没有,请在 SQL 服务器功能中添加一个拆分功能。简单的 google 搜索会将您定向到类似这样的内容:Split function equivalent in T-SQL?
步骤 3:Select SSRS 报告中使用的参数计数。根据结果,做你想做的:(我的分裂函数简称为分裂)
IF (select count(*) from Devl.dbo.Split(@MyParameterName,',')) = 1
BEGIN
/* Do your second query here, when one parameter is selected */
END
IF (select count(*) from Devl.dbo.Split(@MyParameterName,',')) > 1
BEGIN
/* Do your first query here, when more than one parameter is selected */
END
编辑:如果您不想(或不能)create/utilize 拆分函数,则步骤 2 和 3 的替代方案。
第 2 步: 在顶部的主查询中,包括以下内容(基本上是拆分函数的 in-line 版本)
declare @string varchar(max), @delimiter char(1)
declare @temptable table (items varchar(max))
set @string = @MyParameterName
set @delimiter = ','
declare @idx int, @slice varchar(max)
select @idx = 1
if len(@String)<1 or @String is null return
while @idx!= 0
begin
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String
if(len(@slice)>0)
insert into @temptable(Items) values(@slice)
set @String = right(@String,len(@String) - @idx)
if len(@String) = 0 break
end
步骤 3:Select SSRS 报告中使用的参数计数。根据结果,做你想做的:(我的分裂函数简称为分裂)
IF (select count(*) from @temptable) = 1
BEGIN
/* Do your second query here, when one parameter is selected */
END
IF (select count(*) from @temptable) > 1
BEGIN
/* Do your first query here, when more than one parameter is selected */
END
您可以创建一个名为 NumberOfValues
的附加整数参数,将其设置为 hidden
并在默认值中使用如下所示的表达式:
=Parameter!YourMultipleValueParam.Value.Count
然后在数据集中你可以使用NumberOfValues
参数来确定在YourMultipleValueParam
参数中选择的值的数量。
IF @NumberOfValues > 1 BEGIN ....