
Tableau|文字列関数
yukoです。めちゃめちゃ間が空いてしまった・・・
受験勉強期間なので、動かして書いて覚えたいと思います!
本日のVer.は、2022.4です。
文字列関数を使う理由
文字列関数は、文字列データ (テキストデータ) の操作を可能にします。
FIND
FIND(string, substring, [start])
・string 内の substring のインデックス位置を返します。
・substringが見つからない場合は、「0」を返します。
・オプションの引数 start を追加した場合、この関数は同じ処理を行いますが、インデックス位置 start より前に現れる substring のインスタンスはすべて無視されます。
・文字列の最初の文字の位置は「1」です。
FIND( 文字列全体, 探したい文字, [開始位置] ) なので、この場合

FIND("今日も元気だ、ごはんがうまい", "ごはん") → 8
FIND("今日も元気だ、ごはんがうまい", "ごはん", 5) → 8
FIND("今日も元気だ、ごはんがうまい", "ごはん", 9) → 0
FIND("今日も元気だ、ごはんがうまい", "お肉") → 0
引数 [start] のデフォルトは「1」(ってこと)
引数 [start] より後ろで、探したい文字があれば位置を返してくれる
引数 [start] より後ろで、探したい文字が見つからなければ「0」を返す
MID
MID(string, start, [length])
・インデックス位置 start で始まる文字列を返します。
・文字列の最初の文字の位置は 1 です。
・オプションの引数 length を追加した場合、その文字数分が返ります。
MID( 文字列全体, 開始位置, [長さ] ) なので、この場合

MID("今日も元気だ、ごはんがうまい", 8) → ごはんがうまい
MID("今日も元気だ、ごはんがうまい", 8, 3) → ごはん
MID("今日も元気だ、ごはんがうまい", 8,100) → ごはんがうまい
MID("今日も元気だ、ごはんがうまい", 100) → (表示なし)
ISNULL(MID("今日も元気だ、ごはんがうまい",100)) → false (not NULL)
引数[length]は、文字数が明確なときだけ設定
開始位置が文字数全体の長さを超えている場合、何も返さない(のね)
特定の文字を探し出して抜くには、FINDと組み合わせる
SPLIT
SPLIT(string, delimiter, token number)
・指定した文字列を基に、区切り文字を使用して連続したトークンに文字列を分割したサブストリングを返します。
・文字列は「区切り文字とトークンが交互に連続する文字列」として解釈。
・文字列がabc-defgh-i-jklで区切り文字が「-」の場合、「abc」「defgh」「i」「jlk」がトークン(トークン 1 からトークン 4 )
・SPLIT はトークン数に対応するトークンを返します。
・トークン数が正の場合トークンは文字列の左端から、トークン数が負の場合トークンは文字列の右からカウントされます。
SPLIT( 文字列全体 , 区切り文字, 何番目?) なので、この場合

SPLIT( "ツナ・いくら・たらこ", "・", 2 ) → いくら
SPLIT( "ツナ・いくら・たらこ", "・", -1 ) → たらこ
SPLIT( "ツナ・いくら・たらこ", "&", 1 ) → ツナ・いくら・たらこ
SPLIT( "ツナ・いくら・たらこ", "・", 5 ) → (表示なし)
ISNULL( SPLIT( "ツナ・いくら・たらこ", "・", 5 ) ) → false (not NULL)
文字列全体にdelimiterが含まれなければ、分割されない
分割されたトークンより token number が大きい場合、対象なし
TRIM
TRIM(string)
・先頭と末尾の空白を削除した文字列を返します。
STARTSWITH
STARTSWITH(string, substring)
・string が substring で始まる場合、true を返します。
・行頭の空白は無視されます。
STARTSWITH( "たまごかけごはん", "たまご" ) → false??なんで?
STARTSWITH( "たまご", "たまご" ) → true
STARTSWITH( "egg tart", "egg" ) → true
日本語だとうまくいかない?たまごきらい?
ENDSWITH
ENDSWITH(string, substring)
・string が substring で終わる場合、true を返します。
・行末の空白は無視されます。
ENDSWITH( "egg tart", "tart" ) → true
ENDSWITH( "egg tart", "egg" ) → false
ENDSWITH( "たまごかけごはん", "ごはん" ) → true(!)
こっちは日本語でもうまくいくらしい・・・
CONTAINS
CONTAINS(string, substring)
・string に substring が含まれている場合、true を返します。
CONTAINS( "ローストビーフ丼", "丼" ) → true
CONTAINS( "ローストビーフ丼", "ビーフ" ) → true
CONTAINS( "ローストビーフ丼", "ポーク" ) → false
おまけ
英語苦手でとにかく日本語頼りなんですが、引数とか英語で見たほうがわかりやすい。翻訳むつかしいのかな。
参考(公式)
https://help.tableau.com/current/pro/desktop/ja-jp/functions_functions_string.htm