ssrs运行所有参数选项

时间:2012-06-07 20:53:24

标签: ssrs-2008

我开发了一个包含三个不同参数的报告,供用户即时登录并选择他们想要的内容并运行报告。添加所有不同的参数选择组合,共有150种不同的报告。

现在需求已经发生变化,因此我们需要在excel中完成所有150个报告,并且每个月都会保存到网络中。如何安排所有150个选项在excel中运行和保存(没有150个订阅)。 感谢

1 个答案:

答案 0 :(得分:1)

您使用的是企业版吗?如果是这样,您可以创建数据驱动的订阅。您需要设置一个包含150行的表,其中至少有3列代表每个参数。为了灵活性,我为渲染格式(EXCEL)和目标文件夹添加了一列。然后,您可以创建一个订阅。

否则,如果您只有标准版,则唯一的选择是创建150个订阅。在这种情况下,我倾向于编写一个脚本与RS.EXE一起使用来生成150个订阅。

这是一个生成Excel文件的示例脚本。我重新阅读了你的帖子,并认为你并不真正需要这个订阅方面。您只需要呈现报告,然后对其进行计划,只需为命令行创建一个批处理文件,并使用SQL Server代理进行计划。

此代码改编自http://msdn.microsoft.com/en-us/library/reportexecution2005.reportexecutionservice.render(v=sql.100).aspx#Y1258

的样本

使用记事本键入此内容,然后将文件另存为renderExcel.rss。文件扩展名很重要 - 不要将其保存为txt文件。当然,请更改文件路径,参数名称和值。我只是在我的开发机器上执行它们并确保它确实有效!

Public Sub Main()

  rs.Credentials = System.Net.CredentialCache.DefaultCredentials

  ' Render arguments
  Dim result As Byte() = Nothing
  Dim reportPath As String = "/Sales/Reseller Sales Cumulative Sales"
  Dim format As String = "EXCEL"
  Dim historyID As String = Nothing
  Dim devInfo As String = Nothing


  ' Prepare report parameter.
  Dim parameters(2) As ParameterValue
  parameters(0) = New ParameterValue()
  parameters(0).Name = "SalesTerritoryGroup"
  parameters(0).Value = "Europe"
  parameters(1) = New ParameterValue()
  parameters(1).Name = "Year"
  parameters(1).Value = "2007" 
  parameters(2) = New ParameterValue()
  parameters(2).Name = "Quarter"
  parameters(2).Value = "1"

  Dim credentials As DataSourceCredentials() = Nothing
  Dim showHideToggle As String = Nothing
  Dim encoding As String
  Dim mimeType As String
  Dim warnings As Warning() = Nothing
  Dim reportHistoryParameters As ParameterValue() = Nothing
  Dim streamIDs As String() = Nothing

  Dim execInfo As New ExecutionInfo
    Dim execHeader As New ExecutionHeader()
    Dim SessionId As String
    Dim extension As String = ""

  rs.ExecutionHeaderValue = execHeader

    execInfo = rs.LoadReport(reportPath, historyID)

    rs.SetExecutionParameters(parameters, "en-us")

    SessionId = rs.ExecutionHeaderValue.ExecutionID
    Console.WriteLine("SessionID: {0}", rs.ExecutionHeaderValue.ExecutionID)


  Try
     result = rs.Render(format, devInfo, extension, _
           encoding, mimeType, warnings, streamIDs)


  Catch e As SoapException
     Console.WriteLine(e.Detail.OuterXml)
  End Try
  ' Write the contents of the report to an Excel file.
  Try
     Dim stream As FileStream = File.Create("myReport.xls", result.Length)
     Console.WriteLine("File created.")
     stream.Write(result, 0, result.Length)
     Console.WriteLine("Result written to the file.")
     stream.Close()
  Catch e As Exception
     Console.WriteLine(e.Message)
  End Try
 End Sub

要执行它,您需要在命令行运行它:

rs -i renderExcel.rss -s http://localhost/reportserver -e Exec2005

此代码仅创建一个文件。您需要添加一种循环方法来为每个参数组合设置参数,然后渲染。