5

まず最初に、非常に大規模で長時間実行されるレポートを実行するのは恐ろしい考えであることを理解しています。Microsoft には、SSRS レポートの実行に 30 秒以上かかるべきではないという経験則があることは承知しています。ただし、州法を遵守するなどの外部の力により、巨大なレポートが好まれる悪である場合があります。

私の職場には、Crystal Reports から SSRS に移行した asp.net (2.0) アプリがあります。大規模なユーザー ベースと複雑なレポート UI 要件のため、ユーザーが入力したパラメーターを受け入れ、夜間に実行されるスケジュールを作成する一連の画面があります。アプリケーションは複数のレポート フレームワークをサポートしているため、SSRS のスケジューリング/スナップショット機能は使用しません。システム内のすべてのレポートは、スケジュールされたコンソール アプリによって生成されます。このアプリは、ユーザーが入力したパラメーターを取得し、レポートが作成された対応するレポート ソリューションを使用してレポートを生成します。SSRS レポートの場合、コンソール アプリは SSRS レポートを生成し、SSRS Web サービス API を介して PDF としてエクスポートします。

最近 Crystal レポートから SSRS に変換した特定の 25,000 ページのレポートを除いて、これまでのところ、SSRS は Crystal よりもはるかに扱いが簡単でした。SSRS サーバーは、SSRS 2005 を実行する 32 GB の RAM を備えた 64 ビット 2003 サーバーです。小さなレポートはすべて素晴らしく機能しますが、このような大きなレポートには問題があります。残念ながら、Web サービス API を使用して事前レポートを生成することはできないようです。次のエラーは、生成/エクスポートの約 30 ~ 35 分後に発生します。

例外メッセージ: 基になる接続が閉じられました: 受信時に予期しないエラーが発生しました。

Web サービス呼び出しは、皆さんが以前に見たことがあると確信しているものです。

data = rs.Render(this.ReportPath, this.ExportFormat, null, deviceInfo,
   selectedParameters, null, null, out encoding, out mimeType, out usedParameters, 
   out warnings, out streamIds);

奇妙な点は、レポート マネージャーを使用してレポート サーバー上でレポートを直接実行すると、このレポートが実行/レンダリング/エクスポートされることです。レポートのデータを生成するプロセスは、約 5 分間実行されます。レポートは、約 12 分後にブラウザー/ビューアーに SSRS ネイティブ形式で表示されます。レポート マネージャーのブラウザー/ビューアーを使用して PDF にエクスポートするには、さらに 55 分かかります。これは確実に機能し、なんと 1.03 GB の pdf が生成されます。

以下は、Web サービス API を介してレポートを機能させるために私が試みた、より明白なことのいくつかです。

  • レポート サーバーで HttpRuntime ExecutionTimeout 値を 3 時間に設定します。
  • レポート サーバーで HTTP キープ アライブを無効にしました
  • レポート サーバーのスクリプト タイムアウトを増やしました
  • レポートがサーバーでタイムアウトしないように設定する
  • クライアント呼び出しでレポートのタイムアウトを数時間に設定する

私が試した微調整から、タイムアウトの問題はすべて解消されたと言ってよいでしょう。

エラー メッセージを調査したところ、Web サービス API はデフォルトではチャンクされた応答を送信しないと思われます。これは、1 回の応答ですべての 1.3 GB を回線経由で送信しようとすることを意味します。ある時点で、IIS はタオルを投げます。残念ながら、API は Web サービスの構成を抽象化するため、応答のチャンクを有効にする方法を見つけることができないようです。

  1. 総ページ数を減らさずにPDFエクスポートフェーズやPDFのサイズを縮小/最適化する方法を知っている人はいますか?
  2. SSRS の応答チャンクを有効にする方法はありますか?
  3. なぜこれがサーバー上で実行され、APIを介して実行されないのかについて、他の誰かが他の理論を持っていますか?

編集: kcrumley の投稿を読んだ後、ファイル サイズ/ページ数を取得して、平均ページ サイズを調べ始めました。興味深いことに、小さなレポートでは、各ページが約 5K になるように計算されます。興味深いことに、レポートが大きくなると、この「平均」が増加します。たとえば、8000 ページのレポートは平均 40K/ページを超えています。非常に奇妙な。また、各グループの最後のページを除いて、ページごとのレコード数が設定されているため、一部のページに別のページよりも多くのレコードがある場合はありません。

4

3 に答える 3

4

SSRS からの大量の PDF エクスポートを絞り込み、2 つの主な原因を発見しました

1) 画像が JPG または PNG のカラー タイプ 3 でない場合は、BMP に展開されます。こちらを参照してください。

2) SSRS を別の方法で動作するように構成しない限り (推奨されません)、5 つの「標準」PDF フォントのいずれかでない限り、SSRS はフォントまたはフォント サブセットを PDF に埋め込みます。

ほとんどの Windows OS には標準フォント (おそらく Symbol 以外) はインストールされていませんが、使用するTimes New Roman, Courier New, or Arialと順方向および逆方向のフォント置換が行われることがわかりました。

RDL を変換する最も簡単な方法は、それらを XML として表示し、FontFamilyタグを検索して置き換えることです。

非標準フォントを使用する必要がある場合でも、ダメージを最小限に抑えることができます。

  • できるだけ少ないフォントを使用してください。RDL XML を検索して、冗長なフォントがないことを確認します。
  • 異なるサイズのフォントを使用する場合は、TTF フォントを使用してください。
  • フォントの通常、太字、イタリック体を混在させないようにしてください。そうしないと、複数回埋め込まれてしまいます。
于 2012-05-07T12:05:22.123 に答える
3
  1. 総ページ数を減らさずにPDFエクスポートフェーズやPDFのサイズを縮小/最適化する方法を知っている人はいますか?

いくつかのアイデアと質問があります
。 1. これはグラフィックが多いレポートですか? そうでない場合、最初はテキストであるが、SSRS PDF レンダラーによってグラフィックに変換される表がありますか (PDF でテキストを選択できるかどうかを確認してください)。レポートの情報密度によっては、1 ページあたり 41K が必要以上になる場合もあれば、そうでない場合もあります。しかし、レポートのレイアウトに軽微な問題が発生するケースがありました。 たとえば、テーブルがページの余白ににじみ出てしまうなど、SSRS PDF レンダラーが「手を放し」、テーブルをテキストではなくイメージとしてレンダリングすることになりました。 . 明らかに、レポート内のグラフィックが少ないほど、ファイル サイズは小さくなります。
2. レポートを簡単に分割する方法はありますか? たとえば、最終レポートで場所 1 の後に場所 2 などが続く 10 か所のレポートの場合、場所 2 の部分とは別に場所 1 の部分を実行できますか? その場合、10 個のサブレポートをすべて受信した後に、 PDFSharpを使用して 1 つの最終的な PDF に結合できます。これにより、ページ番号付けにいくつかの問題が発生しますが、克服できないものではありません。

3. なぜこれがサーバー上で実行され、API 経由では実行されないのかについて、他の誰かが他の理論を持っていますか?

私の推測では、レポートのサイズが非常に大きくなります。IIS 設定と SSRS 固有の設定についてすべてを覚えているわけではありませんが、全体的な IIS 設定 (おそらく Metabase.xml 内) がいくつかあり、大量のデータを通過させるために更新する必要があります。

作業レポートの 1 つを取得し、WAITFOR を使用してストアド プロシージャに長い待機時間を組み込むことで、時間が問題であるかどうかの問題を切り分けることができます (DBMS に SQL Server を想定)。

それ自体は解決策ではなく、アイデアです。それが役に立てば幸い。

于 2008-08-19T18:49:15.073 に答える
2

明らかに、その巨大なレポートは、実際にはレポートよりも1.3GBのデータベースに近いものです。

それを複数の部分に分割し、それらを組み合わせる方法を見つけることを考えましたか?(このサイトにリストされているPDFを組み合わせるには、いくつかの異なる方法の1つを使用してください。)

于 2009-07-09T15:06:41.720 に答える