多值参数在 SSRS 报告中不起作用

Multi value parameter not working in SSRS report

我有一份 SSRS 报告。在主查询上有一个很长的 SQL 查询,在最后一个 SELECT 我想用 WHERE 表达式过滤结果,过滤器应该带有多值参数。

我是这样设置参数的:

=Join(Parameters!NewParam.Value,",") 
select * 
from @FinalStatusTbl 
where Test_Number in (@NewParam) 
order by Priority

问题是:

在报告中,当我从列表中选择一个值时,我得到了预期的结果,但如果我选择多个值,则结果为空(没有出现错误。)

你知道为什么吗?

(当我尝试这样做时:where Test_Number in ('Test 1', 'Test 2') 效果很好)。

当您使用 sql 查询创建数据集时,多值参数与 in(@ParamName) 一起使用,无需任何更改。

将您的 =Join(Parameters!NewParam.Value,",") 替换为 =Parameters!NewParam.Value,您应该没问题。


就是说,您看到人们使用 join 表达式的原因是,如果您的参数有很多潜在选择并且您的数据相当大,有时您的查询速度会大大降低。这里所做的是将 join 表达式与数据集中的字符串拆分函数相结合,将结果 Value1,Value2,Value3 字符串值转换为 table ,可以在查询中使用 inner join.

如果将多个值作为参数传递给存储过程,这也是一项要求,因为您不能使用 in(@ParamName) 语法。

您可以尝试从 where 子句中取出参数,并在数据集属性的过滤器部分使用该参数。

这将有效地将过滤从 SQL 转移到 SSRS。

您需要做的是在数据库中拆分您的字符串。传递给您的查询的是作为完整字符串的 'Test 1, Test 2',而不是 'Test 1' 和 'Test 2'。这就是为什么单个值有效而多个值无效的原因。

Here 是关于如何拆分字符串的非常好的 link,为您的场景做准备。我最常使用的函数是 CTE 示例,其中 returns a table 我的拆分字符串。然后我将 SQL 查询更改为在返回的 table.

上使用 IN

在您的示例中,您需要编写 WHERE Test_Number IN (SELECT Item FROM dbo.ufn_SplitStrings(@NewParam) ,其中 ufn_SplitString 是您根据前面提到的 link 创建的函数。

这就是我所做的,对我来说效果很好。你也可以试试

=sum(if(Fields!Business_Code.Value = "PH" 
and (Fields!Vendor_Code.Value = "5563"
and Fields!Vendor_Code.Value = "5564"
and Fields!Vendor_Code.Value = "5565"
and Fields!Vendor_Code.Value = "5551")
, Fields!TDY_Ordered_Value.Value , nothing ))