Oracle Warehouse Builder(OWB)を使用することにより、リレーショナルまたはディメンションのデータ・ウェアハウスを設計できます。
Warehouse Builderでは、物理的な実装からディメンションの設計が明示的に区別されます。簡単なクリック操作で、ディメンション・オブジェクトに対してリレーショナル実装または多次元実装のいずれかを選択できます。したがって、リレーショナル・ターゲット・ウェアハウスまたは多次元ウェアハウスとして同じディメンション・オブジェクトを実装できます。
この章では、リレーショナル・ターゲット・ウェアハウスとして実装されるディメンション・モデルを設計する方法を示します。1つのキューブと2つのディメンションで構成される小規模のデータ・ウェアハウスをモデル化します。複合のスノーフレーク・スキーマをモデル化するためにWarehouse Builderを使用できますが、このデモンストレーションの目的のために、2つのディメンションへの外部キー参照がある単一のキューブで構成される簡単なスター・スキーマをモデル化します。
この章の内容は次のとおりです。
この項では、リレーショナル・ターゲット・スキーマを定義する手順を示します。
リレーショナル・ターゲット・ウェアハウスを定義する手順
「ウェアハウス・ターゲット・スキーマの指定」の説明に従って、スキーマをウェアハウス・ターゲット・スキーマとして指定します。
ウェアハウス・ターゲット・モジュールにソース・オブジェクトおよびターゲット・オブジェクトを定義またはインポートします。
一般的に、ウェアハウス・ターゲット・モジュール内のいずれかのノードを右クリックし、「新規」または「インポート」のどちらかを選択します。Warehouse Builderにより、説明のための適切なウィザードが起動されます。追加情報は、「ヘルプ」をクリックします。
ウェアハウス・ターゲット・モジュールに追加するオブジェクトのタイプは、ソース・データのタイプおよびデータ・ウェアハウスの目的によって異なります。
このガイドで示される演習を続行するには、「演習: ターゲット・モジュールへの外部表の追加」および「演習: ディメンションの理解」を参照してください。
ソース・オブジェクトおよびターゲット・オブジェクトを構成します。
いくつかのオブジェクトでは追加構成が必要です。ウェアハウス・モジュールに単一のオブジェクトをインポートまたは定義した後、右クリックして「構成」を選択し、設定を確認して必要に応じて変更します。
従来のデータ・ウェアハウスの実装内のターゲット・スキーマは通常1つのみで、これがデータ・ウェアハウスのターゲットになります。
データ・ウェアハウスのターゲット・スキーマとしてスキーマを指定する手順
Warehouse Builderにスキーマを登録します。
「グローバル・ナビゲータ」パネルで、「セキュリティ」ノードを開きます。「ユーザー」ノードを右クリックし、「新規ユーザー」を選択します。
「ユーザーの作成」ウィザードの「登録するDBユーザーの選択」ページで、「DBユーザーの作成」を選択し、プロンプトに従います。さらに情報が必要な場合は、「ヘルプ」をクリックするか、または[F1]キーを押します。
このデモンストレーションでは、新規スキーマを作成し、これをEXPENSE_WH
と呼びます。
新規スキーマの位置情報を指定します。
「ロケーション・ナビゲータ」内で右クリックし、「Oracle」ノードの下の「ロケーション」から「新規Oracleのロケーション」を選択します。
「EXPENSE_WH_LOCATION」
という場所を作成します。接続をテストするためのオプションを選択します。
プロジェクト・ナビゲータで、単一のモジュールとスキーマの場所を関連付けます。
「例: フラット・ファイルからのメタデータのインポート」で、メタデータのインポート元の場所に対応するモジュールを作成しました。同様の方法で、ターゲット・スキーマの場所に対応するモジュールを作成する必要があります。
OWB_DEMO
プロジェクトでは、「データベース」ノードを開き、「Oracle」ノードを右クリックして「新規Oracleモジュール」を選択します。モジュールを作成するウィザードのプロンプトに従います。モジュールのステータスをWarehouse Target
として指定することを確認します。
このデモンストレーションでは、モジュールにEXPENSE_WH
という名前を付けます。
新規のデータ・ウェアハウスのターゲット・スキーマを習熟します。
プロジェクト・ナビゲータで、新しく定義されたウェアハウス・ターゲット・モジュールのノードを開きます。様々なタイプのオブジェクトがノードの下にリストされます。これらのタイプのオブジェクトは、モジュール内に定義またはインポートできます。
ターゲット・モジュールに追加するオブジェクトのタイプは、後で設計するETLロジックに影響を与える場合があります。データ・ソースがフラット・ファイルに由来する場合は、SQL*LoaderコードまたはSQLコードのどちらを生成するか選択できます。コードの各タイプには、固有の利点があります。
Warehouse BuilderでSQL*Loaderを使用するには、「例: フラット・ファイルからのメタデータのインポート」の説明に従ってフラット・ファイルをインポートします。ただし、SQLを使用するには、「演習: ターゲット・モジュールへの外部表の追加」の説明に従ってウェアハウス・モジュールに外部表を定義する必要があります。
外部表は、フラット・ファイルのデータをリレーショナル形式で表現した表です。この表は、読取り専用の表で、Warehouse Builder内で通常のソース表のように動作します。作成する外部表は、既存のフラット・ファイル内のシングル・レコード・タイプに対応します。
この演習の目的は、前にインポートした2つのフラット・ファイルに必要な外部表を作成することです。2つのファイルの両方にシングル・レコード・タイプがあるので、各ファイルに対して外部表を1つのみ作成する必要があります。
ターゲット・ウェアハウス・モジュールに外部表を追加する手順
プロジェクト・ナビゲータで、「データベース」ノード、続いて「Oracle」ノードを開きます。
外部表を作成するターゲット・モジュールを開きます。
EXPENSE_WH
モジュールを開きます。
「外部表」ノードを右クリックして「新規外部表」を選択します。
Warehouse Builderで、外部表を作成するウィザードが表示されます。プロンプトに従います。
外部表にEXPENSE_CATEGORIES
という名前を付けます。フラット・ファイルを選択するように求められた場合は、EXPENSE_CATEGORIES_CSV
を選択します。
前のステップを繰り返し、EXPORT_CSV
を表すEXPENSE_DATA
と呼ばれる外部表を作成します。
2つの外部表に対して物理ファイル・システムの詳細を構成します。
モジュールから1つの外部表を右クリックし、「構成」を選択します。「データファイル」ノードを右クリックし、「作成」を選択します。デフォルト名NEW_DATAFILE_1
をそのまま使用します。外部表がデータを継承するフラット・ファイルの名前を入力します。したがってデータファイル名は、1つの外部表に対してはexpense_categories.csv
とし、もう1つの外部表に対してはexport.csv
とします。
ディメンションは、データを編成する構造です。一般的に使用されるディメンションの例には、顧客、時間および製品があります。
リレーショナル・ディメンションの場合は、ディメンションの使用によって、問合せパフォーマンスが向上します。これは、ユーザーが既知の階層をドリルダウンしてデータを分析することがよくあるためです。階層の例には、年、四半期、月、日という時間階層があります。Oracle Databaseでは、詳細表ではなくマテリアライズド・ビューからデータを取り出す問合せをリライトして、これらの定義済階層を使用します。
一般的なリレーショナル・ディメンション表には、次の特徴があります。
ウェアハウス・キーと呼ばれる、値が移入された単一列の主キーがあります。
ウェアハウス・キーは、ディメンションを管理し、ディメンション履歴を保持する技術をサポートし、キューブのサイズを削減します。
ディメンション・オブジェクトとして明示的に定義された1つ以上の階層があります。階層によって、Oracleサーバーで実行されるクエリー・リライトの数が最大化されます。
ディメンションは、スター・スキーマのデータのプライマリ組織単位です。一般的に使用されるディメンションの例は、カスタマ、「製品」および「時間」です。
ディメンションは、一連のレベルと、これらのレベルに定義されている一連の階層で構成されます。ディメンションを作成する際は、次の内容を定義する必要があります。
ディメンション属性: ディメンション・メンバーの記述特性。名前とデータ型があります。
レベル: データの集計のレベルを定義します。たとえば、PRODUCTSディメンションには、合計、グループおよび製品のレベルを設定できます。
レベル属性: レベル・メンバーの特徴を説明する特性です。ディメンションの各レベルには一連のレベル属性があります。
階層: データの編成方法として、順序付けされたレベルまたは一連のデータ値(値ベース階層の場合)を使用する論理構造です。階層構造は一連のレベルの親子関係を説明します。
ディメンションの基本概念および設計を理解するために、事前定義済のディメンションの内容を確認します。
ディメンションの理解を深めるための手順
ディメンション・エディタでPRODUCTS
ディメンションを開きます。
プロジェクト・ナビゲータで、「OWB_DEMO」
、「データベース」、「Oracle」、「SALES_WH」
にナビゲートして、「ディメンション」を開きます。「PRODUCTS」
をダブルクリックします。
Warehouse Builderによってディメンション・エディタが起動されます。ディメンション・エディタは、様々なデータベース・オブジェクトやディメンション・オブジェクトを設計、作成および管理することができる単一インタフェースです。
ディメンション属性を監視します。
ディメンション属性は、ディメンション・メンバーの記述特性です。名前とデータ型があります。ディメンション属性には、名前とデータ型があり、ディメンション内の1つ以上のレベルに適用できます。これらは、データを格納するためのレベル属性として実装されます。
ディメンション属性のリストには、ディメンション内のあらゆるレベルに必要なすべての属性が含まれる必要があります。
たとえば、PRODUCTSディメンションには、説明というディメンション属性があります。この属性は、すべてのレベル(合計、グループおよび製品)に適用でき、その中には、これらのレベルの各メンバーに対する説明が格納されます。
レベルを監視します。
ディメンションのレベルは、データの集計レベルを表します。値ベース階層が含まれているディメンション以外のディメンションには、少なくとも1つのレベルが含まれている必要があります。各レベルには、レベル属性およびレベル識別子が必要です。
たとえば、PRODUCTSディメンションには、合計、グループおよび製品のレベルを設定できます。
各レベルには、サロゲート識別子とビジネス識別子の2つの識別子が必要です。ディメンションを作成するときは、そのディメンションのサロゲート識別子およびビジネス識別子(複合ビジネス識別子の場合は属性)としてマーク付けされたディメンション属性が、各レベルで実装される必要があります。
サロゲート識別子は、ディメンションのすべてのレベルにまたがって、各レベルのレコードを一意に識別します。この識別子は、単一の属性で構成する必要があります。サロゲート識別子を使用すると、ファクトを最下位ディメンション・レベルのみでなく、どのディメンション・レベルにもフックできます。
リレーショナル実装を使用しているディメンションの場合、サロゲート識別子のデータ型はNUMBER
であることが必要です。サロゲート識別子の値は、すべてのディメンション・レベルにまたがって一意である必要があるため、すべてのディメンション・レベルのサロゲート識別子を同じ順序を使用して生成します。
リレーショナル実装の場合、サロゲート識別子は次の目的を果します。
子レベルが親レベルとは別の表に格納されている場合、各子レベルのレコードには、親レコードのサロゲート識別子が格納されます。
ファクト表の各キューブ・レコードには、参照先のディメンション・レコードのサロゲート識別子のみが格納されます。サロゲート識別子を格納することによって、キューブを実装するファクト表のサイズが削減されます。
ビジネス識別子はユーザーが選択する属性リストで構成されます。ビジネス識別子は、特定のレベルで一意であることが必要であり、常にデータ・ソースの自然キーから導出されます。ビジネス識別子はメンバーを一意に識別します。たとえば、製品レベルのビジネス識別子として統一商品コード(UPC)を使用できます。UPCは、各商品に対応する一意のコードです。
ビジネス識別子は、次のように機能します。
ビジネス期間のレコードを識別します。
ファクトとディメンション間または2つのレベル間の論理的なリンクを提供します。
サロゲート・キーを参照可能にします。
ディメンションに子レベルを移入する場合は、その親レベルのビジネス識別子を指定する必要があります。キューブを移入する場合は、そのキューブが参照するディメンション・レベルのビジネス識別子を指定する必要があります。
親識別子は、値ベース階層の親参照に注釈を付けるために使用されます。
たとえば、値ベース階層のEMPLOYEE
ディメンションに、ID
、FIRST_NAME
、LAST_NAME
、EMAIL
、PHONE
、JOB_ID
、HIRE_DATE
およびMANAGER_ID
のディメンション属性があるとします。このディメンションでは、ID
がサロゲート識別子で、MANAGER_ID
が親識別子です。
レベル属性とはレベル・メンバーを説明する特性です。ディメンションの各レベルには一連のレベル属性があります。レベル属性を定義するには、そのレベルで実装するディメンション属性を選択します。レベル属性には個別名とデータ型があります。データ型は、そのレベル属性に実装されているディメンション属性から継承されます。レベル属性の名前は、実装されているディメンション属性の名前とは異なる名前に変更できます。
すべてのレベルは、一連のディメンション属性のサロゲート識別子およびビジネス識別子としてマークされた属性を実装する必要があります。
ディメンション階層は、データの編成方法として、順序付けされたレベルまたは一連のデータ値(値ベース階層の場合)を使用する論理構造です。階層構造は一連のレベルの親子関係を説明します。レベル・ベース階層には少なくとも1つのレベルが必要です。複数の階層の一部を1つのレベルにできます。
たとえば、TIMEディメンションには次の2つの階層が指定されます。
会計階層: 会計年度 > 会計年度四半期 > 会計年度月 > 会計年度週 > 日
カレンダ階層: カレンダ年 > カレンダ四半期 > カレンダ月 > 日
すべての階層は、完全な1対nの関係になります。親レベルの1つのレコードは子レベルの複数のレコードに対応しますが、子レベルの1つのレコードは階層内で1つの親レコードにのみ対応します。
ディメンション・ロールとはディメンションの別名です。データ・ウェアハウスでは、キューブが同じディメンションを複数回参照する場合、参照する都度そのディメンションを格納する必要はありません。同じディメンションに対する複数回の参照は混乱の原因となります。混乱を避けるために、ディメンションへの参照ごとに別名を作成すると、結合を瞬時に理解できるようになります。このような場合は、同じディメンションがキューブ内の異なるディメンション・ロールを実行します。
たとえば、売上レコードには次の3つの時間値があります。
受注記帳時間
受注出荷時間
受注履行時間
3つのTIMEディメンションを作成し、それらのディメンションにデータを移入するかわりに、ディメンション・ロールを使用できます。1つのTIMEディメンションのモデルを作成し、そのディメンションに3つのロール(受注記帳時間、受注出荷時間、受注履行時間)を作成します。SALESキューブでは、受注時間、出荷時間および受注履行時間のディメンションを参照できます。
ディメンションがデータベースに格納される場合は、1つのディメンションのみが作成され、このディメンションを各ディメンション・ロールが参照します。ディメンションがOLAPカタログに格納される場合は、Warehouse Builderによって、各ディメンション・ロールに1つのディメンションが作成されます。したがって、TIMEディメンションに3つのロールがある場合、OLAPカタログには3つのディメンションが作成されます。ただし、3つのディメンションはすべて同一の基礎となる表にマッピングされます。これは、OLAPカタログがディメンション・ロールをサポートしていないための対策です。
注意: ディメンション・ロールは、リレーショナル実装を持つディメンションに対してのみ作成できます。 |
レベルの関係とは、ディメンション階層内のレベル間のアソシエーションです。レベルの関係は、階層内の親レベルへの参照を格納するレベル属性を使用して実装されます。
たとえば、PRODUCTSディメンションに「合計 > グループ > 製品」という階層があるとします。Warehouse Builderでは、2つのレベルの関係(製品からグループ、グループから合計)が作成されます。2つの新しい属性には、このレベルの関係(製品レベルでの関係とグループ・レベルでの関係)が実装されます。これらの属性には、親レベルのサロゲートIDが格納されます。
ディメンションの一例として、製品データの編成に使用するPRODUCTSディメンションを紹介します。表4-1に、PRODUCTSディメンションの各レベルと、ディメンション内の各レベルのサロゲート識別子とビジネス識別子をリストします。
表4-1 PRODUCTSディメンションのレベルの詳細
レベル | 属性名 | 識別子 |
---|---|---|
合計 |
ID |
サロゲート |
名前 |
ビジネス |
|
説明 |
||
グループ |
ID |
サロゲート |
名前 |
ビジネス |
|
説明 |
||
製品 |
ID |
サロゲート |
UPC |
ビジネス |
|
名前 |
||
説明 |
||
パッケージ・タイプ |
||
パッケージ・サイズ |
PRODUCTSディメンションの階層は、次のとおりです。
階層1: 合計 > グループ > 製品
Warehouse Builderにより、ファクト・データを各レベルのディメンションにリンクできる制御行が作成されます。たとえば、TIMEディメンションを2つの異なるキューブで再利用して、予算データを月レベルで記録し、実際のデータを日レベルで記録する場合などです。ディメンションは制御行と一緒にロードされるため、追加定義をすることなくこのアクションを実行できます。ディメンション階層の各メンバーは、単一のレコードを使用して表示されます。
すべての制御行には-2から始まる負のディメンション・キー値があります。上位レベルのレベル値では行が生成され、ファクト表に対して一意でリンクする行として動作できます。このリンクの下位レベルまたは制御行は無効化されます。
「ディメンションの例」で説明されているPRODUCTSディメンションを検討します。4つの製品カテゴリを含む表からデータをこのディメンションにロードします。Warehouse Builderは表4-2に示されるディメンションに制御行を挿入します。これらの行によりどのディメンション・レベルでもキューブにリンクできます。表にはすべてのディメンション属性値が含まれるわけではありません。
表4-2 PRODUCTSディメンションに作成された制御行
ディメンション・キー | 合計名 | グループ名 | 製品名 |
---|---|---|---|
-3 |
TOTAL |
||
-9 |
TOTAL |
ハードウェア |
|
-10 |
TOTAL |
ソフトウェア |
|
-11 |
TOTAL |
エレクトロニクス |
|
-12 |
TOTAL |
周辺機器 |
ディメンションの実際の行数を取得するには、NULL
行を除外するWHERE
句を含めることで行数を数えます。たとえば、PRODUCTSでの数を取得するには、PRODUCTS内のNULL
行を除外するWHERE
句を含めて行数を数えます。
ディメンションの実装とは、ディメンションおよびそのデータを物理的に格納する方法を指定することです。Warehouse Builderによって、ディメンション・オブジェクトに対して複数のタイプの実装(多次元実装を含む)を行うことができます。ただし、このガイドでは、リレーショナル実装についてのみ説明します。
スター・スキーマ実装では、Warehouse Builderによって単一の表にディメンション・データが格納されます。同じ表またはビューに複数のディメンション・レベルのデータが格納されるため、表にディメンション・キーの列を指定する必要があります。ディメンション・キーの列は、ディメンションの主キーです。この列はキューブの外部キー参照も形成します。
各レベルには、ディメンション属性のサブセットが実装されます。デフォルトでは、レベル属性の名前はディメンション属性の名前と同じです。すべてのレベルのデータが同じ表に格納されることで生じる名前の衝突を回避するため、Warehouse Builderでは、スター表の名前の指定に、次のガイドラインが使用されます。
レベル属性の名前が一意でない場合は、Warehouse Builderによってレベル名に接頭辞が付けられます。
レベル属性の名前が一意の場合は、接頭辞は使用されません。
注意: 接頭辞が使用されないようにするには、「ディメンションの作成」ウィザードまたはデータ・オブジェクト・エディタで、レベル属性の名前を明示的に変更する必要があります。 |
たとえば、スター・スキーマを使用してPRODUCTSディメンションを実装する場合、Warehouse Builderは単一の表を使用し、ディメンションにすべてのレベルを実装します。
バインドを実行する場合は、各属性のデータおよびディメンション内のレベルの関係を格納するデータベース列を指定します。ディメンションに対して自動バインドまたは手動バインドを実行できます。
自動バインド: 自動バインドを実行すると、Warehouse Builderによって、ディメンション・オブジェクトの属性がそのデータを格納するデータベース列にバインドされます。自動バインドを初めて実行するときは、ディメンション・データの格納に使用される表も作成されます。
すでにバインド済のディメンションに対して自動バインドを実行すると、Warehouse Builderでは次のルールが使用されます。
ディメンションの実装方法が同じ場合は、Warehouse Builderによって既存の実装オブジェクトにディメンション・オブジェクトが再バインドされます。
たとえば、スター・スキーマ実装方法を使用してPRODUCTSディメンションを作成し、自動バインドを実行したとします。ディメンション・データはPRODUCTS
と呼ばれる表に格納されます。後日、ディメンション定義を変更しましたが、実装方法はスター・スキーマのままです。この状況でPRODUCTSディメンションを自動バインドすると、Warehouse Builderによって同じ実装表にPRODUCTSディメンションの属性が再バインドされます。
ディメンションの実装方法を変更すると、Warehouse Builderによって、古い実装オブジェクトが削除され、一連の新しい実装表が作成されます。古い実装オブジェクトを保持する場合は、自動バインドを実行する前に、ディメンション・オブジェクトをアンバインドする必要があります。実装方法の詳細は、「スター・スキーマ」を参照してください。
たとえば、スター・スキーマ実装方法を使用してPRODUCTSディメンションを作成し、それを実装表にバインドしたとします。その後、このディメンションを編集し、実装方法をスノーフレーク・スキーマに変更しました。変更したPRODUCTSディメンションの自動バインドを実行すると、Warehouse Builderによって、ディメンション・データが格納されていた表は削除され、新しい実装表が作成されて、ディメンション属性および関係が新しい実装表にバインドされます。
自動バインドを実行する手順
プロジェクト・ナビゲータで、ディメンションを選択します。
「ファイル」メニューから「バインド」を選択します。
「バインド」オプションが有効になっていない場合は、ディメンションがリレーショナル・ディメンションであるかどうか、また「手動」オプションが「記憶域」タブの「実装」セクションで設定されていないかどうかをチェックします。
「スター・スキーマ」に説明されているように、自動バインドによって実装設定が使用されます。
手動バインド: 通常は、手動バインドを使用して既存の表をディメンションにバインドします。自動バインドまたは再バインドが不要な場合は、手動バインドを使用します。
ディメンションの手動バインドを実行する手順
ディメンション・データの格納に使用する実装オブジェクト(表またはビュー)を作成します。
リレーショナル・ディメンションの場合は、ディメンションのサロゲート識別子のロードに使用する順序を作成します。既存の順序を使用することもできます。
プロジェクト・ナビゲータで、ディメンションを右クリックして「開く」を選択します。
ディメンション・エディタが開きます。
「物理的バインド」タブに移動します。
コンポーネント・パレットから、実装オブジェクトを表す演算子をキャンバスにドラッグ・アンド・ドロップします。
「新規または既存のオブジェクトを追加」ダイアログ・ボックスが表示されます。たとえば、ディメンション・データが表に格納されている場合は、コンポーネント・パレットからキャンバスに「表演算子」をドラッグ・アンド・ドロップします。「新規または既存の表を追加」ダイアログ・ボックスが表示されます。
「既存のオブジェクトを選択」オプションを選択し、選択ツリーに表示されるオブジェクトのリストからデータ・オブジェクトを選択します。
「OK」をクリックします。
追加したオブジェクトを表すノードがキャンバスに表示されます。
ディメンション・データの格納に複数のデータ・オブジェクトが使用される場合は、各データ・オブジェクトについてステップ4から6を実行します。
ディメンションの各レベルの属性を、そのデータを格納する列にマッピングします。ディメンション属性の上でマウスを押したまま、属性値を格納する列にドラッグ・アンド・ドロップします。
レベルの関係も、そのデータを格納するデータベース列にマッピングします。
たとえば、「ディメンションの例」に記載されているPRODUCTSディメンションの場合、PRODUCTS
ディメンションのグループ
・レベルの名前
属性は、Products_tab
表のGroup_name
属性に格納されます。名前
属性の上でマウスを押したまま、Products_tab
表のGroup_name
属性にドラッグ・アンド・ドロップします。
キューブには、メジャーおよび1つ以上のディメンションへのリンクが含まれます。キューブの軸にはディメンション・メンバーが組み込まれ、キューブの本体にはメジャーの値が格納されます。ほとんどのメジャーは加法的なメジャーです。たとえば、売上データは、キューブ・エッジに時間、製品および顧客のディメンション値が指定され、キューブ本体にバリュー売上とドル売上のメジャーから値が格納されるキューブに編成できます。
キューブは、外部キー制約によってディメンション表にリンクされます。これらの制約は、データ整合性が最も重要とされるデータ・ウェアハウス環境には不可欠です。この制約によって、データ・ウェアハウスを使用する日常業務での参照整合性が順守されます。
データ分析アプリケーションでは、通常、多くのディメンションにわたってデータが集計されます。これによって、データの変則的または特異なパターンを確認できます。キューブの使用は、この種の操作を実行する最も効率的な方法です。リレーショナル実装で、ウェアハウス・キーが設定されているディメンションを設計する場合、キューブの行の長さは一般的に短くなります。これは、ウェアハウス・キーの長さが対応する本来のデータより短いためです。その結果、キューブ・データに必要な記憶領域は少なくなります。
一般的なキューブには、次の要素が含まれます。
一連の外部キー参照列、またはデータ・リストの場合は人工キーまたは一連のウェアハウス・キー列に定義された主キー。キューブがデータ・リストの場合、外部キー参照列ではキューブの各行は一意に識別されません。
表を対応するディメンションにリンクする一連の外部キー参照列。
キューブは、一連のディメンションにわたって定義されたメジャーの集合で構成されます。キューブを作成するには、次の要素を定義する必要があります。
メジャーとは、調査および分析可能なデータで、通常は加法的な数値になります。メジャーの例としては、売上、原価および収益があります。キューブには、1つ以上のディメンションが必要です。メジャーの集計も可能です。ただし、集計できるのは数値メジャーのみです。
キューブは一連のディメンションで定義されます。キューブはディメンション内で最下位レベル以外のレベルを参照できます。
純粋なリレーショナル実装を使用するキューブでは、ディメンション・ロールによって、複数回同じディメンションを再使用できます。ディメンション・ロールの詳細は、「ディメンション・ロール」を参照してください。
キューブを有効にする前に、キューブが参照するディメンションすべてが有効になっていることを確認してください。
ディメンション参照を定義する場合に指定する要素
キューブが参照するディメンションとディメンション内のレベル。
リレーショナル実装を使用するキューブでは、ディメンションの中間レベルを参照できます。Warehouse Builderでは、レベルの非サロゲート識別子(ビジネス・キーなど)への参照をサポートしています。
リレーショナル実装を使用するディメンションの場合は、キューブ内でディメンション参照が実行するロールを示す、各ディメンションのディメンション・ロール。ディメンション・ロールの指定はオプションです。
Salesキューブには、集計された売上データが格納されます。このキューブにはValue_sales
および Dollar_sales
という2つのメジャーが含まれています。
Value_sales
: 売上額を売上数量に換算して格納します。
Dollar_sales
: 売上額を格納します。
表4-3に、Salesキューブのディメンションを示します。この表には、キューブが参照するディメンションの名前とディメンションのレベルがリストされています。
キューブを実装する際は、キューブの物理的な記憶域の詳細を指定します。ディメンションの場合と同様に、Warehouse Builderによって、リレーショナル形式または多次元形式でキューブを実装できます。このガイドでは、リレーショナル実装について説明します。
キューブ・データの格納に使用するデータベース・オブジェクトは、ファクト表と呼ばれます。キューブは1つのファクト表のみを使用して実装する必要があります。ファクト表にはキューブのメジャーおよびディメンション参照の列が含まれます。
キューブを実装する手順
キューブ・データを格納する表またはマテリアライズド・ビューを選択します。
各メジャーについて、メジャー・データを格納する列を選択します。
各ディメンション参照について、ディメンション参照を格納する列を選択します。
各ディメンション参照は、ファクト表の列およびファクト表からディメンション表への外部キー(オプション)に対応します。ファクト表からディメンション表への1対nの関係が順守される必要があります。
バインドを実行する場合は、キューブのメジャーとディメンション参照の各データを格納するデータベース列を指定します。キューブに対して自動バインドまたは手動バインドを実行できます。
自動バインド: 自動バインドを実行すると、Warehouse Builderによって、キューブ・データを格納する表が作成され、キューブのメジャーおよび参照がデータベースの列にバインドされます。自動バインドを実行する手順の詳細は、「自動バインド」を参照してください。
キューブの自動バインドを実行する場合は、キューブが参照するディメンションを自動バインドした後に、キューブを自動バインドします。キューブが最後に自動バインドされた後に、そのキューブによって参照されるディメンションが自動バインドされた場合は、キューブを配布できません。
たとえば、TIMES
ディメンションとPRODUCTS
ディメンションを参照するSALES
キューブを作成し、そのキューブの自動バインドを実行したとします。その後、PRODUCTS
ディメンションの定義を変更しました。ここで、再度SALESキューブを自動バインドしようとすると、Warehouse Builderによってエラーが生成されます。最初にPRODUCTSディメンションを自動バインドした後に、キューブを自動バインドする必要があります。
手動バインド: 手動バインドでは、最初にキューブ・データを格納する表またはビューを作成し、次にそのデータを格納するデータベースの列にキューブの参照およびメジャーをマッピングする必要があります。あるいは、既存のデータベース表またはビューを使用して、キューブ・データを格納することもできます。
キューブの手動バインドを実行する手順
キューブ・データを格納する表またはビューを作成します。
プロジェクト・ナビゲータで、キューブを右クリックして「開く」を選択します。
キューブ・エディタが開きます。
「物理的バインド」タブに移動します。
コンポーネント・パレットから、実装オブジェクトを表す演算子をキャンバスにドラッグ・アンド・ドロップします。
「新規または既存のオブジェクトを追加」ダイアログ・ボックスが表示されます。たとえば、キューブ・データが表に格納されている場合は、コンポーネント・パレットからキャンバスに「表演算子」をドラッグ・アンド・ドロップします。「新規または既存の表を追加」ダイアログ・ボックスが表示されます。
「既存のオブジェクトを選択」を選択し、選択ツリーに表示されるオブジェクトのリストからデータ・オブジェクトを選択します。
「OK」をクリックします。
追加したオブジェクトを表すノードがキャンバスに表示されます。
キューブのメジャーとディメンション参照をキューブ・データが格納される列にマッピングします。メジャーまたはディメンション参照をマウス・ボタンで押したまま、そのメジャーまたはディメンション参照を格納するデータ・オブジェクト属性にドラッグ・アンド・ドロップします。