Alteryxで複数のKEYがあるデータをIDごとに1行にまとめる

2021.01.30

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

こんにちは、スズです。

今回は、Alteryxで複数のKEYがあるデータをIDごとに1行にまとめる、というワークフローをご紹介します。

例えば、以下のデータのように、1つのIDに対して複数のKEYがある縦持ちのデータがあります。

ID KEY VALUE
1 A 100
1 B 300
2 C 500
2 D 200
2 E 300
3 F 400
3 G 200
3 H 400

このデータを以下のように、KEYはKEY1、KEY2というように列にし、1つのIDごとにデータを1行にまとめます。データがない場合はNullにします。

ID KEY1 VALUE1 KEY2 VALUE2 KEY3 VALUE3
1 A 100 B 300 Null Null
2 C 500 D 200 E 300
3 F 400 G 200 H 400

ワークフロー概要

ワークフローの全体像は以下の通りです。

処理の概要は以下の通りです。

  1. KEYとVALUEの列名の作成
  2. KEYとVALUEのデータの変換
  3. Nullの変換

ワークフロー詳細

テキスト入力ツールで以下のデータを用意しました。

まずはKEYとVALUEの列名を作成していきます。複数行フォーミュラツールで新しい列を作成し、IDごとに数字を割り当てていきます。この例ではNumberという列を作成しています。

  • 新しいフィールドを作成する
    • Int32型
  • 存在しない行の値: 0または空
  • グループ化: ID
  • 式: [Row-1:Number] + 1

フォーミュラツールを使って新しい列を2つ作成します。ここではKEY_FIELDとVALUE_FIELDとしています。KEYとVALUEの文字列と先ほど作成したNumberの列を"KEY" + ToString([Number])のように組み合わせて、KEYとVALUEの列名を出力します。

この時点でデータは以下のようになっています。

クロスタブツールを2つ使い、KEYとVALUEそれぞれのデータを横持ちに変換します。

 

  • 以下の値でデータをグループ化: ID
  • 列ヘッダーの変更: KEY_FIELDまたはVALUE_FIELD
  • 新しい列の値: KEYまたはVALUE

結合ツールを使って、2つのデータをIDで結合します。列の順番も修正します。

データが1つにまとまりました。

最後に、複数フィールドフォーミュラツールを使って空文字になっているデータをNullに変換します。

  • Textフィールドを選択
  • 式: IIF(IsEmpty([_CurrentField_]), Null(), [_CurrentField_])

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

最後に

Alteryxで複数のKEYがあるデータをIDごとに1行にまとめるワークフローをご紹介しました。