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

前
 
次
 

AGGMAP

AGGMAPコマンドは、aggmapオブジェクトを集計仕様として識別し、現行aggmapオブジェクトの定義に集計仕様を追加するコマンドです。AGGMAPを使用して、aggmapオブジェクトに集計仕様を割り当てるには、定義は最新のもの、または現行のセッション中に検討されたものにする必要があります。そうでない場合は、最初にCONSIDER文を使用し、現行の定義にする必要があります。

AGGMAPコマンドの代替コマンドはEDIT AGGMAP文であり、OLAP Worksheet内でのみ使用できます。EDIT AGGMAP文を実行すると、aggmapオブジェクトの集計仕様を追加、削除または変更できる編集ウィンドウが開きます。

(ただし、これ以外にも、AGGMAP文と呼ばれることがあるOLAP DML文が2つあり、1つはAGGMAP ADDまたはREMOVEモデル文で、AGGMAP型のaggmapオブジェクトに対してモデルの追加または削除に使用し、もう1つはAGGMAP SET文で、変数のデフォルトaggmapを指定する際に使用します。)

構文

AGGMAP [specification]

パラメータ

specification

現行aggmapオブジェクトの集計仕様である、複数行のテキスト式。各文は、複数行のテキスト式で構成されています。コマンドライン・レベルでAGGMAPコマンドをコード化する際は、改行デリミタ(\n)で文を区切るか、JOINLINESを使用します。

集計仕様は、AGGMAPで始まり、ENDで終わります。これらの文の間に、指定する計算に応じて次の文のうち1つ以上をコーディングします。最低でも、1つのRELATION(集計用)文をコーディングする必要があります。

AGGINDEX
BREAKOUT DIMENSION
CACHE
DIMENSION(集計用)
DROP DIMENSION
MEASUREDIM(集計用)
MODEL(集計内)
PRECOMPUTE
RELATION(集計用)

注意:

aggmapの仕様では、結合ディメンションを使用できません。かわりに、コンポジットを使用してください。

使用上の注意

一時集計またはカスタム集計の作成

ほとんどのaggmapオブジェクトは、永続的なディメンション・メンバー(つまり、あるセッションから別のセッションへと持続されるディメンション・メンバー)によりディメンション化された変数値を計算するように定義されています。ただし、ユーザーは、予測またはwhat-if分析を行う際や、単に定型的ではない方法でデータを参照する際、実行時に独自の集計を作成できます。一時メンバーをディメンションに追加し、それらのメンバーのデータを集計することは、一時集計またはカスタム集計の作成と呼ばれることがあります。たとえば、次に示すようなMAINTAIN ADD SESSION文を使用して、モデルをaggmapオブジェクトへ一時的に追加できます。

MAINTAIN dimension ADD SESSION member = model APPLY TO AGGMAP aggmap

圧縮コンポジットによってディメンション化される変数の集計

圧縮コンポジットによってディメンション化される変数の集計仕様を設計する場合は、常に次の点に注意してください。

  • 集計仕様のRELATION文は、「圧縮コンポジットのRELATION文」に示されているガイドラインに従ってコード化する必要があります。

  • パラレル集計はサポートされていません。かわりに、複数セッションを使用して、独自の圧縮コンポジットを持つ変数またはパーティションを計算できます。

  • 可能な場合、圧縮コンポジットによってディメンション化される変数を再集計する際に、Oracle OLAPが自動的に増分集計を実行します。つまり、Oracle OLAPは最後の集計以降に発生した変更を測定し、再計算が必要となる変数の最小の範囲を割り出し、その範囲のみを再計算します。

    したがって、明示的な増分集計はサポートされていません。変数のディメンション・ステータスが制限されている場合、圧縮コンポジットによってディメンション化される変数を集計することはできません。集計を成功させるには、変数のディメンション・ステータスがALLSTATである必要があります。ただし、ローカルの圧縮コンポジットを持つ稠密ディメンションを使用してパーティションを計算できます。このようにして、新しいデータを含むパーティションのみを集計できます。

集計オプオションとシステム・プロパティ

集計にはいくつかのオプションがあります。これらのオプションを「集計オプション」に示します。

集計または割当てに関連するシステム・プロパティについては、「カテゴリ別のシステム・プロパティ」を参照してください。

循環性の確認

AGGREGATEは、複数階層内および複数階層間の循環性の関係を自動的に確認します。最初に階層を定義する際、PRECOMPUTE文をNAに、AGGINDEXをNOに設定して循環性を確認します。集計中のXSHIERCK01エラーは、循環階層が検出された可能性のあることを示しています。ただし、メッセージにUNDIRECTEDへの参照が含まれる場合は、詳細データ・セルから祖先への複数のパスが検出されます。一部の計算では、詳細データ・セルに同じ祖先セルへの複数のパスが必要です。この場合、AGGREGATEコマンドを実行する前に、MULTIPATHHIERオプションをYESに設定する必要があります。あるいは、階層構造内のエラーを修正する必要があります。このエラー・メッセージに関する詳細と、その解析方法は、MULTIPATHHIERオプションを参照してください。

例9-6 事前計算および即時計算の組合せ

この例では、アナリティック・ワークスペース内の一部のデータを事前計算し、残りをユーザーによる要求時に計算するように指定する手順を説明します。

次の定義のunits変数を持つmydtbという名前のアナリティック・ワークスペースを定義するとします。

DEFINE units INTEGER <time, SPARSE <product, geography>>

この場合、集計するデータを指定する仕様をaggmapに作成および追加する必要があります。この例では、aggmapを定義し、aggmapに仕様を追加するOLAP DML文を含む入力ファイルの使用方法を示します。

  1. 各ディメンションの階層の名前を識別します。セルフ・リレーションとして階層を定義した場合、セルフ・リレーションの名前を使用します。

  2. 集計するデータを決定します。

    timeおよびproductディメンションのすべてのレベルのデータを計算し、geographyのデータは計算しないとします。geographyディメンションの最下位レベルのデータは、都市レベルにあります。階層の2番目のレベルには、EastCentralおよびWestの各地域を表す3つのディメンション値があります。階層の3番目のレベルには、Totalという1つのディメンション値があります。

    Eastのデータを事前計算し、アナリティック・ワークスペースに格納するとします。CentralWestおよびTotalのデータは、ユーザーがそのデータを要求した時点でのみ計算され、そのデータはアナリティック・ワークスペースに格納されません。そのため、aggmapオブジェクトに追加する仕様にこの情報を指定する必要があります。

  3. units.txtという名前のASCIIテキスト・ファイルを作成します。次のOLAP DML文をテキスト・ファイルに追加します。

    DEFINE units.agg AGGMAP <time, SPARSE <product, geography>>
    AGGMAP
    RELATION myti.parent
    RELATION mypr.parent
    RELATION myge.parent PRECOMPUTE ('East')
    END
    

    この文により、units.aggという名前のaggmapが定義され、units.txtファイルをアナリティック・ワークスペースに読み取る際に3つのRELATION文が集計仕様に追加されます。

  4. units.txtファイルをアナリティック・ワークスペースに読み取るには、次の文を実行します。

    INFILE 'inf/units.txt'
    
  5. この時点で、units.agg aggmapがアナリティック・ワークスペースに存在している必要があります。次の文を使用して、units変数を集計できます。

    AGGREGATE units USING units.agg
    

    これで、すべての時間および製品についてのEastのデータが計算され、アナリティック・ワークスペースに格納されます。

  6. ユーザーがCentralWestまたはTotalのデータを要求した際に、そのデータが計算されて表示されるようにアナリティック・ワークスペースを設定します。次の文に示すとおり、通常、AGGREGATEファンクションとともに使用する前に、aggmapオブジェクトをコンパイルすることをお薦めします。

    COMPILE units.agg
    

    AGGREGATEコマンドを使用するのみの場合は、この文によりaggmapオブジェクトが使用前にコンパイルされるため必要ありません。ただし、AGGREGATEコマンドとともにFUNCDATAキーワードを使用しない場合、即時計算の実行に必要なメタデータがコンパイルされていません。他の必要な計算(モデルの計算など)がすべて実行済の場合は、データのロード時にaggmapをコンパイルするのが最適な方法になります。実行していない場合は、ユーザーはアナリティック・ワークスペースを開くたびに、集計が自動的にコンパイルされるのを待機する必要があります。つまり、なんらかのデータが即時計算される場合、アナリティック・ワークスペースをユーザーから使用可能にする前にaggmapをコンパイルすることにより、すべてのユーザーの問合せパフォーマンスを向上させることができます。

  7. units変数にプロパティを追加します。

    CONSIDER units
    PROPERTY '$NATRIGGER' 'AGGREGATE(units USING units.agg)'
    

    このプロパティは、データ・セルにNA値が含まれる場合、Oracle OLAPがAGGREGATEファンクションをコールして、そのセルのデータを集計することを示しています。このため、ユーザーにより要求されるすべてのunitsデータが表示されます。ただし、geographyディメンションのEastディメンション値のデータのみが実際に集計され、アナリティック・ワークスペースに格納されます。他のすべてのデータ(CentralWestおよびTotalのデータ)は、ユーザーにより要求された時点でのみ計算されます。

例9-7 非加算集計の実行

この例では、加算集計および非加算集計を組み合せる演算子および引数の使用方法を説明します。

salesdebtinterest_rateおよびinventoryの4つの変数を定義したとします。これらの変数は、同じディメンション性で定義されており、ここで、cpproductおよびgeographyディメンションで定義されたコンポジットです。

<time cp<product geography>>

1つのAGGREGATEコマンドを使用して、4つの変数すべてを集計するとします。debt変数には加算集計が必要です。sales変数には加重合計集計が必要で、interest_rateには階層加重平均が必要です。そのため、salesおよびinterest_rateの両方に定義が必要な加重オブジェクトが必要で、加重値を移入する必要があります。inventoryには、階層内の最後の値である合計インベントリの結果が必要です。

debtおよびinventoryの集計演算は、OPERATORキーワードを使用して指定します。しかし、salesおよびinterest_rateには加重オブジェクトが必要な集計演算があるため、ARGSキーワードを使用してそれらの演算を指定する必要があります。演算子変数を定義して、OPERATORキーワードを使用します。通常、演算子変数は、メジャー・ディメンションまたは明細項目ディメンションによってディメンション化されます。

実行する集計を定義する手順は、次のとおりです。

  1. メジャー・ディメンションを使用して、ARGSキーワードとともに使用する引数変数の定義も行うため、次の文に示されているようにmeasureディメンションを定義します。

    DEFINE measure DIMENSION TEXT
    MAINTAIN measure 'sales', 'debt', 'interest_rate', 'inventory'
    

    注意:

    RELATION文でmeasureディメンションを使用する場合は、同じ集計仕様に必ずMEASUREDIM文を含める必要があります。

  2. opvarという名前の演算子変数を定義して移入します。文では、debtの集計でSUM演算子を使用することと、inventoryの集計でHLAST演算子を使用することを指定します。

    DEFINE opvar TEXT <measure>
    opvar (measure 'sales') = 'WSUM'
    opvar (measure 'debt') = 'SUM'
    opvar (measure 'interest_rate') = 'HWAVERAGE'
    opvar (measure 'inventory') = 'HLAST'
    
  3. salesおよびinterest_rateには加重オブジェクトが必要なため、それらの加重オブジェクトを定義および移入します。次の文では、currencyという名前の(salesが使用する)加重オブジェクトが定義されます。

    DEFINE currency DECIMAL <time geography>
    

    currency変数は、timeおよびgeographyのみによってディメンション化されることに注意してください。この変数の目的は、外国通貨の換算情報としての役割を果す加重の提供であるため、productディメンションを含める必要はありません。

  4. 使用する加重値を持つcurrencyを移入します。

  5. interest_rate変数の非加算集計(階層加重平均)には、変数debtの合計が必要です。つまり、interest_ratedebtの集計結果がない場合は集計できません。

    この時点で、引数変数を定義でき、この引数変数には、interest_rateの加重オブジェクトとしてdebtの集計結果を指定する必要があります。同じ引数変数を使用して、sales変数の加重オブジェクトとしてcurrencyを指定します。次の文では、argvarという名前の引数変数が定義されます。

    DEFINE argvar TEXT <measure>
    
  6. 次の文により、引数変数が移入されます。

    argvar (measure 'sales') = 'weightby currency'
    argvar (measure 'debt') = NA
    argvar (measure 'interest_rate') = 'weightby debt'
    argvar (measure 'inventory') = NA
    
  7. productおよびgeographyの集計では、salesdebtおよびinterest_rate変数のデータが単に加算されるのみです。しかし、inventory変数には階層加重平均が必要です。そのため、2番目の演算子変数および2番目の引数変数を定義する必要があり、これらはどちらもproductおよびgeographyのRELATION文で使用されます。

    次の文では、2番目の演算子変数を定義して移入します。

    DEFINE opvar2 TEXT <measure>
    opvar (measure 'sales') = 'Sum'
    opvar (measure 'debt') = 'Sum'
    opvar (measure 'interest_rate') = 'Sum'
    opvar (measure 'inventory') = 'HWAverage'
    

    次の文では、2番目の引数変数を定義して移入します。

    DEFINE argvar2 TEXT <measure>
    argvar (measure 'sales') = NA
    argvar (measure 'debt') = NA
    argvar (measure 'interest_rate') = NA
    argvar (measure 'inventory') = 'weightby debt'
    
  8. ここで、次の文を発行してaggmapを作成します。

    DEFINE sales.agg AGGMAP <time, CP<product geography>>
    AGGMAP
    RELATION time.r OPERATOR opvar ARGS argvar
    RELATION product.r OPERATOR opvar2 ARGS argvar2
    RELATION geography.r OPERATOR opvar2 ARGS argvar2
    MEASUREDIM measure
    END
    
  9. 最後に、次の文を使用して4つの変数すべてを集計します。

    AGGREGATE sales debt interest_rate inventory USING sales.agg
    

例9-8 プログラムによるaggmapの定義

次のプログラムでは、EXISTSファンクションを使用して、AGGMAPが存在しているかどうかをテストし、存在しない場合はAGGMAPを定義します。その後、AGGMAP文を使用してaggmapの仕様を定義します。

DEFINE MAKEAGGMAP PROGRAM
LD Create dynamic aggmap
PROGRAM
IF NOT EXISTS ('test.agg')
   THEN DEFINE test.agg AGGMAP <geography product channel time>
   ELSE CONSIDER test.agg
AGGMAP JOINLINES(-
   'RELATION geography.parentrel PRECOMPUTE (geography.lvldim 2 4)' -
   'RELATION product.parentrel' -
   'RELATION channel.parentrel' -
   'RELATION time.parentrel' -
   'END')
END

例9-9 入力ファイルを使用したaggmapの作成

次のaggmap定義および仕様を含む、salesagg.txtという名前のディスク・ファイルを作成したとします。

DEFINE sales.agg AGGMAP <time, product, geography>
AGGMAP
RELATION time.r PRECOMPUTE (time NE 'Year99')
RELATION product.r PRECOMPUTE (product NE 'ALL')
RELATION geography.r
CACHE STORE
END

sales.agg aggmapをアナリティック・ワークスペースに含めるには、次の文を実行します。ここで、infはファイルが格納されているディレクトリの別名です。

INFILE 'inf/salesagg.txt'

これで、sales.agg aggmapが定義され、3つのRELATION文とCACHE文が含まれるようになりました。この例では、Year99timeディメンション値を持つデータを除き、timeディメンションの階層time.rのデータをすべて集計することを指定しています。さらに、Allproductディメンション値を持つデータ以外の、productディメンションの階層product.rの全データを集計しています。geographyディメンション値はすべて集計されます。CACHE STORE文は、その場でロールアップされるすべてのデータを1度のみ計算し、その値を同じセッション中に他のアクセス要求のキャッシュに格納することを指定します。

これで、次のようにAGGREGATEコマンドを実行してsales.agg aggmapを使用できるようになります。

AGGREGATE sales USING sales.agg

この例では、timeディメンションのYear99値、またはproductディメンションのAll値によってディメンション化されるすべてのデータ値が、即時計算されます。他のデータはすべて集計され、アナリティック・ワークスペースに格納されます。

例9-10 複数のaggmapの使用

予測を使用する場合、その予測で必要となるすべての入力データが事前計算されていることを確認する必要があります。事前計算されていないと、予測は不適切なデータまたは存在しないデータを使用します。たとえば、予測ですべての明細項目を集計する必要があるとします。timelinedivisionによってディメンション化されるbudget変数を使用する場合、1つの方法としてlineディメンションの完全な集計を実行してDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションを予測し、残りのディメンションdivisionを集計するという方法があります。

この処理は、次の3つのaggmapオブジェクトを定義することにより可能になります。

  1. forecast.agg1という名前の最初のaggmapを定義しますが、これは、予測で必要とされるデータを集計します。これには、次の文が含まれます。

    RELATION line.parentrel
    
  2. forecast.agg2という名前の2番目のaggmapを定義しますが、これは、最初のaggmapおよび予測を使用して生成されるデータを集計します。これには、次の文が含まれます。

    RELATION division.parentrel PRECOMPUTE ('L3')
    
  3. forecast.agg3という名前の3番目のaggmapを定義します。これには、最初の2つのaggmap仕様にあるRELATION文が含まれます。

    RELATION line.parentrel
    RELATION division.parentrel PRECOMPUTE ('L3')
    

予測がfore.prgという名前のプログラムにある場合、次の文を使用してデータを集計します。

AGGREGATE budget USING forecast.agg1   "Aggregate over LINE 
CALL fore.prg                          "Forecast over TIME
AGGREGATE budget USING forecast.agg2   "Aggregate over DIVISION
"Compile the limit map for LINE and DIVISION
COMPILE forecast.agg3
"Use the combined aggmap for the AGGREGATE function
CONSIDER budget
PROPERTY 'NATRIGGER' 'AGGREGATE(budget USING forecast.agg3)'

例9-11 集計仕様におけるAGGINDEX文の使用方法

次の定義を持つ2つの変数sales1およびsales2があるとします。

DEFINE sales1 DECIMAL <time, SPARSE<product, channel, customer>>
DEFINE sales2 DECIMAL <time, SPARSE<product, channel, customer>>

ディスク領域が限られていてパフォーマンスを向上させる必要があるため、salesデータをすべて事前計算してデータベースにコミットすることを避けたいとします。そのためにはaggmapを作成し、事前計算するデータと即時計算するデータを指定する必要があります。

次の文を使用して、sales.aggという名前のaggmapを定義します。

DEFINE sales.agg AGGMAP <time, SPARSE<product, channel, customer>>

次に、AGGMAP文を使用して、次のようなsales.aggの仕様を入力します。

RELATION time.r PRECOMPUTE (time NE 'Year99')
RELATION product.r PRECOMPUTE (product NE 'All')
RELATION channel.r
RELATION customer.r
AGGINDEX NO

この集計仕様によって、Oracle OLAPは、Year99timeディメンション値またはAllproductディメンション値を持つデータを除き、それ以外のすべてのsalesデータをロールアップして、データベースにコミットします(処理されなかったセルのデータは、ユーザーが最初にそれらにアクセスしたときに計算されます)。AGGINDEX値がNOの場合は、Oracle OLAPに、即時計算するデータの索引を作成しないことを認識させることができます。

ここで、次の文を実行します。

sales2 = AGGREGATE(sales1 USING sales.agg) ACROSS SPARSE -
   <product, channel, customer>

これで、sales2にはsales1にあるすべてのデータと、Year99の集計されたすべてのデータが格納されるようになります。これは、timeがコンポジットに含まれていないためです。

一方、Allproduct値の集計データは計算されず、sales2には格納されません。このデータが計算も格納もされないのは、productディメンションがコンポジットに含まれているためであり、コンポジットに含まれるディメンションに必要な索引は、集計仕様にAGGINDEX NO文が含まれているため作成されませんでした。索引が存在しなかったため、Oracle OLAPはAGGREGATEファンクションをコールして即時計算すべきデータを計算しませんでした。

例9-12 ディメンション属性による集計

販売を行っているある会社で、顧客の名前、性別、年齢および販売量の記録を保持するとします。このデータを保持するため、アナリティック・ワークスペースにcustomerという名前のディメンションと、customerによってディメンション化される3つの変数(customer_sexcustomer_agesalesという名前)を含めます。

 REPORT W 14 <customer_sex customer_age sales>

CUSTOMER        CUSTOMER_SEX   CUSTOMER_AGE      SALES
-------------- -------------- -------------- --------------
Clarke         M                          26      26,000.00
Smith          M                          47      15,000.00
Ilsa           F                          24      33,000.00
Rick           M                          33      22,000.00

性別および年齢を基準とした詳細売上データを集計して、男性および女性に対する販売量と、異なる年齢層に対する販売量を計算します。このデータを保持するには、性別および年齢の階層ディメンションによってディメンション化されるINTEGER変数が必要です。Oracle OLAPが実行する計算を指定するaggmapオブジェクトも必要になり、Oracle OLAPはその計算でsales変数のデータをこの変数に移入します。

必要なオブジェクトを作成および移入する手順は、次のとおりです。

  1. sexおよびageという名前のディメンション、および階層ディメンションのセルフ・リレーションを作成して移入します。

    DEFINE sex DIMENSION TEXT
    DEFINE sex.parentrel RELATION sex <sex>
    DEFINE age DIMENSION TEXT
    DEFINE age.parentrel RELATION age <age>
    
    AGE               AGE.PARENTREL
    -------------- --------------------
    0-20           All
    21-30          All
    31-50          All
    51-100         All
    No Response    All
    All            NA
    
    SEX               SEX.PARENTREL
    -------------- --------------------
    M              All
    F              All
    No Reponse     All
    All            NA
    
  2. ageおよびsexディメンションをcustomerディメンションにマップするリレーションを作成して移入します。

    DEFINE customer.age.rel RELATION age <customer>
    DEFINE customer.sex.rel RELATION sex <customer>
    
    CUSTOMER         CUSTOMER.AGE.REL     CUSTOMER.SEX.REL
    -------------- -------------------- --------------------
    Clarke         21-30                M
    Smith          31-50                M
    Ilsa           21-30                F
    Rick           31-50                M
    
  3. 集計データを保持するsales_by_sex_ageという名前の変数を作成します。sales変数と同様に、この変数の型はDECIMALですが、customerではなくsexおよびageによってディメンション化されます。

    DEFINE sales_by_sex_age VARIABLE DECIMAL <sex age>
    
  4. sales_by_sex_age変数の値を計算する、ssa_aggmapという名前のAGGMAP型のaggmapオブジェクトを定義します。

    DEFINE SSA_AGGMAP AGGMAP
    AGGMAP
    RELATION sex.parentrel OPERATOR SUM
    RELATION age.parentrel OPERATOR SUM
    BREAKOUT DIMENSION customer -
    BY customer.sex.rel, customer.age.rel OPERATOR SUM
    END
    

    ssa_aggmapの仕様に、次の文が含まれていることに注意してください。

    • sales変数のcustomerディメンションをsales_by_sex_age変数の最下位レベルの値にマップする方法を指定する、BREAKOUT DIMENSION文。この文は、詳細値(つまりcustomer)を含む変数のディメンション名と、customerディメンションとsexおよびageディメンションの間のリレーションを定義するリレーション名(customer.sex.relおよびcustomer.age.rel)を指定します。

    • sales_by_sex_age変数のsexおよびageディメンションを集計する方法を指定する、2つのRELATION文。それらの各文には、階層ディメンション(sexまたはage)のセルフ・リレーションを定義する子と親のリレーション(sex.parentrelまたはage.parentrel)の名前が含まれます。

  5. 集計の詳細データをsales変数から取得することを指定するAGGREGATEコマンドを発行することにより、sales_by_sex_age変数を移入します。

    AGGREGATE sales_by_sex_age USING ssa_aggmap FROM sales 
    

    集計を実行すると、sales_by_sex_ageのレポートに計算された値が示されます。

                   ---------------------SALES_BY_SEX_AGE----------------------
                   ----------------------------SEX----------------------------
    AGE                  M              F          No Reponse        All
    -------------- -------------- -------------- -------------- --------------
    0-20                       NA             NA             NA             NA
    21-30               26,000.00      33,000.00             NA      59,000.00
    31-50               37,000.00             NA             NA      37,000.00
    51-100                     NA             NA             NA             NA
    No Response                NA             NA             NA             NA
    All                 63,000.00      33,000.00             NA      96,000.00
    

例9-13 集計仕様におけるCACHE文の使用方法

次の定義を持つsales変数があるとします。

DEFINE sales DECIMAL <time, SPARSE<product, channel, customer>>

ディスク領域が限られていてパフォーマンスを向上させる必要があるため、salesデータを事前計算してデータベースにコミットすることを避けたいとします。そのためにはaggmapを作成し、事前計算するデータと即時計算するデータを指定する必要があります。

次の文を使用して、sales.aggという名前のaggmapを定義します。

DEFINE sales.agg AGGMAP <time, SPARSE<product, channel, - customer>>

次に、AGGMAP文を使用して、次のようなsales.aggの集計仕様を入力します。

AGGMAP
RELATION time.r PRECOMPUTE (time NE 'YEAR99')
RELATION product.r PRECOMPUTE (product NE 'ALL')
RELATION channel.r
RELATION customer.r
CACHE SESSION
END

この集計仕様によって、Oracle OLAPに、Year99の時間ディメンション値またはALLのproductディメンション値を持つセルを除き、それ以外のすべてのsalesデータをロールアップしてコミットすることを認識させることができ、処理されなかったセルのデータは、ユーザーが最初にそれらにアクセスしたときに計算されます。CACHE文がSESSIONキーワードを使用するため、それらのセルが即時計算される際、データが残りのOracle OLAPセッションのキャッシュに格納されることを意味します。そのようにして、次回ユーザーが同じセルにアクセスするときに、データを再び計算する必要がなくなります。かわりにデータはセッション・キャッシュから取得されます。

例9-14 詳細レベルを除くすべての階層レベルの移入

アナリティック・ワークスペースに次の定義を持つリレーションおよびディメンションが含まれるとします。

DEFINE geog.d TEXT DIMENSION
DEFINE geog.r RELATION geog.d <geog.d>
DEFINE sales_by_units   INTEGER VARIABLE <geog.d>
DEFINE sales_by_revenue DECIMAL VARIABLE <geog.d>
DEFINE price_per_unit   DECIMAL VARIABLE <geog.d>

2つのaggmapオブジェクトを作成するとします。1つのaggmapオブジェクトはunits_aggmapという名前で、sales_by_units変数のデータを集計する仕様です。もう1つのaggmapオブジェクトrevenue_aggmapは、sales_by_revenue変数の詳細データを除くすべてのデータを計算する仕様です。

DEFINE units_aggmap AGGMAP
AGGMAP
  RELATION geog.r OPERATOR SUM
END

DEFINE revenue_aggmap AGGMAP
AGGMAP
  RELATION geog.r OPERATOR WSUM ARGS WEIGHTBY price_per_unit
  CACHE NOLEAF
END

次の手順は、集計プロセスの概要を示しています。

  1. sales_by_unitおよびsales_by_revenue変数の値は、どちらも集計されていないとき、次のようになっています。

    GEOG.D    SALES_BY_UNIT SALES_BY_REVENUE
    --------- ------------- ----------------
    Boston                1               NA
    Medford               2               NA
    San Diego             3               NA
    Sunnydale             4               NA
    MA                    NA              NA             
    CA                    NA              NA
    USA                   NA              NA
    
  2. sales_by_unit変数のデータが集計されると、sales_by_unitおよびsales_by_revenue変数の値は次のようになります。

    AGGREGATE sales_by_unit    USING units_aggmap
    
    GEOG.D    SALES_BY_UNIT SALES_BY_REVENUE
    --------- ------------- ----------------
    Boston                1               NA
    Medford               2               NA
    San Diego             3               NA
    Sunnydale             4               NA
    MA                    3               NA             
    CA                    7               NA
    USA                  10               NA
    
  3. sales_by_revenue変数のデータが集計されると、sales_by_unitおよびsales_by_revenue変数の値は次のようになります。

    AGGREGATE sales_by_revenue USING revenue_aggmap FROM units_aggmap
    
    GEOG.D    SALES_BY_UNIT SALES_BY_REVENUE
    --------- ------------- ----------------
    Boston                1               NA
    Medford               2               NA
    San Diego             3               NA
    Sunnydale             4               NA
    MA                    3             13.5             
    CA                    7             31.5
    USA                  10             45.0
    

例9-15 異なる変数への集計

階層ディメンションtimeおよび非階層ディメンションdistrictによってディメンション化される、salesという名前の変数があるとします。

DEFINE time DIMENSION TEXT
DEFINE time.parentrel RELATION time <time>
DEFINE district DIMENSION TEXT
DEFINE sales VARIABLE DECIMAL <time district>

             -----------------------SALES-----------------------
             ---------------------DISTRICT----------------------
TIME            North        South         West         East
------------ ------------ ------------ ------------ ------------
1976Q1         168,776.81   362,367.87   219,667.47   149,815.65
1976Q2         330,062.49   293,392.29   237,128.26   167,808.03
1976Q3         304,953.04   354,240.51   170,892.80   298,737.70
1976Q4         252,757.33   206,189.01   139,954.56   175,063.51
1976                   NA           NA           NA           NA

さらに、North地区を除くすべての地区の、各四半期および年の売上総額を計算するとします。aggmapオブジェクトを使用してこの計算を実行する手順は、次のとおりです。

  1. データを集計する地区の値を表すnot_northという名前の値セットを作成します。

    DEFINE not_north VALUESET district
    LIMIT not_north TO ALL
    LIMIT not_north REMOVE 'North'
    
  2. 計算結果を保持するtotal_sales_exclud_northという名前の変数を定義します。

    DEFINE total_sales_exclud_north VARIABLE DECIMAL <time>
    

    salesのように、total_sales_exclud_north変数はtimeによってディメンション化されることに注意してください。ただし、salesとは異なり、この変数は各地区の詳細データを保持しますが、SouthWestおよびEast地区(つまりNorthを除くすべての地区)の(集計された)総計値のみであるため、total_sales_exclud_north変数はdistrictによってはディメンション化されません。

  3. 実行する計算を指定するaggmapオブジェクトを定義します。

    DEFINE agg_sales_exclud_north AGGMAP
    AGGMAP
    RELATION time.parentrel OPERATOR SUM
    DROP DIMENSION district OPERATOR SUM VALUES not_north
    END
    

    集計仕様は、集計の実行方法を指定する次の2つの文で構成されることに注意してください。

    • 階層ディメンションtimeでの集計方法を指定するRELATION文。

    • 非階層ディメンションdistrictにまたがる集計方法を指定するDROP DIMENSION文。この場合、DROP DIMENSIONは、集計の実行時にNorth地区の値を除外するように指定するnot_north値セットも使用します。

  4. データを集計します。

    AGGREGATE total_sales_exclud_north USING agg_sales_exclud_north FROM sales
    

    total_sales_exclud_north変数のレポートに、集計された値が出力されます。

    TIME             ALL_SALES_EXCEPT_NORTH
    ------------ ------------------------------
    1976Q1                           731,850.99
    1976Q2                           698,328.58
    1976Q3                           823,871.02
    1976Q4                           521,207.09
    1976                           2,775,257.69
    

例9-16 集計仕様におけるMEASUREDIM文の使用方法

measureという名前のメジャー・ディメンションを定義したとします。その後、measureによってディメンション化されるmyopvarという名前の演算変数を定義します。集計仕様でmyopvarを使用する場合、ディメンションがmyopvarの定義に含まれるため、measureを識別するMEASUREDIM文も含める必要があります。

MEASUREDIM文は、次の例に示されるように、集計仕様にある最後のRELATION文の後に記述します。

DEFINE sales.agg AGGMAP <time, product, geography>
AGGMAP
RELATION time.r OPERATOR myopvar
RELATION product.r
RELATION geography.r
MEASUREDIM measure
END 

例9-17 集計におけるモデルの解決

この例では、budget変数を使用します。

DEFINE budget VARIABLE DECIMAL <line time>
LD Budgeted $ Financial

timeディメンションには、次のように2つの階層(StandardおよびYTD)と、time.parentrelという名前の親リレーションがあります。

               -----TIME.PARENTREL------
               ----TIME.HIERARCHIES-----
TIME             Standard       YTD
-------------- ------------ ------------
Last.YTD       NA           NA
Current.YTD    NA           NA
Jan01          Q1.01        Last.YTD
...
Dec01          Q4.01        Last.YTD
Jan02          Q1.02        Current.YTD
Feb02          Q1.02        Current.YTD
Mar02          Q1.02        Current.YTD
Apr02          Q2.02        Current.YTD
May02          Q2.02        Current.YTD
Q1.01          2001         NA
...
Q4.01          2001         NA
Q1.02          2002         NA
Q2.02          2002         NA
2001           NA           NA
2002           NA           NA

明細項目間のリレーションシップは、次のモデルで定義されます。

DEFINE income.budget MODEL
MODEL
DIMENSION line time
opr.income = gross.margin - marketing
gross.margin = revenue - cogs
revenue = LAG(revenue, 12, time) * 1.02
cogs = LAG(cogs, 1, time) * 1.01
marketing = LAG(opr.income, 1, time) * 0.20
END

次の集計仕様は、すべてのデータを事前集計します。モデルにはLAGファンクションと連立方程式の両方が含まれるため、すべてのデータを事前集計する必要がある点に注意してください。

DEFINE budget.aggmap1 AGGMAP
AGGMAP
MODEL income.budget
RELATION time.parentrel
END

例9-18 階層での集計

次の文でsales変数を定義するとします。

DEFINE sales VARIABLE <time, SPARSE <product, geography>>

salesの集計仕様には、次のようなRELATION文が含まれることがあります。

AGGMAP
RELATION time.r PRECOMPUTE ('Yr98', 'Yr99')
RELATION product.r
RELATION geography.r PRECOMPUTE (geography NE 'Atlanta')
END

AGGREGATEコマンドは、すべての製品およびAtlantaを除くすべての地域に関する、Yr98およびYr99の値を集計します。他のすべての集計は、即時計算されます。

例9-19 値セットの使用

time.typeという名前の階層ディメンションがあり、そのディメンション値は順番にFiscalおよびCalendarであるとします。それらの階層は競合しており、一部のtimeデータを事前計算して、残りを即時計算するとします。Calendar階層は階層ディメンションにおける最後のディメンション値であるため、値セットを定義してFiscal階層の正しい結果を取得する必要があります。

まず、次の文を使用して値セットを定義および移入します。

DEFINE time.vs VALUESET time
LIMIT time.vs TO 'Calendar' 'Fiscal'

次に、次のRELATION文で値セットを使用できます。Fiscal階層は値セットにおける最後の階層であるため、集計されるデータはFiscal階層に対して正確になります。

RELATION time.r(time.vs) PRECOMPUTE ('Yr99', 'Yr00')

例9-20 ARGSキーワードを使用するRELATION文による集計

RELATION文の引数を文に直接、またはテキスト変数の値として指定できます。たとえば、次の文はWEIGHTBY wobjを引数として指定します。

RELATION time.r OPERATOR wsum ARGS WEIGHTBY wobj

または、値がWEIGHTBY句のテキストである引数の変数を定義できます。

DEFINE argvar TEXT
argvar = 'WEIGHTBY wobj'

その後、RELATION文はWEIGHTBY句を含むテキスト変数を指定できます。

RELATION time.r OPERATOR WSUM ARGS argvar

例9-21 メジャー・ディメンションを使用した集計

単一のAGGREGATEコマンドを使用して、salesunitspriceおよびinventory変数を集計するとします。各変数に同じ演算子を使用する場合、メジャー・ディメンションを使用する必要はありません。しかし、異なる集計演算を指定する場合は、メジャー・ディメンションを使用する必要があります。

次の文では、measureという名前のディメンションが定義されます。

DEFINE measure DIMENSION TEXT

その後、MAINTAIN文を使用して、ディメンション値をmeasureディメンションに追加できます。

MAINTAIN measure ADD 'sales', 'units', 'quota', 'inventory'

measureディメンションを使用して、演算子変数として使用するmeas.opvarという名前のテキスト変数をディメンション化します。

DEFINE meas.opvar TEXT WIDTH 2 <measure>

次の文では、OPVARに値が追加されます。

meas.opvar (measure 'sales') = 'SU'
meas.opvar (measure 'units') = 'SU'
meas.opvar (measure 'price') = 'HA'
meas.opvar (measure 'inventory') = 'HL'

集計仕様は、次のようになる可能性があります。RELATION文に演算子変数を指定する場合、メジャー・ディメンション(次の例ではmeasure)の名前を指定するMEASUREDIM文を集計仕様に含める必要があります。

DEFINE opvar.aggmap AGGMAP
AGGMAP
RELATION geography.parentrel PRECOMPUTE (geography.lvldim 2 4)
RELATION product.parentrel OPERATOR opvar
RELATION channel.parentrel OPERATOR opvar
RELATION time.parentrel OPERATOR opvar
MEASUREDIM measure
END

例9-22 明細項目ディメンションを使用した集計

2つの変数actualおよびbudgetがあり、次のディメンションを持つとします。

<time line division>

様々な方法を使用して、様々な明細項目を計算します。演算子変数として使用するテキスト変数を作成します。

DEFINE line.opvar TEXT WIDTH 2 <line>

その後、各明細項目に適切な演算子を含むline.opvarを移入します。たとえば、次のようになります。

line.opvar (line 'Net.Income') = 'SU'
line.opvar (line 'Tax.Rate') = 'AV'

 集計仕様は、次のようになる可能性があります。

DEFINE LINE.AGGMAP AGGMAP
AGGMAP
RELATION time.parentrel OPERATOR line.opvar
RELATION division.parentrel
END

例9-23 スキップレベル集計

salesデータを集計するとします。sales変数は、geographyproductchannelおよびtimeによってディメンション化されます。

まず、各ディメンションの階層を検討します。各階層にいくつレベルがあるか。ユーザーが通常問合せを行うデータのレベルはどれか。新規ワークスペースを設計するのはいつか、ユーザーが問い合せを予定するデータのレベルはどれか。

ユーザーがtime階層のsalesデータを問い合せるかどうかについて、次の表にある情報を把握できたとします。

時間レベル名 記述レベル名 ディメンション値の例 ユーザーは通常このレベルの問合せを行うか
L1 Year99Year00 はい
L2 四半期 Q3.99Q3.99Q1.00 はい
L3 Jan99Dec00 はい

一方、次の表はユーザーがgeography階層のsalesデータをどのような方法で問い合せるかを示しています。

地理的レベル名 記述レベル名 ディメンション値の例 ユーザーは通常このレベルの問合せを行うか
L1 世界 World はい
L2 大陸 Europe、Americas いいえ
L3 Hungary、Spain はい
L4 都市 Budapest、Madrid はい

最後に、次の表はユーザーがproductディメンション階層のsalesデータをどのような方法で問い合せるかを示しています。

製品レベル名 記述レベル名 ディメンション値の例 ユーザーは通常このレベルの問合せを行うか
L1 全製品 Totalprod はい
L2 部門 Audiodiv、Videodiv はい
L3 カテゴリ TV、VCR はい
L4 製品 Tuner、CDplayer はい

ユーザーがデータを問い合せる方法に関するこれらの情報を活用して、次のような集計の方針を採用します。

  • すべてのレベルに対して問合せが頻繁に行われるため、timeおよびproductを完全に集計します。

  • geographyディメンションについては、頻繁に問合せが行われるL1(World)およびL3(Country)のデータを集計します。しかし、L2に対する問合せは少ないため、即時計算します。

最下位レベルのデータは、アナリティック・ワークスペースにロードされます。集計データは、このソース・データから計算されます。

このため、集計仕様は次のようになる可能性があります。

RELATION time.parentrel
RELATION geography.parentrel PRECOMPUTE (geog.leveldim 'L3' 'L1')
RELATION product.parentrel

例9-24 PRECOMPUTE句を含むRELATION文を使用した集計仕様

この集計仕様は、RELATION文にPRECOMPUTE句を使用して、AGGREGATEコマンドにより集計されるデータを制限します。

DEFINE gpct.aggmap AGGMAP
LD Aggmap for sales, units, quota, costs
AGGMAP
RELATION geography.parentrel PRECOMPUTE (geography.levelrel 'L3')
RELATION product.parentrel PRECOMPUTE (LIMIT(product complement 'TotalProd'))
RELATION channel.parentrel
RELATION time.parentrel PRECOMPUTE (time NE '2001')
END

AGGINDEX

集計仕様で、AGGINDEX文は、AGGREGATEファンクションにより即時計算されるデータ・セルの索引(コンポジット・タプルを意味する)がaggmapのコンパイルによって作成されるかどうかを、Oracle OLAPに認識させます。したがって、AGGINDEX文はコンポジットに含まれるディメンションには影響を与えますが、コンポジットに含まれないディメンションには影響を与えません。

それらの索引は、AGGMAPのMODEL文、およびACROSS句を使用する文で使用され、Oracle OLAPがコンポジットによってディメンション化される変数をループ処理するのに役立ちます。それらの文を使用すると、すべてのデータが計算されます。その場で一部のデータを計算するように指定する場合、そのデータが欠落しているように見えます。AGGINDEXをYESに設定すると、AGGREGATEファンクションを使用して即時計算を実行する(つまり、データを集計する変数に、AGGREGATEファンクションをコールするNAトリガー・プロパティを追加する)かどうかに関係なく、文は欠落しているデータへのアクセスを試みます。

索引が作成されていて、AGGREGATEファンクションとともにAGGREGATIONを使用する場合、MODEL(またはACROSS句を使用する文)が欠落しているデータを要求すると、そのデータは即時計算されます。これは、文には必要なすべてのデータが含まれているため、MODEL(または他の文)の結果が正しいことを意味します。

それらの索引が作成されない場合、欠落しているデータは計算されません。したがって、AGGREGATEファンクションを使用した場合でも、索引が必要な文は欠落しているデータをNAデータとして解釈します。

構文

AGGINDEX {YES|NO}

パラメータ

YES

(デフォルト)AGGMAPコンパイラに、aggmapが再コンパイルされた場合は必ず、作成可能なすべての索引が作成されたことを確認するように指定します。つまり、事前計算されるデータと、即時計算されるデータの両方の索引が作成されます。データの再計算は、COMPILE文がaggmapをコンパイルする場合や、最後にコンパイルされたときからその仕様が変更されたaggmapを、AGGREGATEコマンドがコンパイルする場合に即時実行されます。作成可能なすべての索引を作成することにより、コンパイル時間は長くなりますが、AGGREGATEファンクションの実行は速くなります。AGGINDEXをYESに設定する必要がある場合の詳細は、「値がYESのAGGINDEXを使用する場合」を参照してください。

NO

即時計算されるデータの索引を作成しません。それらの索引値の作成を省略するとコンパイル時間は短縮されますが、Oracle OLAPは、AGGMAPのMODEL文またはACROSS句が実行されている場合は必ず、計算されていないデータをNAデータとして処理します。AGGINDEXをNOに設定する必要がある場合の詳細は、「値がNOのAGGINDEXを使用する場合」を参照してください。

使用上の注意

値がYESのAGGINDEXを使用する場合

値がYESのAGGINDEXを使用する主な利点は、即時計算されるように指定したデータにOracle OLAPが常にアクセスする点です。AGGREGATEファンクションをコールする変数の$NATRIGGERプロパティを作成した場合、変数は完全に事前計算されたように見えます。これは、NA値が検出された場合、AGGMAPのMODEL文またはACROSS句の実行時にNAトリガーがコールされることを意味します。NAトリガーがコールされると、AGGREGATEファンクションが実行され、データが即時計算されます。

AGGINDEXの値がNOの場合、NAトリガーはコンポジットに含まれていないディメンションのデータを集計する目的でのみコールされます。コンポジットに含まれているディメンションのデータは、NA値として解釈されます。

たとえば、次の定義を持つ2つの変数sales1およびsales2があるとします。

DEFINE sales1 DECIMAL <time, SPARSE <product, geography>>
DEFINE sales2 DECIMAL <time, SPARSE <product, geography>>

次に、次の定義を持つsales.aggという名前のaggmapオブジェクトがあるとします。

DEFINE sales.agg AGGMAP <time, SPARSE <product, geography>>

仕様をsales.agg aggmapに追加する場合、timeproductおよびgeographyについて、NAを指定するPRECOMPUTE句を含めたRELATION文を入力します。これにより、どのデータも集計されなくなります。かわりに、このaggmapを使用する変数のすべてのデータが即時計算されます。

RELATION time.r PRECOMPUTE (NA)
RELATION product.r PRECOMPUTE (NA)
RELATION geography.r PRECOMPUTE (NA)

ここで、次の$NATRIGGERプロパティをsales1変数にアタッチします。

CONSIDER sales1
PROPERTY '$NATRIGGER' 'AGGREGATE(sales1 USING sales.agg)'

次の文におけるAGGINDEXの影響を検討します。sales.agg集計仕様にAGGINDEX文を入力しなかったため、AGGINDEXのデフォルト値YESが想定されます。

sales2 = sales1 ACROSS SPARSE <product, geography>

この文は、sales1のデータをループ処理し、値をsales2にコピーします。この文により、NAトリガーは、sales1で即時計算されるように指定されたすべてのデータにAGGREGATEファンクションをコールします。したがって、集計後にsales2にはsales1のコピーに加えて、すべての集計データ・セル(sales1データが完全に事前計算された、つまり完全にロールアップされた場合に計算されるセル)が含まれます。

ただし、sales.agg集計仕様にAGGINDEX NO文を配置した場合、sales2にはsales1のデータのコピーと、timeディメンションの集計データ・セルが含まれます。

timeディメンションはコンポジットに含まれておらず、AGGINDEXの値はそれに影響を与えないため、どちらの場合も$NATRIGGERがコールされてtimeデータを集計することに注意してください。

値がNOのAGGINDEXを使用する場合

次のいずれかに当てはまることがわかっている場合、値がNOのAGGINDEXを使用できます。

  • アプリケーションがAGGMAPコマンドのMODEL文またはACROSS句を含まない。

  • MODEL文またはACROSS句の結果が加算によるもので、集計が必要なデータを安全に即時計算できる。

この2つの場合には、即時計算するように指定したデータが、適切な時期に確実に使用できます。

AGGINDEXをNOに設定すると、索引のサイズが減少され、アプリケーションの全体的なパフォーマンスが向上します。

値がNOのAGGINDEXを使用して問題が発生する場合

MODELを実行して集計対象のすべてのデータが集計されたと想定される場合に、実際のデータが存在する場所でNAデータが取得されることがあります。たとえば、timeディメンションを含むコンポジットを持つ変数があるとします。年間総計から4番目の四半期を減算する計算を実行します。Yearの値が動的に計算され、AGGINDEX文がNOに設定されている場合、計算の結果はNAとなります。Yearの値が事前計算されたか、AGGINDEXがYESに設定されている場合、MODELは最初の3つの四半期の合計に等しい結果を正しく計算します。

既存のデータに基づいた索引の作成

AGGINDEXの値がYESの場合、既存のデータの集計に必要な索引のみが作成されます。たとえば、コンポジットのディメンションの1つがtimeという名前であるとします。timeディメンションの最下位レベルのデータは、月レベルです。そのため、最下位レベルのデータに関連付けされたディメンション値は、Jan99Feb99などです。月のデータが、四半期および年に集計されます。年の最初の6か月のデータがあるとします。AGGINDEXの値がYESの場合、Q1Q2およびYr99ディメンション値の索引が作成されますが、Q3およびQ4には作成されません。

AGGINDEXがYESの場合のコンパイル時間の削減

AGGINDEXのデフォルト値YESを使用する場合のデメリットは、aggmapのコンパイルが完了するまでに時間がかかることです。AGGREGATEコマンドとともにFUNCDATAキーワードを使用することにより、この余分な時間のコストを削減できます。FUNCDATAキーワードを使用する場合、作成可能なすべての索引が(データの制限方法に関係なく)作成されます。ただし、別のaggmapを使用してAGGREGATEコマンドおよびAGGREGATEファンクションを実行する場合は、FUNCDATAキーワードを使用しないでください。

AGGINDEX文の使用例は、例9-11「集計仕様におけるAGGINDEX文の使用方法」を参照してください。


BREAKOUT DIMENSION

集計仕様内では、BREAKOUT DIMENSION文によって、ターゲット変数のディメンションをソース変数の1つ以上のディメンションにマップする方法が指定されています。この文は、ある変数(ソース変数)から、詳細データを含む変数ではなく異なるディメンション(分割ディメンション)を持つ別の変数(ターゲット変数)に詳細データを集計する場合に、集計仕様で使用できます。

構文

BREAKOUT DIMENSION dimname BY relation [, relation...] -

     OPERATOR operation [ARGS argument]

ここで、

relationの構文は次のとおりです。

relationname [IGNORE ignore_dim_value [DEFAULT default_dim_value]]

argumentには、様々なオプションの設定を指定します。次の1つ以上の句を指定できます。


     DIVIDEBYZERO {YES|NO}
     DECIMALOVERFLOW {YES|NO}
     NASKIP {YES|NO}
     WEIGHTBY [WNAFILL {number | NA}] wobj

パラメータ

dimname

詳細データ(つまり、ソース変数)を含む変数内のディメンションの名前。

relationname

リレーションの名前。その値が、ターゲット変数のディメンションをdimnameに関連付けます。

IGNORE ignore_dim_value

このパラメータを指定すると、ignore_dim-valueで指定した値に対してターゲット・ディメンションがQDRを設定している場合、AGGREGATEはrelationnameで指定したリレーションをソース・ディメンションの制限に使用しません。

DEFAULT default_dim_value

このパラメータを指定すると、すべてのリレーションにIGNORE句が含まれている場合、AGGREGATEはQDRの作成にリレーションを使用せずに、default_dim-value値で指定された値を使用します。すべてのリレーションにIGNORE句が含まれていて、かつDEFAULT句を指定していない場合、AGGREGATEは制限に使用するリレーションを任意に選択します。

ignore_dim-valueで指定したディメンション値に対してdimnameがQDRを設定している場合、AGGREGATEはrelationnameで指定したリレーションをソース・ディメンションの制限に使用しません。

OPERATOR

データの集計に使用される計算方法を識別します。

operation

実行する集計の種類を説明するキーワード。キーワードは、表9-1「集計方法」にリストされています。

ARGS

集計のオプション処理を示します。

DIVIDEBYZERO

ゼロによる除算を許可するかどうかを指定します。

YESはゼロによる除算を許可します。ゼロによる除算を伴う文がエラーなしで実行されますが、NA結果が生成されます。

NOはゼロによる除算を許可しません。ゼロによる除算を伴う文が実行を停止し、エラー・メッセージが生成されます。

デフォルト値は、DIVIDEBYZEROオプションの現行の値です。

DECIMALOVERFLOW

10進オーバーフローを許可するかどうかを指定します。10進オーバーフローは、計算結果が非常に大きく、数値表記の指数部分で表示できなくなった場合に発生します。YESを指定すると、オーバーフローを許可しますが、これは、オーバーフローを生成する計算がエラーなしで実行され、NA結果が生成されることを意味します。NOを指定すると、オーバーフローを許可しませんが、これは、オーバーフローを伴う計算が実行を停止し、エラー・メッセージが出力されることを意味します。デフォルト値は、DECIMALOVERFLOWオプションの現行の値です。

NASKIP

NA値が入力されるかどうかを指定します。集計時にOracle OLAPでNA値を無視する場合はYESを指定しますが、これによって、実際の値のみが計算に使用されます。Oracle OLAPでNA値も計算の対象とする場合は、NOを指定しますが、これによって、値のいずれかがNAとみなされると、計算によってNAが返されます。デフォルト値は、NASKIPオプションの現行値です。

NASKIP句に指定した値は、operationにHAVERAGE、HFIRST、HLAST、HWAVERAGE、HWFIRST、HWLASTを指定した場合に実行される計算に影響を与えません

WEIGHTBY

加重集計を実行することを示します。operationにHWAVERAGE、HWFIRST、HWLAST、SSUM、WAVERAGE、WFIRST、WLASTまたはWSUMを指定する場合は、WEIGHTBY句を含める必要があります。WEIGHTBY句には、常にwobj引数が含まれ、オプションでWNAFILLキーワードを含めることができます。WEIGHTBY句の使用の詳細は、AGGMAPコマンドのRELATION(集計用)文を参照してください。

WNAFILL

NA値の処理を示します。WNAFILLのデフォルト値は、演算の値に応じて異なります。

number

すべてのNA値の数を代替します。その数値は、加重オブジェクト、加重計算式または加重リレーション内のすべてのNA値を置き換えます。HWAVERAGEおよびSSUMのデフォルト、1.0がHWFIRST、HWLAST、WAVERAGE、WFIRST、WLASTおよびWSUMのデフォルトです。

NA

NA値をNAとして指定するように指定します。NAは、ORのデフォルトです。

WNAFILL句の使用の詳細は、AGGMAPコマンドのRELATION(集計用)文を参照してください。

wobj

加重値を提供する変数、計算式またはリレーション。数値またはブール値になります。wobjがブール値の場合、TRUEのとき加重は1.0となり、FALSEのときの加重は0.0となります。計算式および集計される変数のディメンション性に応じて、必要な場合のみ計算式に問合せが行われます。wobjがリレーションの場合、1次元のセルフ・リレーションになります。wobjの値の指定に関する詳細は、AGGMAPコマンドのRELATION(集計用)文を参照してください。

BREAKOUT DIMENSION文の使用例は、例9-12「ディメンション属性による集計」を参照してください。


CACHE

集計仕様のCACHE文によって、Oracle OLAPに、計算されたデータをキャッシュまたは格納するかどうか、変数データが他の変数からの詳細データを使用して集計された場合にリーフ・データまたは詳細データを移入するかどうか、サマリー値がNAと計算される場合にNA値をキャッシュするかどうかを認識させることができます。


注意:

CACHE文は、AGGREGATEファンクションを使用して即時集計された変数データを格納またはキャッシュするかどうかを決定する唯一の因子です。「集計データを格納またはキャッシュするかどうかのOracle OLAPによる決定方法」を参照してください。

構文

CACHE {NOSTORE|NONE|STORE|SESSION|DEFAULT} [LEAF|NOLEAF] [NA|NONA]

パラメータ

NONE
NOSTORE

AGGREGATEファンクションを使用して計算されるデータについて、AGGREGATEファンクションが実行されるたびにOracle OLAPがそのデータを計算するように指定します。この2つのキーワードのいずれかを指定した場合、Oracle OLAPはAGGREGATEファンクションによって計算されたデータを格納またはキャッシュしません。

STORE

AGGREGATEファンクションを使用して計算されるデータについて、AGGREGATEファンクションにより計算されたデータをOracle OLAPがデータベースの変数に格納するように指定します。このオプションを指定すると、アナリティック・ワークスペースが更新およびコミットされる際に、集計結果が永続的に変数に格納されます。

SESSION

AGGREGATEファンクションを使用して計算されるデータについて、AGGREGATEファンクションにより計算されたデータをOracle OLAPがセッション・キャッシュにキャッシュするように指定します(「Oracle OLAPセッション・キャッシュの概要」を参照)。このオプションを指定すると、集計結果が更新およびコミット中に無視され、セッション後に廃棄されます。


注意:

SESSCACHEがNOに設定されている場合、SESSIONを指定してもOracle OLAPはデータをキャッシュしません。この場合、SESSIONの指定は、NONEの指定と同じことになります。

DEFAULT

(デフォルト)AGGREGATEファンクションを使用して計算されるデータについて、そのデータの処理方法を決定する際、VARCACHEオプションの値を使用するように指定します。「集計データを格納またはキャッシュするかどうかのOracle OLAPによる決定方法」を参照してください。

LEAF

別の変数からの詳細データを使用して変数データが集計された場合、Oracle OLAPが変数のリーフ・データを計算するように指定します。

NOLEAF

(デフォルト)別の変数からの詳細データを使用して変数データが集計された場合、Oracle OLAPが変数のリーフ・データを計算しないように指定します。

NA

AGGREGATEファンクションを使用して計算されるデータについて、AGGREGATEファンクションの実行結果であるNA値がOracle OLAPセッション・キャッシュ内に格納されるように指定します。この場合、その式としてのAGGREGATEファンクションに$NATRIGGERプロパティを持つ変数が存在する場合、Oracle OLAPはその変数の値を再計算しません。(NA値のキャッシュの詳細は、「$NATRIGGERの結果を格納またはキャッシュするかどうかのOracle OLAPによる決定方法」を参照)。

NONA

AGGREGATEファンクションを使用して計算されるデータについて、AGGREGATEファンクションの実行結果であるNA値をOracle OLAPがキャッシュしないように指定します。この場合、その式としてのAGGREGATEファンクションに$NATRIGGERプロパティを持つ変数が存在する場合、Oracle OLAPはその変数の値を再計算します。

使用上の注意

NOSTOREを使用する場合

ユーザーが事前計算されたデータを修正する可能性があり、AGGREGATEファンクションにより計算されたすべてのデータとそれらのユーザーが変更した内容の一貫性を保つ場合は、NOSTOREを使用します。

つまり、geographyディメンションにある3つの店舗のsalesなど、詳細レベルのデータをユーザーが変更するとします。geographyディメンションは、店舗から都市、州、地域、国にデータをロールアップします。つまり、geographyディメンションの階層には5つのレベルがあります。ここで、ユーザーは店舗レベル(使用している詳細データ)、地域レベルおよび国レベルでのみデータにアクセスする傾向があるとします。それらが、売上データをロールアップして、それをデータベースにコミットするレベルです。ユーザーは都市および州レベルのデータにはアクセスしないため、それらの2つのレベルにあるデータ・セルは即時計算するように指定します。ユーザーが店舗レベルのデータを修正して、都市データにアクセスすると、ユーザーが要求するたびに都市データが計算されます。そのため、ユーザーが店舗レベルの詳細に対して行う変更内容により、ユーザーが都市または州レベルのデータ・セルにアクセスするたびに、都市および州レベルに正確にロールアップされます。(ただし、地域および国レベルのセルには事前計算されたデータが格納されているため、それらのセルには該当しません。)

STOREまたはSESSIONを使用する場合

STOREまたはSESSIONを使用する利点は、問合せのパフォーマンスが向上することです。たとえば、複数のユーザーが変数のデータを参照するために表ツールを使用し、個々のユーザーが同じデータ・セルを同じセッションで複数回要求するとします。デフォルトのNOSTOREを使用する場合、AGGREGATEコマンドを使用して集計されないデータは、AGGREGATEファンクションでFORECALCキーワードを使用しない場合でも、ユーザーがそのデータを要求するたびに計算される必要があります。一方、STOREまたはSESSIONを使用する場合、データの特定のセルは、変数またはセッション全体にわたるキャッシュのいずれかで使用できるため、一度のみ計算されます。そのため、次にユーザーがそのデータ・セルを要求する際、データは即時計算されるかわりに変数またはキャッシュから返されるため、ユーザーにとっては問合せ時間は短縮されます。

多くの場合、AGGREGATEファンクションを使用して計算されたデータは、即時計算の目的にそぐわないためデータベースに永続的には格納しません。

  • 集計された値が永続的にデータベースにコミットされないようにするには、SESSIONを使用します。

  • 次のいずれかに該当することがわかっていて、AGGREGATEファンクションを使用して即時計算されるデータがデータベースにコミットされることがない場合は、STOREを使用します。

    • アナリティック・ワークスペースのユーザーは、データを読取り専用としてのみ開くことができる。

    • アナリティック・ワークスペースのユーザーがUPDATE文およびCOMMIT文を発行できないことがわかっている。


      注意:

      STOREを使用する場合、ユーザーが事前計算されたデータを修正する可能性があり、AGGREGATEファンクションを使用して即時計算されるように指定したデータにユーザーがアクセスする場合は、注意して使用する必要があります。問題は、ユーザーがFORCECALCキーワードとともにAGGREGATEファンクションを使用して変更しないかぎり、または、集計対象の変数に$AGGREGATE_FORCECALCプロパティが存在しないかぎり、ユーザーが修正する前にAGGREGATEファンクションを使用して計算されたデータがユーザーの変更内容を反映しない点にあります。

集計仕様でCACHE文を使用する例は、例9-13「集計仕様におけるCACHE文の使用方法」および例9-14「詳細レベルを除くすべての階層レベルの移入」を参照してください。


DIMENSION(集計用)

集計仕様で、DIMENSION文はステータスをディメンションの単一の値に設定します。集計仕様がDIMENSION文によりそのような単一の値を指定しない場合、Oracle OLAPは集計の実行時にディメンションの現行のステータスの値を使用します。

DIMENSION文を使用して、ディメンションのステータスが、集計で使用する値に確実に設定されるようにします。ソース・オブジェクト、基礎オブジェクトおよびターゲット・オブジェクトによって共有されない各ディメンションには、個別のDIMENSION文を使用する必要があります。

構文

DIMENSION dimension 'dimval'

パラメータ

dimension

制限するディメンションの名前。

dimval

集計中にディメンション・ステータスを設定するディメンションの単一の値を表すTEXT式。


DROP DIMENSION

集計仕様で、DROP DIMENSION文は変数間の非階層集計の実行方法を指定します。この文は、ある変数(ソース変数)から別の変数(ターゲット変数)に詳細データを集計し、ソース変数の非階層ディメンションで集計を行う場合に、集計仕様で使用します。この場合、このディメンションに関連付けられたソース変数の値が、集計されてターゲット変数に移入されるため、ターゲット変数のディメンションはソース変数よりも1つ少なくなります(削除されたディメンション)。

構文

DROP DIMENSION dimname [VALUES {valsetname|ALL}  OPERATOR operation [ARGS argument]

ただし、argumentには、次の句のうち1つ以上を指定できます。

     DIVIDEBYZERO {YES|NO}

     DECIMALOVERFLOW {YES|NO}

     NASKIP {YES|NO}

     WEIGHTBY [WNAFILL {number|NA}] wobj

パラメータ

dimname

詳細データを含むソース変数内のディメンションの名前。

VALUES

集計中にdimnameのステータスを設定します。

valueset

dimnameにより指定されるディメンションのステータスを決定する値セット・オブジェクトの名前。

ALL

dimnameのすべての値をステータスにあるように指定します。

OPERATOR

データの集計に使用される計算方法を識別します。

operation

実行する集計の種類を説明するキーワード。キーワードは、表9-1「集計方法」にリストされています。

ARGS

集計のオプション処理を示します。

DIVIDEBYZERO

ゼロによる除算を許可するかどうかを指定します。YESを指定すると、ゼロによる除算が許可されますが、これによって、ゼロによる除算を伴う文がエラーなしで実行され、NA結果が生成されることを意味します。NOを指定すると、ゼロによる除算を許可しませんが、これは、ゼロによる除算を伴う文が実行を停止し、エラー・メッセージが生成されることを意味します。デフォルト値は、DIVIDEBYZEROオプションの現行の値です。

DECIMALOVERFLOW

10進オーバーフローを許可するかどうかを指定します。10進オーバーフローは、計算結果が非常に大きく、数値表記の指数部分で表示できなくなった場合に発生します。YESを指定すると、オーバーフローを許可しますが、これは、オーバーフローを生成する計算がエラーなしで実行され、NA結果が生成されることを意味します。NOを指定すると、オーバーフローを許可しませんが、これは、オーバーフローを伴う計算が実行を停止し、エラー・メッセージが出力されることを意味します。デフォルト値は、DECIMALOVERFLOWオプションの現行の値です。

NASKIP

NA値が入力されるかどうかを指定します。集計時にOracle OLAPでNA値を無視する場合はYESを指定しますが、これによって、実際の値のみが計算に使用されます。Oracle OLAPでNA値も集計の対象とする場合は、NOを指定しますが、これによって、値のいずれかがNAとみなされると、計算によってNAが返されます。デフォルト値は、NASKIPオプションの現行の値です。

NASKIP句に指定した値は、operationにHAVERAGE、HFIRST、HLAST、HWAVERAGE、HWFIRST、HWLASTを指定した場合に実行される計算に影響を与えません

WEIGHTBY

加重集計を実行することを示します。operationにHWAVERAGE、HWFIRST、HWLAST、SSUM、WAVERAGE、WFIRST、WLASTまたはWSUMを指定する場合は、WEIGHTBY句を含める必要があります。WEIGHTBY句には、常にwobj引数が含まれ、オプションでWNAFILLキーワードを含めることができます。WEIGHTBY句の使用の詳細は、AGGMAPコマンドのRELATION(集計用)文を参照してください。

WNAFILL

NA値の処理を示します。WNAFILLのデフォルト値は、演算の値に応じて異なります。WNAFILL句の使用の詳細は、AGGMAPコマンドのRELATION(集計用)文を参照してください。

number

すべてのNA値の数を代替します。その数値は、加重オブジェクト、加重計算式または加重リレーション内のすべてのNA値を置き換えます。

  • 0.0がHWAVERAGEおよびSSUMのデフォルトです。

  • 1.0がHWFIRST、HWLAST、WAVERAGE、WFIRST、WLASTおよびWSUMのデフォルトです。

NA

NA値をNAとして指定するように指定します。NAは、ORのデフォルトです。

wobj

加重値を提供する変数、計算式またはリレーション。数値またはブール値になります。wobjがブール値の場合、TRUEのとき加重は1.0となり、FALSEのときの加重は0.0となります。計算式および集計される変数のディメンション性に応じて、必要な場合のみ計算式に問合せが行われます。wobjがリレーションの場合、1次元のセルフ・リレーションになります。wobjの値の指定に関する詳細は、AGGMAPコマンドのRELATION(集計用)文を参照してください。

集計仕様におけるDROP DIMENSION文の使用例は、例9-15「異なる変数への集計」を参照してください。


MEASUREDIM(集計用)

集計仕様で、MEASUREDIM文は演算子変数または引数変数の定義で指定されるメジャー・ディメンションの名前を識別します。

構文

MEASUREDIM name

パラメータ

name

メジャー・ディメンションの名前。メジャー・ディメンションは、ユーザーが定義するディメンションです。ディメンション値は、既存の変数の名前です。


注意:

メジャー・ディメンションは、aggmapオブジェクトの定義に含まれている場合は指定できません。

使用上の注意

メジャー・ディメンションの定義

次の文では、MEASUREという名前のディメンションが定義されます。

DEFINE measure DIMENSION TEXT

メジャー・ディメンションの移入

一度メジャー・ディメンションを定義したら、MAINTAIN文を使用してディメンション値をMEASUREディメンションに追加できます。

次の文では、salesunitspriceおよびinventory変数の名前が、そのディメンション値としてmeasureに追加されます。

MAINTAIN measure ADD 'sales', 'units', 'price', 'inventory'

演算子変数を伴うメジャー・ディメンションの使用

メジャー・ディメンションを使用する目的は、非加算集計演算子を使用する場合の柔軟性がもたらす利点を活用することです。演算変数または引数変数の定義で、メジャー・ディメンションを使用できます。

次の文は、opvarという名前の演算子変数の定義および移入方法を示しています。

DEFINE opvar TEXT <measure>
opvar (measure 'sales') = 'SUM'
opvar (measure 'inventory') = 'HLAST'

MEASUREDIM文を含む集計仕様の例は、例9-16「集計仕様におけるMEASUREDIM文の使用方法」を参照してください。


MODEL(集計内)

集計仕様で、MODEL文は事前定義されたモデルを実行します。

構文

MODEL modelname [PRECOMPUTE ALL | PRECOMPUTE NA]

パラメータ

modelname

事前定義されたMODELオブジェクトの名前を含むテキスト式。

PRECOMPUTE ALL
PRECOMPUTE NA

 モデルが静的(事前計算の)モデルか、動的モデルかを指定します。

  • PRECOMPUTE ALLがデフォルトで、静的モデルを指定します。次の条件に合致する必要があります。

    • 集計仕様でこの文の前に配置されるRELATION文またはMODEL文にも、PRECOMPUTE ALLを指定する。

    • 集計仕様でこのコマンドの後に配置されるRELATION文またはMODEL文には、PRECOMPUTE ALLまたはPRECOMPUTE NAのどちらを指定することもできる。

  • PRECOMPUTE NAは動的モデルを指定します。実行時のモデルの実行については、次の条件を満たす必要があります。

    • 集計仕様のRELATION文はすべて、PRECOMPUTE NAとして指定したMODEL文の前に配置する。

    • 集計仕様でこの文の後に配置される別のMODEL文にも、PRECOMPUTE NAを指定する。

使用上の注意

動的モデルと非加算演算子

MODEL文は、集計仕様内にコーディングされた順序で実行されます。通常、実行順が結果に影響する場合、MODEL文が対応するRELATION文の後に続きます。

非加算演算子(MAXなど)を使用するRELATION文の順序は計算結果に影響を与えること、また、動的モデル(つまり、PRECOMPUTE NA句を含むMODEL文)はすべてのRELATION文の後に配置する必要があることから、非加算演算子とともに動的モデルを使用する場合には、いくらかの制約があります。

集計仕様におけるモデルの使用例は、例9-17「集計におけるモデルの解決」を参照してください。


PRECOMPUTE

集計仕様で、PRECOMPUTE文は変数のどの集計値を計算するかを指定します(AGGREGATEコマンドとともに使用)。


注意:

PRECOMPUTE文を含む集計仕様では、RELATION文の中にPRECOMPUTE句を使用できません。

構文

PRECOMPUTE precompute-phrase

ただし、precompute-phraseには、次のいずれかを指定します。

n% | AUTO
ALL
NA | NONE

パラメータ

n%

AGGREGATEコマンドを使用してデータベースのメンテナンス手順として集計する変数値の割合を明示的に指定します。Oracle OLAPではその割合を基に、集計アドバイザという特殊機能を使用して、集計の対象となる値が具体的に決定されます

AUTO

AGGREGATEコマンドを使用してデータベースのメンテナンス手順として集計する変数値とその数が、集計アドバイザを通じて決定されるよう指定します。

ALL

すべての集計データが、AGGREGATEコマンドを使用して事前に計算されるよう指定します。

NA
NONE

AGGREGATEファンクションを使用してすべての値を即時計算するように指定します(つまり、AGGREGATEコマンドにより事前計算されるデータはありません)。


RELATION(集計用)

集計仕様で、RELATION文は階層ディメンションでのデータの集計方法を指定します。多くの場合、集計仕様には、変数の各階層ディメンションに1つのRELATION文が含まれています。


注意:

AGGMAPコマンドの一部としてのみ使用可能なこのRELATION文は、ディメンションのデフォルト・リレーションを定義するRELATIONコマンドや、ALLOCMAPコマンドの一部として使用されるRELATION文とは混同しないでください。

構文

RELATION rel-name [(valueset...)] -

     [PRECOMPUTE (precompute-phrase)] -

     [OPERATOR {operation|opvar}] -

     [PARENTALIAS dimension-alias-name] -

     [ARGS {argument|argsvar}] -

[LOAD_STATUS(status-valueset-name)]

ここで、

  • precompute-phraseは、次のいずれか1つ以上です。

    n% | AUTO
    dimension-values
    positions-of-dim-values
    level-relation-name level-name...
    valueset2
    ALL
    NA | NONE
  • argumentは、次のいずれか1つ以上です。

    DIVIDEBYZERO {YES|NO}
    DECIMALOVERFLOW {YES|NO}
    NASKIP {YES|NO}
    WEIGHTBY [WNAFILL {number | NA}] wobj
    COUNT {YES|NO}
  • argsvarは、一部またはすべてのディメンション値にargument句を含むテキスト変数です。

パラメータ

rel-name

階層内のすべてのディメンション値の親を識別することにより、階層を定義するリレーション。

valueset

集計中に、1つ以上のディメンションのステータスを設定します。これは、現行のステータスを変更します。

PRECOMPUTE

一部のディメンション値がAGGREGATEコマンドでのみ移入されることを示します。RELATION文のPRECOMPUTE句は、AGGREGATEコマンドにより集計されるデータを制限します。最も単純な形式では、PRECOMPUTE句がLIMIT dimension TO文と同様の役割を果すと考えることができます。デフォルトの制限はディメンション上のものであり、RELATION文で明示的に名前指定されないことに注意してください。


注意:

いずれかのRELATION文の中にPRECOMPUTE句を含む集計仕様では、PRECOMPUTE文を使用できません。また、圧縮コンポジットに対するRELATION文にもPRECOMPUTE句を指定できません。

n%

AGGREGATEコマンドを使用してデータベースのメンテナンス手順として集計する変数値の割合を明示的に指定します。Oracle OLAPではその割合を基に、集計アドバイザという特殊機能を使用して、集計の対象となる値が具体的に決定されます

AUTO

AGGREGATEコマンドを使用してデータベースのメンテナンス手順として集計する変数値とその数が、集計アドバイザを通じて決定されるよう指定します。

dimension-values

ディメンションの1つ以上の値のリスト。

positions-of-dim-values

INTEGERまたはNUMBER値を持つディメンション以外のすべてのディメンションについて、事前計算するディメンション値の位置。INTEGER値をカンマで区切って位置を指定します。

valueset2

値セットの名前。この引数を含める場合、値セットのディメンション値によってディメンション化されるデータのみがAGGREGATEコマンドにより事前計算されます。残りの値は、即時計算できます。

ディメンションの現行のステータスは、事前計算されるデータも制限する場合があることに注意してください。詳細は、AGGREGATEコマンドを参照してください。

ALL

すべてのディメンション値について、データを事前計算するように指定します。

NA
NONE

AGGREGATEファンクションを使用してすべての値を即時計算するように指定します(つまり、AGGREGATEコマンドにより事前計算されるデータはありません)。

level-relation-name level-name ...

事前計算されるディメンションのレベルを指定します。level-relation-nameには、ディメンション値とそのディメンションのレベルの名前とを関連付けるリレーション・オブジェクトの名前をTEXT値で指定します。level-nameには、level-relation-nameで使用した同じレベル名を使用して、1つ以上のレベルの名前をTEXT値で指定します。

OPERATOR  

データの集計に使用される計算方法を識別します。

operation  

実行する計算の種類を説明するキーワード。キーワードは表9-1「集計方法」にリストされており、AGGROPS文を発行することによって取得できます。最初の3文字を指定することにより、キーワードの固定長3文字の省略形を指定できます。

表9-1 集計方法

キーワード 説明

AND

子データ値のいずれかがFALSEの場合、その親のデータ値はFALSE。親は、そのすべての子がTRUEの場合にのみTRUEになる。(ブール変数のみ)

AVERAGE

データ値を加算した後、合計を加算されたデータ値の数で除算する。AVERAGEを使用する場合、「平均演算子」で説明されているように特別な注意が必要。

FIRST

最初の非NAデータ値。

HAVERAGE

(階層平均)データ値を加算した後、合計をディメンション階層の子の数で除算する。非NAの子のみをカウントするAVERAGEとは異なり、HAVERAGEは各子に値があるかどうかに関係なく、親のすべての論理的な子をカウントする。

このキーワードは、argumentのNASKIPオプション設定の影響を受けない。

HFIRST

(階層の最初)値がNAの場合でも、階層により指定される最初のデータ値。

このキーワードは、argumentのNASKIPオプション設定の影響を受けない。

HLAST

(階層の最後)値がNAの場合でも、階層により指定される最後のデータ値。

このキーワードは、argumentのNASKIPオプション設定の影響を受けない。

HWAVERAGE

(階層加重平均)非NAの子データ値をそれらに対応する加重値で乗算して、結果を加重値の合計で除算する。WAVERAGEとは異なり、対応する子の値がNAの場合でも、HWAVERAGEには分母合計に加重値が含まれる。

このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。

このキーワードは、argumentのNASKIPオプション設定の影響を受けない。

HWFIRST

(階層の最初の加重)値がNAの場合でも、階層により指定されて、対応する加重値により乗算される最初のデータ値。

このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。

このキーワードは、argumentのNASKIPオプション設定の影響を受けない。

HWLAST

(階層の最後の加重)値がNAの場合でも、階層により指定されて、対応する加重値により乗算される最後のデータ値。

このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。

このキーワードは、argumentのNASKIPオプション設定の影響を受けない。

LAST

最後の非NAデータ値。

MAX

すべての親データ値の子における最大データ値。

MIN

すべての親データ値の子における最小データ値。

NOAGG

このディメンションのどのデータも集計しない

OR

子データ値のいずれかがTRUEの場合、その親のデータ値はTRUE。親は、そのすべての子がFALSEの場合にのみFALSEになる。(ブール変数のみ)

SSUM

(スケール合計)加重オブジェクトの値を各データ値に加算してから、データ値を加算する。

このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。

SUM

(デフォルト)データ値を加算する。

WAVERAGE

(加重平均)各データ値を加重要素で乗算して、データ値を加算した後、結果を加重要素の合計で除算する。

このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。

WFIRST

(最初の加重)対応する加重値により乗算される、最初の非NAデータ値。

このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。

WLAST

(最後の加重)対応する加重値により乗算される、最後の非NAデータ値。

このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。

WMAX

(加重最大値)対応する加重値により乗算される、すべての親データ値の子における最大データ値。

このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。

WMIN

(加重最小値)対応する加重値により乗算される、すべての親データ値の子における最小データ値。

このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。

WSUM

(加重合計)各データ値を加重要素で乗算した後、データ値を加算する。

このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。


opvar

その各ディメンション値に、別の演算を指定するTEXT変数。


注意:

圧縮コンポジットによってディメンション化される変数には有効ではありません。

opvar引数は、次の2つの方法で使用されます。

  • メジャー・ディメンション -- 集計される変数に応じて集計方法を変更します。集計される変数に応じて集計方法を変更するやり方は、別々の方法で集計する必要のある複数の変数を単一のaggmapを使用して集計する場合に役立ちます。すべてのメジャーを単一のAGGREGATEコマンドで事前集計するか、または別個の文で事前集計するかにかかわらず、AGGREGATEはこの演算変数を使用して計算方法を識別します。メジャー・ディメンションの値は、集計する変数の名前です。各メジャーの集計に使用される演算をその値によって識別する、テキスト変数をディメンション化します。集計仕様には、メジャー・ディメンションを識別するMEASUREDIM文を含める必要があります。例9-21「メジャー・ディメンションを使用した集計」を参照してください。

  • 明細項目ディメンション -- 集計される明細項目に応じて集計方法を変更します。通常、明細項目ディメンションは非階層で、財務割当てを識別します。明細項目ディメンションは、データ変数および各項目の集計に使用される演算を識別するテキスト変数の両方をディメンション化するために使用されます。演算変数は通常、長期間にわたる明細項目の集計に使用します。aggmapでは、MEASUREDIM文を使用しないでください。例9-22「明細項目ディメンションを使用した集計」を参照してください。

opvar引数は、集計に使用されるディメンションによってディメンション化することはできません。たとえば、geographyディメンションに別の演算を指定する場合、opvargeographyによってディメンション化できません。

演算子変数のページング量を最小化するには、固定幅8TEXT型として演算変数を定義します。

PARENTALIAS

集計されるディメンションの別名ディメンションを、現在集計されている親値にQDRとして設定するように指定します。

dimension-alias-name

rel-nameディメンションの別名ディメンションの名前。

ARGS

集計のオプション処理を示します。

DIVIDEBYZERO

ゼロによる除算を許可するかどうかを指定します。

  • YESはゼロによる除算を許可します。ゼロによる除算を伴う文がエラーなしで実行されますが、NA結果が生成されます。

  • NOはゼロによる除算を許可しません。ゼロによる除算を伴う文が実行を停止し、エラー・メッセージが生成されます。

デフォルト値は、DIVIDEBYZEROオプションの現行の値です。

DECIMALOVERFLOW

10進オーバーフローを許可するかどうかを指定します。10進オーバーフローは、計算結果が非常に大きく、数値表記の指数部分で表示できなくなった場合に発生します。

  • YESはオーバーフローを許可します。オーバーフローを生成する計算がエラーなしで実行され、NA結果が生成されます。

  • NOはオーバーフローを許可しません。オーバーフローを伴う計算が実行を停止し、エラー・メッセージが出力されます。

デフォルト値は、DECIMALOVERFLOWオプションの現行の値です。

NASKIP

NA値が入力されるかどうかを指定します。

  • YESは、集計時にNA値を無視することを指定します。実際の値のみが計算に使用されます。

  • NOは、集計時にNA値が検討されるように指定します。値のいずれかがNAとみなされると、計算によりNAが返されます。

デフォルト値は、NASKIPオプションの現行の値です。

NASKIP句に指定した値は、operationにHAVERAGE、HFIRST、HLAST、HWAVERAGE、HWFIRST、HWLASTを指定した場合に実行される計算に影響を与えません

WEIGHTBY

加重集計を実行することを示します。operationにHWAVERAGE、HWFIRST、HWLAST、SSUM、WAVERAGE、WFIRST、WLASTまたはWSUMを指定する場合は、WEIGHTBY句を含める必要があります。WEIGHTBY句には、常にwobj引数が含まれ、オプションでWNAFILLキーワードを含めることができます。

WNAFILL {number | NA}

NA値の処理を示します。WNAFILLのデフォルト値は、演算の値に応じて異なります。0.0がHWAVERAGEおよびSSUMのデフォルト値です。NAは、ORのデフォルト値です。その他の演算子のデフォルト値は1.0です。WNAFILLのデフォルトは、集計仕様の各演算子に対して決まります。つまり、あるRELATION文にWSUM OPERATORが含まれる場合、WNAFILLのデフォルトは1.0となります。次のRELATION文にSSUM OPERATORが含まれる場合、WNAFILLのデフォルトは0.0となり、その他も同様です。「WNAFILLの使用」を参照してください。

wobj

加重値を提供する変数、計算式またはリレーション。数値またはブール値になります。wobjがブール値の場合、TRUEのとき加重は1.0となり、FALSEのときの加重は0.0となります。計算式および集計される変数のディメンション性に応じて、必要な場合のみ計算式に問合せが行われます。wobjがリレーションの場合、1次元のセルフ・リレーションになります。wobjへの値の指定に関する詳細は、「加重集計方法の使用」を参照してください。

COUNT {YES|NO}

YESの場合、Oracle OLAPがこのリレーションを使用して変数を集計する際に、その変数に関連するAggcount変数を移入するように指定します。Aggcount変数の詳細は、「Aggcount変数」を参照してください。

NOの場合、Oracle OLAPがこのリレーションを使用して変数を集計する際に、その変数に関連するAggcount変数を移入しないように指定します。Aggcount変数の詳細は、「Aggcount変数」を参照してください。

argsvar

一部またはすべてのディメンション値にargumentオプションを含むTEXT変数。

LOAD_STATUS

集計において、status-valueset-nameにより指定された値が階層の詳細レベルまたは最下位レベルとしてみなされるように指定します。

status-valueset-name

集計実行時にステータスで保持する最下位レベルの値を指定する定義済の値セット。集計の実行時に使用するaggmapの中のRELATION文にこの句が含まれている場合、ディメンション・ステータスは一時的に、status-valueset-nameおよびその祖先で指定した値に設定されます。status-valueset-nameで指定する値セットは、(階層ディメンションではなく)リレーションのディメンションに対する1次元の値セットであることが必要です。さらに、status-valueset-nameに指定された値セットには、値およびその祖先を含めることはできません。

使用上の注意

非加算演算子を使用したRELATION文の順序

非加算演算子を使用したRELATION文の順序は、計算結果に影響を与えます。たとえば、通常、合計の最大値は、最大値の合計と等しくなりません。したがって、集計仕様内のRELATION文の順序は、計算の論理要件に従う必要があります。この論理的な必要性により、集計における動的モデルの使用には制限があります(「動的モデルと非加算演算子」を参照)。

圧縮コンポジットのRELATION文

集計仕様を設計する場合に圧縮コンポジットのRELATION文をコード化する際は、次のガイドラインに従ってください。

  • HAVERAGE、HWAVERAGE、HWFIRST、HWLAST、SSUM、WAVERAGE、WFIRST、WLAST、WMAX、WMINおよびWSUMの各演算子では、スパース性にかかわらず、データ値は集計の各レベルによって変化します。可能であれば、全体的な圧縮の量を最大にできるよう、これらの演算子を持つRELATION文を集計仕様の冒頭(AND、AVERAGE、FIRST、HFIRST、HLAST、LAST、MAX、MIN、NOAGG、ORまたはSUM演算子を使用するRELATION文の前)に配置します。

  • 圧縮コンポジットの圧縮を最適化するには、計算ロジックが可能な場合、同様な演算子を連続的にリストします。たとえば、最初のディメンションでMAXを指定し、他のディメンションのすべてでSUMを指定すると、圧縮率が高くなるので、残りのディメンションでSUM、MAXおよびSUMを指定するよりも計算パフォーマンスが向上します。

  • SUMは、最も高速で最も高圧縮な演算子です。1つ以上のディメンションで集計演算子をSUMから別の演算子に変更すると、圧縮率が低くなるので、大きな変数とその変数のAGGREGATEコマンドの実行時間が長くなります。

  • AVERAGE演算子を指定するRELATION文がAGGMAPに含まれる場合、その集計仕様を使用するすべての変数については、WITH AGGCOUNT句を伴うDEFINE VARIABLE文を使用して定義する必要があります。

  • 指定できるのは単一の集計操作のみです。opvar変数を使用して集計操作を指定することはできません。

値セットを使用する2つの方法

値セットを使用して次のことを行うことができます。

  • 階層ディメンションの制限。AGGREGATEコマンドおよびAGGREGATEファンクションにより使用される階層と、それらの階層が使用される順序を制限できます。使用する値セットは、ディメンションの階層の名前を指定します。この方法で値セットを使用するには、次の構文を使用します。

    RELATION rel-name (valueset)
    

    この場合、値セットを使用すると、互いに競合している階層を管理できますが、これは、同じディメンション値が、異なる階層の別々の子のデータを格納している場合です(たとえば、Q1が、Calendar階層にJanFebおよびMarのデータを格納する一方で、Fiscal階層ではMayJunおよびJulのデータを格納している場合など)。

  • AGGREGATEファンクションによって即時計算する値や、AGGREGATEコマンドによって事前計算する値の指定。使用する値セットにより、ディメンション値の名前が指定されます。この方法で値セットを使用するには、次の構文を使用します。

    RELATION rel-name PRECOMPUTE (valueset)
    

    この場合、PRECOMPUTEキーワードの後ろの値セットを使用します。

    値セットを使用して階層ディメンションを制限する場合で、複数のaggmapを使用し、階層に一貫性がない場合は、AGGREGATEファンクションでFORCECALCキーワードを使用するか、集計対象の変数に$AGGREGATE_FORCECALCプロパティを設定しておく必要があります。

PRECOMPUTEまたはOPERATOR句を変更する場合

PRECOMPUTEまたはOPERATOR句を変更する場合は、変数データを再集計し、aggmapを再コンパイルして正確なデータを生成する必要があります。

異なる階層レベルにロードされたデータの集計

異なるレベルの階層にあるディメンション値にデータをロードする場合、集計仕様のRELATION文のPRECOMPUTE句にステータスを設定する方法に注意する必要があります。

timeディメンションに3つのレベルを持つ階層があり、月は四半期に集計され、四半期は年に集計されるとします。一部のデータが月ディメンション値にロードされ、他のデータが四半期ディメンション値にロードされます。たとえば、Q1JanuaryFebruaryおよびMarchの親です。Marchのデータは、Marchディメンション値にロードされます。しかし、JanuaryおよびFebruaryのデータの合計は、Q1ディメンション値に直接ロードされます。実際、JanuaryおよびFebruaryディメンション値には、データのかわりにNA値が含まれます。ここで目標とするのは、MarchのデータをQ1のデータに追加することです。

JanuaryFebruaryおよびMarchQ1に集計しようとする場合、Marchのデータは単純にQ1のデータを置き換えます。これが起こると、Q1にはJanuaryFebruaryおよびMarchの合計ではなく、Marchのデータが含まれることになります。

階層の異なるレベルにロードされるデータを集計するには、データが含まれるそれらのディメンション値に対してのみ、値セットを作成します。

DEFINE all_but_q4 VALUESET time
LIMIT all_but_q4 TO ALL
LIMIT all_but_q4 REMOVE 'Q4'

次の文に示されているように、集計仕様で値セットを使用して、詳細レベルのデータをその親であるQ1に存在するデータに追加するように指定します。

RELATION time.r PRECOMPUTE (all_but_q4)

平均演算子

AVERAGE、HAVERAGE、WAVERAGEおよびHWAVERAGE演算子の使用に関しては次のような問題があります。

  • Oracle OLAPは、平均値を計算するために集計値に加えられたリーフ・ノード数の非NAカウント数を別のINTEGER変数に格納する必要があります。いずれかの平均演算子を使用して変数を集計する場合は、その変数のDEFINE VARIABLE文にWITH AGGCOUNT句を含めます。

  • 平均する際の精度: すべての10進データは、格納および計算の両方の用途で浮動小数点形式に変換され、その結果、場合によっては、DECIMALまたはSHORTDECIMAL変数で計算される平均集計の最下位の数字が、手動で計算した結果と異なる可能性があります。このため、通貨額を含む変数など、計算速度よりも精度が重要な場合はNUMBERデータ型を使用する必要があります。詳細は、「数式」を参照してください。

  • AGGREGATEコマンドを使用した集計時の平均演算子の使用: PRECOMPUTEキーワードとともに平均演算子を使用する場合、10進またはNUMBERデータ型を持つ変数を使用して結果の正確さを確保するのが最も効果的です。

  • 部分集計での平均演算子の使用: 部分集計で平均演算子を使用する場合、同じINTEGER変数(つまりAggcountまたはCountvar変数)を常に使用して集計する必要があります。集計間で、このINTEGER変数に格納されている値を変えないでください。また、INTEGER変数の数は、集計される変数の数と一致する必要があります。

HAVERAGE、HFIRST、HLASTおよびHWAVERAGE演算子

階層の演算子(HAVERAGE、HFIRST、HLASTおよびHWAVERAGE)の目的は、NA処理の代替方法を提供することです。

FIRST、HFIRST、LASTおよびHLAST演算子

これらの演算子は、ディメンション値の既存の順序に依存しており、この順序は、そのディメンションのデフォルトの論理的な順序を想定しています。たとえば、月ディメンションでは、FebruaryはJanuaryの後であり、MarchはFebruaryの後である、となります。

デフォルトの順序を変更する必要がある場合は、MAINTAIN文を使用します。たとえば、Q1にはJanuaryFebruaryおよびMarchが含まれますが、MarchではなくFebruaryQ1の最後の月にするとします。そのためには、次の文を使用します。

MAINTAIN time MOVE 'Feb01' AFTER 'Mar01'

これで、LAST演算子はFEB01Q1の最後の月とみなすようになりました。

読取り権限とaggmap

RELATION文でrel-nameの読取り権限を変更する場合、aggmapをAGGREGATEファンクションとともに使用する前に再コンパイルする必要があります。AGGREGATEコマンドを使用する場合は、aggmapが自動的に再コンパイルされるため必要ありません。しかし、aggmapでrel-nameのすべての読取り権限を持っていない場合にaggmapを使用しようとすると、エラー・メッセージが生成されます。

加重集計方法の使用

加重集計方法を使用する場合は、加重を含むオブジェクトを定義および移入する必要があります。集計方法はOPERATOR句に識別し、加重オブジェクトはARGS句に識別します。

加重オブジェクトには、変数、計算式またはリレーションを使用できます。オブジェクト型、加重オブジェクトのデータ型、および部分集計を実行するかどうかに応じて、特別な注意が必要です。

オブジェクト型に基づく加重オブジェクトに関する注意点: 加重オブジェクトに使用するオブジェクト型に応じて、次のような点に注意してください。

  • 加重オブジェクトが変数の場合、数値またはブール・データ型を使用して定義できます。加重値を事前計算して、それをデータベースにコミットする場合、加重オブジェクトとして変数を使用します。変数の加重オブジェクトは、任意の加重オプションとともに使用できます。

  • 加重オブジェクトがリレーションの場合、オブジェクトを1次元のセルフ・リレーションとして定義します。加重オブジェクトを使用して、特定のセルの加重が別の場所の現行の変数に含まれるように指定できます。明細項目またはメジャー・ディメンションを使用する場合、加重オブジェクトとしてリレーションを使用します。この場合、1つの明細項目が、別の明細項目の集計値を計算するための加重として使用されます。リレーションを使用すると、加重演算の加重値として集計される変数に、セルの別のセットを指定できます。

  • 加重オブジェクトが計算式の場合は、計算式のディメンション性と、データが集計される変数のディメンション性に応じて、計算式に対して必要な場合にのみ問合せが行われます。計算式は、数値またはブール・データ型を使用して定義できます。加重値を即時計算する場合、計算式を加重オブジェクトとして使用します。計算式の加重オブジェクトは、集計できない点を除いては変数の加重オブジェクトと同様です。計算式の加重オブジェクトの値は、動的に実行されます。そのため、多くの加重オプションは計算式の加重オブジェクトとともに使用できません。

加重オブジェクトのデータ型に基づく注意点: 次の注意点は、加重オブジェクトが数値またはBOOLEANの場合に当てはまります。

  • 加重オブジェクトが数値データ型である場合、加重オブジェクト変数は対応する変数と同じディメンション性(またはそのサブセット)を持つことが推奨されますが、これは必須ではありません。Oracleの数値または10進数を使用してデータ変数を定義する場合、必ず同じデータ型を使用して対応する加重オブジェクトを定義します。または、WAVERAGEまたはHWAVERAGEを使用する場合以外は、加重オブジェクトおよびデータ変数に同じデータ型を使用しますが、この場合、10進数またはNUMBERデータ型を使用して加重オブジェクトを定義します。

  • 定義する加重オブジェクト変数、計算式またはリレーションがBOOLEANデータ型の場合、TRUEは加重が1.0であることを示し、FALSEは加重が0.0であることを示します。さらに、NA値が任意の値により乗算される場合、結果はNAとなります。

部分集計を実行する際の加重オブジェクトに関する注意点: WEIGHTBY句を要求する演算子を使用して、部分集計を実行する場合、AGGREGATEコマンド間の加重オブジェクトに格納されている値を変更しないでください。

WNAFILLの使用

たとえば、WSUM演算子を使用して通貨の換算を行うとします。通貨の換算レートは、詳細データ・レベルで適用されます。変数データは換算後に集計されるため、換算する必要があるのは詳細データのみです。正確な結果を取得するためには、加重オブジェクトに含まれる詳細レベル以外の加重値がすべて1になる必要があります。この方法では正確な結果が得られますが、効率的ではありません。最も効率的な方法は、WNAFILLのデフォルト値1を使用することであり、これにより、加重オブジェクトのすべてのNA値が1の加重を持つ値として処理されます。この場合、演算子はWSUMであり、デフォルト値は正確なため、WNAFILLをAGGREGATEコマンドに含める必要はありません。

たとえば、次の文を使用すると、値0.7salesw加重オブジェクトのNA値の代替となります。

AGGREGATE sales USING sales.agg WEIGHTBY WNAFILL 0.7 salesw

NA値と置き換える数値を指定しない場合、次の文に示されるように数値のかわりにNAを使用できます。

AGGREGATE sales USING sales.agg WEIGHTBY WNAFILL NA salesw

WNAFILLの後にNAを指定すると、次のような影響があります。

  • 集計仕様にWAVERAGEまたはWSUM OPERATORが含まれる場合、NA値を持つ加重オブジェクトの子セルはNAセルとして処理されます。

  • 集計仕様にSSUM OPERATORが含まれる場合、結果はOracle OLAPのオプションNASKIPの設定内容によって異なります。NASKIPがYESに設定されている場合、すべてのNA値は0.0として処理されます。一方、NASKIPがNOに設定されている場合、すべてのNA値がNAセルとして処理されます。

集計のディメンション・ステータスの影響

ステータスの設定にLIMIT文を使用するか、RELATION文のLOAD STATUS句を使用するかにかかわらず、RELATION文によって集計されるのは、ステータスにあるソース・データ値のみです。親値は、ステータスにあるかどうかに関係なく計算されます。たとえば、Jan01Feb01およびMar01のみがtimeディメンションのステータスにある場合、Q1.01が計算され(他の四半期は計算されません)、他の四半期はNAとなるため、入力としてQ1.01のみを使用して、2001が計算されます(他の年は計算されません)。この機能は、アナリティック・ワークスペースの新しいデータのみを集計する場合に役立ちます。

階層ディメンションtimeおよび非階層ディメンションdistrictによってディメンション化される、salesという名前の変数があるとします。

DEFINE time DIMENSION TEXT
DEFINE time.parentrel RELATION time <time>
DEFINE district DIMENSION TEXT
DEFINE sales VARIABLE DECIMAL <time district>

REPORT DOWN time sales

             -----------------------SALES-----------------------
             ---------------------DISTRICT----------------------
TIME            North        South         West         East
------------ ------------ ------------ ------------ ------------
1976Q1         168,776.81   362,367.87   219,667.47   149,815.65
1976Q2         330,062.49   293,392.29   237,128.26   167,808.03
1976Q3         304,953.04   354,240.51   170,892.80   298,737.70
1976Q4         252,757.33   206,189.01   139,954.56   175,063.51
1976                   NA           NA           NA           NA

RELATION文を含む集計仕様の例については、AGGMAPコマンドの例を参照してください。