Community Spring Cleaning week is here! Join your fellow Maveryx in digging through your old posts and marking comments on them as solved. Learn more here!
Free Trial

ナレッジベース

エキスパートから学ぶ。

結合ツールのしくみと不要なレコードの生成を回避する方法

Community_Admin
Alteryx
Alteryx
Created

ジョインツールはAlteryxで最もよく使用されているツールの1つですが、最も誤解されているツールの1つでもあります。このことは、新規ユーザーが以前に他のデータ操作プラットフォームで結合を使用したことがない場合、または結合しているフィールド内のレコードを追跡できないような大きなテーブルに結合している場合に特に当てはまります。

 

ここで、1つの共通フィールドに2つのテーブルを結合する際に起こりうる3つの異なるケースを見ていきます。

ここで紹介する(この記事に添付されている)ワークフローは、10.5で作成したワークフローで、以下のものと同じビジュアルが含まれています。

 

ケース #1: ユニークなレコードを持つフィールド同士をジョインする

J1.jpg

 

これは最も簡単で理解しやすいケースです。このケースでは、どちらの入力も「Fruit」の名前が付けられたフィールドでジョインします。「Fruit」フィールドのレコードが一致すると、ジョインによって両方のテーブルのレコードが整列されます。

 

その結果、ジョインしたテーブル(J出力)は次のようになります:

 

joinedtable1.jpg

大変わかりやすいですよね。

 

ケース #2: 1つだけがユニークのレコードを持つフィールドでジョインする

J2.jpg

 

このケースでは、左の入力に「Banana」のレコードが2つあります。これは、右入力に「Banana」があるレコードが2回一致し、左入力から両方のレコードに追加されることを意味します。出力は次のようになります:

 

joinedtable2.jpg

 

ケース #3: どちらもユニークではないレコードを持つフィールドでジョインする

これは非常に理解しにくいかもしれませんが、視覚的にそして数学的に見ると、これが理にかなっている理由、また不要なレコードを避けるために何ができるかを理解できるでしょう。

 

J3.jpg

この場合、「Fruit」に2つのレコードがあり、どちらのテーブルにも「Banana」があります。上記のケースと同じことがここでも発生しますが、右入力からの2つのレコードと、左入力からの2つのレコードが一致しているため、2回発生する点が異なるところです。そのため、出力には「Banana」という単語を含む合計4つのレコードが含まれます。 出力は次のようになります:

 

joinedtable3.jpg

 

ケース#3ケース#2の両方を数学的に見ると、両方のテーブルに表示されるレコードの量を掛けることによって、各レコードインスタンスに対して取得するレコード数がわかります。上記の例では、"Fruit"をジョインしているため、両方のテーブルでbananaのレコードが2回表示されています。2バナナ × 2バナナ = 4バナナと考えることができます。

 

次のように右入力に別の行を追加した場合:

leftinputtriple.jpg

 

これで3 x 2になりましたので、"Fruit"フィールドに"Banana"を含む6つのレコードの組み合わせがあるはずです。

 

joinedtable4.jpg

 

 bananas.jpg

 

2つのテーブルをジョインしていて、予測していたより多くのレコードを取得した場合、これが問題の原因となる可能性が最も高くなります。上記のケースを理解できていない場合、まさに誰でもイライラしてしまうでしょう。ベストプラクティスとして、テーブルをジョインする前に次の2つの手順に従います。

 

1:重複レコードがないかテーブルを確認してください。

上記のケースでは、右入力に重複レコードが3つありますが、ユニークツールを使用してこれらの重複を取り除くことができます。

unique tool.jpg

出力はケース2からの出力とまったく同じになります。ユニークツールの後に"Banana"のレコードが1つしかないからです。

 

2:複数のフィールドでのジョインが適切な選択肢であるかどうかを確認してください。

例:"Fruit"に"Banana"を含む2つのレコードを持つテーブル1と、”Fruit”に対応する”FruitID”を含む“Store ID”に‘X’を含む2つのレコードがあります。 テーブル2には、“Store ID”と対になる“Store employees”フィールドがあることを除いて、同じ“Fruit”フィールドと“Store ID”フィールドの両方があります。

 

 Left input.jpg                                        store employees.jpg

                        テーブル 1 テーブル 2

 

すべてのデータがうまくペアになるように、データをすべてまとめていきます。 理想的には、”Store Employees”フィールドと“FruitID”フィールドを1つのテーブルにまとめて、ジョインから得られるレコードを4つだけにします。ただし、“Store ID”または“Fruit”のいずれかに共通の1つのフィールドをジョインするだけでは、組み合わせは得られますが、データを正しく配置することができません。下記を参照してください。

 

“Fruit”をジョインする

mismatchfruit.jpg

 

この場合、Store IDが一致しない2つのレコードが表示されます。

 

“StoreID”をジョインする

mismatch2.jpg

 

この場合、Fruitsが一致しない2つのレコードが表示されます。

これを修正するために、FruitフィールドとStore IDフィールドの両方に一致するようにジョインを設定します。

 

joinconfig.jpg

 

これを実行した後、ジョインテーブルは次のようになります:

goodmatch.jpg

 

複数のフィールドをジョインするときは、ジョインする前にこれら両方のフィールドのレコードが一致することを確認します。

これについて考える簡単な方法として、「Fruit」と「Store ID」がジョインされていることを想像してください。2つのユニークな実体としてBanana XとBanana Yがあり、ジョインにより、1レコード x 1レコードのジョインとなるため、ユニークなレコードができます。

 

joinmatchmulti.jpg

 

 

添付