在SSRS查询字符串中传递多值参数的值

时间:2009-08-11 16:16:26

标签: reporting-services reportingservices-2005

我有两个使用SSRS 2005构建的报告。第一个报告设置为在单击特定字段时导航到第二个报告。我在文本框的“跳转到URL”属性中使用类似于以下内容的表达式:

="javascript:void(window.open('http://server/reportserver?%2fFolder%2fMyReport&rs:Command=Render&Date=" & Fields!Date.Value & "&MachineId=" & Fields!Machine.Value & "'))"

第二个报告上有一个多值参数。调用此报告时,我需要在URL查询字符串中为此参数传递多个值。有没有办法在报表的查询字符串中为参数传递多个值?或者您可以传递一个参数,该参数将导致选择全部选择值吗?

感谢。

3 个答案:

答案 0 :(得分:25)

只需添加其他查询字符串参数。

例如,传递参数

Date:       2009-06-01
MachineID:  Machine1, Machine2, Machine3, Machine4

到名为Folder\MyReport的服务器上名为server的报告中,您将使用以下网址:

http://server/reportserver?%2fFolder%2fMyReport&rs:Command=Render&Date=2009-06-01&MachineId=Machine1&MachineId=Machine2&MachineId=Machine3&MachineId=Machine4

答案 1 :(得分:4)

在网址中使用join(Parameters!<name>.Value,"&<param_name>=")获取多值参数。

如果要将这些参数传递到数据集中,则需要在传入参数时执行join(Parameters!<param name>.Value),然后在SQL中使用split函数。这个很好用:

ALTER FUNCTION [dbo].[fnSplitParam]
   (@RepParam nvarchar(4000), @Delim char(1)= ',')
RETURNS @Values TABLE (Param nvarchar(4000))AS
  BEGIN
  DECLARE @chrind INT
  DECLARE @Piece nvarchar(100)
  SELECT @chrind = 1 
  WHILE @chrind > 0
    BEGIN
      SELECT @chrind = CHARINDEX(@Delim,@RepParam)
      IF @chrind  > 0
        SELECT @Piece = LEFT(@RepParam,@chrind - 1)
      ELSE
        SELECT @Piece = @RepParam
      INSERT  @Values(Param) VALUES(CAST(@Piece AS VARCHAR))
      SELECT @RepParam = RIGHT(@RepParam,LEN(@RepParam) - @chrind)
      IF LEN(@RepParam) = 0 BREAK
    END
  RETURN
  END

如果最终用户不必直接选择参数,我建议使用单值方法,因为它会在网址中为每个参数节省2个字符。

答案 2 :(得分:0)

我一直在尝试对OP做类似的事情,并发现将这个&rp:mySelectAllParameter=<ALL>放在网址中以便选择所有