1

ユーザーがアドホックにログインし、必要なものを選択してレポートを実行できるように、3 つの異なるパラメーターを含むレポートを作成しました。パラメータ選択のさまざまな組み合わせをすべて合計すると、150 の異なるレポートが作成されます。

今では要件が変更され、毎月 150 件のレポートすべてを Excel で作成し、ネットワークに保存する必要があります。150 のすべてのオプションを実行して Excel で保存するようにスケジュールするにはどうすればよいですか (150 のサブスクリプションがなくても)。ありがとう

4

1 に答える 1

1

Enterprise Edition を使用していますか? その場合は、データ ドリブン サブスクリプションを作成できます。各パラメーターを表す列が少なくとも 3 列ある、150 行のテーブルを設定する必要があります。柔軟性を高めるために、レンダリング形式 (EXCEL) とターゲット フォルダーの列を追加します。その後、1 つのサブスクリプションを作成できます。

それ以外の場合、Standard Edition しかない場合、唯一の選択肢は 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

このコードは、1 つのファイルのみを作成します。パラメータの組み合わせごとにパラメータを設定してからレンダリングするために、それをループする方法を追加する必要があります。

于 2012-06-08T13:50:44.750 に答える