Challenge #14: Warehouse Distribution 〜倉庫から各店舗へ商品の分配〜 – Alteryx Weekly Challenge

2018.11.07

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

こんにちは。Alteryxサポートエンジニアとして勉強中のスズです。

Alteryx CommunityWeekly Challengeに挑戦するシリーズ。今回は倉庫から各店舗へ商品の分配に挑戦いたします。

Challenge #14: Warehouse Distribution

お題

今回挑戦するお題はこちら。

「Input」側のデータには3つのデータが用意されています。1つ目のデータには各店舗と優先度が含まれています。なお、「Priority」列の数値が低い方が優先度が高い店舗となっています。

2つ目のデータには各店舗が要求している各商品の数が含まれています。

3つ目のデータには倉庫にある各商品の在庫が含まれています。

「Output」側のデータでは各店舗に各商品が割り当てられた結果が出力されています。

優先度の高い店舗から各商品を分配していき、要求数が在庫を上回る場合は残りの在庫を割り当てています。

解答の概要

今回作成するワーフクローは以下の通りです。

  1. Joinツールで3つのデータを結合
  2. Sort、Summarize、Joinツールで商品分配のためのデータを準備
  3. Multi-Row Formula、Formulaツールで各店舗に商品を分配
  4. Sort、Select、Browseツールで出力用にデータを整形して出力

Joinツールで3つのデータを結合

ワークフローの処理を見ていきます。

まずはJoin -> Joinを使って3つのデータを結合します。1つ目と2つ目のデータを「Store」列で結合します。

続けてJoinツールを使い、1つ目と2つ目を結合したデータと3つ目のデータを「Item」列で結合します。

結合したデータは以下のようになっています。

Sort、Summarize、Joinツールで商品分配のためのデータを準備

Preparation -> Sortで「Item」列と「Priority」列の数値が低い順に並べ替えを行い、各商品ごとに優先度の高い順に表示します。

Transform -> Summarizeで各商品の最優先の店舗を出力します。各店舗ごとに優先度が割り振られていますので、「Priority」列の数値が一番低いものを出力しています。

Sortツールで出力したデータとSummarizeツールで出力したデータを、Joinツールを使って「Item」列で結合します。

結合したデータは以下のようになっています。

Multi-Row Formula、Formulaツールで各店舗に商品を分配

Preparation -> Multi-Row Formulaを使用して、優先度の高い順に各商品の在庫から要求数を引いていきます。Group By (Optional) で「Item」列でグループ化し、Update Existing Field で「Count」列の値(在庫)を更新するように設定します。

Expression には以下の設定をしています。

  • 優先度が最優先の場合は初期の在庫を出力
  • 優先度が最優先以外の場合は優先度がひとつ上の在庫から優先度がひとつ上の要求数を引いたものを出力

在庫から要求数を引いていきますと、在庫が足りない場合は数値がマイナスになっています。

Preparation -> Formulaを使用して、各店舗に各商品を分配します。新しく「Assigned」列を作成して分配した結果を出力します。

Expression には以下の設定をしています。

  • 要求数以上の在庫がある場合は要求数を出力
  • 在庫はあるが要求数に満たない場合は在庫を出力
  • 在庫がない場合は0を出力

これで倉庫から各店舗に各商品を分配した結果が出力されます。

Sort、Select、Browseツールで出力用にデータを整形して出力

ここからは出力用にデータを整えていきます。まずはSortツールで「Store」列を使って並べ替えます。

Preparation -> Selectを使用して不要なフィールドを削除します。

In/Out -> Browseで結果を確認して完成です。

最後に

今回はWeekly ChallengeのChallenge #14: Warehouse Distributionに挑戦してみました。今後もWeekly Challengeに挑戦していきます。