Alteryxで複数列に対してのMulti-Row Formula
こんにちは、小澤です。
今回は、Multi-FiedかつMulti-Rowかつな処理をしたい場合やり方について書かせていただきます。
特殊なFormulaツール
AlteryxにはFormulaツールの亜種として以下の2つがあります。
- Multi-Field Formula
- Multi-Row Formula
まずは、これらがどういったものなのかを簡単に見ていきましょう
Multi-Field Formula
Multi-Field Formulaは複数の列に対して、同じ処理を行った結果を出力する際に利用できます。
例えば、このツールで全ての数値列に対して以下の処理をすると、選択した全ての列に1を足した結果を出力します。
[_CurrentField_] + 1
Multi-Row Formula
Multi-Row Formulaでは、Formula式の中で前後の行の値を参照できます。
例えば、以下のような処理をすることで、値がnullの場合直前の行の値を入れた結果を出力しています。
iif(isNull([Field1]), [Row-1:Field1], [Field1])
Multi-FieldかつMulti-RowなFormulaツール
さて、前後の行を参照する必要があるような同じ処理を複数の列に対して行いたい場合はどのようにすればいいのでしょうか? Multi-Row Formulaを必要な列の分だけつないでいくことで対応することができます。
対象となる列が異なるだけで、処理の内容は同じなのでもっと楽をしたいですねw
これは以下のようなワークフローで同じことが実現できます。
このやり方であれば、対象となる列の数が増えても追加要素なく、常にこれだけで実現可能です。 では、実際にワークフローの内容を見ていきましょう。
入力データ
入力データは以下のようになっています。
このデータに対してnullになっているものを直前の値で埋めたいと思います。 ただし、今回は「Field3」については、変換しないものとします。
一意なIDの付与
この後の操作に必要となるため、一意なIDを振っておきます。 これにはRecord IDツールを利用します。
Record IDツールを利用することで連番でIDを振ることができます。
データを縦持ちに変換
続いて、Transposeツールでデータを縦持ちに変換します。
設定は以下のようになっています。
Key FieldsにRecordIDを指定して、今回対象としないField3を除くことで以下のように Name列には元のデータでの列名、Value列に元データの値といった結果を得ます。
Multi-Row Formulaで処理
データ変換の準備が整ったので、nullを直前の値で埋める処理を行います。
Multi-Row Formulaでは、「Group By」で選択した列が同じ値を持つものごとに処理を行うことができます。 この機能を利用して、ここにName列を指定することで、元々データの列名ごとにMulti-Row Formulaの処理が行えるというわけです。
Formula式自体は、対象が元の列名ではなくValueを選択している以外同じです。 以下のように直前の値が入ったデータを得られていることが確認できます。
横持ちに戻す
行いたい処理が実行できたので、Cross Tabツールを使ってデータを元の形式に戻します。
項目 | 値 |
---|---|
Group Data by these Values | RecordID |
New Column Header | Name |
Value for New Columns | Multi-Row Formulaで生成または上書きした列 |
とすることで、元の形式に戻ります。
元のデータと結合
最後に、Joinツールを使って元のデータと結合することで処理対象以外のデータ(今回の場合はField3)と合わせた最終的な結果を得ます。 RecordIDをキーに結合して、必要な列のみを選択、並び順を整えるなどします。
最終的な出力は以下のようになり、得たい結果になっていることが確認できます。
おわりに
今回は、Multi-FieldかつMulti-Rowな処理を行う方法を解説しました。 対象の列とFormula式の内容以外は、汎用的に使えるのでマクロにしてしまってもいいかもしれません。