AGGREGATEコマンドは、指定されたaggmap内でPRECOMPUTEとして指定されている変数のサマリー・データを計算します。(事前計算するデータの指定については、AGGMAPコマンドのPRECOMPUTEおよびRELATION(集計用)文を参照してください。)集計の対象になるのは、現在ステータスにある値に限られます。
事前計算するように指定されていないデータを計算するには、$AGGMAPプロパティまたはAGGREGATEファンクションを使用します。
構文
AGGREGATE|AGGR { var [(PARTITION partition-name)]}... [USING aggmap] -
[FROM fromspec|FROMVAR textvar] [FORCEORDER] [FUNCDATA] [COUNTVAR countvar...]
パラメータ
この変数のデータ値が計算の対象となります。1つのAGGREGATEコマンドに指定されているすべての変数には、同一のディメンションが同じ順序で含まれている必要があります。
指定した変数の指定した部分にある値についてのみ、AGGREGATEの再計算を実行するよう指定します。通常、集計対象のパーティションを1つに限定するのは、マルチライタ・モードを使用してビルドをパラレル化するためです。
注意: AGGREGATEコマンドでは、個々のパーティションを集計する際、パーティションの依存性は考慮されないため、1つのAGGREGATEコマンドの中では依存性のないパーティションのみを集計してください。 |
事前に定義されたパーティションの名前。DEFINE PARTITION TEMPLATEを参照してください。
このキーワードは、指定したaggmapを使用して集計が実行されることを示します。この句を含めない場合、AGGMAP文または$AGGMAPプロパティを使用して事前に指定されている変数のデフォルトのaggmapがコマンドで使用されます。
データの集計方法を指定する事前定義されたaggmapの名前。aggmapの詳細は、DEFINE AGGMAPコマンドを参照してください。
このキーワードは、異なるオブジェクトから詳細データが取得されることを示します。
FROM句は、集計の実行時における詳細データの取得元の変数を指定する唯一の方法です。「集計の詳細データの取得元を指定する方法」を参照してください。
集計の詳細データの取得元である任意にディメンション化された変数、計算式またはリレーション。
このキーワードは、キャップストーン集計を実行するために異なるオブジェクトから詳細データが取得されることを示します。(FROMVAR句の使用例は、例9-32「キャップストーン集計」を参照。)
FROMVAR句は、集計の実行時における詳細データの取得元の変数を指定する唯一の方法です。「集計の詳細データの取得元を指定する方法」を参照してください。
リーフ・ノードを解決するために使用される任意にディメンション化された変数。値を計算するときにノードが詳細データを必要としない場合は、NA
を指定します。
aggmapにリストされているRELATION文と同じ順序で計算を実行するよう指定します。AGGREGATEコマンドで計算された値の一部を変更した場合に、このオプションを使用します。このオプションを指定しないと、AGGREGATEコマンドで使用する最適化方法において、変更された値が無視されることがあります。
注意: 変数に$AGGREGATE_FORCEORDERプロパティを設定すると、この動作を集計時のデフォルトの動作にすることができます。この場合、FORCEORDERキーワードをAGGREGATEコマンドで指定する必要はありません。 |
AGGREGATEファンクションで将来使用する集計仕様をコンパイルします。FUNCDATAを使用すると、aggmap、リレーション階層またはコンポジットを変更しないかぎり、AGGREGATEファンクションを使用する前にaggmapを再コンパイルする必要がありません。
変数にコンポジット・ディメンションがある場合、AGGREGATEファンクションで使用する索引(コンポジット・タプル)が作成および保存されます。それ以外の場合、AGGREGATEファンクションがコールされるたびに索引が再作成されます。コンポジット索引の詳細は、AGGINDEXを参照してください。
AVERAGE、HAVERAGE、HWAVERAGEまたはWAVERAGE演算子を含むRELATION文について計算された集計値に加えられたリーフ・ノードの数の非NA
カウント数を格納する場合、countvarで指定されたユーザー定義の変数を使用するよう指定します。
注意: 通常、平均集計値の格納にユーザー定義のCountvar変数は使用しません。かわりに、Oracle OLAPが作成したAggcount変数を使用します。圧縮コンポジットに対する平均演算子を持つRELATION文が集計仕様に含まれる場合は、Aggcount変数を使用する必要があります。Aggcount変数の詳細は、「Aggcount変数」を参照してください。 |
countvar変数は、varで指定された変数と同一のディメンションが同一の順序で定められているINTEGER
変数である必要があります。複数の変数を同時に集計する場合、個別に結果を記録するためにINTEGER
変数をそれぞれ定義する必要があります。
使用上の注意
AGGREGATEに対するステータスの影響
現行のステータスは、最下位レベルの階層、つまりリーフ・ノードのディメンション値にのみ影響します。現在ステータスにあるリーフ・ノードのディメンション値のみが集計されます。AGGMAPコマンドのPRECOMPUTE句でそのレベルにあるディメンション値を対象外にしないかぎり、親値自体がステータスにあるかどうかにかかわらず、ステータスにあるリーフ・ノードの親値が計算されます。したがって、aggmapで指定したすべてのデータを集計する場合、集計を実行する前にディメンションのステータスがALLに設定されていることを確認してください。
AGGREGATEで親リレーションを使用すると、異なるレベルの階層でディメンション値が識別されます。また、ステータスを制限することでデータの部分集計も実行できます。ただし、AGGREGATEファンクションで実行時に集計されるデータがある場合には注意して実行する必要があります。詳細は、AGGREGATEファンクションの項にある注意を参照してください。
たとえば、表9-2「geography階層」に示すように、area
ディメンションおよび1つのgeographyディメンションに対して1つの階層をサポートするarea.area
親子関係を使用するとします。
表9-2 geography階層
レベル | areaディメンション | area.area親リレーション |
---|---|---|
1 |
|
|
2 |
|
|
2 |
|
|
3 |
|
|
3 |
|
|
3 |
|
|
ここでNew
York
のデータ値を変更するとします。New
York
に対してのみAGGREGATEを使用すると、South
の子値(Atlanta
)を含まずに計算が実行されますが、レベル3
からレベル1
(TotalUS
)までの計算にその値のレベル2
が含まれます。TotalUS
までのロールアップにすべての子値を含めるには、AGGREGATEコマンドを実行する前にa LIMIT TO ALL
文を使用します。
階層にある子値の一部のみが変更された場合、変更された値のみを計算するようにステータスを設定します。たとえば、埋込み合計ディメンションd2
とその親リレーションreld2
がある場合、最初にd2
を変更された値に制限します。
ディメンションにあるすべての階層のデータを計算するには、AGGREGATEコマンドを実行する前にそのディメンションの階層ディメンションをALL
に制限します。
計算するデータ量の制御
aggmapのRELATION文でPRECOMPUTEキーワードを使用すると、計算する変数データの量を制御できます。PRECOMPUTEキーワードの後に制限句を使用してディメンションのステータスを設定します。
ユーザーがデータを変更する場合
ユーザーが変数のデータを変更できる場合は、AGGREGATEファンクションを使用して集計を即時計算することで、ユーザーによる変更が集計データに反映されます。データの実行時における変更の詳細は、AGGREGATEファンクションを参照してください。
階層の世代スキップ
AGGREGATEは、階層の世代スキップ可能な範囲で、親リレーションの世代が自動的に識別されます。たとえば、3レベルのブランチ(たとえば、Boston
、Massachusetts
およびtotalUS
)がある4レベルの階層(たとえば、neighborhoods
、cities
、states
およびtotalUS
)が使用可能です。
アクセス権に関する制限
セルごとにアクセス権がある変数ではAGGREGATEが機能しないので、即座にエラーが返されます。また、PERMITERRORオプションも無視されます。ただし、AGGREGATEは、オブジェクト・レベルまたディメンション・レベルのアクセス権がある変数では機能します。PERMITコマンドおよびPERMITERRORオプションを参照してください。
集計の詳細データの取得元を指定する方法
データを集計する場合、詳細データの取得元を次の方法で指定できます。
$AGGREGATE_FROMプロパティまたは$AGGREGATE_FROMVARプロパティを変数に割り当てる。
注意: 変数には、これらのプロパティの一方のみ割当て可能です。$AGGREGATE_FROMプロパティと$AGGREGATE_FROMVARプロパティの両方を1つの変数に割り当てることはできません。 |
データを集計するAGGREGATEコマンドまたはAGGREGATEファンクションにFROM句またはFROMVAR句を含める。
集計を実行すると、Oracle OLAPによって次のように詳細データの取得元が決定されます。
FROM句またはFROMVAR句で場所が指定されている場合、Oracle OLAPはその場所にある詳細データを使用します。
FROM句またはFROMVAR句で場所が指定されていない場合、Oracle OLAPは$AGGREGATE_FROMプロパティまたは$AGGREGATE_FROMVARプロパティを使用して場所が指定されているかどうかを確認します。これらのプロパティの1つで場所が指定されている場合、Oracle OLAPはその場所にある詳細データを使用します。
FROM句またはFROMVAR句、あるいは$AGGREGATE_FROMプロパティまたは$AGGREGATE_FROMVARプロパティで場所が指定されていない場合、Oracle OLAPはその変数自体の詳細データを使用して集計を実行します。
例
この項では、一部のAGGREGATEコマンドの使用例を示します。その他の集計の例は、AGGMAPコマンドの例を参照してください。
例9-27 バッチ・ジョブでのデータの事前計算
通常、データベースのデータをメンテナンスする方法の一部として、事前計算された集計をバッチ・ウィンドウで生成します。たとえば、『Oracle OLAPユーザーズ・ガイド』の説明に従い、ジョブ・マネージャを使用してOracle Enterprise Managerにバッチ・ジョブをスケジュールできます。
事前計算された集計を生成するには、AGGREGATEコマンドを使用します。AGGREGATEコマンドによって、aggmapで指定された仕様に従って1つ以上の変数のデータが集計されます。
AGGREGATE sales units USING gpct.aggmap UPDATE COMMIT
例9-28 1つの変数の集計
アナリティック・ワークスペースに次の定義を含むactuals
という名前の変数が含まれているとします。
DEFINE actuals DECIMAL <time, SPARSE <product, customer, channel>>
次に、同じディメンションが同じ順序で定義されているaggmapオブジェクトを定義します。DEFINE AGGMAPを使用して、act.agg
という名前のaggmapオブジェクトを定義するとします。
DEFINE act.agg AGGMAP <time, SPARSE <product, customer, channel>>
time
ディメンションの階層の名前はtime.r
、product
ディメンションの名前はproduct.r
とし(以降同様)、AGGMAP文を使用して、次のテキストをact.agg
aggmapに追加します。
AGGMAP RELATION time.r RELATION product.r RELATION customer.r RELATION channel.r END
これらのテキストによって、ロールアップされるデータの各ディメンションの階層の名前が指定されます。各ディメンションの現行のステータスがALL
の場合、actuals
の定義にある各ディメンションのそれぞれのディメンション値にデータが適応されます。データは即時計算されません。
次の文を使用してactuals
変数を計算します。(AGGREGATEコマンドの一部としてコンパイル処理が含まれているため、aggmapをコンパイルする必要はありません。)
AGGREGATE actuals USING act.agg
例9-29 複数の変数の集計
アナリティック・ワークスペースに、actuals
という名前の変数およびforecast
という名前の変数が含まれているとします。次の変数定義で示すように、これらの変数には同一のディメンションが同じ順序で定義されています。
DEFINE actuals DECIMAL <time, SPARSE <product, customer, channel>> DEFINE forecast DECIMAL <time, SPARSE <product, customer, channel>>
次に、同じディメンションが同じ順序で定義されているaggmapオブジェクトを定義します。「1つの変数の集計」で説明したように、act.agg
という名前の同じaggmapオブジェクトを定義します。各変数のデータを同じようにロールアップするには、同一のaggmapを使用し、1つの文で両方の変数を計算します。
次の文を使用してactuals
変数およびforecast
変数を計算します。
AGGREGATE actuals forecast USING act.agg
各ディメンションにあるそれぞれのディメンション値のすべてのデータをロールアップするようにaggmapで指定しているので、この文はactuals
およびforecast
にあるすべてのデータをロールアップします。
例9-30 複数の変数でのCOUNTVARの使用
3つの変数(sales
、units
およびprojected_sales
)のデータを1つのAGGREGATEコマンドで集計するとします。各変数には次のディメンション性があります。
<month product geography>
COUNTVARで結果を計算するには、sales
、units
およびprojected_sales
と同じディメンション性を持つ3つのINTEGER
変数を定義する必要があります。
DEFINE intsales INTEGER <month product geography> DEFINE intunits INTEGER <month product geography> DEFINE intprojsales INTEGER <month product geography>
次の文でINTEGER
変数を指定します。
AGGREGATE sales units projected_sales USING sales.agg - COUNTVAR intsales intunits inprojsales
例9-31 部分集計の実行
この例では、time
ディメンションを直前の2つの期間に制限し、新しくロードされたデータのみ集計します。
tp2.agg
というaggmapは、現在ステータスにあるすべての詳細データに対する事前集計を指定します。
DEFINE TP2.AGG AGGMAP LD Full preaggregation AGGMAP RELATION time.parentrel PRECOMPUTE (ALL) RELATION product.parentrel PRECOMPUTE (ALL) END
この集計では、time
が直前の2つの期間に制限され、すべてのproduct
値がステータスにあります。
LIMIT time TO LAST 2 STATUS time product The current status of TIME is: Apr02, May02 LIMIT product TO ALL
次のAGGREGATE文では、tp2.agg
というaggmapを使用してunits
が計算されます。
AGGREGATE units USING tp2.agg
この集計の結果によって、子がステータスにある場合、親がステータスにあるかどうかにかかわらず親値が計算されることが示されます。
LIMIT time TO '2002' 'Q1.02' 'Q2.02' 'Jan02' to 'May02' REPORT DOWN time units
-----------------------------------------UNITS----------------------------------------- ----------------------------------------PRODUCT---------------------------------------- TIME FOOD SNACKS DRINKS POPCORN COOKIES CAKES SODA JUICE ------- -------- -------- -------- -------- -------- -------- -------- -------- 2002 38 24 14 6 9 9 9 5 Q1.02 NA NA NA NA NA NA NA NA Q2.02 38 24 14 6 9 9 9 5 Jan02 NA NA NA 8 2 4 5 8 Feb02 NA NA NA 5 3 2 2 5 Mar02 NA NA NA 3 4 4 2 4 Apr02 21 13 8 2 7 4 6 2 May02 17 11 6 4 2 5 3 3
例9-32 キャップストーン集計
アナリティック・ワークスペースに次の値でgeog.d
およびtime.d
という名前の2つの階層TEXT
ディメンションがあるとします。
GEOG.D -------------- Boston Medford San Diego Sunnydale Massachusetts California United States TIME.D -------------- Jan76 Feb76 Mar76 76Q1
さらに、次の定義による4つの変数があるとします。
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>
これらの変数に対して次のREPORT文を発行するとします。レポートの出力には変数の詳細データが表示されます。
REPORT sales_jan76 sales_feb76 sales_mar76 REPORT DOWN geog.d sales_capstone76 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 -----------------SALES_CAPSTONE76------------------ ----------------------TIME.D----------------------- GEOG.D Jan76 Feb76 Mar76 76Q1 -------------- ------------ ------------ ------------ ------------ Boston NA NA NA NA Medford NA NA NA NA San Diego NA NA NA NA Sunnydale NA NA NA NA Massachusetts NA NA NA NA California NA NA NA NA United States NA NA NA NA
次の定義で2つのaggmapオブジェクトを定義します。
DEFINE leaf_aggmap AGGMAP AGGMAP RELATION geog.parentrel OPERATOR SUM END DEFINE capstone_aggmap AGGMAP AGGMAP RELATION time.parentrel OPERATOR SUM END
データを集計するために、次の定義でcapstone_source
という名前の変数を定義します。
DEFINE capstone_source VARIABLE TEXT <time.d>
REPORT文の次の出力に示されるように、time.d
の各値に対して、該当する販売データを含む変数の名前をcapstone_source
に移入します。
TIME.D CAPSTONE_SOURCE -------------- ---------------------- Jan76 sales_jan76 Feb76 sales_feb76 Mar76 sales_mar76 76Q1 NA
次の文を発行して変数を集計します。
AGGREGATE sales_jan76 sales_feb76 sales_mar76 USING leaf_aggmap AGGREGATE sales_capstone76 USING capstone_aggmap FROMVAR capstone_source
変数の集計後、REPORT文を発行すると、計算されたデータが変数に移入されます。
REPORT sales_jan76 sales_feb76 sales_mar76 REPORT DOWN geog.d sales_capstone76 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 -----------------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