web-dev-qa-db-ja.com

SSRS条件付き加算

複数ページの行を表示するSSRSレポートがあります。各行には「タイプ」フィールドがあります。そのTYPEフィールドには、値の「M」または値の「P」があります。レポートの最後に、「P」タイプのすべての価格値を合計したいと思います。私はこれを試しましたが、#Errorが発生しました:

=Sum(iif(Fields!TYPE.Value = "P",Fields!EXT_QTY.Value * Fields!PRICE.Value ,0))

これはすべての行を合計しました

=iif(Fields!PART_TYPE.Value = "P" ,  Sum(Fields!EXT_QTY.Value * Fields!PRICE.Value ),  0 )

これは実行可能だと確信しています。何か案は?ありがとう

23
MikeTWebb

答えを見つけた...

=SUM(IIF(Fields!PART_TYPE.Value ="P",CDbl(Fields!EXT_QTY.Value * Fields!PRICE.Value), CDbl(0.0)))
35
MikeTWebb

SUMは型の比較のために失敗します-異なる型の値を合計することはできません。0(Double)の式(おそらくInteger)です。 MikeTWebbの答えは、このエラーを回避するために明示的な型変換を行います。これはこの特定の例、つまり合計である場合は問題ありませんが、平均が必要な場合は正確な結果は生成されません(Sum / Count)は、タイプがPの値です。これは、0が値であり、これらの値を計算から実際に除外したい場合に平均計算に含まれるためです。

別のオプションは、0の代わりにNothingを使用することです:

=Sum(IIF(Fields!TYPE.Value = "P", Fields!EXT_QTY.Value * Fields!PRICE.Value, Nothing))

これは、明示的な型キャストを必要とせずに型比較エラーを解決し、Averageのように、値が存在するかどうかが結果にとって重要である集計を使用する場合のより良い解決策です。

15
Chris Latta