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

前
 
次
 

AGGREGATEコマンド

AGGREGATEコマンドは、指定されたaggmap内でPRECOMPUTEとして指定されている変数のサマリー・データを計算します。(事前計算するデータの指定については、AGGMAPコマンドのPRECOMPUTEおよびRELATION(集計用)文を参照してください。)集計の対象になるのは、現在ステータスにある値に限られます。

事前計算するように指定されていないデータを計算するには、$AGGMAPプロパティまたはAGGREGATEファンクションを使用します。

構文

AGGREGATE|AGGR { var  [(PARTITION partition-name)]}... [USING aggmap] -

[FROM fromspec|FROMVAR textvar] [FORCEORDER] [FUNCDATA] [COUNTVAR countvar...]

パラメータ

var

この変数のデータ値が計算の対象となります。1つのAGGREGATEコマンドに指定されているすべての変数には、同一のディメンションが同じ順序で含まれている必要があります。

PARTITION

指定した変数の指定した部分にある値についてのみ、AGGREGATEの再計算を実行するよう指定します。通常、集計対象のパーティションを1つに限定するのは、マルチライタ・モードを使用してビルドをパラレル化するためです。


注意:

AGGREGATEコマンドでは、個々のパーティションを集計する際、パーティションの依存性は考慮されないため、1つのAGGREGATEコマンドの中では依存性のないパーティションのみを集計してください。

partition-name

事前に定義されたパーティションの名前。DEFINE PARTITION TEMPLATEを参照してください。

USING

このキーワードは、指定したaggmapを使用して集計が実行されることを示します。この句を含めない場合、AGGMAP文または$AGGMAPプロパティを使用して事前に指定されている変数のデフォルトのaggmapがコマンドで使用されます。

aggmap

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

FROM

このキーワードは、異なるオブジェクトから詳細データが取得されることを示します。

FROM句は、集計の実行時における詳細データの取得元の変数を指定する唯一の方法です。「集計の詳細データの取得元を指定する方法」を参照してください。

fromspec

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

FROMVAR

このキーワードは、キャップストーン集計を実行するために異なるオブジェクトから詳細データが取得されることを示します。(FROMVAR句の使用例は、例9-32「キャップストーン集計」を参照。)

FROMVAR句は、集計の実行時における詳細データの取得元の変数を指定する唯一の方法です。「集計の詳細データの取得元を指定する方法」を参照してください。

textvar

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

FORCEORDER

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


注意:

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

FUNCDATA

AGGREGATEファンクションで将来使用する集計仕様をコンパイルします。FUNCDATAを使用すると、aggmap、リレーション階層またはコンポジットを変更しないかぎり、AGGREGATEファンクションを使用する前にaggmapを再コンパイルする必要がありません。

変数にコンポジット・ディメンションがある場合、AGGREGATEファンクションで使用する索引(コンポジット・タプル)が作成および保存されます。それ以外の場合、AGGREGATEファンクションがコールされるたびに索引が再作成されます。コンポジット索引の詳細は、AGGINDEXを参照してください。

COUNTVAR countvar

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

TotalUS

NA

2

East

TotalUS

2

South

TotalUS

3

Boston

East

3

New York

East

3

Atlanta

South


ここで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レベルのブランチ(たとえば、BostonMassachusettsおよびtotalUS)がある4レベルの階層(たとえば、neighborhoodscitiesstatesおよびtotalUS)が使用可能です。

アクセス権に関する制限

セルごとにアクセス権がある変数ではAGGREGATEが機能しないので、即座にエラーが返されます。また、PERMITERRORオプションも無視されます。ただし、AGGREGATEは、オブジェクト・レベルまたディメンション・レベルのアクセス権がある変数では機能します。PERMITコマンドおよびPERMITERRORオプションを参照してください。

集計の詳細データの取得元を指定する方法

データを集計する場合、詳細データの取得元を次の方法で指定できます。

  • $AGGREGATE_FROMプロパティまたは$AGGREGATE_FROMVARプロパティを変数に割り当てる。


    注意:

    変数には、これらのプロパティの一方のみ割当て可能です。$AGGREGATE_FROMプロパティと$AGGREGATE_FROMVARプロパティの両方を1つの変数に割り当てることはできません。

  • データを集計するAGGREGATEコマンドまたはAGGREGATEファンクションにFROM句またはFROMVAR句を含める。

集計を実行すると、Oracle OLAPによって次のように詳細データの取得元が決定されます。

  1. FROM句またはFROMVAR句で場所が指定されている場合、Oracle OLAPはその場所にある詳細データを使用します。

  2. FROM句またはFROMVAR句で場所が指定されていない場合、Oracle OLAPは$AGGREGATE_FROMプロパティまたは$AGGREGATE_FROMVARプロパティを使用して場所が指定されているかどうかを確認します。これらのプロパティの1つで場所が指定されている場合、Oracle OLAPはその場所にある詳細データを使用します。

  3. 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.rproductディメンションの名前は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つの変数(salesunitsおよびprojected_sales)のデータを1つのAGGREGATEコマンドで集計するとします。各変数には次のディメンション性があります。

<month product geography>

COUNTVARで結果を計算するには、salesunitsおよび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
  1. 次の定義で2つのaggmapオブジェクトを定義します。

    DEFINE leaf_aggmap AGGMAP
    AGGMAP
    RELATION geog.parentrel OPERATOR SUM
    END
    
    DEFINE capstone_aggmap AGGMAP
    AGGMAP
    RELATION time.parentrel OPERATOR SUM
    END
    
  2. データを集計するために、次の定義で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
    
  3. 次の文を発行して変数を集計します。

    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