4

我正在使用 SSRS 2005 生成报告,报告中的一列是简单的平均值计算。我不想除以零,所以对于我输入的文本框值:

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

这仍然计算第二个表达式。

也是如此:

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

我不希望我的报告显示错误。我该如何克服这个问题?

4

4 回答 4

2

不幸的是,因为 IIF 实际上只是一个函数,所以在调用函数之前所有参数都会被评估(导致你被零除)。

在表达式中嵌入复杂逻辑的一种方法是在报表中嵌入函数。您可以编写一个 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

尝试这个:

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

于 2009-01-16T13:43:50.680 回答
1

在检查零时,我总是否定这样的表达式:

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

Count如果字段为空/空,这具有避免除法的额外好处。

于 2014-06-13T10:59:29.953 回答
1

这是一直对我有用的解决方案: 避免除以零错误

如果报告有太多的部门,它会变得乏味。我更喜欢一些 vb 代码来进行除法并处理除以零。不确定过多的 vb 代码是否会降低报告的性能。

以下是如何使用 vb 将他的链接替换为 archive.org 链接。以下是该链接的相关内容:

我没有将该计算放入所有进行除法的文本框中,而是进入报告>>报告属性>>代码并放入以下代码:

公共共享函数 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 回答