これは単純なはずですが、まだ何も見つかりません。Reporting Services には、計算された値と動的な可視性を持つ最大 6 行のテーブルがあります。これらの行を合計したいと思います。基本的に私はいくつかの請求書項目を持っており、合計したいと考えています。ストアド プロシージャはシステムの他の場所で使用されているため、DB 側では何も変更できません。各行は異なるデータセットからもデータを取得するため、データセットの合計を計算することはできません。テーブルフッターですべての行を合計できますか? Excelで行数を合計するのと同じですか?合計を計算するために、各行の可視性式をフッター行に入れるのは非常に冗長に思えます。
3 に答える
これを達成するためのいくつかの方法:
1.次のように、SQL で計算を行い、そのフィールドを合計します。
SELECT Quantity, Amount, Quantity * Amount As TotalAmount FROM MyTable
次に、詳細行の 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は「GROUPBY」と同等です。
COUNT、AVGなどでも同じ手法を使用できます
詳細については 、http://msdn.microsoft.com/en-us/library/ms189461(SQL.90).aspxを参照してください。
実行順序に問題がある場合は、テーブルの下にテキスト ボックスを追加し、このボックスに TotalAmount を表示します。