2017-12-22 13 views
1

は、私はそれで、これとSSRSの発現を有する:SSRS式 - #エラー、明らかに正しい表現で

=IIF(
    Fields!CUT.Value.ToString().Length > 1 
    ,IIF(
     Fields!CUT.Value.ToString().Contains(","), 
     Fields!CUT.Value.ToString().Substring(0, Fields!CUT.Value.ToString().IndexOf(",")), 
     Fields!CUT.Value.ToString() 
    ) 
    ,"" 
) 

翻訳:フィールドが,が含まれてい
場合は、私のフィールドのsubstringを取得最初の位置から,の位置までです。フィールドに,が含まれていない場合は、フィールド全体を取得してください。

Probelm:
私はCOMMAが存在しないすべてのページに#Errorを取得します。 COMMAがある場合、期待どおりに動作します。フィールドの1つ、値は4です。別のシナリオでは、値は17/64" Corrugatedです。私はそれらの両方のために誤りを得る。
私はいくつかの異なるアプローチを試してみた:

LIKEの代わり Contains

=IIF(
    IsNothing(Fields!CUT.Value) 
    ,"" 
    ,IIF(
     Fields!CUT.Value LIKE "*,*", 
     Mid(Fields!CUT.Value, InStr(Fields!CUT.Value, ",") + 1, (LEN(Fields!CUT.Value) - InStr(Fields!CUT.Value, ",") - 1)) 
     Fields!CUT.Value 
    ) 
) 
  • を使用し

    1. 私は私に新しいフィールドを追加しました私が試した何

      の代わりにdatasetXXXXで置き換えられました。私はSSRSが文字列の一部として,について話していることを理解できないかもしれないと思った。クエリを変更して、XXXXがあるかどうかを確認しました。それでも同じことがあります#Error

    2. ファイルを削除し、.dataファイルを削除し、プロジェクトを削除してプロジェクトを再構築します。なぜなら、これは明らかに間違っているわけではないからです。だから私はおそらく最新バージョンのレポートを見ていないと思った。

    何もしていないようです!私は何か悪いことに本当に近いです!このことは私を狂ってしまう。

    質問:

    1. 誰もが私の表現のいずれかに何かを参照してください?
    2. 私が達成しようとしていることに対してより良い方法がありますか? ,がある場合は、,の前にすべてを渡してください。そうでなければ、私にすべてを与えてください。

    編集1:異なる分野で、私はこれに非常に似て何かやっている、ということは注目に値する
    ,である場合には、

    IIF(
        IsNothing(Fields!CUT.Value) 
        ,"" 
        ,IIF(
         Fields!CUT.Value LIKE "*,*" 
         ," | Length: " & Mid(Fields!CUT.Value, InStr(Fields!CUT.Value, ",") + 1, (LEN(Fields!CUT.Value) - InStr(Fields!CUT.Value, ",") - 1)) 
         ,"" 
        ) 
    ) 
    

    これが何をやっていることですがその同じフィールドは、,の後に私にすべてのものを与え、それを| Length:に付け加えます。 ,がない場合は、空白を表示してください。""これは完全に正常に動作します。 ,があり、,が存在しない場合。だから私はマイクロソフトがSSRSを使って私を夢中にさせていると結論づけました。

  • +0

    SSRSは、関係なく、最初の文が真か偽かの 'IIF'のすべての部分を評価します!'フィールドCUT .Value.ToString()。Substring(0、Fields!CUT.Value.ToString()。IndexOf( "、")))。コンマがない場合、この式はコンマの位置を見つけることができません。しかし、私は 'IndexOf'関数がどのように動作するかを正確にはわかりませんし、現時点でテストする手段がないため、これを単なるコメントとして残しています。 –

    答えて

    1

    SWITCHを使ってこれを行うことができます。最初にカンマがないことをテストしますが、文字列の最初の部分をカンマのポイントまで取得したいと思っていた方が簡単です。

    これはsplit関数を使用し、最初の要素を取ります。

    =(Split(Fields!CUT.Value, ",")).GetValue(0) 
    

    あなたの問題が最も可能性の高いあなたの本当のセクションにあるように、ニースとシンプルな:)

    +0

    ありがとうございます。私は 'Switch'を使うことを考えなかった。それは間違いなく簡単でした。しかし、私はすでにストアドプロシージャを変更して2つの異なるフィールドに結果を返すので、SSRSでそれを心配する必要はありません。私はおそらく、将来の参照のためにあなたのことを試してみるつもりです。ありがとう –

    +0

    私はこれを使用しなかったにもかかわらず答えとしてマーキング、これは間違いなく動作します。 'Switch'と' Split'の両方が動作します。しかし、私はすでにストアドプロシージャに大きな変更を加えました。だから私はそれに行くつもりです。ありがとう。 –