我有一份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
任何协助解决此问题都将不胜感激。
答案 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)
对我的数据工作得很好:
你会在自定义代码中注意到我略微调整了你的逻辑;这对我来说很有意义,但可以选择适合你的任何内容以及完整的数据集。