ナレッジベース

文字列から文字区切りされた部分文字列を抽出する


発行: 13 Dec 2013
最終修正日: 11 Mar 2024

ご質問

特定の開始文字と終了文字で区切られた文字列を、より長い文字列から抽出する方法は?

環境

  • Tableau Desktop

回答

長い文字列から部分文字列を抽出する手順は次の通りです。この手順は、添付のワークブックで確認できます。
  1. [分析] > [計算フィールドの作成] を選択します。
  2. [計算フィールド] ダイアログ ボックスが開き、次を行います。
    • 計算フィールドに名前を付けます。ワークブックの例では、計算フィールドには Substring (部分文字列) という名前が付けられています。
    • 式フィールドで、次のような計算フィールドを作成します。
      IF CONTAINS([<Dimension>], '<Identifying Character 1>') THEN
      MID(
          [<Dimension>],
          FIND([<Dimension>],'<Identifying Character 1>') + 1,
          FIND([<Dimension>],'<Identifying Character 2>') - (FIND([<Dimension>],'<Identifying Character 1>') +1)
      )
      END
      
  3. [OK] をクリックします。
  4. 部分文字列を [行] シェルフにドラッグします。

詳細情報

  • この計算では、最後の部分文字列に識別文字は含まれません。識別文字を含めるには、上記の計算で両方の「+1」を削除します。
  • 条件 CONTAINS([<Dimension>], '<Identifying Character 1>') を使用する IF ステートメントは、最初の識別文字を含まない文字列を除外します。この条件が必要なのは、最初の識別文字が見つからない場合に、MID() の有効な開始位置でありながら FIND() が 0 を返すためです。
  • 「Identifying Character 1」は、求める部分文字列の先頭にあります。
  • 「Identifying Character 2」は、求める部分文字列の末尾にあります。
  • 2 つの同じ文字にはさまれた部分文字列(たとえば、文字列「the *dog* is brown」の中の「dog」)を検索する場合、2 番目の文字には FIND() の代わりに FINDNTH() を使用します。次のようになります。
    • MID(
          [<Dimension>],
          FIND([<Dimension>],'<Identifying Character>') + 1,
          FINDNTH([<Dimension>],'<Identifying Character>', 2) - (FIND([<Dimension>],'<Identifying Character>') +1)
      )
      
この記事で問題は解決しましたか?