web-dev-qa-db-ja.com

SSRS2008レポートのゼロ/ヌル回避策で除算

次の式を値とするフィールドを持つレポートがあります。

Fields!TotalPrice.Value/Fields!TotalSlots.Value

TotalSlotsが空白であることがあったため、ゼロ除算のランタイムエラーが発生していました。そこで、式を次のように変更しました。

=IIF(Fields!TotalSlots.Value > 0, Fields!TotalPrice.Value/Fields!TotalSlots.Value,"unknown")

しかし、私はまだゼロ除算エラーを取得しています。このゼロ因子の問題を回避するにはどうすればよいですか。

13
jsmith

VB IIF すべての引数を評価 なので、いずれかの引数がエラーをスローするとエラーがスローされます。

あなたの式は次のように書くことができます:

=IIF(Fields!TotalSlots.Value > 0,
   Fields!TotalPrice.Value /
   IIF(Fields!TotalSlots.Value > 0,
       Fields!TotalSlots.Value,
       1 ),
   "unknown")

その場合、TotalSlotsがゼロの場合でも、数式で除算の問題が発生することはありません。

16
Jamie F

ジェイミーFの答えは正しいです。ヒントとして、レポートコードに関数を追加して、分割を複数のセルに実装するのを少し簡単にすることができます。

Public Function Divider (ByVal Dividend As Double, ByVal Divisor As Double)
If IsNothing(Divisor) Or Divisor = 0
  Return 0
Else
  Return Dividend/Divisor
End If
End Function 

次に、次のようなセルでこれを呼び出すことができます。

=Code.Divider(Fields!FieldA.Value, Fields!FieldB.Value)
24

これは、除算がIIFの結果の1つである場合にのみ発生するようであり、一方を他方で除算する式を記述した場合ではありません。

=IIF(thing=1,10/0,0)

物事を評価する前に、すでに両方の結果を計算しようとしたため、エラーが発生しました。この方法でIIFを使用してゼロから保護することはできません。たとえば、IIFを除算の最下位に配置する必要があります。

=IIF(thing=1, 10/IIF(divisor=0,-99999999999,divisor),0)

結果として奇妙な小さなゼロ以外の数値を導入したため、これは満足のいくものではありませんが、エラー以外が必要な場合は問題ない可能性があります。

技術的には、#errorが正解です。

1
TheBigYinJames

あなたの誤りは計算にあるとは思わない。まず、SSRSはこの状況に自動的に対処します。私の3番目のコラムを参照してください。そして4番目はあなたの表現を示しています:

enter image description here

あなたの問題はおそらくどこかにあります

1
Diego