1

データベースから文字列として返される値がありますが、それは である可能性があり、 であるdecimal場合はdecimalとして表示しdecimal、特定の方法でフォーマットしたいdecimalです。戻ってくる。

これが私のコードです:

=Iif
(
    IsNothing(Fields!Amount.Value) Or Len(Trim(Fields!Amount.Value)) < 1, 
    Fields!Amount.Value, //have even tried to do CStr(Fields!Amount.Value) in case conversion below makes the report expect decimals for all values
    Iif
    (
        IsNumeric(Fields!Amount.Value), 
        CDec(Fields!Amount.Value),
        Fields!Amount.Value
    )
)

上記のコメントはコードの一部ではありません。とにかく、上記に基づいて、すべての 10 進数は正常に 10 進数に変換され、正常に表示されますが、空の文字列または数値以外の値を保持する文字列はすべて #Error として表示されます。

結果の表示例を次に示します。

72.00
95.00
#Error
20.00

この表現の何が問題になっていますか? なぜ SSRS は VB の代わりに C# を使用できなかったのでしょうか?!!?

更新:問題は変換に関係しており、値が何もないか、1文字未満か、数値かをチェックするロジックではないことを知っています。これは、次のように機能するためです。

=Iif
(
    IsNothing(Fields!Amount.Value) Or Len(Trim(Fields!Amount.Value)) < 1, 
    "is nothing or less than 1",
    Iif
    (
        IsNumeric(Fields!Amount.Value), 
        "is numeric",
        "is not numeric"
    )
)

これは正しく表示されます:

is numeric
is numeric
is nothing or less than 1
is numeric
4

2 に答える 2

1

Iifは関数であるため、関数が呼び出される前にすべての引数が評価されます。したがって、エラーを防ぐために Iif を使用しても意味がありません。

ユーザー定義関数が必要だと思います(SSRSでカスタム関数を書く

だから代わりにIif(IsNumeric(Fields!Amount.Value),...)

関数を定義する

Function DecimalIfPossible(Value as string) As Object
  If IsNumeric(Fields!Amount.Value) then
      Return  CDec(Fields!Amount.Value)
   else
      Return  Fields!Amount.Value
   End if
End Function

と呼びますDecimalIfPossible(Fields!Amount.Value)

于 2013-08-23T17:23:48.747 に答える
0

10 進数を文字列に戻さない理由

 IIF
    (
        IsNumeric(Fields!Amount.Value), 
        CStr(CDec(Fields!Amount.Value)),
        Fields!Amount.Value
    )

ロジックに基づいて、空または Null 文字列を探しているので、SQL で処理します。次のような非数値の場合は NULL に変換します

CASE WHEN ISNUMERIC(Amount) = 1 THEN Amount ELSE NULL END As Amount

または使用NULLIF

于 2013-08-23T17:28:54.857 に答える