Microsoft Reporting Servicesで計算された行の合計を作成する
-
10-07-2019 - |
質問
これは単純なはずですが、まだ何も見つかりません。 Reporting Servicesには、最大6行のテーブルがあり、すべてに計算値と動的な可視性があります。これらの行を合計したいと思います。基本的に、私はいくつかの請求書アイテムを持っており、合計を作りたいです。ストアドプロシージャはシステムの他の場所で使用されるため、DB側では何も変更できません。各行は異なるデータセットからもデータを取得するため、データセットの合計を計算することはできません。すべての行を表フッターで合計できますか? Excelで行の数を合計するのと同様に?各行の可視性の表現をフッター行に入れて合計を計算するのは非常に冗長なようです。
解決
これを達成できるいくつかの方法:
1。次のように、SQLで計算を行い、そのフィールドを合計します。
SELECT Quantity, Amount, Quantity * Amount As TotalAmount FROM MyTable
[Detail]行の[TotalAmount]フィールドを使用して、フッターで合計します。
2。合計を計算する2番目のデータセットを作成し、合計ではなくフッターで使用します:
=Sum(Fields!TotalAmount.Value, "MyTotalingDataset")
3。カスタムコードを使用して実行します。レイアウトスペースを右クリックして[プロパティ]を選択し、[コード]タブをクリックします。次のコードを入力します。
Public Dim TotalAmount As Double = 0
Public Function CalculateRowTotal(ThisValue As Double, ThatValue As Double) As Double
TotalAmount = TotalAmount + (ThisValue * ThatValue)
Return ThisValue * ThatValue
End Function
詳細バンドで、フィールドを合計する列に次の式を設定します。
=Code.CalculateRowTotal(Fields!Quantity.Value, Fields!Amount.Value)
これにより、上記のコードが実行され、計算が行われ、プロセスの合計が計算されます。
フッターバンドには合計が表示されるため、列には次の式が含まれます。
=Code.TotalAmount
これで完了です。コードの実行順序が保証されていないため注意してください。一部のレポートでは、フッターが最初に実行され(たとえば、詳細バンドの行の合計を使用する場合)、合計がゼロになります。詳細バンドの計算はまだ行われていませんが、一般的な場合はこれで機能するはずです。
他のヒント
次のようにデータベースを変更できます。
データを集計せずに SQLで集計結果を取得できることをご存知ですか?
次のように、データセットに列を追加します。 、SUM(OrderQty)OVER(PARTITION BY SalesOrderID)AS 'Total'
上記のサンプル: OrderQtyは、合計する値です SalerOrderIDは「GROUP BY」と同等です
COUNT、AVGなどで同じ手法を使用できます
詳細はこちら http://msdn.microsoft.com/en-us /library/ms189461(SQL.90).aspx
実行順序に問題がある場合は、テーブルの下にテキストボックスを追加し、このボックスにTotalAmountを表示します。