2016-08-18 2 views
1

私はこれを運がないようにしようとしています。SSRSは完全な名前のフィールドを分割する式を表現します

データベースベースフィールドにはフルネームフィールドしかありません。一部のケースではミドルネームイニシャル、その他の場合はミドルネームイニシャルは含まれていません。

私は、以下のssrs式を使用してLastName、FirstNameを表示しようとしています。これは中間のイニシャルまたはフィールドの名前を持たない名前では機能しますが、私たちは、表示に関する問題にぶつかります。

=Right(Fields!agent_name.Value,Len(Fields!agent_name.Value)-Instr(Fields!agent_name.Value," ")) & ", " & (Left(Fields!agent_name.Value,Instr(Fields!agent_name.Value," "))) 

しかし、それは、ミドルネームのイニシャルは、例として...最初に表示するには含まれています

フルネームフィールドは、ジョン・S Doeの場合は、表現上のよう:

S Doe, John 

私は必要なもの表示するには:

Doe, John 

中間のイニシャル/名前をディスプレイ?

私は大量の研究を行い、多くのdiff表現を試しましたが、運がありません。前もって感謝します。

答えて

1

は、この式を使用してみてください:

=RIGHT(
Fields!agent_name.Value,LEN(Fields!agent_name.Value)-InStrRev(Fields!agent_name.Value," ")) 
& ", " & LEFT(
Fields!agent_name.Value, 
InStr(Fields!agent_name.Value," ")-1 
) 

私が保守性ソリューションを取得するには、カスタムコードを使用することをお勧めしかし、ネイティブSSRSソリューションです。

UPDATE:正規表現のソリューション:

=System.Text.RegularExpressions.Regex.Replace(
    Fields!agent_name.Value, 
    "(\w+)\s+(\w+\.*\s)?(\w+)", 
    "$3, $1" 
) 

このことができますなら、私に教えてください。

=Split(Fields!agent_name.Value," ")(Split(Fields!agent_name.Value," ").Length-1) + ", " + Split(Fields!agent_name.Value," ")(0) 

編集:上記は確かに接尾辞では動作しません

+0

マイナーノート:この式のように、最初の名前から最後の文字を切り取るOBOBがあります。 – bitnine

+0

@bitnine、ありがとうございます。式をテストすると、最初のミドルネーム(もしあれば)だけを含む名前に対して動作します。すなわち、 'John S Doe'、' Allan F Alsop'。どのようにテストしましたか? –

+0

私は単一の静的な行 "SELECT 'Joeseph A Bank' AS agent_name;"でデータセットを使用しました。それで素早くチェックするために、ベアボーンTablixに式を貼り付けました。私が見た結果は "Bank、Joesep"でした。 – bitnine

2

ながらやや非効率的で、これは結果を達成するためにクリーンな方法です。次の式は、計算されたフィールドで使用できる2番目の名前と1の長さを持つ中間のイニシャルを削除します。しかし、それは名 "アン・マリー"のために失敗し、最初の/最後のスワップは別々に処理する必要があります。

=IIF(Split(Fields!agent_name.Value," ")(1).Length=1,Replace(Fields!agent_name.Value, " " + Split(Fields!agent_name.Value," ")(1) + " "," "),Fields!agent_name.Value) 

これは、コードでこれを処理するのが最も効果的だということです。しかし、たとえそうであっても、あなたのフルネームフィールドが、あなたがそこで分離したいものを超えてスペースを含んでいるならば、接尾辞や初めの「Ann Marie van Der Beek」のような曖昧な場合の可能性が生じる。

+0

これはうまくいきますが、サフィックスを持つ名前の場合には小さな問題が1つあります。例えば、Robert K. Downey、JR。私がこれを使うと、それはJRとして表示されます、Robert – user3571153

+0

ああ、接尾辞。それらの望ましい出力は何でしょうか?あなたは単に "、"から "、"の文字列置換を入れることができます。しかし、あなたのネームデータベースに "James Michael D Van Der Beek、Jr"のような人がいれば、簡単な表現がケースを扱うためにひどく巻き込まれてしまいます。特に生きていて、に加えられているなら。 – bitnine

+0

接尾辞の出力は「Downey、JR。、Robert」 この人にありがとう。ほんとうにありがとう! – user3571153

関連する問題