OLAP アプリケーションおよび多次元データベースを作成すると、DB2 OLAP Server は新規のアプリケーションおよびデータベースをカタログし、スター・スキーマとして知られる 1 組のリレーショナル表を作成します。 さらに、DB2 OLAP Server は数多くの視点を作成および管理して、SQL アプリケーションの多次元データへのアクセスを単純化します。 このような視点を利用すれば、独自のアプリケーションや標準的な照会ツールで多次元データにアクセスすることができます。 アプリケーションの中には、DB2 OLAP Server によって作成されたスター・スキーマで保管されているデータを十分に活用できるように設計されているものもあります。
次のリストは、DB2 OLAP Server によって管理される視点の完全セットです。
DB2 OLAP Server は、その基本表と視点をすべて username スキーマに保管します。 ここで、username は、DB2 OLAP Server に割り当てられるユーザー ID です。 この章の SQL の例では、スキーマ名として OLAPSERV を使用しています。
視点名はすべて英大文字です。 視点名は、引用符で囲まないでください。 DB2 OLAP Server は視点名を構成し、カタログ視点に保管します。 ユーザーの SQL アプリケーションで、カタログ視点から視点名を照会することができます。 図 9 では、DB2 OLAP Server の主な視点がまとめられています。
![]() |
DB2 OLAP Server が username スキーマで使用するキューブ・カタログ視点は 1 つです。 この視点には、各キューブごとに 1 つの行があります。 この視点を使用して、すべての OLAP アプリケーションとスキーマに保管されたキューブの詳細を知ることができます。 キューブ・カタログ視点は、DB2 OLAP Server で管理されるすべての OLAP アプリケーションおよびデータベースをカタログします。
キューブ・カタログ視点名は CUBECATALOGVIEW です。 他のすべての視点と同様、これは DB2 OLAP Server に割り当てられたスキーマが所有します。
表 14 は、キューブ・カタログ視点の列を示します。
OLAP アプリケーションのリストを入手するには、次の SQL ステートメントを使用します。
SELECT DISTINCT APPNAME FROM OLAPSERV.CUBECATALOGVIEW
アプリケーション Sample の多次元データベースのリストを入手するには、次の SQL ステートメントを使用します。
SELECT CUBENAME FROM OLAPSERV.CUBECATALOGVIEW WHERE APPNAME='Sample'
アプリケーション Sample の多次元データベース Basic の視点名のリストを入手するには、次の SQL ステートメントを使用します。
SELECT CUBEVIEWNAME,FACTVIEWNAME,STARVIEWNAME,ALIASIDVIEWNAME,LROVIEWNAME FROM OLAPSERV.CUBECATALOGVIEW WHERE APPNAME='Sample' AND CUBENAME='Basic'
キューブ視点および次元視点には、リレーショナル・キューブにある次元およびメンバーに関する情報が入っています。 各リレーショナル・キューブごとに 1 つのキューブ視点と、リレーショナル・キューブ内の各次元ごとに 1 つの次元視点があります。 これらの視点を使用して、OLAP アウトラインの次元およびメンバーに割り当てられる属性の多くを照会することができます。
DB2 OLAP Server が管理する各リレーショナル・キューブごとに 1 つのキューブ視点があります。 キューブ視点には、リレーショナル・キューブの各次元ごとに 1 行ずつあります。 この視点を使用して、キューブの次元に関する情報を入手します。
視点名は CubeViewName 列のキューブ・カタログ視点から得られます。
表 15 はキューブ視点の列を示します。
キューブ視点内のデータにアクセスするには、まず、アプリケーションがキューブ・カタログ視点からキューブ視点名を判別しなければなりません。
たとえば、Sample アプリケーションにある Basic データベースのキューブ視点名を検索するには、次の SQL ステートメントでそのデータベースを照会します。
SELECT CUBEVIEWNAME FROM OLAPSERV.CUBECATALOGVIEW WHERE APPNAME='Sample' AND CUBENAME='Basic'
この照会の結果は次のようなものになります。
OLAPSERV.SAMPBASI_CUBEVIEW
次元名および対応する Basic データベースの次元視点名をリストするには、以下のようにします。
SELECT DIMENSIONNAME.DIMENSIONVIEWNAME FROM OLAPSERV.SAMPBASI_CUBEVIEW
Basic データベースの高密度次元の次元名をリストするには、以下のようにします。
SELECT DIMENSIONNAME FROM OLAPSERV.SAMPBASI_CUBEVIEW WHERE DIMENSIONTYPE = 0
スター視点の列を命名するための非アンカー次元名を判別するには、以下のようにします。
SELECT RELDIMENSIONNAME FROM OLAPSERV.SAMPBASI_CUBEVIEW WHERE DIMENSIONTYPE <> 2
Product 次元のリレーショナル属性視点名を戻します。
SELECT RATVIEWNAME FROM OLAPSERV.SAMPBASI_CUBEVIEW WHERE DIMENSIONNAME='Product'
次元視点名は、キューブ視点の DimensionViewName 列から得られます。
表 16 には、次元視点の列を示しています。
名前 | タイプ | サイズ | 内容 |
---|---|---|---|
MemberName | VarChar | 80 | メンバーの名前 |
RelMemberName | VarChar | 18 | アンカー次元のみ。
DB2 OLAP Server のメンバー名。
この名前は、アンカー次元のメンバーに対応するファクト視点およびスター視点内の列を命名するのに使用する。
このリレーショナル・キューブのその他すべてのアンカー次元メンバー名および非アンカー次元名に比べた場合、これは固有名になる。
これは MemberName の変更バージョン。
MemberName に加える必要のある変更内容は次のとおり。
|
RelMemberID | 整数 | なし | このメンバー用の DB2 OLAP Server ID。 この ID は次元表をファクト表に結合するのに使用する。 |
ParentRelId | 整数 | なし | OLAP アウトラインにおけるメンバーの親のリレーショナル ID。 最上位メンバーの値はヌル。 |
LeftSiblingRelId | 整数 | なし | OLAP アウトラインにおけるメンバーの左の兄弟のリレーショナル ID。 左の兄弟がないメンバーの値はヌル。 |
Status | 整数 | なし | このメンバーの状況には次の組み合わせが入る。
|
CalcEquation | Long VarChar (ワークステーション); VarChar (OS/390) | 32700 (ワークステーション); 250 (OS/390) | 計算済みメンバーのデフォルトの計算等式。 リレーショナル・キューブを計算するために別の計算が計算スクリプトに指定されている場合、デフォルトの計算等式は、メンバー値を計算するための等式として使用されない場合があることに注意。 |
UnarySymbol | 短精度整数 | なし | 単項計算記号は次のとおり。
|
AccountsType | 整数 | なし | この属性はアカウント次元のみに使用。
ここには次の値の組み合わせが入る。
|
NoCurrencyConv | 短精度整数 | なし | 通貨換算設定値
|
CurrencyMemberName | VarChar | 80 | このメンバーに関連した通貨キューブからのメンバー名 |
GenerationNumber | 整数 | なし | このメンバーの世代番号 |
GenerationName | VarChar | 80 | このメンバーの世代名 |
LevelNumber | 整数 |
| このメンバーのレベル番号 |
LevelName | VarChar | 80 | このメンバーのレベル名 |
別名表名。 アウトラインの中で使用される OLAP 別名表には、それぞれに 1 つの別名がある。 | VarChar | 80 | 関連した OLAP 別名表中のこのメンバーの別名。 別名がメンバーが与えられていないと、この値はヌルになる。 別名 ID 視点の使用を参照のこと。 |
リレーショナル属性列名 RatCol ユーザー定義属性には、それぞれに 1 つのリレーショナル属性列がある。 | リレーショナル属性列が作成されたときに指定されるデータ・タイプ。 | リレーショナル属性列が作成されたときに指定されるサイズ。 | このメンバーのリレーショナル属性の値。 |
次元視点内のデータにアクセスするには、まず、アプリケーションがキューブ視点から次元視点名を判別しなければなりません。
たとえば、Basic データベースにある時間次元の次元視点名を検索するには、次の SQL ステートメントでそのデータベースを照会します。
SELECT DIMENSIONVIEWNAME FROM OLAPSERV.SAMPBASI_CUBEVIEW WHERE DIMENSIONNAME='Time'
この照会の結果は、OLAPSERV.SAMPBASID_TIME のようになります。
時間次元のメンバー名をリストするには、以下のようにします。
SELECT MEMBERNAME FROM OLAPSERV.SAMPBASID_TIME
DB2 OLAP Server は、スター・スキーマのファクト表の次の 2 つの視点を作成して保守します。
ファクト表にはレベルの異なる集約が含まれているので、集約を行うために SQL アプリケーションを作成する場合は、各次元で選択されているメンバー・セットのレベルが必ず同じになるようにする必要があります。 そうしないと、集約が誤りになります。 この必要を満たす 1 つの方法は、次元表の世代番号フィールドまたはレベル番号フィールドに制約を組み込むことです。
DB2 OLAP Server が作成するファクト表には、非アンカー次元ごとに、また、データを保管するアンカー次元のメンバーごとにそれぞれの 1 つの列があります。 図 9 で使用されているアウトラインに対応するファクト表には、次のような列があります。
次元列に保管されているメンバー ID は、各非アンカー次元のメンバーを参照します。 メンバー ID は、次元視点を使用してメンバー名にマップ可能です。 アンカー・メンバー列には実際のデータ値が保管されます。 アンカー次元メンバーは、アンカー次元の次元視点を使用してファクト視点の列にマップすることができます。
DB2 OLAP Server は、ファクト表の列の内部名およびメンバーの内部 ID を使用します。 ファクト視点は、内部列名を次元名およびメンバー名に置換しますが、次元列メンバー ID をメンバー名にマップすることはありません。 スター次元は、内部列名を次元名およびメンバー名に置換し、ファクト表を次元表に結合することにより、次元列メンバー ID をメンバー名にマップします。
任意の高密度次元をアンカー次元に指定可能ですが、 SQL アプリケーションからファクト視点またはスター視点にアクセスし、随時照会を実行する場合は、アカウント次元をアンカー次元として指定すれば、最も自然なマッピングになります。
ファクト視点名は、キューブ・カタログ視点の FactViewName 列から得られます。
ファクト視点には、列の 2 種類の変数番号があります。
表 17 は、ファクト視点内の 2 種類の列について詳しく示しています。
名前 | タイプ | 内容 |
---|---|---|
次元列の場合
次元のショート名はキューブ視点の RelDimensionName 列から取られる。 | 整数 | この次元のメンバーの RelMemberID |
アンカー・メンバー列の場合
メンバーのショート・メンバー名は、アンカー次元の次元視点の RelMemberName 列から取られる。 | 倍精度 | このセルのデータ値 |
ファクト視点内のデータにアクセスするには、まず、アプリケーションがキューブ・カタログ視点からファクト視点名を判別しなければなりません。
たとえば、Sample アプリケーションの Basic データベースのファクト視点名を検索するには、次の SQL ステートメントを使用します。
SELECT FACTVIEWNAME FROM OLAPSERV.CUBECATALOGVIEW WHERE APPNAME='Sample' AND CUBENAME='Basic'
照会の結果は次のようなものになります。
OLAPSERV.SAMPBASI_FACTVIEW
アプリケーションがメンバーの RelMemberID 値を追跡している場合は、ファクト視点を直接照会することができます。 たとえば、製品 RelMemberId 3 (100-20) で、市場 RelMemberId 2 (East)、時間 RelMemberID 4 (Q3) に対してデータ値を選択するには、次のようになります。
SELECT PROFIT,SALES,COGS FROM OLAPSERV.SAMPBASI_FACTVIEW WHERE PRODUCT=3 AND MARKET=2 AND TIME=4
普通、ファクト視点に対する照会には、次元視点との結合が組み込まれています。 直前の照会と等しい結合を使用した照会は、次のようになります。
SELECT PROFIT,SALES,COGS FROM OLAPSERV.SAMPBASI_FACTVIEW, OLAPSERV.SAMPBASID_TIME, OLAPSERV.SAMPBASID_MARKET, OLAPSERV.SAMPBASID_PRODUCT, WHERE OLAPSERV.SAMPBASID_TIME.MEMBERNAME='Q3' AND OLAPSERV.SAMPBASID_PRODUCT.MEMBERNAME='100-20' AND OLAPSERV.SAMPBASID_MARKET.MEMBERNAME='East' AND OLAPSERV.SAMPBASI_FACTVIEW.TIME=OLAPSERV.SAMPBASID_TIME.RELMEMBERID AND OLAPSERV.SAMPBASI_FACTVIEW.PRODUCT=OLAPSERV.SAMPBASID_PRODUCT.RELMEMBERID AND OLAPSERV.SAMPBASI_FACTVIEW.MARKET=OLAPSERV.SAMPBASID_MARKET.RELMEMBERID
スター視点名は、キューブ・カタログ視点の StarViewName 列から得られます。
スター視点には、列の 2 種類の変数番号があります。
表 18 は、スター視点内の 2 種類の列について詳しく示しています。
名前 | タイプ | 内容 |
次元列の場合
次元のショート名はキューブ視点の RelDimensionName 列から取られる。 | VarChar(80) | メンバー名 |
アンカー・メンバー列の場合
メンバーのショート・メンバー名は、アンカー次元の次元視点の RelMemberName 列から取られる。 | 倍精度 | このセルのデータ値 |
スター視点内のデータにアクセスするには、まず、アプリケーションがキューブ・カタログ視点からスター視点名を判別しなければなりません。
たとえば、Sample アプリケーションの Basic データベースのスター視点名を検索するには、次の SQL ステートメントを使用します。
SELECT STARVIEWNAME FROM OLAPSERV.CUBECATALOGVIEW WHERE APPNAME='SAMPLE' and CUBENAME='BASIC'
この照会の結果は、OLAPSERV.SAMPBASI_STARVIEW のようになります。
第 1 四半期における中央市場の製品 100-10 に対するデータ値を選択するには、以下のようにします。
SELECT PROFIT,SALES,COGS FROM OLAPSERV.SAMPBASI_STARVIEW WHERE PRODUCT='100-10' AND MARKET='Central' AND TIME='Q1'
第 2 四半期における中央地区の利益の出なかった製品をすべて選択するには、以下のようにします。
SELECT PRODUCT,PROFIT,SALES,COGS FROM OLAPSERV.SAMPBASI_STARVIEW WHERE MARKET='Central' AND TIME='Q2' AND PROFIT < 0
スター視点のすべてのメンバーが同じ階層レベルにあるわけではないので、SQL を使用して集約操作を行う場合、慎重に照会を構成するようにしてください。 集約の重複を避けるため、ある次元で選択したメンバーは同じレベルにします。
たとえば、次の SQL ステートメントは、スター視点の異なるレベルで選択されたメンバーを示しています。 (一部の SALES は、2 つのレベルの合計が集まったものであるため、2 回カウントされることになります。)
SELECT SUM(PROFIT) FROM OLAPSERV.SAMPBASI_STARVIEW WHERE MARKET IN ('Central','Illinois') AND PRODUCT='100' AND TIME IN ('Q1','1996')
イリノイ州が中央地区の一部で、Q1 が 1996 年の一部とすると、この照会の結果は、州と地区の両方で、また、四半期と年度の両方で PROFIT の数字が合計されることになります。 中央地区にはすでにイリノイ州のデータが含まれているので、イリノイ州および Q1 データは、合計のところで 2 度カウントされることになります。 SQL を訂正して、別々の四半期における中央地区の 2 つの州の売上を合計するには、次の例のようにできます。
SELECT SUM(PROFIT) FROM OLAPSERV.SAMPBASI_STARVIEW WHERE MARKET IN ('Indiana','Illinois') AND PRODUCT='100' AND TIME IN ('Q1','Q2')