我正在使用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)
我不希望我的报告显示错误。我怎样才能克服这个问题?
答案 0 :(得分: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)
答案 1 :(得分:1)
试试这个:
=IIf(Fields!Count.Value = 0, 0, Fields!Sum.Value / IIf(Fields!Count.Value = 0, 1, Fields!Count.Value))
答案 2 :(得分:1)
以下是一直对我有用的解决方案: Avoiding Divide By Zero Errors。
如果报告有太多分歧,那就太乏味了。我更喜欢一些vb代码进行除法并处理除零。不确定是否有太多的vb代码会降低报告的性能。
答案 3 :(得分:1)
检查零时,我总是否定这样的表达式:
=IIF(Fields!Count.Value<>0,Fields!Sum.Value/Fields!Count.Value,0)
如果Count
字段为空/ null,则可以避免分割。