4

SSRS 2005を使用してレポートを作成していますが、レポートの列の1つは単純な平均計算です。ゼロで除算したくないので、テキストボックスの値として次のように入力します。

=Switch(Fields!Count.Value=0,0,Fields!Count.Value>0,Fields!Sum.Value/Fields!Count.Value)

これでも2番目の式が評価されます。

そしてそうします:

=IIF(Fields!Count.Value=0,0,Fields!Sum.Value/Fields!Count.Value)

レポートにエラーを表示したくありません。どうすればこの問題を克服できますか?

4

4 に答える 4

2

残念ながら、IIF は実際には単なる関数であるため、関数が呼び出される前にすべての引数が評価されます (その結果、ゼロ除算が発生します)。

式に複雑なロジックを埋め込む 1 つの方法は、レポートに関数を埋め込むことです。レポート プロパティの [コード] タブで、任意の値を返す VB 関数を作成できます。

Public Function GetMeanValue(ByVal Sum as Decimal, ByVal Count As Int) As Decimal
    'your logic in plain old vb syntax here

End Function

テキストボックスのテキスト式プロパティ:

=Code.GetMeanValue(Fields!Sum.Value, Fields!Count.Value)
于 2008-12-23T14:13:26.603 に答える
1

これが常に私にとってうまくいった解決策です: ゼロによる除算エラーの回避

レポートに分割が多すぎると面倒です。私は、除算を行い、除算をゼロで処理する VB コードを好みます。vb コードが多すぎると、レポートのパフォーマンスが低下するかどうかはわかりません。

vbでそれを行う方法は、 リンクをarchive.orgリンクに置き換えました。そのリンクからの関連コンテンツは次のとおりです。

その計算を除算を行っているすべてのテキスト ボックスにドロップする代わりに、[レポート] >> [レポート プロパティ] >> [コード] の下に移動し、次のコードをドロップします。

Public Shared Function Divide(Num1 as double, Num2 as double) AS オブジェクト

    IF ISNOTHING(Num2) Or Num2 = 0 Then
        Divide = "n/a"
    ELSEIF Num1 = 0 THEN
        Divide = 0
    ELSE
        Divide = Num1  / Num2
    END IF
End Function

そして、除算を行う必要があるレポートの各テキスト ボックスで、次のように関数を呼び出します。

=Code.Divide(1, 0)
于 2010-03-05T15:11:29.683 に答える
1

これを試して:

=IIf(Fields!Count.Value = 0, 0, Fields!Sum.Value / IIf(Fields!Count.Value = 0, 1, Fields!Count.Value))

于 2009-01-16T13:43:50.680 に答える