SSRS数据集有两个T-SQL查询。仅当某个参数选择了两个或更多值时,才会运行一个查询。仅当参数仅选择了一个值时,才会运行另一个查询。如何让数据集知道是否从参数中选择了一个值或多个值?
答案 0 :(得分:2)
您可以创建名为NumberOfValues
的附加整数参数,将其设置为hidden
并在默认值中使用如下所示的表达式:
=Parameter!YourMultipleValueParam.Value.Count
然后在数据集中,您可以使用NumberOfValues
参数来确定YourMultipleValueParam
参数中选择的值的数量。
IF @NumberOfValues > 1 BEGIN ....
答案 1 :(得分:0)
好问题。这是我发现的一种方式。
第1步:在数据集的属性中,转到“参数”选项卡。使用以下表达式添加参数,将MyParameterName
替换为您的参数名称。
=join(Parameters!MyParameterName.Value,",")
步骤2:如果您还没有,请在SQL Server功能中添加拆分功能。简单的谷歌搜索会引导您进行如下操作:Split function equivalent in T-SQL?
第3步:选择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
编辑:如果您不想(或不能)创建/使用拆分功能,则替代步骤2和3。
第2步:在顶部的主查询中,包括以下内容(基本上是拆分函数的内嵌版本)
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步:选择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