次の式を値とするフィールドを持つレポートがあります。
Fields!TotalPrice.Value/Fields!TotalSlots.Value
TotalSlotsが空白であることがあったため、ゼロ除算のランタイムエラーが発生していました。そこで、式を次のように変更しました。
=IIF(Fields!TotalSlots.Value > 0, Fields!TotalPrice.Value/Fields!TotalSlots.Value,"unknown")
しかし、私はまだゼロ除算エラーを取得しています。このゼロ因子の問題を回避するにはどうすればよいですか。
VB IIF すべての引数を評価 なので、いずれかの引数がエラーをスローするとエラーがスローされます。
あなたの式は次のように書くことができます:
=IIF(Fields!TotalSlots.Value > 0,
Fields!TotalPrice.Value /
IIF(Fields!TotalSlots.Value > 0,
Fields!TotalSlots.Value,
1 ),
"unknown")
その場合、TotalSlotsがゼロの場合でも、数式で除算の問題が発生することはありません。
ジェイミー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)
これは、除算がIIFの結果の1つである場合にのみ発生するようであり、一方を他方で除算する式を記述した場合ではありません。
=IIF(thing=1,10/0,0)
物事を評価する前に、すでに両方の結果を計算しようとしたため、エラーが発生しました。この方法でIIFを使用してゼロから保護することはできません。たとえば、IIFを除算の最下位に配置する必要があります。
=IIF(thing=1, 10/IIF(divisor=0,-99999999999,divisor),0)
結果として奇妙な小さなゼロ以外の数値を導入したため、これは満足のいくものではありませんが、エラー以外が必要な場合は問題ない可能性があります。
技術的には、#errorが正解です。
あなたの誤りは計算にあるとは思わない。まず、SSRSはこの状況に自動的に対処します。私の3番目のコラムを参照してください。そして4番目はあなたの表現を示しています:
あなたの問題はおそらくどこかにあります