2009-08-11 180 views
4

我有两个使用SSRS 2005构建的报表。第一个报表设置为在单击特定字段时导航到第二个报表。我使用类似于在文本框中的“跳转到URL”属性下面的表达式:在SSRS查询字符串中传递多值参数的值

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

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

谢谢。

回答

23

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

例如,要传递的参数

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 
+0

,完美的工作!谢谢你的帮助。 – Jamie 2009-08-11 18:49:47

+0

工作完美,我很久以前就被这个问题困住了。谢谢 – Shawn 2013-01-15 09:38:56

+0

这不适用于我... 'System.ServiceModel.FaultException:此报告需要报告参数'codListaPrioridade'的默认值或用户定义的值。要运行或订阅此报告,您必须提供参数值。' 有何建议? – MarceloBarbosa 2015-03-11 16:16:37

3

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

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

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个字符的URL。

+0

谢谢,杰夫!这正是我需要的 - 在网络上的其他任何地方都找不到。 – Sev09 2015-08-18 22:04:24

0

我一直在试图做类似的事情,以OP,发现把这个在URL中的工作,选择所有

相关问题