今回、文字列の中に特定の文字列が含まれるかどうかで集計条件を変更したいというニーズがありました。
QlikSenseでフィルターをかけるには予め変数として条件値を取得しておいた方が便利です。
そこで、ロードスクリプト内で特定の文字が含まれる場合は「対象」、含まれない場合は「非対象」という値を取得することにしました。
NULL値は条件指定できません。
(NULLのものを選択することはできないためNULL選択する際はAlt関数などを使ってNULL値を変換する必要があります。)
QlikSenseで特定の文字が含まれるか判断する2つの関数
具体的には「特定の文字が含まれるかどうか判断する」というより「特定の文字が何文字目に出現するか?何回出現するか?もしくは0か?」という判断をします。
特定の文字が出現することを確認するには以下の2つの関数があります。
FineOneOf関数は特定の「文字(1CHAR)」、SubstringCount関数は特定の「文字列」である点が異なりますので用途に応じて使い分けましょう!
また、FindeOneOf関数は出現する位置、SubstringCount関数は出現する回数が戻り値である点も異なる点です。
FindOneOf関数
FindOneOf関数は文字の一覧から指定した文字のいずれかが出現する位置を返します。
例えば住所のデータから「都道府県」のいずれかの文字が出現した位置を取得するなどの使い方があります。
FindOneOf(文字列, 検索文字のリスト [,位置])
(例)文字列:東京都中央区1-1-1
FineOneOf(文字列,’都道府県’) ➡ 3
この関数を利用して住所から都道府県のみ取得することができます。
Left(文字列, FindOneOf(文字列,’都道府県’)) ➡ 東京都
※ただし、「京都府」の場合この方法では「京都」になってしまいますのでこの関数のみで完全に都道府県を取得することは困難です。
第3引数の[位置]は複数の出現位置がヒットした場合、何番目の位置を返すのか指定できます。
SubStringCount関数
SubstringCount関数は文字列の中に指定した文字列が含まれる数を返します。
例えば文字列から「腰痛」という文字が出現した位置を取得するなどの使い方があります。
SubstringCount(文字列, 検索文字列)
(例)体調を記録した文字列に「腰痛」というキーワードが含まれるか否か確認する。
サンプル文字列:肩こり・腰痛などの自覚症状がある
SubstringCount(文字列,’腰痛’) ➡ 1
この関数を利用して「腰痛」というキーワードの出現回数を取得します。
出現回数が1以上であれば「該当」、出現回数が0であれば「非該当」と判断します。
LOADスクリプトサンプル
今回はSubStringCount関数を利用してニーズを実現することにしましたのでLOADスクリプトのサンプルは以下の通りです。
腰痛情報: LOAD ID, if(substringcount(自覚症状, '腰痛')>0, '該当', '非該当') AS 腰痛症状有; SQL SELECT ID, 自覚症状 FROM 問診データ;