13

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

Fields!TotalPrice.Value/Fields!TotalSlots.Value

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

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

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

4

4 に答える 4

24

ジェイミー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)
于 2012-05-04T01:28:49.420 に答える
16

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

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

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

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

于 2012-05-03T16:39:13.523 に答える
1

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

ここに画像の説明を入力してください

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

于 2012-05-03T15:13:28.787 に答える
1

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

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

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

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

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

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

于 2013-01-30T14:20:13.527 に答える