除算式を持つTablixボックスがあります。ゼロまたはヌルで除算すると、レポートに_#Error
_が表示されます。 IIF
ステートメントを作成して、静的な値でテストしました。これにより、構文が正しいことが確認されましたが、レポートにエラーが表示されます。
=IIF(Sum(Fields!CY_Dollars.Value)=0, 0, (Sum(Fields!CY_Dollars.Value) - Sum(Fields!PY_Dollars.Value))/(Sum(Fields!PY_Dollars.Value)))
そこで、今年のドルを取り、前年のドルを引いて、その合計を前年のドルで割って、変化率を求めています。これに私が得ていないトリックがありますか?!
ゼロ除算条件を処理する関数をレポートコードに追加できます。これにより、複数のセルでの実装が少し簡単になります。
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)
SSRSがIIF
ステートメントを実際に短絡させないという問題に直面していると思われます。 をチェックしている場合でも、ゼロ除算エラーが発生します。
次のようなものを試してください:
_=IIf(Sum(Fields!PY_Dollars.Value) = 0, 0, Sum(Fields!CY_Dollars.Value) - Sum(Fields!PY_Dollars.Value))
/ IIf(Sum(Fields!PY_Dollars.Value) = 0, 1, Sum(Fields!PY_Dollars.Value))
_
2つのIIf
ステートメントを使用すると、Sum(Fields!PY_Dollars.Value)
= 0のときに式_0/1
_を使用してエラーを回避できます。したがって、単にを返します。
上記の式はSum(Fields!PY_Dollars.Value) = 0
をチェックしていますが、あなたのものはSum(Fields!CY_Dollars.Value) = 0
をチェックしていることに注意してください-分母はここでゼロチェックを必要とします。
コードを維持するオーバーヘッドを回避するために、以下のソリューションは私にとって最もきちんとしたものです。可能な最小のDouble
値を追加することにより、分母のゼロによる除算を回避します(Double.Epsilon
、これは4.94e-324
)。この値は小さすぎて、人々がSSRSを使用するものの端数の値に影響を与えません。また、IIF関数のネストも回避します。
=IIF(Sum(Fields!Denominator.Value)>0,
Sum(Fields!Numerator.Value)/(Sum(Fields!Denominator.Value)+Double.Epsilon),
nothing)