WeeklyAlteryxTips#43 ユニオンツールを用いたフィールドの選択について

Alteryx

フィールドの動的な選択は結構悩ましい問題です。動的に行うとすれば、たいていバッチマクロでパラメータを書き換えれば簡単にできる、と思われると思いますが、セレクトツールの書き換えはすでにあるものしか書き換えができず、未知のものに対してリネームや選択などはできません。

このような場合は「フォーミュラで生XMLを更新」することで柔軟な対応が可能なのですが、あまり初心者向きではありません。

今回は、セレクトツールを使わずにフィールドを選択する方法をご紹介します。

「フィールドの共有サブセットを出力」オプション

ユニオンツールには、「フィールドの共有サブセットを出力」というオプションが用意されています。通常はたいていデフォルト設定で進めることができるため、このオプションには気づかないかもしれません。

このオプションは、入力されたデータセットすべてに存在するフィールドのみ通過させるオプションです。このオプションを使うことで、必要なフィールドのヘッダだけ入力すればセレクトツールの代わりに必要なフィールドの選択が可能です。

なお、フィールド名が異なる場合のオプションとして、フィールド名が異なる場合のオプションとして「無視-レコードの処理を続行」を選択することをおすすめします。

ユニオンツールを使ったフィールドの選択を行う

それでは、実際にやってみましょう。

元データはこちらのような形です。UnitPriceは場所を変えたいですし、Descriptionは不要です。

これに対して、以下のように定義します。

今回は、OrderとNameだけを活かします。つまり、Order順にフィールドを並べ替えつつ、4つのフィールドを残したい、というわけです。

この定義に対して、クロスタブツールで列ヘッダーを「Order」とし、新しい列の値として「Name」を指定します。

これで以下のようになります。

ここまで来るとみなさんおわかりかもしれませんが、動的リネームツールの出番です。「データの最初の行からフィールド名を取得」します。

すべてのフィールドを処理するようにチェックを入れておきましょう。

これでほしいヘッダができました。

これをユニオンツールに突っ込んでいきます。

ここでのポイントは、動的リネームツールの出力は必ず最初にユニオンツールに接続してください。実際に中身のあるデータセットはその後に接続します。

これは、フィールドの並び方は最初に接続されたデータストリームのものを使うためです。「出力順序」オプションで出力順序の設定はできるのですが、フィールドの並び順は最初に接続されたデータストリームのものになってしまいます。

これで無事に並び順とほしいフィールドのみに絞ることができました。

この方法の唯一の方法の欠点は、フィールドの型がすべてテキスト型に変わってしまうことです。そのため、ユニオンしたあとにオートフィールドツールで型を変えるのが一番楽な方法です。ただ、定義通りなんとかしたい、ということであれば別の方法を利用する必要があります。

また、Blob型、SpatialObj型などがある場合はこのままではエラーになってしまいます。回避策としては、動的リネームツールの直後にフィールドの型を適切なものに変更する必要があります。

ということで、Blob型、SpatialObj型には対応していませんが、以下のようなワークフローでユニオンをセレクトツール代わりに使用することができました。

まとめ

  • ユニオンツールの「フィールドの共有サブセットを出力」オプションでセレクトツール代わりに使うことができました
  • フィールドの型がすべてテキスト型に変わるので注意してください。ヘッダの方のデータストリームをあらかじめ適切な型に変えておけば問題ありません。もしくは、ユニオン後にオートフィールドツールで型を変更することも可能です。
  • Blob型、SpatialObj型がある場合はエラーになるため、ヘッダ側のデータストリームでユニオン前に型を変えておく必要があります(Blob型は型変換メニューに出てこないため、XMLビューにて強制的に書き換える必要があります)。
  • テーブル定義は今回はテキスト入力ツールに埋め込んでいますが、動的に行う場合は、外部のCSVやExcelから読み込むケースが多いかと思います

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

次回

空間のTipsになります

コメント

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