今回はAlteryxで動的な型変換をどうやって行うかについて考えていきたいと思います。ここでは、フィールド名などが決まっていないような場合に、特定のデータ型を持つデータを希望のデータ型に変換するような特別なケースを扱っています。
動的な型変換とオートフィールドツール
動的な型変換、というと、何を想像するでしょうか?おそらくオートフィールドツールを使って適切な形式に変換する、というのが思い浮かぶかと思います。
しかしながら、文字数などは切り詰めすぎるため(格納可能な最小のサイズにしてします。)、必ずしもこれが適切ではないケースもあると思います。また、空間型をどうしてもテキストとして加工したい、といった要望も時にはあったりします。
セレクトツールを使ったバッチマクロ化
そこで思いつくのがセレクトツールとコントロールパラメータツールを使ったバッチマクロ化なのですが、セレクトツールによる動的な型の変更はかなり難易度高いです。複数のフィールドがある場合はアクションツールでさくっと数が不定なフィールドに対して対応できませんし、今存在しないフィールドの型を変えることは不可能です。
とはいえ、全くできないわけではなく、アクションツールの「フォーミュラで生XMLを更新」オプションを使うとまるっとセレクトツールの設定を書き換えることが可能です。しかしながらなかなかハードルが高い方法です。どのようなXMLを作るべきか、というのは以下のようにXMLビューを見れば理解することができます(XMLビューを見れるようにするには、メニューの「オプション」-「ユーザー設定」-「ユーザー設定の編集」-「詳細」の「プロパティウィンドウにXMLを表示する」オプションを有効にする必要があります)。
この方法は簡単ではないため、別の方法を考えましょう。
複数フィールドフォーミュラで動的に型を変換する
前週のTipsで紹介した内容と重複しますが、複数フィールドフォーミュラで動的に型を変換が可能です。
複数フィールドフォーミュラのポイントは、「動的または不明なフィールド」のオプションをデータ型ごとに効かせることができます。
つまり、「フィールドを選択」のところで「数値」を選択しておき、「動的または不明なフィールド」としておくと、数値型以外のフィールドの「不明なフィールド」は無視されるということです。
なお、「フィールドを選択」の選択肢は以下のとおりです。
- 数値
- テキスト
- SpatialObj
- Bool
- 日時
- Time
- すべてのタイプ
具体例
それでは具体的にやってみたいと思います。
ワークフロー:
複数フィールドフォーミュラ設定:
入力:
出力:
※空間型のデータは内部的にはGeoJSONとして格納されています
動的セレクトと組み合わせてより細かく制御する
より細かく制御したい場合は、動的セレクトと組み合わせることができます。例えば、Double型のフィールドのみ固定小数点型にしたいとします。この場合は、動的セレクトでDouble型のみ抽出し、複数フィールドフォーミュラでデータ型を変換します。一方で、別の動的セレクトでDouble型のみ抜いておき、それぞれのデータを結合ツールを使って行位置で結合します。
具体的にやってみましょう。ワークフロー全体は以下の通りとなります。
まず、動的セレクトツールを使ってDouble型のみに絞りましょう。
これに対して、複数フィールドフォーミュラで型変換を行います。
一方で、Double型以外にしぼります。
これらを結合ツールを用いて行位置で結合します。
※AMPエンジンを使っている場合は、動的セレクトツールのあとからこの結合ツールの間にレコードが並び替わるようなツールを使わないでください。そのようなツールを使う場合は、あらかじめレコードIDツールを最初に入れておき、あとからレコードIDで結合するという方法があります。つまり以下のようになります。
この場合、動的セレクトツールでは、「フォーミュラ式を使用して選択」にて数式を使い、フィールド名とデータ型で絞り込みを行います。例えば以下のような設定です。
IF [Type]="Double" THEN "True"
ELSEIF [Name]="_RecordPos_" THEN "True"
ELSE "False" ENDIF
この場合、複数フィールドフォーミュラで「_RecordPos_」フィールドはデータ型変換の対象から外してください。
オートフィールドツールで変換した文字列型フィールドを一律サイズ255に設定する方法
それでは、せっかくなので、最初に少し話が出たオートフィールドツールで文字数が切り詰められたデータを一律で255文字にするワークフローもお見せします。
基本的に今回取り扱った方法で文字数をきれいに255にすることができます。詳細はサンプルワークフローをご覧ください。
まとめ
- Alteryxで動的に型の変換を行う方法をご紹介しました
- 基本的に複数フィールドフォーミュラを使いますが、動的セレクトツールと組み合わせることで細かい制御が可能です
- 汎用的なマクロを作成する際に必要となってくるテクニックになるかと思います
サンプルワークフローダウンロード
次回
集計カテゴリのツールのTipsです。
コメント