Challenge #17: Month-over-Month Retention Rate ~月ごとの顧客維持率のバッチマクロ~ – Alteryx Weekly Challenge

2019.01.08

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

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

Alteryx Communityで公開されているWeekly Challengeに挑戦するシリーズ。今回は月ごとの顧客維持率のバッチマクロの作成に挑戦します。

動作環境

当エントリの執筆には、以下の環境を利用しています。

  • Windows 10 Pro
  • Alteryx Designer 2018.4.5.55178 英語版

Challenge #17: Month-over-Month Retention Rate

お題

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

Input側のデータはこちら。

Output側のデータはこちら。

「Start of Month」列の24か月前に開いている口座の数と「Start of Month」列の月に閉じられた口座の数で、銀行の月ごとの顧客維持率を計算します。また、今回のお題はバッチマクロを作成して回答します。

通常のワークフローを作成

バッチマクロの作成の前に、まずは通常のワークフローを作成して、Output側と同じになるデータを作成します。

Text Inputツール(In/Out -> Text Input)を使用して、2つのデータを準備しました。1つ目はInput側のデータの日付形式を修正したものです。

2つ目は「Start of Month」列のデータです。

Append Fieldツール(Join -> Append Field)を使用して2つのデータを結合し、Filterツール(Preparation -> Filter)を使用して必要なデータを抽出します。Filterツールの条件としては以下の通り設定しています。

[Open Date] > DateTimeAdd([Start of Month],-2,'years') and [Open Date] < [Start of Month] and ([Close Date] > [Start of Month] or IsNull([Close Date]))
  • 「Open Date」列が「Start of Month」列の2年前より後
  • 「Open Date」列が「Start of Month」列より前
  • 「Close Date」列が「Start of Month」列より後またはNullではない

抽出したデータから、開いている口座と閉じた口座の数を数えます。開いている口座はSummarizeツール(Transform -> Summarize)を使用して、「Start of Month」列をグループ化して数を出力します。

開いている口座のデータは以下のようになっています。

閉じた口座は、Filterツールを使用して「Close Date」列と「Start of Month」列が同じ月であるデータに絞り込んだのち、Summarizeツールで「Start of Month」列をグループ化して数を出力します。

Filterツールには以下の式を設定しています。

Left([Close Date], 7) = Left([Start of Month], 7)

閉じた口座のデータは以下のようになっています。

開いている口座と閉じた口座のデータを、Joinツール(Join -> Join)を使用して「Start of Month」列で結合します。また、Joinツールで結合したデータと、開いている口座のうち結合できなかったデータを、 Unionツール(Join -> Union)を使用して結合します。現在使用しているデータはJoinツールで全て結合されているためUnionツールの処理は不要ですが、別のデータで結合できなかったデータがあった場合を想定してツールを追加しています。

Formulaツール(Preparation -> Formula)を使用して「%」列をDouble型で作成します。計算式はOutput側のデータにあわせて設定しています。

[Close] / [Open]

Selectツール(Preparation -> Select)を使用して列の並べ替えを行い、Data Cleansingツール(Preparation -> Data Cleansing)を使用してNullを0に変換します。現在使用しているデータではNullがないためData Cleansingツールの処理は不要ですが、別のデータでNullがあった場合を想定してツールを追加しています。

Output側のデータと同じデータが出力されていることを確認します。

バッチマクロの作成

作成したワークフローからバッチマクロを作成します。

1つ目のデータを設定したText Inputツールの右クリックメニューを開き、Convert To Macro Input でMacro Inputツール(Interface -> Macro Input)に変換します。Macro Inputツールの設定として、Text InputEdit Dataを開き、以下のように1行だけデータを残します。

2つ目のデータを設定したText Inputツールは、以下のように1行だけデータを残します。

Controle Parameterツール(Interface -> Control Parameter)を追加し、2つ目のデータを設定したText Inputツールに接続します。ツールの間にはActionツール(Interface -> Action)が自動的に配置されます。Actionツールは、Select an action typeUpdate Cell (Default) を選択し、 Update row 1 and column 1 (2013-05-01) to .... と設定します。

Data Cleansingツールの先にはBrowseツール(In/Out -> Browse)の代わりにMacro Outputツール(Interface -> Macro Output)を接続します。

ワークフローの設定ウィンドウにあるWorkflowタブを確認すると、TypeのMacroにBatch Macroが自動的に設定されています。

View -> Interface Designer を開き、バッチマクロを使用する際の設定を確認します。レイアウトは以下のようになっています。

またバッチマクロ用のアイコンを設定しました。

バッチマクロを使用する

バッチマクロを使用してワークフローを作成します。

Input側に用意されているデータは、「Open Date」列と「Close Date」列が文字列型になっています。Formulaツールを使用してDate型に変換します。

「Open Date」列は、新しく「New_Open Date」列を作成し、以下の式で日付形式に変換します。「Close Date」列に関しても同様の処理を行います。

DateTimeParse([Open Date],"%B%d,%Y")

Selectツールを利用して、不要な列の削除と列名の修正を行います。

また、Text Inputツールを使用して、「Start of Month」列のデータを用意します。

作成したバッチマクロを追加します。バッチマクロの上の入力には「Start of Month」列のデータを接続し、下の入力には「Open Date」と「Close Date」があるデータを接続します。バッチマクロの設定には、入力したデータにあわせて列を設定します。

結果を確認して完成です。

最後に

今回はWeekly ChallengeのChallenge #17: Month-over-Month Retention Rateに挑戦しました。

サンプルワークフローのご案内

クラスメソッドでご契約のユーザー様向けに、当ブログでご紹介したワークフローを専用ポータルにて公開しております。当エントリに関しては、バッチマクロを使用するでご紹介したワークフローを公開しておりますが、ワークフローにはバッチマクロも付属しておりますので、マクロの中身もご確認いただけます。ご参考にしていただければ幸いです。