Alteryxで列の名前順(昇順・降順)に列を並び替えるにはどうしたらいいでしょうか?
カラム数が少ない場合は、Selectツールでちまちま並び替えてもいいのですが、多い場合いちいちそんなことはやっていられません。
そんな時に使えるのが、CReW MacroのField Sortです。
CReW Macroと言えば、Runner Macroが有名ですが、それだけではなくいろいろ便利なマクロが用意されています。
以前、100カラムくらいあるデータ2つの列の並び順を合わせたい!ということがあったのですが、その時にこのField Sortツールにお世話になりました。
では早速使ってみましょう~!
Field Sort(CReW Macro)で列名順に列を並び替える
今回使うのは、次のようなデータです。アルファベットの列名が順不同で並んでいます。
このデータを、Field Sortで列の昇順に並び替えてみます。
ワークフローを実行した結果は次の通りです。
A、B、C・・・と列名の昇順に並びかわりましたね、Field Sortすごい!
わあ便利!どういう仕組みになってるんだろう・・・と思って、Field Sortマクロの中身を見てみたら、特殊なことはしておらず普段よく使うツールだけで実現してありました。
折角なので、1ステップずつどうやって実現しているか見ていきたいと思います。
Field Sortのフロー解説
フローの全体像は次のようになっています。
処理を一つずつ見ていきます。処理の過程が分かりやすくなるよう、Inputデータは先ほどのデータに置き換えたものを使います。
①Field Info Toolでカラムの情報を取得する。ここで列の名前などの情報が取得できます。
②Sort ToolでName(列名)の昇順で並び替える。
昇順・降順はField Sortツールで選択した値をパラメータとして受け取り、変更できるようにしています。
Drop Downで選択したAscending/Descendingを
Actionを使いSort ToolのOrder(昇順か降順か)を上書きする。
③Record IDで連番(RecordID)をふる。
④Cross Tabで行を列にする。ヘッダをRecordIDに、値にName(列名)を設定します。
⑤Dynamic Renameで先頭行をヘッダに設定する。
この時点で、すでに列名が昇順に並んでいるのがわかりますね!
⑥Unionツールで、並び替えた列と元データとユニオンする。
列の名前でユニオンするようにします。並び替えたヘッダ側を先に(#1となるよう)ユニオンしないと、並び替えた方の列が適用されないようでした。
元データが列の昇順で並び変わりました!
⑦後処理
最後のDynamic Selectでは、内部処理用の列を除外しているようです。
この処理はあってもなくても動作が変わらなかったです。ここだけ謎が少し残りました。
最後一つ疑問はありましたが、難しい処理をすることなく、列名での自動ソートを実現してありました。
これはアイディアが素晴らしいなと思いました。自分もこういうものをサクッと作れるようになりたいな・・・と思います。
CReW MacroのField Sort、便利なので機会がありましたら使ってみて下さい!