この項では、OLAP DMLを使用したデータの集計について説明します。項目は次のとおりです。
これまでは、データの集計といえば、小計や総計を算出するために詳細データを合計することを指しました。しかし、OLAP DML aggmapオブジェクトを使用すると、より複雑な集計計算を指定できます。
階層ディメンションによってディメンション化されたサマリー・データは、様々な方法(たとえば、最初、最後、平均または加重平均など)を使用して計算できます。このような集計の例は、例9-17「階層での集計」を参照してください。
非階層ディメンションによってディメンション化されたサマリー・データは、モデルを使用して計算できます。この機能は、明細項目など、階層構造を持たないディメンションの値を計算するときに有効です。また、1つ以上の他の明細項目またはワークスペース・オブジェクトから、個々の明細項目の値を計算するモデルを作成できます。このような集計の例は、例9-16「集計におけるモデルの解決」を参照してください。
サマリー・データの計算に使用される詳細データは、サマリー・データを含む変数または1つ以上の他の変数に格納できます。サマリー・データを含む変数のディメンションは、詳細データを含む変数とまったく同じにする必要はありません。このような集計の例は、例9-14「異なる変数への集計」および例9-31「キャップストーン集計」を参照してください。
データは、サマリー・データに対するユーザーの要求に応じて、データベースのメンテナンス手順として集計するか、これらの方法を組み合せることができます。詳細は、「集計の実行」を参照してください。
ユーザーの要求に応じて集計されたデータは、要求されるたびに計算され、今後の問合せのためにアナリティック・ワークスペースに格納またはキャッシュされます。
集計の仕様は、永続的または一時的にできます(「カスタム集計の作成」を参照)。
OLAP DMLを使用してデータを集計するには、次の手順を実行します。
AGGREGATEコマンドを使用してデータベースのメンテナンス手順としてすべてのデータを集計するか、AGGREGATEファンクションまたは$AGGMAPプロパティを使用して実行時にすべてのデータを即時集計するか、あるいはそれらの方法を組み合せて一部の値を事前計算し、他の値を実行時に計算するかどうかを決定します。様々な方法については、「集計の実行」を参照してください。
DEFINE AGGMAP文を発行して、aggmapオブジェクトの型をAGGMAPとして定義します。
集計仕様を記述します(AGGMAPを参照)。
パーティション変数を集計する場合、PARTITIONCHECKを実行して、前の手順で作成された集計仕様が変数のパーティション化と互換性があることを確認します。互換性がない場合、集計仕様を再記述するか、CHGDFNを使用して変数の再パーティション化を行います。
データの一部またはすべてをAGGREGATEファンクションを使用して集計する場合は、次の作業を実行します。
aggmapオブジェクトをコンパイルします(「集計仕様のコンパイル」を参照)。
トリガーするプロパティ、オブジェクトまたはイベントを追加します。たとえば、AGGREGATEファンクションを式として含む計算式を追加し、さらに$NATRIGGERプロパティを変数に追加します。これにより、データの実行時要求に応答してその計算式の実行がトリガーされます。
aggmapオブジェクトをアナリティック・ワークスペースの中で永続化する場合は、UPDATE文およびCOMMITを順に実行して、aggmapオブジェクトを保存します。
AGGREGATEコマンドを使用して計算するデータについては、次の作業を実行します。
(オプション)POUTFILEUNITオプションを設定し、集計の進捗を監視できるようにします。
AGGREGATEコマンドに続いてUPDATEおよびCOMMITを実行し、データを事前計算してアナリティック・ワークスペースに格納します。
実行時にAGGREGATEファンクションを使用して行われる集計では、aggmapオブジェクトのコンパイルが重要になります。コンパイル済バージョンのaggmapが保存されていない場合、aggmapはそれを使用するセッションごとに再コンパイルされます。
aggmapオブジェクトのコンパイルには、次の2つの方法があります。
aggmapオブジェクトがAGGREGATEファンクションによって使用される場合、aggmapオブジェクトをコンパイルする方法は、COMPILE文の発行のみです。aggmapを明示的にコンパイルすると、実際に使用してデータを生成する前にaggmap内の構文エラーも見つけることができて便利です。次の文では、sales.agg
aggmapがコンパイルされます。
COMPILE gpct.aggmap
AGGREGATEコマンドを使用してデータを集計する際、文にFUNCDATA句を含める。
AGGREGATEコマンドでFUNCDATA句を使用すると、aggmapはデータを集計する前にOracle OLAPによってコンパイルされます。たとえば、この文はコンパイルを実行し、集計データを事前計算します。
AGGREGATE sales USING gpct.aggmap FUNCDATA
重要: 一部のデータが即時計算される場合は、AGGREGATEコマンドを実行した後で、aggmapをコンパイルして保存する必要があります。 |
OLAP DMLでデータを集計するには、次の2つの方法があります。
AGGREGATEコマンドを使用し、データのメンテナンス手順としてデータを集計する。この方法でデータを集計する場合は、集計仕様において、PRECOMPUTE文か、RELATION文のPRECOMPUTE句を使用して、集計するデータを指定します。
AGGREGATEファンクションを使用するか、$AGGMAPプロパティを変数に追加し、必要に応じて実行時にデータを集計する。
レベル、個々のメンバー、メンバー属性、時間範囲、データ値または他の基準により、適切な方法を選択できます。また、これらの方法を組み合せ、一部の値を事前計算し、他の値を実行時に計算することもできます。この場合、通常はAGGREGATEコマンドおよびAGGREGATEファンクションに同じaggmapを使用します。しかし、場合によっては異なるaggmapを使用します。
全体的なパフォーマンスの向上を実現する1つの方法は、集計してアナリティック・ワークスペースに格納するデータの量と、即時計算に指定するデータの量のバランスを取ることです。集計仕様の中でPRECOMPUTE文またはPRECOMPUTE句を使用すると、Oracle OLAPの集計アドバイザという特殊機能を介して、AGGREGATEコマンドでデータのメンテナンス手順として集計する値や、手動で明示的に指定する値を自動的に決定できます。
あるセッションで使用された大部分の集計の定義は、別のセッションでも使用されます。ただし、予測またはwhat-if分析を行う場合、あるいは想定外の方法でデータを参照する場合、実行時にそのセッション限定の集計を作成する必要があります。セッション限定の集計の追加は、カスタム集計の作成と呼ばれます。次の方法で、集計の仕様を永続的に変更する必要のない非永続型の集計データを作成できます。
MAINTAIN ADD SESSION文を使用して、一時ディメンション・メンバーを定義し、それらのメンバーの定義の一部として集計仕様を含めます。集計仕様は、モデルまたはaggmapのどちらかです。この方法を使用して一時集計を作成する例は、例10-42「集計値を使用した計算ディメンション・メンバーの作成」を参照してください。
集計を指定するモデルを作成します。AGGMAP ADD文を使用して、実行時にモデルをaggmapに追加します。セッション終了時、この方法でaggmapに追加したすべてのモデルは、Oracle OLAPが自動的に削除します。詳細は、AGGMAP ADDまたはREMOVEモデルを参照してください。