Alteryxチームでプチハッカソンをやってみた Excelでセル結合しているフィールド名の処理編
こんにちは。Alteryxサポートエンジニアとして勉強中のスズです。
社内でAlteryxでのワークフローの作成について問い合わせがあると、Alteryxチーム内でそれぞれ回答を持ち寄ることがあります。その様子は以前も以下のエントリで紹介しています。
今回はExcelでセル結合しているフィールド名(列名)の処理について持ち寄った回答のご紹介です。
プチハッカソン Excelでセル結合しているフィールド名の処理編
お題
以下のデータでは、「1月」「2月」といったフィールド名のセルが結合されています。
このフィールド名を、「1月計画」「1月実績」というように修正していきます。
解答1
まずはスズによる回答。
Sampleツール(Preparation -> Sample)を2つ追加します。1つは First N rows に N = 1
を設定し、フィールド名となる部分だけ抜き出します。
もう1つは Skip 1st N rows に N = 1
を設定し、フィールド名以外の部分のデータを用意します。
ここからは1つ目のSampleツールで用意したフィールド名を処理していきます。Transposeツール(Transform -> Transpose)を使用して縦持ちに変換します。Key Fields には何も選択せず、Data Fields に全てのフィールドを選択します。
「Name」列と「Value」列にフィールド名にしたいデータが出力される状態になりました。
Multi-Row Formulaツール(Preparation -> Multi-Row Formula)を使用して「Name」列のデータを更新します。「Name」列に「F」が含まれる場合は、1つ上の「Name」列のセルを出力するよう設定します。
Expression には以下のとおり設定しています。
if Contains([Name], "F") then [Row-1:Name] else [Name] endif
Formulaツール(Preparation -> Formula)を使用して新しく「Field」列を文字列型で作成し、「Name」列と「Value」列を続けて出力します。
Record IDツール(Preparation -> Record ID)を使用してIDを割り当てます。
Cross Tabツール(Transform -> Cross Tab)を使用して、データを横持ちに変換します。
- New Column Headers: 「RecordID」列
- Values for New Columns: 「Field」列
- Method for Aggregating Values: Concatenate
※Concatenateを選択していますが、「RecordID」列のIDがすべて異なるのでFirstやLastを選択しても同様です。
Dynamic Renameツール(Developer -> Dynamic Rename)を追加します。Rename Mode に Take Field Name from First Row of Data
を選択します。
これでフィールド名の処理ができました。
最後に、フィールドの部分とデータの部分を結合します。Unionツール(Join -> Union)で Auto Config by Position を使用して結合します。
結果を確認して完成です。
解答2
続いてじょんすみすによる回答。
まずは以下の赤枠部分。
この部分では、回答1と同様、SampleツールとTransposeツールを使用して、データを縦持ちに変換しています。
続いて以下の赤枠部分。
Field Infoツール(Developer -> Field Info)を使用して、受け取ったデータのName、Type、Size、Scale、Source、Descriptionを出力します。
Multi-Row Formulaツールを使用して「Name」列のデータを更新します。「Name」列に「月」が含まれる場合は「Name」列をそのまま出力し、それ以外の場合は1つ上の「Name」列のセルを出力しています。
Expression には以下のとおり設定しています。
iif(Contains([Name], "月"), [Name], [Row-1:Name])
ここからは準備した2つのデータと元のデータを使用して処理を行っていきます。
Joinツール(Join -> Join)を使用して、2つのデータを結合します。データの結合には、Join by Record Position を設定します。
結合したデータは以下のようになっています。
Formulaツールを使用して、新しく「col_name」列を文字列型で作成し、「Right_Name」列と「Value」列を続けて出力します。
これでフィールド名の準備ができました。
元のデータのフィールド名を、Dynamic Renameツールを使用して置き換えていきます。
- Rename Mode: Take Field Names from Right Input Row
- Old Field Name from Column: -Use positional rename-
- New Field Name from Column: 「col_name」列
Sampleツールの Skip 1st N rows と N = 1
を設定して、初めの一行をスキップします。
結果を確認して完成です。
解答3
最後にniinoによる回答。
ワークフローを確認してみると、Selectツール(Preparation -> Select)を使用してフィールド名を直接編集しています。これまでの回答と違って分かりやすく、しかも簡単です。
フィールド名を編集した後は、回答2と同じくSampleツールを使用して初めの行をスキップします。結果を確認して完成です。
最後に
今回はExcelでセル結合しているフィールド名の処理について持ち寄った回答をご紹介しました。他の人が作ったワークフローを確認すると、自分では使わないツールが使われていたり、難しく考えすぎていたということに気付かされたり、新しい発見があります。皆様も同じテーマでワークフローを持ち寄ってみてはいかがでしょうか。
サンプルワークフローのご案内
クラスメソッドでご契約のユーザー様向けに、当ブログでご紹介したワークフローを専用ポータルにて公開しております。当エントリでご紹介したワークフローも公開予定ですので、ご参考にしていただきますと幸いです。
Alteryxの導入なら、クラスメソッドにおまかせください
日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。