【2-1】キューブって何だろう?
昨日(前回)は、Excelからサンプルの「キューブ」に接続してみたA君ですが、新たな疑問が生じてきました。
「多次元データベースのキューブって、リレーショナルデータベースのテーブルと何が違うのだろう?」
「キューブって、どういう構造なのだろう?」
勉強熱心なA君は、さっそく「多次元データベース」「キューブ」や関連する言葉の意味を調べてみました。
・多次元データベース(Multi-dimensional
Database、MD)とは…
・複数の次元でデータを集約したデータベース
・OLAPの形態の1つであるMOLAP(Multi-dimensional OLAP)におけるデータの格納形態
・キューブとは…
・多次元データベースのデータ格納単位(リレーショナルデータベースのテーブルにあたる)
・リレーショナルデータベースのテーブルが2次元の構造であるのに対し、多次元データベースのキューブは多次元の構造を持つ
・メジャーとは…
・キューブにおいて集計対象となる数値(例えば、販売金額や販売数量など)
・集計方法は「合計」に限らない(「平均値」や「最大値」なども可能) ・ディメンションとは…
・キューブにおいて分析軸となるテーブル
・ディメンションテーブルは「次元テーブル」とも呼ばれる ・ファクトとは…
・キューブの中心となる、明細テーブルや履歴テーブル
・「メジャー(集計対象となる数値)」を持つ
・「ディメンション」テーブルとの関連を持ち、これが分析の切り口として使用される ・スタースキーマとは…
・分析系データベースに特有のスキーマ構造
・中央にファクトテーブルを置き、周囲に正規化されていないディメンションテーブルを配置した形態 ・スノーフレークスキーマとは…
・スタースキーマと同じく、分析系データベースに特有のスキーマ構造
・スタースキーマと比較してディメンションテーブルが正規化されており、スタースキーマのディメンションの先が枝分かれしている(雪の結晶をイメージさせる)形態 |
どうやら、キューブを作成する前に構成をきちんと決めておく必要がありそうです。分析対象となる数値(メジャー)を持ったファクトテーブルと、分析軸となるディメンションテーブルを事前に用意して、キューブのスキーマ構造をしっかり決めておくことにしましょう。
【2-2】分析対象の検討
「キューブ」の意味やその内部構造が理解できたので、次に、分析対象を決めることにしましょう。
今回のテーマはA君自身にとっても分りやすい「売上分析」として、分析対象は売上データの売上金額、売上数量、粗利金額にすることにします。分析の切り口としては顧客軸(顧客マスタ)と商品軸(商品マスタと商品分類マスタ)、それに、マスタデータとしては存在しませんが時間軸も分析の切り口として使うことにします。
業務システムのテーブル構造
売上データ(売上番号、顧客コード、商品コード、売上日、売上金額、売上数量、粗利金額、…)
顧客マスタ(顧客コード、顧客名、性別、生年月日、郵便番号、都道府県、住所、…)
商品マスタ(商品コード、商品名、商品分類コード、…)
商品分類マスタ(商品分類コード、商品分類名、…)
※下線は主キー項目、青色は「メジャー」項目、赤色は分析の切り口
|
【2-3】キューブの設計
それでは、「売上分析」用キューブの構成を整理してみましょう。
| ファクト |
売上データ |
| メジャー |
売上金額、売上数量、粗利金額 |
| ディメンション |
顧客軸(顧客マスタ) |
| 商品軸(商品マスタと商品分類マスタ) |
| 時間軸(マスタデータは無い) |
|
キューブのスキーマ構造としてはスタースキーマを採用することにします。
まず、ファクトテーブルに関しては、主キー、分析の切り口となる外部キーや日付、そしてメジャー(集計対象となる数値)のみで構成されたテーブルとして整理します。テーブル名は「売上ファクト」としておきましょう。
次にディメンションですが、顧客軸を表現する顧客マスタについては「顧客ディメンション」テーブルに名称を変更して、分析に必要なデータだけを残すことにします。主キーである「顧客コード」、ディメンションを表示する際に使用する「顧客名」の他に、「性別」、「生年月日」、「都道府県」でも分類できるようにこれらを残しておきます。
商品軸は2つのマスタテーブル(商品マスタと商品分類マスタ)で構成されますが、商品マスタと商品分類マスタを非正規化して1つにまとめた「商品ディメンション」テーブルを作成することにします。これについても分析に必要なデータだけ残します。
時間軸についてはSQL Server Analysis Serviceに付属している「Timeディメンション」を使うことにします。「Timeディメンション」を「売上ファクト」の売上日から自動作成することができるので、時間軸のデータをマスタデータとして用意する必要はありません。
「売上分析」キューブ用のテーブル構造
売上ファクト(売上番号、顧客コード、商品コード、売上日、売上金額、売上数量、粗利金額)
顧客ディメンション(顧客コード、顧客名、性別、生年月日、都道府県)
商品ディメンション(商品コード、商品名、商品分類コード、商品分類名) |
<図1:売上分析キューブの設計(スタースキーマ)>
【2-4】キューブの設定
キューブの構成も決まったので、A君は実際にキューブを作ってみることにしました。
キューブの作成手順
(1)データベースの作成
(2)データソースの設定
(3)キューブの作成(ファクトの設定、メジャーの設定、ディメンションの選択・作成) |
キューブの作成手順に従って、はじめに「(1)データベースの作成」を行います。
分析マネージャでサーバ名が表示されている部分を右クリックして「データベースの新規作成」を選択すると、データベースが作成できます。
データベース名を決める必要がありますが、「売上分析」とでもしておきましょう。
次に「(2)データソースの設定」を行います。
本来ならデータウェアハウスをきちんと整備して、データウェアハウス、もしくはそれを一部切り出したデータマートをデータソースとして設定するべきですが、今回はデータウェアハウスの整備は行わないことにしています。仮のデータマートとして、SQL
Server上に「売上分析ソース」データベースを作成することにします。
Enterprise Managerを使って「売上分析ソース」データベースと「売上ファクト」「顧客ディメンション」「商品ディメンション」の3つのテーブルを作成し、ダミーデータを少々作成しておきましょう。
「売上分析ソース」データベースの準備ができたら、分析マネージャの「データソース」を右クリックして「データソースの新規作成」を選択し、データソースの指定を開始します。
データリンクに関するプロパティの設定を行う必要があるので、先ほど作成したSQL Server上の「売上分析ソース」へのデータリンクが可能となるように設定します。
やっと、「(3)キューブの作成」です。これも分析マネージャの「キューブ」を右クリックして新規作成しましょう。 キューブの作成方法としてウィザードが選択できるので、ウィザードで作成することにします。
<画面1:キューブウィザード>
ファクトテーブルには「売上ファクト」を選択します。
<画面2:ファクトテーブルの選択>
メジャーには「売上金額」「売上数量」「粗利金額」を選択します。
<画面3:メジャーの選択>
次はディメンションの選択ですが、まだディメンションを作成していないので選択できません。「ディメンションの新規作成」をクリックして、ディメンションウィザードを開始します。
<画面4:ディメンションウィザード>
ディメンションの種類は「スタースキーマ」を選択します。先ほどの設計で、商品マスタテーブルと商品グループマスタテーブルを非正規化して、1つの「商品ディメンション」テーブルにしているので、「売り上分析」キューブのスキーマ構造は、全てのディメンションについて「スタースキーマ」なのです。
<画面5:ディメンションの作成方法の選択>
ディメンションテーブルに、まずは「顧客ディメンション」を選択します。
ディメンションの種類は「通常」です。
ディメンションのレベルは上から「性別」「都道府県」「顧客コード」とします。この設定を行うことで顧客ディメンションが「性別>都道府県>顧客コード」の順でレベル分けされ、OLAP分析の際にレベルを選んで使うことができます。
<画面6:ディメンションテーブルの選択>
<画面7:ディメンションの種類の選択>
<画面8:ディメンションのレベルの選択>
「メンバキー列の指定」「詳細設定オプションの選択」については、今回はそのままにします。 最後に、ディメンション名を指定します。これは「顧客」にしましょう。
<画面9:ディメンションウィザードの完了>
同様に商品ディメンションも作成します。ディメンションのレベルは上から「商品分類コード」「商品コード」とします。
さらに、時間軸として使用するTimeディメンションを「売上ファクト」の売上日から生成します。ディメンションウィザードの「ディメンションテーブルの選択」で「売上ファクト」を指定して、「ディメンションの種類の選択」でTimeディメンションを選択します。日付列は「売上日」を指定します。
次に、「Timeディメンションレベルの設定」を行いますが、Timeレベルと年度の始まりはデフォルトのままとして、「年、四半期、月、日」「1月1日」に設定します。
<画面10:Timeディメンションレベルの設定>
Timeディメンションのディメンション名は「売上日」としておきましょう。
これで、ディメンションを全て作成しました。「次へ」を押すとファクトテーブルの行をカウントするかどうかを選択するメッセージが表示されます。ここは「はい」を選んで、カウントしておきます。
これでキューブの完成です。キューブ名は「売上分析」とします。
<画面11:キューブのディメンションの選択>
<画面12:キューブウィザードの完了>
キューブウィザードを完了すると、「キューブエディタ」が表示され、意図したスタースキーマができていることが確認できます。(Timeディメンションは表示されません。)
<画面13:キューブエディタ (スキーマ)>
「キューブエディタ」を閉じる際には、「ストレージのデザイン」に関するメッセージが表示されます。
<画面14:ストレージのデザインに関するメッセージ>
これはストレージオプションをデザイン(定義)することを促すメッセージで、未デザイン(未定義)のキューブを操作した際に自動的に表示されるものです。
「ストレージのデザイン」については後で考えることにして、ここでは「いいえ」を選択し、ストレージのデザインを行わずにキューブエディタを閉じます。
分析マネージャに戻ると、「売上分析キューブ」と「顧客」「商品」「売上日」の各ディメンションができています。
<画面15:分析マネージャ 売上分析キューブの完成>
「売上分析」キューブを右クリックして「編集」を選択すると、再びキューブエディタを見ることができます。下のタブを「データ」に切り替えると、サンプルデータでOLAP分析の様子を確認することができます。
現時点では「キューブの処理」を行っていないため、「売上分析ソース」のデータを参照することはできません。分析マネージャが生成したサンプルデータが表示されます。
<画面16:キューブエディタ (データ)>
【2-5】キューブの処理
「売上分析ソース」のデータを参照するためには、「売上分析」キューブを右クリックして「キューブを処理」を選択します。「ストレージのデザイン」を行っていない状態で「キューブの処理」を行おうとすると集計のデザインが無いことを知らせるメッセージが表示されますが、「いいえ」を選択してデザインなしでキューブを処理してしまいましょう。
<画面17:集計のデザインが無いことを知らせるメッセージ>
キューブの処理方法は幾つかありますが、初回は「完全な処理」しか選択できません。
<画面18:キューブの処理 (処理方法の選択)>
そのまま「OK」を押せば、「キューブの処理」の完了です。
<画面19:キューブの処理 (完了)>
以上の手順で、キューブやディメンションを作成することができます。「キューブの処理」を行っておけば、Excelからの接続も前回のサンプルキューブと同じ手順で行うことができます。
ここで、今日の仕事は終わりにしましょう。
明日(次回)は、今日作成したキューブの「ストレージデザイン」を定義し、DTSを使って自社のデータを格納する仕組みを作ります。
|