4

これは単純なはずですが、まだ何も見つかりません。Reporting Services には、計算された値と動的な可視性を持つ最大 6 行のテーブルがあります。これらの行を合計したいと思います。基本的に私はいくつかの請求書項目を持っており、合計したいと考えています。ストアド プロシージャはシステムの他の場所で使用されているため、DB 側では何も変更できません。各行は異なるデータセットからもデータを取得するため、データセットの合計を計算することはできません。テーブルフッターですべての行を合計できますか? Excelで行数を合計するのと同じですか?合計を計算するために、各行の可視性式をフッター行に入れるのは非常に冗長に思えます。

4

3 に答える 3

13

これを達成するためのいくつかの方法:

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

これで完了です。コードが実行される順序が保証されておらず、一部のレポートではフッターが最初に実行されるため (たとえば、詳細バンドで行の合計を使用する場合)、合計がゼロになるため、注意してください。詳細バンドの計算はまだ行われていないため、一般的なケースではこれでうまくいくはずです。

于 2009-03-11T22:40:14.277 に答える
4

次のようにデータベースを変更できます。

データを集約せずに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を参照してください。

于 2009-03-20T08:28:52.877 に答える
-2

実行順序に問題がある場合は、テーブルの下にテキスト ボックスを追加し、このボックスに TotalAmount を表示します。

于 2010-04-15T10:27:16.467 に答える