私のレポートは、日付範囲に基づいて SQL からデータを取得し、カスタム コードを使用して Employee および CategoryType ごとに合計を計算し、値をディクショナリに保存します。Employee ごとの総計を取得するには、マトリックス セルで関数を呼び出し、累積合計を返す EmployeeID を渡します。グラフには、まったく同じ方法でデータが取り込まれます。
Report Builder 3.0 でレポートを直接実行すると、すべてが正常に機能します。ただし、レポートを Excel にエクスポートするときに問題が発生します。 初めてエクスポートすると、合計が 2 倍になります。 連続するたびに、乗数は 1 ずつ増加します。(1 番目 - 2 倍、2 番目 - 3 倍、3 番目 - 4 倍など)。この問題を回避するには、Init イベントをオーバーライドして辞書変数をクリアします (コードについては以下を参照してください。別の投稿された質問で見つけたキーワードSharedを使用していることに注意してください)。ディクショナリがガベージ コレクションされ、メモリに既に存在するものから再計算されないため、Excel の問題は解決されました。
しかし今、別の問題が存在します。 Web 経由でレポートを実行すると、グラフには現在の日付から 1 週間の日付範囲内のデータのみが表示されますが、マトリックスにはデータが表示され、合計は正確です。非常に奇妙な!日付範囲を 1 週間より長くすると、空白のグラフが表示されます。上記のリンクは、これが SSRS の「レポート オン デマンド」エンジンが原因である可能性があることを示唆していますが、私の考えでは問題の解決策を提供していません。レポートを Excel にエクスポートし、単に Web で表示するときに機能する (正しい合計を表示し、グラフにデータを入力する) ソリューションが必要です。必要に応じて、スクリーンショットと詳細情報を投稿します。
LoadCompleteイベントをオーバーライドしようとしましたが(ページ上の他のすべてのコントロールが読み込まれるため、辞書をクリアする絶好の機会になると考えています)、SSRS カスタム コードでこれが可能であるかどうかはわかりませんし、適切な構文も不明です。
これを機能させるために代わりに使用する必要がある別のレンダリング イベントはありますか? 似たようなものに出くわし、合理的な解決策を持っている人はいますか?
public Shared Dim dict As New System.Collections.Generic.Dictionary(Of String, Decimal)
'Override built-in OnInit function and clears dictionary; ensures correct totals when exporting to Excel
Protected Overrides Sub OnInit()
dict.Clear()
End Sub