我开发了一个包含三个不同参数的报告,供用户临时登录并选择他们想要的内容并运行报告。将所有不同的参数选择组合加起来,就有 150 种不同的报告。
现在要求发生了变化,我们需要每个月在 Excel 中完成所有 150 份报告并保存到网络中。如何安排所有 150 个选项在 Excel 中运行和保存(没有 150 个订阅)。谢谢
我开发了一个包含三个不同参数的报告,供用户临时登录并选择他们想要的内容并运行报告。将所有不同的参数选择组合加起来,就有 150 种不同的报告。
现在要求发生了变化,我们需要每个月在 Excel 中完成所有 150 份报告并保存到网络中。如何安排所有 150 个选项在 Excel 中运行和保存(没有 150 个订阅)。谢谢
你用的是企业版吗?如果是这样,您可以创建一个数据驱动的订阅。您需要设置一个包含 150 行的表,其中至少 3 列代表每个参数。为了灵活性,我会为渲染格式(EXCEL)和目标文件夹添加一列。然后您可以创建一个订阅。
否则,如果您只有标准版,您唯一的选择是创建 150 个订阅。在这种情况下,我倾向于编写一个脚本来与 RS.EXE 一起使用来生成 150 个订阅。
这是一个生成 Excel 文件的示例脚本。我重新阅读了您的帖子,并决定您实际上并不需要订阅方面的内容。您只需要呈现报告,然后安排这个,只需为命令行创建一个批处理文件并使用 SQL Server 代理安排它。
您使用记事本输入此内容,然后将文件另存为 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
此代码仅创建一个文件。您需要添加一种循环方式来为每个参数组合设置参数,然后进行渲染。