具有混合文本和数字值的列中的SSRS #Error

时间:2013-10-09 20:46:36

标签: ssrs-2008

我有一份SSRS报告,它在矩阵报告的同一列中有不同的数据类型。当我显示没有格式化的数据时,显示所有数据。但是我希望在整数中使用逗号分隔符,对于较小的值需要3个小数位,如果它们是文本则显示值。

正确显示整数和小数值,但其中包含文本的任何单元格都显示#error。以下是值的格式化方式。

=IIF(InSTR(Fields!KPIValue.Value, ".") > 0, FORMAT(CDbl(Fields!KPIValue.Value), "0.000"), 
     IIF(InSTR(Fields!KPIValue.Value, "/") > 0, Fields!KPIValue.Value, FORMAT(CInt(Fields!KPIValue.Value), "###,###,###,##0"))) 

我在报告的详细数据区域的值表达式中使用此代码。以下是包含和不包含格式的数据示例。

Unformatted   Formatted

17398549      17,398,549

94/04/28      #Error

00/03/34      #Error

00/00         #Error

1.067         1.067

0.829         0.829

0.000         0.000

24020         24,020

任何协助解决此问题都将不胜感激。

1 个答案:

答案 0 :(得分:2)

由于SSRS没有在IIf语句上短路,因为表达式的所有部分都被格式化,并且有些部分会出现数据类型错误,所以会出现错误。

要解决此问题并实现目标,您需要在报告自定义代码中执行此操作。创建一个像:

这样的函数
Function FormatValue (KPIValue As String) As String
  If IsNumeric(KPIValue) And InStr(KPIValue, ".") > 1 Then
    FormatValue = Format(CDbl(KPIValue), "0.000")
  Else If IsNumeric(KPIValue) Then
    FormatValue = Format(CInt(KPIValue), "###,###,###,##0")
  Else
    FormatValue = KPIValue
  End If
End Function

然后您可以在报告中调用:

=Code.KPIValue(Fields!KPIValue.Value)

对我的数据工作得很好:

enter image description here

你会在自定义代码中注意到我略微调整了你的逻辑;这对我来说很有意义,但可以选择适合你的任何内容以及完整的数据集。