Alteryxチームでプチハッカソンをやってみた Excelでセル結合しているフィールド名の処理編

2019.02.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。Alteryxサポートエンジニアとして勉強中のスズです。

社内でAlteryxでのワークフローの作成について問い合わせがあると、Alteryxチーム内でそれぞれ回答を持ち寄ることがあります。その様子は以前も以下のエントリで紹介しています。

今回はExcelでセル結合しているフィールド名(列名)の処理について持ち寄った回答のご紹介です。

プチハッカソン Excelでセル結合しているフィールド名の処理編

お題

以下のデータでは、「1月」「2月」といったフィールド名のセルが結合されています。

このフィールド名を、「1月計画」「1月実績」というように修正していきます。

解答1

まずはスズによる回答。

Sampleツール(Preparation -> Sample)を2つ追加します。1つは First N rowsN = 1 を設定し、フィールド名となる部分だけ抜き出します。

もう1つは Skip 1st N rowsN = 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 ModeTake 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 rowsN = 1 を設定して、初めの一行をスキップします。

結果を確認して完成です。

解答3

最後にniinoによる回答。

ワークフローを確認してみると、Selectツール(Preparation -> Select)を使用してフィールド名を直接編集しています。これまでの回答と違って分かりやすく、しかも簡単です。

フィールド名を編集した後は、回答2と同じくSampleツールを使用して初めの行をスキップします。結果を確認して完成です。

最後に

今回はExcelでセル結合しているフィールド名の処理について持ち寄った回答をご紹介しました。他の人が作ったワークフローを確認すると、自分では使わないツールが使われていたり、難しく考えすぎていたということに気付かされたり、新しい発見があります。皆様も同じテーマでワークフローを持ち寄ってみてはいかがでしょうか。

サンプルワークフローのご案内

クラスメソッドでご契約のユーザー様向けに、当ブログでご紹介したワークフローを専用ポータルにて公開しております。当エントリでご紹介したワークフローも公開予定ですので、ご参考にしていただきますと幸いです。

Alteryxの導入なら、クラスメソッドにおまかせください

日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。

alteryx_960x400