WeeklyAlteryxTips#24 テーブルツールでセル結合を行う2

Alteryx

前回に引き続き、テーブルツールを使っていきましょう。今回は、データ部分を見ていきます(ヘッダは前回作ったものをそのまま使います)。

今回のデータ

今回のデータは以下のようなものです。

これをそのままテーブルツールでテーブルを作成すると以下のようになります(ヘッダは省くオプションにしています)。

一番左のカテゴリのところ、Hardware、Softwareでそれぞれ縦に結合したいところですが、Alteryxではできません。しょうがないので代替手段で行きます。カテゴリ部分は、並んだ行が同じデータであれば空白にしたいと思います。

前の行と同じであれば削除する方法

色々と手法はあると思いますが、今回は4つ紹介します。色々な手法で対応が可能です。

手法1.タイルツールでTile_SequenceNumが1のものだけ残して他は削除する

細かい計算式を使わなくても、タイルツールでSequenceが1のものだけ残して他を削除してしまえばやりたいことが達成できます。以下のようなワークフローを組みます。

タイルツールは以下のような設定です。タイル法は「固有値」、固有列はカテゴリを含むフィールドなので、今回は「Field1」です。

次に、フォーミュラツールを使います。単にTile_SequenceNumフィールドが1ならカテゴリの値を残してそうでなければ削除します。これにより以下のような単純な式になります。

IF [Tile_SequenceNum]=1 THEN [Field1] ELSE "" ENDIF

これこそノーコードといった感じでしょうか。

手法2.逆順に並び替えて上と同じなら削除する

単純な数式で、直接カテゴリ列のデータを削除していく方法です。ソートツールを使って式を単純にしています。その代わりデータ量が多いときはその分時間がかかる方法です。この方法は式が単純化されており間違えにくいという利点はあるかと思います。

ワークフローとしては以下のようになっています。

  1. 列の順序を保存するためのRecordID列を「レコードID」ツールで付加する
  2. RecordIDの逆順でソートする
  3. 複数行フォーミュラでカテゴリ列が一つ下の行と現在の行が同じなら削除する
  4. RecordIDの昇順でソートして元の並びに並び替える

2回ソートするだけの価値は、複数行フォーミュラの計算式が単純になることです。以下の数式となります。

IF [Row+1:Field1]=[Field1] THEN "" ELSE [Field1] ENDIf

条件式は以下のとおりです。

  1. 一つ下の行と現在の行が同じなら削除
  2. それ以外は残す

式は単純でわかりやすいです。

手法3.削除フラグをつけてあとから削除する

直接カテゴリ行の値を削除すると式が複雑になるので、削除フラグ列を作って、その値に応じてあとから削除する方法もあります。

複数行フォーミュラツールの計算式としては、複雑ではありません。

IF [Row-1:Field1]=[Field1] THEN "TRUE"
ELSE "FALSE" ENDIF
  1. 一行上と現在の行の値が同じならTrue
  2. それ以外はFalse

これでTrueをすべて削除すれば良いため、フォーミュラツールで値を消していきます。

IF [IsDelete] THEN "" ELSE [Field1] ENDIF

使用する数式は単純でデメリットも特に見当たらない方法です。

手法4.複数行フォーミュラで少し複雑な計算式を組む

複数行フォーミュラ一つあれば実現可能ですが、計算式は複雑になります。見た目にはエレガントですが、Alteryxに慣れてない方がいる場合は必ずしも最適解ではないケースもあるかと思います。

今回であれば以下のような計算式となります。

IF [Field1]!=[Row+1:Field1] AND [Row+1:Field1]!=[Field1] THEN "" 
ELSEIF [Field1]!=[Row-1:Field1] THEN [Field1]
ELSE "" ENDIF

条件式として、

  1. 一行上と一行下が両方異なるなら削除
  2. 一行前と異なる場合は残す
  3. それ以外は削除

としています。複数行フォーミュラは、レコードを上から下に見ていきますが、常に値を操作できるのは現在の行のみなので、そのせいで少しややこしくなります。今回であれば、現在の行を消すと、次の行に移動した際にそれが空白になってしまうため、現在の行と上の行が同じであれば消す、というロジックが使えません(すでに空白になってしまうため)。このあたりを考慮しながら計算式を構築しているのは結構悩むかと思います。

データ部分とヘッダ部分を結合する

上の手法1~4のいずれかの方法でデータ部分が作成できます。

いずれの方法でもテーブルツールでは不要な列は削除します。テーブルツールの設定は以下のとおりです。

これで以下のようなデータが得られます。

さらにTips #23で作成したヘッダに結合しましょう。以下のように、ユニオンツールに入れていきます。

もちろんユニオンツールでは、データ部分が一番最後になるように順番を調整しておきましょう。

これにより以下のようなデータが得られます。

サンプルワークフローダウンロード

次回

思ったより空白にするロジックに記事を割いてしまったので、次回は横幅について解説します。

コメント

タイトルとURLをコピーしました