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 ....