通过url将参数传递给sql server报告服务

时间:2009-07-03 11:04:10

标签: url reporting-services parameters reporting reportingservices-2005

我正在尝试通过网址将参数传递给SSRS,但似乎无法正常工作!

我正在尝试通过url传递userId(string),该url将传递给数据库并由查询使用。

基本网址: http://blah/Reports/Pages/Report.aspx?ItemPath=MyReport

尝试了这个,但它不起作用: http://blah/Reports/Pages/Report.aspx?ItemPath=MyReport&UserId=fred

任何想法

9 个答案:

答案 0 :(得分:52)

我有同样的问题和更多,虽然这个线程已经老了,但它仍然很好,所以总结一下SSRS 2008R2我发现...

<强>情况

  1. 您想使用网址中的值来查找数据
  2. 您希望在报告
  3. 中显示网址中的参数
  4. 您希望将参数从一个报告传递到另一个报告
  5. 操作

    如果适用,请务必将 Reports / Pages / Report.aspx?ItemPath = 替换为 ReportServer?。换一种说法: 而不是:

    http://server/Reports/Pages/Report.aspx?ItemPath=/ReportFolder/ReportSubfolder/ReportName
    

    使用以下语法:

    http://server/ReportServer?/ReportFolder/ReportSubfolder/ReportName
    

    将参数添加到报告并设置为隐藏(或者如果允许用户操作,则可见,但请记住,虽然报告参数将更改,但网址会根据更新的条目)。

    使用&amp; ParameterName = Value

    将参数附加到网址

    可以使用@ParameterName在报告中引用或显示参数,无论它们是在报告中还是在URL中设置

    要隐藏显示参数的工具栏,请将&amp; rc:Toolbar = false添加到网址(reference

    将所有内容放在一起,您可以运行带有嵌入值的网址,或者将其作为一个报告中的操作调用,并通过其他报告读取:

    http://server.domain.com/ReportServer?/ReportFolder1/ReportSubfolder1/ReportName&UserID=ABC123&rc:Toolbar=false
    

    在报表数据集属性中查询:SELECT stuff FROM view WHERE User = @UserID

    在报告中,将表达式值设置为[UserID](或= Fields!UserID.Value)

    请注意,如果报表包含多个参数,您可能需要在网址中包含所有参数,即使是空白也是如此,具体取决于数据集查询的编写方式。

    要使用Action = Go to URL传递参数,请将表达式设置为:

    ="http://server.domain.com/ReportServer?/ReportFolder1/ReportSubfolder1/ReportName&UserID="
     &Fields!UserID.Value 
     &"&rc:Toolbar=false"
     &"&rs:ClearSession=True"
    

    请确保在表达式后面有空格,如果后跟&amp; (换行是不够的)。表达式之前不需要空格。此方法可以传递参数,但不会隐藏它,因为它在URL中可见。

    如果您不包含&amp; rs:ClearSession = True,则在清除浏览器会话缓存之前,报告不会刷新。

    使用Action = Go to report:

    传递参数
    • 指定报告
    • 添加参数以运行报告
    • 添加您希望传递的参数(需要在目标报告中定义参数,因此据我所知,您不能使用特定于URL的命令,例如使用此方法的rc:toolbar);但是,我认为可以通过报告中的自定义代码读取或设置“提示用户”复选框,如报告服务器参数中所示。)

    供参考,/ = %2f

答案 1 :(得分:46)

除了设拉子所说的,尝试这样的事情:

http://<server>/ReportServer/Pages/ReportViewer.aspx?%2f<path>%2f<ReportName>&rs:Command=Render&UserID='fred'

请注意,路径仅在您位于单个文件夹中时才有效。当我必须这样做时,我只需使用reportserver路径浏览报告(“reports”是报告管理器)并复制网址,然后将&<ParameterName>=<value>添加到最后。

答案 2 :(得分:8)

我自己刚刚解决了这个问题。我在MSDN上找到了解决方案: http://msdn.microsoft.com/en-us/library/ms155391.aspx

格式基本上是

http://<server>/reportserver?/<path>/<report>&rs:Command=Render&<parameter>=<value>

答案 3 :(得分:6)

尝试在网址中将“报告”更改为“ReportServer”

答案 4 :(得分:3)

尝试通过url传递多个值:

/ReportServer?%2fService+Specific+Reports%2fFilings%2fDrillDown%2f&StartDate=01/01/2010&EndDate=01/05/2010&statuses=1&statuses=2&rs%3AFormat=PDF

这应该有用。

答案 5 :(得分:1)

我通过传递URL中可用参数的值而不是参数的标签来解决类似的问题。

例如,我有一个名为viewName的参数的报告,参数的预定义可用值是:(标签/值)orders / sub_orders,orderDetail / sub_orderDetail,product / sub_product。

要使用URL调用此报告以自动呈现parameter = product,您必须指定值而不是标签 这是错误的: http://server/reportserver?/Data+Dictionary/DetailedInfo&viewName=product&rs:Command=Render

这是正确的: http://server/reportserver?/Data+Dictionary/DetailedInfo&viewName=sub_product&rs:Command=Render

答案 6 :(得分:0)

根据此link,如果不使用代理语法,您可能还需要为您的参数添加&amp; rp前缀

答案 7 :(得分:0)

尝试在您的网址中将“报告”更改为“ReportServer”。 为此,只需访问此http://host/ReportServer/,然后您就可以转到报告页面。像你这样附加你的parmaters &<parameter>=<value>

更多详细信息:

http://dobrzanski.net/2008/08/11/reporting-services-problem-with-passing-parameters-directly-in-the-url/

https://www.mssqltips.com/sqlservertip/1336/pass-parameters-and-options-with-a-url-in-sql-reporting-services/

答案 8 :(得分:-1)

http:// desktop-qr277sp / Reports01 / report / Reports / reportName?Log%In%Name = serverUsername&paramName = value

通过服务器身份验证将参数传递给报告