AGGREGATEファンクションは、指定されたaggmapでPRECOMPUTEと指定されていない変数のデータを計算します。 (事前計算するデータを指定する方法は、PRECOMPUTE文およびRELATION(集計用)文のPRECOMPUTE句を参照してください。)集計の対象になるのは、現在ステータスにある値に限られます。
構文
AGGREGATE (var ... [USING aggmap] -
[FROM fromspec|FROMVAR textvar] [FORCECALC FORCEORDER] [COUNTVAR countvar])
パラメータ
(必要な場合は)計算されてから返されるデータの変数の名前。
このキーワードは、指定したaggmapを使用して集計が実行されることを示します。
データの集計方法を指定する事前定義されたaggmapの名前。aggmapの詳細は、DEFINE AGGMAPを参照してください。
このキーワードは、異なるオブジェクトから詳細データが取得されることを示します。FROM句は、集計の実行時における詳細データの取得元の変数を指定する唯一の方法です。「集計の詳細データの取得元を指定する方法」を参照してください。
集計の詳細データの取得元である任意にディメンション化された変数、計算式またはリレーション。
このキーワードは、キャップストーン集計を実行するために異なるオブジェクトから詳細データが取得されることを示します。FROMVAR句は、集計の実行時における詳細データの取得元の変数を指定する唯一の方法です。「集計の詳細データの取得元を指定する方法」を参照してください。
リーフ・ノードを解決するために使用される任意にディメンション化された変数。値を計算するときにノードが詳細データを必要としない場合は、NA
を指定します。
該当するセルに値が格納されている場合でも、aggmap内にあるRELATION文のPRECOMPUTE句で指定されていない値は再計算するように指定します。ユーザーが詳細データ・セルを変更し、動的計算集計セルに反映された変更値を参照できるようにする場合に、FORCECALCキーワードを使用します。
注意: 変数に$AGGREGATE_FORCECALCプロパティを設定すると、この動作を集計時のデフォルトの動作にすることができます。この場合、FORCECALCキーワードをAGGREGATEファンクションで指定する必要はありません。 |
aggmapにリストされているRELATION文と同じ順序で計算を実行するよう指定します。AGGREGATEコマンドで計算された値の一部を変更した場合に、このオプションを使用します。このオプションを指定しないと、AGGREGATEファンクションで使用する最適化方法において、変更された値が無視されることがあります。FORCEORDERを使用するとパフォーマンスが低下します。
注意: 変数に$AGGREGATE_FORCEORDERプロパティを設定すると、この動作を集計時のデフォルトの動作にすることができます。この場合、FORCEORDERキーワードをAGGREGATEファンクションで指定する必要はありません。 |
AVERAGE、HAVERAGE、HWAVERAGEまたはWAVERAGE演算子を含むRELATION(集計用)文について計算された集計値に加えられたリーフ・ノードの数の非NA
カウント数を格納する場合、countvarで指定されたユーザー定義の変数を使用するよう指定します。
注意: 通常、平均集計値の格納にユーザー定義のCountvar変数は使用しません。かわりに、Oracle OLAPが作成したAggcount変数を使用します。圧縮コンポジット用の平均演算子を持つRELATION(集計用)文が集計仕様に含まれる場合は、Aggcount変数を使用する必要があります。Aggcount変数の詳細は、「Aggcount変数」を参照してください。 |
countvar変数は、varで指定された変数と同一のディメンションが同一の順序で定められているINTEGER
変数である必要があります。複数の変数を同時に集計する場合、個別に結果を記録するためにINTEGER
変数をそれぞれ定義する必要があります。
使用上の注意
実行時計算をサポートする手順
事前集計と実行時集計を組み合せる手順は次のとおりです。
事前計算されるデータの量を制限するaggmapを作成します。
AGGREGATEコマンドをFUNCDATA引数で実行します。
AGGREGATEコマンドの実行後に変更を加えた場合(「aggmapのコンパイル」を参照)、COMPILE文でaggmapを再コンパイルします。
$AGGREGATE_FROMプロパティをデータ変数に追加します(「実行時計算をトリガーするためのNA値の使用」を参照)。
アナリティック・ワークスペースに対して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ファンクションを使用して残りを計算します。各段階で次のように実行します。
新しいデータが集計されるように、aggmapにあるRELATION文のPRECOMPUTE句を変更します。
AGGREGATEコマンドをFUNCDATAキーワードで実行します。
AGGREGATEファンクションが残りのデータを計算するように、$NATRIGGERプロパティが変数に設定されていることを確認します。
複数のaggmapの使用
変数をロールアップする際に使用するaggmapは、可能なかぎり1つにしてください。ただし、場合によっては、希望する方法でデータをロールアップするために複数のaggmapが必要となる変数もあります。データをロールアップするために複数のaggmapが必要となる変数がある場合、最後のaggmapが、AGGREGATEファンクション用として確保されるメタデータに相当するため、一部のデータを即時計算すると問題が発生します。AGGREGATEファンクションでは、AGGREGATEコマンドで使用するすべてのaggmapを結合したメタデータが必要です。この問題を解決するには、NA
値を正しく識別する別のaggmapを作成し、AGGREGATEファンクションで使用します。このaggmapは必ずコンパイルしてください。
次の質問に対する答えが確実ではない場合、AGGREGATEファンクションで複数のaggmapを使用しないでください。
この質問に対して「定義している」と確実に答えられない場合は、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 ...