Oracle OLAPには、情報量の豊富なコンテンツを利用してデータベースを拡張できる多数の分析関数が用意されています。この章では、Analytic Workspace Managerでテンプレートや非定型の計算を使用して計算済メジャーを作成する方法について説明します。
この章では、次の項目について説明します。
計算済メジャーは、1つ以上のメジャーに格納されたデータを基にして実行時に計算される値を戻します。リレーショナル・ビューと同様に、計算済メジャーには、他のオブジェクトに格納されているデータに対する問合せが格納されます。計算済メジャーにはデータは格納されないため、計算済メジャーを多数作成してもデータベースのサイズが大きくなることはありません。計算済メジャーは、別の計算済メジャーを定義する際のベースとして使用できるので、Analytic Workspace Managerでテンプレートを基にして作成できる計算の種類が豊富になります。
計算済メジャーを作成すると、ただちにキューブ・ビューの列として表示されます。計算済メジャーにはデータが格納されていないため、これらのメジャーは作成処理とは関連していません。計算済メジャーはいつでも作成可能であり、SQLアプリケーションでの問合せ用としてすぐに利用できます。
計算済メジャーを定義するための関数のライブラリには、次の基本的な分類があります。
算術演算子: 2つのメジャーの値に対して計算を実行します。
分析関数: 1つのメジャーまたは列に格納されている、順序付けられた一連の値または特定の範囲の値に対して計算を実行します。
単一行関数: 1つの行に格納された値に対して計算を実行します。
2つのメジャーに対して次の算術演算子を実行できます。キューブ内での計算は、ディメンション階層のすべてのレベルでセル単位に実行されます。
加算: 2つのメジャーの値を足します。
減算: 一方のメジャーの値からもう一方のメジャーの値を引きます。
乗算: 2つのメジャーの値を掛けます。
除算または比率: 一方の値をもう一方の値で割ります。
相違率: 2つのメジャーの値の相違率を計算します。
算術演算子は、Analytic Workspace Managerではテンプレートとして使用できます(「計算テンプレートの使用」を参照)。
分析関数は、ビジネス・インテリジェンスなどのアプリケーションでの問合せをさらに有益なものにする最も効果的な計算です。ランク関数、シェア関数、時系列関数など各種の単一行関数が用意されています。分析関数を使用することによって、分析担当者や意思決定者は比較を行ったり傾向を把握したりできます。
Oracle OLAPの分析関数では、ディメンションに関連付けられた、レベルや親子関係の情報を活用します。さらに、時間ディメンションには、時系列の手法(ラグ、リード、移動、累積などの計算)に利用できる情報が含まれています。このような情報はディメンションに格納されているため、計算済メジャーを作成するときにこれらの関係を指定する必要はありません。
分析関数は、Analytic Workspace Managerではテンプレートとして使用できます。詳細は、「計算テンプレートの使用」を参照してください。
Oracle OLAPでは、ほとんどのSQL単一行関数をサポートしています。たとえば次のようなものがあります。
数値関数: ABS
、CEIL
、FLOOR
、POWER
、ROUND
、TRUNC
など
文字関数: CONCAT
、LPAD
、RPAD
、LTRIM
、RTRIM
、REPLACE
、SUBSTR
など
日時関数: CURRENT_DAY
、MONTHS_BETWEEN
、NEXT_DAY
、SYSTIMESTAMP
など
比較関数: GREATEST
、LEAST
変換関数: TO_CHAR
、TO_DATE
、TO_NUMBER
、TO_TIMESTAMP
など
これらの関数を使用すると、メジャー内のデータ値を(一般に、より複雑な計算の一部として)操作できます。これらの関数はテンプレートとしては使用できませんが、非定型の計算で使用できます(「ユーザー定義の式の作成」を参照)。
Analytic Workspace Managerには、計算済メジャーの作成時に利用できる使いやすいテンプレートが用意されています。計算済メジャーはソース・メジャーと同じキューブ内に作成できますが、別のキューブ内に作成することもできます。
計算済メジャーは、キューブ・ビュー(UNITS_CUBE_VIEW
など)の追加の列として、問合せ時に利用できます。キューブ・マテリアライズド・ビュー(CB$UNITS_CUBE
など)では利用できません。
計算済メジャー・ジェネレータは、ランク、シェア、前期間と将来期間、現在までの期間、平行期間、移動集計および累積集計など、キューブの1つ以上のメジャーに対して標準の計算済メジャーを素早く生成します。このジェネレータでは、名前と説明の生成にいくつかのネーミング規則を使用しています。これらのネーミング規則は「ネーミング・ルール」タブでカスタマイズできます。
また、OLAP式の構文やOLAP DMLを使用して、個々の計算済メジャー(ユーザー定義の式など)を作成することもできます。
複数の計算済メジャーの作成手順:
ナビゲーション・ツリーでキューブを右クリックし、「計算メジャーの生成」を選択します。
「計算」タブで、計算済メジャーのベースにするメジャーを選択します。
選択したメジャーについて、「計算詳細」をスクロール・ダウンし、作成する計算済メジャーの各タイプを選択します。必要に応じてテンプレートを変更し、計算を編集します。
時系列の計算に使用するTimeディメンションを選択します。
計算済メジャーのリストを確認します。生成された名前は「ネーミング・ルール」タブで変更できます。
「計算の生成」をクリックして計算済メジャーを作成します。
同じ基本タイプで様々な計算を生成する場合は、この手順を繰り返します。たとえば、メジャーが同じでも対象のディメンションが異なるシェア計算を別に生成できます。ネーミング規則を変更して、新しい一意の名前を生成します。
図5-1に、「計算メジャーの生成」ダイアログ・ボックスを示します。
単独の計算済メジャーの作成手順:
ナビゲーション・ツリーでキューブ・フォルダを開きます。
「計算済メジャー」を右クリックし、ショートカット・メニューから「計算済メジャーの作成」を選択します。
「計算済メジャーの作成」ダイアログ・ボックスが表示されます。
わかりやすい名前を入力します。
計算方法を選択します。
算術関数または分析関数を選択すると、計算テンプレートが動的に変わります。
計算テンプレートを編集します。
「作成」をクリックします。
計算済メジャーがナビゲーション・ツリーの「計算済メジャー」フォルダ内に表示されます。
図5-2に、「計算済メジャーの作成」ダイアログ・ボックスを示します。
選択した計算はテンプレートとして表示されます。テンプレートは計算の詳細を示すもので、変数部分を変更することによりカスタマイズできます。
図5-3は、前の期間を計算するためのテンプレートです。リンクをクリックすると、選択リストが表示されます。
1つの計算にメジャーのすべての値を含めることができます。計算の種類によっては、選択した値のみが含まれるようにメジャーにフィルタを適用できます。1つ以上のディメンションを単独のディメンション・メンバーに制限するには、メジャーの横にある省略記号(...
)をクリックします。図5-4のような「メジャーの修飾」ダイアログ・ボックスが表示されます。
大部分の計算は、階層の同じレベルの期間に対して実行されます。一部の種類の計算では、同じ計算で使用される期間の範囲を指定できます。たとえば、キューブに格納された1番目の月から始まる累計ではなく、各会計年度の月の累計を求めたい場合などです。
計算対象の期間の範囲を指定する場合、次の基準を使用できます。
レベル: 同じレベルのすべての期間を計算します。たとえば、キューブ内のすべての月を1つの計算に含め、すべての四半期を別の計算に含めることができます。
親: 同じ親を持つすべての期間を計算します。たとえば、Q1-07に含まれるすべての月を1つの計算に含め、Q2-07に含まれるすべての月を別の計算に含めることができます。
レベルの祖先: 特定のレベルの同じ祖先を持つすべての期間を計算します。たとえば、特定のレベルがYear-Quarter-Month階層のYearであるとき、Q1-06からQ4-06までを1つの計算に含め、Q1-07からQ4-07までを別の計算に含め、Jan-06からDec-06までをさらに別の計算に含めることができます。階層内の上位のレベルについては計算されません。
グレゴリオ暦の期間: 選択した階層にグレゴリオ暦の期間(年、四半期、月、週)を適用します。この方法は、非標準的なカレンダ階層が使用されているデータを分析するときに有効です。たとえば、7月1日から始まり6月30日に終わる会計年度の階層でグレゴリオ暦を使用すると、ある会計年度の下半期とその次の会計年度の上半期が一緒に計算されます。指定したグレゴリオ暦期間よりも上位にある階層内の期間については計算されません。
Analytic Workspace Managerには、ビジネス・インテリジェンス・アプリケーションで一般的に必要とされるあらゆる計算用のテンプレートが用意されています。次の各項では、Analytic Workspace Managerで計算テンプレートとして利用できる計算の種類について説明します。
基本的な数学の演算子を使用して、2つのメジャーに関してセル単位の計算を実行できます(「算術演算子」を参照)。
算術計算の例
次のテンプレートは、相違率を使用してGlobal Priceキューブの計算済メジャーを定義します。
Percent difference between measure UNIT_PRICE and measure UNIT_COST.
この計算済メジャーに対して問合せを発行すると、次のような結果が戻されます。PCT_CHG
列に、PRICE
とCOST
の変化率が示されています。この値はPRICE-COST/COST
の計算で求められます。
PRODUCT PRICE COST PCT_DIFF -------------------- ---------- ---------- ---------- Envoy Ambassador 2892 2664 .09 Envoy Executive 2803 2644 .06 Envoy Standard 1662 1737 -.04 Sentinel Financial 1755 1658 .06 Sentinel Multimedia 1770 1813 -.02 Sentinel Standard 1552 1410 .1
指数は、単独のメジャーに対して計算される数学的演算の1つです。指数計算では、メジャーの値と、基準となる数値との差の割合を求めます。
指数計算では計算テンプレートを使用しません。そのかわり、キューブの各ディメンションのディメンション・メンバーのリストから、指数として使用するものを選択できます(図5-5を参照)。
指数の例
この例では、Productディメンションに関して指数を作成し、Desktop PCs
が指数として使用されています。
PRODUCT SALES PROD_INDEX -------------------- ---------- ---------- Desktop PCs 76682955 100 Portable PCs 18072328 24 CD/DVD 17302122 23 Modems/Fax 5565552 7 Memory 5347292 7 Monitors 3926632 5
Oracle OLAPでは、前の期間または将来の期間についての計算ができます。
前回の期間: 前の期間のメジャーの値を戻します。
前期間との相違: 現在の期間の値と前の期間の値の差を計算します。
前期間との相違率: 現在の期間の値と前の期間の値との相違率を計算します。
将来期間: 後の期間のメジャーの値を戻します。
将来期間との相違: 現在の期間の値と後の期間の値の差を計算します。
将来期間との相違率: 現在の期間の値と後の期間の値との相違率を計算します。
前の期間または将来期間の計算を作成するときは、メジャー、時間ディメンション、階層、および現在の期間からいくつ前(または後)の期間かを選択します。
前の期間の例
次のテンプレートは、前回の期間を使用して計算済メジャーを定義します。
Prior period for measure SALES in TIME dimension and TIME.CALENDAR hierarchy 1 period ago.
この計算済メジャーに対する問合せの結果は次のとおりです。PRIOR_PERIOD
列に、Calendar階層の同じレベルで1つ前の期間におけるSalesの値が示されます。
TIME TIME_LEVEL SALES PRIOR_PERIOD -------- -------------------- ---------- ------------ 2005 CALENDAR_YEAR 136986572 144290686 2006 CALENDAR_YEAR 140138317 136986572 Q1.05 CALENDAR_QUARTER 31381338 41988687 Q2.05 CALENDAR_QUARTER 37642741 31381338 Q3.05 CALENDAR_QUARTER 32617249 37642741 Q4.05 CALENDAR_QUARTER 35345244 32617249 Q1.06 CALENDAR_QUARTER 36154815 35345244 Q2.06 CALENDAR_QUARTER 36815657 36154815 Q3.06 CALENDAR_QUARTER 32318935 36815657 Q4.06 CALENDAR_QUARTER 34848911 32318935
現在までの期間を求める関数は、現在の期間に至る一連の期間(親が同じもの)に対して計算を行います。現在までの期間を計算する関数には次のものがあります。
前期間までの期間: 前の期間までのデータ値を計算します。
前期間までの期間との相違: 現在の期間までのデータ値と前期間までのデータ値の差を計算します。
前期間までの期間との相違率: 現在の期間までのデータ値と前期間までのデータ値の相違率を計算します。
現在までの期間の計算を作成するときは、次の集計方法のいずれかを選択します。
合計
平均
最大
最小
その他に、メジャー、時間ディメンション、階層も選択します。
現在までの期間の例
次のテンプレートは、現在までの期間を使用して計算済メジャーを定義します。
Gregorian Year to date for SALES in the TIME dimension and TIME.CALENDAR hierarchy. Aggregate using MINIMUM from the beginning of the period.
この計算済メジャーに対する問合せの結果は次のとおりです。MIN_TO_DATE
列に、該当のレベルおよび年の中で最小のSALES
の値が表示されます。
TIME TIME_LEVEL SALES MIN_TO_DATE -------- -------------------- ---------- ----------- Q1.06 CALENDAR_QUARTER 36154815 36154815 Q2.06 CALENDAR_QUARTER 36815657 36154815 Q3.06 CALENDAR_QUARTER 32318935 32318935 Q4.06 CALENDAR_QUARTER 34848911 32318935 JAN-06 MONTH 13119235 13119235 FEB-06 MONTH 11441738 11441738 MAR-06 MONTH 11593842 11441738 APR-06 MONTH 11356940 11356940 MAY-06 MONTH 13820218 11356940 JUN-06 MONTH 11638499 11356940 JUL-06 MONTH 9417316 9417316 AUG-06 MONTH 11596052 9417316 SEP-06 MONTH 11305567 9417316 OCT-06 MONTH 11780401 9417316 NOV-06 MONTH 10653184 9417316 DEC-06 MONTH 12415325 9417316
シェアを使用すると、現在のディメンション・メンバーのメジャーの値を、同じディメンションの関連メンバーの値と比較した割合を計算できます。関連メンバーとして次のいずれかを選択できます。
階層の最上位: 合計に対する各メンバーの比率を計算します。
メンバーの親: それぞれの親に対する各メンバーの比率を計算します。
レベルのメンバーの祖先: それぞれの祖先(階層内の特定の上位レベルのメンバー)に対する各メンバーの比率を計算します。
シェア計算を作成するときは、メジャー、ディメンションおよび階層を選択します。また、結果に100を掛けることにより、比率をパーセンテージで表すようにすることもできます。
シェアの例
次のテンプレートは、SHARE
を使用して計算済メジャーを定義します。
Share of measure SALES in PRODUCT.PRIMARY hierarchy of the PRODUCT dimension as a ratio of top of hierarchy.
この計算済メジャーに対する問合せの結果は次のとおりです。TOTAL_SHARE
列に、選択した製品の合計に対する比率がパーセント単位で表示されます。
PRODUCT PROD_LEVEL SALES TOTAL_SHARE -------------------- --------------- ---------- ----------- Total Product TOTAL 144290686 100 Hardware CLASS 130145388 90 Desktop PCs FAMILY 78770152 55 Portable PCs FAMILY 19066575 13 CD/DVD FAMILY 16559860 11 Software/Other CLASS 14145298 10 Accessories FAMILY 6475353 4 Operating Systems FAMILY 5738775 4 Memory FAMILY 5430466 4 Modems/Fax FAMILY 5844185 4 Monitors FAMILY 4474150 3 Documentation FAMILY 1931170 1
ランクは、選択したメジャーの値に基づいてディメンションの値を順位付けします。ランク計算を定義するときは、ディメンション、階層およびメジャーを選択します。
同一の値を処理する方法は、次の中から選択できます。
ランク: 同一の値に同じ順位を割り当てます。そのため、メンバーの数よりランクの数の方が少なくなることがあります。たとえば、5つのディメンション・メンバーに対して、1
、2
、3
、3
、4
という順位が戻されます。
稠密ランク: 同一の値に同じ最小順位を割り当てます。たとえば、5つのディメンション・メンバーに対して、1
、2
、3
、3
、5
という順位が戻されます。
平均ランク: 同一の値に同じ平均順位を割り当てます。たとえば、5つのディメンション・メンバーに対して、1
、2
、3.5
、3.5
、5
という順位が戻されます。
ディメンション・メンバーを順位付けするグループを選択することもできます。
メンバーのレベル: 同じレベルのメンバーを順位付けします。
メンバーの親: 同じ親を持つメンバーを順位付けします。
レベルのメンバーの祖先: 階層内の特定の上位レベルに同じ祖先を持つメンバーを順位付けします。
ランクの例
次のテンプレートは、ランクを使用して計算済メジャーを定義します。
Rank members of the PRODUCT dimension and PRODUCT.PRIMARY hierarchy based on measure SALES. Calculate rank using RANK method with member's parent in order lowest to highest. Rank NA (null) values nulls last.
この計算済メジャーに対する問合せの結果は、次のように製品がRANK
で順位付けされた形で表示されます。
PRODUCT SALES RANK -------------------- ---------- ---------- Monitors 4474150 1 Memory 5430466 2 Modems/Fax 5844185 3 CD/DVD 16559860 4 Portable PCs 19066575 5 Desktop PCs 78770152 6
平行期間とは、現在の期間とレベルは同じであるが、前の期間における親が異なる期間のことです。たとえば、四半期レベルおよび月レベルで、現在の売上を前年の売上と比較する場合に使用します。
Oracle OLAPでは、平行期間の計算に使用する関数として次のものがあります。
平行期間: 平行期間の値を計算します。
平行期間との相違: 現在の期間の値と平行期間の値の差を計算します。
平行期間との相違率: 現在の期間の値と平行期間の値の相違率を計算します。
平行期間を指定するときは、特定のレベルと、現在の期間からいくつ前の期間かを指定します。また、2つの期間が厳密に一致しない場合(たとえば、2月(28日間)と1月(31日間)の1日の売上を比較する場合など)の処理を決めることもできます。
その他に、メジャー、時間ディメンション、階層も選択します。
平行期間の例
次のテンプレートは、平行期間を使用して計算済メジャーを定義します。
Parallel period for SALES in the TIME dimension and TIME.CALENDAR hierarchy 1 TIME.CALENDAR.QUARTER ago based on position from beginning to ending of period.
この計算済メジャーに対する問合せの結果では、次のように2つの四半期の各月が表示されます。平行関係にある月は、前の四半期と位置が同じ月です。つまり、JUL-06
の平行期間はAPR-06
、AUG-06
の平行期間はMAY-06
、SEP-06
の平行期間はJUN-06
となります。
TIME PARENT SALES LAST_QTR -------- ---------- ---------- ---------- APR-06 CY2006.Q2 11356940 13119235 MAY-06 CY2006.Q2 13820218 11441738 JUN-06 CY2006.Q2 11638499 11593842 JUL-06 CY2006.Q3 9417316 11356940 AUG-06 CY2006.Q3 11596052 13820218 SEP-06 CY2006.Q3 11305567 11638499
移動計算は、現在の期間の前後の期間に対して実行されます。Oracle OLAPでは、移動計算用に次の集計方法を使用できます。
移動平均: 特定の数の期間におけるメジャーの平均値を計算します。
移動最大: 特定の数の期間におけるメジャーの最大値を計算します。
移動最小: 特定の数の期間におけるメジャーの最小値を計算します。
移動合計: 特定の数の期間におけるメジャーの合計値を戻します。
メジャー、時間ディメンション、階層を選択します。また、範囲(「期間の範囲の選択」を参照)に加え、現在の期間の前後の期間をいくつ計算に含めるかを選択できます。
移動計算の例
次のテンプレートは、移動最小を使用して計算済メジャーを定義します。
Moving minimum of SALES in the TIME dimension and TIME.CALENDAR hierarchy. Include 1 preceding and 1 following members within level.
この計算済メジャーに対する問合せの結果には、暦年2004年の子孫の値が表示されます。それぞれの最小売上(MIN_SALES)の値は、現在の値とその直前および直後の値の中で最も小さい値です。この計算は、キューブ内のレベルのすべてのメンバーに対して実行されています。
TIME TIME_LEVEL SALES MIN_SALES -------- -------------------- ---------- ---------- Q1.04 CALENDAR_QUARTER 32977874 32977874 Q2.04 CALENDAR_QUARTER 35797921 32977874 Q3.04 CALENDAR_QUARTER 33526203 33526203 Q4.04 CALENDAR_QUARTER 41988687 31381338 JAN-04 MONTH 11477898 10982016 FEB-04 MONTH 10982016 10517960 MAR-04 MONTH 10517960 10517960 APR-04 MONTH 11032057 10517960 MAY-04 MONTH 11432616 11032057 JUN-04 MONTH 13333248 11432616 JUL-04 MONTH 12070352 11108893 AUG-04 MONTH 11108893 10346958 SEP-04 MONTH 10346958 10346958 OCT-04 MONTH 14358605 10346958 NOV-04 MONTH 12757560 12757560 DEC-04 MONTH 14872522 12093518
累積計算では、1番目の期間から現在のメンバーまでを計算するか、または最後の期間から現在のメンバーにさかのぼって計算をします。Oracle OLAPでは、累積計算用に次の集計方法を使用できます。
累積平均: 対象の期間の累積平均を計算します。
累積最大: 対象の期間の最大値を計算します。
累積最小: 対象の期間の最小値を計算します。
累積合計: 対象の期間の累計を計算します。
メジャー、時間ディメンション、階層を選択します。また、範囲(「期間の範囲の選択」を参照)に加えて、1番目の期間から以降の期間に向かって計算するか、最後の期間からさかのぼって計算するかを選択できます。
累積計算の例
次のテンプレートは、累積最小を使用して計算済メジャーを定義します。
Cumulative minimum of SALES in the TIME dimension and TIME.CALENDAR hierarchy within ancestor at level TIME.CALENDAR_YEAR. Total from beginning to current member.
この計算済メジャーに対する問合せの結果には、暦年2004年の子孫の値が表示されます。Q1.04からQ4.04までの四半期の最小値、Jan-04からDec-04までの月の最小値が表示されます。
TIME TIME_LEVEL SALES MIN_SALES -------- -------------------- ---------- ---------- Q1.04 CALENDAR_QUARTER 32977874 32977874 Q2.04 CALENDAR_QUARTER 35797921 32977874 Q3.04 CALENDAR_QUARTER 33526203 32977874 Q4.04 CALENDAR_QUARTER 41988687 32977874 JAN-04 MONTH 11477898 11477898 FEB-04 MONTH 10982016 10982016 MAR-04 MONTH 10517960 10517960 APR-04 MONTH 11032057 10517960 MAY-04 MONTH 11432616 10517960 JUN-04 MONTH 13333248 10517960 JUL-04 MONTH 12070352 10517960 AUG-04 MONTH 11108893 10517960 SEP-04 MONTH 10346958 10346958 OCT-04 MONTH 14358605 10346958 NOV-04 MONTH 12757560 10346958 DEC-04 MONTH 14872522 10346958
計算済メジャーを別の計算済メジャーのベースとして使用することにより、テンプレートで使用可能な各種関数を拡張できます。
たとえば、Analytic Workspace Managerの移動平均および前期間との相違のテンプレートを使用して、移動平均を求める計算済メジャーを作成してから、現在の移動平均と過去の移動平均の差を求めることができます。
ネストした計算の例
次のテンプレートは、UnitsについてUNITS_MOVING_AVG
という名前の移動平均を作成します。
Moving average ofUNITS
in the TIME dimension andTIME.CALENDAR
hierarchy. Include1
preceding and1
following members withinlevel
.
次のテンプレートは、UNITS_MOVING_AVG
を基にして前期間との相違を作成します。
Difference from prior period for UNITS_MOVING_AVG in TIME dimension and TIME.CALENDAR hierarchy 1 period ago.
Unitsメジャーおよび2つの計算済メジャーに対する問合せの結果は次のとおりです。MOVING_AVG
列に移動平均が表示され、DIFF
列に現在の移動平均と前の期間の移動平均の差が表示されています。
TIME TIME_LEVEL UNITS MOVING_AVG DIFF -------- -------------------- ---------- ---------- ---------- JAN-06 MONTH 47776 48520 66 FEB-06 MONTH 47695 48940 419 MAR-06 MONTH 51348 48683 -257 APR-06 MONTH 47005 50387 1705 MAY-06 MONTH 52809 48411 -1976 JUN-06 MONTH 45419 48872 461 JUL-06 MONTH 48388 47546 -1326 AUG-06 MONTH 48830 47857 312 SEP-06 MONTH 46354 47532 -326 OCT-06 MONTH 47411 46869 -663 NOV-06 MONTH 46842 49768 2899 DEC-06 MONTH 55052 50947 1179 2006 CALENDAR_YEAR 584929 575324 -4032 Q1.06 CALENDAR_QUARTER 146819 145705 2093 Q2.06 CALENDAR_QUARTER 145233 145208 -497 Q3.06 CALENDAR_QUARTER 143572 146037 829 Q4.06 CALENDAR_QUARTER 149305 146439 402
計算タイプの1つとして、ユーザー定義の式があります。通常は、OLAP式の構文(この章で説明した分析関数、算術演算子、単一行関数など)を使用して式を作成します。OLAP構文は、SQL構文を拡張したものです。SQLの分析関数や単一行関数を使用したことがある場合は、この構文の作成は難しくありません。
OLAP式の構文で式を作成するときは、Analytic Workspace Managerを使用して行うのが最も簡単です。テンプレートを使用して同じような計算を作成し、その構文を切り取って貼り付け、新しい計算のベースにすることができます。
OLAP式の構文でのユーザー定義の式の作成手順:
「計算済メジャーの作成」ダイアログ・ボックスを開きます。
定義しようとしている式と最も近い計算タイプを選択します。
テンプレートを必要に応じて編集します。
「計算」ボックスから計算を切り取って、テキスト・エディタに貼り付けます。
定義する計算で2つ以上の関数を使用する場合は、前の手順を繰り返します。
テキスト・エディタで必要に応じて計算を編集します。1つの計算内で算術演算子、分析関数、単一行関数を組み合せて使用できます。
「計算タイプ」リストから「OLAP式構文」を選択します。
テキスト・エディタから計算を切り取って、「計算」ボックスに貼り付けます。
「作成」をクリックします。
参照: OLAP式の構文の詳細は、Analytic Workspace Managerのヘルプを参照してください。 |
次の乗算テンプレートは、販売単位と単位原価を使用して計算を生成します。
Multiply measure UNITS by measure UNIT_COST.
次のテンプレートは、乗算演算子(*)を使用して同じ計算を生成します。これは「計算」ボックスに表示されます。UNITSはUnitsキューブ内、UNIT_COSTはPriceキューブ内にあることに注意してください。
UNITS_CUBE.UNITS * PRICE_CUBE.UNIT_COST
この計算の構文は単純なため、テンプレートにはメジャーの修飾名を指定するだけです。
次の式は、販売数量に2%を加算する非定型の式です。
UNITS_CUBE.UNITS * 1.02
この計算済メジャーに対する問合せの結果は次のとおりです。
PRODUCT UNITS TARGET -------------------- ---------- ---------- Envoy Ambassador 2116 2158 Envoy Executive 2481 2531 Envoy Standard 3300 3366 Sentinel Financial 30513 31123 Sentinel Multimedia 7948 8107 Sentinel Standard 7302 7448
次の累積平均テンプレートは、販売数量の平均を求める計算を生成します。
Cumulative average of UNITS in the TIME dimension and TIME.CALENDAR hierarchy within level. Total from beginning to following member.
次のテンプレートは、AVG
関数を使用して同じ計算を生成します。
AVG(UNITS_CUBE.UNITS) OVER HIERARCHY (TIME.CALENDAR BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING WITHIN LEVEL)
次の式は、現在の販売数量と累積平均との相違率を求める非定型の計算式です。AVG
関数と、減算(-
)、除算(/
)、乗算(*
)の各演算子が使用されています。
((UNITS_CUBE.UNITS - AVG(UNITS_CUBE.UNITS) OVER HIERARCHY (TIME.CALENDAR BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING WITHIN LEVEL)) / AVG(UNITS_CUBE.UNITS) OVER HIERARCHY (TIME.CALENDAR BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING WITHIN LEVEL)) * 100
この計算済メジャーに対する問合せの結果は次のとおりです。
TIME UNITS CUM_AVG PCT_DIFF -------- ---------- ---------- ---------- Q1.06 146819 107965 36 Q2.06 145233 109062 33 Q3.06 143572 110048 30 Q4.06 149305 111138 34
なお、この計算は次のテンプレートを使用して作成することもできます。
累積平均テンプレート: UNITS
の累積平均を計算する。
相違率テンプレート: 現在のUNITS
と累積平均との差をパーセントで求める。
表5-1は、OLAP式の構文によって非定型の計算を作成する際に使用できる分析関数の説明です。これらの関数の構文は、Analytic Workspace Managerのヘルプを参照してください。
表5-1 OLAP式の構文の分析関数
関数 | 説明 |
---|---|
式の値に基づいてディメンション・メンバーを順位付ける。この関数はディメンション・メンバーについて連続する数値を戻し、同一の値には同じ平均順位を割り当てる。 |
|
特定の期間に対して計算された、選択した値の平均を戻す。 |
|
|
選択したディメンション・メンバーにより識別されるデータ値の数を計算する。 |
式の値に基づいてディメンション・メンバーを順位付ける。この関数はディメンション・メンバーについて連続する数値を戻し、同一の値には同じ最小順位を割り当てる。 |
|
階層のすべてのメンバーまたは特定のメンバーに関して、階層の特定のレベルにある祖先を戻す。 |
|
階層のすべてのディメンション・メンバーの子、または特定のメンバーの子の数を戻す。 |
|
階層のすべてのメンバーまたは特定のメンバーのレベルの深さを表す数値を戻す(0が最上位レベル)。 |
|
階層のすべてのメンバーまたは特定のメンバーのレベルを戻す。 |
|
階層のすべてのディメンション・メンバーまたは特定のメンバーの親を戻す。 |
|
階層のすべてのメンバーまたは特定のメンバーの最上位の祖先を戻す。 |
|
現在の期間より指定した数だけ前の期間における特定の式の値を戻す。 |
|
現在の期間の値と前の期間の値の差を戻す。 |
|
現在の期間の値と前の期間の値の相違率を戻す。 |
|
現在の期間より指定した数だけ後の期間における特定の式の値を戻す。 |
|
現在の期間の値とそれより後の期間の値の差を戻す。 |
|
現在の期間の値と後の期間の値の相違率を戻す。 |
|
特定のディメンションに対して計算されたデータ値のある範囲における最大値を戻す。 |
|
特定のディメンションに対して計算されたデータ値のある範囲における最小値を戻す。 |
|
|
OLAP DML言語で式を実行する。 |
式の値に基づいてディメンション・メンバーを順位付ける。この関数はディメンション・メンバーについて連続する数値を戻し、同一の値には同じ順位を割り当てる。 |
|
式の値に基づいてディメンション・メンバーを順位付ける。この関数はディメンション・メンバーについて連続する数値を戻し、同一の値には一意の任意(常に一定とは限らない)の順位を割り当てる。 |
|
現在のディメンション・メンバーのメジャーの値を、同じディメンションの関連するメンバーの値と比較した割合を計算する。 |
|
特定のディメンションに対して計算されたデータ値のある範囲の合計を戻す。 |
OLAP DMLでは、予測、モデル、割当てなどの高度なビジネス計算を利用できます。OLAP DMLは、アナリティック・ワークスペース用の内部データを定義したり操作するための言語です。主なデータ構造には、ディメンション、変数、計算式および値セットが含まれます。アナリティック・ワークスペース内の次元オブジェクトは、データベースの高レベルな次元オブジェクト(キューブ、キューブ・ディメンション、メジャー、属性、階層など)をサポートします。
データベースの次元オブジェクト(キューブ、レベル、階層など)は、OLAP DMLの一部のコマンドでサポートされています。OLAP DMLでは、これらのコマンドに加えて、その他のファンクションや演算子なども使用できます。
参照: 『Oracle OLAP DMLリファレンス』のキューブ対応のOLAP DML文に関する項目 |
OLAP DMLは、次元オブジェクトの作成と管理、および次元データの操作に特化して開発された成熟度の高い言語です。OLAP DMLでのプログラミングには高度なスキルを必要としますが、他の言語よりも優れた機能や柔軟性が提供されます。
Analytic Workspace Managerは、OLAP DMLを使用したユーザー定義の式について、次の2つのタイプをサポートしています。
OLAP DML式: OLAP DML式を計算します。この計算タイプは、既存のプログラム、組込みファンクション、または単独の式を実行する際に選択します。OLAP DML式は、計算式のEQ文としてアナリティック・ワークスペース内に格納されます。
OLAP DMLファンクション: 「プログラム本体」フィールドに入力されたOLAP DMLプログラムを実行して値を戻します。この計算タイプは、OLAP DMLで新しいプログラムを開発する際に選択します。プログラムの名前は、アナリティック・ワークスペース内の計算式のEQ文に格納されます。
OLAP DML式の作成手順:
「計算済メジャーの作成」ダイアログ・ボックスを開きます。
「計算タイプ」リストから「OLAP DML式」を選択します。
「データ型」に戻り値のデータ型を選択します。
「OLAP DML」フィールドに式を入力します。
「式のコンパイル」をクリックして、構文のエラーをチェックし、式のコンパイル済バージョンを保存します。
「作成」をクリックして計算済メジャーを作成します。
OLAP DMLファンクションの作成手順:
「計算済メジャーの作成」ダイアログ・ボックスを開きます。
「計算タイプ」リストから「OLAP DMLファンクション」を選択します。
「データ型」に戻り値のデータ型を選択します。
ファンクションの名前を入力します。
「プログラム本体」フィールドにプログラムを入力します。DEFINE
、PROGRAM
およびEND
の各コマンドは自動的に生成されるため、これらのコマンドは省略します。
「式のコンパイル」をクリックして、構文のエラーをチェックし、プログラムのコンパイル済バージョンを保存します。
「作成」をクリックして計算済メジャーを作成します。
OLAP DMLには多数の組込みファンクションが用意されています。この例では、RANDOM
ファンクションを使用して計算済メジャーを作成します。図5-6に、単純な計算の定義を示します。この計算済メジャーは、デフォルトの範囲(0から1)で値を生成します。
次の例では、算術演算子を使用して販売数量に2%を加算した値を求めます。このOLAP DMLの例は、「算術演算子を使用した式の構文例」で示した例と非常に似ていますが、メジャーのネーミング規則が異なっている点に注意してください。
units_cube_units * 1.02
OLAP DML式として作成した2つの計算済メジャーに対する問合せの結果は次のとおりです。
PRODUCT UNITS TARGET RANDOM -------------------- ---------- ---------- ---------- Envoy Ambassador 2116 2158 .6467 Envoy Executive 2481 2531 .0773 Envoy Standard 3300 3366 .2349 Sentinel Financial 30513 31123 .6027 Sentinel Multimedia 7948 8107 .6494 Sentinel Standard 7302 7448 .5912
値を戻すOLAP DMLプログラムはファンクションでもあります。次のプログラムは、現在の売上が前年より低い場合に値ALERT
を戻します。実際の計算は、前年の売上からの変化率を求める別の計算済メジャー(UNITS_CUBE_SALES_PCT_CHG_PY)によって行われます。売上が前年より高い場合には、このプログラムはOKAY
を戻します。
例5-1 OLAP DMLファンクション
VARIABLE _alert TEXT VARIABLE _product NUMBER TRAP ON error _product = product + 0 TEMPSTAT product DO LIMIT product TO CHILDREN USING product_parentrel _product LIMIT product KEEP UNITS_CUBE_SALES_PCT_CHG_PY LT 0 IF STATLEN(product) GT 0 THEN _alert = 'ALERT' ELSE _alert = 'OKAY' DOEND RETURN _alert error: RETURN 'ERROR'
図5-7に、このプログラムの計算済メジャーとしての定義を示します。
この計算済メジャーに対する問合せの結果は次のとおりです。
CHANNEL TIME PCTCHG STATUS --------------- -------- ---------- ------ Catalog Q1.06 -1 ALERT Catalog Q2.06 -1 ALERT Catalog Q3.06 -3 ALERT Catalog Q4.06 -7 ALERT Direct Sales Q1.06 -3 ALERT Direct Sales Q2.06 -1 ALERT Direct Sales Q3.06 10 OKAY Direct Sales Q4.06 -4 ALERT Internet Q1.06 29 OKAY Internet Q2.06 3 ALERT Internet Q3.06 0 ALERT Internet Q4.06 16 OKAY