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オブジェクトの集計仕様である、複数行のテキスト式。各文は、複数行のテキスト式で構成されています。コマンドライン・レベルでAGGMAPコマンドをコード化する際は、改行デリミタ(\n
)で文を区切るか、JOINLINESを使用します。
集計仕様は、AGGMAPで始まり、END
で終わります。これらの文の間に、指定する計算に応じて次の文のうち1つ以上をコーディングします。最低でも、1つの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文を含む入力ファイルの使用方法を示します。
各ディメンションの階層の名前を識別します。セルフ・リレーションとして階層を定義した場合、セルフ・リレーションの名前を使用します。
集計するデータを決定します。
time
およびproduct
ディメンションのすべてのレベルのデータを計算し、geography
のデータは計算しないとします。geography
ディメンションの最下位レベルのデータは、都市レベルにあります。階層の2番目のレベルには、East
、Central
およびWest
の各地域を表す3つのディメンション値があります。階層の3番目のレベルには、Total
という1つのディメンション値があります。
East
のデータを事前計算し、アナリティック・ワークスペースに格納するとします。Central
、West
およびTotal
のデータは、ユーザーがそのデータを要求した時点でのみ計算され、そのデータはアナリティック・ワークスペースに格納されません。そのため、aggmapオブジェクトに追加する仕様にこの情報を指定する必要があります。
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文が集計仕様に追加されます。
units.txt
ファイルをアナリティック・ワークスペースに読み取るには、次の文を実行します。
INFILE 'inf/units.txt'
この時点で、units.agg
aggmapがアナリティック・ワークスペースに存在している必要があります。次の文を使用して、units
変数を集計できます。
AGGREGATE units USING units.agg
これで、すべての時間および製品についてのEast
のデータが計算され、アナリティック・ワークスペースに格納されます。
ユーザーがCentral
、West
またはTotal
のデータを要求した際に、そのデータが計算されて表示されるようにアナリティック・ワークスペースを設定します。次の文に示すとおり、通常、AGGREGATEファンクションとともに使用する前に、aggmapオブジェクトをコンパイルすることをお薦めします。
COMPILE units.agg
AGGREGATEコマンドを使用するのみの場合は、この文によりaggmapオブジェクトが使用前にコンパイルされるため必要ありません。ただし、AGGREGATEコマンドとともにFUNCDATAキーワードを使用しない場合、即時計算の実行に必要なメタデータがコンパイルされていません。他の必要な計算(モデルの計算など)がすべて実行済の場合は、データのロード時にaggmapをコンパイルするのが最適な方法になります。実行していない場合は、ユーザーはアナリティック・ワークスペースを開くたびに、集計が自動的にコンパイルされるのを待機する必要があります。つまり、なんらかのデータが即時計算される場合、アナリティック・ワークスペースをユーザーから使用可能にする前にaggmapをコンパイルすることにより、すべてのユーザーの問合せパフォーマンスを向上させることができます。
units
変数にプロパティを追加します。
CONSIDER units PROPERTY '$NATRIGGER' 'AGGREGATE(units USING units.agg)'
このプロパティは、データ・セルにNA
値が含まれる場合、Oracle OLAPがAGGREGATEファンクションをコールして、そのセルのデータを集計することを示しています。このため、ユーザーにより要求されるすべてのunits
データが表示されます。ただし、geography
ディメンションのEast
ディメンション値のデータのみが実際に集計され、アナリティック・ワークスペースに格納されます。他のすべてのデータ(Central
、West
およびTotal
のデータ)は、ユーザーにより要求された時点でのみ計算されます。
例9-7 非加算集計の実行
この例では、加算集計および非加算集計を組み合せる演算子および引数の使用方法を説明します。
sales
、debt
、interest_rate
およびinventory
の4つの変数を定義したとします。これらの変数は、同じディメンション性で定義されており、ここで、cp
はproduct
およびgeography
ディメンションで定義されたコンポジットです。
<time cp<product geography>>
1つのAGGREGATEコマンドを使用して、4つの変数すべてを集計するとします。debt
変数には加算集計が必要です。sales
変数には加重合計集計が必要で、interest_rate
には階層加重平均が必要です。そのため、sales
およびinterest_rate
の両方に定義が必要な加重オブジェクトが必要で、加重値を移入する必要があります。inventory
には、階層内の最後の値である合計インベントリの結果が必要です。
debt
およびinventory
の集計演算は、OPERATORキーワードを使用して指定します。しかし、sales
およびinterest_rate
には加重オブジェクトが必要な集計演算があるため、ARGSキーワードを使用してそれらの演算を指定する必要があります。演算子変数を定義して、OPERATORキーワードを使用します。通常、演算子変数は、メジャー・ディメンションまたは明細項目ディメンションによってディメンション化されます。
実行する集計を定義する手順は、次のとおりです。
メジャー・ディメンションを使用して、ARGSキーワードとともに使用する引数変数の定義も行うため、次の文に示されているようにmeasure
ディメンションを定義します。
DEFINE measure DIMENSION TEXT MAINTAIN measure 'sales', 'debt', 'interest_rate', 'inventory'
注意: RELATION文でmeasure ディメンションを使用する場合は、同じ集計仕様に必ずMEASUREDIM文を含める必要があります。 |
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'
sales
およびinterest_rate
には加重オブジェクトが必要なため、それらの加重オブジェクトを定義および移入します。次の文では、currency
という名前の(sales
が使用する)加重オブジェクトが定義されます。
DEFINE currency DECIMAL <time geography>
currency
変数は、time
およびgeography
のみによってディメンション化されることに注意してください。この変数の目的は、外国通貨の換算情報としての役割を果す加重の提供であるため、product
ディメンションを含める必要はありません。
使用する加重値を持つcurrency
を移入します。
interest_rate
変数の非加算集計(階層加重平均)には、変数debt
の合計が必要です。つまり、interest_rate
はdebt
の集計結果がない場合は集計できません。
この時点で、引数変数を定義でき、この引数変数には、interest_rate
の加重オブジェクトとしてdebt
の集計結果を指定する必要があります。同じ引数変数を使用して、sales
変数の加重オブジェクトとしてcurrency
を指定します。次の文では、argvar
という名前の引数変数が定義されます。
DEFINE argvar TEXT <measure>
次の文により、引数変数が移入されます。
argvar (measure 'sales') = 'weightby currency' argvar (measure 'debt') = NA argvar (measure 'interest_rate') = 'weightby debt' argvar (measure 'inventory') = NA
product
およびgeography
の集計では、sales
、debt
および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'
ここで、次の文を発行して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
最後に、次の文を使用して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文が含まれるようになりました。この例では、Year99
のtime
ディメンション値を持つデータを除き、time
ディメンションの階層time.r
のデータをすべて集計することを指定しています。さらに、All
のproduct
ディメンション値を持つデータ以外の、product
ディメンションの階層product.r
の全データを集計しています。geography
ディメンション値はすべて集計されます。CACHE STORE文は、その場でロールアップされるすべてのデータを1度のみ計算し、その値を同じセッション中に他のアクセス要求のキャッシュに格納することを指定します。
これで、次のようにAGGREGATEコマンドを実行してsales.agg
aggmapを使用できるようになります。
AGGREGATE sales USING sales.agg
この例では、time
ディメンションのYear99
値、またはproduct
ディメンションのAll
値によってディメンション化されるすべてのデータ値が、即時計算されます。他のデータはすべて集計され、アナリティック・ワークスペースに格納されます。
例9-10 複数のaggmapの使用
予測を使用する場合、その予測で必要となるすべての入力データが事前計算されていることを確認する必要があります。事前計算されていないと、予測は不適切なデータまたは存在しないデータを使用します。たとえば、予測ですべての明細項目を集計する必要があるとします。time
、line
、division
によってディメンション化されるbudget
変数を使用する場合、1つの方法としてline
ディメンションの完全な集計を実行してDAY、WEEK、MONTH、QUARTERまたはYEAR
型のディメンションを予測し、残りのディメンションdivision
を集計するという方法があります。
この処理は、次の3つのaggmapオブジェクトを定義することにより可能になります。
forecast.agg1
という名前の最初のaggmapを定義しますが、これは、予測で必要とされるデータを集計します。これには、次の文が含まれます。
RELATION line.parentrel
forecast.agg2
という名前の2番目のaggmapを定義しますが、これは、最初のaggmapおよび予測を使用して生成されるデータを集計します。これには、次の文が含まれます。
RELATION division.parentrel PRECOMPUTE ('L3')
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は、Year99
のtime
ディメンション値またはAll
のproduct
ディメンション値を持つデータを除き、それ以外のすべてのsales
データをロールアップして、データベースにコミットします(処理されなかったセルのデータは、ユーザーが最初にそれらにアクセスしたときに計算されます)。AGGINDEX値がNO
の場合は、Oracle OLAPに、即時計算するデータの索引を作成しないことを認識させることができます。
ここで、次の文を実行します。
sales2 = AGGREGATE(sales1 USING sales.agg) ACROSS SPARSE - <product, channel, customer>
これで、sales2
にはsales1
にあるすべてのデータと、Year99
の集計されたすべてのデータが格納されるようになります。これは、time
がコンポジットに含まれていないためです。
一方、All
のproduct
値の集計データは計算されず、sales2
には格納されません。このデータが計算も格納もされないのは、product
ディメンションがコンポジットに含まれているためであり、コンポジットに含まれるディメンションに必要な索引は、集計仕様にAGGINDEX
NO
文が含まれているため作成されませんでした。索引が存在しなかったため、Oracle OLAPはAGGREGATEファンクションをコールして即時計算すべきデータを計算しませんでした。
例9-12 ディメンション属性による集計
販売を行っているある会社で、顧客の名前、性別、年齢および販売量の記録を保持するとします。このデータを保持するため、アナリティック・ワークスペースにcustomer
という名前のディメンションと、customer
によってディメンション化される3つの変数(customer_sex
、customer_age
、sales
という名前)を含めます。
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
変数のデータをこの変数に移入します。
必要なオブジェクトを作成および移入する手順は、次のとおりです。
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
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
集計データを保持するsales_by_sex_age
という名前の変数を作成します。sales
変数と同様に、この変数の型はDECIMALですが、customer
ではなくsex
およびage
によってディメンション化されます。
DEFINE sales_by_sex_age VARIABLE DECIMAL <sex age>
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
)の名前が含まれます。
集計の詳細データを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
次の手順は、集計プロセスの概要を示しています。
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
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
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オブジェクトを使用してこの計算を実行する手順は、次のとおりです。
データを集計する地区
の値を表すnot_north
という名前の値セットを作成します。
DEFINE not_north VALUESET district LIMIT not_north TO ALL LIMIT not_north REMOVE 'North'
計算結果を保持するtotal_sales_exclud_north
という名前の変数を定義します。
DEFINE total_sales_exclud_north VARIABLE DECIMAL <time>
sales
のように、total_sales_exclud_north
変数はtimeによってディメンション化されることに注意してください。ただし、sales
とは異なり、この変数は各地区の詳細データを保持しますが、South
、West
およびEast
地区(つまりNorth
を除くすべての地区)の(集計された)総計値のみであるため、total_sales_exclud_north
変数はdistrict
によってはディメンション化されません。
実行する計算を指定する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
値セットも使用します。
データを集計します。
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コマンドを使用して、sales
、units
、price
および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
変数は、geography
、product
、channel
およびtime
によってディメンション化されます。
まず、各ディメンションの階層を検討します。各階層にいくつレベルがあるか。ユーザーが通常問合せを行うデータのレベルはどれか。新規ワークスペースを設計するのはいつか、ユーザーが問い合せを予定するデータのレベルはどれか。
ユーザーがtime
階層のsales
データを問い合せるかどうかについて、次の表にある情報を把握できたとします。
時間レベル名 | 記述レベル名 | ディメンション値の例 | ユーザーは通常このレベルの問合せを行うか |
---|---|---|---|
L1 | 年 | Year99 、Year00 |
はい |
L2 | 四半期 | Q3.99 、Q3.99 、Q1.00 |
はい |
L3 | 月 | Jan99 、Dec00 |
はい |
一方、次の表はユーザーが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文は、AGGREGATEファンクションにより即時計算されるデータ・セルの索引(コンポジット・タプルを意味する)がaggmapのコンパイルによって作成されるかどうかを、Oracle OLAPに認識させます。したがって、AGGINDEX文はコンポジットに含まれるディメンションには影響を与えますが、コンポジットに含まれないディメンションには影響を与えません。
それらの索引は、AGGMAPのMODEL文、およびACROSS句を使用する文で使用され、Oracle OLAPがコンポジットによってディメンション化される変数をループ処理するのに役立ちます。それらの文を使用すると、すべてのデータが計算されます。その場で一部のデータを計算するように指定する場合、そのデータが欠落しているように見えます。AGGINDEXをYES
に設定すると、AGGREGATEファンクションを使用して即時計算を実行する(つまり、データを集計する変数に、AGGREGATEファンクションをコールするNA
トリガー・プロパティを追加する)かどうかに関係なく、文は欠落しているデータへのアクセスを試みます。
索引が作成されていて、AGGREGATEファンクションとともにAGGREGATIONを使用する場合、MODEL(またはACROSS句を使用する文)が欠落しているデータを要求すると、そのデータは即時計算されます。これは、文には必要なすべてのデータが含まれているため、MODEL(または他の文)の結果が正しいことを意味します。
それらの索引が作成されない場合、欠落しているデータは計算されません。したがって、AGGREGATEファンクションを使用した場合でも、索引が必要な文は欠落しているデータをNA
データとして解釈します。
パラメータ
(デフォルト)AGGMAPコンパイラに、aggmapが再コンパイルされた場合は必ず、作成可能なすべての索引が作成されたことを確認するように指定します。つまり、事前計算されるデータと、即時計算されるデータの両方の索引が作成されます。データの再計算は、COMPILE文がaggmapをコンパイルする場合や、最後にコンパイルされたときからその仕様が変更されたaggmapを、AGGREGATEコマンドがコンパイルする場合に即時実行されます。作成可能なすべての索引を作成することにより、コンパイル時間は長くなりますが、AGGREGATEファンクションの実行は速くなります。AGGINDEXをYESに設定する必要がある場合の詳細は、「値がYESのAGGINDEXを使用する場合」を参照してください。
即時計算されるデータの索引を作成しません。それらの索引値の作成を省略するとコンパイル時間は短縮されますが、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に追加する場合、time
、product
および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
ディメンションの最下位レベルのデータは、月レベルです。そのため、最下位レベルのデータに関連付けされたディメンション値は、Jan99
、Feb99
などです。月のデータが、四半期および年に集計されます。年の最初の6か月のデータがあるとします。AGGINDEXの値がYES
の場合、Q1
、Q2
およびYr99
ディメンション値の索引が作成されますが、Q3
およびQ4
には作成されません。
AGGINDEXがYESの場合のコンパイル時間の削減
AGGINDEXのデフォルト値YES
を使用する場合のデメリットは、aggmapのコンパイルが完了するまでに時間がかかることです。AGGREGATEコマンドとともにFUNCDATA
キーワードを使用することにより、この余分な時間のコストを削減できます。FUNCDATA
キーワードを使用する場合、作成可能なすべての索引が(データの制限方法に関係なく)作成されます。ただし、別のaggmapを使用してAGGREGATEコマンドおよびAGGREGATEファンクションを実行する場合は、FUNCDATA
キーワードを使用しないでください。
集計仕様内では、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つ以上の句を指定できます。
パラメータ
詳細データ(つまり、ソース変数)を含む変数内のディメンションの名前。
リレーションの名前。その値が、ターゲット変数のディメンションをdimnameに関連付けます。
このパラメータを指定すると、ignore_dim-valueで指定した値に対してターゲット・ディメンションがQDRを設定している場合、AGGREGATEはrelationnameで指定したリレーションをソース・ディメンションの制限に使用しません。
このパラメータを指定すると、すべてのリレーションにIGNORE句が含まれている場合、AGGREGATEはQDRの作成にリレーションを使用せずに、default_dim-value値で指定された値を使用します。すべてのリレーションにIGNORE句が含まれていて、かつDEFAULT句を指定していない場合、AGGREGATEは制限に使用するリレーションを任意に選択します。
ignore_dim-valueで指定したディメンション値に対してdimnameがQDRを設定している場合、AGGREGATEはrelationnameで指定したリレーションをソース・ディメンションの制限に使用しません。
データの集計に使用される計算方法を識別します。
実行する集計の種類を説明するキーワード。キーワードは、表9-1「集計方法」にリストされています。
集計のオプション処理を示します。
ゼロによる除算を許可するかどうかを指定します。
YESはゼロによる除算を許可します。ゼロによる除算を伴う文がエラーなしで実行されますが、NA
結果が生成されます。
NOはゼロによる除算を許可しません。ゼロによる除算を伴う文が実行を停止し、エラー・メッセージが生成されます。
デフォルト値は、DIVIDEBYZEROオプションの現行の値です。
10進オーバーフローを許可するかどうかを指定します。10進オーバーフローは、計算結果が非常に大きく、数値表記の指数部分で表示できなくなった場合に発生します。YESを指定すると、オーバーフローを許可しますが、これは、オーバーフローを生成する計算がエラーなしで実行され、NA
結果が生成されることを意味します。NOを指定すると、オーバーフローを許可しませんが、これは、オーバーフローを伴う計算が実行を停止し、エラー・メッセージが出力されることを意味します。デフォルト値は、DECIMALOVERFLOWオプションの現行の値です。
NA
値が入力されるかどうかを指定します。集計時にOracle OLAPでNA
値を無視する場合はYESを指定しますが、これによって、実際の値のみが計算に使用されます。Oracle OLAPでNA
値も計算の対象とする場合は、NOを指定しますが、これによって、値のいずれかがNA
とみなされると、計算によってNA
が返されます。デフォルト値は、NASKIPオプションの現行値です。
NASKIP句に指定した値は、operationにHAVERAGE、HFIRST、HLAST、HWAVERAGE、HWFIRST、HWLASTを指定した場合に実行される計算に影響を与えません。
加重集計を実行することを示します。operationにHWAVERAGE、HWFIRST、HWLAST、SSUM、WAVERAGE、WFIRST、WLASTまたはWSUMを指定する場合は、WEIGHTBY句を含める必要があります。WEIGHTBY句には、常にwobj引数が含まれ、オプションでWNAFILLキーワードを含めることができます。WEIGHTBY句の使用の詳細は、AGGMAPコマンドのRELATION(集計用)文を参照してください。
NA
値の処理を示します。WNAFILLのデフォルト値は、演算の値に応じて異なります。
すべてのNA
値の数を代替します。その数値は、加重オブジェクト、加重計算式または加重リレーション内のすべてのNA
値を置き換えます。HWAVERAGEおよびSSUMのデフォルト、1.0
がHWFIRST、HWLAST、WAVERAGE、WFIRST、WLASTおよびWSUMのデフォルトです。
NA
値をNA
として指定するように指定します。NA
は、ORのデフォルトです。
WNAFILL句の使用の詳細は、AGGMAPコマンドのRELATION(集計用)文を参照してください。
加重値を提供する変数、計算式またはリレーション。数値またはブール値になります。wobjがブール値の場合、TRUE
のとき加重は1.0
となり、FALSE
のときの加重は0.0
となります。計算式および集計される変数のディメンション性に応じて、必要な場合のみ計算式に問合せが行われます。wobjがリレーションの場合、1次元のセルフ・リレーションになります。wobjの値の指定に関する詳細は、AGGMAPコマンドのRELATION(集計用)文を参照してください。
集計仕様のCACHE文によって、Oracle OLAPに、計算されたデータをキャッシュまたは格納するかどうか、変数データが他の変数からの詳細データを使用して集計された場合にリーフ・データまたは詳細データを移入するかどうか、サマリー値がNA
と計算される場合にNA
値をキャッシュするかどうかを認識させることができます。
注意: CACHE文は、AGGREGATEファンクションを使用して即時集計された変数データを格納またはキャッシュするかどうかを決定する唯一の因子です。「集計データを格納またはキャッシュするかどうかのOracle OLAPによる決定方法」を参照してください。 |
パラメータ
AGGREGATEファンクションを使用して計算されるデータについて、AGGREGATEファンクションが実行されるたびにOracle OLAPがそのデータを計算するように指定します。この2つのキーワードのいずれかを指定した場合、Oracle OLAPはAGGREGATEファンクションによって計算されたデータを格納またはキャッシュしません。
AGGREGATEファンクションを使用して計算されるデータについて、AGGREGATEファンクションにより計算されたデータをOracle OLAPがデータベースの変数に格納するように指定します。このオプションを指定すると、アナリティック・ワークスペースが更新およびコミットされる際に、集計結果が永続的に変数に格納されます。
AGGREGATEファンクションを使用して計算されるデータについて、AGGREGATEファンクションにより計算されたデータをOracle OLAPがセッション・キャッシュにキャッシュするように指定します(「Oracle OLAPセッション・キャッシュの概要」を参照)。このオプションを指定すると、集計結果が更新およびコミット中に無視され、セッション後に廃棄されます。
注意: SESSCACHEがNO に設定されている場合、SESSION を指定してもOracle OLAPはデータをキャッシュしません。この場合、SESSION の指定は、NONE の指定と同じことになります。 |
(デフォルト)AGGREGATEファンクションを使用して計算されるデータについて、そのデータの処理方法を決定する際、VARCACHEオプションの値を使用するように指定します。「集計データを格納またはキャッシュするかどうかのOracle OLAPによる決定方法」を参照してください。
別の変数からの詳細データを使用して変数データが集計された場合、Oracle OLAPが変数のリーフ・データを計算するように指定します。
(デフォルト)別の変数からの詳細データを使用して変数データが集計された場合、Oracle OLAPが変数のリーフ・データを計算しないように指定します。
AGGREGATEファンクションを使用して計算されるデータについて、AGGREGATEファンクションの実行結果であるNA
値がOracle OLAPセッション・キャッシュ内に格納されるように指定します。この場合、その式としてのAGGREGATEファンクションに$NATRIGGERプロパティを持つ変数が存在する場合、Oracle OLAPはその変数の値を再計算しません。(NA
値のキャッシュの詳細は、「$NATRIGGERの結果を格納またはキャッシュするかどうかのOracle OLAPによる決定方法」を参照)。
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ファンクションを使用して計算されたデータがユーザーの変更内容を反映しない点にあります。 |
集計仕様で、DIMENSION文はステータスをディメンションの単一の値に設定します。集計仕様がDIMENSION文によりそのような単一の値を指定しない場合、Oracle OLAPは集計の実行時にディメンションの現行のステータスの値を使用します。
DIMENSION文を使用して、ディメンションのステータスが、集計で使用する値に確実に設定されるようにします。ソース・オブジェクト、基礎オブジェクトおよびターゲット・オブジェクトによって共有されない各ディメンションには、個別の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のステータスを設定します。
dimnameにより指定されるディメンションのステータスを決定する値セット・オブジェクトの名前。
dimnameのすべての値をステータスにあるように指定します。
データの集計に使用される計算方法を識別します。
実行する集計の種類を説明するキーワード。キーワードは、表9-1「集計方法」にリストされています。
集計のオプション処理を示します。
ゼロによる除算を許可するかどうかを指定します。YESを指定すると、ゼロによる除算が許可されますが、これによって、ゼロによる除算を伴う文がエラーなしで実行され、NA
結果が生成されることを意味します。NOを指定すると、ゼロによる除算を許可しませんが、これは、ゼロによる除算を伴う文が実行を停止し、エラー・メッセージが生成されることを意味します。デフォルト値は、DIVIDEBYZEROオプションの現行の値です。
10進オーバーフローを許可するかどうかを指定します。10進オーバーフローは、計算結果が非常に大きく、数値表記の指数部分で表示できなくなった場合に発生します。YESを指定すると、オーバーフローを許可しますが、これは、オーバーフローを生成する計算がエラーなしで実行され、NA
結果が生成されることを意味します。NOを指定すると、オーバーフローを許可しませんが、これは、オーバーフローを伴う計算が実行を停止し、エラー・メッセージが出力されることを意味します。デフォルト値は、DECIMALOVERFLOWオプションの現行の値です。
NA
値が入力されるかどうかを指定します。集計時にOracle OLAPでNA
値を無視する場合はYESを指定しますが、これによって、実際の値のみが計算に使用されます。Oracle OLAPでNA
値も集計の対象とする場合は、NOを指定しますが、これによって、値のいずれかがNA
とみなされると、計算によってNA
が返されます。デフォルト値は、NASKIPオプションの現行の値です。
NASKIP句に指定した値は、operationにHAVERAGE、HFIRST、HLAST、HWAVERAGE、HWFIRST、HWLASTを指定した場合に実行される計算に影響を与えません。
加重集計を実行することを示します。operationにHWAVERAGE、HWFIRST、HWLAST、SSUM、WAVERAGE、WFIRST、WLASTまたはWSUMを指定する場合は、WEIGHTBY句を含める必要があります。WEIGHTBY句には、常にwobj引数が含まれ、オプションでWNAFILLキーワードを含めることができます。WEIGHTBY句の使用の詳細は、AGGMAPコマンドのRELATION(集計用)文を参照してください。
NA
値の処理を示します。WNAFILLのデフォルト値は、演算の値に応じて異なります。WNAFILL句の使用の詳細は、AGGMAPコマンドのRELATION(集計用)文を参照してください。
すべてのNA
値の数を代替します。その数値は、加重オブジェクト、加重計算式または加重リレーション内のすべてのNA
値を置き換えます。
0.0
がHWAVERAGEおよびSSUMのデフォルトです。
1.0
がHWFIRST、HWLAST、WAVERAGE、WFIRST、WLASTおよびWSUMのデフォルトです。
NA
値をNA
として指定するように指定します。NA
は、ORのデフォルトです。
加重値を提供する変数、計算式またはリレーション。数値またはブール値になります。wobjがブール値の場合、TRUE
のとき加重は1.0
となり、FALSE
のときの加重は0.0
となります。計算式および集計される変数のディメンション性に応じて、必要な場合のみ計算式に問合せが行われます。wobjがリレーションの場合、1次元のセルフ・リレーションになります。wobjの値の指定に関する詳細は、AGGMAPコマンドのRELATION(集計用)文を参照してください。
集計仕様で、MEASUREDIM文は演算子変数または引数変数の定義で指定されるメジャー・ディメンションの名前を識別します。
パラメータ
メジャー・ディメンションの名前。メジャー・ディメンションは、ユーザーが定義するディメンションです。ディメンション値は、既存の変数の名前です。
注意: メジャー・ディメンションは、aggmapオブジェクトの定義に含まれている場合は指定できません。 |
使用上の注意
メジャー・ディメンションの定義
次の文では、MEASUREという名前のディメンションが定義されます。
DEFINE measure DIMENSION TEXT
メジャー・ディメンションの移入
一度メジャー・ディメンションを定義したら、MAINTAIN文を使用してディメンション値をMEASUREディメンションに追加できます。
次の文では、sales
、units
、price
およびinventory
変数の名前が、そのディメンション値としてmeasure
に追加されます。
MAINTAIN measure ADD 'sales', 'units', 'price', 'inventory'
演算子変数を伴うメジャー・ディメンションの使用
メジャー・ディメンションを使用する目的は、非加算集計演算子を使用する場合の柔軟性がもたらす利点を活用することです。演算変数または引数変数の定義で、メジャー・ディメンションを使用できます。
次の文は、opvar
という名前の演算子変数の定義および移入方法を示しています。
DEFINE opvar TEXT <measure> opvar (measure 'sales') = 'SUM' opvar (measure 'inventory') = 'HLAST'
集計仕様で、MODEL文は事前定義されたモデルを実行します。
パラメータ
事前定義されたMODELオブジェクトの名前を含むテキスト式。
モデルが静的(事前計算の)モデルか、動的モデルかを指定します。
PRECOMPUTE ALLがデフォルトで、静的モデルを指定します。次の条件に合致する必要があります。
集計仕様でこの文の前に配置されるRELATION文またはMODEL文にも、PRECOMPUTE ALLを指定する。
集計仕様でこのコマンドの後に配置されるRELATION文またはMODEL文には、PRECOMPUTE ALLまたはPRECOMPUTE NAのどちらを指定することもできる。
PRECOMPUTE NAは動的モデルを指定します。実行時のモデルの実行については、次の条件を満たす必要があります。
集計仕様のRELATION文はすべて、PRECOMPUTE NAとして指定したMODEL文の前に配置する。
集計仕様でこの文の後に配置される別のMODEL文にも、PRECOMPUTE NAを指定する。
集計仕様で、PRECOMPUTE文は変数のどの集計値を計算するかを指定します(AGGREGATEコマンドとともに使用)。
注意: PRECOMPUTE文を含む集計仕様では、RELATION文の中にPRECOMPUTE句を使用できません。 |
パラメータ
AGGREGATEコマンドを使用してデータベースのメンテナンス手順として集計する変数値の割合を明示的に指定します。Oracle OLAPではその割合を基に、集計アドバイザという特殊機能を使用して、集計の対象となる値が具体的に決定されます
AGGREGATEコマンドを使用してデータベースのメンテナンス手順として集計する変数値とその数が、集計アドバイザを通じて決定されるよう指定します。
すべての集計データが、AGGREGATEコマンドを使用して事前に計算されるよう指定します。
AGGREGATEファンクションを使用してすべての値を即時計算するように指定します(つまり、AGGREGATEコマンドにより事前計算されるデータはありません)。
集計仕様で、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つ以上です。
argumentは、次のいずれか1つ以上です。
argsvarは、一部またはすべてのディメンション値にargument句を含むテキスト変数です。
パラメータ
階層内のすべてのディメンション値の親を識別することにより、階層を定義するリレーション。
集計中に、1つ以上のディメンションのステータスを設定します。これは、現行のステータスを変更します。
一部のディメンション値がAGGREGATEコマンドでのみ移入されることを示します。RELATION文のPRECOMPUTE句は、AGGREGATEコマンドにより集計されるデータを制限します。最も単純な形式では、PRECOMPUTE句がLIMIT dimension TO文と同様の役割を果すと考えることができます。デフォルトの制限はディメンション上のものであり、RELATION文で明示的に名前指定されないことに注意してください。
注意: いずれかのRELATION文の中にPRECOMPUTE句を含む集計仕様では、PRECOMPUTE文を使用できません。また、圧縮コンポジットに対するRELATION文にもPRECOMPUTE句を指定できません。 |
AGGREGATEコマンドを使用してデータベースのメンテナンス手順として集計する変数値の割合を明示的に指定します。Oracle OLAPではその割合を基に、集計アドバイザという特殊機能を使用して、集計の対象となる値が具体的に決定されます
AGGREGATEコマンドを使用してデータベースのメンテナンス手順として集計する変数値とその数が、集計アドバイザを通じて決定されるよう指定します。
ディメンションの1つ以上の値のリスト。
INTEGER
またはNUMBER
値を持つディメンション以外のすべてのディメンションについて、事前計算するディメンション値の位置。INTEGER
値をカンマで区切って位置を指定します。
値セットの名前。この引数を含める場合、値セットのディメンション値によってディメンション化されるデータのみがAGGREGATEコマンドにより事前計算されます。残りの値は、即時計算できます。
ディメンションの現行のステータスは、事前計算されるデータも制限する場合があることに注意してください。詳細は、AGGREGATEコマンドを参照してください。
すべてのディメンション値について、データを事前計算するように指定します。
AGGREGATEファンクションを使用してすべての値を即時計算するように指定します(つまり、AGGREGATEコマンドにより事前計算されるデータはありません)。
事前計算されるディメンションのレベルを指定します。level-relation-nameには、ディメンション値とそのディメンションのレベルの名前とを関連付けるリレーション・オブジェクトの名前をTEXT
値で指定します。level-nameには、level-relation-nameで使用した同じレベル名を使用して、1つ以上のレベルの名前をTEXT
値で指定します。
データの集計に使用される計算方法を識別します。
実行する計算の種類を説明するキーワード。キーワードは表9-1「集計方法」にリストされており、AGGROPS文を発行することによって取得できます。最初の3文字を指定することにより、キーワードの固定長3文字の省略形を指定できます。
表9-1 集計方法
キーワード | 説明 |
---|---|
AND |
子データ値のいずれかが |
AVERAGE |
データ値を加算した後、合計を加算されたデータ値の数で除算する。AVERAGEを使用する場合、「平均演算子」で説明されているように特別な注意が必要。 |
FIRST |
最初の非 |
HAVERAGE |
(階層平均)データ値を加算した後、合計をディメンション階層の子の数で除算する。非 このキーワードは、argumentのNASKIPオプション設定の影響を受けない。 |
HFIRST |
(階層の最初)値が このキーワードは、argumentのNASKIPオプション設定の影響を受けない。 |
HLAST |
(階層の最後)値が このキーワードは、argumentのNASKIPオプション設定の影響を受けない。 |
HWAVERAGE |
(階層加重平均)非 このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。 このキーワードは、argumentのNASKIPオプション設定の影響を受けない。 |
HWFIRST |
(階層の最初の加重)値が このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。 このキーワードは、argumentのNASKIPオプション設定の影響を受けない。 |
HWLAST |
(階層の最後の加重)値が このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。 このキーワードは、argumentのNASKIPオプション設定の影響を受けない。 |
LAST |
最後の非 |
MAX |
すべての親データ値の子における最大データ値。 |
MIN |
すべての親データ値の子における最小データ値。 |
NOAGG |
このディメンションのどのデータも集計しない。 |
OR |
子データ値のいずれかが |
SSUM |
(スケール合計)加重オブジェクトの値を各データ値に加算してから、データ値を加算する。 このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。 |
SUM |
(デフォルト)データ値を加算する。 |
WAVERAGE |
(加重平均)各データ値を加重要素で乗算して、データ値を加算した後、結果を加重要素の合計で除算する。 このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。 |
WFIRST |
(最初の加重)対応する加重値により乗算される、最初の非 このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。 |
WLAST |
(最後の加重)対応する加重値により乗算される、最後の非 このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。 |
WMAX |
(加重最大値)対応する加重値により乗算される、すべての親データ値の子における最大データ値。 このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。 |
WMIN |
(加重最小値)対応する加重値により乗算される、すべての親データ値の子における最小データ値。 このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。 |
WSUM |
(加重合計)各データ値を加重要素で乗算した後、データ値を加算する。 このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。 |
その各ディメンション値に、別の演算を指定するTEXT
変数。
注意: 圧縮コンポジットによってディメンション化される変数には有効ではありません。 |
opvar引数は、次の2つの方法で使用されます。
メジャー・ディメンション -- 集計される変数に応じて集計方法を変更します。集計される変数に応じて集計方法を変更するやり方は、別々の方法で集計する必要のある複数の変数を単一のaggmapを使用して集計する場合に役立ちます。すべてのメジャーを単一のAGGREGATEコマンドで事前集計するか、または別個の文で事前集計するかにかかわらず、AGGREGATEはこの演算変数を使用して計算方法を識別します。メジャー・ディメンションの値は、集計する変数の名前です。各メジャーの集計に使用される演算をその値によって識別する、テキスト変数をディメンション化します。集計仕様には、メジャー・ディメンションを識別するMEASUREDIM文を含める必要があります。例9-21「メジャー・ディメンションを使用した集計」を参照してください。
明細項目ディメンション -- 集計される明細項目に応じて集計方法を変更します。通常、明細項目ディメンションは非階層で、財務割当てを識別します。明細項目ディメンションは、データ変数および各項目の集計に使用される演算を識別するテキスト変数の両方をディメンション化するために使用されます。演算変数は通常、長期間にわたる明細項目の集計に使用します。aggmapでは、MEASUREDIM文を使用しないでください。例9-22「明細項目ディメンションを使用した集計」を参照してください。
opvar引数は、集計に使用されるディメンションによってディメンション化することはできません。たとえば、geography
ディメンションに別の演算を指定する場合、opvarはgeography
によってディメンション化できません。
演算子変数のページング量を最小化するには、固定幅8
のTEXT
型として演算変数を定義します。
集計されるディメンションの別名ディメンションを、現在集計されている親値にQDRとして設定するように指定します。
rel-nameディメンションの別名ディメンションの名前。
集計のオプション処理を示します。
ゼロによる除算を許可するかどうかを指定します。
YESはゼロによる除算を許可します。ゼロによる除算を伴う文がエラーなしで実行されますが、NA
結果が生成されます。
NOはゼロによる除算を許可しません。ゼロによる除算を伴う文が実行を停止し、エラー・メッセージが生成されます。
デフォルト値は、DIVIDEBYZEROオプションの現行の値です。
10進オーバーフローを許可するかどうかを指定します。10進オーバーフローは、計算結果が非常に大きく、数値表記の指数部分で表示できなくなった場合に発生します。
YESはオーバーフローを許可します。オーバーフローを生成する計算がエラーなしで実行され、NA
結果が生成されます。
NOはオーバーフローを許可しません。オーバーフローを伴う計算が実行を停止し、エラー・メッセージが出力されます。
デフォルト値は、DECIMALOVERFLOWオプションの現行の値です。
NA
値が入力されるかどうかを指定します。
YESは、集計時にNA
値を無視することを指定します。実際の値のみが計算に使用されます。
NOは、集計時にNA
値が検討されるように指定します。値のいずれかがNA
とみなされると、計算によりNA
が返されます。
デフォルト値は、NASKIPオプションの現行の値です。
NASKIP句に指定した値は、operationにHAVERAGE、HFIRST、HLAST、HWAVERAGE、HWFIRST、HWLASTを指定した場合に実行される計算に影響を与えません。
加重集計を実行することを示します。operationにHWAVERAGE、HWFIRST、HWLAST、SSUM、WAVERAGE、WFIRST、WLASTまたはWSUMを指定する場合は、WEIGHTBY句を含める必要があります。WEIGHTBY句には、常にwobj引数が含まれ、オプションでWNAFILLキーワードを含めることができます。
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がブール値の場合、TRUE
のとき加重は1.0
となり、FALSE
のときの加重は0.0
となります。計算式および集計される変数のディメンション性に応じて、必要な場合のみ計算式に問合せが行われます。wobjがリレーションの場合、1次元のセルフ・リレーションになります。wobjへの値の指定に関する詳細は、「加重集計方法の使用」を参照してください。
YESの場合、Oracle OLAPがこのリレーションを使用して変数を集計する際に、その変数に関連するAggcount変数を移入するように指定します。Aggcount変数の詳細は、「Aggcount変数」を参照してください。
NOの場合、Oracle OLAPがこのリレーションを使用して変数を集計する際に、その変数に関連するAggcount変数を移入しないように指定します。Aggcount変数の詳細は、「Aggcount変数」を参照してください。
一部またはすべてのディメンション値にargumentオプションを含むTEXT
変数。
集計において、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
階層にJan
、Feb
およびMar
のデータを格納する一方で、Fiscal
階層ではMay
、Jun
およびJul
のデータを格納している場合など)。
AGGREGATEファンクションによって即時計算する値や、AGGREGATEコマンドによって事前計算する値の指定。使用する値セットにより、ディメンション値の名前が指定されます。この方法で値セットを使用するには、次の構文を使用します。
RELATION rel-name PRECOMPUTE (valueset)
この場合、PRECOMPUTEキーワードの後ろの値セットを使用します。
値セットを使用して階層ディメンションを制限する場合で、複数のaggmapを使用し、階層に一貫性がない場合は、AGGREGATEファンクションでFORCECALCキーワードを使用するか、集計対象の変数に$AGGREGATE_FORCECALCプロパティを設定しておく必要があります。
PRECOMPUTEまたはOPERATOR句を変更する場合
PRECOMPUTEまたはOPERATOR句を変更する場合は、変数データを再集計し、aggmapを再コンパイルして正確なデータを生成する必要があります。
異なる階層レベルにロードされたデータの集計
異なるレベルの階層にあるディメンション値にデータをロードする場合、集計仕様のRELATION文のPRECOMPUTE句にステータスを設定する方法に注意する必要があります。
time
ディメンションに3つのレベルを持つ階層があり、月は四半期に集計され、四半期は年に集計されるとします。一部のデータが月ディメンション値にロードされ、他のデータが四半期ディメンション値にロードされます。たとえば、Q1
はJanuary
、February
およびMarch
の親です。March
のデータは、March
ディメンション値にロードされます。しかし、January
およびFebruary
のデータの合計は、Q1
ディメンション値に直接ロードされます。実際、January
およびFebruary
ディメンション値には、データのかわりにNA
値が含まれます。ここで目標とするのは、March
のデータをQ1
のデータに追加することです。
January
、February
およびMarch
をQ1
に集計しようとする場合、March
のデータは単純にQ1
のデータを置き換えます。これが起こると、Q1
にはJanuary
、February
および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
にはJanuary
、February
およびMarch
が含まれますが、March
ではなくFebruary
をQ1
の最後の月にするとします。そのためには、次の文を使用します。
MAINTAIN time MOVE 'Feb01' AFTER 'Mar01'
これで、LAST演算子はFEB01
をQ1
の最後の月とみなすようになりました。
読取り権限と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.7
がsalesw
加重オブジェクトの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文によって集計されるのは、ステータスにあるソース・データ値のみです。親値は、ステータスにあるかどうかに関係なく計算されます。たとえば、Jan01
、Feb01
および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