MAINTAINコマンドは、ディメンションの値、コンポジットの値およびパーティション・テンプレート・オブジェクトの値を入力し、メンテナンスするコマンドです。
注意: MAINTAIN文は、Maintainトリガーを持つサロゲート・ディメンションにも発行できます。この場合、Oracle OLAPでは、Maintainトリガー・プログラムのみが実行され、それ以外のアクションは行われません。詳細は、「トリガー・プログラム」を参照してください。Maintainトリガーのないサロゲート・ディメンションに対してMAINTAIN文を発行すると、エラーが返されます。 |
構文
MAINTAIN object {ADD|DELETE|RENAME|MOVE|MERGE} args
MAINTAINコマンドで使用できるキーワードは、オブジェクトごとに次のように異なります。
MAINTAIN dimension {ADD|DELETE|RENAME|MOVE|MERGE} args
使用できるキーワードは、メンテナンスするディメンションの型によって、次のように異なります。
非連結ディメンションでは、ADD、DELETE、RENAME、MOVEまたはMERGEキーワードを使用して、非連結ディメンション値を追加、削除、名前の変更、移動またはマージできます。また、ADDキーワードを使用して、一時計算メンバーをディメンションに追加することもできます。
連結ディメンションで使用できるのは、連結ディメンション値を移動するMOVEキーワードのみです。
MAINTAIN composite {ADD|DELETE|MERGE} args
MAINTAIN partition-template {ADD|DELETE|MOVE} args
具体的な構文はキーワードによって異なります。したがって、MAINTAINコマンドの各キーワードについては、次のように個別に説明します。
MAINTAINコマンド全般に関する情報は、このトピックの使用上の注意を参照してください。
使用上の注意
MAINTAINを実行した際のトリガー・プログラムの実行
TRIGGERコマンドを使用すると、MAINTAIN文の実行を、OLAP DMLプログラムを自動的に実行するイベントにすることができます。詳細は、「トリガー・プログラム」を参照してください。
ステータスの自動リセット
現行のステータスがALLでないディメンションまたはコンポジットをADD、DELETE、MERGEまたはMOVEキーワードでメンテナンスすると、MAINTAINコマンドによって、メンテナンスを実行する前にステータスが自動でALLにリセットされます。ただし、現行のステータスがALLでないディメンションをRENAMEキーワードでメンテナンスする場合には、ディメンションのステータスはMAINTAINコマンドによって変更されません。
メンテナンス権限
PERMIT MAINTAIN文によってディメンションのメンテナンス権限が拒否される場合は、ディメンションに対するメンテナンスは実行できません。ディメンションの読取り権限が制限されていると、そのディメンションのメンテナンス権限を指定しても、メンテナンス権限は常に暗黙的に拒否されます。(PERMITコマンドを参照してください。)
マルチライタ・モードのアナリティック・ワークスペースにおけるディメンションのメンテナンス
マルチライタ・モードでアタッチしたアナリティック・ワークスペース内のディメンションをメンテナンスする際は、次の点に注意してください。
ディメンションのいずれかがすでに取得および変更された場合は、変数を更新できません。
ディメンション値を追加してからディメンションを元に戻すと、そのディメンションによってディメンション化された変数の領域割当てが最適ではなくなることがあるためお薦めしません。
取得済変数がメンテナンス済の取得したディメンションによってディメンション化されている場合、そのディメンションが更新または解放されるまで変数を更新できません。
メンテナンスのためにコンポジットを取得する必要はありません。コンポジットのディメンションには、Oracle OLAPによって自動で同時にディメンションのメンテナンスが実行されます。
マルチライタ・モードでアタッチしたアナリティック・ワークスペース内のディメンションをメンテナンスするには、まずACQUIRE文を使用してディメンションを取得する必要があります。
たとえば、ユーザーAとユーザーBが、actuals
とbudget
の両方についてそれぞれwhat-if計算を実行する必要があるとします。what-if計算の実行後、ユーザーAはactuals
を、ユーザーBはbudget
を変更する必要があります。最後に、ユーザーAとユーザーBはどちらも、新しいtime
ディメンション値を追加し、その新しいディメンション値に対応するデータをactuals
またはbudget
に追加する必要があります。
ユーザーAが次のOLAP DML文を発行します。
AW ATTACH myworkspace MULTI ...make modifications ACQUIRE actuals ...make more modifications ACQUIRE time MAINTAIN time ADD 'Y2002' actuals (time 'Y2002', ...) = ... UPDATE MULTI actuals, time COMMIT RELEASE actuals, time AW DETACH myworkspace
ユーザーBが次のOLAP DML文を発行します。
AW ATTACH myworkspace MULTI ...make modifications ACQUIRE budget ...make more modifications ACQUIRE time--> failed ACQUIRE RESYNC time WAIT MAINTAIN time ADD 'Y2003' budget (time 'Y2003', ...) = ... UPDATE MULTI budget, time COMMIT RELEASE budget, time AW DETACH myworkspace
MAINTAINとディメンション・サロゲート
ディメンション・サロゲートでは、MAINTAIN文を使用できません。MAINTAINは、ディメンションへの値の追加や、ディメンションからの値の削除でのみ使用できます。ただし、ディメンション値を追加または削除すると、Oracle OLAPは、自動でそのディメンションのサロゲートに位置を追加またはサロゲートから位置を削除します。ディメンションに位置を追加すると、そのディメンションのサロゲートの対応する位置にNA
値が追加されます。
連結ディメンションのメンテナンス
連結ディメンションには、そのコンポーネントのディメンションの値が含まれます。連結ディメンションの値は、直接MAINTAIN文で追加、マージまたは削除されません。かわりに、連結のコンポーネントのディメンションに対し値を追加、マージまたは削除すると、連結ディメンションに値が自動で追加またはディメンションから値が削除されます。ただし、MAINTAINコマンドでMOVEキーワードを指定し、連結ディメンションの値の順序を変更することは可能です。
MAINTAINコマンドでADDキーワードを使用すると、非連結ディメンション、コンポジットまたはパーティションに新しいTEXT値、ID値およびINTEGER値を追加したり、ディメンションに新しい一時計算メンバーを追加したりできます。
注意: TEXT値、ID値およびINTEGER値に対するMAINTAIN ADD文は、Maintainトリガーを持つサロゲート・ディメンションにも発行できます。この場合、Oracle OLAPでは、Maintainトリガー・プログラムが各値に対して1回ずつ実行され、それ以外のアクションは行われません。詳細は、「トリガー・プログラム」を参照してください。Maintainトリガーのないサロゲート・ディメンションに対してMAINTAIN文を発行すると、エラーが返されます。 |
構文
ADDキーワードを使用するMAINTAINコマンドの構文は、メンテナンスするオブジェクトの型、および追加するメンバーが永続的か一時的かによって異なります。
そのため、MAINTAIN ADDについては、次のように個別に説明します。
MAINTAINコマンドでADDキーワードを使用すると、非連結ディメンションまたはコンポジットに新しいTEXT値、ID値またはINTEGER値を追加できます。
注意: MAINTAIN ADD文は、Maintainトリガーを持つサロゲート・ディメンションにも発行できます。この場合、Oracle OLAPでは、Maintainトリガー・プログラムがvaluelistの各値に対して1回ずつ実行され、それ以外のアクションは行われません。詳細は、「トリガー・プログラム」を参照してください。Maintainトリガーのないサロゲート・ディメンションに対してMAINTAIN文を発行すると、エラーが返されます。 |
パラメータ
アタッチしたアナリティック・ワークスペースで定義されている非連結ディメンション。
コンポジット。コンポジットが名前付きコンポジットの場合、アタッチしたアナリティック・ワークスペースで定義されている必要があります。コンポジットが名前のないコンポジットの場合は、アタッチしたアナリティック・ワークスペースでオブジェクトの定義に使用されている必要があります。名前のないコンポジットを参照するには、SPARSEキーワードを使用します(SPARSE <market product>
など)。
ディメンションまたはコンポジットにvaluelistの値を追加することを指定します。
この引数を使用してTEXT型またはID型のコンポジットまたはディメンションに値を追加する場合、valuelistはテキスト・リテラル、TEXT式、ID式のいずれかになります。複数行のテキスト式の場合は、各要素(行)は個別の値として処理されます。nullディメンション値(空の一重引用符)または空白のみの値は、後でその値を参照できないので、追加しないでください。
dimensionがINTEGERの場合、valuelistは5や100などのINTEGER
になります。
ディメンション値を追加する論理位置を指定します。FIRSTは、新しい値を既存値の前に挿入することを示します。LASTは、新しい値を現行の値の後に追加することを示します。LASTがデフォルトです。INTEGERディメンションに一定量のINTEGER
値を追加すると、それらのINTEGER
値は(仕様に応じて)既存のINTEGER
値の前または後に追加され、それら一連のすべてのINTEGER
値が自動で数字順にソートされます。
指定した値は、文のキーワードの直前にある値のみではなく、キーワードFIRSTまたはLASTの前に指定したすべての値がその位置に配置されます。
値を前または後に追加する基準の位置を指定します。positionには、既存のディメンション値、既存のディメンション値を値とする文字式、またはディメンション値の位置を表すINTEGER
式を指定できます。INTEGERディメンションに一定量のINTEGER
値を追加すると、それらのINTEGER
値は指定したINTEGER
位置の前または後に追加され、それら一連のすべてのINTEGER
値が自動で数字順にソートされます。
指定した値は、文のキーワードの直前にある値のみではなく、キーワードBEFOREまたはAFTERの前に指定したすべての値がその位置に配置されます。
使用上の注意
MAINTAIN ADD BEFOREまたはAFTER positionを使用する場合のパフォーマンス
MAINTAIN ADD BEFORE文またはMAINTAIN MOVE AFTER文を使用する場合のコスト・パフォーマンスは、追加される値の数ではなく、ディメンション内の値の数によって異なります。したがって、これらの文を多く連ねて発行するかわりに、次のようにします。
単純なMAINTAIN ADD文を使用して値を追加します。
ディメンション・ステータスのステータスを目的の値に設定します。
単独のMAINTAIN MOVE dimension value文を発行して、追加した値を並べ替えます。
INTEGERディメンションへの値の追加
MAINTAINを使用してINTEGERディメンションの値を追加すると、INTEGER
値の通常の順序(1、2、3...)になるように値の位置番号が変更されます。
結合ディメンションとコンポジット
結合ディメンションまたはコンポジットの各値は、そのディメンション・リストの各ディメンション(および存在する場合はコンポジット)からの値の組合せです。結合ディメンションまたはコンポジットに値を追加するには、各値の組合せを山カッコで囲んで指定します。指定した組合せの値は、結合ディメンションまたはコンポジットの定義にあるディメンションおよびコンポジットと同じ順序である必要があります。また、組合せの各ディメンション値は、対応するベース・ディメンションに値としてすでに存在している必要があります。ただし、組合せにコンポジット値が存在しない場合、Oracle OLAPによって、その値は適切なコンポジットに自動で追加されます。
例
例10-39 TEXTディメンションへの値の追加
次の文では、city
ディメンションのディメンション値の最後にOmaha
およびSeattle
が追加されます。
MAINTAIN city ADD 'Omaha' 'Seattle'
次の文では、cityリストの最初にAtlanta
が追加され、Omaha
の後にPeoria
が挿入されます。
MAINTAIN city ADD 'Atlanta' FIRST, 'Peoria' AFTER 'Omaha'
ここでは、TEXT変数textvar
の値を、city
の5番目のディメンション値の前に挿入します。ディメンション値を大文字と小文字を区別する表記にしているため、値Columbus
をtextvar
に代入する際は、大文字と小文字を使用した表記とすることに注意してください。
textvar = 'Columbus' MAINTAIN city ADD textvar BEFORE 5
MAINTAINコマンドでADDキーワードを使用して、DAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンションに新しい値を追加できます。
パラメータ
アタッチしたアナリティック・ワークスペースで定義されている非連結ディメンション。
ディメンションにvaluelistの値を追加することを指定します。dimensionがDAY、WEEK、MONTH、QUARTER、YEAR型の場合、valuelistはテキスト定数、TEXT式、ID式、DATE式のいずれかになります。値がTEXTの場合、ディメンションのVNF(値名書式)で指定されている書式(ディメンションにVNFがない場合は、メンテナンスするディメンションの型に対するデフォルト書式)または日付値の有効な入力形式で指定します。値をTEXT式として指定する場合は、各要素または各行は個別の値として処理されます。
値がVNFの書式またはディメンションの型に対するデフォルト書式で指定されている場合、各値は追加する期間を明示的に示します。たとえば、month
ディメンションのVNFが'<MTXT><YY>'
だとします。この場合、値JAN99
は1999年の1月を表します。
DAY、WEEK、MONTH、QUARTER、YEAR型のディメンションの値を日付として指定する際は、メンテナンスするディメンションの型に適した日付コンポーネントのみを指定する必要があります。DAYまたはWEEKディメンションでは、日、月および年の各コンポーネントを指定する必要があります。MONTHまたはQUARTERディメンションでは、月および年のみを指定します(1998年6月の場合は'JUN98'
または'0698'
など)。YEARディメンションでは、年のみを指定します(1998年の場合は'98'
など)。日付の有効な入力形式の詳細は、DATEORDERオプションを参照してください。
完全な日付を表すDATE式またはTEXT値を指定してディメンション値を追加する場合は、追加する期間内にある任意の日付を指定できます。たとえば、1999年の1月を追加するには、'01JAN99'
から'31JAN99
までのどの日付でも指定できます。指定された値があいまいな場合、Oracle OLAPでは、DATEORDERオプションを使用して解決します。
値が指定されていないDAY、WEEK、MONTH、QUARTER、YEAR型のディメンションに値を追加する際は、ディメンションに追加する最初の値および最後の値のみを指定します。Oracle OLAPによって、その期間内を埋める適切な値が自動で代入されます。
DAY、WEEK、MONTH、QUARTER、YEAR型のディメンションにすでに値がある場合は、既存のリストの先頭または末尾にのみ値を追加できます。値を追加する際は、追加する最初の値または最後の値のみを指定します。Oracle OLAPによって、既存のリストと指定した値の間の期間を埋める適切な値が自動で代入されます。
ディメンション値の先頭または末尾に追加する期間の数を指定します。
MAINTAINコマンドでADD SESSIONキーワードを使用すると、ディメンションに一時計算メンバーを追加し、指定したオブジェクトにそのメンバーを適用したり、指定したオブジェクトに事前定義されている計算メンバーを適用できます。あるセッションで作成された計算メンバーとその定義は、そのセッション後に削除されるため、他のセッションでは継続されません。
構文
MAINTAIN dimension ADD SESSION member_name [= calculation] -
[STEP DIMENSION (stepdim...)][apply-to]
ここで、
calculationは次のいずれかです。
apply-toは、次のいずれかの句を使用して、カスタム集計を追加する際の基礎を指定します。
パラメータ
アタッチしたアナリティック・ワークスペースで定義されているディメンション。dimensionには、一意でない連結ディメンション、または一意および一意でない連結ディメンションのベース・ディメンション以外のすべての型のディメンションを指定できます。
ADD SESSIONは、一時計算メンバーのメンテナンスを示します。
一時計算メンバーの名前を指定します。
新しい計算メンバーを定義することを示します。
カスタム・メンバー値を計算するための動的モデルとして使用する計算を指定するテキスト式。(モデル方程式の詳細は、SETコマンドを参照してください。)
指定したディメンション・メンバーを使用するカスタム集計として、一時計算メンバーを追加することを示します。この句は、dimensionでディメンション化した変数の集計仕様であるaggmapオブジェクトのRELATION文を変更します。したがって、AGGREGATION句を含むMAINTAIN ADD SESSION文には、APPLY WITH RELATION句も含まれている必要があります。
カスタム集計で使用する1つ以上のディメンション値を指定するテキスト式。リテラルで複数のディメンション・メンバーを指定する場合は、値をカンマで区切ります。
計算が時系列のファンクションであることを示します。
時系列ファンクションの計算を行うディメンションを指定するテキスト式。リテラルで複数のディメンション名を指定する場合は、名前をカンマで区切ります。
一時計算メンバーを追加する先の1つ以上のaggmapオブジェクトの名前を指定するテキスト式。リテラルで複数のaggmapオブジェクトを指定する場合は、名前をカンマで区切ります。一時計算メンバーは、指定したaggmapオブジェクトのそれぞれに追加されます。
指定したvariablesのデフォルトaggmapオブジェクトで使用されるディメンションにのみ、一時計算メンバーを追加することを示します。
一時計算メンバーを追加する先の1つ以上の変数名を指定するテキスト式。リテラルで複数の変数名を指定する場合は、名前をカンマで区切ります。一時計算メンバーは、指定した変数のそれぞれのデフォルトaggmapオブジェクトに追加されます。
重要: 指定した変数にデフォルトのaggmapがない場合、この句を使用するとエラーが発生します。変数にデフォルトのaggmapを指定するには、AGGMAP SETまたは$AGGMAPを使用します。 |
指定したrelationのRELATION文を含む集計仕様で使用されるディメンションに、一時計算メンバーが追加されることを示します。
AGGMAP文にRELATION文があるリレーションの名前を指定するテキスト式。
使用上の注意
一時計算メンバーについての情報の検索
MAINTAIN文で一時計算メンバーを追加した後、AGGMAPINFOを使用すると、追加した一時計算メンバー、メンバーの計算に使用される方程式、カスタム・メンバーを計算する方程式の右側で使用されるディメンション・メンバーをそれぞれ確認できます。
例
例10-42 集計値を使用した計算ディメンション・メンバーの作成
アナリティック・ワークスペースに、次の定義と永続値を持つletter
というディメンションおよびmy_quantity
という変数があるとします。
DEFINE letter DIMENSION TEXT DEFINE my_quantity VARIABLE DECIMAL <letter> LETTER MY_QUANTITY -------------- ------------------------------ A 10.00 B 100.00
次の手順で、letter
ディメンションに一時ディメンション・メンバーを定義し、これらのメンバーのmy_quantity
のデータを集計できます。
実行する集計を決定し、必要な補助オブジェクトを定義および移入します。
letter
ディメンションに空の親子関係を作成します。
DEFINE letter.parentrel RELATION letter <letter> LETTER LETTER.PARENTREL -------------- ------------------------------ A NA B NA
letter
ディメンションと関連付けられている値を計算するために使用する簡単なモデルを定義します。
DEFINE my_model MODEL MODEL DIMENSION letter END
letter
ディメンションと関連付けられているmy_quantity
値を計算するために使用する簡単なaggmapを定義し、そのaggmapをコンパイルします。
DEFINE my_aggmap AGGMAP AGGMAP RELATION letter.parentrel PRECOMPUTE(NA) MODEL my_model PRECOMPUTE(NA) END COMPILE my_aggmap
変数を定義し、カスタム集計の定義を含めます。この新しい変数は、デフォルトのaggmapとしてmy_aggmap
を持つことを除き、my_quantity
と同一です。
DEFINE my_quantity_definition VARIABLE DECIMAL <letter> CONSIDER my_quantity_definition PROPERTY '$AGGMAP' 'my_aggmap' REPORT my_quantity_definition LETTER MY_QUANTITY_DEFINITION -------------- ------------------------------ A NA B NA
letter
ディメンションに一時メンバーを追加し、それらのメンバーに対する変数値の計算方法を指定します。
MAINTAIN letter ADD SESSION 'C' = 'A' * 'B' MAINTAIN letter ADD SESSION 'D' = AGGREGATION('A', 'B') - APPLY TO AGGMAP my_aggmap MAINTAIN letter ADD SESSION 'E' = 'C' + 'D' - APPLY WITH RELATION letter.parentrel MAINTAIN letter ADD SESSION 'F' = 10 * 'E' - APPLY FOR VARIABLE my_quantity_definition
letter
ディメンションのレポートに、新しいディメンション・メンバーが表示されます。
LETTER -------------- A B C D E F
my_aggmap
というaggmapオブジェクトを使用してmy_quantity
を集計します。
REPORT AGGREGATE(my_quantity USING my_aggmap) AGGREGATE(MY_QUANTITY USING LETTER MY_AGGMAP) -------------- ------------------------------ A 10.00 B 100.00 C 1,000.00 D 110.00 E 1,110.00 F 11,100.00
ここで、UPDATE文とCOMMIT文を発行して、アナリティック・ワークスペースを更新およびコミットするとします。次に、アナリティック・ワークスペースをデタッチし、セッションを終了します。
その後、新しいセッションを開始し、同じアナリティック・ワークスペースをアタッチします。アナリティック・ワークスペースの説明を確認すると、UPDATEを発行した時点でアナリティック・ワークスペースにあったオブジェクトがすべてそのまま維持されていることがわかります。
DEFINE LETTER DIMENSION TEXT DEFINE LETTER.PARENTREL RELATION LETTER <LETTER> DEFINE MY_QUANTITY VARIABLE DECIMAL <LETTER> DEFINE MY_MODEL MODEL MODEL DIMENSION letter END DEFINE MY_AGGMAP AGGMAP AGGMAP RELATION letter.parentrel PRECOMPUTE(NA) MODEL my_model PRECOMPUTE(NA) END DEFINE MY_QUANTITY_DEFINITION VARIABLE DECIMAL <LETTER>
しかし、letter
ディメンションおよびmy_quantity
変数についてのレポートを見ると、前のセッションで追加した一時ディメンション・メンバーと、それらのメンバーと関連するmy_quantity
変数の値は存在していません。
LETTER -------------- A B REPORT letter.parentrel LETTER LETTER.PARENTREL -------------- ------------------------------ A NA B NA REPORT my_quantity LETTER MY_QUANTITY -------------- ------------------------------ A 10.00 B 100.00 LETTER MY_QUANTITY_DEFINITION -------------- ------------------------------ A NA B NA REPORT AGGREGATE(my_quantity USING my_aggmap) AGGREGATE(MY_QUANTITY USING LETTER MY_AGGMAP) -------------- ------------------------------ A 10.00 B 100.00
MAINTAIN ADD TO PARTITION文は、事前移入されたディメンション値またはコンポジット値を、事前定義されたパーティション・テンプレート・オブジェクトのパーティションに追加する文です。
パラメータ
事前定義されたパーティション・テンプレート・オブジェクトの名前を示すテキスト式。
値をパーティションに追加することを指定します。
partition-templateで指定したパーティション・テンプレートにある事前定義されたパーティションの名前を示すテキスト式。
追加する値を指定するテキスト・リテラル、TEXT式またはID式。TEXT式の場合、各要素(行)は個別の値として処理されます。式の値は、入力したとおりに追加されます。
連結ディメンションの場合、連結ディメンションの値、もしくはコンポーネント・ディメンションの名前とそのディメンションの値または位置を指定できます。valueの値として、ディメンション・サロゲートの値を使用できます。
INTEGER
ディメンションのパーティション化はできないことに注意してください。
値の範囲を示します。
MAINTAINコマンドでDELETEキーワードを使用すると、非連結ディメンションおよびコンポジットからメンバーを削除できます。または、変数をディメンション化するパーティション・テンプレートのパーティションに定義されているディメンション値またはコンポジット値を変更するために、事前にパーティション化した変数のデータをパーティションから削除します。
注意: MAINTAIN DELETE文は、Maintainトリガーを持つサロゲート・ディメンションにも発行できます。この場合、Oracle OLAPでは、Maintainトリガー・プログラムのみが実行され、それ以外のアクションは行われません。詳細は、「トリガー・プログラム」を参照してください。Maintainトリガーのないサロゲート・ディメンションに対してMAINTAIN文を発行すると、エラーが返されます。 |
構文
MAINTAINコマンドのDELETEキーワードを使用してメンバーを削除する際の構文は、メンバーを削除するオブジェクトのタイプによって異なります。そのため、MAINTAIN DELETEについては、次のように個別に説明します。
MAINTAINコマンドでDELETEキーワードを使用すると、非連結ディメンションからディメンション・メンバーを削除できます。
注意: MAINTAIN DELETE文は、Maintainトリガーを持つサロゲート・ディメンションにも発行できます。この場合、Oracle OLAPでは、Maintainトリガー・プログラムのみが実行され、それ以外のアクションは行われません。詳細は、「トリガー・プログラム」を参照してください。Maintainトリガーのないサロゲート・ディメンションに対してMAINTAIN文を発行すると、エラーが返されます。 |
パラメータ
値が削除されるアタッチしたアナリティック・ワークスペースで定義されている非連結ディメンション。
注意: MAINTAIN DELETEコマンドのdimension引数として、ディメンション・サロゲートは使用できません。ただし、limit-clauseパラメータ内で値としてディメンション・サロゲートを使用することは可能です。 |
ディメンションから削除する値を指定します。
limit-clauseの構文は、各種LIMITコマンドにおけるlimit-clause引数の構文(つまり、LIMITコマンドの「TO」などのlimit-type引数の後の構文)と同じです。これらの引数の構文については、LIMITコマンド(値を使用)、LIMITコマンド(LEVELRELを使用)、LIMIT(親リレーションを使用)、LIMITコマンド(関連ディメンションを使用)、LIMITコマンド(NOCONVERTを使用)およびLIMITコマンド(POSLISTを使用)を参照してください。
使用上の注意
ディメンションからの一時計算メンバーの削除
MAINTAIN DELETE文を使用して一時計算メンバーを削除すると、Oracle OLAPによって次の処理が実行されます。
ディメンションからメンバーが削除されます。
対応する計算を含むすべてのaggmapオブジェクトから計算が削除されます。
INTEGERディメンションの値の削除
MAINTAINを使用してINTEGERディメンションの値を削除すると、INTEGER
値の通常の順序(1、2、3...)になるように値の位置番号が変更されます。
例
例10-44 最初の5つのディメンション値の削除
この例では、INTEGER変数intvar
を使用して、ディメンションcity
から最初の5都市を削除します。
intvar = 5 MAINTAIN city DELETE FIRST intvar
例10-45 ブール式に基づくディメンション値の削除
ここでは、city
から、人口が75,000人より少ないすべての都市を削除します。各都市の人口のデータが含まれている、変数population.c
を使用します。
MAINTAIN city DELETE population.c LT 75000
MAINTAINコマンドでDELETEキーワードを使用すると、コンポジットからディメンション・メンバーを削除できます。
構文
MAINTAIN composite DELETE comp-arg
ここで、comp-argは次のいずれか1つです。
パラメータ
値を削除するコンポジット。コンポジットが名前付きコンポジットの場合、アタッチしたアナリティック・ワークスペースで定義されている必要があります。コンポジットが名前のないコンポジットの場合は、アタッチしたアナリティック・ワークスペースでオブジェクトの定義に使用されている必要があります。
名前のないコンポジットを参照するには、SPARSEキーワードを使用します(SPARSE <market product>
など)。
コンポジットから削除する1つ以上の値を指定します。valuelistは、テキスト定数またはテキスト式です。
すべてのコンポジット値を削除しますが、コンポジット自体の定義は削除しません。
リストしたコンポジットのベース・ディメンション値を含む値を削除します。引数valuelistには、単一の値、値のリスト、または値の範囲(TOを使用して値範囲を指定)を指定できます。値の範囲の指定には、位置番号は使用できません。valuelistを指定しない場合、Oracle OLAPでは、現行のステータスにあるbase-dim値を含むすべての値が削除されます。
ブール式がTRUE
のすべてのコンポジット値を削除します。boolean-expressionは、値を削除するdimensionまたはcompositeによってディメンション化されている必要があります。また、他にもディメンションがある場合は、それらのステータスがそれぞれ1つの値に制限されている必要があります。
expの最上位(TOP)または最下位(BOTTOM)に基づいて、上位または下位n個の値を削除します。式は、値を削除するcompositeによってディメンション化されている必要があります。また、他にもディメンションがある場合は、それらのステータスがそれぞれ1つの値に制限されている必要があります。
ある基準に基づいて最上位または最下位の値を検索し、値を削除します。この構成では、値は式に対する占有率に基づいてソートされ、削除されます。
削除する対象の個別の値の長いリスト(2,000値まで)を示します。値が300より少ない場合、LONGLISTは必要ありません。
MAINTAIN DELETE FROM PARTITIONコマンドは、変数をディメンション化するパーティション・テンプレートのパーティションに定義されているディメンション値またはコンポジット値を変更するために、事前にパーティション化した変数のデータをパーティションから削除するコマンドです。
パラメータ
事前定義されたパーティション・テンプレート・オブジェクトの名前を示すテキスト式。
partition-templateで指定したパーティション・テンプレートにある事前定義されたパーティションの名前を示すテキスト式。
パーティションおよびそのパーティションを含むパーティション・テンプレートを使用してディメンション化したパーティション変数から削除する値を指定します。
パーティション変数の値を削除して、パーティションの値を再定義する際に使用するディメンション値を指定します。ディメンションのMAINTAIN DELETEで使用するdim-arg引数に指定する構成を使用できます。
パーティション変数の値を削除して、パーティションの値を再定義する際に使用するコンポジット値を指定します。コンポジットのMAINTAIN DELETEで使用するcomp-arg引数に指定する構成を使用できます。
例
例10-48 パーティション値の追加と削除
アナリティック・ワークスペースに次のオブジェクトが定義されているとします。
DEFINE time DIMENSION TEXT DEFINE time_parentrel RELATION time <time> DEFINE product DIMENSION TEXT DEFINE partition_sales_by_year PARTITION TEMPLATE <time product> - PARTITION BY LIST (time) - (PARTITION time_2004 VALUES ('2004', 'Dec2004', 'Jan2004', '31Dec2004', - '01Dec2004', '31Jan2004', '01Jan2004') <TIME PRODUCT> - PARTITION time_2003 VALUES ('2003', 'Dec2003', 'Jan2003', '31Dec2003', - '01Dec2003', '31Jan2003', '01Jan2003') <TIME PRODUCT> - PARTITION time_2002 VALUES ('2002', 'Dec2002', 'Jan2002', '31Dec2002', - '01Dec2002', '31Jan2002', '01Jan2002') <TIME PRODUCT>)
sales値がある年のすべての時刻値でディメンションされている値をパーティション内に含めるのではなく、各日付値およびサマリーの時刻値(月および年)ごとのパーティションが必要だとします。この新しいパーティション・スキーマが反映されるようにpartition_sales_by_year
を変更するには、次の文を発行します。
"Create the new partition CHGDFN partition_sales_by_year DEFINE - (PARTITION partition_month_years VALUES () <time product>) "Delete the values for months and years from the partitions for years MAINTAIN partition_sales_by_year DELETE FROM PARTITION time_2004 '2004'- 'Dec2004' 'Jan2004' MAINTAIN partition_sales_by_year DELETE FROM PARTITION time_2003 '2003'- 'Dec2003''Jan2003' MAINTAIN partition_sales_by_year DELETE FROM PARTITION time_2002 '2002'- 'Dec2002' 'Jan2002' "Add the month and year values to the new partition for summary values MAINTAIN partition_sales_by_year ADD TO PARTITION partition_month_years '2004'- 'Dec2004' 'Jan2004' '2003' 'Dec2003''Jan2003' '2002' 'Dec2002' 'Jan2002'
これによって、partition_sales_by_year
パーティション・テンプレート・オブジェクトの定義は次のようになります。
DEFINE PARTITION_SALES_BY_YEAR PARTITION TEMPLATE <TIME PRODUCT> - PARTITION BY LIST (TIME) - (PARTITION TIME_2004 VALUES ('31Dec2004', '01Dec2004', '31Jan2004', - '01Jan2004') <TIME PRODUCT> - PARTITION TIME_2003 VALUES ('31Dec2003', '01Dec2003', '31Jan2003', - '01Jan2003') <TIME PRODUCT> - PARTITION TIME_2002 VALUES ('31Dec2002', '01Dec2002', '31Jan2002', - '01Jan2002') <TIME PRODUCT> - PARTITION PARTITION_MONTH_YEARS VALUES ('2004', 'Dec2004', 'Jan2004', - '2003', 'Dec2003', 'Jan2003', '2002', 'Dec2002', 'Jan2002')- <TIME PRODUCT>)
MAINTAINコマンドでMERGEキーワードを使用すると、別のリスト上のすべてディメンション値またはコンポジット値を、非連結ディメンションまたはコンポジットに簡単かつ確実にまとめることができます。MAINTAINコマンドでMERGEキーワードを使用すると、自動でリストから新しい値のみが追加され、重複する値は無視されます。大量のディメンション値を入力する際、この方法で入力すると、時間を大幅に節約できます。
MERGEは、DAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンションを含む、あらゆるデータ型のディメンションで使用できます。ただし、Oracle OLAPでは、DAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンションの値の追加はADDキーワードでも簡単にできるため、これらのディメンションでは、MERGEキーワードはTEXTまたはID型のディメンションでの場合ほど有用でない場合もあります。
ディメンションに値をマージすると同時に、そのディメンションに関連するリレーションを更新することもできます。
注意: MAINTAIN MERGE文は、Maintainトリガーを持つサロゲート・ディメンションにも発行できます。この場合、Oracle OLAPでは、Maintainトリガー・プログラムがexpの各値に対して1回ずつ実行され、それ以外のアクションは行われません。詳細は、「トリガー・プログラム」を参照してください。Maintainトリガーのないサロゲート・ディメンションに対してMAINTAIN文を発行すると、エラーが返されます。 |
構文
MAINTAIN dimension|composite MERGE exp [RELATE relation]
値を入力または変更するアタッチしたアナリティック・ワークスペースで定義されている非連結ディメンション。
値を追加、削除またはマージするコンポジット。コンポジットが名前付きコンポジットの場合、アタッチしたアナリティック・ワークスペースで定義されている必要があります。コンポジットが名前のないコンポジットの場合は、アタッチしたアナリティック・ワークスペースでオブジェクトの定義に使用されている必要があります。名前のないコンポジットを参照するには、SPARSEキーワードを使用します(SPARSE <market product>
など)。
dimensionとマージする値の式を指定しますが、たとえば、ディメンション値を含むディメンション化されたテキスト変数の名前や、ディメンション値の複数行のリストを値とする単一セルのテキスト変数の名前などです。MAINTAIN MERGEでは、expのNAは無視されます。dimensionがINTEGERディメンションの場合は、expにはディメンションに必要な値の数を指定します。実際の合計数がそれより小さいと、MAINTAIN MERGEによって、指定した合計に達するまで値が追加されます。たとえば、INTEGERディメンションに位置が10ある場合、MERGE
5
では操作は何も行われませんが、MERGE
15
では値が5つ追加されます。
expから新しい値をdimensionにマージする際に更新するリレーションを指定します。expのディメンションのうち1つ以上のディメンションが、relationの定義で定義されている必要があります。expが単一セル値の場合は、RELATE句は使用できません。
例
例10-49 コンポジットでのMERGEキーワードの使用
product
ディメンションの最初の3つの値とdistrict
ディメンションの最初の5つの値のすべての組合せで構成されるコンポジットを定義するとします。次の文を使用して、15個の値すべてを効率よくまとめることができます。
DEFINE comp_proddist COMPOSITE <product district> LIMIT product TO FIRST 3 LIMIT district TO FIRST 5 MAINTAIN comp_proddist MERGE <product district>
この方法は、結合ディメンションでも利用できます。
MOVEキーワードを使用したMAINTAINコマンドの結果は、操作するオブジェクトによって異なります。
ディメンションをメンテナンスする場合、MAINTAIN MOVEによって、非連結ディメンションまたはTEXT型、ID型、INTEGER型のディメンションの1つ以上の値の位置が変更されるか、事前移入したディメンション値またはコンポジット値がパーティションに追加されます。
注意: ディメンション値のMAINTAIN MOVE文は、Maintainトリガーを持つサロゲート・ディメンションにも発行できます。この場合、Oracle OLAPでは、Maintainトリガー・プログラムのみが実行され、それ以外のアクションは行われません。詳細は、「トリガー・プログラム」を参照してください。Maintainトリガーのないサロゲート・ディメンションに対してMAINTAIN文を発行すると、エラーが返されます。 |
パーティションをメンテナンスする場合は、MAINTAIN MOVEによって、変数をディメンション化するパーティション・テンプレートのパーティションに定義されているディメンション値またはコンポジット値を変更するために、事前にパーティション化した変数のデータがあるパーティションから別のパーティションに移動されます。
構文
MOVEキーワードを使用するMAINTAINコマンドの構文は、メンテナンスするオブジェクトのタイプによって異なります。
そのため、MAINTAIN MOVEについては、次のように個別に説明します。
単純なMAINTAIN MOVE文で、非連結ディメンションまたはTEXT型、ID型、INTEGER型のディメンションの1つ以上の値の位置を変更できます。MAINTAINコマンドのMOVEキーワードは、コンポジットまたはDAY、WEEK、MONTH、QUARTER、YEAR型のディメンションでは使用できません。
注意: MAINTAIN MOVE文は、Maintainトリガーを持つサロゲート・ディメンションにも発行できます。この場合、Oracle OLAPでは、Maintainトリガー・プログラムのみが実行され、それ以外のアクションは行われません。詳細は、「トリガー・プログラム」を参照してください。Maintainトリガーのないサロゲート・ディメンションに対してMAINTAIN文を発行すると、エラーが返されます。 |
パラメータ
値を入力または変更するアタッチしたアナリティック・ワークスペースで定義されている非連結ディメンション。TEXT型、ID型またはINTEGER型のディメンションを指定する必要があります。DAY、WEEK、MONTH、QUARTER、YEAR型のディメンションは指定できません。
移動する値を指定します。
limit-clauseの構文は、各種LIMITコマンドにおけるlimit-clause引数の構文(つまり、LIMITコマンドの「TO」などのlimit-type引数の後の構文)と同じです。これらの引数の構文については、LIMITコマンド(値を使用)、LIMITコマンド(LEVELRELを使用)、LIMIT(親リレーションを使用)、LIMITコマンド(関連ディメンションを使用)、LIMITコマンド(NOCONVERTを使用)およびLIMITコマンド(POSLISTを使用)を参照してください。
使用上の注意
MAINTAIN MOVEのパフォーマンスに影響を与える要因
MAINTAIN MOVEコマンドを発行する場合のコスト・パフォーマンスは、移動される値の数ではなく、ディメンションの長さによって異なります。したがって、大きなディメンション内の値を移動する場合は、複数のMAINTAIN MOVE文を連ねて発行するかわりに、ディメンション・ステータスを目的の値に設定してから単独のMAINTAIN MOVEコマンドを発行してください。
ディメンション内の値の並べなおしまたはソート
MAINTAIN MOVE文を使用してディメンションの値を並べなおしたりソートしたりする場合、ステータスにあるディメンションの値すべてを使用するように指定するには、VALUESコマンドではなく、LIMIT(値を使用)コマンドのlimit-clause引数のSTATUSキーワードを使用します。
例
例10-51 ステータス・リストの末尾へのディメンション値の移動
この例では、TEXT変数textvar
を使用してSeattle
を都市のリストの最後に移動します。
textvar = 'Seattle' MAINTAIN city MOVE textvar LAST
例10-52 連結ディメンションの値の移動
次の文では、reg.dist.ccdim
という連結ディメンションの値<district: 'Denver'>
を、連結ディメンション値<region: 'West'>
の後に移動します。
MAINTAIN reg.dist.ccdim MOVE <district: 'Denver'> AFTER <region: 'West'>
次の文では、連結ディメンション値<district: 'Denver'>
を、コンポーネントのdistrict
ディメンションの最初の値に対応する位置の後に移動します。district
のステータスにある最初の値がAtlanta
の場合、<district: 'Denver'>
は、連結ディメンションの値<district: 'Atlanta'>
の後に移動されます。
MAINTAIN reg.dist.ccdim MOVE <district: 'Denver'> AFTER <district: 1>
次の文では、連結ディメンション値<district: 'Dallas'>
を連結ディメンションの3番目の値の後に移動します。
MAINTAIN reg.dist.ccdim MOVE <district: 'Dallas'> AFTER 3
MAINTAIN MOVE TO PARTITION文は、追加機能と移動機能の両方を併せ持ちます。MAINTAIN MOVE TO PARTITION文を使用すると、次のことを実行できます。
MAINTAIN ADD TO PARTITIONと同様に、事前移入したディメンション値またはコンポジット値をパーティションに追加します。
変数をディメンション化するパーティション・テンプレートのパーティションに対して定義されたディメンション値またはコンポジット値を変更し、同時に、それらのディメンションおよびコンポジットによってディメンション化されている事前にパーティション化した変数のデータを、あるパーティションから別のパーティションへ移動します。
パラメータ
事前定義されたパーティション・テンプレート・オブジェクトの名前を示すテキスト式。
パーティションに追加される値、またはあるパーティションから別のパーティションに移動する値を指定します。
partition-templateで指定したパーティション・テンプレートにある事前定義されたパーティションの名前を示すテキスト式。
事前移入したディメンションまたはコンポジットの1つ以上の値を指定します。これらの値には、次のものを指定できます。
リテラル値
ディメンション値を値とする式
NUMBER
ディメンション以外のディメンションの場合、ディメンション値の位置を表す値のINTEGER
式
値セット、またはLIMITファンクション
連結ディメンションの場合、連結ディメンションの値、もしくはコンポーネント・ディメンションの名前とそのディメンションの値または位置を指定できます。valueの値として、ディメンション・サロゲートの値を使用できます。
値の範囲を示します。
例
例10-53 値セットを使用したパーティションの値の指定
各パーティションに実際のディメンション値を指定しない、次のような定義を使用して、パーティション・テンプレート・オブジェクトを定義したとします。
DEFINE PARTITION_SALES_BY_YEAR PARTITION TEMPLATE <TIME PRODUCT> - PARTITION BY LIST (TIME) - (PARTITION TIME_2004 VALUES () <TIME PRODUCT> - PARTITION TIME_2003 VALUES () <TIME PRODUCT> - PARTITION TIME_2002 VALUES () <TIME PRODUCT>)
値セットを使用して各パーティションの値を指定するには、次の手順に従います。
各年の値の値セットを定義します。
DEFINE vs_2004 VALUESET time LIMIT vs_2004 to '01Dec2004' '31Dec2004' '01Jan2004''31Jan2004' - 'Jan2004' 'Dec2004' '2004' DEFINE vs_2003 VALUESET time LIMIT vs_2003 to '01Dec2003' '31Dec2003' '01Jan2003''31Jan2003' - 'Jan2003' 'Dec2003' '2003' DEFINE vs_2002 VALUESET time LIMIT vs_2002 to '01Dec2002' '31Dec2002' '01Jan2002''31Jan2002' - 'Jan2002' 'Dec2002' '2002'
MAINTAIN MOVE文を使用して、パーティション・テンプレートのパーティションの値を指定します。
MAINTAIN partition_sales_by_year MOVE TO PARTITION time_2004 vs_2004 MAINTAIN partition_sales_by_year MOVE TO PARTITION time_2003 vs_2003 MAINTAIN partition_sales_by_year MOVE TO PARTITION time_2002 vs_2002
DESCRIBE文を発行してpartition_sales_by_year
パーティション・テンプレートの説明を見ると、各パーティション定義に適切なtime
の値が含まれていることがわかります。
DEFINE PARTITION_SALES_BY_YEAR PARTITION TEMPLATE <TIME PRODUCT> - PARTITION BY LIST (TIME) - (PARTITION TIME_2004 VALUES - ('2004','Dec2004','Jan2004', 31Dec2004',01Dec2004','31Jan2004','01Jan2004')- PARTITION TIME_2003 VALUES - ('2003','Dec2003','Jan2003', 31Dec2003',01Dec2003','31Jan2003','01Jan2003')- PARTITION TIME_2002 VALUES - ('2002','Dec2002','Jan2002', 31Dec2002',01Dec2002','31Jan2002','01Jan2002'))
MAINTAINコマンドでRENAMEキーワードを使用すると、1つ以上のディメンション値のスペルを変更できます。RENAMEキーワードは、コンポジットまたはINTEGER、DAY、WEEK、MONTH、QUARTER、YEAR型のディメンションでは使用できません。
注意: MAINTAIN RENAME文は、Maintainトリガーを持つサロゲート・ディメンションにも発行できます。この場合、Oracle OLAPでは、Maintainトリガー・プログラムのみが実行され、それ以外のアクションは行われません。詳細は、「トリガー・プログラム」を参照してください。Maintainトリガーのないサロゲート・ディメンションに対してMAINTAIN文を発行すると、エラーが返されます。 |