BIツールでおなじみのドリルダウン。
大分類ごとの売上 → 大分類・中分類ごとの売上 → 大分類・中分類・小分類ごとの売上 のようにどんどんと細かい情報にしてデータ分析をする方法です。
この機能を使いたいのにデータが階層ごとになっていないからうまくできない、ということはございませんか?
この記事ではカラム内の文字列の中で特定の文字列で分割して、階層項目をつくるという内容です。
便利な技術なのでぜひご覧になってください。
階層テーブルでドリルダウンをする
このドリルダウンはホームページのURLを階層にして表示させています。pagePath1 → pagePath2 → pagePath3 と詳細にドリルダウンしていますね。
このドリルダウンを実現するためにはpagePath1、pagePath2、pagePath3という項目が必要です。
ひとつの項目にフルパスが入っている場合が多い
しかしこのように階層構造となっているテーブルはなかなかなく、下図のように1つの項目にフルパスで入っていることが多いです。
Page URLはスラッシュ(/)で区切られています。こちらをpagePath1、pagePath2・・・のように分解していきます。
それではデータを加工していきましょう。
今回はSQLをつかってデータを加工します。
SQLではなくDS Scriptで実装したい方はこちらの記事を参照ください。
元となるテーブル
今回のサンプルとなるテーブルはこちらです。[アクセスログ]というテーブルにしています。
こちらは[アクセスログb]というテーブルです。階層数とpagePath1~pagePath10までの項目があります。
こちらのテーブルにデータを入れます。つまり[アクセスログ]のデータを参照・加工して[アクセスログb]に挿入します。
SQLをつかってデータ加工をする
今回使用するSQLはこちらです。
INSERT INTO アクセスログb
SELECT
PageURL,
LENGTH(PageURL) - LENGTH(REPLACE(PageURL,'/','')) 階層数,
CASE WHEN LENGTH(PageURL) - LENGTH(REPLACE(PageURL,'/','')) >= 1 THEN '/' || SPLIT_PART(PageURL, '/', 2)
ELSE ''
END pagePath1,
CASE WHEN LENGTH(PageURL) - LENGTH(REPLACE(PageURL,'/','')) >= 2 THEN '/' || SPLIT_PART(PageURL, '/', 3)
ELSE ''
END pagePath2,
CASE WHEN LENGTH(PageURL) - LENGTH(REPLACE(PageURL,'/','')) >= 3 THEN '/' || SPLIT_PART(PageURL, '/', 4)
ELSE ''
END pagePath3,
CASE WHEN LENGTH(PageURL) - LENGTH(REPLACE(PageURL,'/','')) >= 4 THEN '/' || SPLIT_PART(PageURL, '/', 5)
ELSE ''
END pagePath4,
CASE WHEN LENGTH(PageURL) - LENGTH(REPLACE(PageURL,'/','')) >= 5 THEN '/' || SPLIT_PART(PageURL, '/', 6)
ELSE ''
END pagePath5,
CASE WHEN LENGTH(PageURL) - LENGTH(REPLACE(PageURL,'/','')) >= 6 THEN '/' || SPLIT_PART(PageURL, '/', 7)
ELSE ''
END pagePath6,
CASE WHEN LENGTH(PageURL) - LENGTH(REPLACE(PageURL,'/','')) >= 7 THEN '/' || SPLIT_PART(PageURL, '/', 8)
ELSE ''
END pagePath7,
CASE WHEN LENGTH(PageURL) - LENGTH(REPLACE(PageURL,'/','')) >= 8 THEN '/' || SPLIT_PART(PageURL, '/', 9)
ELSE ''
END pagePath8,
CASE WHEN LENGTH(PageURL) - LENGTH(REPLACE(PageURL,'/','')) >= 9 THEN '/' || SPLIT_PART(PageURL, '/', 10)
ELSE ''
END pagePath9,
CASE WHEN LENGTH(PageURL) - LENGTH(REPLACE(PageURL,'/','')) >= 10 THEN '/' || SPLIT_PART(PageURL, '/', 11)
ELSE ''
END pagePath10,
pageView
FROM アクセスログ
上記のSQLを流すと、[アクセスログb]に以下の様にデータが入ります。
ちゃんと階層構造になりましたね。
この状態になればドリルダウンをすることが可能です。
BIツールのパフォーマンスを最大限に活かすには、元データを使いやすい形に加工することも重要です。
SQLを理解して、データ加工の技術を身に着けていきましょう。