Alteryxで大文字小文字を含む文字列を扱う際の注意点
alteryxで文字列型のフィールドを扱う際に、アルファベットの大文字小文字を同一とみなすかどうか(CaseSensitive/CaseInsensitive)ツールごとに違いがあるので、代表的なものについて仕様をまとめておきたく記事としました。
前提条件
下記の環境で検証しています。
・Alteryx Designer 2022.3.1
主要な機能ごとの大文字小文字区別の違い
先に、本記事で取り上げる機能ごとの大文字小文字区別の仕様を記載しておきます。
文字列関数は、引数で大文字小文字区別をするかどうか指定できる場合があり、一部ユーザー側で指定可能です。
ツール | 大文字小文字区別 |
---|---|
結合ツール | 区別する |
検索置換ツール | オプションで区別するか選択可能 |
ユニオンツール | 区別しない |
集計ツール | 区別する |
ユニークツール | 区別する |
条件分岐 | 区別しない |
文字列関数 | 関数ごとの仕様による |
以降でもう少し詳しくみていきます。
結合ツール
結合ツールでは、アルファベットの大文字小文字が明確に区別されます。半角のアルファベットはもちろん、全角同士でも大文字小文字が異なるレコードが結合することはありません。
大文字小文字の混在するデータで、その区別無しに結合したい場合、事前のクレンジングが必要です。
検索置換ツール
既定では大文字小文字を区別します。ツールオプションの「検索時に大文字小文字を区別しない」にチェックを入れると、大文字小文字を区別せずに同一の値として扱います。
ただし、全角の値については、このオプションを有効にしても、異なる値としてみなされる点に注意する必要があります。
以降は、ツールによる変換例です。
置換対象のフィールド(F入力)
置換対象のデータとして下記を用意します。3,4行目の値は、全角での入力です。
変換マスタ(R入力)
変換マスタとして、下記のようなデータを用意し、R入力に接続します。いずれも検索値の大文字小文字が置換対象と異なっています。
変換後:大文字小文字区別あり(既定)
既定の場合、検索値が見つからないので、変換後列はすべてNULL
となります。
※ここでは、置換対象の値が見つかった場合、[変換後]列を追加することとしています。
変換後:大文字小文字区別なし
オプションを有効化した場合、下記の通りとなり、半角の値は置換対象が見つかります。
一方、全角の値は大文字小文字が異なるのみですが、置換対象として検索されませんでした。
全角の値が含まれる場合、注意が必要です。
ユニオンツール(列名)
ユニオンツールの「名前による自動設定」オプションでは、ツールに接続したデータのフィールド名が一致する場合、同一のフィールドとして、縦方向にデータを連結します。この際、ユニオンツールでは、列名の大文字小文字を区別しません。さらに、全角で大文字小文字が異なるフィールド名の場合も、区別せずに同一のフィールドとして扱われます。
フィールド名が半角英数の場合
下記の通り、フィールド名が半角で大文字小文字が異なるデータを接続します。
出力
この場合、大文字小文字が異なっても同一のフィールドにレコードが連結されます。
列名には、#1入力の列名が使用されます。
全角
次は、フィールド名が全角で大文字小文字が異なるデータを接続した例です。
出力
ユニオンツールでは、大文字小文字が異なっても同一のフィールドとして扱われ、レコードが連結されます。
列名は、#1入力の列名です。
集計ツール
集計ツールでは、大文字小文字が明確に区別されます。
大文字小文字が混在するデータで、グループ化の対象に文字列フィールドを指定する際は、注意が必要です。
ユニークツール
ユニークツールでは、大文字小文字が明確に区別されます。
結合ツール、集計ツールと同じ仕様です。
条件分岐(文字列比較)
条件分岐による文字列比較では、大文字小文字が区別されません。全角の場合も同様に、大文字小文字が異なる際でも、同じ値とみなされます。
※全半角は区別されます。
条件分岐の例
下記のデータを使用します。ここで、3,4行目のレコードはすべて全角入力です。
IF文
上記のデータをフォーミュラツールに接続し、下記の条件式を記述します。
IF [Field1] = "abc123" THEN 0 ELSEIF [Field1] = "ABC123" THEN 1 ELSEIF [Field1] = "ABC123" THEN 2 ELSEIF [Field1] = "ABC123" THEN 3 ELSEIF [Field1] = "abc123" THEN 4 ELSE 5 ENDIF
整数型の新しいフィールドを追加出力した場合、下記の出力となります。
1,2行目の値は、大文字小文字が異なる最初(0番目)の条件で抽出されている、3,4行目の値は、4つ目の条件に合致していることから、文字列の条件分岐において、下記のことがわかります。
・全半角は区別される
・半角で大文字小文字が異なる場合は、同じ値と判断される
・全角で大文字小文字が異なる場合は、同じ値と判断される
IIF関数
条件分岐を簡潔に記述できる、IIF()
関数での文字列条件分岐も、IF文と同様の仕様です。
Switch関数
IF文と同様の条件式を記述します。出力は、IF文を記載した時と同じになります。
条件式の記述方法を変えても、当然仕様は変わりないことがわかります。
Switch([Field1],5, "abc123",0, "ABC123",1, "ABC123",2, "ABC123",3, "abc123",4)
文字列関数で大文字小文字の区別を引数で指定できるもの
文字列関数は、下記に一覧があります。
下表の関数は、デフォルトで大文字小文字の区別しないことになっており、引数のCaseInsensitive
またはicase
を変更することで、区別することが可能です。
Contains(String, Target, CaseInsensitive=1) StartsWith(String, Target, CaseInsensitive=1) EndsWith(String, Target, CaseInsensitive=1) REGEX_CountMatches(String,pattern,icase=1) REGEX_Match(String,pattern,icase=1) REGEX_Replace(String, pattern, replace, icase=1)
条件分岐において、明確に大文字小文字を区別したい場合、REGEX_Match()
を使用することで大文字小文字も区別した条件分岐が可能です。
文字列関数で大文字小文字の区別を引数で指定できないもの
文字列変換に使用できる関数のうち代表的なものを下記にあげています。
これらの関数は、引数で大文字小文字区別の指定ができず、大文字小文字を区別する仕様となっています。
FindString(String,Target) Replace(String, Target, Replacement) ReplaceChar(String, y, z) ReplaceFirst(String, Target, Replacement) Trim(String, y) TrimLeft(String, y) TrimRight(String, y)
さいごに
業務要件上、仕方ない場合や、データが汚れている際は、データにアルファベットの大文字小文字が混在することもあるかと思います。ツールや文字列関数ごとにその区別をするかどうか細かな違いがあるので、可能であれば事前のクレンジングをすることで、意図しない処理が起こらない用に注意する必要があると感じました。
今回は、以上になります。この記事がどなたかの参考になれば、幸いです。
参考
Case sensitive string comparison | Alteryx Community
Make Join and Unique tool Case Insensitive | Alteryx Community