Lookerで経営データ分析!#3 BigQueryでデータマート作成
こんにちは。前回#2ではLooker分析の全体アーキテクチャを公開しました。今回はその中でもBigQueryでのデータマート作成について掲載します。
データマート作成の目的として、Lookerで可視化するために売上などの各種指標がSUMするだけで算出できるように、RawデータをSQLでデータ整形します。(Looker上でもLookMLでデータ整形、算出ロジックの設定出来ますが、Looker上でしかデータの参照が出来なくなるので、BigQuery上でデータマートの作成はやったほうが良いです。)
売上
IF
(sales_category IN ('施術売上',
'店販売上',
'役務売上(チケット)',
'キャンセル手数料'),
total,
0) AS sales
BigQueryで条件分岐を行うときはIF分、CASE式が便利です。
上記SQLではsales_category(売上区分)列が施術売上、店販売上、役務売上(チケット)、キャンセル手数料のいずれかの場合、売上に計上するようにしています。逆に掛け金などの金額は売上から除いています。
この辺りの考え方は業種、使っているシステム、クライアントの見たい数値、で変わってくるので事前確認が必要です。
契約数、解約数、来店数
IF
(sales_category = '役務売上(チケット)'
AND purpose = '購入'
AND free_code1 IS NOT NULL,
TRUE,
FALSE) AS contract_flag,
IF
(purpose = '返品・返金',
TRUE,
FALSE) AS cancel_flag,
IF
(visit = '○',
TRUE,
FALSE) AS visit_flag
契約、解約、来店を条件分岐で判定して、BOOL型でフラグを立てます。
Rawデータの明細が1売上1レコード単位なので、上記のSQLのフラグを
ユニークな顧客でCOUNTすれば、契約数、解約数、来店数が算出できます。
顧客属性(年齢、年代、居住地)
Rawデータに顧客マスタがあるので、JOINして年齢、郵便番号、住所が分かります。年齢だと分析の際、粒度が細かすぎる問題があるので、年代の中間テーブルを作成して、顧客の年代を付与します。(10代、20代...)
また顧客の居住地に関して、都道府県、市区町村ごとに分析したいので、郵便番号、都道府県、市区町村の中間テーブルを作成して、顧客の居住都道府県、市区町村が分かるようにします。
↓日本郵便株式会社のHPからDLできるCSVデータを利用しました。
https://www.post.japanpost.jp/zipcode/download.html
LEFT JOIN (
SELECT
postal_code,
MAX(prefectures_jp) AS prefectures_jp,
MAX(municipalities_jp) AS municipalities_jp
FROM
`test.test_dataset.Postal_code`
GROUP BY
postal_code) AS b
ON
CAST(REPLACE(a.postal_code,"-","")AS int) = b.postal_code )
注意点として、同一郵便番号で複数の町名・番地があり得るので、今回知りたいのは市区町村までだったので、GROUP BYして一意になるようにしてます。
平日・休日区分
IF
( EXTRACT(DAYOFWEEK
FROM
a.date) = 1
OR EXTRACT(DAYOFWEEK
FROM
a.date) = 7,
'休日',
IF
( holiday IS NOT NULL,
'祝日',
'平日') ) AS holiday_category
売上などの指標を平日・休日別に分析するために土日および祝日の条件分岐を入れます。土日についてはBigQueryのEXTRACT()関数で判定、祝日は内閣府のHPより祝日スケジュールのCSVで中間テーブルを作成して判定しました。(Googleカレンダーの祝日を連携できないか調べたのですが無理でした泣)
https://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html
まとめ
データマートで作成している指標とディメンションはこんな感じです!(本当はもっとあるのですが割愛します...)
これだけでも単に売上と言っても、10代の売上、20代の売上、平日の売上、休日の売上、世田谷区の顧客の売上、北区の顧客の売上...と様々な切り口で分析できます。こんなデータがLooker上だとリアルタイムでフレキシブルに確認できるので、やっぱりBIツールって便利だなあとしみじみ思いました。。
この記事が気に入ったらサポートをしてみませんか?