Alteryxで範囲を指定してJoin

こんにちは、小澤です。

AlteryxのJoinツールはキーに指定したものが完全一致するという条件での指定になります。 今回は、特定の期間や、年代など一定の範囲内に含まれるものを条件とした結合を行いたい場合の方法を解説します。

処理の流れ

この方法の処理の流れとしては、以下の手順を踏みます。

  1. すべてのデータの組み合わせを結合
  2. 対象となるデータのみに絞り込む

1のプロセスでは、結合対象となるすべての組み合わせを出すため、非常に多くのデータが生成されることになります。 そのため、大量のデータを扱うような場合は工夫が必要になるのでご注意ください。

ワークフロー

今回のワークフローは以下のようになります。

スクリーンショット 2017-11-15 9.49.49

扱うデータは、いくつか実施しているキャンペーンとユーザごとの購買履歴になります。

スクリーンショット 2017-11-15 9.51.40

スクリーンショット 2017-11-15 9.52.04

この2つのデータから、ユーザがどのキャンペーンの期間中にどの商品を買ったのかをみたいと思います。

まず2つのデータをAppend Fieldsツールで結合しています。 これによって1の操作である「すべてのデータの組み合わせ」を取得しています。

上記のデータでは、購買履歴が27行、キャンペーンのリストが12行に対して、27x12=324行のデータが生成されています。 この部分で例えば購買履歴などは大量のデータになることが予想されるので、実際のデータでは分析対象を月ごとにするなどの対応が必要になります。

続いては、Filterツールで対象となるレコードのみに絞っています。

[date] >= [start] and [date] <= [end]

購買日がキャンペーンの開始から終了までの範囲に含まれるもの、という判定になります。

これで、以下のように範囲で結合した結果を得ることができました。

スクリーンショット 2017-11-15 9.57.19

データが大量の場合は?

さて、このやりかたでは組み合わせで結合しているため途中で大量のデータが生成されてしまいます。 そのため、この方法はデータの性質にかかわらず使えはしますが、他にいいやり方がなかった際の最終手段のようなものになります。

では、他にいいやり方はないのでしょうか? これは、データの性質に依存します。

たとえば、今回扱ったデータだと、キャンペーン期間は必ず月初から月末までになっています。 こういった場合は、年月までの情報を用意すれば、Joinツールでの結合が可能になります。

年代などの場合も、年齢を10で割った値の整数値を利用するなどで対応可能でしょう(この場合5歳刻みなどだとさらに一工夫必要になります)。

まずはデータ中の値から、何らかの形で範囲ではなく完全一致で結合可能なキーを生成できないか考えてみるのがいいかと思います。

おわりに

こんかいは、データの結合を行う際に範囲を指定して結合する方法を紹介しました。

なんども書かせていただいた通り、組み合わせでの結合は膨大なデータが生成される可能性があるためご注意ください。

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

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

alteryx_960x400