WeeklyAlteryxTips#30 Is関数の使い分け

Alteryx

今回もAlteryxの関数のお話です。

AlteryxではIs関数がいくつか用意されています。

  • IsEmpty
  • IsInteger
  • IsNull
  • IsNumber
  • IsSpatialObj
  • IsString

これらはそれぞれのデータ型が関数名の型になっているかどうかを調べる関数です。しかし、よくよく使ってみると、2つのグループに別れていることに気づくと思います。すなわち以下のとおりです。

  • データ自体を検査する関数
    • IsEmpty
    • IsInteger
    • IsNull
  • フィールドの型を検査する関数
    • IsNumber
    • IsSpatialObj
    • IsString

似たような名前でデータ自体を検査する関数とフィールドの型を検査する関数が存在するため、使い方を勘違いしてしまうので、ご注意ください。せめてカテゴリが違っていればいいのですが・・・。

実際に見てみましょう。

IsEmpty、IsInteger、IsNull

これらはフィールドの値を見て判断する関数です。それぞれ以下の通りとなります。

IsNull

レコードがNullかどうかを判断します。NullならTrueとなります。

例えば、「Number」というフィールドをテストします。

IsEmpty([Number])

Numberフィールドの1レコード目のNullがしっかりTrueと判定されています。

IsEmpty

レコードが空(空白ではなく空っぽ、ということです)もしくはNullであるかどうかを判断します。空ならTrue。ちなみに、数値型フィールドでは空を取り得ないので、数値型フィールドでは通常はIsNull関数を使います。

例えば、「String」というフィールドをテストします。

IsEmpty([String])

Stringフィールドの2レコード目は空文字です。こちらがしっかりとTrueとなっていることが確認できます。また、1レコード目のNullもTrueとなっています。

IsInteger

レコードが整数として扱えるかどうかを判断します。これは、文字列型フィールド内の数値に対しても使えますし、Double型のフィールドに対しても整数かどうかを判定するためにも利用できます。ただし、「1,000」などの表記は整数としては残念ながら認識してくれません。

ちなみに、テストするフィールドが数値型の場合は、Null値はTrueとして返すので注意してください(IsNull関数と組み合わせて使いましょう)。

例えば、「String」というフィールドをテストします。

IsInteger([String])

次に、「Number」というDouble型のフィールドをテストします。

NullがTrueとして判定されています・・・。その他小数点を持つ数についてはFalse判定となっています。

IsNumber、IsSpatialObj、IsString

この3つの関数は若干使い所が難しいです。フィールドのデータ型を検査しているので、各レコードに対して何かを判断するわけではありません。

使い所としては主に、複数フィールドフォーミュラでデータ型に応じて処理を変えたい場合などに使うことができます。実際に見てみましょう。

IsNumber

フィールドが数値型かどうかを判定します。ただし、値をToIntegerなどで数値型に変えるとTrueとして判定されます。しかし結局は値の中身を見て判断しているわけではなく、ToIntegerで変換された型自体を見て判定していることに注意してください。

例えば以下のようにStringフィールド、Numberフィールドを見てみましょう。

結果は以下のとおりです。

Stringフィールド内の値が数値であっても、型としては文字列型なので、Falseとして判定されています。

IsString

フィールドが文字列型かどうかを判定します。ただし、数値型の値をToStringで文字列型に変えるとTrueとして判定されます。しかし結局は値の中身を見て判断しているわけではなく、ToStringで変換された型自体を見て判定していることに注意してください。

例えば以下のようにStringフィールド、Numberフィールドを見てみましょう。

結果は以下のとおりです。

Stringフィールド内の値が数値であっても、型としては文字列型なので、Trueとして判定されています。

IsSpatialObj

フィールドが空間型かどうかを判定します。

例えば、以下のように空間型フィールドをセレクトツールで文字列型にした「SOJ_Text」というフィールドと、レコードにNull値を持つ空間型フィールド「SOJ」を検査してみたいと思います。

結果は以下のとおりです。

中身は空間型ですが、フィールド自体が文字列型であるJudge_for_SOJ_Textフィールドは、すべてFalse、空間型フィールドの「SOJ」はTrue判定です。Null値もTrueとして判定されています。

まとめ

  • Is関数全般を紹介しました
  • Is関数には2種類あることを説明しました。値自体を判定するものと、データ型を判定するものです。
  • IsInteger関数は、数値型フィールドでNull値の場合はTrue判定を返すので注意してください(文字列型フィールドではFalseとなります)。

サンプルワークフローダウンロード

次回

次回は、データ内で数値型なのかどうか判定する、とやってみたいと思います。

コメント

タイトルとURLをコピーしました