2013-10-09 60 views
1

我有一個SSRS報告,它在矩陣報告的同一列中具有不同的數據類型。當我顯示數據時沒有格式化顯示所有數據。不過,我希望逗號分隔符爲整數,小數值爲3位小數,如果它們是文本,則顯示值。具有混合文本和數字值的列中的SSRS#錯誤

整數和小數值顯示正確,但其中有文本的單元顯示#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 

任何協助解決這個問題,將不勝感激。

回答

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

你會注意到在自定義代碼中,我稍微移動了你的邏輯;這對我來說很有意義,但可以隨時隨地爲您和您的完整數據集執行任何操作。

+0

這篇文章解決了我的問題。感謝你的協助。 –

+0

不客氣。如果答案解決了您的問題,請考慮將其設置爲已接受:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

相關問題