SSRS报告 - 多个选择定义多个查询

时间:2017-02-09 18:41:14

标签: sql-server visual-studio tsql reporting-services ssrs-2012

SSRS数据集有两个T-SQL查询。仅当某个参数选择了两个或更多值时,才会运行一个查询。仅当参数仅选择了一个值时,才会运行另一个查询。如何让数据集知道是否从参数中选择了一个值或多个值?

2 个答案:

答案 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