ヘッダーをスキップ
Oracle® OLAP DMLリファレンス
11gリリース2 (11.2)
B61346-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

AGGREGATEファンクション

AGGREGATEファンクションは、指定されたaggmapでPRECOMPUTEと指定されていない変数のデータを計算します。 (事前計算するデータを指定する方法は、PRECOMPUTE文およびRELATION(集計用)文のPRECOMPUTE句を参照してください。)集計の対象になるのは、現在ステータスにある値に限られます。


関連項目:

AGGREGATEコマンド


注意:

集計対象の変数に$AGGMAPプロパティが指定されている場合は、事前計算の対象でないデータを集計するためにAGGREGATEファンクションを使用する必要はありません。

戻り値

集計された変数と同じデータ型

構文

AGGREGATE (var ... [USING aggmap] -

[FROM fromspec|FROMVAR textvar] [FORCECALC FORCEORDER] [COUNTVAR countvar])

パラメータ

var

(必要な場合は)計算されてから返されるデータの変数の名前。

USING

このキーワードは、指定したaggmapを使用して集計が実行されることを示します。

aggmap

データの集計方法を指定する事前定義されたaggmapの名前。aggmapの詳細は、DEFINE AGGMAPを参照してください。

FROM

このキーワードは、異なるオブジェクトから詳細データが取得されることを示します。FROM句は、集計の実行時における詳細データの取得元の変数を指定する唯一の方法です。「集計の詳細データの取得元を指定する方法」を参照してください。

fromspec

集計の詳細データの取得元である任意にディメンション化された変数、計算式またはリレーション。

FROMVAR

このキーワードは、キャップストーン集計を実行するために異なるオブジェクトから詳細データが取得されることを示します。FROMVAR句は、集計の実行時における詳細データの取得元の変数を指定する唯一の方法です。「集計の詳細データの取得元を指定する方法」を参照してください。

textvar

リーフ・ノードを解決するために使用される任意にディメンション化された変数。値を計算するときにノードが詳細データを必要としない場合は、NAを指定します。

FORCECALC

該当するセルに値が格納されている場合でも、aggmap内にあるRELATION文のPRECOMPUTE句で指定されていない値は再計算するように指定します。ユーザーが詳細データ・セルを変更し、動的計算集計セルに反映された変更値を参照できるようにする場合に、FORCECALCキーワードを使用します。


注意:

変数に$AGGREGATE_FORCECALCプロパティを設定すると、この動作を集計時のデフォルトの動作にすることができます。この場合、FORCECALCキーワードをAGGREGATEファンクションで指定する必要はありません。

FORCEORDER

aggmapにリストされているRELATION文と同じ順序で計算を実行するよう指定します。AGGREGATEコマンドで計算された値の一部を変更した場合に、このオプションを使用します。このオプションを指定しないと、AGGREGATEファンクションで使用する最適化方法において、変更された値が無視されることがあります。FORCEORDERを使用するとパフォーマンスが低下します。


注意:

変数に$AGGREGATE_FORCEORDERプロパティを設定すると、この動作を集計時のデフォルトの動作にすることができます。この場合、FORCEORDERキーワードをAGGREGATEファンクションで指定する必要はありません。

COUNTVAR countvar

AVERAGE、HAVERAGE、HWAVERAGEまたはWAVERAGE演算子を含むRELATION(集計用)文について計算された集計値に加えられたリーフ・ノードの数の非NAカウント数を格納する場合、countvarで指定されたユーザー定義の変数を使用するよう指定します。


注意:

通常、平均集計値の格納にユーザー定義のCountvar変数は使用しません。かわりに、Oracle OLAPが作成したAggcount変数を使用します。圧縮コンポジット用の平均演算子を持つRELATION(集計用)文が集計仕様に含まれる場合は、Aggcount変数を使用する必要があります

Aggcount変数の詳細は、「Aggcount変数」を参照してください。


countvar変数は、varで指定された変数と同一のディメンションが同一の順序で定められているINTEGER変数である必要があります。複数の変数を同時に集計する場合、個別に結果を記録するためにINTEGER変数をそれぞれ定義する必要があります。

使用上の注意

実行時計算をサポートする手順

事前集計と実行時集計を組み合せる手順は次のとおりです。

  1. 事前計算されるデータの量を制限するaggmapを作成します。

  2. AGGREGATEコマンドをFUNCDATA引数で実行します。

  3. AGGREGATEコマンドの実行後に変更を加えた場合(「aggmapのコンパイル」を参照)、COMPILE文でaggmapを再コンパイルします。

  4. $AGGREGATE_FROMプロパティをデータ変数に追加します(「実行時計算をトリガーするためのNA値の使用」を参照)。

  5. アナリティック・ワークスペースに対してUPDATEおよびCOMMITを実行します。

aggmapのコンパイル

データをロードする場合は、明示的にCOMPILE文を実行するかAGGREGATEコマンドをFUNCDATA引数で実行し、必ずaggmapをコンパイルしてください。コンパイルされていない場合、AGGREGATEファンクションを使用する各セッションでaggmapは実行時に再コンパイルされます。aggmapをコンパイルするときは、モデルの計算など他の計算を先に実行しておきます。

aggmap定義のディメンションまたはaggmapのテキストに含まれるリレーションをメンテナンスした後は、aggmapを再コンパイルする必要があります。

データ値の実行時変更

ユーザーが実行時にデータ値を変更する可能性がある場合、そのデータが同期化されていないことがあります。この問題を回避する方法は次のとおりです。

  • ALLOCATE文を使用して、新しい集計のデータを階層の下位にある関係する値に配布する。

  • 実行時の変更の影響を受けるデータを事前計算しない(格納された集計値は、実行時の変更を関係する値に反映するように変更できないため)。

実行時計算をトリガーするためのNA値の使用

$NATRIGGERプロパティを変数に追加することで、データが問い合されるたびにAGGREGATEファンクションを暗黙的にコールできます。次の文によって、sales.aggmapというaggmapを使用してsalesデータが集計されます。

CONSIDER sales
PROPERTY '$NATRIGGER' 'AGGREGATE(sales USING sales.aggmap)'

以降は、REPORT SALESなどの文でAGGREGATEファンクションが実行され、NAではなく計算された値が返されます。

部分ロールアップ後のAGGREGATEファンクションの使用

生成するすべてのデータを事前計算できるほどバッチ・ウィンドウが長くない場合、連日に分けて集計を実行し、AGGREGATEファンクションを使用して残りを計算します。各段階で次のように実行します。

  1. 新しいデータが集計されるように、aggmapにあるRELATION文のPRECOMPUTE句を変更します。

  2. AGGREGATEコマンドをFUNCDATAキーワードで実行します。

  3. AGGREGATEファンクションが残りのデータを計算するように、$NATRIGGERプロパティが変数に設定されていることを確認します。

複数のaggmapの使用

変数をロールアップする際に使用するaggmapは、可能なかぎり1つにしてください。ただし、場合によっては、希望する方法でデータをロールアップするために複数のaggmapが必要となる変数もあります。データをロールアップするために複数のaggmapが必要となる変数がある場合、最後のaggmapが、AGGREGATEファンクション用として確保されるメタデータに相当するため、一部のデータを即時計算すると問題が発生します。AGGREGATEファンクションでは、AGGREGATEコマンドで使用するすべてのaggmapを結合したメタデータが必要です。この問題を解決するには、NA値を正しく識別する別のaggmapを作成し、AGGREGATEファンクションで使用します。このaggmapは必ずコンパイルしてください。

次の質問に対する答えが確実ではない場合、AGGREGATEファンクションで複数のaggmapを使用しないでください。

AGGREGATEファンクションで使用するaggmapをコンパイルしたときに、各PRECOMPUTE句から得られたステータスが、データを事前計算したディメンション内のノードを正しく定義しているか。

この質問に対して「定義している」と確実に答えられない場合は、AGGREGATEファンクションで複数のaggmapを使用しないでください。

この項では、一部のAGGREGATEファンクションの使用例を示します。その他の集計の例は、AGGMAPコマンドの例を参照してください。

例7-5 式の計算式としてのAGGREGATEファンクションの使用

例9-32「キャップストーン集計」は、AGGREGATEコマンドを使用して最終キャップストーン集計を実行する例です。キャップストーン集計は、計算式の式として実行時に実行することもできます。

アナリティック・ワークスペースに次のオブジェクト定義が含まれているとします。

DEFINE GEOG.D DIMENSION TEXT
DEFINE GEOG.PARENTREL RELATION GEOG.D <GEOG.D>
DEFINE TIME.D DIMENSION TEXT
DEFINE TIME.PARENTREL RELATION TIME.D <TIME.D>
DEFINE SALES_JAN76 VARIABLE INTEGER <GEOG.D>
DEFINE SALES_FEB76 VARIABLE INTEGER <GEOG.D>
DEFINE SALES_MAR76 VARIABLE INTEGER <GEOG.D>
DEFINE SALES_CAPSTONE76 VARIABLE INTEGER <GEOG.D TIME.D>
DEFINE CAPSTONE_SOURCE VARIABLE TEXT <TIME.D>

次の定義で2つのaggmapオブジェクトを作成します。ここでは、capstone_aggmapが、PRECOMPUTE NA句を使用したRELATION文で構成されていることに注意してください。

DEFINE LEAF_AGGMAP AGGMAP
AGGMAP
RELATION geog.parentrel OPERATOR SUM
END
 
DEFINE CAPSTONE_AGGMAP AGGMAP
AGGMAP
RELATION time.parentrel OPERATOR SUM PRECOMPUTE (NA)
END

例9-32「キャップストーン集計」では、AGGREGATEコマンドを使用して最終キャップストーン集計が実行されます。この例では、AGGREGATEファンクションを計算式の式として含むf_sales_capstone76という名前の計算式としてキャップストーン集計を定義します。

DEFINE F_SALES_CAPSTONE76 FORMULA INTEGER <GEOG.D TIME.D>
EQ AGGREGATE ( sales_capstone76 USING capstone_aggmap fromvar capstone_source)
 

アナリティック・ワークスペースで集計されない変数および計算式に対してレポートを作成すると、結果は次のとおりになります。

GEOG.D          SALES_JAN76    SALES_FEB76    SALES_MAR76
-------------- -------------- -------------- --------------
Boston                  1,000          2,000          3,000
Medford                 2,000          4,000          6,000
San Diego               3,000          6,000          9,000
Sunnydale               4,000          8,000         12,000
Massachusetts              NA             NA             NA
California                 NA             NA             NA
United States              NA             NA             NA
 
               --------------------F_SALES_CAPSTONE76---------------------
               --------------------------TIME.D---------------------------
GEOG.D             Jan76          Feb76          Mar76           76Q1
-------------- -------------- -------------- -------------- --------------
Boston                  1,000          2,000          3,000          6,000
Medford                 2,000          4,000          6,000         12,000
San Diego               3,000          6,000          9,000         18,000
Sunnydale               4,000          8,000         12,000         24,000
Massachusetts              NA             NA             NA             NA
California                 NA             NA             NA             NA
United States              NA             NA             NA             NA
 
               ---------------------SALES_CAPSTONE76----------------------
               --------------------------TIME.D---------------------------
GEOG.D             Jan76          Feb76          Mar76           76Q1
-------------- -------------- -------------- -------------- --------------
Boston                  1,000          2,000          3,000             NA
Medford                 2,000          4,000          6,000             NA
San Diego               3,000          6,000          9,000             NA
Sunnydale               4,000          8,000         12,000             NA
Massachusetts              NA             NA             NA             NA
California                 NA             NA             NA             NA
United States              NA             NA             NA             NA
 

次のAGGREGATE文を使用してリーフ変数を集計します。

AGGREGATE sales_jan76 sales_feb76 sales_mar76 USING leaf_aggmap

リーフ変数のレポートには、集計された値が表示されます。

GEOG.D          SALES_JAN76    SALES_FEB76    SALES_MAR76
-------------- -------------- -------------- --------------
Boston                  1,000          2,000          3,000
Medford                 2,000          4,000          6,000
San Diego               3,000          6,000          9,000
Sunnydale               4,000          8,000         12,000
Massachusetts           3,000          6,000          9,000
California              7,000         14,000         21,000
United States          10,000         20,000         30,000

f_sales_capstone76計算式のレポートには、76Q1の集計された値が表示されます。

               --------------------F_SALES_CAPSTONE76---------------------
               --------------------------TIME.D---------------------------
GEOG.D             Jan76          Feb76          Mar76           76Q1
-------------- -------------- -------------- -------------- --------------
Boston                  1,000          2,000          3,000          6,000
Medford                 2,000          4,000          6,000         12,000
San Diego               3,000          6,000          9,000         18,000
Sunnydale               4,000          8,000         12,000         24,000
Massachusetts           3,000          6,000          9,000         18,000
California              7,000         14,000         21,000         42,000
United States          10,000         20,000         30,000         60,000

これに対し、sales_capstone76変数には76Q1の集計値が格納されないので、この変数のレポートには集計値は表示されません。

               ---------------------SALES_CAPSTONE76----------------------
               --------------------------TIME.D---------------------------
GEOG.D             Jan76          Feb76          Mar76           76Q1
-------------- -------------- -------------- -------------- --------------
Boston                  1,000          2,000          3,000             NA
Medford                 2,000          4,000          6,000             NA
San Diego               3,000          6,000          9,000             NA
Sunnydale               4,000          8,000         12,000             NA
Massachusetts           3,000          6,000          9,000             NA
California              7,000         14,000         21,000             NA
United States          10,000         20,000         30,000             NA

例7-6 レポートに対するデータの即時集計

units変数は、tp.aggというaggmapを使用して即時集計されます。

units変数のオブジェクト定義は次のとおりです。

DEFINE units VARIABLE INTEGER <time product>

timeの親リレーションには次の値が含まれます。

      ---TIME.PARENTREL----
      --TIME.HIERARCHIES---
TIME       STANDARD   YTD
---------- ---------- ----------
Jan01      Q1.01      Last.Ytd
Feb01      Q1.01      Last.Ytd
Mar01      Q1.01      Last.Ytd
Q1.01      2001       NA

productディメンションの親リレーションには次の値が含まれます。

    PRODUCT.PA
PRODUCT    RENTREL
---------- ----------
Food       Na
Snacks     Food
Drinks     Food
Popcorn    Snacks
Cookies    Snacks
Cakes      Snacks
Soda       Drinks
Juice      Drinks

units変数では、データは各ディメンション階層の最下位レベルにのみ格納されます。

  -------------------UNITS-------------------
  -------------------TIME--------------------
PRODUCT     Jan01      Feb01      Mar01      Q1.01
----------- ---------- ---------- ---------- ----------
Food        NA         NA         NA         NA
Snacks      NA         NA         NA         NA
Drinks      NA         NA         NA         NA
Popcorn     2          2          4          NA
Cookies     3          6          3          NA
Cakes       4          4          2          NA
Soda        7          3          9          NA
Juice       1          3          2          NA

aggmapは、すべてのデータが即時計算されることを指定しています。

DEFINE tp.agg AGGMAP
LD <time product> Aggmap
AGGMAP
RELATION time.parentrel PRECOMPUTE (NA)
RELATION product.parentrel PRECOMPUTE (NA)
END

次のREPORT文は、AGGREGATEファンクションを使用してデータを計算します。

REPORT aggregate(units USING tp.agg)

  -------AGGREGATE(UNITS USING TP.AGG)-------
  -------------------TIME--------------------
PRODUCT     Jan01      Feb01      Mar01      Q1.01
----------- ---------- ---------- ---------- ----------
Food        17         18         20         55
Snacks       9         12          9         30
Drinks       8          6         11         25
Popcorn      2          2          4          8
Cookies      3          6          3         12
Cakes        4          4          2         10
Soda         7          3          9         19
Juice        1          3          2          6

例7-7 $NATRIGGERを使用したデータ集計

$NATRIGGERプロパティでAGGREGATEファンクションをunitsに追加すると、単純なREPORT文で集計結果を表示できます。

CONSIDER units
PROPERTY '$NATRIGGER' 'AGGREGATE(units USING tp.agg)'
REPORT units
 
  -------------------UNITS-------------------
  -------------------TIME--------------------
PRODUCT     Jan01      Feb01      Mar01      Q1.01
----------- ---------- ---------- ---------- ----------
Food        17         18         20         55
Snacks       9         12          9         30

例7-8 1つの値を除くすべての値の即時計算

AGGREGATEファンクションは、RELATION文のPRECOMPUTE句で指定されたデータの補数を計算します。これにより現在ステータスにある値が返されます。

たとえば、次のRELATION文を含むaggmapを使用するとします。

RELATION letter.letter PRECOMPUTE ('AA')

AGGREGATEファンクションは、次に示すようにAA除くすべての集計を計算します

REPORT AGGREGATE(units USING letter.aggmap)

                 AGGREGATE(UNITS
LETTER         USING LETTER.AGGMAP)
-------------- --------------------
A                                 3
AA                               NA
AB                                3
AAB                               2
ABA                               1
ABB                               2
AAAA                              1
AABA                              2
ABAA                              1
ABBB                              1
ABBA                              1
...