2009-03-11 22 views
3

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

答えて

13

、いくつかの方法:

SELECT Quantity, Amount, Quantity * Amount As TotalAmount FROM MyTable 

それからちょうどあなたの詳細にTotalAmountフィールドを使用します。

1.そうは次のように、SQLで計算を行うと、そのフィールドを合計フッターで合計します。

2.あなたの合計を計算し、代わりに和のあなたのフッターにそれを使用する第二データセットの作成:カスタムコードを使用しています

=Sum(Fields!TotalAmount.Value, "MyTotalingDataset") 

3.を。レイアウトスペースを右クリックして[プロパティ]を選択し、[コード]タブをクリックします。次のコードに入れて:これは上記のコードを実行し、あなたの計算を行い、プラス計算します

=Code.CalculateRowTotal(Fields!Quantity.Value, Fields!Amount.Value) 

:詳細バンドで

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.TotalAmount 

そして、あなたが行われている:列が式を持っているので、

フッターバンドは、総合計を表示します。コードの実行順序が保証されていないため、いくつかのレポートでは最初にフッタを実行します(たとえば、Detailバンドの行の合計を使用する場合など)。これにより合計ゼロディテールバンドの計算はまだ行われていないので、一般的なケースではこれはうまくいくはずです。

+0

コード実行の順序が保証されていないことを通知していただき、ありがとうございます。なぜなら、行を合計するのがより複雑な理由がよりわかりやすいからです。 – kd7iwp

3

次のようにdbを変更できます。

データを集約することなく、SQL で集約結果を得ることができますか?

ただ、次のようにデータセットに余分な列を追加します。上記のサンプルで '合計'

AS、 をSUM(OrderQty)OVER(SalesOrderID BY PARTITION): OrderQtyあなたが を合計したい値であり、 SalerOrderIDは

'BY GROUP' と同じあなたはCOUNT、AVGと同じ技術を使用し、そう http://msdn.microsoft.com/en-us/library/ms189461(SQL.90).aspx

ここ

詳しい情報にすることができますです

-2

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

+1

もう少し具体的にできますか? -1絶対的な曖昧さ – cjds

関連する問題