Alteryx Tips : データ結合時の注意点

2023.12.12

本記事では Alteryx Designer を効果的に活用するための Tips として Alteryx Designer を使ったワークフロー(以下、WF)開発時の、データ結合前後のレコード数に関して記載しています。 その他の Alteryx Designer 利用時の Tips についても、今後記事にしていく予定です。

本記事の内容

データを結合する際、注意が必要なのが結合キーの値の重複です。
結合キーとは、異なるデータを結合する際に使われる共通の列を指します。これらのキーの値がユニークでない(重複している)場合、予期せぬレコード数の増加が発生する可能性があります。

これにより、特に大きなデータセットを扱う場合に、パフォーマンスの低下や誤ったデータ分析結果をもたらす原因となる可能性があります。

本記事では、データ結合の簡単な概要から、どのような場合にレコード数が変化し得るのかご紹介します。

データ結合の概要

データ結合の目的

データに対して何らかの処理をする際は、複数のデータソースを使用することが一般的です。単一のデータソースに足りない情報を、異なるデータソースから補い、一つのデータとして扱う際にデータの結合が行われます。
例えば、以下のように2つのデータセットが存在するとします。

商品テーブル
商品の基本情報(商品コード、商品名、価格)を含むテーブル

商品コード 商品名 価格
1001 Tシャツ 1000
1002 ジーンズ 3000
1003 スニーカー 5000

注文履歴テーブル
顧客による商品注文の詳細(注文番号、商品コード、数量、注文日)を含むテーブル

注文番号 商品コード 数量 注文日
A001 1001 2 2023-11-01
A002 1003 1 2023-11-03
A003 1002 1 2023-11-05

よくあるケースとして、注文履歴から売上の集計をしたい場合を考えます。
この際、注文履歴テーブルには金額の情報がないので、注文履歴テーブルだけでは金額の合計値を算出できません。

そこで、2つのテーブルを共通する列で、紐づける(結合する)ことで、各注文に対する価格や商品名などの詳細情報を一つのデータとして扱えるようになります。
この例では、共通する列として、各テーブルの「商品コード」列をマッチさせることができます。

基本的な用語

本記事でも何度か出てくるデータ結合時の基本的な用語について記載しています。
特に「カラム」については、いくつか異なる名称で表現される場合もあるので、ご注意ください。

用語 説明
テーブル 行と列から構成されます。各行は「ユーザー情報1件」や「購買履歴1件」などのデータを表します。
レコード テーブルの「行」を表します。
カラム テーブルの「列」を表します。フィールド、項目、キーなどと呼ばれることがあります。
ジョイン 2つ以上のテーブル間で共通のキー(例: [商品コード] など)を基にデータを結合することを指します。

データ結合の種類

結合の方法にはいくつかの異なる種類があり、それぞれ特定のニーズやデータの特性に応じて使用されますが、本記事では「内部結合」を前提に扱います。

  • 内部結合
    • 2つのデータセットの間で共通のキー値を持つレコードのみを結合します
    • 両方のデータセットに存在するデータのみが結果として出力され、どちらか一方にしか存在しないデータは除外されます。
    • 例:2つのテーブルに共通して存在する「顧客ID」に基づいてデータを結合する

Alteryx でのデータ結合には「結合ツール」が使用できます。結合ツールには、3つの出力アンカーがありますが、このうち「J」出力アンカーが内部結合の結果を返します。
その他の結合方法や Alteryx での実装については、以下の記事をご参照ください。

内部結合のイメージ

内部結合の動作例のイメージです。
ここでは、上記の「注文履歴テーブル」と「商品テーブル」を例にします。

下図のようなそれぞれ3レコードのデータがあるとします。

注文履歴テーブルに [商品名] や [価格] を紐づけたいとした場合、両方のテーブルに存在する [商品コード] を基準に結合します。
この例では、各商品コード(1001,1002,1003)が、両方のテーブルに1レコードずつ存在します。

内部結合の結果は、各商品コードを基準にマッチした3レコードからなるテーブルとなります。

Alteryx Designer の場合、以下のようなワークフローとなります。
※下図では出力レコード順が異なっています。

左(Left)テーブル と 右(Right)テーブル

結合ツールの入力アンカーに「L」・「R」とあるように、結合の対象となるテーブルはそれぞれ「左(Left)テーブル」と「右(Right)テーブル」にわけられます。

この例では、注文履歴テーブルを「L」、商品テーブルを「R」の入力アンカーに接続しているため、それぞれ左・右のテーブルと分類されます。
出力結果は、左側の注文履歴テーブルの列の後に、右側の商品テーブルの列が出力されています。

内部結合以外の結合の種類(左外部結合、右外部結合)によっては、どちらのテーブルが「左」か「右」かにより出力される内容が異なるので、正しい結合を行う場合、注意が必要となります。
結合操作時に左(Left)と右(Right)のどちらにどのテーブルを指定するかは、分析の目的や必要な情報によって異なりますが、通常は分析の主軸となるテーブルや、最も重要なデータを含むテーブルを左側のテーブルとし、追加情報を含むテーブルを右側に配置します。

結合結果のレコード数

上記のように、結合対象となる両テーブルで、結合キーの値が完全に一致し、各キーに対応するレコードが1対1で存在するような場合、レコード数は変化しませんが、データ結合時に、入力と出力でレコード数が異なる場合もあり、注意が必要です。
また、本記事では、内部結合(結合ツールの J 出力)の基準となるテーブル(一般的には左側のテーブル)の入力レコード数に対する出力レコード数の増減という観点で記載します。

レコードが減少する例

以下の例のように、基準となるテーブルのキー値が他方のテーブルに存在しない場合、レコード数が減少します。

この例では、各商品対する過去の注文有無を判別したいとして、商品テーブルを基準(左側)に、注文履歴テーブルと [商品コード] で結合しています。

注文履歴テーブルには、[商品コード] が 1002 のレコードが含まれていません。注文履歴テーブルを特定の期間で絞りこんだ場合や新商品でまだ購入履歴がないなど、この商品が一度も注文されていない場合このようなデータとなることが考えられます。

マッチする [商品コード] がないため、このレコードは結果テーブルに含まれません。その結果、結合後のテーブルのレコード数が元の商品テーブルのレコード数より減少することになります。

結合結果

レコードが増加する例

内部結合時、結合するキーのある値に対して、複数のレコードが存在する場合、レコード数が増加します。これは、結合するテーブルの一方または両方でキー値が重複する場合に発生します。

一方のテーブルで結合キーの値が複数存在する例

以下のような場合です。

この例では、基準となる商品テーブルのレコード数は3ですが、もう一方の注文履歴テーブルでは、[商品コード] が同じ値のレコードが複数存在します(商品コードが重複している)。結合結果は以下のようになり、商品テーブルのレコード数を基準に考えると、結合結果のテーブルではレコード数が増加します。

両方のテーブルの結合キーの値が複数存在する例

結合対象のテーブルのデータが以下のようになっている場面です。

実際にこのような例があるかは別として、商品テーブルと注文履歴テーブルの両テーブルで、[商品コード] が重複しています。具体的には、[商品コード] が 1001 のレコードが両方のテーブルで複数存在します。

この状態で [商品コード] をキーに結合すると、それぞれの重複したキー値が互いのテーブルの複数のレコードとマッチすることになります。

  • 1レコード目の商品コード 1001 のデータ
  • 2レコード目の商品コード 1001 のデータ

結合結果は以下のようになります。[商品コード] が 1001 のレコードが、「商品テーブルに2レコード」×「注文履歴テーブルに3レコード」の6レコード出力されます。[商品コード] が 1003 のレコードもマッチするので、出力は7レコードとなります。

このような場合、結合後のテーブルのレコード数が元の両テーブルのレコード数よりも増加します。

この例のように、データとして重複がないカラムのはずであったとしても、ファイルベースでデータを管理しているなど、値が重複を許す状況下では、結合によるレコード数の増加で、データ分析やレポーティング結果が本来求めたいものと異なり、結果の解釈に影響を与える可能性があるので注意します。

結合キー値の重複確認

結合時は特に、使用する項目に重複がないか確認することで、意図しない結果となることを事前に防ぐことが可能です。 ただし、データの内容上、結合のキーとする項目の値が重複を許す場面もあるかと思いますので、そのような場合は値が重複しているため結果のレコード数が変化することを念頭に置いておけば問題ないと考えます。

重複をなくした上で結合を行いたい場合、Alteryx では一般的に以下のツールが利用できます。

ユニークツール

ユニークツールは、選択した列に基づいて、ユニークなレコードを抽出することができます。
注意点として、重複削除によってユニークなレコードとして出力されるのは、一番最初に出てくるレコードとなります。 必要なレコードによっては、事前にデータをソートするなどの処理が必要となります。詳細は以下の記事をご覧ください。

集計ツール

こちらも同様に、指定の列を「グループ化」することでユニークを値を取得することが可能です。ユニークな特定の列のみ後続の処理で用いる場合は、集計ツールのグループ化を使うことも可能です。

さいごに

Alteryx Designer を使ったデータ結合時の注意点について記載しました。
今後もこのような形で、Alteryx Designer 利用時の Tips を記事にしていきます。こちらの内容が何かの参考になれば幸いです。