Lesson 8 他のファイルの項目を結合する

     ここまでのレッスンでは、ある一つのデータファイルからのみ帳票を作成してきた。実際に分析を進めていくと、複数のデータファイルから帳票を作成することが多くなる。最終的には複数のデータファイルを一つにまとめるのであるが、そのまとめ方は大きくわけて2つある。一つは「項目を結合する」処理であり、他方は「レコードを併合する」処理である。前者は項目が増え、後者はレコードが増える。Lesson8では項目の結合について学習する。レコードの併合についてはこのチュートリアルでは行わない。Lesson8からLesson10にかけて、「1998年の年代別平均売上単価」帳票の作成を目指す。これらのレッスンの中では項目の結合に加えて新しいコマンドの利用例についても学習することになる。
    大まかな流れは以下の通りである。
 

「顧客、日付、金額、数量」のファイルを作る(Lesson8)
顧客の生年月日を結合する(Lesson8)
年齢を計算する(Lesson9)
年代別で数量金額を集計する(Lesson9)
金額÷数量で平均単価を求める(Lesson10)
見やすい帳表に整形する(Lesson10)
 
 

 1. 必要データの選択(gunzip,mselnum,mdelnul,mcut)

    まずは、帳票の作成の基本である、「必要とするデータを選択」することから始めよう。もとのデータで必要とするデータレコードは何であろうか。またデータ項目である「1:店コード」、「2:日付」、「3:時間」、「6:レシート番号」、「8:顧客コード」、「27:商品コード」、「14:数量」、「13:金額」の中で、目的とする帳票を作成するためにはどの項目が必要であろうか。まずデータレコードに関しては、「1998年度」、「顧客」といったキーワードから決まってくる。顧客に関してであるが、もとのデータを見ればわかるように、顧客コードがnull値のデータレコードが多く存在する。これは会員カードを見せて(スキャンして)購入しなかった購買履歴である。そこで年齢を求めるためには顧客の生年月日がわかっていなければならない。しかし会員コードがなければ、当然生年月日を特定できない。そこでデータレコードの選択において顧客コードがnull値のものは省かれる。 またデータ項目については、顧客コード、数量、金額の他に日付も必要となる。これは後で詳しく説明するが、顧客の購買時の年齢を求めるために必要となる。これらを考慮したバッチは以下のようになる。
 

gunzip -c /home/practice/Mine/Data/StoreMaster1/Dat/dat.gz |\
mdelnul field=8                                            |\
mselnum field=2 range=19980101_19981231   |\
mcut field=8,2,13,14                                     >xxtmp
    xxtmpの内容を確認しておこう。「顧客コード」「日付」「金額」「数量」の順に出力されていることがわかる。

2. 項目を結合する(mjoin)

 この章の冒頭に記してあるとうり、これから分析していくと、1つのファイルだけでするのではなく複数のファイルを1つにまとめて分析していくことになる。ここでは、「項目を結合する」処理を行う。上記の説明に記しているように年齢を求めるために顧客の生年月日を求める。生年月日を出すには、普段ならマスターデータからmcutで「51:生年月日」で取り出すのだが、ここではあえてmjoinを使って項目を結合させて顧客の生年月日をだす。そこでmjoinコマンドを使って項目を結合させたバッチは以下のようになる。
 
 

gunzip -c /home/practice/Mine/Data/StoreMaster1/Dat/dat.gz |\
mdelnul field=8                                            |\
mselnum field=2 range=19980101_19981231   |\
mcut field=8,2,13,14                                    |\ 
sort                                                          |\
mjoin key=1 master=/home/practice/Mine/Data/Birthday/Dat/dat  field=2   >dat8-1