Alteryxで大分類と中分類をキーにして小分類を横に並べる

2019.04.09

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

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

今回は、大分類と中分類をキーにして小分類を横(行)に並べる、ということをAlteryxでやってみます。

大分類と中分類をキーにして小分類を横に並べる

元のデータと処理した結果

大分類と中分類をキーにして小分類を横に並べる、と言っても分かりにくいかと思いますので、まずは具体的にデータをどうするのかをご紹介します。

処理する前の元データは以下のとおりです。赤枠部分では「WorkPackage NAME」列と「WorkPackage ID」列が同じですが、「PREDECESSOR WorkPackage NAME」列と「PREDECESSOR WorkPackage UID」列がそれぞれの行で異なります。

処理前のデータ

元データを処理して、赤枠部分のように「WorkPackage NAME」列と「WorkPackage ID」列が同じ場合には一行にまとめ、「PREDECESSOR WorkPackage NAME」列と「PREDECESSOR WorkPackage UID」列を横に並べていきます。青枠部分のように、「PREDECESSOR WorkPackage NAME 1」列と「PREDECESSOR WorkPackage UID 1」列とうように、組み合わせごとに番号を割り振って列を作成していきます。

また、元データの「PREDECESSOR WorkPackage NAME」列と「PREDECESSOR WorkPackage UID」列の数はそれぞれのデータによって異なるため、「PREDECESSOR WorkPackage NAME」列と「PREDECESSOR WorkPackage UID」列の組み合わせの数を出力する列を追加します。

ワークフロー全体

作成するワークフローの全体はこちら。

ワークフローの詳細は以下の内容に分けてご紹介していきます。

  1. IDとグループの割り当て
  2. 「WorkPackage NAME」列と「WorkPackage ID」列の準備
  3. 「PREDECESSOR WorkPackage NAME」列と「PREDECESSOR WorkPackage UID」列の準備
  4. 「PREDECESSOR Count」列の準備
  5. データの結合

IDとグループの割り当て

まずはデータの順番を整えるため、Sortツールを使用して「WorkPackage NAME」列と「WorkPackage ID」列を指定してAscending(昇順)で並べ替えます。

Record IDツールで「RecordID」列を作成してIDを割り当てます。割り当てたIDは、ワークフローの最後にデータの並べ替えで使用します。

Multi-Row Formulaツールを使用して「Group」列をV_WString型で作成します。この列では、「WorkPackage ID」列が同じ場合には同じグループにするよう設定しています。

Expressionには以下のとおり設定しています。

if [Row-1:WorkPackage ID] == [WorkPackage ID] then [Row-1:Group]
else ToString(ToNumber([Row-1:Group]) + 1)
endif
  • 「WorkPackage ID」列が1行上と同じ場合は、1行上の「Group」列を出力
  • それ以外の場合は1行上の「Group」列に1足して出力

ここまでの処理で、データは以下のようになりました。

「WorkPackage NAME」列と「WorkPackage ID」列の準備

Uniqueツールを使用して、「WorkPackage NAME」列「WorkPackage ID」列「Group」列が一意のデータのみ残します。

結果はこちら。「WorkPackage NAME」列と「WorkPackage ID」列の準備ができました。

「PREDECESSOR WorkPackage NAME」列と「PREDECESSOR WorkPackage UID」列の準備

本項では、列名とデータを分けて用意し、最後にUnionツールで結合しています。途中で分岐していますが、まずは列名の処理をご紹介いたします。

Transposeツールを使用して、データを縦持ちに変換します。Key Fields「Group」列Data Fields「PREDECESSOR WorkPackage NAME」列と「PREDECESSOR WorkPackage UID」列を選択します。

Multi-Row Formulaツールを使用して、新しく「FieldNumber」列をInt32型で作成します。この列では、同じグループのデータに対して順番を割り振っています。

Expressionには以下のとおり設定しています。

if [Row-1:Group] != [Group] then 1
else [Row-1:FieldNumber] + 1
endif
  • 「Group」列が1行上と異なる場合は1を出力
  • それ以外の場合は1行上の「FieldNumber」列に1足して出力

Uniqueツールを使用して「Name」列と「FieldNumber」列が一意のデータのみ残します。

Multi-Row Formulaツールを使用して、新しく「FieldName」列をInt32型で作成します。この列では「Name」列が同じ場合は順番に数字を割り当てていきます。

Expressionには以下のとおり設定しています。

if [Row-1:Name] == [Name] then [Row-1:FieldName] + 1
else 1
endif
  • 「Name」列が1行上と同じ場合は、1行上の「FirldName」列に1を足して出力
  • それ以外の場合は1を出力

Selectツールを使用して、「FieldName」列をV_WString型に変更します。

Formulaツールを使用して、「FieldName」列を更新していきます。また「Group」列を新しくString型で作成し、「Group」と出力します。

「FieldName」列は以下の内容で更新します。" "の部分は空白を挿入するために設定しています。

[Name] + " " + [FieldName]

Cross Tabツールを使用して、「FieldNumber」列にある数字を列名にし、「FieldName」列をデータとして出力します。

設定はこちら。

  • Group Data by these Values: 「Group」列
  • New Column Headers: 「FieldNumber」列
  • Values for New Columns: 「FieldName」列

Dynamic Renameツールを使用して、「PREDECESSOR WorkPackage NAME 1」などを列の名前に変換します。Rename ModeTake Field Names from First Row of Dataを選択し、全ての列を選択します。

これで列名の準備ができました。

途中で分岐したもう1つの処理で、データを用意します。

Cross Tabツールを使用して、「FieldNumber」列の数字に「Value」列を出力します。

設定はこちら。

  • Group Data by these Values: 「Group」列
  • New Column Headers: 「FieldNumber」列
  • Values for New Columns: 「Value」列

縦持ちに変換したデータはこのようになりました。

UnionツールでAuto Config by Positionを使用して、列名と横持ちに変換したデータを結合します。

「PREDECESSOR WorkPackage NAME」列と「PREDECESSOR WorkPackage UID」列の準備ができました。

「PREDECESSOR Count」列の準備

FilterツールのBasic filterを使用して「Name」列に「UID」が含まれるデータのみ抽出します。

Summarizeツールを使用して、「Group」列でグループ化し、「Value」列の数を出力します。

これで「PREDECESSOR Count」列の準備ができました。

データの結合

Join MultipleツールのJoin by Specific Fieldsを使用して、「Group」列で3つのデータを結合します。また、不要な列の削除や、列の順番を確認します。

Sortツールを使用して「RecordID」列をAscending(昇順)でにデータを並べ替えます。

Selectツールを使用して「RecordID」列を削除します。また、列が正しく並んでいるかも確認します。

結果を確認します。まず「WorkPackage NAME」列と「WorkPackage ID」列があり、「PREDECESSOR WorkPackage NAME」列と「PREDECESSOR WorkPackage UID」列はそれぞれの組み合わせごとに列名に番号が割り当てられています。

「PREDECESSOR Count」列ではそれぞれのデータの「PREDECESSOR」の数が出力されています。

最後に

今回はAlteryxで大分類と中分類をキーにして小分類を横(行)に並べて表示する処理についてご紹介しました。

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

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

alteryx_960x400