ALLOCATEコマンドは、変数データを階層ディメンションの上位から下位へ順に割り当てることによって、上位レベルのデータから下位レベルのデータを計算するコマンドです。通常、予算編成、傾向予測および収益分析のためにデータを割り当てます。
構文
ALLOCATE source [SOURCE conjoint] [BASIS basisname [ACROSS dimname]] - [TARGET targetname [TARGETLOG targetlogname]] - [USING aggmap] [ERRORLOG errorlogfileunit]
パラメータ
割り当てる値を指定する変数または計算式。sourceオブジェクトが計算式の場合、TARGETキーワードで変数を指定する必要があります。sourceとして変数を指定してターゲット変数またはbasisname変数を指定しない場合、ALLOCATEは基礎およびターゲットとしてsourceを使用します。
ユーザーが変更したセルのリストを含む結合ディメンションを指定します。ALLOCATEコマンドはこのリストを使用して、変更されたすべてのソース・セルの割当てに必要な最小のターゲット・ステータスを作成します。
割当ての基準となるデータを指定する変数、リレーションまたは計算式を指定します。このデータによって、割り当てられた値を受け取るターゲット・セル、および均等演算または比例演算でターゲット・セルに割り当てられるソースの量が決定されます。
aggmapのRELATION(割当て用)文によって指定されたOPERATORがCOPY演算子(COPY、MIN、MAX、FIRST、LAST)の場合、どのターゲット・セルを更新するかを基礎を使用してALLOCATEコマンドに指定します。指定されたOPERATORがEVENの場合、ALLOCATEは割当てに使用するカウントを基礎から導き出します。指定されたOPERATORがPROPORTIONALの場合、ALLOCATEは基礎データを使用して各ターゲット・セルに割り当てる量を決定します。OPERATORがHCOPY、HFIRST、HLASTまたはHEVENの場合、ALLOCATEはBASISオブジェクトを使用しません。そのかわり、RELATION文で名前を付けたリレーションによって指定されるディメンション階層のすべてのターゲット・セルにソース・データを割り当てます。
基礎とターゲットの両方に同じ変数を指定した場合、ターゲット・セルの現行の値によって割当てが決定されます。基礎を指定しない場合、ALLOCATEコマンドは基礎としてソースを使用します。
ALLOCATEコマンドが基礎でセルを検出するためにループ処理するディメンション(または名前付きコンポジット)を指定します。基礎は計算式も使用可能なので、ループするディメンションを使用して基礎ループからスパース性を排除することにより、大きなパフォーマンス効果を実現できます。
割り当てられた値を保持する変数を指定します。ソース・オブジェクトが計算式の場合、ターゲットを指定する必要があります。ソース・オブジェクトが変数であり、ターゲットを指定しない場合、ALLOCATEはターゲットとしてソースの変数を使用します。
ALLOCATEが割当てのコピーを割り当てる変数(targetname変数と同様にディメンション化されている)、またはそのような変数を指定するリレーションを指定します。たとえば、time
およびproduct
のディメンション値Jan01
およびTV
によって指定されたcosts
変数のセルにALLOCATEが100
の値を割り当て、その同じディメンション値によって指定されたcostacct
変数のセルがtargetlog
リレーションによって指定されると、ALLOCATEは指定されたcostacct
セルにも100
の値を割り当てます。
割当てに使用する事前定義したaggmapの名前を指定します。この句を含めない場合、$ALLOCMAPプロパティを使用して事前に指定されている変数のデフォルトの割当て仕様をコマンドで使用します。
割当てデッドロック、エラーまたは他の情報のロギングにALLOCATEが使用するファイル・ユニットを指定します。割当てでデッドロックおよびエラーが生成されない場合、ALLOCATEはerrorlognameにNA
を設定します。割当てで1つ以上のデッドロックまたはエラーが生成されると、そのイベントが指定されたファイルに送信されます。ALLOCATEは、割り当てられないままになっている割当てソースごとに1行ずつファイルに書き込みます。
ERRORLOGでファイル・ユニットを指定しない場合、ALLOCATEは情報を標準の出力デバイスに送信します。
使用上の注意
元の基礎値の保存
通常、ソース・オブジェクト、基礎オブジェクトおよびターゲット・オブジェクトは同じ変数なので、ターゲット変数のセルにある元の値によって割当ての比率が決定されます。割当てによって、ターゲット・セルの元の値が割り当てられた値で上書きされます。変数の元の値を保存するには、元の変数を基礎オブジェクトとして指定し、割り当てられた値をターゲット・オブジェクトとして新しい変数に保存します。異なる基礎オブジェクトおよびターゲット・オブジェクトを使用することによって、割り当てられたデータをプレビューできます。割り当てられた値を基礎と同じ変数に格納するには、基礎およびターゲットと同じオブジェクトで割当てを再度実行します。異なる基礎オブジェクトおよびターゲット・オブジェクトを使用する例として、割当ての基礎にactuals
変数を使用し、ターゲットにbudget変数を使用する例を次に示します。
ソースまたは基礎の計算式の使用
ソース・オブジェクトおよび基礎オブジェクトに計算式が使用できるので、複雑な計算を行い、その結果をソース・オブジェクトまたは基礎オブジェクトに使用できます。たとえば、翌年の売上でactualsの30%増加を条件とする個々の製品の売上高を参照するには、次の計算式で増加後の売上高を表します。
DEFINE actualsWanted DECIMAL FORMULA <time, product> EQ LAG(actuals, 1, time) * 1.3
ALLOCATEコマンドでsourceオブジェクトとしてACTUALSWANTEDを使用します。この例では、基礎としてACTUALS変数を使用しています。
複数割当てのトラッキング
TARGETLOG引数で変数を指定すると、その変数に割り当てられた値およびtarget
変数に割り当てられた値を格納できます。この二重のエントリ割当てによって、同じターゲット・セルに対する複数の割当てをトラッキングできます。たとえば、一連の様々なコストを同じコスト・センターに割り当てると、ターゲット・セルの値が割当てごとに増加します。各割当てに異なるtargetlogname変数を指定することによって、各割当てを個別にトラッキングできます。
割当てエラーのロギング
ERRORLOG引数でファイルを指定すると、ロックおよびNA
の基礎値が原因で発生したエラーを記録できます。ログによって、ソース値が割り当てられないままになっていることをアプリケーションにフィードバックできます。この情報に基づいて、たとえば、aggmapのRELATION文でHEVENなどの階層演算子を使用して割当てを変更できます。ALLOCERRLOGHEADERおよびALLOCERRLOGFORMATオプションを使用すると、エラー・ログの書式を設定できます。割当て仕様では、ERRORLOGおよびERRORMASK文を使用してエラー・ログのその他の部分も指定できます。
割当ての進捗状況のロギング
キューブ操作ログにより、割当ての進捗状況を記録および監視できます。このファイルを使用することにより、時間がかかる割当て中にフィードバックが得られ、今後の割当ての最適化に有効な情報を取得できます。
関連項目: キューブ操作ログおよびDBMS_CUBE_LOGパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。 |
例
例9-34 直接均等割当て
この例では、time
ディメンション階層の1レベルで指定された値を、階層の中間レベルに値を割り当てず、下位レベルの値によって指定されている変数のターゲット・セルに直接割り当てます。timemonthyear
リレーションはtime
値の階層関係を指定します。割当てのソース、基礎およびターゲットはすべて同じ変数PROJBUDGETであり、その変数はdivision
、time
およびline
にディメンション化されています。time
ディメンションは非一意の連結ディメンションであり、ベース・ディメンションとしてyear
、quarter
およびmonth
があります。このtime
ディメンションは、<year: Yr02>
、<quarter: Q1.02>
、<quarter: q1.02>
と、<month: Jan02>
から<month: Jun02>
までに制限されています。次の文によってprojbudget
変数が定義され、セルの値が6000
に設定され、その変数のレポートが作成されます。
DEFINE projbudget VARIABLE DECIMAL <division time line> projbudget(division 'CAMPING' time '<YEAR: YR02>' line 'MARKETING') = 6000 REPORT projbudget
この文によって生成される結果は、次のとおりです。
LINE: MARKETING -PROJBUDGET-- --DIVISION--- TIME CAMPING ---------------- ------------- <year: Yr02> 6,000.00 <quarter: Q1.02> NA <quarter: Q2.02> NA <month: Jan02> NA <month: Feb02> NA <month: Mar02> NA <month: Apr02> NA <month: May02> NA <month: Jun02> NA
次の文によってtime
ディメンションのセルフ・リレーションが定義され、month
値をyear
値に直接関連付け、そのリレーションの値のレポートが作成されます。
DEFINE timemonthyear RELATION time <time> LIMIT month TO 'JAN02' TO 'JUN02' timemonthyear(time month) = '<YEAR: YR02>' REPORT timemonthyear
この文によって生成される結果は、次のとおりです。
TIME TIMEMONTHYEAR ---------------- ------------- <year: Yr02> NA <quarter: Q1.02> NA <quarter: Q2.02> NA <month: Jan02> <year: Yr02> <month: Feb02> <year: Yr02> <month: Mar02> <year: Yr02> <month: Apr02> <year: Yr02> <month: May02> <year: Yr02> <month: Jun02> <year: Yr02>
次の文によってaggmapが定義され、割当て仕様に文が入力されます。これにより、projbudget
から<year: Yr02>
によって指定される値がmonth
ディメンション値によって指定される同じ変数のセルに割り当てられ、projbudget
のレポートが作成されます。変数のターゲット・セルがNA
値なので、割当て仕様のRELATION文ではHEVEN演算子が指定されます。ALLOCATEコマンドによって1つの変数projbudget
のみが指定されているので、その変数が割当てのソースおよびターゲットになります。割当てはHEVEN演算なので、基礎オブジェクトは必要ありません。割当て仕様のリレーションで指定されている階層に従って、割当てはyear
ソース値からmonth
ターゲット値に直接行われます。
DEFINE projbudgmap AGGMAP ALLOCMAP RELATION timemonthyear OPERATOR HEVEN END ALLOCATE projbudget USING projbudgmap REPORT projbudget
この文によって生成される結果は、次のとおりです。
LINE: MARKETING -PROJBUDGET-- --DIVISION--- TIME CAMPING ---------------- ------------- <YEAR: YR02> 6,000.00 <QUARTER: Q1.02> NA <QUARTER: Q2.02> NA <MONTH: JAN02> 1,000.00 ... <MONTH: JUN02> 1,000.00
例9-35 ロックを伴う再帰的均等割当て
この例では、time
ディメンション階層の1レベルで指定された値を中間レベルのターゲット・セルに最初に変数で割り当て、次に階層の最下位レベルの値によって指定されているセルに割り当てます。timeparent
リレーションはtime
値の階層関係を指定します。割当てのソース、基礎およびターゲットはprojbudget
です。division
、time
およびline
ディメンションのステータスは直接割当ての例と同じです。この例の最初の設定では、projbudget
変数の値は<year: Yr02>
で指定されたセルの6000
のみです。
DEFINE timeparent RELATION time <time> LIMIT quarter TO 'Q1.02' 'Q2.02' timeparent(time quarter) = '<YEAR: YR02>' LIMIT month TO 'JAN02' TO 'MAR02' timeparent(time month) = '<QUARTER: Q1.02>' LIMIT month TO 'APR02' TO 'JUN02' timeparent(time month) = '<QUARTER: Q1.02>' REPORT timeparent
この文によって生成される結果は、次のとおりです。
TIME TIMEPARENT ---------------- ------------- <year: Yr02> NA <quarter: Q1.02> <year: Yr02> <quarter: Q2.02> <year: Yr02> <month: Jan02> <quarter: Q1.02> <month: Feb02> <quarter: Q1.02> <month: Mar02> <quarter: Q1.02> <month: Apr02> <quarter: Q2.02> <month: May02> <quarter: Q2.02> <month: Jun02> <quarter: Q2.02>
次に、セルを割当ての対象外にするセルのロックの例を示します。セルをロックするには値セットが必要なので、次の文で定義してtime
ディメンションを必要な値に制限し、値を値セットに割り当て、time
ディメンションのステータスをリセットします。
DEFINE timeval TO '<QUARTER: Q2.02>' LIMIT time TO '<Year: YR02>' '<Quarter: Q1.02>' '<Quarter: Q2.02>' - '<month: Jan02>' '<month: Feb02>' '<month: Mar02>' - '<month: Apr02>' '<month: May02>' '<month: Jun02>
次の文によって、projbudgmap
という名前のaggmapの仕様が修正されます。この場合、割当て仕様のRELATION文はtimeparent
リレーション、HEVEN演算子およびPROTECT引数を指定します。READWRITEキーワードは、ロックされたセルの子も割当ての対象外にすることを指定します。NONORMALIZEキーワードは、ロックされたセルの値がターゲット・セルに割り当てられるまでソース値から差し引かれないことを指定します。その後、この文によってソース値が割り当てられ、結果のレポートが作成されます。
CONSIDER projbudgmap ALLOCMAP RELATION timeparent OPERATOR HEVEN ARGS PROTECT NONORMALIZE READWRITE timeval END ALLOCATE projbudget USING projbudgmap REPORT projbudget
この文によって生成される結果は、次のとおりです。
LINE: MARKETING -PROJBUDGET-- --DIVISION--- TIME CAMPING ---------------- ------------- <year: Yr02> 6,000.00 <quarter: Q1.02> 6,000.00 <quarter: Q2.02> NA <month: Jan02> 2,000.00 <month: Feb02> 2,000.00 <month: Mar02> 2,000.00 <month: Apr02> NA <month: May02> NA <month: Jun02> NA
例9-36 再帰的比例割当て
この例では、再帰的均等割当てと同じリレーションを使用しますが、PROPORTIONAL演算子を使用し、セルをロックしません。比例割当ては、ターゲット・セルに割り当てる値を計算するために基礎オブジェクトの値を使用するため、projbudget
変数にはその各セルに割り当てられている値が含まれています。<year: Yr02>
セルの値は、割り当てられていたとおり6000
です。この値は下位レベルの集計ではありません。割当て前のprojbudget
のレポートで生成される結果は次のとおりです。
LINE: MARKETING -PROJBUDGET-- --DIVISION--- TIME CAMPING ---------------- ------------- <year: Yr02> 6,000.00 <quarter: Q1.02> 1,000.00 <quarter: Q2.02> 2,000.00 <month: Jan02> 300.00 <month: Feb02> 100.00 <month: Mar02> 600.00 <month: Apr02> 400.00 <month: May02> 800.00 <month: Jun02> 800.00
次の文は、前の例で使用したaggmapの仕様をPROPORTIONAL演算子を指定する新しいRELATION文に変更した文です。この割当て仕様には、ソース値が割当て後にゼロ値に置き換えられることを指定するSOURCEVAL
ZERO
文が含まれます(詳細は、ALLOCMAPコマンドのSOURCEVAL文を参照)。その後、この文によってソース値が割り当てられ、結果のレポートが作成されます。
CONSIDER projbudgmap ALLOCMAP JOINLINES('RELATION timeparent OPERATOR PROPORTIONAL timeval' - 'SOURCEVAL ZERO' - 'END') ALLOCATE projbudget USING projbudgmap REPORT projbudget
TIME TIMEPARENT LINE: MARKETING -PROJBUDGET-- --DIVISION--- TIME CAMPING ---------------- ------------- <year: Yr02> 0 <quarter: Q1.02> 2,000.00 <quarter: Q2.02> 4,000.00 <month: Jan02> 600.00 <month: Feb02> 200.00 <month: Mar02> 1,200.00 <month: Apr02> 800.00 <month: May02> 1,600.00 <month: Jun02> 1,600.00