一応、まとめておいたほうがよさそうなので、メモ
BI(というかOLAPというか)をするときに、データを
「ドリルダウン(及びドリルアップ)」
「ダイス」
「スライス」
「ドリルスルー」(っていうのは、あんまり言わないかも)
して分析していく。
たとえば・・・
■お題
以下の「販売サマリー」があったとする
販売サマリー
項目 商品
販売店
販売時期 (年単位)
累計額
作成方法:以下のselectのビュー
SELECT
商品TBL.商品大分類 as 商品大分類,
商品TBL.商品中分類 as 商品中分類,
販売店TBL.販売店名 as 販売店,
販売TBL.販売年 as 販売時期,
sum(販売TBL.合計額) as 累計額
From ( 販売TBL left Join 商品TBL ON 販売TBL.商品ID = 商品TBL.商品ID )
left Join 販売店TBL ON 販売TBL.販売店ID = 販売店TBL.販売店ID
GROUP BY
商品大分類,商品中分類,販売店,販売時期;
ただし、商品TBLは、商品IDのほかに、商品大分類、商品中分類、商品小分類があるものとする
そして、現在「販売サマリー」を、商品大分類と、販売店の軸で見ているとする
SQLにすると
SELECT
商品大分類 as 商品,
販売店 as 販売店,
SUM(累計額) as 金額
From 販売サマリー
GROUP BY 商品,販売店
■このとき、
【ドリルダウン】とは
商品、販売店でみているとき、いままで商品を商品大分類レベルでみていたが、
ある商品大分類(たとえば書籍)に固定して
商品を「より詳細な」商品中分類でまとめなおしてみる場合をいう
SQLにすると、
SELECT
商品中分類 as 商品,
販売店 as 販売店,
SUM(累計額) as 金額
From 販売サマリー
Where 商品大分類='書籍'
GROUP BY 商品中分類,販売店
*ドリルアップは、ドリルダウンしたもの(中分類)を元に戻す(大分類)操作
【ダイス】
見ている項目(selectのあとに並ぶ項目)を変える
たとえば、商品、販売店でみているとき、商品、販売時期に変える
SQLにすると、
SELECT
商品大分類 as 商品,
販売時期 as 販売時期,
SUM(累計額) as 金額
From 販売サマリー
GROUP BY 商品,販売時期
【スライス】
見えていない項目を固定する
たとえば、商品、販売店でみているとき、販売時期を2000年にする
SELECT
商品大分類 as 商品,
販売店 as 販売店,
SUM(累計額) as 金額
From 販売サマリー
WHERE 販売時期=2000
GROUP BY 商品,販売店
【ドリルスルー】
ある条件に対して、もとになったデータをみる
たとえば、商品、販売店でみているとき、商品「書籍」、販売店A店で見たい場合
SELECT * FROM 販売TBL WHERE GET_DAIBUNRUI(商品ID)='商品' AND GET_TEN(販売店ID)='A店'
ただし、GET_DATBUNRUIは商品IDから商品大分類を求める自分で作った関数
GET_TENは販売店IDから、販売店名を求める自分で作った関数とする
(関数をつくらなくても、JOINでできるが、そうするとSQLが複雑になるので)
具体的には
2.3 HITSENSER5 Webを使った多次元分析
http://itdoc.hitachi.co.jp/manuals/3020/3020608040/FADC0027.HTM
を見てもらうと、上記のことが図でわかりやすく書いてある
(上記はそれを参考にして例を作成した)
■一般的に
【ドリルダウン】
a1が大項目,a2が中項目,a3がさらに詳細な項目・・・となっているとき
SELECT a1,b,sum(d) From sumtbl Group by a1,b
というビューに対して、
a1のかわりに詳細なa2をつかい、
その代わりa1の値を固定し、where句で絞り込む
SELECT a2,b,sum(d) From sumtbl where a1='X' Group by a2,b
※したがって、ドリルダウンしたい場合は、もともとの集計テーブル(sumtbl)が
参照したい一番詳細なレベルで集計していないと出来ない。
【ダイス】
SELECT a1,b,sum(d) From sumtbl Group by a1,b
というビューに対して、a1のかわりにcを用いる(べつにBのかわりでもいいけど)
SELECT c,b,sum(d) From sumtbl Group by c,b
【スライス】
SELECT a1,b,sum(d) From sumtbl Group by a1,b
というビューに対して、cの値を固定し、WHEREで限定する
SELECT a1,b,sum(d) From sumtbl WHERE C=’Y' Group by a1,b
【ドリルスルー】
データ集計元となったテーブルを表示する
SELECT * From mototbl WHERE a1=’X' and C='Y';
こんなかんじ・・・
BI(というかOLAPというか)をするときに、データを
「ドリルダウン(及びドリルアップ)」
「ダイス」
「スライス」
「ドリルスルー」(っていうのは、あんまり言わないかも)
して分析していく。
たとえば・・・
■お題
以下の「販売サマリー」があったとする
販売サマリー
項目 商品
販売店
販売時期 (年単位)
累計額
作成方法:以下のselectのビュー
SELECT
商品TBL.商品大分類 as 商品大分類,
商品TBL.商品中分類 as 商品中分類,
販売店TBL.販売店名 as 販売店,
販売TBL.販売年 as 販売時期,
sum(販売TBL.合計額) as 累計額
From ( 販売TBL left Join 商品TBL ON 販売TBL.商品ID = 商品TBL.商品ID )
left Join 販売店TBL ON 販売TBL.販売店ID = 販売店TBL.販売店ID
GROUP BY
商品大分類,商品中分類,販売店,販売時期;
ただし、商品TBLは、商品IDのほかに、商品大分類、商品中分類、商品小分類があるものとする
そして、現在「販売サマリー」を、商品大分類と、販売店の軸で見ているとする
SQLにすると
SELECT
商品大分類 as 商品,
販売店 as 販売店,
SUM(累計額) as 金額
From 販売サマリー
GROUP BY 商品,販売店
■このとき、
【ドリルダウン】とは
商品、販売店でみているとき、いままで商品を商品大分類レベルでみていたが、
ある商品大分類(たとえば書籍)に固定して
商品を「より詳細な」商品中分類でまとめなおしてみる場合をいう
SQLにすると、
SELECT
商品中分類 as 商品,
販売店 as 販売店,
SUM(累計額) as 金額
From 販売サマリー
Where 商品大分類='書籍'
GROUP BY 商品中分類,販売店
*ドリルアップは、ドリルダウンしたもの(中分類)を元に戻す(大分類)操作
【ダイス】
見ている項目(selectのあとに並ぶ項目)を変える
たとえば、商品、販売店でみているとき、商品、販売時期に変える
SQLにすると、
SELECT
商品大分類 as 商品,
販売時期 as 販売時期,
SUM(累計額) as 金額
From 販売サマリー
GROUP BY 商品,販売時期
【スライス】
見えていない項目を固定する
たとえば、商品、販売店でみているとき、販売時期を2000年にする
SELECT
商品大分類 as 商品,
販売店 as 販売店,
SUM(累計額) as 金額
From 販売サマリー
WHERE 販売時期=2000
GROUP BY 商品,販売店
【ドリルスルー】
ある条件に対して、もとになったデータをみる
たとえば、商品、販売店でみているとき、商品「書籍」、販売店A店で見たい場合
SELECT * FROM 販売TBL WHERE GET_DAIBUNRUI(商品ID)='商品' AND GET_TEN(販売店ID)='A店'
ただし、GET_DATBUNRUIは商品IDから商品大分類を求める自分で作った関数
GET_TENは販売店IDから、販売店名を求める自分で作った関数とする
(関数をつくらなくても、JOINでできるが、そうするとSQLが複雑になるので)
具体的には
2.3 HITSENSER5 Webを使った多次元分析
http://itdoc.hitachi.co.jp/manuals/3020/3020608040/FADC0027.HTM
を見てもらうと、上記のことが図でわかりやすく書いてある
(上記はそれを参考にして例を作成した)
■一般的に
【ドリルダウン】
a1が大項目,a2が中項目,a3がさらに詳細な項目・・・となっているとき
SELECT a1,b,sum(d) From sumtbl Group by a1,b
というビューに対して、
a1のかわりに詳細なa2をつかい、
その代わりa1の値を固定し、where句で絞り込む
SELECT a2,b,sum(d) From sumtbl where a1='X' Group by a2,b
※したがって、ドリルダウンしたい場合は、もともとの集計テーブル(sumtbl)が
参照したい一番詳細なレベルで集計していないと出来ない。
【ダイス】
SELECT a1,b,sum(d) From sumtbl Group by a1,b
というビューに対して、a1のかわりにcを用いる(べつにBのかわりでもいいけど)
SELECT c,b,sum(d) From sumtbl Group by c,b
【スライス】
SELECT a1,b,sum(d) From sumtbl Group by a1,b
というビューに対して、cの値を固定し、WHEREで限定する
SELECT a1,b,sum(d) From sumtbl WHERE C=’Y' Group by a1,b
【ドリルスルー】
データ集計元となったテーブルを表示する
SELECT * From mototbl WHERE a1=’X' and C='Y';
こんなかんじ・・・