初級帳票編 顧客の初回来店日、最終来店日、来店期間

本章では、初級コマンドで用いた1996年1月と2月のデータを用いて、下図に示すような「顧客の初回来店日、最終来店日、来店期間」の帳票を作成する。

出力結果

顧客の初回来店日、最終来店日、来店期間

チュートリアル初級シナリオ編

顧客 初回来店日 最終来店日 来店期間
2010216000013 19960105 19960229 55
2010216000020 19960110 19960224 45
2010216000037 19960126 19960222 27
2010216000051 19960108 19960207 30
2010216000068 19960105 19960226 52
2010216000075 19960125 19960125 0
2010216000099 19960105 19960228 54
2010216000105 19960110 19960229 50
2010216000136 19960108 19960228 51
2010216000174 19960109 19960218 40
2010216000204 19960107 19960229 53
2010216000211 19960108 19960228 51
2010216000228 19960107 19960229 53

                :
                :

処理の流れ

 初回来店日とは、利用するデータにおいて、各顧客が最初に来店した日付のことで、最終来店日とは、利用するデータにおいて、各顧客が最後に来店した日付のことである。来店期間とは、初回来店日から最終来店日までの日数である。
 たった2ヶ月のデータでは、これらの項目を求めることはないであろうが、もし4年間のデータで考えると、その4年の間に、多くの新しい顧客が登録されるであろうし、またある日を境にその店に全く来店しなくなるケースもあるであろう。そこで、初回来店日と最終来店日を求めることによって、どのくらいの顧客がどのような時に店に来店するようになり、またどのような時に店を去っていくかを知ることができる。さらに来店期間を求めることによって、初回来店日や最終来店日がいつかに限らず、その店に顧客として来店した期間の少ない顧客を知ることができる。
 上図の帳票の作成においては、これまでに学習したコマンドを組み合わせることによって作成することができる。まずは、次に示す回答見ずに、各自で、入力データから、上図の帳票を作成するために、コマンドをどのように組み合わせて実行すればよいか(処理の流れ)を考えてもらいたい。

回答:処理の流れ

 このような少し複雑な帳票を考えるときは、たとえ処理の効率が下がろうとも、出力項目を一つづつ作成し、最後に結合するように考えるべきである。

スクリプト

上記の処理の流れをスクリプト化したものを以下に示しておくが、回答を見る前に各自でチャレンジしてもらいたい。

#/bin/bash
#===============================================================
# MUSASHI bash script
#===============================================================

#---- タイトル
title="顧客の初回来店日、最終来店日、来店期間"

#---- コメント
comment="チュートリアル初級シナリオ編"

#---- 各種変数(適宜修正すること)
inPath="/mnt/h00/prm/tutorial"

#---------------------------------------------------------------
# コマンド
#---------------------------------------------------------------
#初回来店日を求める
xtcat -i $inPath/'dat*.xt.gz' |
xtdelnul -f 顧客 |
xtcut -f 顧客,日付 |
xtagg -k 顧客 -f 日付:初回来店日 -c min -o xxfirst

#最終来店日を求める
xtcat -i $inPath/'dat*.xt.gz' |
xtdelnul -f 顧客 |
xtcut -f 顧客,日付 |
xtagg -k 顧客 -f 日付:最終来店日 -c max -o xxlast

#初回来店日と最終来店日を結合し、来店期間を求める
xtjoin -k 顧客 -m xxlast -f 最終来店日 -i xxfirst |
xtcal -c 'day($最終来店日,$初回来店日)' -a 来店期間 |
xtheader -l "$title" -c "$comment" -o custflvisit.xt
#===============================================================

実行結果は各自で確認してもらいたい。