9 OLAP DMLコマンド: AからG
この章のトピックは、次のとおりです:
-
文字AからGで始まる各OLAP DMLコマンドにつき1つの項目(ACQUIREから説明)
この他のOLAP DMLコマンドについては、「OLAP DMLコマンド: HからZ」でアルファベット順に説明しています。
OLAP DMLリファレンスのその他のトピックについては、「OLAP DMLプロパティ」、「OLAP DMLオプション」、「OLAP DMLファンクション: AからK」,および「OLAP DMLファンクション: LからZ」を参照してください。
OLAP DMLコマンドの概要
OLAP DMLコマンドの動作は、他のプログラミング言語のコマンドとほとんど同じです。ただし、OLAP DMLコマンドにはループ特性があります(「すべてのデータ・オブジェクトの値に対するOLAP DML文の適用」を参照)。
多くのOLAP DMLコマンドは、複雑なアクションを実行します。これらのコマンドには、アナリティック・ワークスペースの作成に使用するAWコマンドや、アナリティック・ワークスペース内でのオブジェクトの定義に使用するDEFINEコマンドなどのデータ定義コマンドがあります。その他のOLAP DMLコマンドは、データ操作コマンドです。たとえば、OLAP DML SQLコマンドを使用して、SQL文をOLAP DMLプログラムに埋め込み、リレーショナル表からアナリティック・ワークスペースのデータ・オブジェクトにデータをコピーしたり、AGGREGATEコマンドを使用して、サマリー・データを計算できます。さらに、DEFINE、MAINTAIN、PROPERTY、SET(=)UPDATEおよびAWコマンドは、Oracle OLAPではOLAP DMLプログラムの実行をトリガーするイベントとして認識されます。(詳細は、「トリガー・プログラム」を参照してください。)
ヒント:
OLAP DML文の多くはコーディングの際、文の名前の頭文字および2つの子音字を並べた3文字に省略して表すことができます。
さらに、コマンドとして実行可能なOLAP DMLプログラムを作成することにより、OLAP DMLの機能を強化できます。
カテゴリ別のコマンド
OLAPのキューブとキューブ・ディメンションの変更コマンド
集計コマンド
割当てコマンド
代入コマンド
デバッグ・コマンド
アナリティック・ワークスペース・オブジェクトの定義コマンド
ディメンション・ステータス・コマンド
予測および回帰コマンド
日付の書式設定コマンド
計算式コマンド
アナリティック・ワークスペースの管理コマンド
アナリティック・ワークスペースのマルチライタ・モードの管理コマンド
ファイルの管理コマンド
データ・モデル・コマンド
プログラミング・コマンド
レポート・コマンド
値の保存およびリストア・コマンド
ソート・コマンド
スプレッドシート・コマンド
SQLの実行コマンド
OLAP DML文の編集コマンド
ACQUIRE
アナリティック・ワークスペースがマルチライタ・モードでアタッチされる場合、ACQUIREコマンドは指定されたオブジェクトを取得および再同期化(オプション)し、それらのオブジェクトの変更内容が更新およびコミットされるようにします。
構文
ACQUIRE {acquired_noresync_objects | RESYNC [CASCADE] - resync_objects [WAIT] } [CONSISTENT WITH [CASCADE] consistency_objects [WAIT]]
ここで、resync_objectsの構文は次のとおりです。
resynch_objname [FOR DELETE | [WITH [CASCADE]|WITHOUT] RELATIONS]] , ...
パラメータ
- acquired_noresync_objects
-
再同期化せずに読取り/書込みモードでアクセスする1つ以上の変数、リレーション、値セット、ディメンション名のカンマで区切られたリスト。
パーティション変数の個々のパーティションを指定するには、次の構文を使用します。
variable_name (PARTITION partition_name [, PARTITION partition_name ]...)
この方法でオブジェクトを取得すると、オブジェクトに対して行われた読取り専用の変更がすべて保存されます。この方法で取得された変数およびディメンションは、UPDATE文を使用して更新できます。
- partition_name
-
オブジェクトの取得先となるパーティションの名前。
- RESYNC
-
指定したオブジェクトの最新の世代を、独自に加えた変更内容をすべて廃棄して読取り/書込みモードで取得するように指定します。
- CASCADE
- resync_objname
-
読取り/書込みモードでアクセスして再同期化する変数、リレーション、値セットまたはディメンションの名前。
パーティション変数の個々のパーティションを指定するには、次の構文を使用します。
variable_name (PARTITION partition_name [, PARTITION partition_name ]...)
- WAIT
-
WAITを指定しない場合、他のユーザーがresync_objects内のオブジェクトのいずれかを読取り/書込みモードで取得していると、ACQUIRE文の実行に失敗します。WAITを指定した場合、Oracle OLAPはresync_objectsのすべてのオブジェクトが読取り/書込みモードで取得可能になるか、タイムアウトになるまで待機します。
- CONSISTENT WITH
-
追加のオブジェクトが読取り専用モードでアクセス可能となるように指定します。指定したオブジェクトがすでに他のユーザーにより取得されている場合のACQUIRE文の動作を指定し、ACQUIRE文の実行に成功した場合は指定したオブジェクトを再同期化します。
- consistency_objects [WAIT]
-
読取り専用モードで取得する1つ以上の変数、リレーション、値セットまたはディメンション名のカンマで区切られたリスト。
パーティション変数の個々のパーティションを指定するには、次の構文を使用します。
variable_name (PARTITION partition_name [, PARTITION partition_name ]...)
WAITを指定しない場合、consistency_objects内のオブジェクトのいずれかが読取り/書込みモードで他のユーザーにより取得されていると、ACQUIRE文の実行に失敗します。WAITキーワードを指定した場合、consistency_objectsのオブジェクトのうち、読取り/書込みモードで他のユーザーにより取得されているオブジェクトがなくなるか、タイムアウトするまでOracle OLAPがACQUIRE文の実行を待機します。
使用上の注意
一貫性の理解
CONSISTENT WITH句を含むACQUIRE文は、ある面ではACQUIRE文とRELEASE文の組合せと考えることができます。
ACQUIRE [avar...] RESYNC [rvar ...] cvar ... [WAIT] RELEASE cvar ...
違いは、ACQUIRE CONSISTENT WITH文の実行は、ユーザーにcvar
変数を取得する十分な権限がなくても成功するという点です。
障害およびエラー処理
ACQUIRE文のすべての句が成功しなければ、ACQUIRE文は失敗します。そのため、要求されたオブジェクトのすべてが取得されるか、まったく取得されないかのどちらかになります。
読取り/書込みモードでオブジェクトを取得できるのは一度に1ユーザーのみです。オブジェクトは、最初に読取り専用モードで取得した後、別のユーザーが読取り専用モードで同じオブジェクトを取得していなければ、そのオブジェクトを先に解放することなく読取り/書込みモードで取得できます。ただし、他のユーザーが読取り専用モードでオブジェクトを取得している場合、そのユーザーがオブジェクトを解放しないかぎり、同じオブジェクトを読取り/書込みモードで取得することはできません。指定したオブジェクトが他のユーザーにより取得された場合か、指定したオブジェクトの読取り専用の世代がオブジェクトの最新の世代ではない場合、ACQUIRE文が失敗します。
また、RESYNC句またはCONSISTENT句にWAITを指定した場合は、ACQUIRE文の完了に時間がかかることがあります。待機中に、取得リストの一部の変数が、他の変数が取得されるにもかかわらず解放されることがあります。ACQUIRE文がタイムアウト・エラーで失敗する原因となるデッドロックが発生する可能性もあります。
デッドロックによる問題を回避するには、ACQUIRE文およびRELEASE文をコーディングする順番に注意して、適切なエラー処理ルーチンを含めてください。
例
例9-1 オブジェクトの取得、更新および解放
マルチライタ・アタッチ・モードの従来の使用法では、2人のユーザーが同じアナリティック・ワークスペース内にある異なる2つのオブジェクトを変更できます。たとえば、アナリティック・ワークスペースに2つの変数actuals
およびbudget
があるとします。ユーザーAがactuals
を変更し、ユーザーBがbudget
を変更しようとします。この場合、アナリティック・ワークスペースをマルチライタ・モードでアタッチした後、各ユーザーは必要な変数を取得して必要な変更を行い、変更を更新およびコミットしてから、ワークスペースをデタッチするか、取得した変数を解放します。
ユーザーAは次の文を実行します。
AW ATTACH myworkspace MULTI ACQUIRE actuals ... make modifications UPDATE MULTI actuals COMMIT RELEASE actuals AW DETACH myworkspace
一方で、ユーザーBは同時に次の文を実行します。
AW ATTACH myworkspace MULTI ACQUIRE budget ... make modifications UPDATE MULTI budget COMMIT RELEASE budget AW DETACH myworkspace
例9-2 オブジェクトの取得および再同期化
B1およびB2という2人のユーザーが、どちらもbudget
のwhat-if分析で変更を行う必要があり、その結果が適切であった場合に自分の担当部分のbudget
を修正するとします。どちらのユーザーも、別のユーザーが同時にbudget
にアクセスする必要があるかどうか、またはbudget
に永続的な変更を行う必要があるかどうかがわかりません。そのため、what-if分析の変更を行う際に他のユーザーをブロックしたくないと考えます。
この場合、アナリティック・ワークスペースをマルチライタ・モードでアタッチした後、両方のユーザーがbudget
を取得せずにそれぞれのwhat-if計算を実行します。その後でwhat-if分析の変更を永続的にすることを決定したら、budgetを非同期化モードで取得します。取得に成功したら、budget
を更新して変更内容をコミットします。次のOLAP DML文は、この使用例を示しています。
AW ATTACH myworkspace MULTI ...perform what-if computations ACQUIRE budget ...maybe make some additional final changes UPDATE MULTI budget COMMIT RELEASE budget AW DETACH myworkspace
ただし、最初の取得に成功しなかった場合、ユーザーは再同期化モードで再度budget
の取得を試みます(待機を要求する場合もあります)。再同期化モードでの取得に成功した場合、変更内容を再作成し(関連する数字の一部が変更された可能性があるため)、次に各ユーザーのアナリティック・ワークスペースを更新およびコミットします。次のOLAP DML文は、この使用例を示しています。
AW ATTACH myworkspace MULTI ... perform what-if computations ACQUIRE budget ...maybe make some additional final changes UPDATE MULTI budget COMMIT RELEASE budget AW DETACH myworkspace AW ATTACH myworkspace MULTI ...perform what-if computations ACQUIRE budget --> failed ACQUIRE RESYNC budget WAIT ...determine that the changes are still needed ...make changes to make permanent UPDATE MULTI budget COMMIT RELEASE budget AW DETACH myworkspace
例9-3 一貫性を保持する場合のオブジェクトの取得
場合によっては、一部のオブジェクトの相互の一貫性を保持する必要があります。その場合、マルチライタ・モードでの特別の注意が必要となります。
ユーザーB1およびユーザーB2の2人のユーザーがどちらもbudget
を変更する必要があり、budget
はinvestment
との一貫性を保持する必要がある場合に、別のユーザー(ユーザーI)がinvestment
を変更する必要があるとします。この使用例では、どのユーザーもbudget
とinvestment
の両方を変更する必要はありませんが、すべてのユーザーは自分がbudget
またはinvestment
のどちらかを取得する際に、budgetまたはinvestmentが他のユーザーによりその時点で取得されていないことを確認する必要があります。この条件を満たすため、次のサンプル・コードに示すように、各ユーザーがCONSISTENT WITH句を含むACQUIRE文を発行する必要があります。すべてのユーザーは、CONSISTENT句にリストされているオブジェクトが、必要な場合はACQUIRE文により再同期化される場合があることを認識しておく必要があります。
たとえば、ユーザーB1は次のOLAP DML文を発行します。
AW ATTACH myworkspace MULTI ... perform what-if computations ACQUIRE budget CONSISTENT WITH investment ... maybe make some additional final changes UPDATE MULTI budget COMMIT RELEASE budget, investment AW DETACH myworkspace
ユーザーB2は、次のOLAP DML文を発行します。
AW ATTACH myworkspace MULTI ... perform what-if computations ACQUIRE budget CONSISTENT WITH investment --> failed ACQUIRE RESYNC budget CONSISTENT WITH investment WAIT ... determine that the changes are still needed ... make changes to make permanent UPDATE MULTI budget COMMIT RELEASE budget, investment AW DETACH myworkspace
ユーザーIは、次のOLAP DML文を発行します。
AW ATTACH myworkspace MULTI ACQUIRE investment CONSISTENT WITH budget --> failed ACQUIRE RESYNC investment CONSISTENT WITH budget WAIT ... make changes to investment UPDATE MULTI investment COMMIT RELEASE budget, investment AW DETACH myworkspace
ACROSS
ACROSSコマンドは、ループ内で実行する1つ以上の文を含むテキスト式を指定するコマンドです。ACROSSは、ステータスを、指定されたディメンションの現行のステータスにある値に一時的に設定します。ACROSS文の実行後、ディメンション・ステータスがループ前の状態にリストアされ、次の文を使用してプログラムの実行が再開されます。DO句文内の文の繰返しは、ACROSS文で指定されるディメンションおよびコンポジットのステータス、およびWHERE句が含まれている場合はその結果により制御されます。
構文
ACROSS dimension... DO dml-statements [WHERE boolean-expression]
パラメータ
- dimension
-
現行のステータスが、dml-statementsに含まれる1つ以上の文の繰返しを制御する、1つ以上のディメンションまたはコンポジット。文は、現行のステータスにある指定されたディメンションの値の各組合せに対して繰り返されます。複数のディメンションを指定した場合、最初のディメンションが最後に変化します。
- DO dml-statements
-
ループの各反復時に実行される1つ以上のOLAP DML文である、複数行のテキスト式。どのようなOLAP DML文でも指定できますが、プログラム内の複数行構成の一部として通常使用されるものは例外です。たとえば、IF...THEN...ELSE、WHILE、FORまたはSWITCHコマンドは、ACROSS文では実行できません。
- WHERE boolean-expression
-
ループの各反復時に、dml-statementsを実行する前にboolean-expressionを評価するように指定します。boolean-expressionの結果が
NA
またはFALSE
である場合には、その反復時にはboolean-expressionは実行されません。
使用上の注意
コンパイルしてから実行するまでの間のコードの変更
Oracle OLAPでは、ACROSS文またはそれを含むプログラムが実行されるまで、ループ本体のコードは生成されません。実行まではコードが生成されないため、文はテキスト式内に含まれているので、ACROSSループの内容をコンパイルしてから実行するまでの間に変更することが可能になります。
例
例9-4 ACROSSを使用したROWコマンドの繰返し
レポート・プログラムで、3か月の各月におけるテントの売上数量を表示するとします。次のACROSS文を使用して、month
ディメンションのそれぞれの値についてROWコマンドを繰り返します。
LIMIT product TO 'Tents' LIMIT month TO 'Jan95' to 'Mar95' ACROSS month DO 'ROW INDENT 5 month WIDTH 6 unit' Jan95 533363 Feb95 572796 Mar95 707198
ADD_CUBE_MODEL
指定したモデルのMODEL(集計内)文を、キューブ・ディメンションの集計マップに追加します。このプログラムの実行で行われる変更はトランザクショナルではなく、プログラムの一部としてCOMMITが自動的に実行されます。
注意:
キューブ・ディメンションまたはそのキューブ・ディメンションを含むキューブに対してマテリアライズド・ビューが存在する場合は、キューブ・ディメンションの変更に、このプログラムを使用できません。
関連項目:
構文
CALL ADD_CUBE_MODEL(logical_cube, logical_dim, model_name, is_static_model, [position ])
パラメータ
- CALL
-
ADD_CUBE_MODELは引数を持つOLAP DMLプログラムであるため、OLAP DMLのCALL文を使用して起動します。
- logical_cube
-
Oracleデータ・ディクショナリで定義されたキューブの名前を示すテキスト式。
関連項目:
- logical_dim
-
変更するキューブ・ディメンションのOracleデータ・ディクショナリ名を示すテキスト式。
- model_name
-
logical_dimに関連付けられている論理モデルの名前を表すテキスト式。
- is_static_model
-
model_nameがlogical_cubeのaggmapにあるRELATION(集計用)文の前または後ろのどちらに追加されるのかを指定するブール式。
デフォルト値は
TRUE
です。これは、MODEL文がRELATION文の前に追加される(model_nameは静的モデルである)ことを意味します。MODEL文をRELATION文の後ろに追加する(model_nameが動的モデルである)場合は、
FALSE
を指定します。 - position
-
静的または動的モデルのリスト内で新しいモデルが追加される位置を指定する整数。たとえば、positionに対して
0
(ゼロ)の値およびis_static_modelに対してFALSE
を指定した場合、そのモデルは最初の動的モデルとして追加されます。positionのデフォルト値はリストの末尾です。positionに負数の値を指定すると、リストの末尾からその数の分だけ先頭方向に移動した位置にモデルが追加されます。
例
SET_INCLUDED_MODELとともにADD_CUBE_MODELを使用する例は、SET_INCLUDED_MODELで説明されている例を参照してください。
ADD_DIMENSION_MEMBER
ADD_DIMENSION_MEMBERプログラムを実行すると、OLAPキューブ・ディメンションにメンバーが追加されます。OLAPキューブ・ディメンション(OLAP論理ディメンションとも呼ばれる)は、Oracleデータ・ディクショナリでファースト・クラス・データ・オブジェクトとして定義されているOLAPディメンションです。
注意:
キューブ・ディメンションまたはそのキューブ・ディメンションを含むキューブに対してマテリアライズド・ビューが存在する場合は、キューブ・ディメンションの変更に、このプログラムを使用できません。
関連項目:
構文
CALL ADD_DIMENSION_MEMBER(member_id, logical_dim, hier_list, level_name, -
parent-member_id, [ auto_compile, [ merge ]])
パラメータ
- CALL
-
ADD_DIMENSION_MEMBERは引数を持つOLAP DMLプログラムであるため、OLAP DMLのCALL文を使用して起動します。
- member_id
-
キューブ・ディメンションに追加するメンバーの値を示すテキスト式。
- logical_dim
-
変更するキューブ・ディメンションのOracleデータ・ディクショナリ名を示すテキスト式。
関連項目:
- hier_list
-
ディメンション・メンバーの追加先となるすべての階層のOracleデータ・ディクショナリ名で構成された複数行のテキスト式。1行ごとに1つの階層を指定します。
メンバーをすべてのキューブ・ディメンション階層に追加する場合は、
NA
を指定します。 - level_name
-
レベル階層の場合に、プログラムによってメンバーがキューブ・ディメンションに追加される階層レベルを指定するテキスト値。レベル階層の場合、level_nameに指定する値は、次の条件を満たしている必要があります。
-
parent_member_idに指定する値と互換性があること。
-
既存のキューブ・ディメンション・メンバーと同じ階層レベルであること(キューブ・ディメンション・メンバーはすべての階層で同じレベルに追加する必要があります)。
メンバーが値階層に含まれている場合(つまりレベルが存在しない場合)は、
NA
を指定します。関連項目:
-
- parent_member_id
-
キューブ・ディメンションに追加するメンバーの親メンバーの値を指定するテキスト式。メンバーを階層の最上位メンバーとして追加する場合は、
NA
を指定します。 - auto_compile
-
関連するアナリティック・ワークスペース・オブジェクト(親リレーションなど)を即時更新するかどうかを指定するブール式。デフォルト値である
TRUE
を指定すると、アナリティック・ワークスペースの変更内容のうち、キューブ・ディメンション・メンバーに追加する必要のあるものはすべて即座に更新されます。パフォーマンス上の理由から、FALSEはコンパイルの実行前に大量の変更を行う場合のみ指定してください。この場合、アナリティック・ワークスペース・オブジェクトの値が有効になる前に、キューブ・ディメンションを明示的にコンパイルする必要があります(「キューブ・ディメンションの明示的なコンパイル」を参照)。注意:
この引数に対して指定した値に関係なく、新しいメンバーは常にディメンションに即時追加されます。これは、コンパイル中にエラーが通知された場合でも同様です。
- merge
-
プログラムによってディメンション・メンバーの更新(ディメンション・メンバーが存在する場合)またはディメンション・メンバーの作成(ディメンション・メンバーが存在しない場合)を行うかどうかを指定するブール式。デフォルト値は
FALSE
です。
使用上の注意
キューブ・ディメンションの明示的なコンパイル
auto_compileでFALSE
を指定した場合、アナリティック・ワークスペース・オブジェクトの値が有効になる前に、キューブ・ディメンションを明示的にコンパイルする必要があります。コンパイルの実行にはDBMS_CUBE.BUILD
パッケージ・コールを使用します。このコールを実行するには、Analytic Workspace Manager内で次の文を発行しますが、ここでcube_dimension_nameは、Oracleデータ・ディクショナリで定義されたキューブ・ディメンションの完全修飾名です。
SQL PROCEDURE DBMS_CUBE.BUILD('cube_dimension_name USING (COMPILE)');
デフォルトでは、前述の文を発行すると、データベースに対してUPDATEとCOMMITが実行されます。UPDATEとCOMMITが実行されないようにするには、次に示すようにNO COMMITを文に追加します。
SQL PROCEDURE DBMS_CUBE.BUILD'NO COMMIT cube_dimension_name USING (COMPILE)');
OLAP論理オブジェクトの名前の値を指定する場合のガイドライン
OLAP DML文において、OLAP論理オブジェクト(キューブやキューブ・ディメンションなど、Oracleデータ・ディクショナリで定義されているOLAPのファースト・クラス・オブジェクト)に対して指定するテキスト式は、次の形式の値に解決できる必要があります。ここでのLOGICAL_OBJECT_NAMEは、OLAPオブジェクトのOracleデータ・ディクショナリ名です。
[SCHEMA_NAME.] LOGICAL_OBJECT_NAME
たとえば、XADEMOスキーマのXADEMOキューブ・ディメンションを参照する場合、有効な式には次の記述が含まれます。
'product' 'xademo.product' 'PRODUCT' 'XADEMO.product' '\"XADEMO\".\"PRODUCT\"'
注意:
OLAP DMLのキューブ対応のプログラムでは、OLAP論理オブジェクトに対して指定したテキスト値は大文字のテキストとして解釈されます(テキスト値を二重引用符で囲んだ場合を除く)。
キューブ対応のOLAP DML文におけるトランザクションの有効範囲
特に明記されていないかぎり、キューブ対応のOLAP DML文の有効範囲は、その他のOLAP DML文と同様に単一のセッションです。変更を維持するには、キューブ対応のOLAP DML文の発行前にアナリティック・ワークスペースを読取り/書込みモードでアタッチしておき、キューブ対応のOLAP DML文を実行した後でOLAP DML UPDATE文とCOMMIT文を発行する必要があります。アナリティック・ワークスペースが読取り専用モードでアタッチされている場合やUPDATE文とCOMMIT文を発行しない場合、変更内容は、アナリティック・ワークスペースがアタッチされている間のセッション内でのみ有効になります。
キューブ対応のOLAP DML文で無効なレベル名
level_nameまたはparent_member_idに無効な値を指定すると、コンパイル時にエラーがスローされます。また、メンバーの階層レベルを指定する場合に、そのメンバーが別の階層ですでに追加されているレベルとは異なるレベルを指定した場合にもエラーが発生します。この場合、auto_compileにFALSE
が指定されていると、コール・エラーがスローされます。
例
例9-5 OLAPキューブ・ディメンションへのメンバーの追加
この例では、my_time
という名前のOLAPキューブ・ディメンションにメンバーを追加します。
-
次のPL/SQL文を実行して、変更を加える前の
my_time
キューブ・ディメンションの値と階層に関するレポートを生成します。select dim_key||' '||level_name||' '||parent from my_time_lvl_hier_view order by dim_key asc; DIM_KEY||''||LEVEL_NAME||''||PARENT ------------------------------------------------------------------------------- L1_0 L1 L1_1 L1 L2_1 L2 L1_1 L2_2 L2 L1_1 L3_1 L3 L2_1 L3_2 L3 L2_1 L3_3 L3 L2_2 L3_4 L3 L2_2 L3_5 L3 L2_2 9 rows selected.
-
次のPL/SQL文を実行して、
ADD_LQ_2
という名前のユーザー作成のOLAP DMLプログラムを実行します。exec dbms_aw.execute('call my_util_aw!add_l1_2');
ユーザー作成のOLAP DMLプログラム
ADD_LQ_2
の定義を次に示します。このプログラムを実行すると、OLAP DMLから提供されるADD_DIMENSION_MEMBER
プログラムがコールされ、my_time
キューブ・ディメンションに新しいメンバーが追加されます。DEFINE ADD_L1_2 PROGRAM PROGRAM VARIABLE _aw_dim text VARIABLE _aw_sales text VARIABLE _members text VARIABLE _member text VARIABLE _i integer _aw_dim = OBJORG(DIM 'my_time') _aw_sales = OBJORG(MEASURE 'my_cube' 'sales') " Adds L1_2, L2_3, L3_6 CALL ADD_DIMENSION_MEMBER('L1_2', 'my_time', NA, 'L1', NA, NO) CALL ADD_DIMENSION_MEMBER('L2_3', 'my_time', NA, 'L2', 'L1_2', NO) CALL ADD_DIMENSION_MEMBER('L3_6', 'my_time', NA, 'L3', 'L2_3', NO) " Set my_time attribute (to meaningless values) so dimension can compile LIMIT &_aw_dim TO 'L1_2', 'L2_3', 'L3_6' _members = VALUES(&_aw_dim) _i = 1 WHILE _i LE NUMLINES(_members) DO _member = EXTLINES(_members, _i, 1) _i = _i + 1 CALL UPDATE_ATTRIBUTE_VALUE(_member, 'my_time', 'start_date', - to_date('01/01/08', 'MM/DD/YY'), NO) CALL UPDATE_ATTRIBUTE_VALUE(_member, 'my_time', 'timespan', 1, NO) DOEND &_aw_sales(&_aw_dim 'L3_6') = 3 UPDATE COMMIT END
-
次のPL/SQL文を発行し、
my_time
キューブ・ディメンションをコンパイルします。exec dbms_cube.build('MY_TIME USING (COMPILE)');
-
コンパイル後に、
my_time
キューブ・ディメンションの値と階層に関するレポートを生成します。select dim_key||' '||level_name||' '||parent from my_time_lvl_hier_view order by dim_key asc; DIM_KEY||''||LEVEL_NAME||''||PARENT ------------------------------------------------------------------------------- L1_0 L1 L1_1 L1 L1_2 L1 L2_1 L2 L1_1 L2_2 L2 L1_1 L2_3 L2 L1_2 L3_1 L3 L2_1 L3_2 L3 L2_1 L3_3 L3 L2_2 L3_4 L3 L2_2 L3_5 L3 L2_2 L3_6 L3 L2_3 12 rows selected.
-
次のPL/SQL文を実行し、新しい階層で
my_cube
を解決します。exec dbms_cube.build(script => 'MY_CUBE USING (SOLVE)', add_dimensions => false);
-
次のPL/SQL文を発行して、my-cubeの
sales
およびmoving_sales
メジャーの値に関するレポートを生成します。新しいmy_time
キューブ・ディメンションの値が表示されます。select my_time||' '||lpad(sales, 2)||' '||lpad(moving_sales, 2) from my_cube_view order by my_time asc; MY_TIME||''||LPAD(SALES,2)||''||LPAD(MOVING_SALES,2) -------------------------------------------------------------------- L1_0 24 27 L1_1 14 38 L1_2 3 3 L2_1 2 5 L2_2 12 14 L2_3 3 3 L3_1 1 4 L3_2 1 2 L3_3 10 11 L3_4 1 11 L3_5 1 2 L3_6 3 3 12 rows selected.
ADD_MODEL_DIMENSION
ADD_MODEL_DIMENSIONプログラムを実行すると、キューブ・ディメンションのモデルにDIMENSION(モデル内)文が追加されます。このプログラムの実行で行われる変更はトランザクショナルではなく、プログラムの一部としてCOMMITが自動的に実行されます。
関連項目:
構文
CALL ADD_MODEL_DIMENSION(logical_dim, model_name, explicit_dim)
パラメータ
- CALL
-
ADD_MODEL_DIMENSIONは引数を持つOLAP DMLプログラムであるため、OLAP DMLのCALL文を使用して起動します。
- logical_dim
-
変更するキューブ・ディメンションのOracleデータ・ディクショナリ名を示すテキスト式。
関連項目:
- model_name
-
logical_dimに関連付けられている論理モデルの名前を表すテキスト式。
- explicit_dim
-
キューブ・ディメンションのモデルに追加するディメンションの名前を示すテキスト式。
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文を含む入力ファイルの使用方法を示します。
-
各ディメンションの階層の名前を識別します。セルフ・リレーションとして階層を定義した場合、セルフ・リレーションの名前を使用します。
-
集計するデータを決定します。
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 |
年 |
|
はい |
L2 |
四半期 |
|
はい |
L3 |
月 |
|
はい |
一方、次の表はユーザーがgeography
階層のsales
データをどのような方法で問い合せるかを示しています。
地理的レベル名 | 記述レベル名 | ディメンション値の例 | ユーザーは通常このレベルの問合せを行うか |
---|---|---|---|
L1 |
世界 |
|
はい |
L2 |
大陸 |
|
いいえ |
L3 |
国 |
|
はい |
L4 |
市区町村 |
|
はい |
最後に、次の表はユーザーがproduct
ディメンション階層のsales
データをどのような方法で問い合せるかを示しています。
製品レベル名 | 記述レベル名 | ディメンション値の例 | ユーザーは通常このレベルの問合せを行うか |
---|---|---|---|
L1 |
全製品 |
|
はい |
L2 |
除算 |
|
はい |
L3 |
分類 |
|
はい |
L4 |
製品 |
|
はい |
ユーザーがデータを問い合せる方法に関するこれらの情報を活用して、次のような集計の方針を採用します。
-
すべてのレベルに対して問合せが頻繁に行われるため、
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コマンドによって作成されるかどうかを、Oracle OLAPに認識させます。AGGINDEX文はAGGREGATEコマンドに、コンポジットに含まれるディメンションのコンポジット・タプルを作成するよう伝えます。
それらの索引は、AGGMAPのMODEL文、およびACROSS句を使用する文で使用され、Oracle OLAPがコンポジットによってディメンション化される変数をループ処理するのに役立ちます。それらの文を使用すると、すべてのデータが計算されます。その場で一部のデータを計算するように指定する場合、そのデータが欠落しているように見えます。AGGINDEXをYES
に設定すると、AGGREGATEファンクションを使用して即時計算を実行する(つまり、データを集計する変数に、AGGREGATEファンクションをコールするNA
トリガー・プロパティを追加する)かどうかに関係なく、文は欠落しているデータへのアクセスを試みます。
索引が作成されていて、AGGREGATEファンクションを使用する場合、MODEL(またはACROSS句を使用する文)が欠落しているデータを要求すると、そのデータは即時計算されます。これは、文には必要なすべてのデータが含まれているため、MODEL(または他の文)の結果が正しいことを意味します。
それらの索引が作成されない場合、欠落しているデータは計算されません。したがって、AGGREGATEファンクションを使用した場合でも、索引が必要な文は欠落しているデータをNA
データとして解釈します。
構文
AGGINDEX {YES|NO}
パラメータ
- YES
-
(デフォルト)AGGREGATEコマンドをaggmapとともに使用する場合は必ず、作成可能なすべての索引が作成されるようにします。事前計算されるデータと、即時計算されるデータの両方の索引が作成されます。作成可能なすべての索引を作成すると、AGGREGATEコマンドの実行時間が長くなります。AGGINDEXをYESに設定する必要がある場合の詳細は、「使用上の注意」の「値がYESのAGGINDEXを使用する場合」を参照してください。
- NO
-
即時計算されるデータの索引を作成しません。それらの索引値の作成を省略するとAGGREGATEコマンドの実行時間は短縮されますが、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ファンクションが実行され、データが即時計算されます。
値が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
仕様を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) AGGINDEX YES
ここで、次の$NATRIGGERプロパティをsales1
変数にアタッチします。
CONSIDER sales1 PROPERTY '$NATRIGGER' 'AGGREGATE(sales1 USING sales.agg)'
ここで、sales1でAGGREGATEコマンドをコールして索引値をインスタンス化します。
AGGREGATE sales1 using sales.agg
aggmapがAGGINDEX YES
を指定する場合、次の文のAGGINDEXの影響を考慮します。
sales2 = sales1 ACROSS SPARSE <product, geography>
この文は、sales1
のデータをループ処理し、値をsales2
にコピーします。この文により、NA
トリガーは、sales1
で即時計算されるように指定されたすべてのデータにAGGREGATEファンクションをコールします。したがって、集計後にsales2
にはsales1
のコピーに加えて、すべての集計データ・セル(sales1
データが完全に事前計算された、つまり完全にロールアップされた場合に計算されるセル)が含まれます。
ただし、sales.agg
集計仕様にAGGINDEX NO
文を配置した場合、sales2
にはsales1
のデータのコピーと、コンポジット・ディメンションのリーフ値の集計データ・セルが含まれます。
time
ディメンションはコンポジットに含まれておらず、AGGINDEXの値はそれに影響を与えないため、どちらの場合も$NATRIGGERがコールされてtime
データを集計することに注意してください。
値がNOのAGGINDEXを使用する場合
次のいずれかに当てはまることがわかっている場合、値がNO
のAGGINDEXを使用できます。
-
アプリケーションがAGGMAPコマンドのMODEL文またはACROSS句を含まない。
-
aggmapのMODEL文はRELATION文の前に表示されます。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文の使用例は、例9-11を参照してください。
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
-
実行する集計の種類を説明するキーワード。キーワードは、AGGMAPコマンドのRELATION (集計用)文のoperationパラメータの説明にリストされています。
- 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ファンクションを使用して即時集計された変数データを格納またはキャッシュするかどうかを決定する唯一の因子です。「$NATRIGGERの結果を格納またはキャッシュするかどうかの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ファンクションを使用して計算されたデータがユーザーの変更内容を反映しない点にあります。
-
DIMENSION (集計用)
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
-
実行する集計の種類を説明するキーワード。キーワードは、AGGMAPコマンドのRELATION (集計用)文のoperationパラメータの説明にリストされています。
- 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
パラメータ
使用上の注意
メジャー・ディメンションの定義
次の文では、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'
例
MEASUREDIM文を含む集計使用の例は、例9-16を参照してください。
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
-
実行する計算の種類を説明するキーワード。キーワードは次の表にリストされており、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
ディメンションに別の演算を指定する場合、opvarはgeography
によってディメンション化できません。演算子変数のページング量を最小化するには、固定幅
8
のTEXT
型として演算変数を定義します。 -
- 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
階層に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
例
RELATION文を含む集計仕様の例については、AGGMAPコマンドの例を参照してください。
AGGMAP ADDまたはREMOVEモデル
AGGMAP ADDまたはREMOVEモデル・コマンドは、以前に定義された集計仕様(AGGMAP型のaggmapオブジェクト)に対して、以前に定義されたモデルを追加または削除します。モデルは集計仕様内で使用され、非階層ディメンション(明細項目など)でデータを集計しますが、非階層ディメンションには親リレーションがないため、RELATION文では集計できません。詳細はMODEL(集計内)を参照してください。
注意:
AGGMAP ADD MODELおよびAGGMAP REMOVE MODEL文を使用してもaggmapオブジェクトにモデルを一時的に追加できますが、通常は、この操作を実行する次のようなMAINTAIN ADD SESSION文を使用します。
MAINTAIN dimension ADD SESSION member = model APPLY TO AGGMAP aggmap
MAINTAIN ADD SESSION文を使用すると、あるセッションで計算されたメンバーおよびその定義のいずれも次のセッションには維持されず、どちらも作成されたセッションが終了すると削除されます。
構文
AGGMAP {ADD model TO aggmap|REMOVE model FROM aggmap}
パラメータ
例
例9-25 aggmapへのモデルの一時的な追加
例として、次の定義を持つletter.aggmap
という名前のaggmapオブジェクトがあるとします。
DEFINE LETTER.AGGMAP AGGMAP AGGMAP RELATION letter.letter PRECOMPUTE ('AA') END
さらに、ディメンション値AAB
およびABA
によりディメンション化されるセルの、サマリー変数データを作成するとします。ただし、このデータをアナリティック・ワークスペースに永続的に格納することはしません。セッション中に、データを参照するだけです。
この種類の集計を実行する手順は、次のとおりです。
-
カスタム集計のディメンション値を作成します。このディメンション値は、ディメンション値
AAB
およびABA
の親になります。次の文では、letter
ディメンションに'BB
'を追加します。MAINTAIN letter ADD 'BB'
-
AGGREGATION
ファンクションを含むMODEL
オブジェクトを作成し、このオブジェクトによって子ディメンション値が新しいディメンション値に関連付けられます。次のモデルは、AAB
およびABA
の親としてBB
を識別します。親ディメンション値(この場合はBB)を、親リレーション(letter.letter
)の親としてあらかじめ定義することはできません。DEFINE LETTER.MODEL MODEL MODEL DIMENSION letter BB=AGGREGATION('AAB' 'ABA')
-
AGGMAP ADD
文を実行して、モデルを既存のAGGMAP
オブジェクトに追加します。AGGMAP ADD letter.model TO letter.aggmap
ここで、aggmapは次のようになります。
DEFINE LETTER.AGGMAP AGGMAP AGGMAP RELATION letter.letter PRECOMPUTE ('AA') END AGGMAP ADD letter.model
-
モデルは、次の式のように
AGGREGATE
ファンクションによってのみ実行され、AGGREGATE
コマンドからは無視されます。REPORT AGGREGATE(units USING letter.aggmap)
-
セッション中にaggmapからモデルを削除する場合、
AGGMAP REMOVE
文を使用します。 -
使用しているaggmapが、アナリティック・ワークスペースで永続オブジェクトにならないようにするには、セッションを閉じる前に次の文を発行して、手順1で追加したディメンション値を削除してください。
MAINTAIN letter DELETE 'BB'
セッションが終了すると、Oracle OLAPはAGGMAP ADD文を使用して追加されたモデルを自動的に削除します。AGGMAP REMOVE文を明示的に発行する必要はありません。
AGGMAP SET
注意:
$AGGMAPプロパティを使用して変数のデフォルト集計仕様を指定したり、$ALLOCMAPプロパティを使用して変数のデフォルト割当て仕様を指定したりすることも可能です。
構文
AGGMAP SET aggmap AS DEFAULT FOR variables
パラメータ
例
例9-26 AGGMAP SETを使用したデフォルトaggmapの指定
$AGGREGATE_FROMでは、例9-13に示されているAGGREGATEコマンドを次の文に簡略化する方法を説明します。
AGGREGATE sales_by_revenue USING revenue_aggmap
revenue_aggmap
をsales_by_revenue
変数のデフォルトaggmapにすると、AGGREGATEコマンドをさらに簡略化できます。そのためには、sales_by_revenue
変数の$AGGMAPプロパティを定義するか、次の文を発行します。
AGGMAP SET revuienue_aggmap AS DEFAULT FOR sales_by_revenue
これで、USING句を含まない次のAGGREGATEコマンドを発行することにより、データを集計できるようになります。
AGGREGATE sales_by_revenue
AGGREGATEコマンド
AGGREGATEコマンドは、指定されたaggmap内でPRECOMPUTEとして指定されている変数のサマリー・データを計算します。(事前計算するデータの指定については、AGGMAPコマンドのPRECOMPUTEおよびRELATION(集計用)文を参照してください。)集計の対象になるのは、現在ステータスにある値に限られます。
事前計算するように指定されていないデータを計算するには、$AGGMAPプロパティまたはAGGREGATEファンクションを使用します。
関連項目:
構文
AGGREGATE|AGGR { var [(PARTITION partition-name)]}... [USING aggmap] - [FROM fromspec|FROMVAR textvar] [FORCEORDER] [FUNCDATA] [COUNTVAR countvar...]
パラメータ
- var
-
この変数のデータ値が計算の対象となります。1つのAGGREGATEコマンドに指定されているすべての変数には、同一のディメンションが同じ順序で含まれている必要があります。
- PARTITION
-
指定した変数の指定した部分にある値についてのみ、AGGREGATEの再計算を実行するよう指定します。通常、集計対象のパーティションを1つに限定するのは、マルチライタ・モードを使用してビルドをパラレル化するためです。
注意:
AGGREGATEコマンドでは、個々のパーティションを集計する際、パーティションの依存性は考慮されないため、1つのAGGREGATEコマンドの中では依存性のないパーティションのみを集計してください。
- partition-name
-
事前に定義されたパーティションの名前。DEFINE PARTITION TEMPLATEを参照してください。
- USING
-
このキーワードは、指定したaggmapを使用して集計が実行されることを示します。この句を含めない場合、AGGMAP文または$AGGMAPプロパティを使用して事前に指定されている変数のデフォルトのaggmapがコマンドで使用されます。
- aggmap
-
データの集計方法を指定する事前定義されたaggmapの名前。aggmapの詳細は、DEFINE AGGMAPコマンドを参照してください。
- FROM
-
このキーワードは、異なるオブジェクトから詳細データが取得されることを示します。
FROM句は、集計の実行時における詳細データの取得元の変数を指定する唯一の方法です。「集計の詳細データの取得元を指定する方法」を参照してください。
- fromspec
-
集計の詳細データの取得元である任意にディメンション化された変数、計算式またはリレーション。
- FROMVAR
-
このキーワードは、キャップストーン集計を実行するために異なるオブジェクトから詳細データが取得されることを示します。(FROMVAR句の使用例は、例9-32を参照。)
FROMVAR句は、集計の実行時における詳細データの取得元の変数を指定する唯一の方法です。「集計の詳細データの取得元を指定する方法」を参照してください。
- textvar
-
リーフ・ノードを解決するために使用される任意にディメンション化された変数。値を計算するときにノードが詳細データを必要としない場合は、
NA
を指定します。 - FORCEORDER
-
aggmapにリストされているRELATION文と同じ順序で計算を実行するよう指定します。AGGREGATEコマンドで計算された値の一部を変更した場合に、このオプションを使用します。このオプションを指定しないと、AGGREGATEコマンドで使用する最適化方法において、変更された値が無視されることがあります。
注意:
変数に$AGGREGATE_FORCEORDERプロパティを設定すると、この動作を集計時のデフォルトの動作にすることができます。この場合、FORCEORDERキーワードをAGGREGATEコマンドで指定する必要はありません。
- FUNCDATA
-
AGGREGATEファンクションで将来使用する集計仕様をコンパイルします。FUNCDATAを使用すると、aggmap、リレーション階層またはコンポジットを変更しないかぎり、AGGREGATEファンクションを使用する前にaggmapを再コンパイルする必要がありません。
変数にコンポジット・ディメンションがある場合、AGGREGATEファンクションで使用する索引(コンポジット・タプル)が作成および保存されます。それ以外の場合、AGGREGATEファンクションがコールされるたびに索引が再作成されます。コンポジット索引の詳細は、AGGINDEXを参照してください。
- COUNTVAR countvar
-
AVERAGE、HAVERAGE、HWAVERAGEまたはWAVERAGE演算子を含むRELATION文について計算された集計値に加えられたリーフ・ノードの数の非
NA
カウント数を格納する場合、countvarで指定されたユーザー定義の変数を使用するよう指定します。注意:
通常、平均集計値の格納にユーザー定義のCountvar変数は使用しません。かわりに、Oracle OLAPが作成したAggcount変数を使用します。圧縮コンポジットに対する平均演算子を持つRELATION文が集計仕様に含まれる場合は、Aggcount変数を使用する必要があります。
Aggcount変数の詳細は、「Aggcount変数」を参照してください。
countvar 変数は、varで指定された変数と同一のディメンションが同一の順序で定められている
INTEGER
変数である必要があります。複数の変数を同時に集計する場合、個別に結果を記録するためにINTEGER
変数をそれぞれ定義する必要があります。
使用上の注意
AGGREGATEに対するステータスの影響
現行のステータスは、最下位レベルの階層、つまりリーフ・ノードのディメンション値にのみ影響します。現在ステータスにあるリーフ・ノードのディメンション値のみが集計されます。AGGMAPコマンドのPRECOMPUTE句でそのレベルにあるディメンション値を対象外にしないかぎり、親値自体がステータスにあるかどうかにかかわらず、ステータスにあるリーフ・ノードの親値が計算されます。したがって、aggmapで指定したすべてのデータを集計する場合、集計を実行する前にディメンションのステータスがALLに設定されていることを確認してください。
AGGREGATEで親リレーションを使用すると、異なるレベルの階層でディメンション値が識別されます。また、ステータスを制限することでデータの部分集計も実行できます。ただし、AGGREGATEファンクションで実行時に集計されるデータがある場合には注意して実行する必要があります。詳細は、AGGREGATEファンクションの項にある注意を参照してください。
たとえば、次の表に示すように、area
ディメンションおよび1つのgeographyディメンションに対して1つの階層をサポートするarea.area
親子関係を使用するとします。
表9-2 geography階層
レベル | areaディメンション | area.area親リレーション |
---|---|---|
1 |
|
|
2 |
|
|
2 |
|
|
3 |
|
|
3 |
|
|
3 |
|
|
ここでNew
York
のデータ値を変更するとします。New
York
に対してのみAGGREGATEを使用すると、South
の子値(Atlanta
)を含まずに計算が実行されますが、レベル3
からレベル1
(TotalUS
)までの計算にその値のレベル2
が含まれます。TotalUS
までのロールアップにすべての子値を含めるには、AGGREGATEコマンドを実行する前にa LIMIT TO ALL
文を使用します。
階層にある子値の一部のみが変更された場合、変更された値のみを計算するようにステータスを設定します。たとえば、埋込み合計ディメンションd2
とその親リレーションreld2
がある場合、最初にd2
を変更された値に制限します。
ディメンションにあるすべての階層のデータを計算するには、AGGREGATEコマンドを実行する前にそのディメンションの階層ディメンションをALL
に制限します。
計算するデータ量の制御
aggmapのRELATION文でPRECOMPUTEキーワードを使用すると、計算する変数データの量を制御できます。PRECOMPUTEキーワードの後に制限句を使用してディメンションのステータスを設定します。
ユーザーがデータを変更する場合
ユーザーが変数のデータを変更できる場合は、AGGREGATEファンクションを使用して集計を即時計算することで、ユーザーによる変更が集計データに反映されます。データの実行時における変更の詳細は、AGGREGATEファンクションを参照してください。
階層の世代スキップ
AGGREGATEは、階層の世代スキップ可能な範囲で、親リレーションの世代が自動的に識別されます。たとえば、3レベルのブランチ(たとえば、Boston
、Massachusetts
およびtotalUS
)がある4レベルの階層(たとえば、neighborhoods
、cities
、states
およびtotalUS
)が使用可能です。
アクセス権に関する制限
セルごとにアクセス権がある変数ではAGGREGATEが機能しないので、即座にエラーが返されます。また、PERMITERRORオプションも無視されます。ただし、AGGREGATEは、オブジェクト・レベルまたディメンション・レベルのアクセス権がある変数では機能します。PERMITコマンドおよびPERMITERRORオプションを参照してください。
集計の詳細データの取得元を指定する方法
データを集計する場合、詳細データの取得元を次の方法で指定できます。
-
$AGGREGATE_FROMプロパティまたは$AGGREGATE_FROMVARプロパティを変数に割り当てる。
注意:
変数には、これらのプロパティの一方のみ割当て可能です。$AGGREGATE_FROMプロパティと$AGGREGATE_FROMVARプロパティの両方を1つの変数に割り当てることはできません。
-
データを集計するAGGREGATEコマンドまたはAGGREGATEファンクションにFROM句またはFROMVAR句を含める。
集計を実行すると、Oracle OLAPによって次のように詳細データの取得元が決定されます。
-
FROM句またはFROMVAR句で場所が指定されている場合、Oracle OLAPはその場所にある詳細データを使用します。
-
FROM句またはFROMVAR句で場所が指定されていない場合、Oracle OLAPは$AGGREGATE_FROMプロパティまたは$AGGREGATE_FROMVARプロパティを使用して場所が指定されているかどうかを確認します。これらのプロパティの1つで場所が指定されている場合、Oracle OLAPはその場所にある詳細データを使用します。
-
FROM句またはFROMVAR句、あるいは$AGGREGATE_FROMプロパティまたは$AGGREGATE_FROMVARプロパティで場所が指定されていない場合、Oracle OLAPはその変数自体の詳細データを使用して集計を実行します。
例
この項では、一部のAGGREGATEコマンドの使用例を示します。その他の集計の例は、AGGMAPコマンドの例を参照してください。
例9-27 バッチ・ジョブでのデータの事前計算
通常、データベースのデータをメンテナンスする方法の一部として、事前計算された集計をバッチ・ウィンドウで生成します。たとえば、ジョブ・マネージャを使用してOracle Enterprise Managerでバッチ・ジョブをスケジュールできます。
事前計算された集計を生成するには、AGGREGATEコマンドを使用します。AGGREGATEコマンドによって、aggmapで指定された仕様に従って1つ以上の変数のデータが集計されます。
バッチ・ジョブには次のような文を含める必要があります。
AGGREGATE sales units USING gpct.aggmap UPDATE COMMIT
例9-28 1つの変数の集計
アナリティック・ワークスペースに次の定義を含むactuals
という名前の変数が含まれているとします。
DEFINE actuals DECIMAL <time, SPARSE <product, customer, channel>>
次に、同じディメンションが同じ順序で定義されているaggmapオブジェクトを定義します。DEFINE AGGMAPを使用して、act.agg
という名前のaggmapオブジェクトを定義するとします。
DEFINE act.agg AGGMAP <time, SPARSE <product, customer, channel>>
time
ディメンションの階層の名前はtime.r
、product
ディメンションの名前はproduct.r
とし(以降同様)、AGGMAP文を使用して、次のテキストをact.agg
aggmapに追加します。
AGGMAP RELATION time.r RELATION product.r RELATION customer.r RELATION channel.r END
これらのテキストによって、ロールアップされるデータの各ディメンションの階層の名前が指定されます。各ディメンションの現行のステータスがALL
の場合、actuals
の定義にある各ディメンションのそれぞれのディメンション値にデータが適応されます。データは即時計算されません。
次の文を使用してactuals
変数を計算します。(AGGREGATEコマンドの一部としてコンパイル処理が含まれているため、aggmapをコンパイルする必要はありません。)
AGGREGATE actuals USING act.agg
例9-29 複数の変数の集計
アナリティック・ワークスペースに、actuals
という名前の変数およびforecast
という名前の変数が含まれているとします。次の変数定義で示すように、これらの変数には同一のディメンションが同じ順序で定義されています。
DEFINE actuals DECIMAL <time, SPARSE <product, customer, channel>> DEFINE forecast DECIMAL <time, SPARSE <product, customer, channel>>
次に、同じディメンションが同じ順序で定義されているaggmapオブジェクトを定義します。「例9-28」で説明したように、act.agg
という名前の同じaggmapオブジェクトを定義します。各変数のデータを同じようにロールアップするには、同一のaggmapを使用し、1つの文で両方の変数を計算します。
次の文を使用してactuals
変数およびforecast
変数を計算します。
AGGREGATE actuals forecast USING act.agg
各ディメンションにあるそれぞれのディメンション値のすべてのデータをロールアップするようにaggmapで指定しているので、この文はactuals
およびforecast
にあるすべてのデータをロールアップします。
例9-30 複数の変数でのCOUNTVARの使用
3つの変数(sales
、units
およびprojected_sales
)のデータを1つのAGGREGATEコマンドで集計するとします。各変数には次のディメンション性があります。
<month product geography>
COUNTVARで結果を計算するには、sales
、units
およびprojected_sales
と同じディメンション性を持つ3つのINTEGER
変数を定義する必要があります。
DEFINE intsales INTEGER <month product geography> DEFINE intunits INTEGER <month product geography> DEFINE intprojsales INTEGER <month product geography>
次の文でINTEGER
変数を指定します。
AGGREGATE sales units projected_sales USING sales.agg - COUNTVAR intsales intunits inprojsales
例9-31 部分集計の実行
この例では、time
ディメンションを直前の2つの期間に制限し、新しくロードされたデータのみ集計します。
tp2.agg
というaggmapは、現在ステータスにあるすべての詳細データに対する事前集計を指定します。
DEFINE TP2.AGG AGGMAP LD Full preaggregation AGGMAP RELATION time.parentrel PRECOMPUTE (ALL) RELATION product.parentrel PRECOMPUTE (ALL) END
この集計では、time
が直前の2つの期間に制限され、すべてのproduct
値がステータスにあります。
LIMIT time TO LAST 2 STATUS time product The current status of TIME is: Apr02, May02 LIMIT product TO ALL
次のAGGREGATE文では、tp2.agg
というaggmapを使用してunits
が計算されます。
AGGREGATE units USING tp2.agg
この集計の結果によって、子がステータスにある場合、親がステータスにあるかどうかにかかわらず親値が計算されることが示されます。
LIMIT time TO '2002' 'Q1.02' 'Q2.02' 'Jan02' to 'May02' REPORT DOWN time units
-----------------------------------------UNITS----------------------------------------- ----------------------------------------PRODUCT---------------------------------------- TIME FOOD SNACKS DRINKS POPCORN COOKIES CAKES SODA JUICE ------- -------- -------- -------- -------- -------- -------- -------- -------- 2002 38 24 14 6 9 9 9 5 Q1.02 NA NA NA NA NA NA NA NA Q2.02 38 24 14 6 9 9 9 5 Jan02 NA NA NA 8 2 4 5 8 Feb02 NA NA NA 5 3 2 2 5 Mar02 NA NA NA 3 4 4 2 4 Apr02 21 13 8 2 7 4 6 2 May02 17 11 6 4 2 5 3 3
例9-32 キャップストーン集計
アナリティック・ワークスペースに次の値でgeog.d
およびtime.d
という名前の2つの階層TEXT
ディメンションがあるとします。
GEOG.D -------------- Boston Medford San Diego Sunnydale Massachusetts California United States TIME.D -------------- Jan76 Feb76 Mar76 76Q1
さらに、次の定義による4つの変数があるとします。
DEFINE sales_jan76 VARIABLE INTEGER <geog.d> DEFINE sales_feb76 VARIABLE INTEGER <geog.d> DEFINE sales_mar76 VARIABLE INTEGER <geog.d> DEFINE sales_capstone76 VARIABLE INTEGER <geog.d time.d>
これらの変数に対して次のREPORT文を発行するとします。レポートの出力には変数の詳細データが表示されます。
REPORT sales_jan76 sales_feb76 sales_mar76 REPORT DOWN geog.d sales_capstone76 GEOG.D SALES_JAN76 SALES_FEB76 SALES_MAR76 -------------- ------------ ------------ ------------ Boston 1,000 2,000 3,000 Medford 2,000 4,000 6,000 San Diego 3,000 6,000 9,000 Sunnydale 4,000 8,000 12,000 Massachusetts NA NA NA California NA NA NA United States NA NA NA -----------------SALES_CAPSTONE76------------------ ----------------------TIME.D----------------------- GEOG.D Jan76 Feb76 Mar76 76Q1 -------------- ------------ ------------ ------------ ------------ Boston NA NA NA NA Medford NA NA NA NA San Diego NA NA NA NA Sunnydale NA NA NA NA Massachusetts NA NA NA NA California NA NA NA NA United States NA NA NA NA
-
次の定義で2つのaggmapオブジェクトを定義します。
DEFINE leaf_aggmap AGGMAP AGGMAP RELATION geog.parentrel OPERATOR SUM END DEFINE capstone_aggmap AGGMAP AGGMAP RELATION time.parentrel OPERATOR SUM END
-
データを集計するために、次の定義で
capstone_source
という名前の変数を定義します。DEFINE capstone_source VARIABLE TEXT <time.d>
REPORT文の次の出力に示されるように、
time.d
の各値に対して、該当する販売データを含む変数の名前をcapstone_source
に移入します。TIME.D CAPSTONE_SOURCE -------------- ---------------------- Jan76 sales_jan76 Feb76 sales_feb76 Mar76 sales_mar76 76Q1 NA
-
次の文を発行して変数を集計します。
AGGREGATE sales_jan76 sales_feb76 sales_mar76 USING leaf_aggmap AGGREGATE sales_capstone76 USING capstone_aggmap FROMVAR capstone_source
変数の集計後、REPORT文を発行すると、計算されたデータが変数に移入されます。
REPORT sales_jan76 sales_feb76 sales_mar76 REPORT DOWN geog.d sales_capstone76 GEOG.D SALES_JAN76 SALES_FEB76 SALES_MAR76 -------------- ------------ ------------ ------------ Boston 1,000 2,000 3,000 Medford 2,000 4,000 6,000 San Diego 3,000 6,000 9,000 Sunnydale 4,000 8,000 12,000 Massachusetts 3,000 6,000 9,000 California 7,000 14,000 21,000 United States 10,000 20,000 30,000 -----------------SALES_CAPSTONE76------------------ ----------------------TIME.D----------------------- GEOG.D Jan76 Feb76 Mar76 76Q1 -------------- ------------ ------------ ------------ ------------ Boston 1,000 2,000 3,000 6,000 Medford 2,000 4,000 6,000 12,000 San Diego 3,000 6,000 9,000 18,000 Sunnydale 4,000 8,000 12,000 24,000 Massachusetts 3,000 6,000 9,000 18,000 California 7,000 14,000 21,000 42,000 United States 10,000 20,000 30,000 60,000
ALLCOMPILE
ALLCOMPILEプログラムは、現行のアナリティック・ワークスペースにあるコンパイル可能なすべてのオブジェクトを1つずつコンパイルするプログラムです。ALLCOMPILEを実行すると、コンパイル中のオブジェクトの名前を示すメッセージが現行の出力ファイルに送信されます。
ALLCOMPILEはCOMPILEコマンドを使用します。したがって、オブジェクトをコンパイルする際に構文エラーがチェックされ、必要に応じてエラー・メッセージが現行の出力ファイルに記録されます。
構文
ALLCOMPILE [n]
パラメータ
例
例9-33 ALLCOMPILEの出力
次の例は、4つのプログラムを含むアナリティック・ワークスペースでALLCOMPILEを実行した場合の出力です。
Compiling AUTOGO Compiling READIT Compiling REGION.REPORT Compiling SALES.REPORT
ALLOCATE
ALLOCATEコマンドは、変数データを階層ディメンションの上位から下位へ順に割り当てることによって、上位レベルのデータから下位レベルのデータを計算するコマンドです。
通常、予算編成、傾向予測および収益分析のためにデータを割り当てます。
構文
ALLOCATE source [SOURCE conjoint] [BASIS basisname [ACROSS dimname]] - [TARGET targetname [TARGETLOG targetlogname]] - [USING aggmap] [ERRORLOG errorlogfileunit]
パラメータ
- source
-
割り当てる値を指定する変数または計算式。sourceオブジェクトが計算式の場合、TARGETキーワードで変数を指定する必要があります。sourceとして変数を指定してターゲット変数またはbasisname変数を指定しない場合、ALLOCATEは基礎およびターゲットとしてsource を使用します。
- SOURCE conjoint
-
ユーザーが変更したセルのリストを含む結合ディメンションを指定します。ALLOCATEコマンドはこのリストを使用して、変更されたすべてのソース・セルの割当てに必要な最小のターゲット・ステータスを作成します。
- BASIS basisname
-
割当ての基準となるデータを指定する変数、リレーションまたは計算式を指定します。このデータによって、割り当てられた値を受け取るターゲット・セル、および均等演算または比例演算でターゲット・セルに割り当てられるソースの量が決定されます。
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コマンドは基礎としてソースを使用します。
- ACROSS dimname
-
ALLOCATEコマンドが基礎でセルを検出するためにループ処理するディメンション(または名前付きコンポジット)を指定します。基礎は計算式も使用可能なので、ループするディメンションを使用して基礎ループからスパース性を排除することにより、大きなパフォーマンス効果を実現できます。
- TARGET targetname
-
割り当てられた値を保持する変数を指定します。ソース・オブジェクトが計算式の場合、ターゲットを指定する必要があります。ソース・オブジェクトが変数であり、ターゲットを指定しない場合、ALLOCATEはターゲットとしてソースの変数を使用します。
- TARGETLOG targetlogname
-
ALLOCATEが割当てのコピーを割り当てる変数(targetname変数と同様にディメンション化されている)、またはそのような変数を指定するリレーションを指定します。たとえば、
time
およびproduct
のディメンション値Jan01
およびTV
によって指定されたcosts
変数のセルにALLOCATEが100
の値を割り当て、その同じディメンション値によって指定されたcostacct
変数のセルがtargetlog
リレーションによって指定されると、ALLOCATEは指定されたcostacct
セルにも100
の値を割り当てます。 - USING aggmap
-
割当てに使用する事前定義したaggmapの名前を指定します。この句を含めない場合、$ALLOCMAPプロパティを使用して事前に指定されている変数のデフォルトの割当て仕様をコマンドで使用します。
- ERRORLOG errorlogfileunit
-
割当てデッドロック、エラーまたは他の情報のロギングにALLOCATEが使用するファイル・ユニットを指定します。割当てでデッドロックおよびエラーが生成されない場合、ALLOCATEはerrorlognameに
NA
を設定します。割当てで1つ以上のデッドロックまたはエラーが生成されると、そのイベントが指定されたファイルに送信されます。ALLOCATEは、割り当てられないままになっている割当てソースごとに1行ずつファイルに書き込みます。ERRORLOGでファイル・ユニットを指定しない場合、ALLOCATEは情報を標準の出力デバイスに送信します。
使用上の注意
元の基礎値の保存
通常、ソース・オブジェクト、基礎オブジェクトおよびターゲット・オブジェクトは同じ変数なので、ターゲット変数のセルにある元の値によって割当ての比率が決定されます。割当てによって、ターゲット・セルの元の値が割り当てられた値で上書きされます。変数の元の値を保存するには、元の変数を基礎オブジェクトとして指定し、割り当てられた値をターゲット・オブジェクトとして新しい変数に保存します。異なる基礎オブジェクトおよびターゲット・オブジェクトを使用することによって、割り当てられたデータをプレビューできます。割り当てられた値を基礎と同じ変数に格納するには、基礎およびターゲットと同じオブジェクトで割当てを再度実行します。異なる基礎オブジェクトおよびターゲット・オブジェクトを使用する例として、割当ての基礎にactuals
変数を使用し、ターゲットにbudget変数を使用する例を次に示します。
ソースまたは基礎の計算式の使用
ソース・オブジェクトおよび基礎オブジェクトに計算式が使用できるので、複雑な計算を行い、その結果をソース・オブジェクトまたは基礎オブジェクトに使用できます。たとえば、翌年の売上で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
ALLOCMAP
ALLOCMAPコマンドは、aggmapオブジェクトを割当て仕様として識別し、仕様の内容を入力するコマンドです。AGGMAPを使用して割当て仕様をaggmapオブジェクトに割り当てるには、最新の定義または現行のセッション中に検討された定義である必要があります。そうでない場合は、最初にCONSIDER文を使用し、現行の定義にする必要があります。
AGGMAPコマンドの代替コマンドはEDIT AGGMAPコマンドであり、OLAP Worksheet内でのみ使用できます。EDIT AGGMAPコマンドを実行すると、aggmapオブジェクトの割当て仕様を削除または変更できる編集ウィンドウが開きます。OLAP Worksheetを使用して割当て仕様をコーディングする場合は、「新しく定義されたAggmapの編集による割当て仕様のコーディング」にある手順を参照してください。
関連項目:
「OLAP DML割当てオブジェクト」および「割当てオプション」
構文
ALLOCMAP [specification]
パラメータ
- specification
-
現行のaggmapオブジェクトの割当て仕様である複数行のテキスト式。割当て仕様は、ALLOCMAP文で始まり、
END
文で終わります。これらの2つの文の間に、指定する計算に応じて次の文のうち1つ以上をコーディングします。- CHILDLOCK
- DEADLOCK
- DIMENSION (割当て用)
- ERRORLOG
- ERRORMASK
- MEASUREDIM (割当て用)
- RELATION (割当て用)
- SOURCEVAL
- VALUESET
各文は、複数行のテキスト式で構成されています。コマンドライン・レベルでALLOCMAP文をコード化する際は、改行デリミタ(
\n
)で文を区切るか、JOINLINESを使用します。どの文を含めるかを決定する方法については、「割当て仕様の設計」を参照してください。
使用上の注意
割当て仕様の設計
最小限として、割当て仕様はRELATION文またはVALUESET文から構成されます。ただし、次のように他のOLAP DML文を仕様に含めることで、より複雑な割当て仕様を作成、またはエラー処理のデフォルト設定を変更できます。
-
階層割当ての場合、階層の親子関係を識別するためのセルフ・リレーションを指定するRELATION文。いくつかの処理を実行する順で文をリストするか、または実行順序が重要でなければ、変数定義にあるディメンションと同じ順序でRELATION文をリストします。
-
非階層割当ての場合、割当ての際に使用される値を指定するVALUESET文。
-
ディメンション階層の親と子の両要素に対するロックをaggmapのRELATION文で指定しているか否かを検出するかどうかをALLOCATEコマンドに指定するCHILDLOCK文。
-
ターゲット・セルがロックされているか、または一部の処理のために
NA
の基礎値がそのセルに含まれることが原因で、割当てで値を配布できないときに発生するデッドロックを検出した場合、割当てを継続するかどうかをALLOCATEコマンドに指定するDEADLOCK文。 -
ディメンションがターゲット変数およびソース・オブジェクトまたは基礎オブジェクトによって共有されない場合、そのディメンションのステータスとして設定する単一の値を指定するDIMENSION(割当て用)文。
-
ALLOCATEコマンドによって指定されるエラー・ログに記録可能なエラーの数、およびその最大数までエラーが発生した場合に割当てを継続するかどうかを指定するERRORLOG文。
-
エラー・ログに記録しないエラー条件を指定するERRORMASK文。
-
ソース・データを変数から取得している場合、割当て後にALLOCATEがソース・データ値を変更するかどうかを指定するSOURCEVAL文。
aggmapの型
aggmapの型を確認するには、AGGMAPINFOファンクションを使用します。ALLOCMAP文を使用して割当て仕様を入力したaggmapの型はALLOCMAPになり、AGGMAP文を使用して集計仕様を入力したaggmapの型はAGGMAPになります。aggmapを定義したが仕様を入力していない場合の型はNA
になります。
各ディメンションに対するRELATION
特定のディメンションに対してaggmapに指定できるRELATION文は1つのみです。
各ディメンションに対する階層
割当て演算では、ディメンションの1階層のみを上位から下位へ順に処理します。ディメンションに複数の階層がある場合、rel-name引数の後に修飾データ参照を使用してディメンションを1つの階層に制限する必要があります。
例
例9-37 入力ファイルからの割当て仕様
この例では、aggmapとその仕様はsalesalloc.txt
という名前のASCIIディスク・ファイルに保存されています。このファイルの文はINFILE文を使用することによってアナリティック・ワークスペースで実行されます。salesalloc.txt
の文は次のとおりです。
IF NOT EXISTS ('salesalloc') THEN DEFINE salesalloc AGGMAP ELSE CONSIDER salesalloc ALLOCMAP RELATION time.parent OPERATOR EVEN RELATION product.parent OPERATOR EVEN RELATION geography.parent OPERATOR EVEN SOURCEVAL ZERO DEADLOCK SKIP END
salesalloc
というaggmapをアナリティック・ワークスペースに含めるには、次の文を実行します。
INFILE 'salesalloc.txt'
これで、sales.agg
aggmapが定義され、3つのRELATION文、SOURCEVAL文およびDEADLOCK文が含まれるようになりました。この例では、リレーションtime.parent
、product.parent
およびgeography.parent
がそれぞれの子のディメンション値をディメンション階層の親に関連付けるので、ALLOCATE文によってソース値がターゲット変数のすべての集計レベルのセルおよび詳細レベルのセルに均等に割り当てられます。DEADLOCK文は、ターゲット階層のブランチがロックされているか、NA
値を持つ場合にエラーをロギングし、割当てを継続するようにALLOCATE文に指定します。SOURCEVAL文は、ソース・データの割当て後、ソース・セルにゼロ値を割り当てるようにALLOCATEに指定します。
これにより、次のようなALLOCATE文でsalesalloc
というaggmapを使用できます。
ALLOCATE sales USING salesalloc
例9-38 テキスト式からの割当て仕様
この例では、salesalloc
というaggmapがすでに定義されています。この仕様は、ALLOCMAP文に対するテキスト式の引数としてaggmapに追加されます。
CONSIDER salesalloc ALLOCMAP RELATION time.parent OPERATOR EVEN RELATION product.parent OPERATOR EVEN RELATION geography.parent OPERATOR EVEN SOURCEVAL ZERO DEADLOCK SKIP
例9-39 割当て仕様における単一ディメンション値の指定
この例では、sales
変数から計算される値をprojectedsales
変数のセルに比例割当てします。sales
変数は、time
、product
、customer
およびchannel
ディメンションでディメンション化されます。
次に、この例では、projectedsales
変数を割当てのターゲットとして使用し、increasefactor
計算式をソースとして使用するように定義します。この計算式はsales
の値を10%増加します。さらに、この例では、time
ディメンションを制限し、2001年を2002年の各四半期に関連付けるytoq.rel
リレーションを作成します。次のLIMITコマンドは、sales
およびprojectedsales
によって共有されるディメンションを制限します。
さらに、この例では、aggmapを作成し、ALLOCMAP文を使用してRELATION文およびDIMENSION文を作成したaggmapに入力します。RELATION文は、割当てに使用するディメンション階層としてytoq.rel
リレーションを指定し、割当てが比例であることを指定します。DIMENSION文は、割当てが行われる間、channel
ディメンションのステータスをtotalchannel
に設定するようにALLOCATEに指定します。
DEFINE projectedSales DECIMAL VARIABLE <time, SPARSE <product, customer>> DEFINE increaseFactor DECIMAL FORMULA <product> EQ sales * 1.1 LIMIT time TO '2001' 'Q1.02' TO 'Q4.02' DEFINE YtoQ.rel RELATION time <time> LIMIT time TO 'Q1.02' to 'Q4.02' YtoQ.rel = '2001' LIMIT time TO '2001' 'Q1.02' to 'Q4.02' LIMIT product TO 'TotalProduct' 'Videodiv' 'Audiodiv' 'Accdiv' LIMIT customers TO 'TotalCustomer' DEFINE time.alloc AGGMAP ALLOCMAP RELATION YtoQ.rel OPERATOR PROPORTIONAL DIMENSION channel 'TotalChannel' END ALLOCATE increaseFactor BASIS sales TARGET projectedSales USING time.alloc
割当ての基礎であるsales
値は次のとおりです。
CHANNEL: TOTALCHANNEL CUSTOMERS: TOTALCUSTOMER ---------------PROJECTEDSALES--------------- --------------------TIME-------------------- PRODUCT 2001 Q1.02 Q2.02 Q3.02 Q4.02 ------------ ------ ------ ------ ------ ------ TotalProduct 7000 1000 2000 3000 1000 Videodiv 4100 600 1100 1900 500 Audiodiv 1700 200 600 600 300 Accdiv 1200 200 300 500 200
割当て後のtotalchannel
のprojectedsales
のレポートは次のとおりです。
CHANNEL: TOTALCHANNEL CUSTOMERS: TOTALCUSTOMER ---------------PROJECTEDSALES--------------- --------------------TIME-------------------- PRODUCT 2001 Q1.02 Q2.02 Q3.02 Q4.02 ------------ ------ ------ ------ ------ ------ TotalProduct NA NA NA NA NA Videodiv NA 660 1210 2090 550 Audiodiv NA 220 660 660 330 Accdiv NA 220 330 550 220
例9-40 割当て仕様におけるRELATION文の入力
この例では、time.type
ディメンションを定義し、time
ディメンションの2つの階層を追加します。これにより、階層の型(time.type
)をtime
ディメンションに関連付けるtime.time
リレーションを定義します。この例ではtime.alloc
というaggmapを定義します。ALLOCMAPコマンドを使用すると、RELATION文をaggmapに入力します。RELATION文は、割当てで使用するtime
ディメンション階層の値を指定し、QDRでtime
ディメンションを1つの階層に制限し、割当てにEVEN演算を指定します。次にALLOCATEコマンドは、time.alloc
というaggmapを使用して、データをソース・オブジェクトからターゲット変数に割り当てます。ALLOCATEコマンドのソース・オブジェクト、基礎オブジェクトおよびターゲット・オブジェクトは、同じsales
変数です。
DEFINE time.type TEXT DIMENSION MAINTAIN time.type add 'Fiscal' MAINTAIN time.type add 'Calendar' DEFINE time.time RELATION time <time, time.type> DEFINE time.alloc AGGMAP ALLOCMAP RELATION time.time (time.type 'Fiscal') OPERATOR EVEN END ALLOCATE sales USING time.alloc
CHILDLOCK
割当て仕様では、CHILDLOCK文は、ディメンション階層の親とその子の両方に対するロックを割当て仕様のRELATION文で指定しているかどうかを検出するようにALLOCATE文に指定します。親とそのいずれかの子の両方をロックしていると、割当ての結果が不適切になる場合があります。
構文
CHILDLOCK [DETECT|NODETECT]
パラメータ
例
割当て仕様におけるCHILDLOCK文の使用例は、例9-79を参照してください。
DEADLOCK
DIMENSION (割当て用)
割当て仕様では、DIMENSION文は、ステータスをディメンションの単一の値に設定します。割当て仕様におけるこのディメンションは、ソース・オブジェクト、基礎オブジェクトおよびターゲット・オブジェクトが共有しないディメンションです。割当て仕様でDIMENSION文によってこのような単一の値が指定されていない場合、Oracle OLAPは割当てを実行する際にディメンションの現行のステータス値を使用します。
DIMENSION文を使用すると、ディメンションのステータスを割当てで使用したい値に設定できます。ソース・オブジェクト、基礎オブジェクトおよびターゲット・オブジェクトによって共有されない各ディメンションには、個別のDIMENSION文を使用する必要があります。
構文
DIMENSION dimension 'dimval'
例
割当て仕様におけるDIMENSION文の使用例は、例9-39を参照してください。
ERRORLOG
割当て仕様では、ERRORLOG文は、ロギングする割当てエラー条件の数、およびロギングしたエラーの数が指定した最大数に達した場合に割当てを継続するか中止するかを指定します。エラー・ログはALLOCATEコマンドにERRORLOGキーワードで指定します。
構文
ERRORLOG [UNLIMITED|MAX <num>] [STOP|NOSTOP]
パラメータ
- UNLIMITED
-
エラーを制限数なくエラー・ログに書き込むようにALLOCATEコマンドに指定します。(デフォルト)。
- MAX num
-
ALLOCATEによってエラー・ログに書き込まれるエラーの最大数を指定します。
- STOP
- NOSTOP
-
ALLOCATEがエラー・ログにエラーを最大数まで書き込んだ場合、割当てを中止するかどうかを指定します。STOPを指定すると、割当ては中止されます。NOSTOPを指定すると割当ては継続されますが、ALLOCATEはそれ以降のエラーをエラー・ログに書き込みません。UNLIMITEDを指定している場合、STOP引数およびNOSTOP引数は無効になり、エラーの発生数にかかわらず割当てが継続されます。
使用上の注意
エラー・ログの書式設定
ALLOCERRLOGFORMATオプションは、ALLOCATEコマンドにERRORLOG引数で指定するエラー・ログの内容および書式を設定するオプションです。エラー・ログのヘッダーはALLOCERRLOGHEADERオプションで指定します。
ERRORMASK
MEASUREDIM (割当て用)
割当て仕様では、MEASUREDIM文は、演算子変数または引数変数の定義で指定されるメジャー・ディメンションの名前を識別します。ただし、メジャー・ディメンションは、aggmapオブジェクトの定義に含まれている場合、指定できません。
構文
MEASUREDIM name
パラメータ
- name
-
メジャー・ディメンションの名前。メジャー・ディメンションは、ユーザーが定義するディメンションです。ディメンション値は、既存の変数の名前です。
関連項目:
AGGMAPコマンドのMEASUREDIM(集計用)文
RELATION (割当て用)
割当て仕様では、RELATION文は、ディメンション階層のパスおよび割当ての方法を指定するリレーションを識別します。ソース・データをディメンション階層の上位から下位へ順に割り当てるには、階層の値をRELATION文で指定し、割当てのターゲットである変数のセルを識別する必要があります。割当てのターゲットが多次元変数の場合、ソース・データを上位から下位へ順に割り当てるには、各ディメンションに個別のRELATION文を含める必要があります。aggmapのRELATION文の順序で割当ての順序が決定します。最初のRELATION文のディメンション階層で上位から下位へ順に割当てが行われ、続いてその後の文が処理されていきます。
注意:
AGGMAPコマンドの一部としてのみ使用可能なこのRELATION文は、ディメンションのデフォルト・リレーションを定義するRELATIONコマンドや、AGGMAPコマンドの一部として使用されるRELATION文とは混同しないでください。
構文
RELATION rel-name [(qdr. . .)] OPERATOR {operator|} -
[NAOPERATOR operator] [REMOPERATOR operator] - [PARENTALIAS dimension-alias-name] - [ARGS {[FLOOR floorval] [CEILING ceilval] [MIN minval] [MAX maxval] - [NAHANDLE {IGNORE|CONSIDER|PREFER}] - [ADD|ASSIGN] [PROTECT [NONORMALIZE] [READWRITE|WRITE] lockvalueset] - [WEIGHTBY [ADD|MULTIPLY] [WNAFILL nafillval] weightobj]}]
パラメータ
- rel-name
-
割当てのパスを識別するディメンション階層の値を指定するOracle OLAPのセルフ・リレーション。rel-nameの値によって識別されるターゲット変数のセルが割り当てられたデータを受け取ります。
- qdr. . .
-
セルフ・リレーションの一部ではないリレーションの各ディメンションに単一のディメンション値を指定する1つ以上の修飾データ参照。セルフ・リレーションに複数の階層がある場合、セルフ・リレーションのディメンションの階層ディメンションにqdrを指定し、割当てに含まれない階層を単一の値に制限する必要があります。
- OPERATOR operator
-
次の表に示されている割当て方法、またはALLOCOPSにより返される割当て方法を指定します。この方法によって、ALLOCATEが値を割り当てるrel-nameリレーションのターゲット変数のセルが決定されます。演算子がFIRST、LAST、HFIRSTおよびHLASTの場合、ALLOCATEはディメンションの値の順序を使用してセルを決定します。ディメンションの順序は、割当てディメンションのデフォルトの論理順です。割当てには、デフォルトの演算子はありません。
表9-3 割当て演算子
演算子 説明 COPY
基礎データ値が
NA
以外のターゲット・セルすべてに割当てソースをコピーする。HCOPY
階層によって指定されるターゲット・セルのデータが
NA
の場合でも、そのすべてのセルに割当てソースをコピーする。ソース・データがNA
の場合、そのNA
値は割当てのターゲット・セルには割り当てられない。MIN
最小の基礎データ値を持つターゲットに割当てソースをコピーする。
MAX
最大の基礎データ値を持つターゲットに割当てソースをコピーする。
FIRST
非
NA
の基礎データ値を持つ最初のターゲット・セルに割当てソースをコピーする。HFIRST
階層によって指定される最初のターゲット・セルの現行のデータ値が
NA
の場合でも、そのセルに割当てソースをコピーする。LAST
非
NA
の基礎データ値を持つ最後のターゲット・セルに割当てソースをコピーする。HLAST
階層によって指定される最後のターゲット・セルの現行のデータ値が
NA
の場合でも、そのセルに割当てソースをコピーする。EVEN
非
NA
の基礎データ値を持つターゲット・セルの数で割当てソースを除算し、その商を各ターゲット・セルに適用する。HEVEN
NA
値のターゲット・セルを含めたターゲット・セルの数で割当てソースを除算し、その商を各ターゲット・セルに適用する。PROPORTIONAL
基礎データ値が非
NA
のターゲット・セルのデータ値を合計してその数で割当てソースを除算し、各ターゲット・セルの基礎データ値とその商をそれぞれ乗算し、その結果データをそのターゲット・セルに適用する。 - NAOPERATOR operator
-
NAOPERATORキーワードの後のoperator には、ALLOCATEの処理で
NA
またはロックベースのデッドロックを検出したときに使用する演算子を指定します。有効な演算子は、HFIRST、HLASTおよびHEVENです。 - REMOPERATOR operator
-
REMOPERATORキーワードの後のoperator には、割当てによって生じた残りを格納する際にALLOCATEの処理が使用する演算子を指定します。たとえば、
INTEGER
値である10を階層の同レベルの3つのセルに割り当てると残りは1になります。REMOPERATORは、この残りを割当て演算によって格納する場所を指定します。REMOPERATORの有効な演算子は、MIN、MAX、FIRST、HFIRST、LASTおよびHLASTです。 - ARGS
-
追加引数で割当て演算の追加パラメータを指定することを示します。これらの引数はすべて、rel-nameによって指定されるディメンション階層に一様に適用されます。
- PARENTALIAS dimension-alias-name
-
親に応じて特殊な割当て(親または子による加重など)を指定します。dimension-alias-nameには、rel-nameのディメンションの別名を指定します。
- ARGS argument...
-
割当て演算に追加パラメータを指定するARGSキーワードの後の1つ以上の引数。これらの引数はすべて、rel-nameによって指定されるディメンション階層に一様に適用されます。
- FLOOR floorval
-
割り当てられるターゲット・データ値がfloorvalに指定される値より小さい場合、そのターゲット・セルに割り当てるデータを
NA
にするように指定します。PROPORTIONAL演算子が指定されている場合にのみ、この引数はリレーションに適用されます。 - CEILING ceilval
-
割り当てられるターゲット・データ値がceilvalに指定される値より大きい場合、そのターゲット・セルに割り当てられるデータを
NA
にするように指定します。PROPORTIONAL演算子が指定されている場合にのみ、この引数はリレーションに適用されます。 - MIN minval
-
割り当てられるターゲット・データ値がminvalに指定される値より小さい場合、そのターゲット・セルに割り当てられるデータをminvalにするように指定します。
- MAX maxval
-
割り当てられるターゲット・データ値がmaxvalに指定される値より大きい場合、そのターゲット・セルに割り当てられる値をmaxvalにするように指定します。
- NAHANDLE
-
ALLOCATEでの
NA
値の処理方法を指定します。OPERATORがMINまたはMAXである場合にのみ有効です。-
IGNOREは、MIN演算またはMAX演算においてALLOCATEが
NA
値を無視するように指定します。(デフォルト) -
CONSIDERは、ALLOCATEが
NA
値をゼロとして処理するように指定します。ただし、ターゲット・セルのデータ値が実際にゼロである場合、そのゼロのセルは割り当てられるデータ値を受け取り、NA
のセルはデータ値を受け取りません。 -
PREFERは、ALLOCATEが
NA
値をゼロとして処理するように指定します。この場合、NA
がゼロ値より優先されるので、割り当てられるデータ値をNA
のセルが受け取り、実際にゼロ値のセルはデータ値を受け取りません。
-
- ADD
-
割り当てられるデータをターゲット・セルにある現行のデータに追加するようにALLOCATEに指定します。
- ASSIGN
-
割り当てられるデータでターゲット・セルのデータを置き換えるようにALLOCATEに指定します(デフォルトの動作)。
- PROTECT lockvalueset
-
割当てのターゲットにならないようにロックするディメンション値のセットを指定します。ソース・データを割り当てる前に、ソース・データから指定のロックされたセルのデータ値を差し引くことによって、割当て演算はソースを正規化します。
- NONORMALIZE
-
割当て演算がソース・データを正規化しないことを指定します。NONORMALIZEを使用すると、lockvaluesetによって指定されるディメンション値より下位にある階層の値を割当てから効果的に削除できます。
- READWRITE
-
ロックされたデータ値は後に続く割当てでソース・データとして使用できないので、lockvalueset値より下位にある階層のデータをロックすることを指定します。
- WRITE
-
割当てにおいて、lockvaluesetディメンション値によって識別されるセルにデータ値を格納できないが、そのセルのデータを後に続くステップでソース・データとして使用できることを指定します。ただし、
NA
またはZERO
を指定するSOURCEVAL文がaggmapにあり、ロックされたセルが割当てのソースの場合、割当て後にALLOCATEはロックされたセルの値をNA
またはゼロに設定します。 - WEIGHTBY
-
weightobjで指定された値を割当てに使用するよう指定します。この句を使用すると、単位または通貨の変換などの処理ができます。
- ADD
-
ALLOCATEに対して、weightobjで指定された値をターゲットの既存のデータ値に加算し、その合計をターゲット・セルに割り当てるよう指定します。
- MULTIPLY
-
(デフォルト)ALLOCATEに対して、weightobjで指定された値をターゲットのデータ値に乗算し、その値を割り当てるよう指定します。
- WNAFILL
-
ALLOCATEに対して、weightobjで指定された値をnafillval値に適用する前にセルの
NA
値を置き換えるよう指定します。 - nafillval
-
ALLOCATEにおいて、
NA
値と置き換えられる値です。WEIGHTBY句にADDオプションを指定した場合、デフォルトのNA
の埋込み値は0
ですが、それ以外の場合はデフォルトのNA
の埋込み値は1
になります。 - weightobj
-
Oracle OLAPが、ターゲット・セルに格納する直前に割り当てられたデータに適用する加重値としての変数、計算式またはリレーションの名前です。リレーションを使用した場合、加重リレーションに基づいてターゲット変数が参照され、そのセルが割当てターゲット・セルに適用されます。
使用上の注意
割当てのパスの指定
割当てのパスは、割当てシステムが使用するソース・データからターゲット・データまでのルートです。割当てパスが異なると、その結果は大幅に異なります。このパスは、aggmapに入力するRELATION文で指定します。RELATION文のリレーション・オブジェクトおよびそのRELATION文の順序によって、割当てのパスおよび方法が指定されます。
割当てパスは、ディメンション階層の任意のレベルから階層の任意の下位レベルまでのルートです。階層のメンバーを相互に関連付けるリレーション・オブジェクト(セルフ・リレーション)を使用して、割当てに関係する階層の要素を識別できます。割当ては、aggmapの最初のRELATION文でディメンション階層を上位から下位へ順に処理し、続いて2番目のRELATION文で階層を上位から下位へ順に処理していきます(以降同様)。
ディメンションに複数の階層がある場合、割当てに使用する階層を指定するためにqdr引数をRELATION文で使用する必要があります。リレーションで指定する階層には循環リレーションを含めないでください(たとえば、ディメンション値A
がディメンション値B
に関連し、ディメンション値Bがディメンション値C
に関連し、ディメンション値Cがディメンション値A
に関連するリレーションなど)。
割当てパスのタイプ
ソースからターゲットへ値を割り当てる際に使用できるパスの種類を次に示します。
-
直接割当てパス: 階層の中間ノードに対する割当てを行わずに、ソース・セルから最終のターゲット・セルに値を直接割り当てます。たとえば、階層
time
ディメンションのQuarter
レベルのディメンション値によって指定されるソース・データ値をMonth
レベルの値に、またはYear
レベルのディメンション値によって指定されるソース・データ値をMonth
レベルの値に割り当てます。 -
再帰的下降階層パス: 値を階層の中間ノードに割り当ててから最終のターゲット・セルに割り当てます。たとえば、
product
ディメンションのCategory
レベルのディメンション値によって指定されるソース・データ値を、Subcategory
レベルの値に割り当ててからProductID
レベルの値に割り当てます。 -
多次元割当てパス: 最初に1つのディメンションに対して上位から下位へ順に割り当ててから、別のディメンションに対して上位から下位へ順に割り当てます。直接または再帰的、あるいはその両方の組合せの割当てが使用可能です。割当ての順序によって結果が異なる場合があります。
-
連立多次元割当てパス: 値の割当て先になる変数の非
NA
のセルを指定するコンポジット・ディメンションを作成することにより、複数のディメンションによって指定される複数の変数セルに対して値の直接割当てを同時に実行します。その後、そのコンポジットを割当ての基礎として使用します。
割当て用のRELATION文を設計する際の制限
RELATION文の設計時には、次の制限事項に注意してください。
-
Oracle OLAPでは、ALLOCATEコマンドの1回の実行でディメンションの1階層に対してのみ割当てが行われます。ディメンションに複数の階層がある場合、リレーションを1階層のみに制限するためにqdr引数を指定する必要があります。
-
割当て仕様にはRELATION文またはVALUESET文を指定する必要があります。
-
割当て仕様で各ディメンションに使用できるRELATION文またはVALUESET文は1つのみです。
割当てパスにおけるセルのロック
場合によっては、セルの既存の値を保持し割当ての影響を受けないようにする必要があります。ディメンション階層の値をロックすることによって、その値を割当てパスから削除できます。階層の詳細レベルより上位の値をロックすると、その値より下位の階層のブランチが割当てから削除されます。値をロックするには、RELATION文にPROTECT引数を使用します。
たとえば、毎月見直しする年間予算を割り当てる場合、time
ディメンション階層のYear
レベルにbudget
の値を設定します。データはMonth
レベルにある各要素に割り当てます。時間の経過とともに、実際の月間データを入力してその要素をロックし、残りの年間予算値を再割当てすることにより、年間目標を達成するのに必要な新しい月別ターゲットを確認します。
要素をロックする場合、ソース値を再正規化するかどうかを指定できます。デフォルトでは、階層の要素をロックすると、その要素によって指定されるターゲット変数のセルの値がソース値から差し引かれ、その残りがターゲット・セルに割り当てられます。割当ての際にソースが再正規化されないようにするには、PROTECT引数の後にNONORMALIZEを指定します。
SOURCEVAL
VALUESET
割当て仕様では、VALUESET文は割当てのターゲット・ディメンション値を指定します。ディメンション化された値セットは、メジャー・ディメンションまたは明細項目ディメンションなど非階層ディメンションに割当てターゲットを指定するために使用できます。
注意:
次の制限に注意してください。
-
割当て仕様には、RELATION文またはVALUESET文を少なくとも1つ指定する必要があります。
-
割当て仕様で指定される各ディメンションに指定できるRELATION文またはVALUESET文は1つのみです。
構文
VALUSET vs-name[(nondimvalueset)| qdr... ] OPERATOR operator | opvar – [NAOPERATOR text -exp] [REMOPERATOR text -exp] - [ARGS [FLOOR floorval] [CEILING ceilval] – [MIN minval] [MAX maxval] – [ADDT [ {TRUE|FALSE} | ASSIGN] – [{PROTECTRW| PROTECTW} [NONORMALIZE] lockvalueset] – [WEIGHTBY [ADD] weightobj [WNAFILL nafillval]] | - [WEIGHTBY WEIGHTVAR wobjr]]
パラメータ
- vs-name
-
割当てのパスとしてディメンションの値を指定する値セット・オブジェクトの名前を指定します。vs-nameの値によって識別されるターゲット変数のセルが割り当てられたデータを受け取ります。
- nondimvalueset
-
vs-nameがディメンション化された値セットの場合、その値セット・ディメンションのループ処理に使用されるステータスとしてディメンション化されていない値セットを指定します。nondimvaluesetまたはqdrを含めない場合、Oracle OLAPは現行のステータス値を使用するかわりに、ディメンションのデフォルトの論理順序を使用します。
- qdr
-
vs-nameがディメンション化されていない値セットの場合、データの割当ての際に使用するディメンション値を指定する1つ以上の修飾データ参照。
- OPERATOR operator
-
OPERATORキーワードの後のoperator引数はテキスト式であり、「RELATION(割当て用)」で示されている演算子タイプが使用されます。演算子タイプは割当ての方法を指定します。この方法によって、ALLOCATEが値を割り当てるvs-nameリレーションのターゲット変数のセルが決定されます。FIRST演算子、LAST演算子、HFIRST演算子およびHLAST演算子に対してdimorder valuesetを使用して異なるステータスを指定していないかぎり、ALLOCATEは割当てディメンションのデフォルトの論理順序を使用してセルを決定します。割当てには、デフォルトの演算子はありません。
- OPERATOR opvar
-
OPERATORキーワードの後のopvar引数には、ディメンションの各値に対して異なる演算を指定する
TEXT
変数を指定します。変数の値は、「RELATION(割当て用)」に示されている割当て演算子です。演算子変数は、割当て演算子をあるディメンションの値で変更するために使用します。opvar引数は、次のタイプのディメンションで使用します。-
メジャー・ディメンション -- 割り当てられる変数に応じて割当て方法を変更します。メジャー・ディメンションの値は、割り当てられる変数の名前です。これにより、各メジャーの割当てに使用される演算を識別する値のテキスト変数がディメンション化されます。割当て仕様には、メジャー・ディメンションを識別するMEASUREDIM(割当て用)文が含まれている必要があります。
-
明細項目ディメンション -- 割り当てられる明細項目に応じて割当て方法を変更します。通常、明細項目ディメンションは非階層で、財務割当てを識別します。データ変数のディメンション化、および各項目の割当てに使用する演算を識別するテキスト変数のディメンション化の両方に、明細項目ディメンションを使用します。演算変数は通常、長期間にわたる明細項目の割当てに使用します。
opvar引数は、この引数を使用して割り当てられるディメンションによってディメンション化できません。たとえば、
geography
ディメンションに別の演算を指定する場合、opvarはgeography
によってディメンション化できません。ヒント:
演算子変数をページングする量を最小限にするには、opvar変数を固定幅
8
のTEXT
型で定義します。 -
- NAOPERATOR text-exp
-
NAOPERATORキーワードの後のoperator には、ALLOCATEの処理で
NA
またはロックベースのデッドロックを検出したときに使用する演算子を指定します。有効な演算子は、「RELATION(割当て用)」に示されているHFIRST、HLASTおよびHEVENです。 - REMOPERATOR text-exp
-
REMOPERATORキーワードの後のoperator には、割当てによって生じた残りを格納する際にALLOCATEの処理が使用する演算子を指定します。たとえば、
INTEGER
値である10を階層の同レベルの3つのセルに割り当てると残りは1になります。REMOPERATORは、この残りを割当て演算によって格納する場所を指定します。REMOPERATORの有効な演算子は、「RELATION(割当て用)」に示されているMIN、MAX、FIRST、HFIRST、LASTおよびHLASTです。 - ARGS
-
追加引数で割当て演算の追加パラメータを指定することを示します。これらの引数はすべて、値セットに一様に適用されます。
- FLOOR floorval
-
割り当てられるターゲット値がfloorvalに指定される値より小さい場合、Oracle OLAPがその値をNAとして格納することを指定します。
- CEILING ceilval
-
割り当てられるターゲット値がceilvalに指定される値より大きい場合、Oracle OLAPがその値をNAとして格納することを指定します。
- MIN minval
-
割り当てられるターゲット値がminvalに指定される値より小さい場合、Oracle OLAPがminvalの値をターゲットに格納することを指定します。
- MAX maxval
-
割り当てられるターゲット値がmaxvalに指定される値より大きい場合、Oracle OLAPがmaxvalの値をターゲットに格納することを指定します。
- ADDT {TRUE|FALSE}
-
ADDT句は、Oracle OLAPがターゲット・セルをターゲット・セルの既存の内容に追加する際に加算の符号を指定します。
-
TRUE
は、割当ての結果がターゲットに加算されることを指定します。(デフォルト) -
FALSE
は、割当ての結果がターゲット・セルから減算されることを指定します。
-
- PROTECTRW lockvalueset
-
lockvaluesetによって指定されるディメンション・メンバーが割当てのターゲットおよびソース値になることができないことを指定します。この句を使用すると、階層のサブツリーに割当てロックを指定できます。ターゲット・セルの現行の内容がソースから減算され、ソースおよび基礎が再正規化されます。
- PROTECTW lockvalueset
-
lockvaluesetによって指定されるディメンション・メンバーが割当てのターゲットになることができないことを指定します。ただし、そのターゲット・セルは、割当て処理の後に続くステップでソース値として使用されます。SOURCEVAL文を
0
(ゼロ)またはNA
に設定してその値を再割当てすると、値が適切に設定されます。 - NONORMALIZE
-
保護されたセルに基づいてOracle OLAPがソースおよび基礎を再正規化しないことを指定します。このキーワードを指定すると、サブブランチを階層から削除するのと同様の効果があります。通常、このキーワードを使用して、割当て後にデータが割当てレベルから集計されると、ソース・セルには割り当てられた元の合計が含まれません。
- WEIGHTBY weightobj
-
格納する直前にターゲット・セルに適用される加重値を指定します。この句を使用すると、単位または通貨の変換などの処理ができます。値の加重オブジェクトは変数、計算式またはリレーションです。リレーションを使用した場合、加重リレーションに基づいてターゲット変数が参照され、そのセルが割当てターゲット・セルに適用されます。
- ADD
-
Oracle OLAPが加重値を割当てターゲットに乗算ではなく加算することを指定します。
- WNAFILL nafillval
-
使用する加重変数のデフォルト値を指定します。ADD句を含めない場合、nafillvalのデフォルト値は
1
です。ADD句を含める場合、nafillvalのデフォルト値は0
(ゼロ)です。 - WEIGHTBY WEIGHTVAR wobj
-
割り当てられるデータに加重することを指定します。wobj 引数は、Oracle OLAPが、ターゲット・セルに格納する直前に割り当てられたデータに適用する加重値としての変数、リレーションまたは計算式の名前です。この句を使用すると、単位または通貨の変換などの処理ができ、OPERATOR opvar句に対して作成した演算子変数で指定される異なる演算子によって異なる加重オブジェクトを使用できます。
ALLSTAT
ALLSTATプログラムは、現行のアナリティック・ワークスペースにあるすべてのディメンションのステータスにそれぞれの値を設定するためのプログラムです。ただし、ALLSTATではNAMEディメンションのステータスは設定されません。
構文
ALLSTAT
使用上の注意
1つのディメンションを制限
LIMITコマンドを使用すると、単一のディメンションのステータスをそのディメンションのすべての値に設定できます。
ALLSTATとLOCK_LANGUAGE_DIMSオプション
LOCK_LANGUAGE_DIMSがTRUE
の場合、ALLSTATは言語ディメンションを無視します。LOCK_LANGUAGE_DIMSがFALSE
の場合、ALLSTATは言語ディメンションを他のディメンションと同じように扱います。
関連項目:
$DEFAULT_LANGUAGEプロパティおよびLOCK_LANGUAGE_DIMSオプション
例
例9-43 すべての値に制限
次のSTATUS文によって、変数UNITSのディメンションに対する現行のステータスが生成されます。
status units
The current status of MONTH is: Jul96 TO Dec96 The current status of PRODUCT is: Tents TO Racquets The current status of DISTRICT is: DALLAS
ALLSTAT文を実行した後で同じSTATUS文を実行すると、出力は次のようになります。
The current status of MONTH is: ALL The current status of PRODUCT is: ALL The current status of DISTRICT is: ALL
ARGUMENT
ARGUMENT文は、OLAP DMLプログラム内で、プログラムに必要な引数を宣言します。プログラムの内部では、引数は変数や値セットと同様の構造体で格納されます。引数は、プログラムの起動時に渡された値で初期化されます。引数は、プログラムが実行されているときにのみ存在します。
ARGUMENT文はプログラム内でのみ使用され、プログラム内の実行可能な最初の行の前に指定する必要があります。ARGUMENT文のARGという省略形とARGファンクションとの区別に注意してください。
構文
ARGUMENT name {datatype|dimension|VALUESET dim}
パラメータ
- name
-
プログラム内で引数を参照するときに使用する名前。引数の名前をローカル変数やローカル値セットと同じ名前にすることはできません。引数の名前は、アナリティック・ワークスペース・オブジェクトの名前の指定に関するルールに従って指定します(DEFINEコマンドを参照)。
- datatype
-
格納されるデータの種類を示す引数のデータ型。DEFINE VARIABLEの項にリストおよび説明されている任意のデータ型を指定できます。また、プログラムが引数を特定のデータ型に変換することなく受け取ることができるようにする場合、そのデータ型の
WORKSHEET
を指定することもできます。注意:
引数の型をNTEXTで宣言し、TEXT値をプログラムに渡すと、Oracle OLAPはTEXT値をNTEXTに変換します。同様に、引数の型をTEXTで宣言し、NTEXT値をプログラムに渡すと、Oracle OLAPはNTEXT値をTEXTに変換します。NTEXTをTEXTに変換すると、データが失われる可能性があります。
- dimension
-
引数に指定する値のディメンションの名前。この引数にはディメンションの単一の値が保持されます。現在ディメンションに存在しない値を代入すると、エラーが発生します。
- VALUESET dim
-
nameが値セットであることを示します。キーワードdimは、値セットにある値のディメンションを指定するキーワードです。引数の値セットは、アナリティック・ワークスペースの値セットと同様にプログラムの内部で使用できます。
使用上の注意
引数の有効期間
引数は、その引数が宣言されているプログラムが実行されているときにのみ存在します。プログラムが終了すると引数は消滅し、引数の値は失われます。したがって、引数はアナリティック・ワークスペース・オブジェクトではありません。
プログラムは、RETURN文またはSIGNAL文、あるいはプログラムの最後の行が実行されたときに終了します。プログラムがサブプログラムをコールすると、元のプログラムは一時的に停止しますが、サブプログラムが終了すると、制御は元のプログラムに戻るので、引数は存続します。自分自身を再帰的にコールするプログラムは、プログラムのコピーの実行ごとに別個の引数を保持します。
プログラムに渡される引数の宣言
プログラムに渡される引数を宣言するときは、特に注意が必要です。
値で渡される引数
引数は値でプログラムに渡されます。したがって、コールされるプログラムには引数の値のみが渡され、このプログラムに関連するアナリティック・ワークスペース・オブジェクトへのアクセスは行われません。したがって、引数の値はコールされるプログラム内で変更でき、プログラムの外部の値には影響しません。引数変数や値セットは、使用しやすく初期化されたローカル変数またはローカル値セットとみなすことができます。
ファンクションに対する引数の処理
プログラムをCALL文を使用して起動するか、またはファンクションとして起動する場合は、次の2段階の処理が発生します。
-
指定したデータ型を確定する。コール側プログラムで指定した引数の式は、左から右に評価され、そのデータ型が識別されます。ディメンション値を表す式には、テキスト(
TEXT
またはID
)、数値(INTEGER
、DECIMAL
など)またはRELATION値が使用可能です。引数の式の1つにエラーがあると、処理は停止します。 -
指定した各データ型と宣言したデータ型を一致させる。引数の式は、宣言された引数と、位置によって一致されます。最初の引数の式は最初に宣言された引数と一致し、2番目の引数の式は2番目に宣言された引数と一致します(以降同様)。それぞれの式は、宣言された引数の宣言されたデータ型に順次変換されます。
引数をディメンション値として宣言すると、コール側プログラムから渡される対応する値は、TEXT
またはID
(指定したディメンションの値)、数値(論理的なディメンションの位置)、RELATION(物理的なディメンションの位置)のいずれかになります。RELATIONメソッドは、対応する値として使用されたディメンション名やリレーション名を評価した結果のディメンション値がOracle OLAPによって渡される方法です。対応する値が整数以外の数値(DECIMAL
など)の場合は、論理的なディメンション位置の値に最も近いINTEGER
値に丸められます。
引数をディメンション値以外の値として宣言し、コール側プログラムから渡された対応する値がRELATION値の場合、エラーが発生します。RELATION値を渡し、それをTEXT
引数として受け取る場合は、CONVERTを使用し、プログラムの引数リストの値を変換します。
引数をディメンションの値セットとして宣言した場合は、該当するディメンションの値セットの名前のみが引数として使用されます。
最初または2番目の段階でエラーが発生した場合、プログラムは実行されません。
コマンドに対する引数の処理
引数をカッコで囲まずに独立型のコマンドとしてプログラムを起動すると、各引数は宣言された引数と、位置によって一致されます。コールされるプログラムは、指定した引数を宣言した引数として参照するか、またはARG (n)、ARGSおよびARGFR (n)の各ファンクションを介して参照します。この場合、引数は値ではなくテキスト文字列として渡されます。
余分な引数
コール側プログラムで指定した引数の数が、コールされるプログラムで宣言されている引数の数より多い場合、コール側プログラムで指定した余分な引数は無視されます。コール側プログラムで指定した引数の数が、コールされるプログラムで宣言されている引数の数より少ない場合、コールされるプログラムで宣言されている余分な引数にはNA
値が代入されます。
アナリティック・ワークスペース・オブジェクトの名前と重複する引数名
通常、引数にアナリティック・ワークスペース・オブジェクトと同じ名前を指定すると、プログラムの内部では、アナリティック・ワークスペース・オブジェクトではなく、引数が参照されます。このルールの例外が発生するのは、参照される文に対して、アナリティック・ワークスペース・オブジェクトが引数として必要な場合のみです。
例
custom.rpt
プログラムでは、次の文を使用してこの式のレポートを生成できます。
ARGUMENT rptexp TEXT REPORT &rptexp
アンパサンド置換を使用して複数のディメンション値を渡す例は、例10-18を参照してください。
例9-44 ユーザー定義ファンクションへの引数の受渡し
GETファンクションにユーザーが入力した内容を確認する場合、複雑になる可能性があります。通常の方法では、次のようなコード行が必要です。
SHOW GET(INT VERIFY VALUE GT 0 AND VALUE LT 100 - IFNOT 'The value must be between 1 and 100')
ユーザー定義ファンクションを作成すると、GET式を単純化できます。たとえば、次のプログラムをファンクションとして使用すると、0
から100
の値を調べることができます。
DEFINE verit PROGRAM BOOLEAN PROGRAM ARGUMENT uservalue INT TRAP ON haderror NOPRINT IF uservalue GT 100 THEN SIGNAL toobig 'The value must be 100 or smaller.' ELSE IF uservalue LT 0 THEN SIGNAL toosmall 'The value must be 0 or greater.' RETURN TRUE haderror: RETURN FALSE END
次のGET式では、verit
ファンクションを使用しています。
SHOW GET(INT VERIFY VERIT(VALUE) IFNOT ERRORTEXT)
例9-45 複数の引数の受渡し
product.rpt
プログラムで、レポートのデータ列の列幅を指定する2番目の引数を指定するとします。product.rpt
プログラムでは、2番目のARGUMENT文を追加して、COLWIDTHオプションの値の設定で使用するINTEGER
引数を宣言します。
ARGUMENT natext TEXT ARGUMENT widthamt INTEGER NASPELL = natext COLWIDTH = widthamt
8文字の列を指定するには、次の文を使用してproduct.rpt
プログラムを実行します。
CALL product.rpt ('Missing' 8)
product.rpt
プログラムに3番目の引数として製品の名前が必要な場合は、製品の引数を処理するためにproduct.rpt
プログラムに3番目のARGUMENT文を追加し、この引数を使用してproduct
ディメンションのステータスを設定します。
ARGUMENT natext TEXT ARGUMENT widthamt INTEGER ARGUMENT rptprod PRODUCT NASPELL = natext COLWIDTH = widthamt LIMIT product TO rptprod
次の文を使用してproduct.rpt
プログラムを実行します。
CALL product.rpt ('Missing' 8 'TENTS')
この例では、アナリティック・ワークスペース内のすべてのディメンションの値が大文字で指定されていることを前提に、3番目の引数を大文字で指定しています。
例9-46 ARGUMENT文の使用
product.rpt
というプログラムを作成しているとします。product.rpt
プログラムはレポートを生成するプログラムなので、このレポート生成プログラムに、NA値としてレポートに表示するテキストを指定する引数を指定します。product.rpt
プログラムで、宣言された引数natext
をARGUMENT文で使用し、引数として指定した値にNASPELLオプションを設定します。
ARGUMENT natext TEXT NASPELL = natext
Missing
をNA値のテキストとして指定するには、次の文を実行します。
CALL product.rpt ('Missing')
この例では、一重引用符で囲まれたリテラル・テキストによって、テキスト引数の値が指定されます。ただし、次の例で示すように、その他のテキスト式も同様に機能します。
DEFINE natemp VARIABLE TEXT TEMP natemp = 'Missing' CALL product.rpt (natemp)
例9-47 式のテキストの受渡し
REPORT文が記述されたcustom.rpt
というプログラムがあり、このプログラムを使用して、式の値(sales ‐ expense
など)と個々の変数も表示するとします。
custom.rpt 'sales ‐ expense'
式は必ず一重引用符で囲んでください。この式には記号(マイナス記号)が含まれているため、式全体が1つの引数であることを示すために引用符が必要です。
例9-48 ワークスペース・オブジェクト名とキーワードの受渡し
引数として指定されている変数のレポートを生成し、別の引数で指定した順序でproduct
ディメンションをソートするsales.rpt
というプログラムを作成するとします。次の文を実行することによって、sales.rpt
プログラムを実行します。
sales.rpt units d
sales.rpt
プログラムでは、次の文を使用します。
ARGUMENT varname TEXT ARGUMENT sortkey TEXT SORT product &sortkey &varname REPORT &varname
引数の置換後、次の文をsales.rpt
プログラムで実行します。
SORT product D units REPORT units
AWコマンド
AWコマンドの構文は、実行するタスクによって異なります。
- AW ALIASLIST
- AW ATTACH
- AW CREATE
- AW DELETE
- AW DETACH
- AW FREEZE
- AW LIST
- AW PURGE CACHE
- AW ROLLBACK TO FREEZE
- AW SEGMENTSIZE
- AW THAW
- AW TRUNCATE
使用上の注意
AW文実行時におけるプログラム実行トリガー
アナリティック・ワークスペースにTRIGGER_AWというプログラムが存在する場合、そのワークスペースに対してAW文を実行すると、そのプログラムは自動的に実行されます。詳細は、「トリガー・プログラム」および「TRIGGER_AW」プログラムを参照してください。
AW ATTACH文が実行されると、Oracle OLAPは、他のプログラムについても同様に調べます。詳細は、「起動プログラム」を参照してください。
AW文に関連するオプション
「アナリティック・ワークスペースのオプション」に、アナリティック・ワークスペースを作成またはアタッチする前にリセットできるオプションを示します。
EXPRESSワークスペース
OLAPオプションを使用してデータベースをインストールした場合、EXPRESS
ワークスペースは必ず読取り専用モードでセッションにアタッチされます。このワークスペースは、Oracle OLAPによる内部使用を目的としているため、ワークスペース・リスト内の先頭または唯一のワークスペースである場合でも、自動的に現行のワークスペースになることはありません。EXPRESS
ワークスペースを明示的にアタッチすることによって現行のワークスペースにできますが、この方法はお薦めできません。EXPRESS
ワークスペースはデタッチできません。
AW ALIASLIST
AW ALIASLISTコマンドは、指定したアタッチ済ワークスペースに対して、1つ以上のワークスペースの別名を割り当てるか削除するコマンドですが、ワークスペースを指定しなかった場合は、現行のワークスペースが処理の対象になります。ALIASは1つ以上の別名を割り当てることを示し、UNALIASは1つ以上の別名を削除することを示します。アナリティック・ワークスペースをデタッチすると、デタッチしたワークスペースのすべての別名は自動的に削除されます。
構文
AW ALIASLIST [workspace] {ALIAS|UNALIAS} alias1, alias2, ...
パラメータ
- workspace
-
アナリティック・ワークスペースの名前。使用するキーワードに応じて、アナリティック・ワークスペースの名前または別名のいずれかを指定できます。
- ALIAS
-
指定したアタッチ済ワークスペースに対して、1つ以上のワークスペースの別名を割り当てますが、ワークスペースが指定されていない場合は、現行のワークスペースに対して別名を割り当てます。ALIASは1つ以上の別名を割り当てることを示し、UNALIASは1つ以上の別名を削除することを示します。
アナリティック・ワークスペースをデタッチすると、デタッチしたワークスペースのすべての別名は自動的に削除されます。そのため、アタッチされていないワークスペースをアタッチするたびに、別名を再度割り当てる必要があります。
- UNALIAS
-
指定したアタッチ済ワークスペースに割り当てられた1つ以上のワークスペースの別名を削除します。ワークスペースが指定されていない場合は、現行のワークスペースに割り当てられた別名を削除します。
- alias1
- alias2
-
アナリティック・ワークスペースの別名。別名には次の制約があります。
-
長さは1文字以上、26文字以下です。すべての文字は、データベースのキャラクタ・セットに含まれる文字、数字またはアンダースコアを使用する必要があります。
-
数字は先頭に使用できません。(予約語は、RESERVEDを使用して確認できます。)
-
例
例9-49 別名の割当て
次の文によって、scott
というユーザーが作成したdemo
ワークスペースの別名としてsdemo
が割り当てられます。現行のユーザーはscott
ではないため、ワークスペースをフルネームで指定します。
AW ALIASLIST scott.demo ALIAS sdemo
次の文では、scott
という名前のユーザーによって、同じワークスペースの別名としてmydemo
が割り当てられます。
AW ALIASLIST demo ALIAS mydemo
AW ATTACH
AW ATTACHコマンドは、セッションにアナリティック・ワークスペースをアタッチします。Oracle OLAPでは、指定したワークスペースが現行のワークスペースになります。以前にアタッチされたワークスペースはアタッチ済ワークスペースのリストの下方向に移動し、これによって新規の現行のワークスペースのための場所がリストの先頭に作成されます。要求したアナリティック・ワークスペースのキャッシュされたバージョンが存在する場合は、そのキャッシュされたバージョンが、アタッチ済ワークスペースのリストに戻されますが、もちろんこれは、要求したアナリティック・ワークスペースの現行バージョンがキャッシュされたバージョンよりも新しい場合に限られます。
複数のワークスペースをアタッチすると、アタッチしたすべてのワークスペースのコードおよびデータはセッション中に使用できます。現行のワークスペースはワークスペース・リストの先頭に置かれ、セッションで利用するためにOracle OLAPによって保持されます。
注意:
AW ATTACH文が実行されると、これによって複数のプログラムが起動する場合があります。詳細は、「起動プログラム」を参照してください。
構文
AW ATTACH workspace - [ONATTACH [progname]|NOONATTACH] - [RO [THAW] ] | RW | RWX | MULTI [THAW]] [WAIT | NOWAIT] ] - [AUTOGO [progname]|NOAUTOGO] - [AFTER workspace|BEFORE workspace|LAST|FIRST] - [PASSWORD password]
パラメータ
- workspace
-
アナリティック・ワークスペースの名前。まだアタッチしていないアナリティック・ワークスペースをATTACHキーワードを使用してアタッチする場合は、該当するワークスペース名を指定する必要があります。これは、AW ALIAS LISTを使用して割り当てられている別名がないためです。ただし、すでにアタッチされたワークスペースにATTACHキーワードを使用する場合(ワークスペース・リストでの位置を変更するためなど)は、AW ALIAS LISTを使用して別名を割り当てた上で、その別名を使用できます。
- ONATTACH [progname]
-
(デフォルト)prognameを指定しない場合は、アタッチされたワークスペースにONATTACHというプログラムが存在すれば、そのプログラムがONATTACH句によって自動的に実行されます。NOONATTACHを指定しない場合も同じ結果になります。
- NOONATTACH
-
NOONATTACHを指定すると、ワークスペースに
ONATTACH
というプログラムが存在する場合でも、Oracle OLAPによってそのプログラムは実行されません。 - AUTOGO [progname]
-
(デフォルト)prognameを指定しない場合は、アタッチされたワークスペースにAUTOGOというプログラムが存在すれば、そのプログラムがAUTOGO句によって自動的に実行されます。NOAUTOGOを指定しない場合も同じ結果になります。
prognameを指定すると、アタッチしたプログラムに指定したプログラムがAUTOGO句によって自動的に実行されます。
- NOAUTOGO
-
NOAUTOGOを指定すると、ワークスペースに
AUTOGO
というプログラムが存在する場合でも、Oracle OLAPによってそのプログラムは実行されません。 - RO
-
(デフォルト)ワークスペースが読取り専用アクセス権モードでアタッチされることを指定します。ユーザーはワークスペースのデータに独自の変更を加えることによって、what-if分析を実行できますが、これらの変更をコミットすることはできません。
読取り専用でアタッチされているアナリティック・ワークスペースには、複数のセッションから同時にアクセスできます。読取り専用アタッチ・モードは、読取り/書込みアクセス権モードおよびマルチライタ・アクセス権モードと互換性があります。ユーザーは、他のユーザーが読取り/書込みアクセス権モードとマルチライタ・アクセス権モードのいずれかでアナリティック・ワークスペースをアタッチした場合、読取り専用モードでアナリティック・ワークスペースをアタッチできます。さらに、他のユーザーが読取り専用モードでアナリティック・ワークスペースをアタッチしている場合、ユーザーは読取り/書込み排他モードでアナリティック・ワークスペースをアタッチできません。読取り専用アクセスでアナリティック・ワークスペースをアタッチすると、PERMIT_READというプログラムがワークスペース内に存在する場合は、Oracle OLAPによってそのプログラムが実行されます。
- THAW
-
NOTHAWキーワードを指定せずにAW FREEZEコマンドを使用して固定されたアナリティック・ワークスペースの現行ビューをOracle OLAPでアタッチするように指定します。
- RW
-
ワークスペースが読取り/書込みアクセス権モードでアタッチされることを指定します。読取り/書込みモードで同時にアナリティック・ワークスペースを開くことができるのは1ユーザーのみです。ユーザーはワークスペースに対する変更をすべてコミットするか、変更しないことをコミットする必要があります。
読取り/書込み非排他でアタッチされているアナリティック・ワークスペースには、複数のセッションから同時にアクセスできます。読取り/書込み非排他アタッチ・モードは、読取り専用アクセス権モードとのみ互換性があります。ユーザーは、他のユーザーが読取り専用モードでアナリティック・ワークスペースをアタッチした場合、読取り/書込みモードでアナリティック・ワークスペースをアタッチできますが、他のユーザーが読取り専用以外のモードでアタッチした場合は、読取り/書込みモードでアナリティック・ワークスペースをアタッチできません。同様に、他のユーザーが読取り/書込み非排他モードでアナリティック・ワークスペースをアタッチしている場合、ユーザーは読取り専用以外のモードでアナリティック・ワークスペースをアタッチできません。読取り/書込みアクセスでアナリティック・ワークスペースをアタッチすると、PERMIT_WRITEというプログラムがワークスペース内に存在する場合は、Oracle OLAPによってそのプログラムが実行されます。
- RWX
-
ワークスペースが読取り/書込み排他アクセス権モードでアタッチされることを指定します。読取り/書込み排他モードでアナリティック・ワークスペースを開くことができるのは一度に1ユーザーのみです。ユーザーはワークスペースに対する変更をすべてコミットするか、変更しないことをコミットする必要があります。
読取り/書込み排他モードでアタッチされているアナリティック・ワークスペースは、その他のセッションからはアクセスできません。読取り/書込み排他アタッチ・モードは、他のアクセス権モードとの互換性がありません。他のユーザーがいずれかのモードでアナリティック・ワークスペースをアタッチしている場合、ユーザーは読取り/書込み排他モードでアナリティック・ワークスペースをアタッチできません。さらに、他のユーザーが読取り/書込み排他モードでアナリティック・ワークスペースをアタッチしている場合、ユーザーはそれ以外のモードでアナリティック・ワークスペースをアタッチできません。読取り/書込みアクセスでアナリティック・ワークスペースをアタッチすると、PERMIT_WRITEというプログラムがワークスペース内に存在する場合は、Oracle OLAPによってそのプログラムが実行されます。
- MULTI
-
ワークスペースがマルチライタ・アクセス権モードでアタッチされることを指定します。マルチライタ・モードでアタッチされているアナリティック・ワークスペースには、複数のセッションから同時にアクセスできます。マルチライタ・モードでは、変数、リレーション、値セットおよびディメンションの個々に対してアタッチ・モード(読取り専用または読取り/書込み)を指定することでアナリティック・ワークスペースを制御しているので、ユーザーは同じアナリティック・ワークスペースを同時に変更できます。
マルチライタ・アタッチ・モードは、読取り専用モードおよびマルチライタ・モードとのみ互換性があります。他のユーザーが読取り/書込みモードまたは排他モードのいずれかでアナリティック・ワークスペースをアタッチしている場合、ユーザーはマルチライタ・モードでアナリティック・ワークスペースをアタッチできません。さらに、他のユーザーがマルチライタ・モードでアナリティック・ワークスペースをアタッチしている場合、ユーザーは読取り/書込みモードまたは排他モードでアナリティック・ワークスペースをアタッチできません。
- WAIT
- NOWAIT
-
読取り/書込み排他アクセス権モードで使用するアナリティック・ワークスペースへのアクセスを要求した場合、または読取り/書込み非排他アクセス権モードで使用しているアナリティック・ワークスペースへの読取り/書込みアクセスを要求した場合、Oracle OLAPがアナリティック・ワークスペースへのアクセスが可能になるまで待機するかどうかを指定します。NOWAIT(デフォルト)を指定すると、Oracle OLAPはワークスペースが使用できないことを示すエラー・メッセージを生成します。WAITを指定すると、Oracle OLAPはワークスペースにアクセスできるようになるまで待機します。アクセスするまでOracle OLAPが待機する秒数は、Oracle OLAPのAWWAITTIMEオプションによって異なります。
- FIRST
-
(デフォルト)アタッチしているワークスペースをワークスペース・リスト内の現行のワークスペースにします。
- LAST
-
対象のワークスペースを、ワークスペース・リストにある現行のワークスペースの後から
EXPRESS
ワークスペースの前までの間に置きます。アタッチされている他のワークスペースがEXPRESS
ワークスペースの前に存在する場合、指定したワークスペースはその後にアタッチされます。EXPRESS
ワークスペースの前にワークスペースが存在しない場合、LASTを指定すると指定したワークスペースが現行のワークスペースになります。LASTでは、EXPRESS
ワークスペースの後のワークスペースは無視されます。 - AFTER workspace
- BEFORE workspace
-
新規にアタッチされたワークスペースのワークスペース・リストにおける位置を、アタッチされているアナリティック・ワークスペースを基準にして指定できます。
EXPRESS
ワークスペースの後にアナリティック・ワークスペースをアタッチする場合は、LASTではなくAFTERを使用します。BEFOREを指定してワークスペースを先頭に置くと、そのワークスペースが現行のワークスペースになります。プログラム内に指定されているプログラム名またはオブジェクト名がOracle OLAPによって検索される場合、ワークスペースの検索順序は、ワークスペース・リストの順序によって決まります。
- PASSWORD password
-
アタッチされるワークスペースへのアクセス権を付与または拒否するために、起動プログラムで確認されるパスワードを指定します。「起動プログラム」を参照してください。
使用上の注意
アタッチ済ワークスペースでのATTACHの使用
AW ATTACH workspace文を使用してアタッチ済ワークスペースを再アタッチした場合は、Oracle OLAPはワークスペースの新しいコピーを作業メモリーに移動しません。そのかわりに、Oracle OLAPでは次のアクションが実行されます。
-
対象のワークスペースが現行のワークスペースになります。
-
AUTOGOキーワードを指定している場合は、AUTOGOプログラムが実行されます。
ただし、セッション中にデータを変更した場合は、アクティブ・ワークスペースを再アタッチしても変更内容は破棄されません。さらに、ワークスペースの現行の別名は変更されません。
マルチライタ・モードでアタッチされたアナリティック・ワークスペースの管理
マルチライタ・モードのオブジェクトの管理には、次のコマンドを使用します。
-
ACQUIRE -- 変更内容を更新してコミットできるように、指定のオブジェクトを取得および再同期化(オプション)します。
-
RELEASE -- 指定した変数、リレーション、値セットまたはディメンションのアクセス権モードを読取り/書込み(取得)アクセスから読取り専用アクセスに変更します。
-
RESYNC -- 指定された読取り専用オブジェクトに対するプライベートな変更を削除し、表示可能な最新の世代のデータを取得します。
-
REVERT: 指定したオブジェクトについて、最後に更新、再同期化(RESYNC文を使用)、またはACQUIREのRESYNC句で取得されてから行われたすべての変更、あるいはアナリティック・ワークスペースがアタッチされてから行われたすべての変更を削除します。
適用される考慮点は次のとおりです。
-
読取り/書込みモードでオブジェクトを取得できるのは一度に1ユーザーのみです。オブジェクトは、最初に読取り専用モードで取得した後、別のユーザーが読取り専用モードで同じオブジェクトを取得していなければ、そのオブジェクトを先に解放することなく読取り/書込みモードで取得できます。ただし、他のユーザーが読取り専用モードでオブジェクトを取得している場合、そのユーザーがオブジェクトを解放しないかぎり、同じオブジェクトを読取り/書込みモードで取得することはできません。指定したオブジェクトが他のユーザーにより取得された場合か、指定したオブジェクトの読取り専用世代がそのオブジェクトの最新の世代ではない場合、取得が失敗します。
-
同時にコンポジット・ディメンションを共有しているすべての変数、値セットおよびリレーションを再同期化する必要があります。
-
オブジェクトを再同期化する場合、一部のオブジェクトのみを新しい世代にプロモートすることによって、データの論理的一貫性が失われないように、異なるオブジェクト間の論理的関係に留意する必要があります。
-
コンポジット・ディメンションを共有するオブジェクトは別々に再同期化できます。ただし、これらの再同期化されていないオブジェクトはすべて、変更されていないか取得済である必要があります。
-
ディメンションのいずれかがすでに取得および変更された場合は、変数を更新できません。
-
ディメンションをメンテナンスするには、先に取得する必要があります。
-
ディメンションは、解放されると、自動的に回復されます。
-
更新済のオブジェクトを解放しても、そのトランザクションをコミットまたはロールバックするまで、他のユーザーはそのオブジェクトを取得できません。what-if変更をさらに進め、後で取得済のすべての変数を更新する場合に、更新済オブジェクトをコミット前に解放するのには役立ちます。
-
ディメンション値を追加してからディメンションを元に戻すと、そのディメンションによってディメンション化された変数の領域割当てが最適ではなくなる場合があるためお薦めしません。
-
メンテナンス済の取得済ディメンションによって取得済変数がディメンション化されている場合、そのディメンションを更新または解放するまでその変数を更新できません。
-
ディメンション値は削除できません。
固定されたアナリティック・ワークスペースのアタッチ
アナリティック・ワークスペースをいったん固定すると、THAWキーワードを指定して現行ビューがアタッチされるように要求しないかぎり、ROおよびMULTIでアナリティック・ワークスペースをアタッチした場合に、そのワークスペースの固定されたビューがアタッチされます。(RWまたはRWでアタッチした場合は、常に最新の世代がアタッチされます。)
現行ビューをアタッチする際、中間のコミットで複数手順の作成がある場合、アナリティック・ワークスペースの状態が一貫性を保てない場合があります。たとえば、アナリティック・ワークスペースに2つの変数actualおよびbudget
があるとします。また、actual
変数を設定して、UPDATEおよびCOMMITコマンドを発行したとします。この時点で、actualにのみデータが存在することになります。
読取りマルチライタ・モードで固定されたアナリティック・ワークスペースをアタッチする際、マルチライタのコマンド(RESYNCおよびACQUIRE)を使用すると、AW FREEZEにNOTHAWキーワードを指定しているかどうかに関係なく、最新バージョンのデータを取得できます。
ワークスペース名と別名の競合
スキーマに存在するアナリティック・ワークスペースは、名前が割り当てた別名と同じである場合にはアタッチできません。同様に、スキーマに存在するアタッチ済ワークスペースの名前と重複する別名を割り当てることはできません。さらに、2つのアタッチ済ワークスペースに同じ別名を割り当てることはできません。
AW DELETE文では、アタッチされていないアナリティック・ワークスペースに、割り当てた別名と同じ名前を指定すると、その名前が別名と解釈され、エラーが通知されます。
例
例9-50 起動プログラム
次のような定義を持つPERMIT_READ
、PERMIT_WRITE
、ONATTACH
、MYATTACH
およびAUTOGO
という5つのプログラムがあるawtest
というアナリティック・ワークスペースを作成したとします。
DEFINE PERMIT_READ PROGRAM BOOLEAN PROGRAM SHOW 'permit_read program executing' AW LIST RETURN YES END DEFINE PERMIT_WRITE PROGRAM BOOLEAN PROGRAM SHOW 'permit_write program executing' AW LIST RETURN YES END DEFINE ONATTACH PROGRAM BOOLEAN PROGRAM SHOW 'onattach program executing' AW LIST RETURN YES END DEFINE MYATTACH PROGRAM BOOLEAN PROGRAM SHOW 'myattach program executing' AW LIST RETURN YES END DEFINE AUTOGO PROGRAM PROGRAM SHOW 'autogo program executing' AW LIST END
awtest
をアタッチするときに実行されるプログラムは、次に示すように、AW ATTACH文に指定したアタッチ・モードおよびキーワードによって異なります。
-
次の文を使用して読取り/書込みモードで
awtest
をアタッチした場合AW DETACH awtest AW ATTACH awtest RW
最初に
PERMIT_WRITE
プログラムが実行され、次にONATTACH
プログラムが実行されます。 -
次の文を使用して読取り専用モードで
awtest
をアタッチした場合AW DETACH axuserwtest AW ATTACH awtest NOONATTACH RO
PERMIT_READ
プログラムのみが実行されます。 -
次の文を使用して読取り専用モードで
awtest
をアタッチした場合AW DETACH awtest AW ATTACH awtest RO
最初に
PERMIT_READ
プログラムが実行され、次にONATTACH
プログラムが実行されます。 -
次の文を使用して読取り専用モードで
awtest
をアタッチした場合AW DETACH awtest AW ATTACH awtest ONATTACH myattach RO
最初に
PERMIT_READ
プログラムが実行され、次にMYATTACH
プログラムが実行されます。 -
次の文を使用してマルチライタ・モードで
awtest
をアタッチした場合AW DETACH awtest AW ATTACH awtest MULTI
最初に
PERMIT_WRITE
プログラムが実行され、次にONATTACH
プログラムが実行されます。 -
次の文を使用して読取り専用モードで
awtest
をアタッチした場合AW DETACH awtest AW ATTACH awtest AUTOGO
最初に
PERMIT_WRITE
プログラムが実行されます。次に、ONATTACH
プログラムが実行されます。最後に、AUTOGO
プログラムが実行されます。
例9-51 ONATTACHプログラムによるアナリティック・ワークスペースのアタッチ
売上データのワークスペースとして、expenses
とrevenue
の2つがあるとします。analysis
という3番目のワークスペースがあり、ここには、データを分析するためのプログラムが含まれています。analysis
ワークスペースには、他の2つのワークスペースをアタッチするための次のようなONATTACH
プログラムが含まれています。
DEFINE onattach PROGRAM PROGRAM AW ATTACH expenses RW AFTER analysis AW ATTACH revenues RW AFTER analysis END
ONATTACH
プログラムを実行するには、次の文によってanalysis
ワークスペースをアタッチします。
AW ATTACH analysis
AW LIST文を発行すると、3つのアナリティック・ワークスペースすべてがアタッチされたことが、次の出力によって確認できます。
ANALYSIS R/W CHANGED XUSER.ANALYSIS REVENUE R/W UNCHANGED XUSER.REVENUES EXPENSES R/W UNCHANGED XUSER.EXPENSES EXPRESS R/O UNCHANGED SYS.EXPRESS
AW CREATE
AW CREATEコマンドは、新規のワークスペースを作成し、セッションにおける現行のワークスペースにするコマンドです。
Oracle OLAPでは、アナリティック・ワークスペースを作成するための手順の一部として、COMMITが自動的に実行されます。以前にアタッチされたワークスペースはアタッチ済ワークスペースのリストの下方向に移動し、これによって新規のワークスペースのための場所がリストの先頭に作成されます。
また、現行のアナリティック・ワークスペースにおいて、別のアナリティック・ワークスペースが作成される場合、TRIGGER_AWという名前のプログラムが存在すれば、そのTRIGGER_AWプログラムが実行されます。
注意:
アナリティック・ワークスペースを作成するには、「アナリティック・ワークスペースの作成および削除に必要な権限」で概説する適切なSQL GRANT権限が必要です。
構文
AW CREATE workspace [position] [UNPARTITIONED|PARTITIONS n] - [TABLESPACE tblspname [SEGMENTSIZE n [K, M, or G]]]
positionはワークスペース・リストでのワークスペースの位置を指定し、値は次のいずれかになります。(デフォルトはFIRSTです。)
- AFTER workspace
- BEFORE workspace
- LAST
- FIRST
パラメータ
- workspace
-
アナリティック・ワークスペースの名前。ワークスペースの名前には次の制約があります。
-
長さは1文字以上、26文字以下です。すべての文字は、データベースのキャラクタ・セットに含まれる文字、数字またはアンダースコアを使用する必要があります。
-
数字は先頭に使用できません。(予約語は、RESERVEDを使用して確認できます。)
-
- FIRST
-
(デフォルト)アタッチしているワークスペースが現行のワークスペースになります。
- LAST
-
対象のワークスペースを、現行のワークスペースの後から
EXPRESS
ワークスペースの前までの間に置きます。アタッチされている他のワークスペースがEXPRESS
ワークスペースの前に存在する場合、指定したワークスペースはその後にアタッチされます。EXPRESS
ワークスペースの前にワークスペースが存在しない場合、LASTを指定すると指定したワークスペースが現行のワークスペースになります。LASTでは、EXPRESS
ワークスペースの後のワークスペースは無視されます。 - AFTER
- BEFORE
-
新規にアタッチされたワークスペースの位置を、すでにアタッチされているアナリティック・ワークスペースを基準にして指定します。
EXPRESS
ワークスペースの後にアナリティック・ワークスペースをアタッチする場合は、LASTではなくAFTERを使用します。BEFOREを指定してワークスペースを先頭に置くと、そのワークスペースが現行のワークスペースになります。プログラム内に指定されているプログラム名またはオブジェクト名がOracle OLAPによって検索される場合、ワークスペースの検索順序は、ワークスペース・リストの順序によって決まります。
- UNPARTITIONED
-
アナリティック・ワークスペースであるリレーショナル表がパーティション化された表ではないことを指定します。
- PARTITIONS n
-
アナリティック・ワークスペースであるリレーショナル表が、n個のパーティションを持つパーティション化されたハッシュ表であることを指定します。nの値として0(ゼロ)を指定した場合は、UNPARTITIONEDを指定した場合と同じ結果になります。nのデフォルト値は8です。
- TABLESPACE tblspname
-
アナリティック・ワークスペースが作成されるOracle Database表領域の名前を指定します。
ヒント:
オラクル社では、このために用意された表領域にワークスペースを作成する場合、TABLESPACE引数を使用することをお薦めします。使用する表領域については、DBAに問い合せてください。
- SEGMENTSIZE n [K, M, or G]
-
この引数をCREATEキーワードで使用すると、作成するワークスペースの各セグメントの最大サイズが設定されます。
K
、M
、G
のいずれも指定しない場合、nに対して指定する値はバイトとして解釈されます。値nの後にK
、M
、G
のいずれかを指定すると、この値はそれぞれKB、MB、GBと解釈されます。
使用上の注意
アナリティック・ワークスペースのアクセス権
アナリティック・ワークスペースに対して追加可能なセキュリティには、次のようないくつかのレベルがあります。
例
例9-52 アナリティック・ワークスペースの作成と始動
AWコマンドでCREATEキーワードを使用すると、新規のワークスペースを作成および始動できます。
AW CREATE mywork
AW DELETE
AW DELETEコマンドは、デタッチされたアナリティック・ワークスペースをデータベースから削除します。Oracle OLAPでは、アナリティック・ワークスペースを削除するための手順の一部としてCOMMITが自動的に実行されることに注意してください。DELETEキーワードは、ワークスペースをアタッチしているユーザーがいないときにのみ正常に実行されます。
注意:
また、現行のアナリティック・ワークスペースにおいて、別のアナリティック・ワークスペースが削除される場合、TRIGGER_AWという名前のプログラムが存在すれば、そのTRIGGER_AWプログラムが実行されます。
関連項目:
構文
AW DELETE workspace
使用上の注意
アタッチされていないワークスペースの削除
アタッチされていないワークスペースの名前が割り当てられた別名と同じ場合、このワークスペースを削除しようとすると、Oracle OLAPは、この名前を別名と解釈し、エラーを通知します。
例
例9-53 アナリティック・ワークスペースの削除
AWコマンドでDELETEキーワードを使用すると、アナリティック・ワークスペースを削除できます。
AW DELETE mywork
AW DETACH
AW DETACHコマンドは、ワークスペース・リストからアナリティック・ワークスペースを削除するコマンドです。先頭のワークスペースを削除すると、2番目のワークスペースが現行のワークスペースになります(そのワークスペースがEXPRESS
ワークスペースの場合は除く)。アナリティック・ワークスペースをデタッチすると、UPDATEが発行される前に変更された内容はデータベースで保持され、次のCOMMITによって永続化されます。UPDATEの発行後に変更が行われた場合、その内容は廃棄されます。
注意:
アナリティック・ワークスペースにTRIGGER_AWというプログラムが存在する場合、AW DETACH文を実行すると、そのプログラムが自動的に実行されます。
構文
AW DETACH [CACHE|NOCACHE] workspace
パラメータ
- CACHE
-
アタッチ以降、アナリティック・ワークスペースが変更されていない場合、そのアナリティック・ワークスペースをキャッシュするよう指定します。(デフォルト)
- NOCACHE
-
アタッチ以降、アナリティック・ワークスペースが変更されていない場合でも、そのアナリティック・ワークスペースをキャッシュしないよう指定します。
注意:
同じセッションで次にワークスペースをアタッチするときに、Oracle OLAPによってPermission、OnAttachまたはAutogoのプログラムが実行されるようにする場合は、アナリティック・ワークスペースをデタッチするときにNOCACHEを指定する必要があります。
- workspace
-
アナリティック・ワークスペースの名前。使用するキーワードに応じて、アナリティック・ワークスペースの名前または別名のいずれかを指定できます。
使用上の注意
アナリティック・ワークスペースが変更されているかどうかの判断
次の文は、アタッチ以降、アナリティック・ワークスペースが変更されているかどうかを示します。
キャッシュ・サイズ
デフォルトで、キャッシュされたアナリティック・ワークスペースのリストは2つです。つまり、キャッシュ・リストに一度に含まれるアナリティック・ワークスペースはデフォルトで2つのみで、新しいワークスペースをキャッシュ・リストに追加すると、前のワークスペースが削除されます。たとえば、mywk1
、mywk2
の順序で、この2つのアナリティック・ワークスペースをデタッチしたとします。ここで、mywk3
にAW DETACH CACHEコマンドを発行します。すると、キャッシュおよびキャッシュ・リストからmywk1
が削除され、mywk3
がキャッシュされて、キャッシュ・リストのmywk2
の後に追加されます。
注意:
メモリー競合が著しい場合、Oracle OLAPではキャッシュを空にしてメモリーを解放することがあります。
キャッシュ・サイズの変更は、イベント番号37372を使用して実行できますが、ここで、 levelは、保持するアナリティック・ワークスペースの数です。キャッシュを完全に無効にするには、 levelに1024を指定します。ベータ版では未確定であり、標準的な開発者にとって有効な情報かどうか確認する必要があります。
アナリティック・ワークスペースをデタッチするときに実行されるプログラム
アナリティック・ワークスペースがデタッチされると、次のプログラムが実行されます。
-
デタッチするアナリティック・ワークスペース内にONDETACHという名前のプログラムが存在する場合は、そのONDETACHプログラムが実行されます。
-
現行のアナリティック・ワークスペースにおいて、別のアナリティック・ワークスペースがデタッチされる場合、TRIGGER_AWという名前のプログラムが存在すれば、そのTRIGGER_AWプログラムが実行されます。
例
例9-54 アナリティック・ワークスペースのデタッチ
AWコマンドでDETACHキーワードを使用すると、アナリティック・ワークスペースをデタッチできます。
AW DETACH expense
AW FREEZE
AW FREEZEコマンドは、現行トランザクションがある場合、そのトランザクションをコミットし、現在のアナリティック・ワークスペースが、そのワークスペースのデフォルトのアタッチ・バージョンであることを指定するフラグを設定するコマンドです。このコマンドの実行後、読取り専用モードまたは読取りマルチライタ・モードでこのワークスペースをアタッチする要求を行うと、このフラグ付き世代のアナリティック・ワークスペースがOracle OLAPによってアタッチされます。
注意:
このコマンドを実行するには、書込みモードでアナリティック・ワークスペースにアタッチされている必要があります。
構文
AW FREEZE [NOTHAW]
パラメータ
使用上の注意
アナリティック・ワークスペースの固定
アナリティック・ワークスペースを固定する際は、次の点に注意してください。
-
一度に固定できるアナリティック・ワークスペースの世代は1つのみです。
-
現在固定されているアナリティック・ワークスペースを再度固定するには、最初にAW THAWコマンドを使用し、その固定を解除する必要があります。
AW LIST
AW LISTコマンドは、アクティブ・ワークスペースのリストを、その更新ステータスとともに現行の出力ファイルに送信するコマンドです。
構文
AW LIST
使用上の注意
AW LISTによって生成される出力
現行のワークスペースが存在しない場合を除き、リスト内の最初のワークスペースが現行のワークスペースです。更新ステータスであるCHANGEDまたはUNCHANGEDの意味は、ワークスペースが読取り/書込みアクセスまたは読取り専用アクセスのどちらかでアタッチされているか、ワークスペースが他のユーザーと共有されているかどうかによって異なります。更新ステータスは、AW LISTによって次のように表示されます。
-
読取り/書込みモードでの非共有ワークスペース -- ワークスペースのアタッチ以降または前回の更新以降に変更を行った場合、更新ステータスはCHANGEDになります。
-
読取り専用モードでの非共有ワークスペース -- ワークスペースは更新できないため、更新ステータスは常にUNCHANGEDになります。
-
読取り/書込みモードでの共有または非共有ワークスペース -- ワークスペースのアタッチ以降または前回の更新以降に変更を行った場合、更新ステータスはCHANGEDになります。
-
読取り専用モードでの共有ワークスペース -- 最後にアクセスした後に他のユーザーが更新した場合、更新ステータスはCHANGEDになります。新規のオブジェクトまたはデータにアクセスするには、他のユーザーが自分の変更をコミットした後にワークスペースをデタッチし、再アタッチする必要があります。ワークスペースをアタッチしたままにしている場合、ワークスペース・ビューは変更されません。
現行のワークスペース
現行のワークスペースの名前は、ワークスペース・リストの先頭にあり、AW(NAME)ファンクションによって返された名前です。(詳細は、AWファンクションを参照してください。)NAMEディメンションに存在するのは、現行のワークスペースのオブジェクトのみです。AWDESCRIBEやLISTBYなどのプログラムは、現行のワークスペースに存在するオブジェクトのみを表示します。アナリティック・ワークスペースがアクティブではあるが現行ではない場合、ワークスペースのデータの変更と更新、ワークスペースのプログラムの編集と実行、およびワークスペースのオブジェクトの変更を実行できます。
例
OLAP Worksheetを使用してOracle OLAPに接続した直後だとします。AW LIST
文を発行すると、EXPRESS
がアタッチされている唯一のアナリティック・ワークスペースであることを示します。
AW LIST EXPRESS R/O UNCHANGED SYS.EXPRESS
ここで、アナリティック・ワークスペースを作成し、別のAW LIST
文を発行します。EXPRESS
アナリティック・ワークスペースと新規に作成したアナリティック・ワークスペースが両方ともアタッチされていることがわかります。
AW CREATE myaw AW LIST MYAW R/W UNCHANGED MYNAME.MYAW EXPRESS R/O UNCHANGED SYS.EXPRESS
AW SEGMENTSIZE
AW SEGMENTSIZEコマンドは、複数のセグメントに対してアナリティック・ワークスペースを設定するコマンドです。
構文
AW SEGMENTSIZE n [K, M, or G] [workspace]
パラメータ
- workspace
-
アナリティック・ワークスペースの名前。使用するキーワードに応じて、アナリティック・ワークスペースの名前または別名のいずれかを指定できます。
- SEGMENTSIZE n [K, M, or G] [workspace]
-
指定したワークスペースに対して各セグメントの最大サイズを設定します。ワークスペースが指定されていない場合は、現行のワークスペースが対象になります。
現行のワークスペースがすでに複数のセグメントを持っている場合、SEGMENTSIZEの設定は最新のセグメントにのみ反映され、それより前のセグメントには反映されません。前のセグメントは、各セグメントの作成時にSEGMENTSIZEの設定で決定された様々なサイズになる場合があります。
K
、M
、G
のいずれも指定しない場合、nに対して指定する値はバイトとして解釈されます。値nの後にK
、M
、G
のいずれかを指定すると、この値はそれぞれKB、MB、GBと解釈されます。
AW TRUNCATE
既存のアナリティック・ワークスペースからオブジェクトおよびデータをすべて削除します。アナリティック・ワークスペースで使用されている表領域もすべて割当てが解放されます。AW TRUNCATEを使用してデータを削除する方が、AW DELETEを使用してアナリティック・ワークスペースを削除するよりも効率的であり、データ以外に削除される対象も少なくなります。たとえば、AW TRUNCATEを使用してデータを削除した場合、削除前に付与されていたオブジェクト権限はすべて保持されます。
表の削除に関する詳細は、『Oracle Database SQL言語リファレンス』のTRUNCATE TABLEに関する説明を参照してください。
注意:
所有しないスキーマにあるアナリティック・ワークスペースを削除するには、「アナリティック・ワークスペースの作成および削除に必要な権限」で概説する適切なSQL GRANT権限が必要です。
構文
AW TRUNCATE workspace
例
例9-55 アナリティック・ワークスペースの全データの削除
AWコマンドでTRUNCATEキーワードを使用すると、アナリティック・ワークスペース内のオブジェクトおよびデータをすべて削除できます。
AW TRUNCATE mywork
AWDESCRIBE
AWDESCRIBEプログラムは、現行のアナリティック・ワークスペースに関する情報を現行の出力ファイルに送信するプログラムです。サマリー・ページの後に、次の2つの部分で構成されるレポートが作成されます。
-
名前、型および説明を示すアナリティック・ワークスペース・オブジェクトのアルファベット順リスト。
-
オブジェクト型別のオブジェクト定義のリスト。それぞれの定義には、DESCRIBE文を使用したときに表示される情報が記述されています。このプログラムには、オブジェクトのコールやアクセスを行うプログラムまたはコンパイル可能な他のオブジェクトを示す、参照元リストも組み込まれています。さらに、コンパイル可能なオブジェクトには参照先リストが格納されており、コール先またはアクセス先のアナリティック・ワークスペース・オブジェクトであることを示します。
構文
AWDESCRIBE
使用上の注意
参照元リストの情報
AWDESCRIBEコマンドは、暗黙の参照についての参照元リストおよび参照先リストの情報を送信しません。たとえば、プログラムにLIMITコマンドが記述されており、関連ディメンションによってディメンションが制限されている場合、これらのディメンションのリレーションが、AWDESCRIBEによって該当のプログラムの参照先リストに登録されることはありません。
例
例9-56 アナリティック・ワークスペースに関する情報の出力
次の例は、demo
というアナリティック・ワークスペースに対するAWDESCRIBEの出力の一部を示したものです。
DEMO Workspace Listing ===================== Last updated: 25Jun96 Time: 09:46:50 Print date: 27Aug96 Time: 10:30:11 DEMO contains: 11 DIMENSIONS 19 VARIABLES 1 PROGRAM 4 RELATIONS 2 VALUESETS This report is in two parts: - Object Listing: An alphabetic list of workspace objects, beginning on the next page. - Object Descriptions: Detailed descriptions of all workspace objects, sorted by object type and alphabetically by name. Object List Page 2 Workspace: DEMO Updated: 25Jun96 At: 09:46:50 ACTUAL NAME TYPE DESCRIPTION ____ ____ ___________ ACTUAL VARIABLE Actual $ Financials ADVERTISING VARIABLE Total Advertising Dollars BUDGET VARIABLE Budgeted $ Financials CHOICE DIMENSION List of choices CHOICEDESC VARIABLE Description line for the choices DEMOVER VARIABLE DEMO Workspace Version DISTRICT DIMENSION DIVISION DIMENSION Division DIVISION.PRODUCT RELATION DIVISION for each PRODUCT EXPENSE VARIABLE Total Production & Distribution Cost FCST VARIABLE Forecasted $ Financials INDUSTRY.SALES VARIABLE Total Industry Sales Revenue LINE DIMENSION Lineitem MARKET DIMENSION Geography Dim with Embedded Totals MARKET.MARKET RELATION Self-relation for the Market Dim MARKETLEVEL DIMENSION Geography Level MLV.MARKET RELATION MONTH DIMENSION NAME.LINE VARIABLE Lineitem Names for Reporting NAME.PRODUCT VARIABLE Product Names for Reporting Purposes NATIONAL.SALES VARIABLE Projected Total U.S. Dollar Sales NOT.IMPLEMENTED PROGRAM PRICE VARIABLE Wholesale Unit Selling Price PRODUCT DIMENSION Sporting Goods Products PRODUCT.MEMO VARIABLE Product Analysis Memo PRODUCTSET VALUESET Valueset for Sporting Goods Products QUARTER DIMENSION QUARTERSET VALUESET REGION DIMENSION Sales Region REGION.DISTRICT RELATION REGION for each DISTRICT SALES VARIABLE Sales Revenue SALES.FORECAST VARIABLE Forecasted Unit Sales SALES.PLAN VARIABLE Budgeted Sales Revenue SHARE VARIABLE Market Share (Based on Dollar Sales) UNITS VARIABLE Actual Unit Shipments UNITS.M VARIABLE YEAR DIMENSION Description of DIMENSIONS Page 3 Workspace: DEMO Updated: 25Jun96 At: 09:46:50 CHOICE DEFINE CHOICE DIMENSION TEXT LD List of choices Referenced By: NONE DEFINE DISTRICT DIMENSION TEXT Referenced By: NONE DEFINE DIVISION DIMENSION TEXT LD Division Referenced By: NONE ...
BLANK
BLANKコマンドは、現行の出力ファイルに1行以上の空白行を送信するコマンドです。BLANKは、通常、OLAP DMLプログラム内でのみ使用します。たとえばレポート・プログラムでは、ヘッダーとデータを分ける空白行や、データのグループを分ける空白行を挿入するためにBLANKが使用されます。
構文
BLANK [n]
例
例9-57 空白行の挿入
この例では、レポートのタイトルと列ヘッダーの間に空白行を挿入します。次の行は、レポート・プログラムの内容です。
LSIZE = 50 HEADING WIDTH LSIZE CENTER 'Quarterly Sales Report' BLANK 2 ROW WIDTH 20 'Unit Sales' ACROSS month - 'Jan96' TO 'Mar96': month
このプログラムによって生成される出力は、次のとおりです。
Quarterly Sales Report Unit Sales Jan96 Feb96 Mar96
BREAK
OLAP DMLプログラムのSWITCHコマンド、FOR文またはWHILE文の中でBREAKコマンドを使用すると、SWITCH文、FOR文またはWHILE文から、それぞれに関連付けられているDOENDの直後の文へプログラムの制御が移ります。
構文
BREAK
使用上の注意
TEMPSTAT文およびBREAK文
プログラムのFORループ処理内部で、DO ... DOEND句がTEMPSTATの後に続く場合、DOEND、BREAK、GOTOのいずれかが検出されると、ステータスはリストアされます。
例
例9-58 SWITCHで使用するBREAK
次のプログラム行には、2つのcaseラベルを使用してSWITCHコマンドが記述されています。各caseラベルの最後の文にBREAKが指定されているので、最初のcase文から次のcase文へ実行は継続されません。各BREAK文によって、DOENDに続く文に制御が移ります。
SWITCH userchoice DESCRIPTION 'MARKET REPORT\NFINANCE REPORT\NNO REPORT') DO CASE 'market': ... BREAK CASE 'finance': ... BREAK DEFAULT: ... BREAK DOEND cleanup: ...
CALL
CALLコマンドは、プログラムを起動するコマンドです。プログラムに引数が指定されている場合、これらの引数は必ずカッコで囲まれており、コールされるプログラムに渡されます。
構文
CALL program-name [(arg ...)]
パラメータ
使用上の注意
ディメンションの引数
ディメンションの値やディメンション名を引数として渡す場合は、'Jan96'
のように、正確なテキスト値を一重引用符で囲む必要があります。プログラムの引数をARGUMENT文で宣言する場合は、テキスト値を評価するテキスト式を渡すことができます。
プログラムの戻り値
値を返すプログラムをCALLを使用して起動した場合、戻り値は廃棄されます。プログラムがファンクションまたはコマンドとして起動されたか、またはCALLを使用して起動されたかを判別するには、そのプログラムにCALLTYPEファンクションを使用します。
ARGUMENTコマンドまたはARGファンクション
コールされるプログラムでは、ARGUMENT文またはARGファンクションのいずれかを使用して引数を処理できます。CALLによって起動したプログラムやファンクションとして起動したプログラムでは、ARGSファンクションおよびARGFRファンクションは、必ずNA
を返します。
引数がARGUMENT文で宣言されていないプログラムをCALLによって起動した場合、渡された引数はARGファンクションを使用して参照します。ただし、ARGファンクションはテキストを処理するファンクションなので、渡された引数はすべてテキスト値として解釈します。NTEXT引数を渡す場合は、ARGではなく、必ずARGUMENTを使用してNTEXT引数を宣言してください。ARGを使用すると、NTEXT引数はTEXTに変換され、NTEXTの値がデータベースのキャラクタ・セットで表現できないと、データが失われる可能性があります。
ARGUMENT文の処理
プログラムをCALL文を使用して起動するか、またはファンクションとして起動する場合は、次の2段階の処理が発生します。いずれかの段階でエラーが発生した場合、プログラムは実行されません。
-
指定したデータ型を確定する。コール側プログラムで指定した引数の式は、左から右に評価され、そのデータ型が識別されます。ディメンション値を表す式には、テキスト(
TEXT
またはID
)、数値(INTEGER
、DECIMAL
など)またはRELATION値が使用可能です。引数の式の1つにエラーがあると、処理は停止します。 -
指定した各データ型と宣言したデータ型を一致させる。引数の式の順序は、コールされるプログラムで宣言された引数の順序と一致します。最初の引数の式は最初に宣言された引数変数と一致し、2番目の引数の式は2番目に宣言された引数変数と一致します(以降同様)。それぞれの式は、引数変数の宣言されたデータ型に順次変換されます。
引数変数をディメンション値として宣言すると、コール側プログラムから渡される対応する値は、指定したディメンションの値を表すTEXT
またはID
、論理的なディメンションの位置を表す数値、物理的なディメンションの位置を表すRELATIONのいずれかになります。対応する値が整数以外の数値(DECIMAL
など)の場合は、論理的なディメンション位置を表す最も近いINTEGER
値に丸められます。
引数変数をディメンション値以外の値として宣言し、コール側プログラムから渡された対応する値がRELATION値の場合、エラーが発生します。RELATION値を渡し、それをTEXT
引数として受け取る場合は、CONVERTファンクションを使用し、プログラムの引数リストの値を変換します。
余分な引数を持つARGUMENT文
コール側プログラムで指定した引数の数が、コールされるプログラムで宣言されている引数の数より多い場合、コール側プログラムで指定した余分な引数は無視されます。コール側プログラムで指定した引数の数が、コールされるプログラムで宣言されている引数の数より少ない場合、コールされるプログラムで宣言されている余分な引数変数にはNA
値が代入されます。
値で渡されるARGUMENT文
ARGUMENT文を使用して引数を宣言すると、引数は値でプログラムに渡されます。したがって、コールされるプログラムには引数の値のみが渡され、このプログラムに関連するアナリティック・ワークスペース・オブジェクトへのアクセスは行われません。ただし、アナリティック・ワークスペース・オブジェクトの名前を一重引用符で囲んだ引数として指定した場合は、アナリティック・ワークスペース・オブジェクトの値は渡されません。そのかわりに、このオブジェクトの名前がテキスト文字列として渡されます。例9-59を参照してください。
例
(roundup.f
プログラムをroundup.p
プログラムと比較してください。roundup.f
からは値が返されますが、レポートは生成されません。)
例9-59 プログラムまたはファンクションのコール
この例では、2つのプログラムroundup.p
とroundup.f
を様々な方法で使用してデータを評価し、出力を生成する例を示します。
roundup.p
プログラムには、10進変数の名前をテキスト文字列として使用し、この変数の値を近似値のINTEGER
に丸めた値のレポートを生成します。roundup.f
プログラムにも10進変数の名前を使用できます。ただし、変数の名前をテキスト文字列として渡すかわりに、変数の値を引数として渡します。roundup.f
では、レポートは生成されません。そのかわりに、10進変数のそれぞれの値が、近似値のINTEGER
に丸められて返されます。
roundup.p
プログラムはCALLによって起動し、REPORT文が記述されています。これとは対照的に、roundup.f
は、戻り値がREPORT文への引数として使用されるユーザー定義ファンクションとして起動します。
roundup.p
プログラムでは、テキスト引数を宣言するためにARGUMENTを使用します。roundup.p
を起動すると、このプログラムでは引数が10進変数の名前として使用されます。コール側プログラムでは、コールされるプログラムがディメンション化された変数のすべての値にアクセスできるようにするために、変数の名前を渡します。コール側プログラムが変数の名前ではなく変数自体を渡した場合は、コールされるプログラムがアクセスできる値は1つに限定されます。このプログラムからは値は返されず、レポートが生成されます。
DEFINE roundup.p PROGRAM INTEGER PROGRAM ARGUMENT varname TEXT Report Down Line Across Month: Heading 'VARNAME' - IF INTPART(&varname) EQ &varname - THEN &varname ELSE INTPART(&varname) + 1 END
次の文により
LIMIT division TO 1 LIMIT month TO 1 TO 4 DECIMALS = 0 CALL roundup.p('actual')
生成されるレポートは、次のとおりです。
DIVISION: CAMPING ----------------- Varname------------------ -------------------MONTH------------------- LINE Jan95 Feb95 Mar95 Apr95 -------------- ---------- ---------- ---------- ---------- revenue 533,363 572,797 707,198 968,858 cogs 360,811 400,902 478,982 641,716 gross.margin 172,553 171,895 228,217 327,143 marketing 37,370 38,867 51,224 69,439 selling 89,008 86,458 102,233 139,567 r.d 24,308 23,400 39,943 57,186 opr.income 21,868 23,171 34,819 60,952 taxes 15,971 16,320 23,030 27,584 net.income 5,898 6,851 11,789 33,368
同じレポートを生成するにはこれ以外にも、REPORT文への引数として使用できるユーザー定義ファンクションとして次のようなroundup.f
というプログラムを作成するという方法があります。
DEFINE roundup.f PROGRAM INTEGER PROGRAM ARGUMENT realval DECIMAL IF realval EQ INTPART(realval) THEN RETURN INTPART(realval) ELSE RETURN INTPART(realval) + 1 END
次の文により
LIMIT division TO 1 LIMIT month TO 1 TO 4 DECIMALS = 0 REPORT DOWN line ACROSS month: roundup.f(actual)
生成されるレポートは、次のとおりです。
DIVISION: CAMPING ------------ ROUNDUP.F(ACTUAL)------------- -------------------MONTH------------------- LINE Jan95 Feb95 Mar95 Apr95 -------------- ---------- ---------- ---------- ---------- revenue 533,363 572,797 707,198 968,858 cogs 360,811 400,902 478,982 641,716 gross.margin 172,553 171,895 228,217 327,143 marketing 37,370 38,867 51,224 69,439 selling 89,008 86,458 102,233 139,567 r.d 24,308 23,400 39,943 57,186 opr.income 21,868 23,171 34,819 60,952 taxes 15,971 16,320 23,030 27,584 net.income 5,898 6,851 11,789 33,368
CDA
CDAコマンドを使用すると、セッションのカレント・ディレクトリ・オブジェクトを特定または変更できます。
既定のカレント・ディレクトリ・オブジェクトを使用すると、ディレクトリ・オブジェクトの名前を指定することなく、DMLファイルのアクセス文でファイル識別子を指定できます。ファイル・アクセス文の例としては、FILECOPY、FILEMOVE、FILEDELETE、EXPORTおよびIMPORTがあります。
構文
CDA [directory-alias]
パラメータ
使用上の注意
既定のカレント・ディレクトリ・オブジェクトでのファイル識別子の指定
次の文を実行すると、セッションのカレント・ディレクトリ・オブジェクトのファイルlog.txt
が、backup
というディレクトリ・オブジェクトのファイルoldlog.txt
に移動します。
FILECOPY 'log.txt' 'backup/oldlog.txt'
ディレクトリ・オブジェクトの設定
データベース管理者はディレクトリ・オブジェクトを設定して、このオブジェクトへのアクセス権を付与する必要があります。
例
例9-60 カレント・ディレクトリ・オブジェクトの指定
次の文を実行すると、mydir
がカレント・ディレクトリ・オブジェクトとして指定されます。
CDA 'mydir'
例9-61 カレント・ディレクトリ・オブジェクトの取得
次の文を実行すると、カレント・ディレクトリ・オブジェクトが現行の出力ファイルに送信されます。
CDA
この文によって生成される出力は、次のとおりです。
The current directory is MYDIR.
CHGDFN
CHGDFNコマンドは、アナリティック・ワークスペース・オブジェクトの定義の一部を変更するコマンドです。
CHGDFNでオブジェクトの定義を変更するには、まずCONSIDERを使用して、該当するオブジェクトの定義を現行の定義にする必要があります。
注意:
CHGDFNでは、マルチライタ・モードでアタッチされているアナリティック・ワークスペースのオブジェクト定義は変更できません。
構文
CHGDFN desired-change
ここで、desired-changeは次のいずれかです。
varname SEGWIDTH length dim... partitioned-varname {DROP | ADD } (partition-instance...) partition-template {DEFINE | DELETE [CLEAR] } (partition-instance...) partition-template RENAME PARTITION old-name new-name {conjoint | composite} {HASH | BTREE | NOHASH} concat BASE ADD dimensionlist conjoint COMPOSITE composite DIMENSION dimension NTEXT | TEXT | NUMBER [p, s] dwmqy-dimname { {BEGINNING | ENDING} phase | {EARLIER | LATER} n} concat [NOT] UNIQUE varname {ADD |DROP} AGGCOUNT varname [DROP] NULLTRACKING
パラメータ
- varname
-
セグメント・サイズを設定する対象の変数名。
- SEGWIDTH
-
変数のセグメントの明示的なサイズを指定します。詳細は、「変数セグメントの理解」を参照してください。
- partitioned-varname
-
パーティションを変更する、パーティション変数の名前を指定します。
- DROP partition-instance
- ADD partition-instance
-
指定されたパーティションを、パーティション変数から削除または追加します。partition-instance引数の詳細は、DEFINE VARIABLEコマンドを参照してください。
- DEFINE partition
- DELETE [CLEAR] partition-instance
-
指定されたパーティションを、パーティション・テンプレート・オブジェクトから削除または追加します。partition-instance引数の詳細は、DEFINE PARTITION TEMPLATEコマンドを参照してください。
オプションのCLEARキーワードを含めると、Oracle OLAPでは、パーティション・テンプレート・オブジェクトを使用してパーティション化されている変数内の対応するパーティションも削除します。つまり、CLEARを含めることは、パーティション・テンプレート・オブジェクトによってパーティション変数からパーティションをDROPするために、別のCHGDFN文を発行することと同義です。
- RENAME PARTITION old-name new-name
-
パーティション・テンプレート・オブジェクト内の指定されたパーティションの名前を変更します。
- BASE ADD dimensionlist
-
dimensionlistに指定された1つまたは複数のディメンションを連結ディメンションのベース・ディメンションに追加します。1つ以上のディメンションを連結のベース・ディメンションとして追加する場合、Oracle OLAPでは、そのディメンションを連結の既存のベース・ディメンション・リストに追加します。連結でディメンション化されたオブジェクト、またはベース・ディメンションとして変更された連結を持つ連結でディメンション化されたオブジェクトでは、追加の
NA
値が取得されます。すでに連結ディメンションの構成要素であるディメンションは、ベース・ディメンションとして追加できません。 - length-dim...
-
セグメントの幅は、変数のディメンション・リストにある各ディメンションまたはコンポジットの各セグメント内の値の最大数として指定されます。最初のlength-dimは、変数の定義内のディメンション・リストの最初に位置しているディメンションまたはコンポジット(つまり、最も変化の速いディメンションまたはコンポジット)の値の数で、2番目のlength-dimは、ディメンション・リスト内の2番目に位置しているディメンションまたはコンポジットの値の数、というように続きます。
- conjoint
- composite
-
index構文では、索引アルゴリズムを変更する対象の結合ディメンションまたはコンポジットの名前です。conjoint-to-composite構文では、コンポジットへ変更する対象の結合ディメンションの名前です。composite-to-dim構文では、結合ディメンションへ変更する対象のコンポジットの名前です。結合が計算式のディメンションである場合は、結合ディメンションをコンポジットへ変更できません。
- BTREE
- BTREE64
- HASH
- NOHASH
-
結合またはコンポジットで定義されているオブジェクト内のデータを失うことなく、結合ディメンションまたはコンポジットの値をロードおよびアクセスするために使用される索引アルゴリズムを示します。コンポジットはNOHASHへ変更できません。結合は、当初、HASHとして定義されたものである場合にのみ、NOHASHに変更できます。「BTREEからNOHASHへの結合の索引アルゴリズムの変更」を参照してください。
HASH、NOHASHおよびBTREEは、結合ディメンションまたはコンポジットの値のロードおよびアクセスに使用される、それぞれ異なる索引アルゴリズムです (BTREE64はコンポジットでのみ使用できます)。(BTREE64はコンポジットでのみ使用可能です。.)コンポジットのデフォルトは、SPARSEINDEXオプションにより決まります。これには、BTREEのデフォルト値が含まれます。索引アルゴリズムは、サイズの大きい結合またはコンポジットをロードまたはアクセスする際のパフォーマンスに影響します。パフォーマンスは、使用しているシステムの構成、データ編成およびアプリケーション設計により異なります。
-
BTREEは、コンポジットおよび結合ディメンションについて推奨される標準的な索引付けメソッドです。上級ユーザーであり、かつHASHまたはNOHASHを特に必要とするとき以外は、BTREEをデフォルトとして使用してください。BTREEは類似する値をグループ化するため、アクセスの局所性に優れています。
-
BTREE 64は、コンポジットでのみ使用できます。コンポジット値とベース・ディメンション値の関連付けとして、拡張性の高いBツリー索引の作成を指定します。BTREE64コンポジットでディメンション化される変数では、BTREEコンポジットと同様に、配列要素(つまり変数セル)はコンポジットのタプルに格納されるディメンション値についてのみ作成され、ベース・ディメンション内のすべての値についてセルが作成されるわけではありません。ただし、BTREEコンポジットとは異なり、BTREE64コンポジットでは2GBを超えるBツリーがサポートされます。
-
HASHは、2つまたは3つのベース・ディメンションのみを持つコンポジットまたは結合ディメンションに対し使用できる標準的な索引付けメソッドです。HASHを使用する場合の利点は、結果が少量のコードになることです。ただし、一般的には、HASHはお薦めしません。HASHを使用すると、巨大な索引表が作成されるため、メモリーに読み込むには大きすぎる場合があります。
-
NOHASHは、結合ディメンションでのみ使用できます。使用可能なメモリーがほとんどなく、結合ディメンションが2つまたは3つのベース・ディメンションのみを持つような場合、NOHASHの使用が有用です。また、非常に大きい初期データ量をロードする際にもNOHASHを使用できます。NOHASHを使用すると、データは、ロード後にデータへアクセスしやすい方法でロードされます。データがロードされたら、良好なパフォーマンスを得るために、結合ディメンションの定義をBTREEに戻します。そうしないと、特に結合ディメンションが4つ以上のベース・ディメンションを持つ場合にはパフォーマンスが低下する可能性があります。「BTREEからNOHASHへの結合の索引アルゴリズムの変更」を参照してください。
ヒント:
パフォーマンスのテストを実施して、状況に即して最もパフォーマンスのよいアルゴリズムを判定できます。たとえば、最初はデータ・ロードが非常に迅速に行われたにもかかわらず、その後、大幅に速度が落ちた場合を想定します。CHGDFNを使用して、索引アルゴリズムをBTREEからNOHASHへ変更します。データのロードを再試行し、NOHASHの使用によってパフォーマンスが向上するかどうかを確認します。その後、CHGDFNを使用して索引アルゴリズムをBTREEに戻すこともできます。ただし、大きな結合ディメンションまたはコンポジットの索引アルゴリズムをあるアルゴリズムから別のアルゴリズムに変更する場合かなりの時間がかかることがあり、CHGDFNコマンドは中断できないことに注意してください。
-
- COMPOSITE
-
結合ディメンションの名前付きコンポジットへの変更を指定します。結合ディメンションのコンポジットへの変更では、結合がNOHASH索引アルゴリズムを持つ場合や権限を持つ場合はコンポジットには変更できないという制約があります。
- DIMENSION
-
名前付きコンポジットの結合ディメンションへの変更を指定します。
- composite_dimension
-
コンポジットをベース・ディメンションとして持つようなコンポジットの名前。
注意:
Oracle Database 11gでは、ネストしたコンポジットを定義することはできません。そのため、UNNESTキーワードが使用されるのは、以前のリリースで定義され、Oracle Database 11gにインポートされたネストしたコンポジットに対してのみです。
- dimension
-
TEXT、NTEXTまたはNUMBERディメンションの名前。
- NTEXT
-
TEXTディメンションのデータ型をNTEXTに変更するように指定します。
- TEXT
-
NTEXTディメンションのデータ型をTEXTに変更するように指定します。
- NUMBER [p, s]
-
TEXT、NTEXTまたはNUMBERディメンションのデータ型を、pで指定する精度およびsで指定するスケールを持つNUMBERに変更するように指定します。
- dwmqy-dimname
-
DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションのフェーズを指定または変更します。
- BEGINNING phase
- ENDING phase
-
DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションの開始フェーズまたは終了フェーズを指定します。フェーズは、DATEデータ型の変数値に対し有効な任意の入力スタイルを使用して、年、月および日を示す日付として、一重引用符で囲むかたちで指定する必要があります。意味があいまいな形式(
'03 05 97'
など)で日付が指定されている場合、その日付はDATEORDERオプションの現行の設定に基づいて解釈されます。日付の指定の詳細は、DATEORDERオプションを参照してください。 - EARLIER n
- LATER n
-
nは、DAY、WEEK、MONTH、QUARTERまたはYEARディメンションのフェーズが開始または終了する期間を増減する
INTEGER
式です。たとえば、開始フェーズが月曜日のWEEKディメンションに対しLATER 2
を指定すると、フェーズが水曜日に変更されます。 - [NOT] UNIQUE
-
NOT
を含めると、一意の連結ディメンションが一意でない連結ディメンションに変更されます。NOT
を含めない場合は、一意でない連結ディメンションが一意の連結ディメンションに変更されます。連結ディメンションの詳細は、DEFINE DIMENSION CONCATコマンドを参照してください。 - ADD AGGOUNT
-
指定された変数にAggcount変数を追加します。Aggcount変数の詳細は、DEFINE VARIABLEコマンドのWITH AGGCOUNT句を参照してください。
- DROP AGGOUNT
-
指定された変数からAggcount変数を削除します。Aggcount変数の詳細は、DEFINE VARIABLEコマンドのWITH AGGCOUNT句を参照してください。
- NULLTRACKING
-
指定した変数にNA2ビットがない場合、NA2ビットを追加します。NA2ビットおよびNULLトラッキングに関する詳細は、「NA2ビットとNULLトラッキング」を参照してください。
- DROP NULLTRACKING
-
指定した変数にNA2ビットがある場合、NA2ビットを削除します。
使用上の注意
変数セグメントの理解
セグメントとは、変数に格納される値の総数の一部に対し確保される、連続したディスク領域のことです。たとえば、SEGWIDTHが150
のmonth
とSEGWIDTHが90,000
のproduct
でディメンション化される変数の場合、各セグメントには150×90,000個まで変数値が格納されます。変数内のセグメント数は、データのロード時やデータへのアクセス時のパフォーマンスに影響します。
CHGDFN
SEGWIDTH
を指定しない場合、デフォルトの動作として、非コンポジット・ディメンションのSEGWIDTHに0
(ゼロ)が割り当てられ、ディメンション・セット内の最も変化の遅いディメンションではないコンポジットに大きな値が割り当てられます。この動作により、ほとんどの状況において、セグメント数を大幅に増やしてパフォーマンスを低下させることなく新しいディメンション値およびコンポジット値を追加することが可能になります。
SEGWIDTHを指定する場合は、変数のすべてのディメンションおよびコンポジットに対し、数値、0
(ゼロ)またはゼロ以外を指定する必要があります。
ディメンションのSEGWIDTHの値を0に設定すると、Oracle OLAPでは、セグメントの数を最小化するように(ただし既存のセグメントは変更しないで)、必要に応じてそのディメンション内のセグメントを拡大します。最も変化の遅いディメンションには、常に0
(ゼロ)を指定できますが、これは、ディメンションに後から追加されるどの値のデータも、変数の最後のセグメントにある既存のデータに追加されることになるためです。
指定するセグメント・サイズは、varnameに指定された変数のみでなく、同じディメンションとコンポジットの組合せが同じ順序で定義されているすべての変数およびリレーションに対しても適用されます。DEFINEコマンドは、変数またはリレーションの作成時にSEGWIDTHを設定します。SEGWIDTHの変更は、変更が行われた以降に作成する新しい変数またはリレーションに影響します。SEGWIDTHの設定の変更は、既存の変数またはリレーションには適用されません。
変数についてのデータのロード時間は、メモリーへ読み込まれ、書き出されるページ数により異なります。このページ数は変数のセグメント分割方法に影響を受ける場合があります。セグメントが多すぎる(数千から数百万)とパフォーマンスが低下する場合があります。「セグメント数の削減」を参照してください。
セグメント数はデータ・アクセス時のパフォーマンスにも影響します。これは、変数をレポートする時間が、メモリーに取り込まれる値の数により異なるためです。変数のセグメント数の決定は、データのロード・パターンとデータへのアクセス・パターンに基づいて行います。
DEFINEは、デフォルトのセグメントを提供します。ほとんどの場合、デフォルトのセグメントを使用できるため、CHGDFN SEGWIDTH
によって手動でセグメント・サイズを制御する必要はありません。ただし、デフォルトを使用せずにセグメント・サイズを指定することで、パフォーマンスを向上させることが可能な場合もあります。セグメント・サイズの決定基準がわからないときは、SEGWIDTHに対する長さ引数として、各ディメンションまたはコンポジットの値の推定最大数を使用します。この場合、変数には1つのセグメントのみが作成されます。
セグメント数の削減
OBJ(NUMSEGS)を使用して、特定のディメンション・セットを持つオブジェクトのセグメント数が多すぎるかどうかを確認できます。セグメント数が多すぎる場合、次の手順でセグメントの数を削減できます。
-
該当するディメンション・セットを使用する変数およびリレーションを、EIFファイルにエクスポートします。
-
ディメンション・セット内のディメンションに対し、MAINTAIN DELETE ALL文を実行します。
-
オプションで、このディメンション・セットを持つ変数またはリレーションにCHGDFN文を実行し、SEGWIDTHキーワードに対する長さ引数の値を増やします。
-
EIFファイルから、手順1でエクスポートしたすべての値をインポートします。
BTREEからNOHASHへの結合の索引アルゴリズムの変更
BTREEアルゴリズムで定義された結合ディメンションをNOHASH結合へ変更する必要がある場合は、次の方法で行います。
-
結合ディメンションとそれによってディメンション化されたすべてのオブジェクトを、EIFファイルにエクスポートします。
-
結合ディメンションによってディメンション化されたすべてのオブジェクトを削除し、さらに結合自体も削除します。
-
結合をNOHASH結合として再定義します。
-
結合ディメンションとそれによってディメンション化されたオブジェクトを、EIFファイルからインポートします。インポート時に、定義上のNOHASH属性によって、結合ディメンションがNOHASH結合として読み込まれます。
名前のないコンポジットから名前付き結合ディメンションへの変更
名前のないコンポジットを結合ディメンションに変更するには、まずRENAME文を使用して名前のないコンポジットを名前付きコンポジットに変更し、その後、CHGDFNを使用して名前付きコンポジットを結合ディメンションに変更します。
例
変数からNULLトラッキングを削除する例は、例9-104を参照してください。
例9-62 CHGDFN SEGWIDTHの使用方法
ベース・ディメンションmarket
およびproduct
を持つコンポジットとmonth
によってディメンション化された、d.sales
という変数があるとします。d.sales
の定義は、次のようになります。
DEFINE d.sales VARIABLE DECIMAL <month SPARSE<market product>>
d.sales
変数が1つのセグメントのみを持つようにするとします。month
ディメンションには最終的に150個の値が、コンポジットには100,000個の値がそれぞれ格納されると見積もります。次の文では、d.sales
変数に1つのセグメントが作成されます。
CHGDFN d.sales SEGWIDTH 150 100000
ただし、d.sales
にセグメント・サイズを指定するためのより適切な方法は、最も変化の遅いディメンションに0を指定することです。
CHGDFN d.sales SEGWIDTH 150 0
1つのコンポジットと2つのディメンションで定義された変数のセグメントを1つにするとします。たとえば、次のような定義を持つf.costs
という変数があるとします。
DEFINE f.costs VARIABLE DECIMAL <geog SPARSE<product channel> time>
geog
ディメンションには100個の値が、コンポジットには300,000個の値が格納されるものと見積もります。time
ディメンションは最も変化の遅いディメンションなので、値の数を見積もる必要はありません。次の文によって、f.costs
変数に1つのセグメントが作成されます。
CHGDFN f.costs SEGWIDTH 100 300000 0
例9-63 YEARディメンションのフェーズの変更
まず次の文で会計年度用のYEAR型のディメンションを作成し、その後、CHGDFNを使用して会計年度用の新しい時間フェーズに切り替えます。
DEFINE fiscal DIMENSION year BEGINNING '06 01 96' CHGDFN fiscal BEGINNING '01 01 97'
例9-64 連結ディメンションへのベース・ディメンションの追加
次の文では、ベース・ディメンションとしてregion
ディメンションおよびdistrict
ディメンションを持つreg.dist.ccdim
という名前の一意でない連結ディメンションを作成し、連結の値をレポートします。
DEFINE reg.dist.ccdim DIMENSION CONCAT(region district) REPORT W 22 reg.dist.ccdim
この文によって生成される出力は、次のとおりです。
REG.DIST.CCDIM -------------------- <region: East> <region: Central> <region: West> <district: Boston> <district: Atlanta> <district: Chicago> <district: Dallas> <district: Denver> <district: Seattle>
次の文により、連結ディメンションにベースとしてstore_id
ディメンションが追加され、再度、連結の値がレポートされます。
CHGDFN reg.dist.ccd BASE ADD store_id REPORT W 22 reg.dist.ccd
この文によって生成される出力は、次のとおりです。
REG.DIST.CCD ---------------------- <region: East> <region: Central> <region: West> <district: Boston> ... <district: Seattle> <store_id: 10> <store_id: 20> <store_id: 30> <store_id: 100> ... <store_id: 500> <store_id: 510>
CLEAR
CLEARコマンドは、1つ以上の変数について、指定するデータを削除するコマンドです。
構文
CLEAR [STATUS | {ALL [CACHE]}] [VALUES | {aggdata [USING aggmapname]}] - FROM {varname [ ( PARTITION partition-name ) ] } [, ... ]
ここで、aggdataは、変数から削除する集計データの型を特定する次のキーワードのいずれかです。
- AGGREGATES
- LEAVES
- PRECOMPUTES
- NONPRECOMPUTES
パラメータ
- STATUS
-
現在ステータスにあるデータのみを対象とするように指定します。(デフォルト)
ヒント:
圧縮コンポジットを消去する場合、一部の値のみがステータスにあるときにCLEARを実行しないでください。
- ALL
-
現行のステータスにかかわらず、変数のすべてのデータをコマンドの対象とするように指定します。CACHEキーワードまたはAGGREGATESキーワードを指定する場合は必須です。
- CACHE
-
セッション・キャッシュを消去します。このキーワードを指定した場合は、ALLキーワードも同時に指定する必要があります。
- VALUES
-
(デフォルト)変数の保存済のデータをすべて削除して、
NA
値に置換します。 - AGGREGATES
-
AGGREGATEコマンドまたはAGGREGATEファンクションの実行によって移入されたすべてのセルのデータを削除します。このキーワードを指定した場合は、ALLキーワードも同時に指定する必要があります。
- PRECOMPUTES
-
圧縮コンポジットでディメンション化された変数以外のすべての変数について、AGGREGATEコマンドの実行時に計算されたすべてのデータを削除して、
NA
値に置換します。 - NONPRECOMPUTES
-
AGGREGATEファンクションの実行により即時計算されたすべてのデータを削除して、
NA
値に置換します。 - LEAVES
-
詳細レベルのデータ(リーフ・データ)を削除します。
注意:
圧縮コンポジットによりディメンション化された変数に対しては、このキーワードを指定できません。
- varname
-
データを削除する変数の名前。
- aggmapname
-
使用するaggmapの名前。
圧縮コンポジットではない変数または$AGGMAPプロパティを持たない変数を消去するには、この句を指定する必要があります。ただし次の変数を消去する場合は、この句を指定する必要はありません。
-
圧縮コンポジットによってディメンション化される変数。デフォルトでは、CLEARによるこの変数の消去は、その圧縮コンポジットの構造に基づいて行われます。
-
$AGGMAPプロパティを持つ変数(ただし、そのプロパティにより指定されたaggmapをCLEARで使用する場合)。$AGGMAPプロパティを持つ変数に対してUSING句を指定しない場合、CLEARではそのプロパティにより指定されたaggmapが使用されます。
ディメンション化されたaggmapに対してこの句を使用する場合、CLEARコマンド内に指定する各変数のディメンション性はaggmapのディメンション性と一致している必要があります。つまり、すべての変数が、その定義内にaggmapの定義と同じディメンションを同じ順序で持つ必要があります。
-
- PARTITION partition_name
-
パーティション変数に対して、データを消去するパーティションの名前を指定します。
注意:
圧縮コンポジットの単一のパーティションのみを消去する場合、プロセス中に値を解凍するため、リソースが多量に消費され、処理に時間がかかります。
例
例9-65 変数のデータの消去
CLEARコマンドを使用することで、変数の保存済データすべてを簡単に削除できます。sales
変数を定義して、そこにデータをロードしたとします。その後、データのほとんどが変更されていることに気付きました。既存のデータを変更するよりも、このsales
変数を消去して、すべてのデータを再ロードする方が効率的です。次の文を使用して、これを実行します。
CLEAR ALL FROM sales
この例では、VALUESキーワードをデフォルトとして想定しています。したがって、sales
データはすべて削除され、NA
値に置換されます。
例9-66 集計データの消去
sales
変数およびunits
変数についての集計データがあり、その他のデータはすべて即時計算するように指定したとします。
sales
およびunits
変数には、time
、product
およびgeography
という3つの同じディメンションが、同じ順序で定義されています。そのため、これらは、次の定義を持つsales.agg
aggmapで集計されました。
DEFINE sales.agg AGGMAP <time, product, geography>
sales.agg
aggmapには次の内容が含まれています。
RELATION time.r PRECOMPUTES (time ne 'YEAR99') RELATION product.r PRECOMPUTES (product ne 'ALL') RELATION geography.r
sales
およびunits
の両方を集計すると、ユーザーがまったくアクセスしない地域があることがわかります。geography
は最も変化の遅いディメンションであるため、ユーザーが必要としない地域のデータを削除することにより、データの保存に必要なページ数を削減でき、これによって、アナリティック・ワークスペースのサイズの縮小と、パフォーマンスの向上が可能になります。
-
各ディメンションにステータスを設定します。ユーザーが必要とする地域は、ニューイングランド、ヨーロッパおよびオーストラレーシアのみです。次の文により、ユーザーが必要とする地域以外の地域の全期間および全製品を現行のステータスに設定します。つまり、次の文によって、ユーザーがアクセスする必要のないデータをすべてステータスに入れます。
LIMIT time TO ALL LIMIT product TO ALL LIMIT geography COMPLEMENT 'NewEngland' 'Europe' 'Australasia'
-
不要なデータを削除するには、次の文を使用します。
CLEAR STATUS PRECOMPUTES FROM sales units USING sales.agg
例9-67 キャッシュされたデータの消去
aggmapで即時計算が指定されており、かつaggmapがCACHE SESSION文を含む場合、データがキャッシュされます。
たとえば、sales.agg
aggmapに次の内容が含まれているとします。
RELATION time.r PRECOMPUTES (time ne 'YEAR99') RELATION product.r PRECOMPUTES (product ne 'ALL') RELATION geography.r CACHE SESSION
sales.agg
がCACHE SESSIONコマンドを含むことに注意してください。これにより、Oracle OLAPは一部のデータをユーザーからリクエストされた時点で計算し、それをセッション・キャッシュに保存します。sales
変数からこのデータを消去するには、次の文を使用します。
CLEAR ALL CACHE FROM sales
COMMIT
COMMITコマンドは、SQL COMMIT
文を実行するコマンドです。アナリティック・ワークスペース内で行った変更をCOMMITコマンドの実行時にコミットさせるにはまず、UPDATE文を使用してそのワークスペースを更新する必要があります。UPDATEによって、変更が一時的な作業領域からワークスペースが格納されているデータベース表へ移動します。表へ移動していない変更は、コミットされません。UPDATE文およびCOMMIT文を使用しない場合、セッション中に行ったアナリティック・ワークスペースの変更内容は、Oracleセッションの終了時に廃棄されます。
データベース・セッション内でSQL COMMIT
文を実行すると、セッションで行われたすべての変更(読取り/書込みアクセスでアタッチしたワークスペース内のすべての更新された変更を含む)がコミットされます。コミットされた変更はすべて、それ以降にワークスペースをアタッチする他のユーザーに対し表示されます。ただし、別のユーザーのUPDATE文およびCOMMIT文が、アタッチ済ワークスペースの使用中のビューに作用することはありません。
注意:
ユーザーの多くは、SQL*PlusまたはOLAP Worksheetを使用してDML文を実行します。これらのツールはどちらも、セッションの終了時に自動でCOMMIT文を実行します。
構文
COMMIT
例
例9-68 アナリティック・ワークスペースへのすべての変更の保存
次の文により、セッション内でそれまでに行われたアナリティック・ワークスペースへの変更がすべて永続的に保存されます。また、COMMITコマンドによって、Oracle OLAP外部のセッション内で行われたデータベースへの変更が保存されます。
UPDATE COMMIT
COMPILE
COMPILEコマンドは、プログラム、計算式、モデル、aggmapなどのコンパイル可能なオブジェクトのためのコンパイル済コードを、オブジェクトを実行することなく生成し、アナリティック・ワークスペースに保存するコマンドです。COMPILEの実行では、コンパイル時にフォーマット・エラーのチェックが行われるため、コードを実行する前のデバッグとしても使用できます。COMPILEは、現行の出力ファイルにエラーを記録します。
ただし、コンパイル可能なオブジェクトを実行する前に必ずしもCOMPILEコマンドを使用する必要はありません。COMPILEを使用しなくても、コンパイル可能なオブジェクトのコンテンツが入力または変更された後に最初にオブジェクトを実行する際、Oracle OLAPが自動でそれらのオブジェクトをコンパイルします。ユーザーは、処理のために応答時間がわずかに遅延することを除いて、この自動コンパイルにはほとんど気付きません。コンパイル可能なオブジェクトのコンパイル・ステータスについての情報を取得するには、ISCOMPILEDキーワードとともにOBJファンクションを使用します。
COMPILEを使用してオブジェクトを明示的にコンパイルするか、オブジェクトを実行することで自動で行うかにかかわらず、その後、同じセッションでオブジェクトを実行する際は、コードがすでにコンパイルされているため、常にコードの実行はより迅速になります。アナリティック・ワークスペースを更新およびコミットすると、コンパイル済のコードがアナリティック・ワークスペースの一部として保存され、その後のセッションで使用できます。そのため、その後のセッションでは、最初に実行するときにコードの実行が高速になります。
COMPILEを使用して、コンパイル可能なオブジェクトを実行せずにコードをコンパイルすることは、読取り専用のアナリティック・ワークスペース(使用はできるが、更新できないアナリティック・ワークスペース)の一部となるコードを記述している場合、特に有用です。
注意:
「プログラムのコンパイル」、「モデルのコンパイル」および「集計仕様のコンパイル」
構文
COMPILE object-name
使用上の注意
コンパイル・オプション
コンパイルにはいくつかのオプションがあります。これらのオプションは、「コンパイル・オプション」に記載されています。これらのオプションのうち1つ以上を設定することにより、コンパイル時のエラー・メッセージを非表示にしたり、THIS_AW
の一致文字列を指定した値に置換したりできます。
削除されたオブジェクト
アナリティック・ワークスペースでオブジェクトを削除するか、オブジェクトの名前を変更すると、Oracle OLAPにより、プログラム内のすべての文と、そのオブジェクトに依存するすべての計算式およびモデルについてのコンパイル済コードが自動的に無効化されます。削除されたか名前が変更されたオブジェクトを参照するコードを実行すると、Oracle OLAPがコードの再コンパイルを試行します。同じ名前で新しいオブジェクトが定義されていないかぎり、この時点でエラー・メッセージが表示されます。
無効化されたコードを含むプログラムを実行すると、1回に1つの文がコンパイルされ、実行されます。プログラム全体のコンパイル済コードを保存するには、COMPILEコマンドを使用して明示的にコンパイルします。
同一行内での複数のエラー
単一の文に複数のエラーがある場合、COMPILEが検出するのは最初のエラーのみです。ただし、後続の文のフォーマット・エラーのチェックは続行されます。
宣言エラー
COMPILEでは、プログラムやモデルの宣言エラーを別々に処理します。
-
プログラムに宣言エラーがある場合(実行可能コードの後にVARIABLEまたはARG文が続く場合など)、COMPILEによりトラップ可能エラーが通知されます。
-
モデルに宣言エラーがある場合(MODEL文内のDIMENSION文が代入文の後に続く場合など)は、トラップ可能エラーは通知されません。そのかわり、そのモデルは実行できません。
トラップ可能エラーの詳細は、TRAPコマンドを参照してください。
コンパイルの優位点
COMPILEコマンドを使用する明示的なコンパイルには、自動コンパイルと比較した場合、次のようなメリットがあります。
-
コンパイル可能なすべてのオブジェクトについて、COMPILEでは、オブジェクト内でコードを実行することなくコンパイル済コードを生成できます。
-
プログラムまたはモデルでは、自動コンパイルが診断するのは、エラーを含む最初の文の1つのエラーのみです。その後、エラー・メッセージが表示され、プログラムの実行またはモデルの解析が中止されます。そのため、プログラムまたはモデルを自動でコンパイルするたびに、1つのエラー・メッセージのみが表示されることになります。それに対し、COMPILEでは、プログラムまたはモデルのすべての文についてフォーマットが正しいかどうかをチェックし、複数のエラー・メッセージ(エラーを含む文ごとに1つのメッセージ)を生成します。(プログラムでは、一部のタイプの文はコンパイルできないため、それらは例外です。「COMPILEでは検出されないエラー」を参照)。COMPILEでは、少なくとも1つのエラーを含む文がすべて検出されるため、すべてのエラーを修正するまでのコードの編集回数が最小限になります。
-
モデルでは、モデルの実行前に、コンパイルの結果を検証したり、連立方程式を処理するオプションを設定する必要がある場合があります。
COMPILEでは検出されないエラー
COMPILEコマンドではコードは実際に実行されないため、オブジェクトを実際に実行してみると正常に実行されないコードもコンパイルされる可能性があるのですが、これは、正常に実行されない理由が、フォーマット・エラー以外の理由によるためです。プログラムの場合、たとえば次の文では、'joplin'が地区名でないにもかかわらず、コンパイルできます。
LIMIT district TO 'joplin'
文は正常にコンパイルされますが、実行時にはエラー・メッセージが表示されます。
コンパイルされない文
プログラム内の一部の文はまったくコンパイルされず、実行のたびに解釈されます。これには、アンパサンド置換を含む文、アナリティック・ワークスペース操作に関する文およびプログラムをコマンドとしてコールする文が含まれます。(プログラムをファンクションとしてコールする文またはCALLコマンドでコールする文はコンパイルされます。)
PRGTRACEオプション
PRGTRACEオプションを使用して、プログラム内のどの文がコンパイル済かを確認できます。PRGTRACEをYES
に設定してプログラムを実行すると、実行前に各文が現行の出力ファイルに記録されます。コンパイル済の文は等号によって識別されます。
(PRG= program-name) statement
未コンパイルの文はコロンによって識別されます。
(PRG: program-name) statement
複数のアナリティック・ワークスペース
別のアナリティック・ワークスペース内のオブジェクトを使用するコンパイル可能なオブジェクトをコンパイルする際は、現行のOracle OLAPセッションに2番目のアナリティック・ワークスペースをアタッチする必要があります。その後、そのアナリティック・ワークスペースまたは同じ名前および型のオブジェクトを持つアタッチされたもう1つのアナリティック・ワークスペースで、コンパイル可能なオブジェクトを実行します。Oracle OLAPにより、オブジェクトが、コンパイル可能なオブジェクトのコンパイルに使用するオブジェクトと同じ名前、型(変数、ディメンションなど)、データ型(INTEGER
、TEXT
など)およびディメンションを持っているかどうかがチェックされます。
アクティブなアナリティック・ワークスペースが複数ある場合、両方のアナリティック・ワークスペースに同じ名前のオブジェクトを存在させることはできません。たとえば、プログラムのアナリティック・ワークスペースが1つあり、製品TEAおよびCOFFEEに関するデータを保持する2つのアナリティック・ワークスペースがある場合、製品のアナリティック・ワークスペースがどちらもMONTHディメンションを持ち、プログラムがそのMONTHを参照することは可能です。ただし、セッション中は、MONTHディメンションが1つのみになるように、製品のアナリティック・ワークスペースは1回に1つのみをアタッチするようにします。
メモリー使用量
コードをコンパイルするには、プログラムで参照されるすべての変数(アンパサンド置換を含む行内の変数を除く)をメモリーにロードする必要があります。したがって、Oracle OLAPは、ユーザーが使用するすべての変数の定義を読み取って、オブジェクト定義の保存用に確保されているメモリーの空き領域にそれを保存します。コンパイル中に大きな変数がバインドされると、多量のメモリーが使用され、容量の大きいEXPTEMP
ファイルが作成されることがあります。大きな変数が多数バインドされると、場合によってはバインドに失敗して、Oracle OLAPによって「メイン・メモリーが不足しています」などのようなエラー・メッセージが記録されます。オブジェクト定義のメモリーへのロードの詳細は、LOADコマンドを参照してください。
例
例9-69 プログラムのコンパイル
次のコマンドは、myprog
プログラムをコンパイルするCOMPILE
コマンドの例です。
COMPILE myprog
myprog
プログラム内のLIMITコマンドでディメンションmonth
のスペルを間違えたとします。
LIMIT motnh TO LAST 6
COMPILE
コマンドがこの文を検出すると、次のメッセージが生成されます。
ERROR: (MXMSERR00) Analytic workspace object MOTNH does not exist. In DEMO!MYPROG PROGRAM: limit month to last 6
プログラムを編集してエラーを修正してから、コンパイルを再試行できます。
例9-70 プログラム・エラーの検出
この例では、2つのエラーを含むsalesrpt
というプログラムを使用します。
DEFINE salesrpt PROGRAM PROGRAM ROW WIDTH 80 CENTER Monthly Report BLANK 2 ROWW 'Total Sales' TOTAL(sales) END
次の文を使用して、プログラムをコンパイルできます。
COMPILE salesrpt
Oracle OLAPによってエラーが両方とも識別され、次のメッセージが記録されます。
ERROR: You provided extra input starting at 'REPORT'. In SALESRPT PROGRAM: ROW WIDTH 80 CENTER Monthly Report ERROR: ROWW is not a command. In SALESRPT PROGRAM: roww 'Total Sales' TOTAL(sales)
この時点でプログラムを編集し、Monthly Report
を一重引用符で囲み、ROWW
のスペルを直して、エラーを修正します。その後、プログラムを再度コンパイルして、コンパイルしたコードを使用しているアナリティック・ワークスペースの一部として保存できます。
CONSIDER
CONSIDERコマンドは、ある定義を現行定義として指定するためのコマンドです。このコマンドをLD、VNF、EQ、PROGRAM、MODEL、PERMITまたはPROPERTY文とともに使用することで、定義に説明、値名書式、計算式、プログラム、モデル、権限またはプロパティを追加できます。
構文
CONSIDER name
使用上の注意
定義の構成要素の置換
LD、VNF、EQ、PROGRAM、MODELまたはPERMIT文を使用して現行の定義に構成要素を追加する場合、その構成要素の既存の値は廃棄され、指定した新しい値に置換されます。PROPERTY文では、既存のプロパティ名に対して新しい値を指定するときにのみ、値が置換されます。定義は複数のプロパティを保持できます。
エラーとなるCONSIDER文
発行したCONSIDERコマンドが正常に実行されないと、後続のLD、VNF、EQ、PROGRAM、MODEL、PERMITまたはPROPERTY文でエラーが発生します。
暗黙的なCONSIDER文
DEFINE、COPYDFNおよびRENAMEの各コマンドでは、暗黙的なCONSIDERコマンドが自動で発行されます。
例
例9-71 アナリティック・ワークスペース・オブジェクトへの説明の追加
この例では、district
の定義に説明(LD)を追加します。LDを追加するには、まず、CONSIDERを使用してdistrict
を現行の定義にする必要があります。次の文により
CONSIDER district LD Sales Districts DESCRIBE district
次の定義が生成されます。
DEFINE district DIMENSION TEXT LD Sales Districts
CONTEXTコマンド
CONTEXTコマンドでは、Oracle OLAPセッション中にコンテキストを作成または使用できます。コンテキストとは、オブジェクト値を維持するための方法です。コンテキストを作成した後、ディメンションの現行のステータスの他、オプション、単一セル変数、値セットおよび単一セル・リレーションの値をそのコンテキストに保存できます。その後、オブジェクト値の一部またはすべてをコンテキストからリストアできます。コンテキストは、1つのOracle OLAPセッションの間のみ存在します。これは、アナリティック・ワークスペース・オブジェクトではないため、アナリティック・ワークスペースの一部として保存できません。特定のアナリティック・ワークスペース内のオブジェクトの保存済の値がコンテキストに含まれている場合、そのアナリティック・ワークスペースをデタッチすると、Oracle OLAPによってそれらのオブジェクトがコンテキストから削除されます。Oracle OLAPオプションについての保存済の値、およびまだアタッチされている他のアナリティック・ワークスペースからのオブジェクトの保存済の値は、コンテキストに維持されます。
コンテキストについての情報は、CONTEXTファンクションを使用して取得できます。
CONTEXTコマンドとCONTEXTファンクションは、PUSHおよびPOP文の代替機能です。ただし、CONTEXTでは保存したオブジェクト値にアクセスしてオブジェクト値を更新できますが、PUSHおよびPOPで行えるのは単に値を保存およびリストアすることのみです。
構文
CONTEXT context-name [ CREATE | APPLY | DISCARD | {SAVE |DROP|RESTORE} objects]
パラメータ
- context-name
-
コンテキストの名前を含むテキスト式。
- CREATE
-
context-nameに指定された名前でコンテキストを作成します。名前は一意である必要があります。
- SAVE
-
objectsに指定されたオブジェクトの値をコンテキストに保存します。コンテキストに保存できるのは、単一セルの変数およびリレーションです。ディメンション化された変数の値、ディメンション化されたリレーションまたはNAMEディメンションの値は、CONTEXTコマンドでは保存できません。これらのオブジェクトの値を保存しようとすると、エラー・メッセージが生成されます。
- APPLY
-
適切なオブジェクトを、コンテキストに保存されている対応するオブジェクトの値に設定します。
- DISCARD
-
コンテキストを削除します。
- SAVE
-
objectsに指定されたオブジェクトの値をコンテキストに保存します。
- DROP
-
objectsに指定されたオブジェクトの値をコンテキストから削除します。
注意:
セッション中にOracle OLAPオブジェクトを削除すると、コンテキストからも削除されます。
- RESTORE
-
objectsに指定されたすべてのオブジェクトを、コンテキストに保存されている対応するオブジェクトの値に設定します。
- objects
-
1つ以上のオブジェクト名。各オブジェクト名はスペースで区切ります。複数の名前をリストする際に1行に収まらない場合は、継続文字を使用してCONTEXTコマンドを別の行に継続できます。
使用上の注意
ネーミング規則
プログラミングの際は、関連付けられているアナリティック・ワークスペースの名前を基にして、コンテキストの名前を指定することをお薦めします。
例
例9-72 ディメンション・ステータスの保存
この例では、CONTEXTコマンドを使用してディメンションのステータスを保存およびリストアする方法を示します。次の文を実行すると、product
ディメンションの値のサブセットを含むコンテキストが作成されます。
LIMIT product TO 'Tents' 'Canoes' CONTEXT 'democontext1' CREATE CONTEXT 'democontext1' SAVE product
次の文で、product
をそのすべての値に制限し、それらをリストするレポートを生成します。
LIMIT product TO ALL REPORT product
これが生成されたレポートです。
PRODUCT ----------- Tents Canoes Racquets Sportswear Footwear
次の文で、保存済のコンテキストを適用して、コンテキスト内に含まれる値のみをリストするレポートを生成します。
CONTEXT 'democontext1' APPLY REPORT product
これが新しいレポートです。
PRODUCT ----------- Tents Canoes
CONTINUE
CONTINUEコマンドは、プログラム制御をFORループ処理またはWHILEループ処理の終端(DO/DOEND文の直前)に移動し、ループの繰返しを可能にするコマンドです。CONTINUEは、プログラム内でのみ、またFORまたはWHILEと組み合せた場合にのみ使用可能。
プログラム実行制御の詳細は、「プログラムのフロー制御」も参照してください。
構文
CONTINUE
例
例9-73 FORループにおけるコードのスキップ
あるプログラムの行で、次のように、地区の売上総額が5,000,000を超えているかどうかをテストするためにIF文が使用されているとします。売上がこの金額を超えていると、プログラムが続行して、その地区のレポートが作成されます。一方、地区の売上がその金額より少ない場合は、CONTINUE文によってプログラム制御がFORループの終わり(DOEND文の直前)に移動されます。その地区については行は作成されず、プログラムはステータス・リスト内の次の地区のテストを続行します。
... FOR district DO IF TOTAL(sales, district) LT 5000000 THEN CONTINUE ... "(report statements for districts with total sales above 5,000,000) DOEND ...
COPYDFN
COPYDFNプログラムは、アナリティック・ワークスペースでは新しいオブジェクトを定義し、現行のワークスペースまたはアタッチされているワークスペースでは指定したオブジェクトと同じ定義を使用するプログラムです。
COPYDFNでは、すべてのオブジェクト・タイプについてDEFINE、LDおよびPROPERTY行をコピーし、計算式オブジェクトの計算式(EQ)およびDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションの値名書式(VNF)をコピーします。COPYDFNによって、プログラムまたはモデルのテキストもコピーされます。COPYDFNでは、すべてのオブジェクトのPERMIT行、および計算式、プログラムまたはモデルのコンパイル済コードもコピーしません。
構文
COPYDFN newobject oldobject
例
例9-74 プログラムのコピー
次の文では、COPYDFNを使用してnewprog
というプログラムを作成しますが、このプログラムはoldprog
という既存のプログラムのコピーです。その後、newprog
を編集して、わずかに内容の異なるプログラムを作成できます。oldprog
プログラムには次のような定義があります。
DEFINE oldprog PROGRAM LD Shows total sales for the top five months from high to low PROGRAM LIMIT district TO 'BOSTON' LIMIT month TO TOP 5 BASEDON TOTAL(sales, month) REPORT TOTAL(sales, month) END
次の文により
COPYDFN newprog oldprog DESCRIBE newprog
newprog
に対し次の定義が作成されます。
DEFINE newprog PROGRAM LD Shows total sales for the top five months from high to low PROGRAM LIMIT district TO 'BOSTON' LIMIT month TO TOP 5 BASEDON TOTAL(sales, month) REPORT TOTAL(sales, month) END
CREATE_LOGICAL_MODEL
CREATE_LOGICAL_MODELプログラムを実行すると、OLAPキューブ・ディメンションの新しいモデルが作成され、その定義がOracleデータ・ディクショナリに追加されます。このプログラムの実行で行われる変更はトランザクショナルではなく、プログラムの一部としてCOMMITが自動的に実行されます。
関連項目:
構文
CALL CREATE_LOGICAL_MODEL ( logical_dim, model_name)
パラメータ
- CALL
-
CREATE_LOGICAL_MODELは引数を持つOLAP DMLプログラムであるため、OLAP DML CALL文を使用して起動します。
- logical_dim
-
変更するキューブ・ディメンションのOracleデータ・ディクショナリ名を示すテキスト式。
関連項目:
- model_name
-
Oracleデータ・ディクショナリでモデルに付ける名前を示すテキスト式。
DATE_FORMAT
DATE_FORMATコマンドは、DATETIME
、TIMESTAMP
、TIMESTAMP_TZ
、TIMESTAMP_LTZ
、DSINTERVAL
またはYMINTERVAL
のデータ型を持つオブジェクトの定義に、書式テンプレートを割り当てるコマンドです。
日時書式テンプレートは、文字列に格納された日時データの書式を記述するテンプレートです。このテンプレートによりデータベース内の値の内部表現が変更されることはありません。文字列を日付に変換する場合、Oracle OLAPがその文字列をどのように解釈するかがテンプレートで決定されます。
注意:
この文は、SQLの日時データ型に対応する日時データ型を持つオブジェクトについてのみ使用できます。OLAP DMLに特有である日付のみのデータ型を持つ時間ディメンションには使用できません。
定義に日時書式テンプレートを割り当てるには、最新の定義または現行のセッション中に検討された定義である必要があります。そうでない場合は、最初にCONSIDER文を使用し、現行の定義にする必要があります。
構文
DATE_FORMAT [datetime_format_template]
パラメータ
- datetime_format_template
-
1つ以上の日時書式要素で構成される式で、この式によって現行オブジェクトの値の入力や表示に使用する書式を指定します。テンプレートで指定できる要素については、表9-4を参照してください。テンプレートを作成する際は、次の点に注意してください。
-
日時書式テンプレートの全長は、22文字を超えることはできません。
-
入力書式モデルの場合、同じ書式項目は2回指定できません。また、類似した情報を表す書式項目を組み合せることもできません。たとえば、'SYYYY'と'BC'を同一の書式文字列内で使用することはできません。
-
日時の書式要素には、
TO_*
日時ファンクションで使用できないものもあります(表2-7を参照)。 -
日時の書式要素である
FF
、TZD
、TZH
、TZM
およびTZR
は、タイムスタンプや期間の書式モデルで使用できますが、元のDATETIME
書式モデルでは使用できません。 -
日時の書式要素の多くは、特定の長さに満たない場合、空白が追加されます。
templateを省略した場合、現行定義の既存の日付書式テンプレートが削除され、デフォルトの日時書式テンプレートが使用されます。日時書式テンプレートの説明については、「デフォルトの日時書式テンプレート」を参照してください。
次の表で、日時書式テンプレートについて説明します。
表9-4 日時の書式要素
要素 TO_*日時ファンクションでの使用 説明 - / , . ; : "text"
あり
句読点と引用符付きテキストは、結果で複製されます。
AD A.D.
あり
ピリオド付き/なしで西暦を示します。
AM A.M.
あり
ピリオド付き/なしで子午線インジケータを示します。
BC B.C.
あり
ピリオド付き/なしで紀元前を示します。
CC SCC
なし
世紀。
-
4桁の年の下2桁が01から99(01および99を含む)の場合、世紀はその年の上2桁に1を加えた値になります。
-
4桁の年の下2桁が00の場合、世紀はその年の上2桁と等しい値になります。
たとえば、2002は21を戻し、2000は20を戻します。
D
あり
週における日付(1から7)。
DAY
あり
曜日。この要素に使用する言語で最長の曜日の幅に満たない場合は空白を追加します。
DD
あり
月における日付(1から31)。
DDD
あり
年における日付(1から366)。
DL
あり
Oracle Databaseの
DATETIME
書式の拡張である長い日付書式で値を返します(NLS_DATE_FORMAT
パラメータの現行値)。日付の構成要素(曜日や月など)の表示が、NLS_TERRITORY
パラメータおよびNLS_LANGUAGE
パラメータによって決まるようにします。たとえば、AMERICAN_AMERICA
ロケールでは、これは書式'fmDay,
Month
dd,
yyyy'
を指定することと同じです。GERMAN_GERMANY
ロケールでは、'fmDay, dd.
Month yyyy
'形式で指定したのと同じです。制限: この書式は、
TS
要素でのみ、空白で区切って指定可能です。DS
あり
短い日付書式の値を戻します。日付の構成要素(曜日や月など)の表示が、
NLS_TERRITORY
パラメータおよびNLS_LANGUAGE
パラメータによって決まるようにします。たとえば、AMERICAN_AMERICA
ロケールでは、'MM/DD/RRRR
'形式で指定したのと同じです。ENGLISH_UNITED_KINGDOM
ロケールでは、'DD/MM/RRRR
'形式で指定したのと同じです。制限: この書式は、
TS
要素でのみ、空白で区切って指定可能です。DY
あり
曜日の省略形。
E
なし
年号(日本の元号暦、台湾暦およびタイ仏教暦)の省略形。
EE
なし
年号(日本の元号暦、台湾暦およびタイ仏教暦)の完全形。
FF [1..9]
あり
小数秒で、基数文字は印刷されません(
X
書式要素を使用して基数文字を追加します)。FF
の後に1から9の数字を使用して、戻される日時値の小数秒部分の桁数を指定します。数字を指定しない場合は、日時データ型に指定された精度またはデータ型のデフォルトの精度が使用されます。例:
'HH:MI:SS.FF'
SELECT TO_CHAR(SYSTIMESTAMP, 'SS.FF3') from dual;
FM
あり
先行および後続する空白を持たない値を返します。
関連項目: 『Oracle Database SQL言語リファレンス』の書式モデル修飾子に関する項
FX
あり
文字データと書式モデルの完全一致を必要とします。
関連項目: 『Oracle Database SQL言語リファレンス』の書式モデル修飾子に関する項
HH
あり
1日の時間(1から12)。
HH12
なし
1日の時間(1から12)。
HH24
あり
1日の時間(0から23)。
IW
なし
ISO規格に基づく、年における週(1から52または1から53)。
IYY IY I
なし
ISO年の最後の3桁、2桁または1桁。
IYYY
なし
ISO規格に基づく4桁の年。
J
あり
ユリウス日(紀元前4712年1月1日からの経過日数)。Jで指定する数字は、整数である必要があります。
MI
あり
分(0から59)。
MM
あり
月(01から12。1月は01)。
MON
あり
月の名前の省略形。
MONTH
あり
月の名前。この要素に使用する言語で最長の月名の幅に満たない場合は空白を追加します。
PM P.M.
なし
ピリオド付き/なしで子午線インジケータを示します。
Q
なし
年の四半期(1、2、3、4。1月から3月は1)。
RM
あり
ローマ数字による月(IからXII。1月はI)。
RR
あり
2桁のみを使用して、21世紀に20世紀の日付を格納できます。
関連項目: 『Oracle Database SQL言語リファレンス』のRR日時書式要素に関する項
RRRR
あり
年を丸めます。4桁または2桁で入力できます。2桁の場合、
RR
と同じ値が返されます。この機能を使用しない場合は、4桁の年を入力します。SS
あり
秒(0から59)。
SSSSS
あり
午前0時からの経過秒数(0から86399)。
TS
可
短い時間書式で値を戻します。時間の構成要素(時間や分など)の表示が、
NLS_TERRITORY
初期化パラメータおよびNLS_LANGUAGE
初期化パラメータによって決まるようにします。制限: この書式は、
DL
またはDS
要素でのみ、空白で区切って指定可能です。TZD
あり
夏時間情報。
TZD
値は、夏時間の情報を含むタイムゾーン文字列の省略形。TZR
で指定した地域と一致している必要があります。例:
PST
(アメリカ太平洋標準時)、PDT
(アメリカ太平洋夏時間)。TZH
あり
タイムゾーンの時間。(
TZM
書式要素を参照。)例:
'HH:MI:SS.FFTZH:TZM'
TZM
あり
タイムゾーンの分。(
TZH
書式要素を参照。)例:
'HH:MI:SS.FFTZH:TZM'
TZR
あり
タイムゾーン地域の情報。この値は、データベースでサポートされるタイムゾーン地域である必要があります。
例: US/Pacific
WW
なし
年における週(1から53)。第1週はその年の1月1日で始まり、1月7日で終了します。
W
なし
月における週(1から5)。第1週はその月の1日で始まり、7日で終了します。
X
あり
ローカル基数文字。
例:
'HH:MI:SSXFF'
Y,YYY
あり
指定の位置にカンマを付けた年。
YEAR SYEAR
なし
スペルアウトした年。
S
の場合、紀元前の日付の先頭にマイナス記号(-)が付加されます。YYYY SYYYY
あり
4桁の年。
S
の場合、紀元前の日付の先頭にマイナス記号が付加されます。YYY YY Y
あり
年の最後の3桁、2桁または1桁。
-
使用上の注意
デフォルトの日時書式テンプレート
デフォルトの日時書式テンプレートは、初期化パラメータNLS_DATE_FORMAT
で明示的に指定されるか、または初期化パラメータNLS_TERRITORY
で暗黙的に指定されます。セッションのデフォルトの日時書式は、ALTER
SESSION
文で変更できます。
Oracleでは、ISO規格に従って、日時書式要素IYYY、IYY、IY、IおよびIWによって返された値が計算されます。
これらの値と、日時書式要素YYYY、YYY、YY、YおよびWWによって返された値との違いについては、『Oracle Databaseグローバリゼーション・サポート・ガイド』の日付と時刻の書式に関する項を参照してください。
RR
日時書式要素は、YY
日時書式要素に似ていますが、より柔軟に、他の世紀に日付の値を格納できます。RR
日時書式要素では、年の下2桁のみを指定することにより、20世紀の日付を21世紀に格納できます。
TO_DATE
ファンクションとYY
日時書式要素を使用する場合、返される年の上2桁は常に、現在の年と同一になります。かわりにRR
日時書式要素を使用する場合、戻り値の世紀は、指定した2桁の年および現在の年の下2桁によって異なります。
詳細は次のとおりです。
-
指定した2桁の年が00から49である場合、次のようになります。
-
現在の年の下2桁が00から49の場合、返される年の上2桁は、現在の年と同一になる。
-
現在の年の下2桁が50から99の場合、返される年の上2桁は、現在の年の上2桁に1を加えた値になる。
-
-
指定した2桁の年が50から99である場合、次のようになります。
-
現在の年の下2桁が00から49の場合、返される年の上2桁は、現在の年の上2桁から1を引いた値になる。
-
現在の年の下2桁が50から99の場合、返される年の上2桁は、現在の年と同一になる。
-
次の表に、日時書式要素に付加できる接尾辞を示します。
表9-5 日付書式要素の接尾辞
接尾辞 | 意味 | 要素の例 | 値の例 |
---|---|---|---|
TH |
序数 |
|
|
SP |
フルスペルで表した数 |
|
|
SPTHまたはTHSP |
フルスペルで表した序数 |
|
|
日付書式要素の接尾辞を使用する際は、次の点に注意してください。
-
前述の接尾辞のいずれかを日時書式要素に追加する場合、戻り値は必ず英語になります。
-
日時の接尾辞は、書式の出力にのみ有効です。データベースに日付を挿入するためには使用できません。
いくつかの日時書式要素の機能は、Oracle Databaseを使用している国および言語に依存します。たとえば、次に示す日時書式要素は、スペルアウトした値を返します。
-
MONTH
-
MON
-
DAY
-
DY
-
BC、AD、B.C.またはA.D.
-
AM、PM、A.M.またはP.M.
これらの値を戻す言語は、初期化パラメータNLS_DATE_LANGUAGE
によって明示的に指定することも、初期化パラメータNLS_LANGUAGE
によって暗黙的に指定することもできます。日時書式要素YEAR
とSYEAR
によって戻される値は常に英語です。
日時書式要素D
は、週の何日目であるか(1から7)を返します。週の第1日目は、初期化パラメータNLS_TERRITORY
で暗黙的に指定されます。
関連項目:
グローバリゼーション・サポートの初期化パラメータの詳細は、日付書式パラメータに関する項を参照してください。
スペルアウトした単語、省略形またはローマ数字での大文字の使用方法は、対応する書式要素での大文字の使用方法に従います。たとえば、日時書式要素'DAY'の場合は'MONDAY'、'Day'の場合は'Monday'、'day'の場合は'monday'のように大文字が使用されます。
日時書式テンプレートには、次の文字を含めることができます。
-
ハイフン、スラッシュ、カンマ、ピリオドおよびコロンなどの句読点
-
二重引用符で囲んだ文字リテラル
これらの文字は、書式モデル内と同じ位置で戻り値に表示されます。
書式文字列では句読記号文字がある位置に、日付文字列で英数字が見つかった場合、Oracleはエラーを返します。たとえば、次の書式文字列ではエラーが返されます。
TO_CHAR (TO_DATE('0297','MM/YY'), 'MM/YY')
例
例9-75 オブジェクトの日時書式テンプレートの変更
次の文に示すように、デフォルトの日時書式テンプレートがDD_MON_RR
であるとします。
SHOW NLS_DATE_FORMAT DD-MON-RR
また、mydatetime
という変数を定義し、CURRENT_TIMESTAMPの値を割り当てるとします。
DEFINE mydatetime VARIABLE DATETIME mydatetime = CURRENT_TIMESTAMP
mydatetime
の値についてのレポートには、次の値が表示されます。この値は、NLS_DATETIME FORMATの設定で決定された書式を持ちます。次のように指定された順で、日、月および年の値のみが表示されます。
REPORT mydatetime MYDATETIME ----------- 02-FEB-07
ここで、次の文を発行することにより、mydatetime
の日付書式マップを変更します。
CONSIDER mydatetime DATE_FORMAT MON-RRRR-DD-HH24
その結果、mydatetime
の値の表示に、24時間形式の時間が含まれます。
REPORT mydatetime MYDATETIME -------------- FEB-2007-02-10
DBGOUTFILE
DBGOUTFILEコマンド(省略形はDOTF)は、デバッグ情報をファイルに送信するコマンドです。PRGTRACEおよびMODTRACEをYES
に設定すると、DBGOUTFILEにより生成されるファイルではプログラム、モデルまたは入力ファイルの各行とそれに対応する出力が併記されます。ECHOPROMPTをYES
に設定すると、デバッグ・ファイルにエラー・メッセージも含まれます。
構文
DBGOUTFILE {EOF | TRACEFILE | [APPEND] file-name [NOCACHE]}
パラメータ
- EOF
-
現行のデバッグ・ファイルを閉じます。それにより、デバッグ出力がファイルへ送信されなくなります。
- TRACEFILE
-
デバッグ出力をOracleのトレース・ファイルに送信するよう指定します。トレース・ファイルはTRACEFILEUNITオプションにより識別されます。
- APPEND
-
出力を既存のファイルの末尾に追加するかどうかを指定します。この引数を指定せず、指定された名前のファイルがすでに存在する場合は、ファイルの現在の内容が新しい出力に置き換えられます。
- file-name
-
デバッグ出力が書き込まれるファイルの名前を表すテキスト式。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。
注意:
ディレクトリ・オブジェクトはデータベースで定義され、ディレクトリおよびディレクトリ内のファイルへのアクセスを制御します。CDA文を使用して、カレント・ディレクトリ・オブジェクトを特定および指定できます。使用するデータベース・ユーザー名で読取りおよび書込み可能なファイルがあるディレクトリ・オブジェクトへのアクセス権については、Oracle DBAに問い合せてください。
- NOCACHE
-
行が実行されるたびにOracle OLAPがデバッグ・ファイルに書き込むことを指定します。このキーワードを指定しなかった場合、Oracle OLAPでは、ファイルのI/Oアクティビティを軽減するため、テキストの保存およびファイルへの書込みが定期的に実行されます。
NOCACHEキーワードは処理速度を大幅に低下させますが、このキーワードにより、各行が実行された直後にデバッグ・ファイルに確実に記録されるようになります。特定の行の後で異常終了するプログラムをデバッグしているときは、NOCACHEを使用することで、実行されたすべての行を確認できます。
例
例9-76 デバッグ・ファイルを使用したデバッグ
次の文で、カレント・ディレクトリ・オブジェクト内にdebug.txt
という名前の便利なデバッグ・ファイルが作成されます。
PRGTRACE = yes ECHOPROMPT = yes DBGOUTFILE 'debug.txt'
これらの文を実行後、プログラムをいつもどおりに実行できます。デバッグ・ファイルを閉じるには、次の文を実行します。
DBGOUTFILE EOF
次のサンプル・プログラムでは、最初のLIMITコマンドに構文エラーがあります。
DEFINE ERROR_TRAP PROGRAM PROGRAM TRAP ON traplabel LIMIT month TO FIRST badarg LIMIT product TO FIRST 3 LIMIT district TO FIRST 3 REPORT sales traplabel: SIGNAL ERRORNAME ERRORTEXT END
PRGTRACE
とECHOPROMPT
の両方をYES
に設定し、DBGOUTFILE
でデバッグ出力をdebug.txt
というファイルに送信するように設定すると、error_trap
プログラムを実行した時点で次のテキストがdebug.txt
ファイルに送信されます。
(PRG= ERROR_TRAP) (PRG= ERROR_TRAP) TRAP ON traplabel (PRG= ERROR_TRAP) (PRG: ERROR_TRAP) LIMIT month TO FIRST badarg ERROR: BADARG does not exist in any attached database. (PRG= ERROR_TRAP) traplabel: (PRG= ERROR_TRAP) SIGNAL ERRORNAME ERRORTEXT ERROR: BADARG does not exist in any attached database.
例9-77 デバッグ情報のファイルへの送信
次に示すのは、最初のLIMITコマンドに構文エラーのあるプログラムのテキストです。
DEFINE error_trap PROGRAM PROGRAM TRAP ON traplabel LIMIT month TO FIRST BADARG LIMIT product TO FIRST 3 LIMIT district TO FIRST 3 REPORT sales traplabel: SIGNAL ERRORNAME ERRORTEXT END
次の文で、デバッグ情報がdebug.txt
というファイルに送信されます。
DBGOUTFILE 'debug.txt'
PRGTRACEとECHOPROMPTの両方をYES
に設定すると、Oracle OLAPでは、ERROR_TRAPプログラムが実行された時点で、次のテキストをdebug.txt
ファイルに送信します。ファイルの最後の行は、デバッグ情報の記録を終了するためのコマンドです。
error_trap (PRG= ERROR_TRAP) (PRG= ERROR_TRAP) trap on traplabel (PRG= ERROR_TRAP) (PRG: ERROR_TRAP) limit month to first badarg ERROR: BADARG does not exist in any attached workspace. (PRG= ERROR_TRAP) traplabel: (PRG= ERROR_TRAP) signal errorname errortext ERROR: BADARG does not exist in any attached workspace. dbgoutfile eof
DEFINE
DEFINEコマンドは、アナリティック・ワークスペースに新規オブジェクトを追加するコマンドです。ここでは、DEFINEコマンドの概略を示します。続いて、各オブジェクト型を作成する次のようなDEFINEコマンドの使用方法について説明します。
関連項目:
構文
DEFINE name object-type attributes [AW workspace] [SESSION]
パラメータ
- name
-
新規オブジェクトの名前を示す
TEXT
式。名前の値を指定する際は、次のガイドラインに従ってください。-
名前は1から64文字で指定する必要があります。マルチバイト・キャラクタ・セットを使用している場合、必要なバイト数が64バイトを超えるときでも64文字まで指定できます。各文字には、英文字(
A
からZ
)、数字(0
から9
)、アンダースコア(_
)またはドット(.
)を使用できます。ただし、これらの文字の使用には次の制約があります。-
名前は、ドット記号(
.
)単独またはアンダースコア記号(_
)単独では構成できません。 -
名前では、予約語を重複できません。予約語の確認の詳細は、RESERVEDファンクションを参照してください。
-
名前の最初の文字は数字にできません。
-
2番目の文字が数字の場合、最初の文字はドット(
.
)にできません。
-
-
デフォルトでは、定義は現行のワークスペースに作成されます。アタッチされている別のワークスペースに定義を作成する場合は、nameに修飾オブジェクト名を指定するか、AW引数を使用してワークスペースを指定します。両方を一緒には使用できません。
-
注意:
作成するオブジェクトの名前が、アタッチされている別のワークスペース内の既存オブジェクトと同じ名前でも、Oracle OLAPでは警告を行いません。
- object-type
-
定義するオブジェクト型。デフォルトはVARIABLEです。オブジェクト型については、DEFINEコマンドのサブセクションに記載されています。
- attributes
-
属性はオブジェクト型ごとに異なります。各属性は、それぞれのオブジェクト型の項に一覧で示されています。
- AW workspace
-
オブジェクトを定義する先の、アタッチされたワークスペースの名前。nameに修飾オブジェクト名を使用することでも、現行ワークスペース以外のアタッチされたワークスペースを指定できます。nameに修飾オブジェクト名を指定する場合は、この句は使用できません。
- SESSION
-
オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、読取り専用アクセス権のあるEXPRESSアナリティック・ワークスペースに作成されます。オブジェクトは、現行のセッションの終了時に廃棄されます。
使用上の注意
DEFINE実行時におけるプログラム実行トリガー
TRIGGER_DEFINEプログラムを使用して、DEFINEコマンドを、自動でOLAP DMLプログラムを実行するイベントにすることができます。詳細は、「トリガー・プログラム」を参照してください。
NAMEディメンションのステータスに対するDEFINEの影響
値が制限されているNAMEディメンションでDEFINEコマンドを実行すると、NAMEのステータスが自動的にALL
に制限されます。
セッション・オブジェクトの表示
SESSIONキーワードを使用して作成されたオブジェクトは、現行のアナリティック・ワークスペースではなく、EXPRESS
という名前のアナリティック・ワークスペースに保存されます。したがって、現行のアナリティック・ワークスペースに対して操作を行う文(LISTNAMESなど)では、次のいずれかを実行しないかぎり、セッション・オブジェクトはリストされません。
-
文に
EXPRESS
アナリティック・ワークスペースを指定する(LISTNAMES AW EXPRESS
など) -
AW ATTACH EXPRESS
文を発行して、EXPRESS
アナリティック・ワークスペースを現行のアナリティック・ワークスペースにする。
DEFINE AGGMAP
DEFINEコマンドとともにAGGMAPキーワードを使用すると、アナリティック・ワークスペースに新しいaggmapオブジェクトが追加されます。aggmapオブジェクトとは、Oracle OLAPによる変数データの割当て方法または集計方法についての仕様です。
aggmapを定義することで、aggmapオブジェクトがアナリティック・ワークスペースに作成されますが、計算仕様は定義されません。aggmap仕様では、データの集計方法か割当て方法のいずれかを指定できます。
構文
DEFINE aggname AGGMAP [<dims...>][AW workspace][SESSION]
パラメータ
- aggname
-
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
- AGGMAP
-
aggmapを定義するときのオブジェクト型。
- dims
-
(オプションで、以前のリリースのソフトウェアとの互換性のために維持されています。)集計のためのaggmapオブジェクト(AGGMAP型のaggmap)を定義する場合のディメンションの名前。aggmapの定義または仕様では、結合ディメンションをベース・ディメンションとして指定できません。
- AW workspace
-
オブジェクトを定義する先の、アタッチされたワークスペースの名前。この引数の詳細は、DEFINEコマンドを参照してください。
- SESSION
-
オブジェクトを現行のセッションでのみ存在させることを指定します。この引数の詳細は、DEFINEコマンドを参照してください。
例
例9-78 集計用のAggmapの作成
次の文でsales
変数を定義するとします。
DEFINE sales VARIABLE <time, product, geography>
また、次の定義および仕様で、sales.agg
というaggmapを定義するとします。
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
集計仕様には、先行する3つのRELATION文およびCACHE文が含まれます。この例では、time
ディメンションの値がYear99
であるデータを除き、time
ディメンションのtime.r
階層のすべてのデータを集計するように指定しています。product
ディメンションの値がALL
であるデータを除き、product
ディメンションのproduct.r
階層のすべてのデータを集計されます。(この例では、product
ディメンションには、階層内のすべての製品を表すALL
というディメンション値があります。)geography
ディメンション値はすべて集計されます。さらに、CACHE STORE文によって、その場でロールアップされるデータを1回のみ計算し、同一のセッション内の他のアクセス要求のためにキャッシュに保存するように指定しています。
CACHE STOREが設定されている場合、セッション中に計算されたデータは意図しないうちに保存されるため、ユーザーがアナリティック・ワークスペースへの書込みアクセス権限を持っている必要はないことに注意してください。
この例では、Year99
time
値でディメンション化されているすべてのデータ値、またはALL
product
ディメンション値が、即時計算されます。
この時点で、次のように、sales.agg
aggmapをAGGREGATEコマンドとともに使用できます。
AGGREGATE sales USING sales.agg
例9-79 割当て用のAggmapの作成
次の文で定義したsales
変数があるとします。
DEFINE sales VARIABLE <time, product, geography>
あるソースから、time
およびproduct
ディメンション階層によって指定されるsales
変数のセルへデータを割り当てるため、次のaggmap定義および仕様を含むsalesalloc.txt
というASCIIディスク・ファイルを作成したとします。
DEFINE sales.alloc AGGMAP ALLOCMAP RELATION time.r OPERATOR EVEN RELATION product.r operator EVEN NAOPERATOR HEVEN SOURCEVAL ZERO CHILDLOCK DETECT END
sales.alloc
aggmapを使用中のワークスペースに含めるには、次の文を実行します。
INFILE 'salesalloc.txt'
これで、sales.alloc
aggmapが定義され、先行する2つのRELATION文、SOURCEVAL文およびCHILDLOCK文が含まれています。aggmapへの文のエントリは、END文で終了します。この例では、ソース値の最初の割当てはtime
ディメンション階層で行い、ソース値を各割当てレベルのターゲット・セル間で均等に分割するように指定しています。2番目の割当てはproduct
ディメンション階層で行い、ここでもソース値は各割当てレベルのターゲット・セル間で均等に分割され、割当てがデッドロックに遭遇した場合は、ソース値は、基礎値にNA
を持つセルも含め、階層ターゲット・セル間で均等に分割されます。SOURCEVAL文によって、割当て後に、ALLOCATEによって各ソース・セルの値をゼロに設定するよう指定しています。CHILDLOCK文によって、ALLOCATEで、ディメンション階層の親要素および子要素の両方についてロックの存在を検出するように指定しています。
この時点で、次のように、sales.alloc
aggmapをALLOCATEコマンドとともに使用できます。
ALLOCATE sales USING sales.alloc
この文では、基礎オブジェクトまたはターゲット・オブジェクトが指定されていないため、ALLOCATEはsales
変数を割当てのソース、基礎およびターゲットとして使用します。
DEFINE COMPOSITE
DEFINEコマンドとともにCOMPOSITEキーワードを使用すると、アナリティック・ワークスペースに新しい名前付きコンポジットが追加されます。概念として、コンポジットは次の2つの構造から成り立っていると考えられます。
-
コンポジット・オブジェクト自体。コンポジットには、ディメンション値の組合せ(つまり、コンポジット・タプル)が含まれており、Oracle OLAPでは、この組合せを使用して、コンポジットによってディメンション化される変数の構造を決定します。
-
コンポジット値とそのベース・ディメンション値との間の索引。
コンポジットでディメンション化される変数では、配列要素(つまり変数セル)はコンポジットのタプルに格納されるディメンション値についてのみがOracle OLAPによって作成され、ベース・ディメンション内のすべての値についてセルが作成されるわけではありません。変数のデータは、コンポジットの各タプルに対し、セルからセルへ順番に格納されます。データ格納の観点からは、コンポジット内のベース・ディメンション値の各組合せは、通常のディメンションの値と同様に扱われます。したがって、通常のディメンションとコンポジットを1つずつ持つ変数を定義する場合、変数のデータは、2次元の変数と同様に格納されます。コンポジットを使用することにより、変数に対して作成される要素の数が減り、データの格納がより効率化されます。
注意:
「名前のないコンポジット」で説明されているように、Oracle OLAPは、名前のないコンポジットの使用もサポートします。
構文
DEFINE name COMPOSITE <dims...> [AW workspace] [index-algorithm] [SESSION]
ここで、index-algorithmは、Oracle OLAPが、コンポジット値とそのベース・ディメンション値を関連付ける索引を作成する際に使用するアルゴリズムです。このオプションの引数を指定しない場合、SPARSEINDEXオプションで指定された値が使用されます。index-algorithmの有効な値は次のとおりです。
- BTREE
- BTREE64
- COMPRESSED
- HASH
パラメータ
- name
-
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
- COMPOSITE
-
名前付きコンポジットを定義するときのオブジェクト型。
- dims
-
コンポジットのベース・ディメンションとする、2つ以上のディメンションの名前。index-algorithmの値としてCOMPRESSEDを指定する場合は、1つ以上のディメンションが階層ディメンションである必要があります。
dims内のディメンションの順序は、index-algorithmに指定する値によって次のように異なります。
-
Bツリー・コンポジットまたはハッシュ・コンポジットについては、「変数の格納および文のループ処理におけるディメンションの順序の影響」で説明されているように、最も変化の速いディメンションから最も変化の遅いディメンションという順序でディメンションを指定します。
-
圧縮コンポジットについては、ディメンションを指定する順序は任意で構いません。AGGREGATEコマンドまたはAGGREGATEファンクションでFORCEORDERを指定しないかぎり、値が格納される順序はOracle OLAPにより選択され最適化されます。Oracle OLAPにより最適化された順序を確認するには、キューブ操作ログを表示します。
関連項目:
キューブ操作ログおよびDBMS_CUBE_LOGパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
コンポジットを定義する前に、まず、リストで使用するすべてのディメンションおよび名前付きコンポジットを定義しておく必要があります。リスト内にある名前のないコンポジットは、DEFINEを実行することで自動作成されます。
-
- AW workspace
-
オブジェクトを定義する先の、アタッチされたワークスペースの名前。この引数の詳細は、DEFINEコマンドを参照してください。
- BTREE
-
コンポジット値とベース・ディメンション値の関連付けとして、Bツリー索引の作成を指定します。BTREEは、コンポジットの標準的な索引付けメソッドです。BTREEコンポジットでディメンション化される変数では、配列要素(つまり変数セル)はコンポジットのタプルに格納されるディメンション値についてのみがOracle OLAPによって作成され、ベース・ディメンション内のすべての値についてセルが作成されるわけではありません。
- BTREE64
-
コンポジット値とベース・ディメンション値の関連付けとして、拡張性の高いBツリー索引の作成を指定します。BTREE64コンポジットでディメンション化される変数では、BTREEコンポジットと同様に、配列要素(つまり変数セル)はコンポジットのタプルに格納されるディメンション値についてのみ作成され、ベース・ディメンション内のすべての値についてセルが作成されるわけではありません。ただし、BTREEコンポジットとは異なり、BTREE64コンポジットでは2GBを超えるBツリーがサポートされます。
注意:
通常、BTREE64コンポジットは、2GBを超えるリレーショナル表からデータを移入する変数をディメンション化する場合に定義します。
- COMPRESSED
-
コンポジット値とベース・ディメンション値の関連付けとして、圧縮型索引の作成を指定します。1つ以上の階層ディメンションがdimsに指定され、これから集計される変数のコンポジットを作成する場合にのみ、COMPRESSEDを指定します。
圧縮コンポジットは、そのコンポジットを使用する変数の非NAの詳細データを識別するベース・ディメンション値の各セットにつき、1つのコンポジット・タプルを保持します。さらに、圧縮コンポジットでディメンション化された変数では、複数の子孫を持つ親を表すタプルに対してのみコンポジット内での物理的な位置が作成されることによって、変数、コンポジットおよびコンポジット索引内の冗長性が削減されます。その後、コンポジット構造とベース・ディメンション値の索引が作成され、このコンポジット構造が変数のディメンションとして使用されます。圧縮コンポジットの実際の構造は、Bツリー・コンポジットまたはハッシュ・コンポジットの構造より小さいため、圧縮コンポジットでディメンション化される変数も、Bツリー・コンポジットまたはハッシュ・コンポジットでディメンション化される変数よりも小さくなります。また、圧縮コンポジットの索引には複数の子孫を持つ親ノードのみが含まれるので、圧縮コンポジットの索引にはレベルが少なく、Bツリー・コンポジットの索引よりも小さくなります。実際のパフォーマンスは階層の深さやコンポジット内のディメンションの順序により異なりますが、圧縮コンポジットで定義された変数の集計は、通常、Bツリー・コンポジットまたはハッシュ・コンポジットで定義された変数の集計よりもはるかに高速です。
注意:
Oracle OLAPは、AGGREGATEコマンドまたはAGGREGATEファンクションの機能を使用して圧縮コンポジットによってディメンション化される変数のデータを圧縮します。したがって、1つ以上の圧縮コンポジットによりディメンション化されている変数を集計する場合には、特に注意が必要です。詳細は、「圧縮コンポジットによってディメンション化される変数の集計」を参照してください。
- HASH
-
コンポジット値とベース・ディメンション値の関連付けとして、ハッシュ索引の作成を指定します。HASHはほとんど使用しませんが、通常は、コンポジットに2つまたは3つのディメンションがある場合にのみ使用します。Bツリー・コンポジットまたはハッシュ・コンポジットでディメンション化される変数では、配列要素(つまり変数セル)はコンポジットのタプルに格納されるディメンション値についてのみがOracle OLAPによって作成され、ベース・ディメンション内のすべての値についてセルが作成されるわけではありません。
- SESSION
-
オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。
使用上の注意
共有コンポジット
単一のBツリー・コンポジットまたはハッシュ・コンポジットを使用して、複数の変数をディメンション化することが可能です(ただし、このような形では圧縮コンポジットを共有できません)。(このような形では圧縮コンポジットを共有できません。)Bツリー・コンポジットまたはハッシュ・コンポジットでディメンション化された変数の実際のスパース性は、そのコンポジットが非共有コンポジットおよび共有コンポジットのいずれであるかによって異なります。
-
非共有コンポジットは、1つの変数のディメンション化にのみ使用されるコンポジットです。いずれのコンポジット(Bツリー・コンポジット、ハッシュ・コンポジットおよび圧縮コンポジット)も、非共有コンポジットとして使用できます。非共有コンポジットは、それを使用する変数が移入される場合にのみ、移入されます。したがって、非共有コンポジットは、それを使用してディメンション化する変数のスパース性を完全に反映します。その変数についての、各非
NA
値のディメンション値の組合せのみを保持します。 -
共有コンポジットは、複数の変数のディメンション化に使用されるコンポジットです。共有コンポジットとして使用できるのは、Bツリー・コンポジットまたはハッシュ・コンポジットのいずれかで、圧縮コンポジットは共有できません。共有コンポジットの移入は、それを使用する変数のいずれかが移入されると行われます。共有コンポジットは、それを使用してディメンション化するすべての変数について、非
NA
値のディメンション値のあらゆる組合せを保持します。つまり、共有コンポジットは、それを使用してディメンション化するすべての変数のスパース性を反映します。したがって、通常、共有コンポジットでディメンション化する変数は、完全にスパースな変数ではありません。
変数のサイズが重要な場合で、同じディメンションでスパースな、ただし、スパース性のパターンが大幅に異なる複数の変数がある場合、それぞれの変数に対し別のコンポジットを定義します。
例9-80 名前付きのBツリー・コンポジットの作成
SPARSEINDEXの値がBTREE
であるとします。次の文で、2つのオブジェクト(Bツリー索引とベース・ディメンションmarket
を持つ名前付きコンポジット、およびmonth
ディメンションとmarket.product
コンポジットでディメンション化されたexpenses
という変数)が定義されます。
DEFINE market.product COMPOSITE <market product> DEFINE expenses DECIMAL <month market.product <market product>>
DEFINE DIMENSION
DEFINEコマンドとともにDIMENSIONキーワードを使用すると、アナリティック・ワークスペースに新しいディメンション・オブジェクトが追加されます。ディメンションは、データへの索引を提供する、値のリストです。
DEFINE DIMENSIONコマンドの構文は定義するディメンションの型によって異なるため、次のように4つの項目に分かれています。
-
DEFINE DIMENSION(単純): ディメンションを同じデータ型の一意の値で定義します。
-
DEFINE DIMENSION(DWMQY): 値が時間間隔(日、週、月、四半期または年)を表す、非階層ディメンションを定義します。
-
DEFINE DIMENSION(結合): ベース・ディメンションが重複する値を含まないか、異なるデータ型を持つ場合で、ディメンション値の組合せを明示的に指定する必要がある場合に、2つ以上の別のベース・ディメンションにまたがり1つのディメンションを定義します。
-
DEFINE DIMENSION CONCAT: ベース・ディメンションが重複する値または異なるデータ型を含む場合、またはOracle OLAPによってディメンション値の組合せを自動で移入する必要がある場合、2つ以上の別のベース・ディメンションにまたがり1つのディメンションを定義します。
-
DEFINE DIMENSION ALIASOF: 単純なディメンションに対して別名を定義します。
注意:
アナリティック・ワークスペースにディメンションを定義しても、アナリティック・ワークスペースにはディメンションの定義のみが追加され、ディメンション自体は移入されません。OLAP DMLを使用してディメンションを移入するには、OLAP DMLのSQL、FILEREADまたはMAINTAIN文を発行します。
DEFINE DIMENSION (単純)
DEFINE DIMENSION(単純)コマンドは、単純なディメンションを定義するコマンドです。変数が通常のディメンションによってディメンション化されている場合、Oracle OLAPでは、変数内に、変数のディメンション値の各セットについて1つの配列要素を作成します。単純なディメンションの値は、同じデータ型を持つ一意のデータ値です。単純なディメンションは、フラット・ディメンション、または階層の異なるレベルからの値を含む階層ディメンションです。
注意:
重複する値またはデータ型が異なる値を使用して階層ディメンションを作成するには、DEFINE DIMENSION CONCATで説明されているように、連結ディメンションを使用します。
構文
DEFINE name DIMENSION type [TEMP] [AW workspace] [SESSION]
ここで、typeは、ディメンションのデータ型です。typeの構文は、データ型に応じて次のように異なります。
- TEXT [WIDTH n]
- NTEXT [WIDTH n]
- ID
- INTEGER
- NUMBER [(precision , scale)]
- DATETIME [( truncation-code )]
TIMESTAMP
[( truncation-code )]TIMESTAMP_TZ
[( truncation-code )]TIMESTAMP_LTZ
[( truncation-code )]
パラメータ
- name
-
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
- DIMENSION
-
ディメンションを定義するときのオブジェクト型。
- TEXT
-
ディメンションの値をTEXTデータ型として指定し、このTEXTデータ型は、Oracle DatabaseにおけるCHARおよびVARCHAR2データ型に相当します。このデータ型は、データベース・キャラクタ・セットで1行に最大4000バイトを格納できます。
- NTEXT
-
ディメンションの値をNTEXTデータ型として指定し、このNTEXTデータ型は、Oracle DatabaseにおけるNCHARおよびNVARCHAR2データ型に相当します。このデータ型は、UTF-8文字コードで1行に最大4,000バイトを格納できます。
- ID
-
データベース・キャラクタ・セットで1行に最大8シングルバイト文字を格納する、特殊なテキスト・データ型を指定します。
- WIDTH n
-
TEXTまたはNTEXTディメンションの場合の、オブジェクトの各値の格納の幅(バイト単位)。幅の有効な値は
1
から4000
までです。特定のディメンションの値が同じようなサイズであることがわかっている場合にのみ、固定幅を指定します。指定された幅を超える値は、切り捨てられます。 - INTEGER
-
ディメンションの値を
INTEGER
データ型として指定します。数字が示す位置(1、2など)によって識別される値を持つディメンションのためのデータ型です。INTEGER
データ型は、ディメンションに文字値が含まれないことを意味します。可能な場合は、テキスト・データ型または時間間隔のデータ型を使用する方が簡単です。 - NUMBER
-
ディメンションの値を
NUMBER
データ型として指定します。NUMBER
ディメンションは、値を位置によって指定できず、値によってしか指定できないという点で、その他のディメンションと異なります。NUMBER
ディメンションの値を位置で指定するには、NUMBER
ディメンションに対しINTEGER
型のディメンション・サロゲートを定義します。 - precision
-
NUMBER
型の値が保持できる合計桁数。 - scale
-
NUMBER
型の値が保持できる、小数点より右の桁数。たとえば、精度7およびスケール2を指定した場合、ディメンションに指定可能な値の最高値は99999.99です。精度の値を指定し、スケールの値を指定しなかった場合、スケールは0となります。 - DATETIME
-
ディメンションの値を
DATETIME
データ型として指定します。 - TIMESTAMP
-
ディメンションの値を
TIMESTAMP
データ型として指定します。 - TIMESTAMP_TZ
-
ディメンションの値を
TIMESTAMP_TZ
データ型として指定します。 - TIMESTAMP_LTZ
-
ディメンションの値を
TIMESTAMP_LTZ
データ型として指定します。 - truncation_code
-
表8-13に示す書式モデルを指定するテキスト式。書式モデルは、日時の値をどのように切り捨てるかを示します。
- TEMP
-
ディメンションの値が一時的なもので、現行のセッションのみで保持できることを示します。ディメンションは現行のワークスペース内に定義を持ち、現行のセッションの間のみ値を保持できます。ただし、更新およびコミットすると、ディメンションの定義は保存されます。セッションを終了するか、別のワークスペースに切り替えると、データ値は廃棄されます。ワークスペースを開始する時点では常に、一時ディメンションの値は
NA
です。 - AW workspace
-
ディメンションを定義する先の、アタッチされたアナリティック・ワークスペースの名前。ディメンションによってディメンション化するオブジェクトはすべて、同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
- SESSION
-
オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。
使用上の注意
単純なディメンションによりディメンション化される変数のNA値
変数が通常のディメンションによってディメンション化されている場合、Oracle OLAPでは、変数内に、変数のディメンション値の各セットについて1つの配列要素を作成します。配列要素が空の場合は、その要素にNA
値が含まれているとみなされます。場合によっては、これが原因でスパースな変数(つまり、配列要素が空である割合が比較的高い変数)になることがあります。スパース性には、次の2つのタイプがあります。
-
制御されたスパース性: 1つ以上のディメンションの範囲にデータがない場合に発生します。たとえば、過去数か月にわたりデータがない
month
によってディメンション化される、新しい変数などです。 -
ランダムなスパース性: ディメンション値のある組合せがデータをまったく持たない場合に発生します。たとえば、ある地区では特定の製品のみが販売され、他の製品のデータが存在しない場合があります。他の地区ではそれらの製品とともに他の製品群も販売されている場合があります。
アナリティック・ワークスペースのページ容量に相当する数の配列要素が連続してNA
値を持つ場合、Oracle OLAPはそれらのNA
値を実際には格納せず、内部で管理します。ただし、アナリティック・ワークスペースのページに正常な値とNA
値が混在する場合は、それらすべての値を格納します。変数を1つ以上のコンポジットまたは結合ディメンションでディメンション化することにより、NA
値を持つ配列要素の数を減らすことができます。DEFINE COMPOSITEコマンドおよびDEFINE DIMENSION(結合)コマンドを参照してください。
例
例9-81 単純なディメンションの定義
この例では、アナリティック・ワークスペースにディメンションcity
を追加します。定義した直後に、そのオブジェクトに説明を追加できます。(CONSIDERおよびLD文を使用して、後で説明を追加することもできます。)ディメンションcity
を定義した後、MAINTAIN文で値を追加できます。
次の文により
DEFINE city DIMENSION ID LD List of cities MAINTAIN city ADD 'Boston' 'Chicago' 'Dallas' 'Seattle' DESCRIBE city
次の定義が生成されます。
DEFINE city DIMENSION ID LD List of cities
DEFINE DIMENSION (DWMQY)
DEFINE DIMENSION(DWMQY)コマンドは、値が時間間隔を表すDWMQYディメンション(型がDAY、WEEK、MONTH、QUARTERまたはYEARのディメンション)を定義するコマンドです。DWMQYディメンションを定義した後で、VNF文を使用して、ディメンションの定義に値名書式を追加できます。VNFコマンドは、ディメンション値を入力するときの書式と、それらの値を出力に表示するときの書式を制御します。
注意:
この型のディメンションでは集計は行えないため、時系列の集計が必要な場合は、時間ディメンションをDWMQYディメンションとして定義しないでください。かわりに、時間ディメンションをTEXT
型またはNTEXT
型の階層ディメンションとして定義します。
構文
DEFINE name DIMENSION dwmqy [TEMP] [AW workspace] [SESSION]
ここで、dwmqyは、ディメンションの期間です。dwmqyの有効な型は、DAY、WEEK、MONTH、QUARTERおよびYEARです。各型は、ディメンションの個々のディメンション値により表される期間の範囲を示します。dwmqyの構文は、型に応じて次のように異なります。
- DAY
- [multiple] WEEK [BEGINNING phase ] [ ENDING phase ]
- [multiple] MONTH [BEGINNING phase ] [ ENDING phase ]
- QUARTER [BEGINNING phase ] [ ENDING phase ]
- YEAR [BEGINNING phase ] [ ENDING phase ]
パラメータ
- name
-
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
- DIMENSION
-
ディメンションを定義するときのオブジェクト型。
- multiple
-
WEEKおよびMONTH型について、複数の週または複数の月にわたる期間を指定します。WEEKキーワードとともに使用する場合、multipleは2から52までの
INTEGER
です。MONTHキーワードとともに使用する場合、multipleは2、3、4または6です。 - BEGINNING phase
- ENDING phase
-
WEEK、MONTH、QUARTERまたはYEARディメンションの開始フェーズまたは終了フェーズを指定します。
-
単一の週では、phaseは曜日名(DAYNAMESオプション内の名前)または日付です。
-
複数の週では、phaseは日付でなければなりません。
-
月、四半期または年では、phaseは、月名(MONTHNAMESオプション内の名前)または日付で表現された月です。
phaseを日付で指定する場合は、DATEデータ型の変数値で有効な任意の入力スタイルを使用し、月、日および年を一重引用符で囲んで指定します。意味があいまいな形式(
'03 05 97'
など)で日付が指定されている場合、その日付はDATEORDERオプションの現行の設定に基づいて解釈されます。注意:
WEEK型の複数期間のディメンションを定義して、BEGINNINGまたはENDING引数を指定しない場合、DEFINEにより、
'31DEC1899'
の日付で始まるフェーズが自動で指定されます。 -
- TEMP
-
ディメンションの値が一時的なもので、現行のセッションのみで保持できることを示します。ディメンションは現行のワークスペース内に定義を持ち、現行のセッションの間のみ値を保持できます。ただし、更新およびコミットすると、ディメンションの定義は保存されます。セッションを終了するか、別のワークスペースに切り替えると、データ値は廃棄されます。ワークスペースを開始する時点では常に、一時ディメンションの値は
NA
です。 - AW workspace
-
ディメンションを定義する先の、アタッチされたアナリティック・ワークスペースの名前。ディメンションによってディメンション化するオブジェクトはすべて、同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
- SESSION
-
オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。
使用上の注意
DWMQYディメンション間の暗黙的なリレーション
DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションを2つ以上定義すると、Oracle OLAPでは、ディメンションの値の間に暗黙的なリレーションを自動で定義します。たとえば、MONTH型のディメンションとYEAR型のディメンションを定義すると、特定の年に属するすべてのMONTH値とYEARディメンションの呼応する値とを関連付けるリレーションが、Oracle OLAPによって自動で定義されます。
会計年度カレンダによりデータを編成するためのBEGINNINGまたはENDINGフェーズの使用方法
MONTH、QUARTERおよびYEAR型のディメンションでは、データを会計年度カレンダで編成する場合、BEGINNING phaseまたはENDING phase引数が特に有用です。
MONTHおよびQUARTER型のディメンションに対しフェーズを指定することで、1つの年の最初の期間または最後の期間である期間を識別できます。たとえば、MONTH型のディメンションを、6月を終了フェーズとして定義すると、6月はその年の12番目の月として識別されます。QUARTER型のディメンションで6月を終了フェーズとすると、6月に終了する四半期はその年の4番目の四半期として識別されます。ディメンションに期間コードを含むVNFを指定すると、その年の期間に従ってディメンション値を入力したり、レポートしたりできます。
デフォルトでは、WEEK型のディメンション内の単一の週または複数の週は、土曜日で終了します。BEGINNING phaseまたはENDING phase引数により、各期間が開始または終了する曜日を指定できます。複数の週にわたる期間については、週を期間にグループ化する際の開始日付や終了日付も、このフェーズ引数で制御します。デフォルトでは、複数の週をグループ化する際の開始時点は、1899年12月31日(日曜日)です。
ただし、フェーズ引数は、1つの年の最初の期間としてカウントされる期間は決定しません。WEEK型のディメンションの場合、ある暦年の期間1は常に、その年内に終了する最初の期間です。たとえば、WEEK型のディメンションを、1997年6月7日に終了する4週期間で指定するとします。DEFINEは、この日付から後方または前方に機能し、各週を4週ずつの期間に形成します。1997年では、期間1は1996年12月22日に開始し1997年1月18日に終了する期間となります。
例
例9-82 YEARディメンションの定義
次の文で、6月30日に終了する会計年度の値を保持する、YEAR型のディメンションが定義されます。
DEFINE fyear DIMENSION YEAR ENDING june
ディメンションを定義した後、このディメンションに説明およびVNF(値名書式)を追加できます。ディメンションへ値を追加するには、MAINTAIN文を使用します。
LD Fiscal years ending June 30 VNF 'FY<ff>' MAINTAIN fyear ADD 'FY97' 'FY00'
例9-83 ENDING句の日付に対するデフォルトの句の使用方法
この例では、BEGINNING phaseまたはENDING phase引数を指定しないでWEEK型の複数期間ディメンションを定義した場合、DEFINEによって、日付'31DEC1899'
に始まるフェーズが自動的に指定される様子を示します。次の文を発行するとします。
DEFINE twoweek DIMENSION 2 WEEK DESCRIBE TWOWEEK
twoweek
に対しDESCRIBE文を発行すると、次の出力が生成されます。
DEFINE twoweek DIMENSION 2 WEEK ENDING '13Jan1900'
DEFINE DIMENSION (結合)
DEFINE DIMENSION(結合)コマンドは、結合ディメンションを定義するコマンドです。
概念として、結合ディメンションは次の2つの構造から成り立っていると考えられます。
-
ディメンション・オブジェクト自体。ディメンションの値は、2つ以上の他のディメンションの値の組合せ(つまり、結合タプル)であり、Oracle OLAPではこの組合せを使用して、結合ディメンションによってディメンション化されるすべての変数の構造を決定します。
-
結合ディメンション値とそのベース・ディメンション値との間の索引。
コンポジットは、ディメンション値の組合せのリストを使用して変数をディメンション化するために使用できる、もう1つのオブジェクトです。コンポジットと結合ディメンションの主な違いについては、「結合ディメンションとコンポジットの違い」を参照してください。
構文
DEFINE name DIMENSION <dims. . .> index-algorithm [AW workspace] [SESSION]
ここで、index-algorithmは、Oracle OLAPが、結合ディメンションへの索引を作成する際に使用するアルゴリズムです。index-algorithmの有効な値は次のとおりです。
- BTREE
- NOHASH
- HASH
パラメータ
- name
-
定義する結合ディメンションの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
- DIMENSION
-
結合ディメンションを定義するときのオブジェクト型。
- dims
-
結合ディメンションのベース・ディメンションとする、事前に定義されている1つ以上のディメンション。「変数の格納および文のループ処理におけるディメンションの順序の影響」で説明されているように、最も変化の速いディメンションから最も変化の遅いディメンションという順序でディメンションを指定します。ディメンション・リストは山カッコで囲む必要があります。
通常、結合ディメンションのベース・ディメンションは単純なディメンションですが、別の結合ディメンションを使用することもできます。ただし、dimsの値の1つに単純なディメンションがある場合、dimsには、同じ単純なディメンションをベースの1つとして持つ結合ディメンションまたは連結ディメンションは指定できません。
- BTREE
-
結合値とベース・ディメンション値の関連付けとして、Bツリー索引の作成を指定します。通常は、結合ディメンションの索引アルゴリズムとしてBTREEを指定します。
ヒント:
BTREEまたはNOHASHのいずれを指定するべきかわからない場合は、NOHASHを使用します。これは、NOHASH結合からBTREE結合へはCHGDFN文を使用していつでも変更できる一方、CHGDFN文を使用してBTREE結合からNOHASH結合に変更できるのは、結合がもともとNOHASH結合として定義されたものである場合に限られるためです。
- NOHASH
-
Oracle OLAPでは結合ディメンションの索引を作成しないかわりに、内部構造を使用して、結合値をベース・ディメンション値に関連付けることを指定します。NOHASHでは索引が作成されないため、結合ディメンションに関連付けられた構造の数は減少するため、多くの場合、結合ディメンションの値をロードおよびアクセスする時間が短縮されます。ただし、NOHASHは複雑なアルゴリズムであり、しばしば予期しないパフォーマンスに繋がるため、あまり使用されません。
- HASH
-
(デフォルト、非推奨。)結合値とベース・ディメンション値の関連付けとして、ハッシュ索引の作成を指定します。
ヒント:
HASHはデフォルトですが、通常、結合ディメンションの索引アルゴリズムにはBTREEを指定します。結合ディメンションが3つより多いベース・ディメンションを持つ場合は、パフォーマンスを最高にするために、HASHのかわりにBTREEを使用します。
- AW workspace
-
ディメンションを定義する先の、アタッチされたアナリティック・ワークスペースの名前。ディメンションによってディメンション化するオブジェクトはすべて、同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
- SESSION
-
オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。
使用上の注意
結合ディメンションとコンポジットの違い
ディメンション値の組合せのリストを使用して変数をディメンション化するには、コンポジットまたは結合ディメンションのいずれかを使用できます。どちらのタイプのオブジェクトを使用するかを決める際は、次の点に注意してください。
-
オブジェクトの移入のメンテナンス: 結合ディメンションは、ほとんどの制御を提供します。一方、コンポジットは、使用に際し次のように非常に便利です。
-
コンポジットに格納するディメンション値の組合せを、Oracle OLAPが決定する。コンポジットでディメンション化された変数が移入される場合は、Oracle OLAPが自動でコンポジットを移入します。
-
コンポジットに格納するディメンション値の組合せを、ユーザーが決定する。他のディメンションを移入およびメンテナンスするのと同じ方法で、MAINTAIN文を使用して、結合ディメンションを明示的に移入およびメンテナンスする必要があります。
-
-
ディメンション操作: ディメンション操作は結合ディメンションに対しては実行できますが、コンポジットにはできませんが、コンポジットのベース・ディメンションにのみディメンション操作を実行できます。たとえば、結合ディメンションにはLIMIT操作を実行できますが、ビューをコンポジット値のサブセットに制限するにはコンポジットのベース・ディメンションを制限する必要があり、さらに、結合ディメンションを使用してリレーションを定義できますが、コンポジットではできません。
コンポジットの詳細は、DEFINE COMPOSITEコマンドを参照してください。
結合ディメンションとベース・ディメンションの関係
結合ディメンションの値はベース・ディメンションと関連付けられています。結合ディメンションによりディメンション化されている変数のデータは、結合値の組合せ、ベース・ディメンションの個々の値、または結合ディメンションのベース・ディメンションのいずれかに関連付けられている他のディメンションの値を使用して指定できます。
ディメンションの値のサブセットの定義
ベース・ディメンションが1つしかない結合ディメンションを定義できますが、これによって、そのディメンションの値のサブセットを作成できます。ベース・ディメンションが1つでも、山カッコで囲む必要があります。
式における結合ディメンション値の使用方法
式において結合ディメンションの値を参照するには、次のガイドラインに従って値を指定します。
-
ディメンション値の指定全体を山カッコで囲み、さらに一重引用符で全体を囲みます。各値を個別に一重引用符で囲まないでください。
-
ベース・ディメンション値には、大文字と小文字を正しく使用します。
-
ディメンション値の指定に空白が埋め込まれたテキスト値が含まれる場合、それらのディメンション値をカンマで区切る必要があります。
たとえば、item.org
が、ベース・ディメンションitem
およびorg
を持つ結合ディメンションである場合、item.org
の値を参照するには次の書式を使用します。
'<Expenses, Direct Sales>'
例
例9-84 結合ディメンションの定義
単純なディメンションcity
、state
およびregion
を定義および移入し、それらに次の値があるとします。
CITY STATE REGION --------- ---------- ------ Princeton New Jersey East Newark New Jersey Central Patterson New York New York Illinois Chicago Indiana
cityandstate
という結合ディメンションを定義して、それに値を追加するには、次のOLAP DML文を使用します。
DEFINE cityandstate DIMENSION <city state> MAINTAIN cityandstate add <'Princeton' 'New Jersey'> MAINTAIN cityandstate add <'Newark' 'New Jersey'> MAINTAIN cityandstate add <'Patterson' 'New Jersey'> MAINTAIN cityandstate add <'New York' 'New York'> MAINTAIN cityandstate add <'Chicago' 'Illinois'> MAINTAIN cityandstate add <'Princeton' 'Indiana'>
DEFINE DIMENSION CONCAT
DEFINE DIMENSION CONCATコマンドは、連結ディメンションを定義するコマンドです。連結ディメンションは、重複する値または異なるデータ型を持つ一連のベース・ディメンションを1つのディメンションにグループ化するディメンションです。
重複するデータ値がある場合は、非一意の連結ディメンションを作成します。たとえば、「New York」が都市レベルと州レベルの両方の値であるような場合、地理階層に対し非一意のディメンションを作成します。すべてのベース・ディメンションのデータ値がすべて一意である場合は、一意の連結ディメンションを作成できます。
ヒント:
連結ディメンションの値を指定する方法は、連結ディメンションが一意の連結ディメンションか非一意の連結ディメンションかによって異なります。詳細は、「CONCATディメンションの値の指定」を参照してください。
構文
DEFINE name DIMENSION CONCAT(basedimlist. . .)[UNIQUE] [TEMP] [AW workspace] [SESSION]
パラメータ
- name
-
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
- DIMENSION CONCAT
-
連結ディメンションを定義するときのオブジェクト型。
- basedimlist
-
連結ディメンションをベース・ディメンションとする、事前に定義されている1つ以上のディメンション。「変数の格納および文のループ処理におけるディメンションの順序の影響」で説明されているように、最も変化の速いディメンションから最も変化の遅いディメンションという順序でディメンションを指定します。ディメンション・リストはカッコで囲む必要があります。
ベース・ディメンションとして使用できるディメンションの型は、定義する連結ディメンションが一意か非一意かによって異なります。
-
非一意の連結ディメンションを定義する場合は、ベース・ディメンションとして、任意のデータ型の単純なディメンション、結合ディメンションまたは別の連結ディメンションを指定できます。
-
一意の連結ディメンションを定義する場合、すべてのベース・ディメンションのデータ値が一意であり、ベース・ディメンションのいずれにおいても重複していないという条件を満たしていれば、ベース・ディメンションとしてTEXT型またはID型の単純なディメンション、または別の一意の連結ディメンションを指定できます。
連結ディメンションのベース・ディメンションとしてコンポジットは指定できません。
単純なディメンションおよび結合ディメンションは、連結ディメンションの最下位のコンポーネントです。連結ディメンションを定義する際に連結ディメンションをベース・ディメンションとして指定すると、内部連結のベース・ディメンションは外部連結のコンポーネントのディメンションになります。
連結ディメンションのコンポーネントのディメンションでは、同一のディメンションは1回しか使用できません。ただし、連結では、結合ディメンションは1つの分割できない構成単位であり、Oracle OLAPは連結の定義において結合のベース・ディメンションを検討しません。したがって、ある単純なディメンションが結合のベース・ディメンションであり、その結合とその同じ単純なディメンションが連結ディメンションのベース・ディメンション(またはコンポーネント)であることが可能です。
たとえば、次の定義は許可されます。
DEFINE conjointdim.a DIMENSION <simpledim.b, simpledim.c> DEFINE conjointdim.b DIMENSION <simpledim.a, simpledim.b> DEFINE conjointdim.c DIMENSION <simpledim.a, conjointdim.a> DEFINE concatdim.a DIMENSION CONCAT (simpledim.a, conjointdim.a) DEFINE concatdim.b DIMENSION CONCAT (simpledim.a, conjointdim.b) DEFINE concatdim.c DIMENSION CONCAT (simpledim.b, conjointdim.b) DEFINE concatdim.d DIMENSION CONCAT (simpledim.a, concatdim.c)
concatdim.a
の定義では、ベース・ディメンションはsimpledim.a
とconjointdim.a
です。concatdim.d
の定義では、ベース・ディメンションはsimpledim.a
とconcatdim.c
です。concatdim.d
のコンポーネントのディメンションは、simpledim.a
、simpledim.b
およびconjointdim.b
です。simpledim.a
およびsimpledim.b
はconjointdim.b
のベース・ディメンションですが、結合のベース・ディメンションは連結のコンポーネントのディメンションではないため、コンポーネントのディメンションとしては1回しか使用されません。しかし、次の定義は、同じ単純なディメンションが、
concatdim.e
のベース・ディメンションであるとともに、(concatdim.b
のベース・ディメンションであることから)concatdim.e
のコンポーネントでもあるため、許可されません。DEFINE concatdim.e DIMENSION CONCAT (simpledim.a, concatdim.b)
注意:
basedimlist引数内の単純なディメンション、およびbasedimlist内の結合ディメンションまたは連結ディメンションのベース・ディメンションである単純なディメンションは、INTEGERデータ型を持つことはできません。
-
- UNIQUE
-
ベース・ディメンションのテキスト値を一意とすることを指定します。このキーワードを指定した場合、basedimlistにリストされるディメンションは、テキスト型またはID型の単純なディメンション、または一意の連結ディメンションのいずれかである必要があります。
- TEMP
-
ディメンションの値が一時的なもので、現行のセッションのみで保持できることを示します。ディメンションは現行のワークスペース内に定義を持ち、現行のセッションの間のみ値を保持できます。ただし、更新およびコミットすると、ディメンションの定義は保存されます。セッションを終了するか、別のワークスペースに切り替えると、データ値は廃棄されます。ワークスペースを開始する時点では常に、一時ディメンションの値は
NA
です。 - AW workspace
-
ディメンションを定義する先の、アタッチされたアナリティック・ワークスペースの名前。ディメンションによってディメンション化するオブジェクトはすべて、同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
- SESSION
-
オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。
例
例9-85 連結ディメンションの定義
単純なディメンションcity
、state
およびregion
を定義および移入し、それらに次の値があるとします。
CITY STATE REGION --------- ---------- ------ Princeton New Jersey East Newark New Jersey Central Patterson New York New York Illinois Chicago Indiana
次のOLAP DML文を使用して、これらのディメンションに基づく連結ディメンションを定義します。
DEFINE geog DIMENSION CONCAT(region cityandstate)
geog
の値は次のとおりです。
<REGION: East> <REGION: Central> <CITYANDSTATE: <Princeton New Jersey>> <CITYANDSTATE: <Newark New Jersey>> <CITYANDSTATE: <Patterson New Jersey>> <CITYANDSTATE: <New York New York>> <CITYANDSTATE: <Chicago Illinois>> <CITYANDSTATE: <Princeton Indiana>>
DEFINE DIMENSION ALIASOF
DEFINE DIMENSION ALIASOFコマンドは、単純なディメンションのディメンション別名を定義するコマンドです。別名ディメンションは、そのベース・ディメンションと同じ型および値を持ちます。通常、ある変数を同じディメンションで2回ディメンション化する必要がある場合に、別名ディメンションを定義します。
また、LIMIT文を使用して別名ディメンションを制限し、別名ディメンションを使用して変数やリレーションを定義できます。ただし、別名ディメンションは直接的にメンテナンスできませんが、かわりに、MAINTAINを使用してそのベース・ディメンションをメンテナンスします。
構文
DEFINE name DIMENSION ALIASOF dimension [TEMP] [AW workspace] [SESSION]
パラメータ
- name
-
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
- DIMENSION ALIASOF
-
ディメンションを定義するときのオブジェクト型。定義するディメンションが別のディメンションの別名であることを示します。
- dimension
-
別名を定義する単純なディメンションの名前。このディメンションとして、連結または結合ディメンション、コンポジット、サロゲートは指定できません。
- TEMP
-
ディメンションの値が一時的なもので、現行のセッションのみで保持できることを示します。ディメンションは現行のワークスペース内に定義を持ち、現行のセッションの間のみ値を保持できます。ただし、更新およびコミットすると、ディメンションの定義は保存されます。セッションを終了するか、別のワークスペースに切り替えると、データ値は廃棄されます。ワークスペースを開始する時点では常に、一時ディメンションの値は
NA
です。 - AW workspace
-
ディメンションを定義する先の、アタッチされたアナリティック・ワークスペースの名前。ディメンションによってディメンション化するオブジェクトはすべて、同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
- SESSION
-
オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。
例
例9-86 別名ディメンションの定義
部門内に従業員が参加する複数のプロジェクトがあり、ある従業員が1つのプロジェクトのリーダーであると同時に別のプロジェクトの参加者でもあるとします。また、各従業員がリーダーとしてまたは参加者としてプロジェクトに参加した時間をそれぞれ追跡するとします。この情報を追跡するために、追跡の単位とする時間(この例ではyear
)、project
および従業員についての2つのディメンション(参加者としての従業員のためのemployee
というディメンションと、リーダーとしての従業員のためのleader
というディメンション)でディメンション化する変数を設計します。この構造は次の定義でサポートされます。
DEFINE year DIMENSION TEXT DEFINE project DIMENSION TEXT DEFINE employee DIMENSION TEXT DEFINE leader DIMENSION ALIASOF employee DEFINE hours VARIABLE INTEGER <year project employee leader>
MAINTAIN year ADD '2001' '2002' '2003' MAINTAIN project ADD 'projA' 'projB' MAINTAIN employee add 'Adams' 'Baker' 'Charles'
別名ディメンション(つまり、leader
)を明示的に移入する必要がないことに注意してください。employee
ディメンションを移入すると、その別名ディメンションであるleader
も移入されます。
EMPLOYEE -------------- Adams Baker Charles LEADER -------------- Adams Baker Charles
別名を制限せずにあるディメンションを制限したり、ディメンションを制限せずにその別名を制限することができます。たとえば、次の文を発行して、year
2001におけるproject
ProjAについてのemployee
をAdamsに制限すると、レポートにはAdamsが参加するプロジェクトのすべてのリーダーが表示されます。
LIMIT year TO '2001' LIMIT employee TO 'Adams' LIMIT project TO 'projA' REPORT DOWN leader ACROSS employee: hours PROJECT: projA YEAR: 2001 --HOURS--- -EMPLOYEE- LEADER Adams -------------- ---------- Adams 1 Baker 2 Charles 1
一方、year
2001におけるproject
ProjAについてのleader
をAdamsに制限すると、レポートにはAdamsがリーダーとなるプロジェクトのすべての従業員が表示されます。
LIMIT employee TO ALL LIMIT leader TO 'Adams' LIMIT project TO 'projA' REPORT DOWN leader ACROSS employee: hours PROJECT: projA YEAR: 2001 -------------HOURS-------------- ------------EMPLOYEE------------ LEADER Adams Baker Charles -------------- ---------- ---------- ---------- Adams 1 3 3
DEFINE FORMULA
DEFINEコマンドとともにFORMULAキーワードを使用すると、アナリティック・ワークスペースに新しい計算式オブジェクトが追加されます。計算式を定義することにより、式を保存します。計算式は、繰り返し使用する式のかわりに使用できます。計算式の名前は、その式のテキストのかわりです。Oracle OLAPでは、計算式のデータは変数に保存せず、要求されるたびに、実行時ベースで計算を行います。
関連項目:
構文
DEFINE name FORMULA {expression | [ datatype ][<dimensions...>]} [AW workspace] [SESSION]
パラメータ
- name
-
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
- FORMULA
-
計算式を定義するときのオブジェクト型。
- expression
-
計算式を使用したときに値を生成するために実行される計算。定数または変数の名前を含めた有効な式を任意に指定できます(「OLAP DML式」を参照)。
EQ文を使用して式を定義する際、または式を定義した後で、計算式に対しその式を指定できます。式を指定せずに計算式を定義すると、計算式の実行時に
NA
値が指定されたデータ型で返されます。注意:
Oracle OLAPでは、計算式内のテキストを自動で大文字に変換しません。
- datatype
-
expressionの値を指定しないときに計算式に対して指定するデータ型。変数に適用可能な任意のデータ型を使用できます。値を指定しない場合、データ型は実行時に決まります。
計算式の定義にexpressionを含めると、expressionを使用して定義される計算式のデータ型がDEFINEにより自動的に決まります。EQ文を使用して後で式を追加する場合、その式のデータ型はここで指定するデータ型と一致する必要があります。一致しない場合、DEFINEによって、出力が指定されたデータ型に変換されます。
- dimensions
-
計算式のディメンション。リストを山カッコで囲みます。dimensions引数はオプションです。計算式が単一セルの値の場合、ディメンションは指定しません。また、定義に式を含める場合にも、値を指定しません。ディメンションはDEFINEにより自動で決定されます。
ただし、定義に式を含めない場合は、ディメンションを指定する必要があります。EQ文を使用して後で式を追加する場合、その式が計算式の定義と同じディメンションを持っている必要があります。同じディメンションを持たない場合、DEFINEによって、指定されたディメンションが出力に強制的に追加されます。
注意:
コンポジットでディメンション化する計算式は定義できません。
- AW workspace
-
計算式を定義する先の、アタッチされたワークスペースの名前。計算式がディメンション化されている場合、そのディメンションと同じワークスペースに定義する必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
- SESSION
-
オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。
使用上の注意
計算式で使用されているオブジェクトの特性を変更することによる影響
計算式で使用されているオブジェクトの名前、データ型またはディメンションを変更した場合、計算式は自動的には更新されません。参照しているオブジェクトが削除されたか、(計算式に対し)適切でないデータ型に変更されていると、その計算式の実行によりエラーが発生します。
複雑な式および計算の保存
非常に複雑な計算を定義する場合、RETURN文を使用して値を返すプログラムを定義できます。その後、式または計算式を使用する箇所で、そのプログラムをファンクションとして使用できます。
例
例9-87 計算式の定義
この例では、sales.diff
という計算式をアナリティック・ワークスペースに追加します。この計算式は、現行の年と前の年について売上総額の差異を比率で計算するものです。
次の文により
DEFINE sales.diff FORMULA LAGPCT(TOTAL(actual year) 1 year) DESCRIBE sales.diff
次の定義が生成されます。
DEFINE sales.diff FORMULA DECIMAL <year> EQ lagpct(TOTAL(actual year) 1 year)
DEFINE MODEL
DEFINEコマンドとともにMODELキーワードを使用すると、アナリティック・ワークスペースに新しいモデル・オブジェクトが追加されます。モデルとは、相互に関連した一連の方程式です。方程式の計算は、変数またはディメンション値のいずれかに基づきます。計算の結果を変数に直接代入するか、データ計算の対象となるディメンション値を指定できます。たとえば、財務アプリケーションでは、すべての方程式について明細項目ディメンションの値を基礎とし、経費合計や純益などの明細項目についてのデータを計算できます。
注意:
モデルを定義することでアナリティック・ワークスペースに作成されるのは、モデル・オブジェクトのみです。MODELで説明されているように、モデルの仕様もコーディングする必要があります。
構文
DEFINE name MODEL [AW workspace] [SESSION]
パラメータ
例
例9-88 単純なモデルの定義
この例では、損益計算書の明細項目を計算するincome.calc
という単純なモデルを示します。モデルの方程式は、demo
ワークスペースのline
ディメンションを基礎とします。まず、モデルを定義して、LDを追加します。
DEFINE income.calc MODEL LD Model for calculating Income Statement items
その後、MODEL文を使用して、モデルの仕様を入力します。この例では、次のモデル説明に示す行のようなモデル明細を入力できます。
DEFINE income.calc MODEL LD Model for calculating Income Statement items MODEL dimension line net.income = opr.income - taxes opr.income = gross.margin - (marketing+selling+r.d) gross.margin = revenue - cogs END
actual
変数についてモデルを解決するには、入力明細項目(Revenue
、Cogs
、Marketing
、Selling
、R.D
およびTaxes
)のactual
にデータを入力します。その後、次の文を実行します。
income.calc actual
DEFINE PARTITION TEMPLATE
DEFINEコマンドとともにPARTITION TEMPLATEキーワードを使用すると、アナリティック・ワークスペースに新しいパーティション・テンプレート・オブジェクトが追加されます。パーティション・テンプレートは、パーティション変数のパーティション仕様です。パーティション変数は、アナリティック・ワークスペースであるLOBのリレーショナル表に複数行として格納され、各パーティションが表の1行になります。パーティション変数とパーティション化されていない変数は、どちらもDEFINE VARIABLE文を使用して定義します。パーティション変数を定義するには、まず、パーティション・テンプレート・オブジェクトを定義する必要があります。
構文
DEFINE name PARTITION TEMPLATE <dimlist> PARTITION BY {RANGE|LIST} (dims_partitioned_by) ([partition_definition_statement...]) [AW workspace]
ここで、partition_definition_statementはパーティションを定義する文です。RANGEとLISTのどちらを指定するかによって、構文は異なります。
-
RANGEの場合:
PARTITION partition-name VALUES LESS THAN const-exp <partition-dimlist>
-
LISTの場合:
PARTITION partition-name VALUES ([valuelist)] <partition-dimlist>
パラメータ
- name
-
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
- dimlist
-
パーティション化する変数のすべての論理ディメンションのリスト。ディメンションの名前は、左右を1組の山カッコ(
<
>
)で囲む必要があります。ディメンションは、パーティション・テンプレートの定義に含める前に定義しておく必要があります。 - dims_partitioned_by
-
実際に変数のパーティションを指定する、dimlistにより指定されたディメンションのサブセット。レンジ・パーティション化およびリスト・パーティション化(つまり、RANGEまたはLISTキーワードのいずれかを指定する場合)では、dims_partitioned_byには1つのディメンションしか指定できません。
INTEGER
ディメンションに対しては、変数をパーティション化できません。 - PARTITION partition-name
-
パーティションの名前。
- VALUES LESS THAN
-
比較値によってRANGEパーティションを指定することを示します。
- constant-exp
-
dims_partitioned_byに対し指定されたディメンションのデータ型と同じデータ型を持つ定数式。
- partition-dimlist
-
パーティション・テンプレート・オブジェクトの、すべてのディメンションのリスト(ディメンションはコンポジットのメンバーである場合もあります)。ディメンションの名前は、左右を1組の山カッコ(
<
>
)で囲む必要があります。この引数を使用して、partition-nameに対応するパーティションをディメンション化するために使用するコンポジット(ある場合)を指定します。値を指定しない場合は、パーティションは、パーティション・テンプレート・オブジェクトのすべてのディメンションによって稠密にディメンション化されます。 - VALUES
-
値の指定によってLISTパーティションを指定することを示します。
- valuelist
-
カンマで区切った、ディメンション値のリスト。テキスト値は、一重引用符で囲む必要があります(
'mytext'
など)。結合の値を指定するには、ベース・ディメンション値をカンマで区切り、1組の山カッコで囲んで指定します(<'Value1', 'Value2'>
など)。非一意の連結ディメンションの値を指定するには、ベース・ディメンション値をコロンで区切り、1組の山カッコで囲んで指定します(<'Value1': 'Value2'>
など)。ヒント:
値セット・オブジェクトを使用して値を指定する必要がある場合は、valuelistに値を指定しないでください。かわりに、パーティション・テンプレート定義からvaluelistを省き、MAINTAIN ADD TO PARTITION文を使用してパーティションのための値を指定します。
例
例9-101を参照してください。
DEFINE PROGRAM
DEFINEコマンドとともにPROGRAMキーワードを使用すると、アナリティック・ワークスペースに新しいOLAP DMLプログラム・オブジェクトが追加されます。OLAP DMLプログラムは、一部のワークスペース管理または分析タスクの完了に役立つOLAP DML文のコレクションです。プログラムを定義することでアナリティック・ワークスペースに作成されるのは、プログラム・オブジェクトのみです。プログラムの実際の行もコーディングする必要があります。
関連項目:
構文
DEFINE name PROGRAM [datatype|dimension] [AW workspace] [SESSION]
パラメータ
- name
-
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
- PROGRAM
-
プログラムを定義するときのオブジェクト型。
- datatype
-
ファンクションとしてコールされた際にプログラムが返す値のデータ型。変数に適用可能な任意のデータ型を使用できます。
- dimension
-
ディメンションの名前で、ファンクションとしてコールされた際、プログラムはこのディメンションの値を返します。戻り値はディメンションの単一の値で、位置(
INTEGER
)ではありません。ディメンションは、プログラムと同じワークスペースに定義されている必要があります。 - AW workspace
-
プログラムを定義する先の、アタッチされたワークスペースの名前。プログラムがディメンションを返す場合、プログラムはディメンションと同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
- SESSION
-
オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。
使用上の注意
値を返す場合
プログラムから値を返す必要がある場合は、プログラム内でRETURN文を使用します。RETURN文への引数は、返す値を指定する式です。この式が、宣言されているデータ型またはディメンションと一致しない場合、値は宣言されているデータ型またはディメンション値に変換されます(可能な場合)。
プログラムの定義でデータ型またはディメンションを指定しない場合、戻り値はワークシート・データとして処理され、すべての戻り値がOracle OLAPによってコール側のコンテキストで必要とされるデータ型に変換されるため、予期しない結果になる場合があります。
プログラムから値を返すには、プログラムをファンクションとしてコールする必要があります。つまり、文の中で式として使用する必要があります。次の例では、プログラムisrecent
はファンクションとして扱われます。これは、REPORTコマンドの引数です。
REPORT isrecent(actual)
プログラムがディメンションの値を返す場合、プログラムはLISTBYファンクションの出力に含まれ、そのディメンションに対するOBJ(ISBY)はTRUE
です。
ユーザー定義のファンクションとしてのプログラムの詳細は、ARGUMENT、CALLおよびRETURNコマンドを参照してください。
例
例9-89 テスト結果に基づくプログラム・フロー
saleseval
プログラムは、ある月の売上総額がその月の予定売上高の合計を超えているかどうかをテストするプログラムです。このプログラムでは、テストの結果に基づいて異なる文を実行します。
DEFINE SALESEVAL PROGRAM PROGRAM ARGUMENT onemonth MONTH VARIABLE excess DECIMAL ALLSTAT LIMIT month TO onemonth IF TOTAL(sales, month) GT TOTAL(sales.plan, month) THEN DO excess = (TOTAL(sales, month) - - TOTAL(sales.plan, month)) - / TOTAL(sales.plan, month) * 100 SHOW JOINCHARS('Sales exceeded plan by ' excess '%.') DOEND ELSE SHOW JOINCHARS('We\'re not meeting plan. ' - 'Let\'s get working!') REPORT DOWN product W 10 ACROSS district: sales - sales.plan END
ある月の売上総額がその月の予定売上高の合計を超えている場合は、THEN文の行が実行されます。プログラムは、実際の売上高が予定売上高を超えている割合を計算し、結果をexcess
という数値の変数に格納します。その後、結果を現行の出力ファイルに送信します。出力では、JOINCHARSファンクションによって、計算された式excess
とテキスト式「Sales exceeded plan by」が結び付けられます。
ある月の売上総額がその月の予定売上高を超えていない場合は、ELSE文の行が実行され、別のメッセージが生成されます。
THEN文またはELSE文の行が実行された後、制御はプログラム内の次の行に移動し、予定を超えた売上のレポートが生成されます。
DEFINE RELATION
DEFINEコマンドとともにRELATIONキーワードを使用すると、アナリティック・ワークスペースに新しいリレーション・オブジェクトが追加されます。リレーションは、2つ以上のディメンションの値間における対応関係を表します。変数のようにディメンションを持つことができますが、リレーションの値は関連ディメンションからの値である必要があります。
注意:
アナリティック・ワークスペースにリレーションを定義しても、アナリティック・ワークスペースにはリレーションの定義のみが追加され、リレーション自体は移入されません。OLAP DMLを使用してリレーションを移入するには、OLAP DMLのSQL、FILEREAD、SETまたはSET1文を発行します。
構文
DEFINE name RELATION related-dim [<dimensions...>] [TEMP] [AW workspace] [SESSION]
パラメータ
- name
-
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
- RELATION
-
リレーションを定義するときのオブジェクト型。
- related-dim
-
1つ以上のdimensionsが関連付けられているディメンションを指定します。通常、リレーションは、たとえば都市が各地域に属しているなど、2つのディメンション間の関係についての情報を保存するために使用されます。
定義では、通常、値がより少ないほうのディメンションを関連ディメンションとして指定します(たとえば、地域)。そして、値が多いほうのディメンションを、リレーションのディメンションとして指定します(たとえば、都市)。
- <dimensions...>
-
リレーションのディメンションの名前。ディメンションの名前は、左右を1組の山カッコ(
< >
)で囲む必要があります。ディメンションは、リレーションの定義に含める前に定義しておく必要があります。ディメンション・リストにコンポジットは含められません。注意:
Oracle OLAPでは、リレーションのディメンションとしてのコンポジットの使用はサポートしていません。コンポジットを定義しないでください。
ヒント:
同一ディメンション間の2つのリレーションを定義するには、RELATIONコマンドを使用してデフォルトのリレーションを指定します。
- TEMP
-
リレーションの値が一時的なものであることを示します。リレーションは現行のワークスペース内に定義され、現行のセッションの間のみ値を保持できます。ただし、ワークスペースを更新およびコミットすると、リレーションの定義は保存されます。セッションを終了するか、別のワークスペースに切り替えると、データ値は廃棄されます。ワークスペースを開始する時点では常に、一時リレーションの値は
NA
です。 - AW workspace
-
リレーションを定義する先の、アタッチされたワークスペースの名前。リレーションは、そのディメンションと同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
- SESSION
-
オブジェクトを現行のセッションでのみ存在させることを指定します。セッションの終了時に、オブジェクトは廃棄されます。SESSIONキーワードで指定される動作は、TEMPキーワードで指定される動作とは異なり、TEMPキーワードでは値は一時的ですが、オブジェクト定義は作成したワークスペースに保存されます。
例
例9-90 リレーションの作成および移入と、そのリレーションによる合計
次の例では、division
とproduct
の間のリレーションを定義し、リレーションの値を格納して、division
ごとにunits
を合計します(units
は product
によりディメンション化されています)。次の文により、div.prod
リレーションを定義します。
DEFINE div.prod RELATION division <product>
次の文により、division
の値をdiv.prod
に格納します。
LIMIT product TO 'Tents' 'Canoes' div.prod = 'Camping' LIMIT product TO 'Racquets' div.prod = 'Sporting' LIMIT product TO 'Sportswear' 'Footwear' div.prod = 'Clothing'
REPORT文を使用して、div.prod
に格納された値を参照できます。
report div.prod
この文によって生成される出力は、次のとおりです。
PRODUCT DIV.PROD ------------- ---------- Tents Camping Canoes Camping Racquets Sporting Sportswear Clothing Footwear Clothing
データがproduct
によりディメンション化されているにもかかわらず、div.prod
リレーションを使用することでレポートに部門合計を表示できます。
REPORT TOTAL(units division)
DEFINE SURROGATE
DEFINEコマンドとともにSURROGATEキーワードを使用すると、アナリティック・ワークスペースに新しいディメンション・サロゲート・オブジェクトが追加されます。サロゲートは、ディメンションの値の代替セットを提供する。サロゲートは、モデル内のディメンションではなく、LIMITコマンド、修飾データ参照、または文(FILEREAD、FILEVIEW、SQL FETCHおよびSQL IMPORTなど)によるデータのロードにおけるディメンションで使用します。
注意:
アナリティック・ワークスペースにサロゲートを定義しても、アナリティック・ワークスペースにはディメンション・サロゲートの定義のみが追加され、サロゲート自体は移入されません。OLAP DMLを使用してサロゲートを移入するには、OLAP DMLのSQL、FILEREAD、SETまたはSET1文を発行します。
構文
DEFINE name SURROGATE targetname type [AW workspace] [SESSION]
ここで、typeの構文は次のとおりです。
[TEXT|NTEXT] [WIDTH n]|ID|INTEGER|NUMBER (precision[, scale] | datatime-datatype)
パラメータ
- name
-
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
- SURROGATE
-
ディメンション・サロゲートを定義するときのオブジェクト型。
- targetname
-
サロゲートを作成するディメンションの名前。ターゲットを決める際の注意点については、「サロゲートの使用に関する制限」を参照してください。
- TEXT
- NTEXT
- ID
-
テキスト値のあるディメンション・サロゲートのデータ型。ディメンション・サロゲートの値がすべて8シングルバイト文字またはそれ以下の場合、IDデータ型を指定します。1つ以上のディメンション値が8シングルバイトを超える文字の場合、TEXTまたはNTEXTデータ型を指定する必要があります。使いやすさと効率を向上させるために、可能な場合は常にディメンションにはIDデータ型を指定します。
- WIDTH n
-
TEXTまたはNTEXTディメンション・サロゲートでの、オブジェクトの各値の格納の幅(バイト単位)。幅の有効な値は1から4000までです。特定のディメンション・サロゲートの値が同じようなサイズであることがわかっている場合にのみ、固定幅を指定します。指定された幅を超える値は、切り捨てられます。
- INTEGER
-
ディメンション内での値の順序位置(1、2など)を示す値を持つディメンション・サロゲートのデータ型。
NUMBER
型ディメンションにINTEGER型ディメンション・サロゲートを作成することで、ディメンション値をディメンションの値ではなく位置で指定できるようになります。INTEGER型ディメンション・サロゲートを定義すると、ディメンション内の各位置のサロゲートに自動でINTEGER
値が割り当てられます。 - NUMBER
-
ディメンション・サロゲートを
NUMBER
データ型として指定します。詳細は、「数値データ型」を参照してください。 - precision
-
NUMBER
型ディメンション・サロゲートの値の合計文字数を指定します。 - scale
-
NUMBER
型のディメンション・サロゲートの小数点以下の文字数を指定します。 - datetime_datatype
-
日時データ型(つまり、
DATETIME
、TIMESTAMP
、TIMESTAMP_TZ
またはTIMESTAMP-LTZ
)を指定します。詳細は、「日時データ型と期間データ型」を参照してください。 - AW workspace
-
ディメンション・サロゲートを定義する先の、アタッチされたワークスペースの名前。サロゲートを定義するディメンションは、同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
- SESSION
-
オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。このキーワードは、targetnameディメンションの定義にSESSIONが含まれている場合に使用してください。
使用上の注意
サロゲートの使用に関する制限
サロゲートのターゲットを決める際は、次の制限を考慮してください。
-
DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションのサロゲートまたはコンポジットのサロゲートは作成できません。
-
結合のサロゲートを作成すると、その結合はコンポジットに変換できません。
連結ディメンション、計算式、プログラム、リレーション、値セットまたは変数を定義する場合は、ディメンション・サロゲートをディメンションまたは関連ディメンションの引数としては指定できません。また、データをロードする際、ディメンション・サロゲートを使用して新しいディメンション値は作成できません。
例
例9-91 INTEGER型ディメンション・サロゲートの作成
次の文で、store_id
ディメンションのINTEGER型ディメンション・サロゲートを作成します。
DEFINE storepos SURROGATE store_id INTEGER
例9-92 NUMBER型ディメンション・サロゲートの作成
次の文で、product
ディメンションのNUMBER
型ディメンション・サロゲートを作成しますが、このディメンションは、製品名を値として持つTEXT型ディメンションです。NUMBERキーワードへのprecision引数でprodnum
の値を7文字以下として指定し、scale引数で小数点の右側を3文字以下として指定しています。
DEFINE prodnum SURROGATE product NUMBER(7, 3)
次の文により、prodnum
の最初の値を1083.375
に設定します。
prodnum(product 1) = 1083.375
DEFINE VALUESET
DEFINEコマンドとともにVALUESETキーワードを使用すると、アナリティック・ワークスペースに新しい値セット・オブジェクトが追加されます。値セットは、1つまたは複数のディメンションに対するディメンション値のリストです。値セットを使用すると、複数のセッションにまたがってディメンション・ステータス・リストを保存できます。
注意:
値セットを定義すると、アナリティック・ワークスペースに値セットの定義が追加され、その値はすべてNULL(NA
)に設定されます。値セットに値を割り当てるには、LIMITコマンドを使用します。また、値セットの操作には、STATUS文およびSTATFIRST、INSTAT、VALUESの各ファンクションを使用できます。
構文
DEFINE name VALUESET dimension [<dims...>] [NOORDER] [TEMP] [AW workspace] [SESSION]
パラメータ
- name
-
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
- VALUESET
-
値セットを定義するときのオブジェクト型。
- dimension
-
値セットに保存する値が格納されている、事前定義されたディメンションの名前。
- dims
-
多次元の値セットを定義する際の、当該値セットのディメンション化に使用する事前定義済ディメンションの名前。
- NOORDER
-
ディメンション化された値セット(つまり、dimsの1つ以上の値を指定する値セット)では、Oracle OLAPで値セットを圧縮ビットマップとして格納することを指定します。このキーワードを指定すると、元のステータスの順序は失われます。
- TEMP
-
値セットの値が一時的なものであることを示します。値セットは現行のワークスペース内に定義を持ち、現行のセッションの間のみ値を保持できます。ただし、更新およびコミットすると、値セットの定義は保存されます。セッションを終了するか、別のワークスペースに切り替えると、値は廃棄されます。ワークスペースを開始する時点では常に、一時値セットの値はNULLです。
- AW workspace
-
値セットを定義する先の、アタッチされたワークスペースの名前。値セットは、そのディメンションと同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
- SESSION
-
オブジェクトを現行のセッションでのみ存在させることを指定します。セッションの終了時に、オブジェクトは廃棄されます。SESSIONで指定される動作は、TEMPキーワードで指定される動作とは異なり、TEMPキーワードでは値は一時的ですが、オブジェクト定義は作成したワークスペースに保存されます。
例
例9-93 値セットの作成と値セットへの値の割当て
この例では、デモンストレーション・ワークスペースにlineset
という値セットを追加します。lineset
値セットはline
によりディメンション化されており、そのためline
ディメンションの現行の値で制限できます。LD文で、オブジェクトに説明を追加します。
次の各文は、まずline
ディメンションを制限して値をステータスに表示します。次に、値セットを定義し、その値セットをlineディメンションの現在のステータスにある値に制限して、lineset
という値セットを作成します。最後に、linesetの値を表示します。
LIMIT line TO FIRST 2 STATUS line
The current status of LINE is: REVENUE, COGS " Define the valueset and specify a long description for it
DEFINE lineset VALUESET line LD Valueset for LINE dimension values " Assign the values that are currently in status for line " as the values of valueset LIMIT lineset TO line UPDATE SHOW lineset
Revenue Cogs
例9-94 多次元の値セットの作成と値セットへの値の割当て
アナリティック・ワークスペースに、次の定義を持つ変数およびディメンションがあるとします。
DEFINE geography DIMENSION TEXT DEFINE product DIMENSION TEXT DEFINE sales VARIABLE DECIMAL <geography product> DEFINE salestax VARIABLE DECIMAL <geography>
また、その同じアナリティック・ワークスペースに、ワークスペース内の変数およびディメンションの名前を値とする、次のようなディメンションがあるとします。
DEFINE all_variables DIMENSION TEXT MAINTAIN all_variables ADD 'sales' 'salestax' DEFINE all_dims DIMENSION TEXTMAINTAIN all_dims ADD 'geography' 'product'
次の文により、all_variables
およびall_dims
の値のための値セットが作成され移入された後、その値セットの値がレポートされます。
DEFINE variables_dims VALUESET all_dims <all_variables> " Assign all values of all_dims and all_variables to the valueset LIMIT variables_dims TO ALL REPORT variables_dims ALL_VARIABLES VARIABLES_DIMS ---------------- ------------------------------ sales geography product salestax geography product
それらを使用する変数と関連付けられた正しいディメンションを持つ、多次元の値セットを作成するには、QDRを使用してall_variables
のsalestax
値のためのall_dims
値を制限する、次の文を発行します。
LIMIT variables_dims(all_variables 'salestax') TO 'geography' REPORT variables_dims ALL_VARIABLES VARIABLES_DIMS ---------------- ------------------------------ sales geography product salestax geography
DEFINE VARIABLE
DEFINEコマンドとともにVARIABLEキーワードを使用すると、アナリティック・ワークスペースに新しい変数オブジェクトが追加されます。変数には、数値、テキスト、ブールまたは日付のいずれか1つの型のデータが保存されます。変数のデータ型の他に、変数について作成する定義によって、次のような変数の特性が決定されます。
-
変数である配列内に実際に作成される要素の数
-
変数の要素の論理的な順序
-
変数のデータは永続的に格納されるか、そのセッションでのみ使用可能か
-
変数のデータに対しOracle OLAPによって作成されるLOBの数
VARIABLEコマンドを使用して、ローカルなプログラム変数を定義することもできます。これらの変数は、プログラムが実行されているときにのみ存在します。
注意:
アナリティック・ワークスペースに変数を定義しても、アナリティック・ワークスペースには変数の定義のみが追加され、変数自体は移入されません。OLAP DMLを使用して変数を移入するには、OLAP DMLのSQL、FILEREAD、SETまたはSET1文を発行します。
構文
DEFINE name [VARIABLE] datatype [<dims...>] [WITH NULLTRACKING] [WITH AGGCOUNT] - [PERMANENT | TEMP ] - [ RANSPACE64] [(partition-instance...)] [WIDTH n] [AW workspace] [SESSION]
ここで
-
dimsは変数のディメンションを表し、各ディメンション間はカンマで区切ります。変数のディメンションに対しては、ディメンション・オブジェクト、パーティション・テンプレート・オブジェクト、名前付き非圧縮コンポジット、圧縮コンポジット、または名前のない非圧縮コンポジットを次のような形で指定できます。
- dimension_name
- partition_template_name <dims>
- uncompressed_composite_name <[basedims...]>
- compressed_composite_name <[basedims...]>
- SPARSE <basedims...>
注意:
変数のdimsに指定する順序は、様々な文(REPORTやUNRAVELなど)のディメンションおよび動作のデフォルト順序であり、変数のデータの格納方法に影響します(「変数の格納および文のループ処理におけるディメンションの順序の影響」を参照)。また、同じディメンションを使用して複数のオブジェクトを定義する場合、各定義においてディメンションを同じ順序でリストすると、ほとんどの操作がより効率よく動作します。
-
partition-instanceは変数のパーティションを表し、各パーティション間はカンマで区切ります。パーティションは、次の構文を使用して指定します。
PARTITION partition-name INTERNAL [TEMP | PERMANENT]
パラメータ
- name
-
定義する変数の名前。この引数の一般情報は、DEFINEコマンドを参照してください。
- VARIABLE
-
変数を定義するときのオブジェクト型。これはデフォルトなので、VARIABLEを入力する必要はありません。
- datatype
-
変数に保存するデータのデータ型。データ型、その略称、および適用可能な値の範囲は、表2-1を参照してください。
- dimension_name
-
DEFINE DIMENSION文を使用して事前に定義した単純、連結、結合または別名ディメンションの名前。この場合は、ディメンションの名前を指定します。
- RANSPACE64
-
データ型が
TEXT
、NTEXT
またはRAW
の変数を定義する際は、このキーワードを指定して、変数値に対する最大文字数を2**32
から2**64
に増やします。 - partition-template-name<dims>
-
DEFINE PARTITION TEMPLATE文を使用して事前に定義したパーティション・テンプレート・オブジェクトの名前。dimsには、パーティション・テンプレート・オブジェクトのディメンションの名前を指定します。これらのディメンションは、パーティション・テンプレート・オブジェクトの定義に使用したものと同じである必要があります。
- uncompressed_composite_name <[basedims...]>
-
DEFINE COMPOSITE文を使用して事前に定義された非圧縮コンポジットの名前。オプションのbasedims引数には、コンポジットの定義に使用するディメンションの名前をカンマで区切って指定します。
- compressed_composite_name <basedims...>
-
DEFINE COMPOSITE文を使用して事前に定義された圧縮コンポジットの名前。オプションのbasedims引数には、コンポジットの定義に使用するディメンションの名前をカンマで区切って指定します。
圧縮コンポジットでディメンション化される変数を定義する際は、次の点に注意してください。
-
圧縮コンポジットによりディメンション化できるのは、1つの変数のみ、または変数の1つのパーティションのみです。圧縮コンポジットは共有コンポジットにはできません。
-
圧縮コンポジットは、変数を定義するDEFINE VARIABLE文での変数のディメンション・リストにおいて、最後のディメンションにする必要があります。
-
- SPARSE <basedims...>
-
名前のないコンポジットをOracle OLAPによって作成し、変数をディメンション化する際にそれを使用するように指定します。basedims引数には、名前のないコンポジットを作成する対象となるディメンションの名前をカンマで区切って指定します。
- WITH NULLTRACKING
-
変数がコンポジットによりディメンション化されている場合は、Oracle OLAPによってその変数のセルにNA2ビットが作成されるように指定します。
関連項目:
- WITH AGGCOUNT
-
AVERAGE、HWAVERAGEまたはWAVERAGE演算子を持つRELATION文について計算された集計値に加えられたリーフ・ノード数の非
NA
カウント数を格納するためのINTEGER
変数が自動的に作成されるように指定します。圧縮コンポジットによりディメンション化された変数の平均集計を計算する場合は、この句を指定する必要があります。Aggcount変数の詳細は、「Aggcount変数」を参照してください。 - PERMANENT
- TEMP
-
変数または変数のパーティションについて、永続的であるか一時的であるかを指定します。変数やパーティションの永続的または一時的な定義は常に、更新およびコミット後、セッションの間で保存されます。永続的または一時的の指定では、更新およびコミット後、セッションを終了するか別のワークスペースに切り替えた際に、変数の値または変数のパーティションの値を保存するか、廃棄するかが決まります。
-
永続的な変数およびパーティション: Oracle OLAPにより、永続変数または永続パーティションのデータ値が保存されます。ワークスペースを開始した場合、永続変数または永続パーティションのデータ値はそれらを最後にコミットしたときと同じです。
-
一時的な変数およびパーティション: Oracle OLAPにより、一時変数または一時パーティションのデータ値が廃棄されます。ワークスペースを開始する時点では常に、一時変数または一時パーティションの値は
NA
です。
PERMANENTおよびTEMPキーワードを指定する際は、次の点に注意してください。
-
デフォルトでは、変数は永続的です。
-
一時変数は、パーティション・テンプレート・オブジェクトまたは一時ディメンションによってディメンション化できます。
-
デフォルトでは、変数の最上位レベルのパーティションは、それを含む変数と同じ永続性を保持します。具体的には、PERMANENTキーワードを使用してそれを永続パーティションにしないかぎり、一時変数のパーティションは一時パーティションであり、TEMPORARYキーワードを使用してそれを一時パーティションにしないかぎり、永続変数のパーティションは永続パーティションです。別の動作を指定するには、PERMANENTまたはTEMPキーワードのいずれかを使用します。
-
デフォルトでは、サブパーティションは親パーティションと同じ永続性を保持します。別の動作を指定するには、PERMANENTまたはTEMPキーワードのいずれかを使用します。
-
- WIDTH n
-
(WIDTHの略称としてWを使用できます。)変数の各値の格納の、バイト単位での幅。マルチバイト・キャラクタ・セットを使用している場合、文字数でなく、バイト数を指定することに注意してください。
より迅速でコンパクトなデータ格納フォーマットを作成するには、固定幅を指定します。次で説明されているように、固定幅はディメンション化されたTEXT、NTEXTおよびINTEGER変数に対してのみ指定できます。
-
ディメンション化されたTEXTおよびNTEXT変数には、1バイトから4,000バイトまでの幅を指定できます。特定の変数の値が同じようなサイズであることがわかっている場合にのみ、その変数に固定幅を指定します。スカラー変数には幅を割り当てられません。
-
ディメンション化されたINTEGER変数には、1バイトの幅しか指定できません。変数のすべての値が-128と127の間であることがわかっている場合にのみ、固定幅のINTEGER変数を定義します。
変数のデフォルトの幅は、SHORTINTEGERでは2バイト、DATE、INTEGERおよびSHORTDECIMALでは4バイト、DECIMALおよびIDでは8バイトです。固定幅ではないTEXTおよびNTEXT変数は、2つのページ・セットに格納されます。最初のセットには4バイトのセルがあり、各セルが、もう1つのページ・セットに格納されている実際のテキスト値を指し示します。TEXTおよびNTEXT変数についての4バイトのデフォルト幅は、これらの4バイト・セルのためのものです。
-
- PARTITION partition-name INTERNAL
-
変数のパーティションを指定します。ここで、partition-nameはパーティションの名前です。
圧縮コンポジットでディメンション化される変数のパーティションを定義する際は、次の点に注意してください。
-
1つの圧縮コンポジットによりディメンション化できるパーティションは1つのみです。
-
圧縮コンポジットでディメンション化される変数のパーティションは、階層ディメンションの親子関係を踏襲する必要があります。AGGREGATEコマンドを実行する際、データはパーティション間にまたがって集計できません。変数が正しくパーティション化されているかどうかを確認するには、PARTITIONCHECKファンクションを使用します。
-
- AW workspace
-
変数を定義する先の、アタッチされたワークスペースの名前。変数がディメンション化されている場合、そのディメンションと同じワークスペースに定義する必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
- SESSION
-
オブジェクトを現行のセッションでのみ存在させることを指定します。セッションの終了時に、オブジェクトは廃棄されます。SESSIONで指定される動作は、TEMPキーワードで指定される動作とは異なり、TEMPキーワードでは値は一時的ですが、オブジェクト定義は作成したワークスペースに保存されます。
使用上の注意
Aggcount変数
DEFINE VARIABLE文にWITH AGGCOUNT句を指定すると、DEFINE文に指定された変数の他、補助的な変数(一般にはAggcount変数という)が自動的に作成されます。Aggcount変数はINTEGER
変数であり、定義された変数に対して平均集計が実行される際、Oracle OLAPで使用されます。AVERAGE、HAVERAGE、WAVERAGEまたはHWAVERAGE演算子を持ち、COUNT NO句を持たないRELATION文を解決する際には、Aggcount変数の平均集計値の計算に加えられるリーフ・ノード数の非NA
カウント数が格納されます。
変数をメンテナンスするほとんどの文では、関連するAggcount変数のメンテナンスも自動的に行われます。たとえば、EXPORT文では、変数およびそれに関連するAggcount変数がエクスポートされ、CLEAR文では、変数およびそれに関連するAggcount変数の一部が消去されます。さらにOLAP DML文には、Aggcountオブジェクトを使用する場合に特化したものもあります。次の表に、これらの文を示します。
表9-6 Aggcount変数用のOLAP DML文
文 | キーワード | 説明 |
---|---|---|
WITH AGGCOUNT |
変数および関連するAggcount変数を定義する。 |
|
指定した変数に関連付けられたAggcount変数の値を取得する。 |
||
ADD|DROP AGGCOUNT |
指定された変数に対して、Aggcount変数の追加または削除を行う。 |
|
HASAGGCOUNT |
指定した変数に関連付けられたAggcount変数が存在するかどうかを示す |
NA2ビットとNULLトラッキング
リレーショナル・ファクト表には、NULLファクト(NULL値を持つファクト)が含まれていることがあります。通常、Oracle OLAPでは、コンポジットによりディメンション化された変数が作成される際、NA(またはNULL)値に対してコンポジット・タプルは作成されません。このような場合、OLAP DML変数ではNULLファクトが削除されるため、各変数とそのベース・リレーショナル・ファクト表とは一致しません。
OLAP DMLのコンポジット・ディメンションでディメンション化された変数(NULLファクトを持つリレーショナル・ファクト表に対応する変数)をサポートするため、Oracle OLAPには、NA2ビットと呼ばれる特殊なNA値があります。基礎となるリレーショナル表にNULLファクトが含まれているため、これらのNA2ビットによって、変数の各セルにNULL値が存在するかどうかのトラッキングが行われます。対応するファクト表にNULLファクトがある場合、Oracle OLAPでは、変数のコンポジット・タプルにあえてNA値を指定する必要があるため、NA2ビットを使用して前述の処理が実行されます。Oracle OLAPでは、SQL IMPORTコマンドやAGGREGATEコマンドを使用して変数を移入する場合、およびマテリアライズド・ビューとして作成された変数を移入する場合に、NA2ビットが使用されます。また、OLAP_TABLE SQLファンクションを使用してリレーショナル表を移入する場合にも使用されます。さらにOracle OLAPにおいて、算術演算子やブール演算子を使用して式の評価が行われる場合、NA2値は認識の対象となります。
OLAP DMLでは、NA2ビットを持つ変数に対して次のような文を使用できます。
-
NA2ビットを持つ変数を作成する場合は、NULLTRACKING句を指定したDEFINE VARIABLE文を使用します。
-
NA2ビットを持たない変数にNA2ビットを追加するには、NULLTRACKING句を指定したCHGDFN文を使用します。
-
NA2ビットを持つ変数からNA2ビットを削除するには、DROP NULLTRACKING句を指定したCHGDFN文を使用します。
-
テストやデバッグを行う場合、NA2ファンクションを使用すると、各変数のNA2ビットをTRUEに設定できます。NAFLAGファンクションを使用すると、変数の各値がNA値であるかどうか、またその場合はそれがOLAPにより無視される通常のNA値であるのか、通常のNA値であると同時にNA2値でもあるのかを判定できます。
関連項目:
『Oracle OLAPユーザーズ・ガイド』のキューブへのマテリアライズド・ビュー機能の追加に関する項
非常に大きな変数の定義
理論上は、変数には2**63
セルまで格納でき、TEXTまたはNTEXT変数には20億バイトまで格納できます。ただし、1つの変数全体を1つのページに格納できるかどうか、またいくつの変数を1つのページに格納できるかは、そのページのサイズにより決まります。1つのページに収まる、一定の幅の変数の値の最大数を計算するには、VALSPERPAGEプログラムを使用します。
変数の格納および文のループ処理におけるディメンションの順序の影響
変数定義のディメンションをリストする順序により、変数の要素を格納する順序が決まり、さらにはデータへのアクセス方法が決まります。変数定義における最初のディメンションは最も変化の速いディメンションで、最後のディメンションは最も変化の遅いディメンションです。
たとえば、アナリティック・ワークスペースに、オフィスが存在する各都市の月別の営業経費が含まれるopcosts
変数があるとします。opcosts
変数についての次の定義では、month
が最も変化の速いディメンションで、city
が最も変化の遅いディメンションです。
DEFINE opcosts VARIABLE DECIMAL <month city>
多次元変数のデータは、線形の値として格納され、最も変化の速いディメンションの値はクラスタ化されます。たとえば、opcosts
変数の場合、すべての月のBostonの値が順に格納され、次にすべての月のChicagoの値が順に格納される、というように続きます。
変数および他のディメンション化されたオブジェクトを定義する場合、およびネストしたループで多次元式をループ処理するプログラムを作成する場合、常に最も変化の速いディメンションと内部ループを一致させて、パフォーマンスを最適化します。
名前のないコンポジット
DEFINE VARIABLE文をSPARSE <dimlist>句とともに実行すると、Oracle OLAPによって、名前のないコンポジットが自動で定義されます。名前のないコンポジットには、Bツリー索引またはハッシュ索引のいずれかが使用されます。索引のタイプは、名前のないコンポジットが定義されたときのSPARSEINDEXオプションの値によって決まります。
あるディメンション・リストについての名前のないコンポジットの定義が一度作成されると、それ以降、同じSPARSE <dimlist>句で変数を定義する際は常にそのコンポジットが使用されます。そのため、同じSPARSE <dimlist>句で定義されるすべての変数が、同じ名前のないコンポジットを共有することになります。コンポジットの共有の詳細は、「共有コンポジット」を参照してください。
変数セグメント
1つのパーティション内で、変数データはアナリティック・ワークスペース・セグメントに格納されます。アナリティック・ワークスペース・セグメントとは、アナリティック・ワークスペースにおける論理的に連続したページのグループです。デフォルトでは、変数のセグメント・サイズはOracle OLAPによって自動で決まります。各セグメントには、あるOLAP DML文により割り当てられた値を格納するのに必要な数のアナリティック・ワークスペース・ページが過不足なく含まれます。CHGDFNコマンドにSEGWIDTHキーワードを指定して、変数のセグメント・サイズを明示的に指定できます。この場合、値を変数に割り当てると、Oracle OLAPでは、複数のOLAP DML文によって割り当てられたデータを、そのセグメントがいっぱいになるまで1つのセグメントに格納します。
例
例9-95 通常のディメンションを1つだけ持つINTEGER変数の定義
この例では、アナリティック・ワークスペースに変数population
を追加します。この変数は、city
によってディメンション化され、cityは、ワークスペースにあらかじめ定義されています。LD文で、オブジェクトに説明を追加します。次の文により
DEFINE population INTEGER <city> LD Population in each city DESCRIBE population
次の説明が作成されます。
DEFINE POPULATION VARIABLE INTEGER <CITY> LD Population in each city
例9-96 単一セルの変数の定義
次の定義は、newdata
という変数の定義で、この変数は単一のブール値です。ディメンションはありません。ワークスペースに新しいデータが追加されると、アプリケーションによってYES
に設定され、ユーザーがそのデータを表示した後はNO
に設定されるようにできます。
DEFINE newdata BOOLEAN newdata = YES
例9-97 NUMBER変数の定義
次の文では、product
およびgeography
でディメンション化された、16桁の精度および4桁のスケールのsales
というNUMBER
変数が定義されます。
DEFINE sales VARIABLE NUMBER (16,4) <product, geography>
次の文では、有効桁数5桁および小数桁数2桁のnumvar
というNUMBER
変数が定義されます。数字1234567は有効範囲外です。
DEFINE numvar VARIABLE NUMBER (5, 2) numvar = 1234567 SHOW numvar NA
スケールを負にすることにより、有効桁数5桁および小数点の左の2桁を端数処理した、numnegvar
というNUMBER
変数が定義されます。数字1,234,567は端数処理されます。
DEFINE numnegvar VARIABLE NUMBER (5, -2) numnegvar = 1234567 SHOW numnegvar 1,234,600.00
例9-98 通常のディメンションを2つ使用してディメンション化される変数の定義
アナリティック・ワークスペースに次の定義を持つディメンション、リレーションおよびaggmapが含まれるとします。
DEFINE GEOG_CITY DIMENSION TEXT DEFINE GEOG_STATE DIMENSION TEXT DEFINE GEOG_AREA DIMENSION TEXT DEFINE GEOG_CONT DIMENSION TEXT DEFINE GEOG DIMENSION CONCAT (GEOG_CITY GEOG_STATE GEOG_AREA GEOG_CONT) DEFINE PROD_UPC DIMENSION TEXT DEFINE PROD_FAMILY DIMENSION TEXT DEFINE PROD_DIV DIMENSION TEXT DEFINE PROD_TOP DIMENSION TEXT DEFINE PROD DIMENSION CONCAT (PROD_UPC PROD_FAMILY PROD_DIV PROD_TOP) DEFINE GEOGLEVEL DIMENSION TEXT DEFINE PRODLEVEL DIMENSION TEXT DEFINE GEOG.PARENT RELATION GEOG <GEOG> DEFINE PROD.PARENT RELATION PROD <PROD> DEFINE GEOG.LEVELREL RELATION GEOGLEVEL <GEOG> DEFINE PROD.LEVELREL RELATION PRODLEVEL <PROD> DEFINE GEOG.FAMILYREL RELATION GEOG <GEOG GEOGLEVEL> DEFINE PROD.FAMILYREL RELATION PROD <PROD PRODLEVEL> DEFINE SALES_DIMS_REG VARIABLE NUMBER (12,0) <PROD GEOG> DEFINE SALES_AGGMAP AGGMAP AGGMAP RELATION geog.parent RELATION prod.parent END
2つの親リレーション(prod.parent
およびgeog.parent
)の値は次のとおりです。
PROD PROD.PARENT ------------------------- ------------------------- <PROD_UPC: ColorTV> <PROD_FAMILY: TV> <PROD_UPC: BWTV> <PROD_FAMILY: TV> <PROD_UPC: StndVCR> <PROD_FAMILY: VCR> <PROD_UPC: StrVCR> <PROD_FAMILY: VCR> <PROD_FAMILY: VCR> <PROD_DIV: VideoDiv> <PROD_FAMILY: TV> <PROD_DIV: VideoDiv> <PROD_DIV: VideoDiv> <PROD_TOP: Total Prod> <PROD_TOP: Total Prod> NA GEOG GEOG.PARENT ------------------------- ------------------------- <GEOG_CITY: Canberra> <GEOG_STATE: ACT> <GEOG_CITY: Sydney> <GEOG_STATE: NSW> <GEOG_CITY: Darwin> <GEOG_STATE: NT> <GEOG_CITY: Brisbane> <GEOG_STATE: QLD> <GEOG_CITY: Adelaide> <GEOG_STATE: SA> <GEOG_CITY: Hobart> <GEOG_STATE: TAS> <GEOG_CITY: Melbourne> <GEOG_STATE: VIC> <GEOG_CITY: Perth> <GEOG_STATE: WA> <GEOG_STATE: ACT> <GEOG_AREA: Aust Terr> <GEOG_STATE: NSW> <GEOG_AREA: Aust State> <GEOG_STATE: NT> <GEOG_AREA: Aust Terr> <GEOG_STATE: QLD> <GEOG_AREA: Aust State> <GEOG_STATE: SA> <GEOG_AREA: Aust State> <GEOG_STATE: TAS> <GEOG_AREA: Aust State> <GEOG_STATE: VIC> <GEOG_AREA: Aust State> <GEOG_STATE: WA> <GEOG_AREA: Aust State> <GEOG_AREA: Aust State> <GEOG_CONT: Australia> <GEOG_AREA: Aust Terr> <GEOG_CONT: Australia> <GEOG_CONT: Australia> NA
sales_aggmap
を使用してsales_dims_reg
の集計を行うとします。ここでは、sales_dims_reg
変数のレポートに対して次のREPORT文を発行するとします。
REPORT sales_dims_reg->REPORT sales_dims_reg
REPORT文の出力でも確認できるように、sales_dims_reg
変数は、スパースに移入された変数で、含まれる152個のセルのほとんどがNA
値です。
----------------------------SALES_DIMS_REG----------------------------- ---------------------------------PROD---------------------------------- <PROD_DI <PROD_UP <PROD_UP <PROD_UP <PROD_FA <PROD_FA V: <PROD_TO C: <PROD_UP C: C: MILY: MILY: VideoDiv P: Total GEOG ColorTV> C: BWTV> StndVCR> StrVCR> VCR> TV> > Prod> ------------------------- -------- -------- -------- -------- -------- -------- -------- -------- <GEOG_CITY: Canberra> 11,592.0 NA 38,356.0 3,444.00 41,800.0 11,592.0 53,392.0 53,392.0 <GEOG_CITY: Sydney> NA NA NA NA NA NA NA NA <GEOG_CITY: Darwin> 24,868.0 NA 22,104.0 32,667.0 54,771.0 24,868.0 79,639.0 79,639.0 <GEOG_CITY: Brisbane> 49,556.0 NA 48,239.0 24,285.0 72,524.0 49,556.0 122,080 122,080 <GEOG_CITY: Adelaide> NA NA NA NA NA NA NA NA <GEOG_CITY: Hobart> 17,223.0 NA 18,872.0 48,780.0 67,652.0 17,223.0 84,875.0 84,875.0 <GEOG_CITY: Melbourne> NA 22,000.0 NA NA NA 22,000.0 22,000.0 22,000.0 <GEOG_CITY: Perth> NA NA NA NA NA NA NA NA <GEOG_STATE: ACT> 11,592.0 NA 38,356.0 3,444.00 41,800.0 11,592.0 53,392.0 53,392.0 <GEOG_STATE: NSW> NA NA NA NA NA NA NA NA <GEOG_STATE: NT> 24,868.0 NA 22,104.0 32,667.0 54,771.0 24,868.0 79,639.0 79,639.0 <GEOG_STATE: QLD> 49,556.0 NA 48,239.0 24,285.0 72,524.0 49,556.0 122,080 122,080 <GEOG_STATE: SA> NA NA NA NA NA NA NA NA <GEOG_STATE: TAS> 17,223.0 NA 18,872.0 48,780.0 67,652.0 17,223.0 84,875.0 84,875.0 <GEOG_STATE: VIC> NA 22,000.0 NA NA NA 22,000.0 22,000.0 22,000.0 <GEOG_STATE: WA> NA NA NA NA NA NA NA NA <GEOG_AREA: Aust State> 66,779.0 22,000.0 67,111.0 73,065.0 140,176 88,779.0 228,955 228,955 <GEOG_AREA: Aust Terr> 36,460.0 NA 60,460.0 36,111.0 96,571.0 36,460.0 133,031 133,031 <GEOG_CONT: Australia> 103,239 22,000.0 127,571 109,176 236,747 125,239 361,986 361,986
sales_dims_reg
変数は、コンポジットや連結ディメンションではなく、2つの通常のディメンションによりディメンション化されているため、NA
値も含め、そのセルのすべての値は変数に格納されています。次の文を発行すると、ワークスペースに格納されている物理的な値の数を確認できます。
SHOW OBJ(NUMVALS 'sales_dims_reg') 152.00
この文を実行すると、152.00
という値が表示されます。これは、sales_dims_reg
変数に含まれる152個のセルにあるすべての値(NA
値も含む)が変数の一部として格納されていることを示しています。
例9-99 非圧縮コンポジットによりディメンション化される変数の定義
例9-98で使用したものと同じディメンション、リレーションおよびaggmapを使用して、アナリティック・ワークスペースが作成されているとします。ここでは次の文を発行して、コンポジットおよびそのコンポジットによりディメンション化される変数を定義するとします。
DEFINE COMP_PROD_GEOG COMPOSITE <PROD GEOG> DEFINE SALES_DIMS_COMPOSITE VARIABLE NUMBER (12,2) <COMP_PROD_GEOG <PROD GEOG>>
例9-98でのsales_dims_reg
と同様に、sales_dims_composite
に同じベース値を移入し、同じaggmap(つまり、sales_aggmap
)を使用してsales_dims_composite
の集計を行うとします。そして、sales_dims_composite
変数に対し次のREPORT文を発行します。
REPORT sales_dims_composite
sales_dims_composite
変数のレポートには、sales_dims_reg
変数のレポートと同じように、152個のセルが表示されます。
-------------------------SALES_DIMS_COMPOSITE-------------------------- ---------------------------------PROD---------------------------------- <PROD_DI <PROD_UP <PROD_UP <PROD_UP <PROD_FA <PROD_FA V: <PROD_TO C: <PROD_UP C: C: MILY: MILY: VideoDiv P: Total GEOG ColorTV> C: BWTV> StndVCR> StrVCR> VCR> TV> > Prod> ------------------------- -------- -------- -------- -------- -------- -------- -------- -------- <GEOG_CITY: Canberra> 11,592.0 NA 38,356.0 3,444.00 41,800.0 11,592.0 53,392.0 53,392.0 <GEOG_CITY: Sydney> NA NA NA NA NA NA NA NA <GEOG_CITY: Darwin> 24,868.0 NA 22,104.0 32,667.0 54,771.0 24,868.0 79,639.0 79,639.0 <GEOG_CITY: Brisbane> 49,556.0 NA 48,239.0 24,285.0 72,524.0 49,556.0 122,080 122,080 <GEOG_CITY: Adelaide> NA NA NA NA NA NA NA NA <GEOG_CITY: Hobart> 17,223.0 NA 18,872.0 48,780.0 67,652.0 17,223.0 84,875.0 84,875.0 <GEOG_CITY: Melbourne> NA 22,000.0 NA NA NA 22,000.0 22,000.0 22,000.0 <GEOG_CITY: Perth> NA NA NA NA NA NA NA NA <GEOG_STATE: ACT> 11,592.0 NA 38,356.0 3,444.00 41,800.0 11,592.0 53,392.0 53,392.0 <GEOG_STATE: NSW> NA NA NA NA NA NA NA NA <GEOG_STATE: NT> 24,868.0 NA 22,104.0 32,667.0 54,771.0 24,868.0 79,639.0 79,639.0 <GEOG_STATE: QLD> 49,556.0 NA 48,239.0 24,285.0 72,524.0 49,556.0 122,080 122,080 <GEOG_STATE: SA> NA NA NA NA NA NA NA NA <GEOG_STATE: TAS> 17,223.0 NA 18,872.0 48,780.0 67,652.0 17,223.0 84,875.0 84,875.0 <GEOG_STATE: VIC> NA 22,000.0 NA NA NA 22,000.0 22,000.0 22,000.0 <GEOG_STATE: WA> NA NA NA NA NA NA NA NA <GEOG_AREA: Aust State> 66,779.0 22,000.0 67,111.0 73,065.0 140,176 88,779.0 228,955 228,955 <GEOG_AREA: Aust Terr> 36,460.0 NA 60,460.0 36,111.0 96,571.0 36,460.0 133,031 133,031 <GEOG_CONT: Australia> 103,239 22,000.0 127,571 109,176 236,747 125,239 361,986 361,986
ただし、sales_dims_comp
変数はコンポジットによりディメンション化されているため、NA
値として表示される65個のセルは変数に格納されません。次のようにsales_dims_composite
変数にNUMVALSキーワードを指定した文を発行しOBJファンクションを呼び出すことによって、ワークスペースに格納されている物理的な値の数を確認できます。
SHOW OBJ(NUMVALS 'sales_dims_composite') 87.00
この文を実行すると、87.00
という値が表示されます。これは、sales_dims_composite
変数の一部として格納されている値が、87個の非NA
値のみであることを示しています。
例9-100 圧縮コンポジットによりディメンション化される変数の定義
例9-98で使用したものと同じディメンション、リレーションおよびaggmapを使用して、アナリティック・ワークスペースが作成されているとします。ここでは次の文を発行して、コンポジットおよびそのコンポジットによりディメンション化される変数を定義するとします。
DEFINE CC_COMP_PROD_GEOG COMPOSITE <PROD GEOG> COMPRESSED DEFINE SALES_DIMS_COMP_COMPOSITE VARIABLE NUMBER (12,0) <CC_COMP_PROD_GEOG <PROD GEOG>>
例9-98でのsales_dims_reg
と同様に、sales_dims_composite
に同じベース値を移入し、同じaggmap(つまり、sales_aggmap
)を使用してsales_dims_comp_composite
の集計を行うとします。ここで、次の文を発行します。
REPORT sales_dims_comp_composite
sales_dims_comp_comp_composite
変数のレポートには、sales_dims_reg
変数のレポートと同じように、152個のセルが表示されます。
-----------------------SALES_DIMS_COMP_COMPOSITE----------------------- ---------------------------------PROD---------------------------------- <PROD_DI <PROD_UP <PROD_UP <PROD_UP <PROD_FA <PROD_FA V: <PROD_TO C: <PROD_UP C: C: MILY: MILY: VideoDiv P: Total GEOG ColorTV> C: BWTV> StndVCR> StrVCR> VCR> TV> > Prod> ------------------------- -------- -------- -------- -------- -------- -------- -------- -------- <GEOG_CITY: Canberra> 11,592.0 NA 38,356.0 3,444.00 41,800.0 11,592.0 53,392.0 53,392.0 <GEOG_CITY: Sydney> NA NA NA NA NA NA NA NA <GEOG_CITY: Darwin> 24,868.0 NA 22,104.0 32,667.0 54,771.0 24,868.0 79,639.0 79,639.0 <GEOG_CITY: Brisbane> 49,556.0 NA 48,239.0 24,285.0 72,524.0 49,556.0 122,080 122,080 <GEOG_CITY: Adelaide> NA NA NA NA NA NA NA NA <GEOG_CITY: Hobart> 17,223.0 NA 18,872.0 48,780.0 67,652.0 17,223.0 84,875.0 84,875.0 <GEOG_CITY: Melbourne> NA 22,000.0 NA NA NA 22,000.0 22,000.0 22,000.0 <GEOG_CITY: Perth> NA NA NA NA NA NA NA NA <GEOG_STATE: ACT> 11,592.0 NA 38,356.0 3,444.00 41,800.0 11,592.0 53,392.0 53,392.0 <GEOG_STATE: NSW> NA NA NA NA NA NA NA NA <GEOG_STATE: NT> 24,868.0 NA 22,104.0 32,667.0 54,771.0 24,868.0 79,639.0 79,639.0 <GEOG_STATE: QLD> 49,556.0 NA 48,239.0 24,285.0 72,524.0 49,556.0 122,080 122,080 <GEOG_STATE: SA> NA NA NA NA NA NA NA NA <GEOG_STATE: TAS> 17,223.0 NA 18,872.0 48,780.0 67,652.0 17,223.0 84,875.0 84,875.0 <GEOG_STATE: VIC> NA 22,000.0 NA NA NA 22,000.0 22,000.0 22,000.0 <GEOG_STATE: WA> NA NA NA NA NA NA NA NA <GEOG_AREA: Aust State> 66,779.0 22,000.0 67,111.0 73,065.0 140,176 88,779.0 228,955 228,955 <GEOG_AREA: Aust Terr> 36,460.0 NA 60,460.0 36,111.0 96,571.0 36,460.0 133,031 133,031 <GEOG_CONT: Australia> 103,239 22,000.0 127,571 109,176 236,747 125,239 361,986 361,986
ただし、sales_dims_comp_comp
変数は圧縮コンポジットによりディメンション化されているため、セル内の値がすべて変数に格納されるわけではありません。NA
値として表示されている65個のセルは変数に格納されず、それらの値は階層へ渡されて、最下位レベルの階層に一度だけ格納されます。
次のようにsales_dims_comp_composite
変数にNUMVALSキーワードを指定した文を発行しOBJファンクションを呼び出すことによって、ワークスペースに格納されている物理的な値の数を確認できます。
SHOW OBJ(NUMVALS 'sales_dims_comp_composite') 38.00
この文を実行すると、38.00
という値が表示されますが、これは、sales_dims_comp_composite
変数の一部として格納されている値が38個のみであることを示しています。これらの値を、次の表に示します。
GEOG | PROD_UPC:ColorTV | PROD_UPC:BWTV | PROD_UPC:StandVCR | PROD_UPC:StrVCR | PROD_FAMILY: VCR | PROD_FAMILY: TV | PROD_DIV: VideoDiv |
---|---|---|---|---|---|---|---|
GEOG_CITY: Canberra |
11,592.0 |
38,356.0 |
3,444.00 |
41,800.0 |
53,392.0 |
||
GEOG_CITY: Darwin |
24,868.0 |
22,104.0 |
32,667.0 |
54,771.0 |
79,639.0 |
||
GEOG_CITY: Brisbane |
49,556.0 |
48,239.0 |
24,285.0 |
72,524.0 |
122,080 |
||
GEOG_CITY: Hobart |
17,223.0 |
18,872.0 |
48,780.0 |
67,652.0 |
84,875.0 |
||
GEOG_CITY: Melbourne |
22,000.0 |
||||||
GEOG_AREA: Aust State |
66,779.0 |
67,111.0 |
73,065.0 |
140,176 |
88,779.0 |
228,955 |
|
GEOG_AREA: Aust Terr |
36,460.0 |
60,460.0 |
36,111.0 |
96,571.0 |
133,031 |
||
GEOG_Cont: Australia |
103,239 |
|
127,57 |
109,176 |
236,747 |
125,239 |
361,986 |
例9-101 パーティションを持つ変数の定義
productおよびtimeでディメンション化され、さらに年ごとのデータが個別のパーティションに入るようにパーティション化されているsales
変数を定義するとします。
アナリティック・ワークスペースには、products
ディメンション、3つのデータ・レベル(日、月、年)を持つ単純な階層ディメンションであるtime
ディメンション、およびtimeの値間の親子関係を示すtime_parentrel
リレーションがあるとします。
DEFINE TIME DIMENSION TEXT DEFINE PRODUCT DIMENSION TEXT DEFINE TIME_PARENTREL RELATION TIME <TIME>
わかりやすくするために、この例では、time
およびproduct
ディメンションは一部分のみ移入され、次の値しか持たないものとします。
TIME -------------- 2003 2002 Dec2003 Jan2003 Dec2002 Jan2002 31Dec2003 01Dec2003 31Jan2003 01Jan2003 31Dec2002 01Dec2002 31Jan2002 01Jan2002 PRODUCT ------- 00001 00002
パーティション変数を作成するには、次の手順に従います。
-
各年のデータに対し1パーティションを定義するパーティション・テンプレートを定義します。
DEFINE partition_sales_by_year PARTITION TEMPLATE <time product> - PARTITION BY LIST (time)(- 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>)
(わかりやすくするために、この例では、各パーティションに対し、各年のディメンション値の一部のみが指定されていることに注意してください。通常、パーティションに多くの数の値を指定する必要がある場合は、DEFINE PARTITION STATEMENT文内ではそれを行いません。かわりに、値を指定せずにパーティションを定義し、その後で、例10-53に記載されているように、MAINTAIN ADD TO PARTITION文またはMAINTAIN MOVE TO PARTITION文を使用して値を指定します。)
-
partition_sales_by_year
というパーティション・テンプレートによって定義されたパーティションを使用して、パーティション化されたsales
変数を定義します。DEFINE sales DECIMAL <partition_sales_by_year<time product>>
-
dayの値でsalesを移入した後、次のREPORT文を発行して、どの
sales
値がどのパーティションにあるかを確認できます。REPORT DOWN PARTITION(partition_sales_by_year) time product sales PARTITION(PARTITION_SALES_BY_YEAR) TIME PRODUCT SALES ----------------------------------- ---------- ---------- ---------- TIME_2003 2003 00001 NA TIME_2003 Dec2003 00001 NA TIME_2003 Jan2003 00001 NA TIME_2003 31Dec2003 00001 14.78 TIME_2003 01Dec2003 00001 15.52 TIME_2003 31Jan2003 00001 13.61 TIME_2003 01Jan2003 00001 10.39 TIME_2003 2003 00002 NA TIME_2003 Dec2003 00002 NA TIME_2003 Jan2003 00002 NA TIME_2003 31Dec2003 00002 16.05 TIME_2003 01Dec2003 00002 12.27 TIME_2003 31Jan2003 00002 10.83 TIME_2003 01Jan2003 00002 11.07 TIME_2002 2002 00001 NA TIME_2002 Dec2002 00001 NA TIME_2002 Jan2002 00001 NA TIME_2002 31Dec2002 00001 18.80 TIME_2002 01Dec2002 00001 13.64 TIME_2002 31Jan2002 00001 12.41 TIME_2002 01Jan2002 00001 16.97 TIME_2002 2002 00002 NA TIME_2002 Dec2002 00002 NA TIME_2002 Jan2002 00002 NA TIME_2002 31Dec2002 00002 17.47 TIME_2002 01Dec2002 00002 16.58 TIME_2002 31Jan2002 00002 18.94 TIME_2002 01Jan2002 00002 18.36
例9-102 固定幅のTEXT変数の定義
次の文により、employee
でディメンション化されたlastname
というTEXT変数が定義されます。lastname
内の値は20文字に制限されているため、20文字を超える値は切り捨てられます。
DEFINE lastname TEXT <employee> WIDTH 20
例9-103 名前付きBツリー・コンポジットを使用する変数の定義
アナリティック・ワークスペースに次のようなディメンションがあるとします。
DEFINE month DIMENSION TEXT DEFINE product DIMENSION TEXT DEFINE region DIMENSION TEXT
会社で、すべての地域ではなく一部の地域でのみ特定の製品の販促マーケティングを実施し、変数データがproduct
およびregion
ディメンションでスパースになるとします。そのため、ベース・ディメンションがproduct
およびregion
であるproddist
というコンポジットを定義するとします。コンポジットには、データを持つ値についてのみ、ディメンションと値の組合せが含まれます。たとえば、テントについての販促は行うがスキーについては行わないという場合、コンポジットにはテントと地域の組合せは含まれますが、スキーと地域の組合せは含まれません。
次の文で、ベース・ディメンションがproduct
およびdistrict
であるproddist
というBツリー・コンポジットと、month
およびproddist
でディメンション化されたpromo
という変数が作成されます。
DEFINE proddist COMPOSITE <product region> DEFINE promo VARIABLE INTEGER <month proddist <product district>>
わかりやすくするために、アナリティック・ワークスペースには次のディメンション・データのみが格納されているとします。
PRODUCT -------------- Tents Skis REGION -------------- Northeast Southwest MONTH -------------- Jan2003 Feb2003 Mar2003 Apr2003 May2003 Jun2003 Jul2003 Aug2003 Sep2003 Oct2003 Nov2003 Dec2003
2003年9月にNortheast地域において、$5,000の経費でスキーの販促セールを実施することにしたとします。この内容でpromo
を移入した後、promo
のセルは12セルのみで、各セルは、month
の値、およびproddist
についての<'Skis' 'Northeast'>
のコンポジット・タプル値によりディメンション化されています。2003年9月のセルは値$5,000を含み、他のすべてのセルはNA
を含みます。promo内には、これ以外のNA値はなく、product
またはregion
の他の値について、セルは作成されません。
例9-104 NULLトラッキングを持つ変数の定義
アナリティック・ワークスペースに次のオブジェクトが定義されているとします。
DEFINE GEOG DIMENSION TEXT LD A dimension with a simple hierarchy for geography DEFINE geog_levellist DIMENSION TEXT LD List of Levels in in the hierarchy of the geog dimension DEFINE GEOG_PARENTREL RELATION GEOG <GEOG> LD Self-relation for geog showing parents of each value in the hierarchy DEFINE GEOG_LEVELREL RELATION GEOG_LEVELLIST <GEOG> LD Level of each dimension member for geog DEFINE product DIMENSION TEXT LD A nonhierarchical dimension DEFINE time DIMENSION TEXT LD A hierarchical text dimension for time DEFINE time_levellist DIMENSION TEXT LD List of Levels in hierarchy of the time dimension DEFINE time_parentrel RELATION time <time> LD A self-relation for time show parents of each value in the hierarchy DEFINE TIME_LEVELREL RELATION TIME_LEVELLIST <TIME> LD Level of each dimension member for time DEFINE prod_geog COMPOSITE <product geog> COMPRESSED
ここで、time
およびprod_geog
コンポジットによりディメンション化しておく必要があるsales
変数を定義するとします。この変数は、最終的にSQL IMPORTを使用して移入することになりますが、ファクト表内の一部のファクトにはNULL値が含まれていることがわかっているため、この変数にはNULLトラッキングを含める必要があります。そのためには、WITH NULLTRACKING句が指定された次のような文を発行します。
DEFINE sales VARIABLE DECIMAL <time prod_geog<product geog>> WITH NULLTRACKING
テスト用に、RANDOMファンクションを使用してこの変数を移入します。変数の移入を行ったら、レポートを発行して変数内のNA値を表示します。
REPORT DOWN time ACROSS geog: sales PRODUCT: TVs -----------------------SALES----------------------- -----------------------GEOG------------------------ TIME Boston Springfield Hartford All Places -------------- ------------ ------------ ------------ ------------ 2007 NA NA NA NA 2008 NA NA NA NA All years NA NA NA NA Jan07 NA NA NA NA Feb07 NA NA NA NA Mar07 NA NA NA NA Apr07 NA NA NA NA May07 NA NA NA NA Jun07 NA NA NA NA Jul07 NA NA NA NA Aug07 NA NA NA NA Sep07 NA NA NA NA Oct07 NA NA NA NA Nov07 NA NA NA NA Dec07 NA NA NA NA Jan08 NA NA NA NA Feb08 NA NA NA NA Mar08 NA NA NA NA Apr08 NA NA NA NA May08 NA NA NA NA Jun08 NA NA NA NA Jul08 NA NA NA NA Aug08 NA NA NA NA Sep08 NA NA NA NA Oct08 NA NA NA NA Nov08 NA NA NA NA Dec08 NA NA NA NA PRODUCT: Radios -----------------------SALES----------------------- -----------------------GEOG------------------------ TIME Boston Springfield Hartford All Places -------------- ------------ ------------ ------------ ------------ 2007 NA NA NA NA 2008 NA NA NA NA All years NA NA NA NA Jan07 24.59 23.70 33.12 28.65 Feb07 22.78 21.42 26.28 37.06 Mar07 25.74 32.08 22.75 24.62 Apr07 22.23 23.21 20.79 28.68 May07 20.51 29.71 30.35 33.05 Jun07 34.43 35.96 33.85 39.34 Jul07 24.86 38.02 36.78 31.22 Aug07 39.05 21.08 35.80 33.81 Sep07 34.38 21.69 25.04 33.40 Oct07 33.82 39.27 20.28 24.39 Nov07 25.48 23.03 32.45 39.94 Dec07 25.14 30.66 33.75 23.37 Jan08 NA NA NA NA Feb08 NA NA NA NA Mar08 NA NA NA NA Apr08 NA NA NA NA May08 NA NA NA NA Jun08 NA NA NA NA Jul08 NA NA NA NA Aug08 NA NA NA NA Sep08 NA NA NA NA Oct08 NA NA NA NA Nov08 NA NA NA NA Dec08 NA NA NA NA
同じくテスト用に、NAFLAGファンクションを使用してレポートを生成し、変数内のNAのタイプを取得します。次のレポートからわかるように、RANDOMを使用して変数の移入が行われたため、NAはすべて通常のNA値であって、NA2値ではありません。
REPORT DOWN time ACROSS geog: NAFLAG(sales) PRODUCT: TVs -------------------NAFLAG(SALES)------------------- -----------------------GEOG------------------------ TIME Boston Springfield Hartford All Places -------------- ------------ ------------ ------------ ------------ 2007 1 1 1 1 2008 1 1 1 1 All years 1 1 1 1 Jan07 1 1 1 1 Feb07 1 1 1 1 Mar07 1 1 1 1 Apr07 1 1 1 1 May07 1 1 1 1 Jun07 1 1 1 1 Jul07 1 1 1 1 Aug07 1 1 1 1 Sep07 1 1 1 1 Oct07 1 1 1 1 Nov07 1 1 1 1 Dec07 1 1 1 1 Jan08 1 1 1 1 Feb08 1 1 1 1 Mar08 1 1 1 1 Apr08 1 1 1 1 May08 1 1 1 1 Jun08 1 1 1 1 Jul08 1 1 1 1 Aug08 1 1 1 1 Sep08 1 1 1 1 Oct08 1 1 1 1 Nov08 1 1 1 1 Dec08 1 1 1 1 PRODUCT: Radios -------------------NAFLAG(SALES)------------------- -----------------------GEOG------------------------ TIME Boston Springfield Hartford All Places -------------- ------------ ------------ ------------ ------------ 2007 1 1 1 1 2008 1 1 1 1 All years 1 1 1 1 Jan07 0 0 0 0 Feb07 0 0 0 0 Mar07 0 0 0 0 Apr07 0 0 0 0 May07 0 0 0 0 Jun07 0 0 0 0 Jul07 0 0 0 0 Aug07 0 0 0 0 Sep07 0 0 0 0 Oct07 0 0 0 0 Nov07 0 0 0 0 Dec07 0 0 0 0 Jan08 1 1 1 1 Feb08 1 1 1 1 Mar08 1 1 1 1 Apr08 1 1 1 1 May08 1 1 1 1 Jun08 1 1 1 1 Jul08 1 1 1 1 Aug08 1 1 1 1 Sep08 1 1 1 1 Oct08 1 1 1 1 Nov08 1 1 1 1 Dec08 1 1 1 1
再びテスト用に、NAファンクションを使用して、2008年の月でディメンション化された変数のセルにNA2ビットを設定します。次のコードは、NA2ファンクションのSHOWを発行し、そのファンクションを使用して、2008年の月でディメンション化された変数のセルにNA2ビットを設定した結果を示したものです。
SHOW NA2 NA
LIMIT time TO 'Jan08' 'Feb08' 'Mar08' 'Apr08' 'May08' 'Jun08' 'Jul08' 'Aug08' 'Sep08' 'Oct08' 'Nov08' 'Dec08'
saleswithnull= NA2
状況を単純化して、ここでは次の3つのLIMIT文を発行し、sales変数およびsales変数に対するNAFLAGファンクションについてのレポートを表示するというテストを行います。NAFLAGレポートに示されているように、NA2値が割り当てられている月の値Jan08
では、NAFLAGに対する値として2
が返されており、年2008
では値1
が返されています。
LIMIT product to 'Radios' LIMIT time TO 'Jan08' '2008' LIMIT geog TO 'Boston' 'All Places' REPORT DOWN time ACROSS geog: sales PRODUCT: Radios ----------SALES---------- ----------GEOG----------- TIME Boston All Places -------------- ------------ ------------ Jan08 NA NA 2008 NA NA REPORT DOWN time ACROSS geog: NAFLAG(sales)
PRODUCT: Radios ------NAFLAG(SALES)------ ----------GEOG----------- TIME Boston All Places -------------- ------------ ------------ Jan08 2 2 2008 1 1
ここで、次のコードを発行してsales変数からNA2ビットを削除するとします。
CHGDFN sales DROP NULLTRACKING
sales変数のDESCRIBEでは、その定義の中にWITH NULLTRACKING句がないことが示されており、NAFLAGの結果のレポートでは、現在のNA値がNA2ビットを持たない通常のNA値であることが示されています。
DESCRIBE sales DEFINE SALES VARIABLE DECIMAL <TIME PROD_GEOG <PRODUCT GEOG>> REPORT DOWN time ACROSS geog: sales PRODUCT: Radios ----------SALES---------- ----------GEOG----------- TIME Boston All Places -------------- ------------ ------------ Jan08 NA NA 2008 NA NA "Report on the type of NA values in the sales variable REPORT DOWN time ACROSS geog: NAFLAG(sales) PRODUCT: Radios ------NAFLAG(SALES)------ ----------GEOG----------- TIME Boston All Places -------------- ------------ ------------ Jan08 1 1 2008 1 1
DEFINE WORKSHEET
DEFINEコマンドとともにWORKSHEETキーワードを使用すると、アナリティック・ワークスペースに新しいワークシート・オブジェクトが追加されます。ワークシートは、スプレッドシートと同様に、ワークシート行とワークシート列でディメンション化された2次元のオブジェクトです。スプレッドシート・パッケージとワークスペース・ディメンションおよび変数との間で転送する必要のあるデータを、一時的に保存できます。
ワークシートを最初に定義した時点では、ワークシートに値は含まれていません。既存のスプレッドシートからワークシートに値を移入するには、IMPORT(スプレッドシート)文を使用でき、MAINTAIN文を使用すると、ワークシート行およびワークシート列のディメンションに対して値の追加や削除を行うことができます。
構文
DEFINE name WORKSHEET [<column-dim row-dim>] [TEMP] [AW workspace] [SESSION]
パラメータ
- name
-
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
- WORKSHEET
-
ワークシートを定義するときのオブジェクト型。
- <column-dim row-dim>
-
ワークシートのディメンションの名前。この引数を指定する場合は、column-dimおよびrow-dimに2つの
INTEGER
ディメンションの名前を指定する必要があります。この引数を指定しない場合は、ワークシートは自動でWKSCOL
およびWKSROW
でディメンション化されます。詳細は、「ワークシート・ディメンション」を参照してください。 - TEMP
-
ワークシートが一時的であることを示します。ワークシートは指定されたワークスペース内に定義され、現行のセッションの間のみ値を保持できます。ただし、更新およびコミットすると、ワークシートの定義は保存されます。セッションを終了するか、別のワークスペースに切り替えると、データ値は廃棄されます。
- AW workspace
-
ワークシートを定義する先の、アタッチされたワークスペースの名前。ワークシートは、そのディメンションと同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
- SESSION
-
オブジェクトを現行のセッションでのみ存在させることを指定します。セッションの終了時に、オブジェクトは廃棄されます。SESSIONで指定される動作は、TEMPキーワードで指定される動作とは異なり、TEMPキーワードでは値は一時的ですが、オブジェクト定義は作成したワークスペースに保存されます。
使用上の注意
ワークシート・ディメンション
ワークシートは常に、ワークシートの行と列を表す2つのディメンションによりディメンション化される必要があります。ワークシート行およびワークシート列のディメンションは、Oracle OLAPにより自動で作成することも、明示的に作成することもできます。
-
ワークシート行ディメンションおよびワークシート列ディメンションを作成して名前をDEFINE WORKSHEETのcolumn-dimおよびrow-dim引数に指定しない場合は、Oracle OLAPにより、自動で次のディメンションが作成されます。
-
ワークシート行のための、1から63までの値を持つ
WKSROW
というINTEGERディメンション -
ワークシート列のための、1から63までの値を持つ
WKSROW
というINTEGERディメンション
注意:
アタッチされているいずれかのワークシートに
WKSCOL
およびWKSROW
がすでに存在する場合、Oracle OLAPは、現行のワークシート内にこれらを作成できません。この場合、DEFINE WORKSHEETコマンドは、これらのデフォルト・ディメンションを使用するワークシートの作成に失敗します。(また、WKSCOL
とWKSROW
は、DESCRIBEによって生成されたワークシートの説明には表示されないことに注意してください。) -
-
ワークシート行およびワークシート列のディメンションは、他の単純なディメンションを作成する場合と同じように、次の文を発行することで作成できます。
-
DEFINE DIMENSION(単純)文を使用して、2つの単純なINTEGERディメンションを作成します。一方のディメンションは行数、もう一方は列数を表します。
-
MAINTAIN文を使用して、行数を表す整数を持つディメンションと列数を表す整数を持つもう1つのディメンションを移入します。
-
例
例9-105 ワークシートの定義
これらの文により、columns
およびrows
でディメンション化された、travelexp
という一時ワークシートが定義されます。
DEFINE itemsheet WORKSHEET DEFINE columns INT DIMENSION MAINTAIN columns ADD 5 DEFINE rows INT DIMENSION MAINTAIN rows ADD 10 DEFINE travelexp WORKSHEET <columns rows> TEMPORARY
例9-106 スプレッドシート・データのインポート
スプレッドシートからワークシートへデータをインポートできます。すべてのセルが同じ型のデータを含む場合は、UNRAVELを使用して、1つの文でデータを変数へ転送できます。ワークシート・ディメンションをセルの小さいグループに制限し、UNRAVELを使用して各グループを個別の変数に転送することもできます。インポートしたデータをitemsheet
というワークシートからitems
という変数へ転送するには、次の文を使用できます。
DEFINE itemsheet WORKSHEET IMPORT itemsheet FROM dif FILE 'file name' LIMIT WKSCOL TO FIRST 3 LIMIT WKSROW TO FIRST 10 items = UNRAVEL(itemsheet)
DELETE
DELETEコマンドは、アナリティック・ワークスペースから1つ以上のオブジェクトを削除するコマンドです。UPDATE文およびCOMMIT文を実行すると、削除が永続的になります。
オブジェクトを削除する前に、その関連オブジェクトをすべて削除しておく必要があります。たとえば、あるディメンションを削除する場合、そのディメンションによってディメンション化された変数を最初に削除する必要があります。また、PERMIT文により、アクセス権を変更する権限がないことが検出された場合、オブジェクトは削除できません。
ヒント:
オブジェクトの削除を試行するとエラー・メッセージが表示される場合、そのオブジェクトの名前が予約語である可能性があります。(予約語は、RESERVEDを使用して確認できます。)その場合は、RENAME文でオブジェクトに新しい名前を付けてから削除します。
構文
DELETE name... [AW workspace]
パラメータ
- name...
-
空白またはカンマで区切られた、1つ以上のオブジェクトの名前。DELETEを実行すると、適切なワークスペースからこれらのオブジェクトの定義が削除されます。
修飾オブジェクト名を指定するかAW引数を使用すると、各オブジェクトを削除する先の、アタッチされたワークスペースを指定できます。ただし、同じDELETEコマンド内で、修飾オブジェクト名とAW引数の両方は使用できません。
注意:
削除するオブジェクトが、アタッチされている別のワークスペース内の既存オブジェクトと同じ名前を持つ場合でも、Oracle OLAPでは警告を行いません。また、NAMEディメンションがそのすべての値よりも少なく制限されている場合、DELETEコマンドを使用すると、DELETEによってNAMEのステータスが自動的にALLに設定されます。
- AW workspace
-
指定したすべてのオブジェクトを削除する先の、アタッチされたワークスペースの名前。修飾オブジェクト名またはAW引数を使用してアナリティック・ワークスペースを指定しない場合、オブジェクトは現行のワークスペースから削除されます。
例
例9-107 ディメンションの削除
city
というディメンションおよびpopulation
という変数を削除するとします。変数population
は、city
によりディメンション化されるか、それを使用する唯一のオブジェクトであるため、DELETEコマンドでこのディメンションの前にこの変数を指定すると、1つのコマンドでこれら両方を削除できます。
DELETE population city
この文で、population
の前にcity
を指定すると、エラーが発生します。
DESCRIBE
DESCRIBEコマンドは、1つ以上のワークスペース・オブジェクトの定義を示すレポートを生成するコマンドです。DESCRIBEコマンドの出力に表示されるオブジェクト定義には、説明(LD)、時間ディメンションの値名書式(VNF)、FORMULAに関連付けられている式、PERMIT文で指定されたアクセス権、計算仕様の内容(プログラムまたはモデルの内容など)などがあります。DESCRIBEを使用すると、オブジェクトへのアクセス権や、アクセス権を変更する権限が付与されていない場合でも、オブジェクトの定義を表示できます。オブジェクト定義の一部には、レポートされないものがあります(「DESCRIBEの出力でレポートされない内容」を参照)。
構文
DESCRIBE [names]
パラメータ
- names
-
空白またはカンマで区切られた、1つ以上のワークスペース・オブジェクトの名前。この引数を省略した場合、DESCRIBEはNAMEディメンションの現行のステータスにあるすべてのオブジェクトの定義を表示します。そのため、この引数を省略する場合は、DESCRIBEとLIMITコマンドを組み合せて使用することで、ワークスペース内の特定のオブジェクト・グループの定義をレポートできます(例9-109を参照)。
使用上の注意
DESCRIBEの出力でレポートされない内容
オブジェクト定義の一部は、DESCRIBEの出力に表示されません。
-
オブジェクトへのアクセス権を変更する権限がPERMIT文によって拒否された場合は、DESCRIBEにはこのオブジェクトの定義に関連付けられたアクセス権が含まれません。
-
ワークシート定義の場合、DESCRIBEレポートにはデフォルトのディメンションである
WKSCOL
およびWKSROW
は含まれません。ただし、ユーザー定義ディメンションを使用してワークシートを定義した場合は、このユーザー定義ディメンションがレポートに含まれます。例9-110を参照してください。 -
オブジェクトに関連付けられたプロパティおよびトリガーは表示されません。オブジェクトに関連付けられたプロパティおよびトリガーを表示するには、FULLDSCプログラムを使用する必要があります。
-
コンポジットまたは結合でデフォルトの索引タイプを使用するよう定義した場合、この情報は表示されません。
-
従来の1バイトまたは2バイト形式になっている、ディメンション化されたBOOLEAN変数は、WIDTH 1およびWIDTH 2としてリストされます。1ビット形式で作成されたBOOLEAN変数の幅は表示されません。
DESCRIBE出力を使用したオブジェクトの作成
DESCRIBEコマンドからの出力を使用すると、この出力の各行は有効な文であるため、他のワークスペースにオブジェクトを作成できます。たとえば、OUTFILE文を実行して後続の出力をファイルに送り、その後でDESCRIBEコマンドを実行できます。次に別のワークスペースにアクセスしてINFILE文を使用すると、DESCRIBE出力を読み取ることができます。これで、対象のワークスペースに同じオブジェクトが作成されます。
例
例9-108 変数に関する情報の表示
この例では、2つの変数sales
およびprice
の定義のレポートが生成されます。次の文
DESCRIBE sales price
によって、次の出力が生成されます。
DEFINE SALES VARIABLE DECIMAL <MONTH PRODUCT DISTRICT> LD Sales Revenue DEFINE PRICE VARIABLE DECIMAL <MONTH PRODUCT> LD Wholesale Unit Selling Price
例9-109 すべてのリレーションに関する情報の表示
ワークスペース内にあるすべてのリレーションの定義を参照するとします。最初にOBJファンクションを使用して、NAMEディメンションを制限します。NAMEを制限したら、引数を指定しないでDESCRIBEコマンドを使用し、定義のレポートを生成します。次の文により、アナリティック・ワークスペース内のリレーションの説明が生成されます。
LIMIT NAME TO OBJ(TYPE) EQ 'RELATION' DESCRIBE
DEFINE REGION.DISTRICT RELATION REGION <DISTRICT> LD REGION for each DISTRICT DEFINE DIVISION.PRODUCT RELATION DIVISION <PRODUCT> LD DIVISION for each PRODUCT DEFINE MLV.MARKET RELATION MARKETLEVEL <MARKET> DEFINE MARKET.MARKET RELATION MARKET <MARKET> LD Self-relation for the Market Dimension
OBJ(TYPE)によって返される値は必ず大文字であるため、一致する結果を得るには、LIMITコマンドで、'relation'ではなく'RELATION'を使用する必要があります。
例9-110 ワークシートに関する情報の表示
情報が表示されるワークシートのディメンションは、ユーザー定義ディメンションのみです。デフォルトのディメンションであるWKSCOL
およびWKSROW
は、説明には含まれていません。次の文により
DEFINE work1 WORKSHEET DEFINE columns DIMENSION INTEGER DEFINE rows DIMENSION INTEGER DEFINE work2 WORKSHEET <columns rows> DESCRIBE work1 work2
によって、次の出力が生成されます。
DEFINE WORK1 WORKSHEET DEFINE WORK2 WORKSHEET <COLUMNS ROWS>
DO ... DOEND
DOおよびDOENDコマンドは、OLAP DMLプログラム内で、プログラムの1つ以上の文のグループをひとまとめにするコマンドです。DOおよびDOENDは、通常、次のいずれかをまとめるときに使用します。
-
IFコマンドで指定した条件下で実行する一連の文
-
FORまたはWHILEによって導入された繰返しループ内の一連の文
-
SWITCHコマンドのCASEラベル
DO文は他のDO文の内側に置いて文のグループをネストできます。文グループの終了を示すためのDOENDが、それぞれのDO文に対応して存在するかぎり、必要な数のグループをネストできます。
構文
DO statement1 ... statementN DOEND
使用上の注意
TEMPSTAT文とDOEND文
プログラムのFORループ処理内部で、DO/DOEND句がTEMPSTATの後に続く場合、DOEND、BREAK、GOTOのいずれかが検出されると、ステータスはリストアされます。
例
例9-111 DOおよびDOENDとFOR文との組合せ
ROWコマンドを使用して、テントの売上数量を2か月ごとに示すレポートを生成するとします。month
ディメンションの値ごとに繰り返し実行するROW文およびBLANK文をひとまとめにするには、DO ... DOENDを使用します。次のようなプログラムを作成できます。
LIMIT month TO 'Jan96' to 'Feb96' ROW district ROW UNDER '-' VALONLY name.product FOR month DO ROW INDENT 5 month WIDTH 6 UNITS BLANK DOEND
このプログラムによって生成される出力は、次のとおりです。
BOSTON 3-Person Tents -------------- Jan96 307 Feb96 209
EDIT
EDITコマンドは、OLAP Worksheetの編集ウィンドウを表示するコマンドです。このコマンドを使用できるのは、OLAP Worksheetを使用してOracle OLAPにアクセスする場合のみです。
OLAP Worksheetの編集ウィンドウの詳細は、OLAP Worksheetのヘルプを参照してください。
構文
EDIT {PROGRAM|MODEL|AGGMAP|FORMULA} object-name
パラメータ
使用上の注意
新しく定義されたAggmapの編集による割当て仕様のコーディング
定義直後のaggmapの中身は空で、型はNA
です。型が指定されていないaggmapに対してEDITコマンドを使用すると、OLAP Worksheetによって自動的にAGGMAP文が挿入され、そのaggmapは集計仕様になります。
そのため、aggmapを割当て仕様として使用する予定がある場合は、OLAP Worksheetの編集ウィンドウでaggmapを開く前に、次の文でそのaggmapを割当て仕様に指定します。
CONSIDER aggmap-name
ALLOCMAP 'END'
例
例9-112 プログラムの編集
次の文をOLAP Worksheetで実行すると、myprog
プログラムがOLAP Worksheetの編集ウィンドウに表示されます。
EDIT myprog
例9-113 モデルの編集
次の文をOLAP Worksheetで実行すると、myModel
というモデルがOLAP Worksheetの編集ウィンドウに表示されます。
EDIT MODEL myModel
EQ
EQコマンドは、定義済の計算式に新しい式を指定するコマンドです。EQを使用して式を計算式の定義に割り当てるには、この定義が最新の定義、あるいは現行のセッション中に検討された定義である必要があります。そうでない場合は、まずCONSIDERコマンドを使用して現行の定義にする必要があります。
EQコマンドの代替コマンドはEDIT FORMULAコマンドであり、OLAP Worksheet内でのみ使用できます。EDIT FORMULAコマンドを実行すると、計算式の計算の対象となる式を追加、削除または変更できる編集ウィンドウが開きます。
ここで説明するEQコマンドを、同じ型の値を比較するときに使用するEQ演算子と混同しないように注意してください。
構文
EQ [expression]
使用上の注意
データ型とディメンション
通常、新しい式のデータ型とディメンションは、計算式の定義で指定したデータ型とディメンションに一致します。一致していない場合、得られた値は計算式のデータ型に変換され、結果が強制的に計算式のディメンション性に合せられます。DESCRIBEコマンドを使用すると、計算式のデータ型とディメンションが表示されます。新しい式のデータ型とディメンションを確認するには、式を解析します。例9-115を参照してください。
EQコマンドによる計算式のデータ型またはディメンションの変更はできません。これらを変更するには、計算式を削除してから再定義する必要があります。
例
例9-114 EQの追加
この例では、次のように定義されたf1
という計算式に新しい式を指定します。
DEFINE f1 FORMULA INTEGER <month line division> EQ actual * 2
次の文により
CONSIDER f1 EQ actual * 3 DESCRIBE f1
計算式の定義と新しいEQが次のように生成されます。
DEFINE F1 FORMULA INTEGER <MONTH LINE DIVISION> EQ actual * 3
例9-115 PARSEとEQの使用方法
次の例は、ワークスペースにline.totals
という名前の計算式がすでに存在していることを前提としています。PARSE文およびSHOW INFO文により、式のディメンション性とデータ型が確認されます。CONSIDER文およびEQ文により、式がline.totals
計算式に割り当てられます。line.totals
計算式の定義は次のとおりです。
DEFINE line.totals FORMULA DECIMAL <year line>
次の文により
PARSE 'total(actual line year)' SHOW INFO(PARSE DIMENSION)
によって、次の出力が生成されます。
YEAR LINE
次の文
SHOW INFO(PARSE DATA)
によって、次の出力が生成されます。
DECIMAL
INFO(PARSE)からの出力は、この式のディメンション性とデータ型がline.totals
計算式と同じであることを示しています。次の文により
CONSIDER line.totals EQ TOTAL(actual line year) DESCRIBE line.totals
line.totals
の定義とその新しいEQが表示されます。
DEFINE LINE.TOTALS FORMULA DECIMAL <YEAR LINE> EQ total(actual line year)
EXPORT
EXPORTコマンドは、ワークスペース・オブジェクトをアナリティック・ワークスペースから外部ファイルにコピーするコマンドです。EXPORTを使用すると、データとオブジェクト定義の両方をワークスペースからEIFファイルにコピーしたり、OLAP DMLワークシート・オブジェクトをスプレッドシート・ファイルにコピーしたりできます。
EXPORTコマンドの構文は、EIFファイルまたはスプレッドシート・ファイルを生成するために使用されるかどうかによって異なるので、次のように2つに分けて説明します。
EXPORT (EIF)
EXPORT(EIFへ)コマンドは、データおよび定義をOracle OLAPアナリティック・ワークスペースからEIFファイルにコピーします。EXPORTは、コマンドに指定しなくても、エクスポートされるデータのすべてのディメンションもコピーします。Oracle OLAPにおけるデータのディメンションのステータスが、エクスポートされる値を決定します。
ヒント:
EIFファイルのインポートおよびエクスポートの方法を決定するオプションは複数あります。これらのオプションは、「EIFオプション」に記載されています。
EXPORT(EIFへ)は一般的にIMPORT(EIF)とともに使用して、Oracle OLAPワークスペースを別のOracle OLAPワークスペースにコピーします。オブジェクトをソース・ワークスペースからEIFファイルにエクスポートし、次にそのオブジェクトをEIFファイルからターゲット・ワークスペースにインポートします。ソースおよびターゲットのワークスペースが存在する場所は、同じプラットフォームでも異なるプラットフォームでも構いません。
構文
EXPORT export_item TO EIF FILE file-name [LIST] [NOPROP] - [NOREWRITE|REWRITE] [FILESIZE n [K, M, or G]] - [NOTEMPDATA] [NLS_CHARSET charset-exp] [AGGREGATE | NOAGGR] - [API | NOAPI]
ここで、export_itemは次のいずれかです。
- ALL
- name [AS newname]
- exp [SCATTER AS scattername [TYPE scattertype] [EXCLUDING (concatbasedim . . .)]
- exp AS name [EXCLUDING (concatbasedim . . .)]
パラメータ
- ALL
-
現在NAMEのステータスにあるオブジェクトをすべてOracle OLAPがエクスポートすることを指定します(したがって、ワークスペースのすべてのオブジェクトとは限りません)。
注意:
キューブのメタデータをエクスポートする場合(つまり、デフォルトのAPIキーワードが有効になっている場合)、ワークスペースのすべてのオブジェクトをエクスポートする必要があります(つまり、export_itemでALLキーワードを指定する必要があります)。ワークスペースの一部のオブジェクトのみをエクスポートする場合は、キューブのメタデータをエクスポートすることはできません。
- name
-
エクスポートされるアナリティック・ワークスペース・オブジェクトまたはオプションの名前。複数の名前を指定してエクスポートできます。
- AS newname
-
アナリティック・ワークスペース・オブジェクトまたはオプションの新しい名前を指定します。式、ローカル変数またはローカル値セットを指定する場合、IMPORT(EIF)がデータの受取りに使用するオブジェクトの名前を指定するためにAS nameを使用する必要があります。
注意:
ディメンションの名前は変更できません。
- exp
-
計算またはエクスポートされる式。複数の名前を指定してエクスポートできます。
- SCATTER AS scattername [TYPE scattertype]
-
複数のパスによってメモリーに書き込む必要があるような大規模な多次元オブジェクトをエクスポートする場合、SCATTER AS scatternameを使用してファイルI/Oのパフォーマンスを向上できます。最初に1つまたは2つの新しい1次元のテキスト変数(scatternameおよびscattertype)を定義し、テキスト値とそれに対応するデータ型をscatternameに割り当てる必要があります。SCATTER AS scatternameを使用すると、scatternameで指定したslicesの別々の変数として多次元式がOracle OLAPによってエクスポートされます。各スライス変数が同じデータ型である場合は、expをそのデータ型にするのみなので、TYPE scattertypeを使用する必要がありません。
- EXCLUDING (concatbasedim . . .)
-
EXCLUDING句は、name引数で指定する連結ディメンションにのみ適用されます。concatbasedimに指定する値は、Oracle OLAPがエクスポートしない連結のベース・ディメンションを指定します。
- ALL
-
現在NAMEのステータスにあるオブジェクトをすべてOracle OLAPがエクスポートすることを指定します(したがって、ワークスペースのすべてのオブジェクトとは限りません)。
- TO EIF FILE
-
EIFファイルを作成することを示します。
- file-name
-
出力が書き込まれるファイルの名前を表すテキスト式。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。
注意:
ディレクトリ・オブジェクトはデータベースで定義され、ディレクトリおよびディレクトリ内のファイルへのアクセスを制御します。CDAコマンドを使用すると、カレント・ディレクトリ・オブジェクトの特定や指定を行うことができます。使用するデータベース・ユーザー名で読取りおよび書込み可能なファイルがあるディレクトリ・オブジェクトへのアクセス権については、Oracle DBAに問い合せてください。
- LIST
-
エクスポートが開始されると、各オブジェクトの定義を現行の出力ファイルに送信します。ディメンションの場合、EXPORTはエクスポートされている値の数を示し、コンポジットの場合、ディメンション値の組合せの数を示します。さらに、2分ごとおよびエクスポート処理後の合計読取りバイト数を示すメッセージも生成されます。
- NOPROP
-
PROPERTYを使用して各オブジェクトに割り当てたプロパティを、EIFファイルに書き込まないようにします。
- NOREWRITE
- REWRITE
-
ターゲット・ファイルがすでに存在する場合にEXPORTがそれを上書きするかどうかを指定します。NOREWRITE(デフォルト)は、既存のターゲット・ファイルをそのままにして現行の出力ファイルにエラー・メッセージを送信します。REWRITEは、EXPORTが既存のファイルを新しいEIFファイルに置き換えます。
- FILESIZE n [K|M|G]
-
EIFファイルの各コンポーネント・ファイル(メイン・ファイルおよび拡張ファイル)の最大サイズを設定します。エクスポート処理にともなってファイルのサイズがFILESIZEの値を超えると、あるいは、現行のディスクまたは場所に空き領域がなくなると、Oracle OLAPはEIF拡張ファイルを作成します。「EIF拡張ファイル」を参照してください。
FILESIZEは、その設定後に作成されるコンポーネント・ファイルに影響します。その設定より前のコンポーネント・ファイルのサイズは、ファイルが作成されたときのFILESIZEの設定またはディスクがいっぱいになったときのファイルのサイズによって決まるので様々です。
K
、M
、G
のいずれも指定しない場合、nに対して指定する値はバイトとして解釈されます。値nの後にK
、M
、G
のいずれかを指定すると、この値はそれぞれKB、MB、GBと解釈されます。FILESIZEに設定可能な値は81,920バイト(80KB)から2,147,479,552バイト(2GB)です。
- NOTEMPDATA
-
TEMP変数のデータをEIFファイルに書き込まないようにします。
- NLS_CHARSET charset-exp
-
file-nameによって指定されるファイルにテキスト・データをエクスポートする際にOracle OLAPが使用するキャラクタ・セットを指定しますが、これによって、Oracle OLAPはデータをそのキャラクタ・セットに正確に変換できます。この引数は最後に指定する必要があります。この引数を省略すると、Oracle OLAPはNLS_LANGオプションに記録されているデータベース・キャラクタ・セットでデータをエクスポートします。
- AGGREGATE
-
集計したデータをエクスポートします。(デフォルトの動作)。
- NOAGGR
-
集計したデータをエクスポートしません。
- API
- NOAPI
-
指定した項目に対して定義されているキューブのメタデータをエクスポートしません。
使用上の注意
異なるプラットフォーム間でのインポートとエクスポート
コンピュータ間でEIFファイルを転送する場合、バイナリ転送を使用してプラットフォーム間のファイル形式の非互換性の問題を回避します。EIFファイルは、EIFVERSIONをターゲット・ワークスペースのリリース番号以下のリリースに設定して作成する必要があります。ターゲット・リリース番号の確認に関する詳細は、EIFVERSIONオプションを参照してください。
リレーションのエクスポート
リレーションをエクスポートする場合、EXPORTは関連ディメンションに関する定義およびステータスにある値、ならびにそのリレーションのディメンションをエクスポートします。
結合ディメンションのエクスポート
結合ディメンションをエクスポートする場合、ベース・ディメンションのステータスと結合ディメンションのステータスが一致することを確認してください。結合ディメンションとベース・ディメンションには暗黙的なリレーションがあるので、Oracle OLAPは結合ディメンションとともにベース・ディメンションをエクスポートしますが、関連ベース値もステータスにない場合、現行のステータスの結合ディメンション値をすべてエクスポートできません。
ディメンション・サロゲートのエクスポート
ディメンション・サロゲートをエクスポートする場合、Oracle OLAPはそのサロゲートのディメンションもエクスポートします。詳細は、「ディメンション・サロゲートのインポートとエクスポート」を参照してください。
ワークスペース・サイズの削減
多数のオブジェクトまたはディメンション値を追加した後に削除した場合、EXPORT(EIFから)コマンドをIMPORT(EIF)とともに使用して、アナリティック・ワークスペースから余分な領域を削除できます。多くの場合、これによってワークスペースが十分に小さくなります。これを行うには、ALLキーワードとともにEXPORTコマンドを使用してすべてのデータをEIFファイルに入れ、そのEIFファイルを異なる名前で作成した新しいワークスペースにインポートします。次に、古いワークスペースを削除し、そのワークスペースで使用していたのと同じワークスペース別名が新しいワークスペースを指すようにします。
結合ディメンションの型の維持
HASH、BTREEまたはNOHASH結合ディメンションをEIFファイルにエクスポートする場合、EIFファイルにはその定義とともに結合型がエクスポートされます。その結合ディメンションをアナリティック・ワークスペースにインポートすると、新しいディメンションまたはその結合型をすでに使用しているディメンションにインポートしたときに、Oracle OLAPはその結合型を維持します。同じ結合型を使用しない既存のディメンションにそのディメンションをインポートしたときには、Oracle OLAPはEIFファイルに保存された元の結合型を維持しません。
名前のないコンポジットのエクスポート
定義に名前のないコンポジットがあるオブジェクトをエクスポートまたはインポートすると、そのコンポジットはオブジェクトとともに自動的にエクスポートまたはインポートされます。名前のないコンポジットの単独でのインポートやエクスポートはできません。
EIF拡張ファイル
EIF拡張ファイル名の構造はfilename.ennnで、ここで、nnnは001から始まる3桁の数字です。たとえば、export.eif
というEIFファイルがある場合、拡張ファイルの名前は、export.e001
やexport.e002
などになります。EIFSHORTNAMESオプションを使用すると、拡張子を3文字に設定できます。EIFEXTENSIONPATHオプションを使用して異なるディレクトリ・オブジェクトを指定しないかぎり、拡張ファイルは元のEIFファイルと同じディレクトリ・オブジェクトに作成されます。
SEGWIDTH設定情報の維持
CHGDFNコマンドのSEGWIDTHキーワードを使用して変数セグメントの長さを指定した場合、セグメント情報は自動的にはエクスポートおよびインポートされません。SEGWIDTH設定を維持するには、ワークスペース全体をエクスポートして新しく作成したワークスペースにワークスペース・オブジェクトのみをインポートし、セグメント設定を指定してから変数データを新しいワークスペースにインポートします。
2つの異なるワークスペースから同じ名前のオブジェクトをエクスポートする方法
2つの異なるワークスペースから同じ名前の2つのオブジェクトをエクスポートする場合、ASキーワードを使用してエクスポートすることにより、EIFファイルでそのオブジェクトの一方の名前を変更する必要があります。EIFファイルのオブジェクトには重複した名前は付けられません。
PERMIT_READプログラムまたはPERMIT_WRITEプログラムのエクスポート
PERMIT_READプログラムまたはPERMIT_WRITEプログラムの内容は、エクスポート時に空になります。これらのプログラムの内容を正常にアナリティック・ワークスペースにコピーしたりアナリティック・ワークスペースからコピーしたりするには、EXPORT(EIFへ)を使用する前にプログラムの名前を変更してから、IMPORT(EIFから)を使用してプログラムをアナリティック・ワークスペースにコピーし、その後で再度PERMIT_READまたはPERMIT_WRITEという名前を付けます。
TEXT値とNTEXT値のエクスポート
TEXT値およびNTEXT値はエクスポートやインポートが可能です。どちらのデータ型も単一のEIFファイルにエクスポートされます。
-
エクスポートされるTEXT値は、EXPORTコマンドでファイルに指定されるキャラクタ・セットを使用してEIFファイルに格納されます。
-
エクスポートされるNTEXT値は、NTEXT(UTF8 Unicode)としてEIFファイルに格納されます。
-
TEXTオブジェクトにインポートされるNTEXT値は、データベース・キャラクタ・セットに変換されます。その結果、NTEXT値がデータベース・キャラクタ・セットで表せない場合にデータが失われることがあります。
-
NTEXTオブジェクトにインポートされるTEXT値は、NTEXT(UTF8 Unicode)キャラクタ・セットに変換されます。
例
例9-116 変数のエクスポート
ステータスにある値とともにactual
およびbudget
という名前の2つの変数のディメンションを、現行Oracle OLAPワークスペースからカレント・ディレクトリ・オブジェクトのfinance.eif
という名前のディスク・ファイルにエクスポートするとします。次の文を使用します。
EXPORT actual budget TO EIF FILE 'finance.eif'
例9-117 ラージ・オブジェクトのエクスポート
複数のパスによってメモリーに書き込む必要があるような多次元のラージ・オブジェクトをエクスポートするとします。ファイルI/Oのパフォーマンスを向上させるために、1次元の変数を作成し、多次元変数を細かくスライスする方法をOracle OLAPに認識させます。また、このラージ・オブジェクトはsales
変数であり、month
、product
およびdistrict
によってディメンション化されているとします。sales
をスライスする方法を指定するために、次の文に示すように1次元の変数を作成します。
DEFINE salescatter VARIABLE TEXT <district>
salescatter
はdistrict
によってディメンション化されるので、この文によってsales
を複数のdistrict
スライスに分割するようにOracle OLAPに認識させます。district
には6つの値があるので、sales
は6つのスライスに分割されます。各スライスは名前を付ける必要があります。そのために、salescatter
の各district
に値を割り当てます。次に、必要に応じてQDR(修飾データ参照)などを使用して、各スライスに適切なデータ型を割り当てます。
SALESをエクスポートするために、次の文を実行します。
EXPORT sales SCATTER AS salescatter TYPE TYPEVAR TO EIF FILE 'slice.eif'
変数をインポートするために、次の文のように必要な名前の付いたスライスを指定します。
IMPORT dist1 dist2 dist3 dist4 dist5 dist6 FROM EIF FILE 'slice.eif'
あるいは、次のようにすべての変数をインポートできます。
IMPORT ALL FROM EIF FILE 'slice.eif'
EXPORT (スプレッドシート)
EXPORT(スプレッドシートへ)コマンドは、作成したOracle OLAP Worksheetオブジェクトをスプレッドシート・ファイルにコピーし、それを適切な形式に自動的に変換します。アナリティック・ワークシートのディメンションが、スプレッドシート・ファイルの列および行を形成します。そのディメンションの現行のステータスによって、ワークシートのエクスポートされる部分が決定されます。
アナリティック・ワークシートをEIFファイルにエクスポートすることもできます(EXPORT(EIF)を参照)。EXPORT(スプレッドシートへ)は、一般に、Lotus 1-2-3、Symphonyなどの他のソフトウェアで読取り可能なファイルにOracle OLAPワークスペースの一部をコピーするために使用します。
構文
EXPORT worksheetname TO {WKS|WK1|WRK|WR1|DIF} FILE file-name - [STATRANK] [NOREWRITE|REWRITE] [NLS_CHARSET charset-exp]
パラメータ
- worksheetname
-
作成済のOracle OLAP Worksheetオブジェクト。1つのEXPORT(スプレッドシートへ)コマンドは、1つのみのworksheetnameを1つのスプレッドシート・ファイルにエクスポートします。
- WKS
-
Oracle OLAP WorksheetをLotus 1-2-3のファイル(バージョン1)にエクスポートすることを示します。
- WK1
-
Oracle OLAP WorksheetをLotus 1-2-3のファイル(バージョン2)にエクスポートすることを示します。
- WRK
-
Oracle OLAP WorksheetをSymphonyのファイル(バージョン1.0)にエクスポートすることを示します。
- WR1
-
Oracle OLAP WorksheetをSymphonyのファイル(バージョン1.1)にエクスポートすることを示します。
- DIF
-
Oracle OLAP Worksheetをデータ交換フォーマット・ファイルにエクスポートすることを示します。
- FILE file-name
-
FILEでは、作成するファイルを指定します。file-nameには、作成するファイルの名前を表すテキスト式を指定します。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。
注意:
ディレクトリ・オブジェクトはデータベースで定義され、ディレクトリおよびディレクトリ内のファイルへのアクセスを制御します。CDAコマンドを使用すると、カレント・ディレクトリ・オブジェクトの特定や指定を行うことができます。使用するデータベース・ユーザー名で読取りおよび書込み可能なファイルがあるディレクトリ・オブジェクトへのアクセス権については、Oracle DBAに問い合せてください。
- STATRANK
-
ワークシート・データとともにエクスポートされる行番号および列番号が
WKSROW
およびWKSCOL
ディメンションの現行のステータスのランキングになることを指定します。 - NOREWRITE
-
(デフォルト)ターゲット・ファイルがすでに存在する場合は、そのファイルを上書きせず、エラーを表示することを指定します。
- REWRITE
-
ターゲット・ファイルがすでに存在する場合は、そのファイルを上書きすることを指定します。
- NLS_CHARSET charset-exp
-
file-nameによって指定されるワークシート・ファイルにテキスト・データをエクスポートする際にOracle OLAPが使用するキャラクタ・セットを指定しますが、これによって、Oracle OLAPはデータをそのキャラクタ・セットに正確に変換できます。
指定可能なキャラクタ・セットについては、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。
この引数は最後に指定する必要があります。この引数を省略すると、Oracle OLAPはNLS_LANGオプションに記録されているデータベース・キャラクタ・セットでデータをエクスポートします。
例
例9-118 エクスポート前の制限
この例では、EXPORTコマンドの前でディメンションWKSCOL
およびWKSROW
を制限して価格ワークシートの一部をエクスポートします。
LIMIT WKSCOL TO 2 TO 4 LIMIT WKSROW TO 3 TO 4 EXPORT pricing TO WRK FILE 'price1.wrk'
FCCLOSE
FCEXEC
FCEXECコマンドは、予測のためにFCSETコマンドによって指定されるパラメータ・オプションに基づいて予測を実行するコマンドです。FCEXECコマンドは、時間ディメンション以外の式のディメンションをすべて暗黙的にループ処理します。
FCEXECコマンドは、「予測プログラム」に示すように他のOLAP DML文と組み合せて使用する必要があります。
構文
FCEXEC handle-expression [choice] time-series-expression
ここで、choiceは、次のいずれか1つ以上です。
- TIME time-dimension
- TRADINGDAYS expression
- INTO name
- SEASONAL name
- SMSEASONAL name
- BACKCAST
パラメータ
- handle-expression
-
FCOPENファンクションを使用して前に開いた予測コンテキストへのハンドルを指定する
INTEGER
式。 - TIME time-dimension
-
時間ディメンションの名前。time-series-expressionのディメンションの1つがDAY、WEEK、MONTH、QUARTERまたはYEAR型である場合、このパラメータを指定する必要はありません。
- TRADINGDAYS expression
-
time-series-expressionの時間データ型(DAY、WEEK、MONTHまたはYEAR)の時間単位における営業日数を指定する
INTEGER
式。デフォルトでは、この値は時間単位における合計日数です。 - INTO name
-
予測エンジンが予測データを格納するOracle OLAP変数の名前。この変数は、時間ディメンション、およびステータスにある複数の値を持つtime-series-expressionのその他のディメンションによってディメンション化されている必要があります。(この変数は追加ディメンションを持つことができます。ただし、この場合、Oracle OLAPが予測を実行するときに、それぞれの追加ディメンションをディメンションのステータス・リストの最初の値に制限します。)
注意:
INTOを指定せず、time-series-expressionがOracle OLAP変数を指す場合、予測エンジンは入力変数に予測の出力データを移入するので、元のデータが上書きされます。
- SEASONAL name
-
予測エンジンが季節係数を表すデータを移入する変数の名前。この変数は、時間ディメンション、およびステータスにある複数の値を持つ time-series-expression のその他のディメンションによってディメンション化されている必要があります。この変数は、時間ディメンション、およびステータスにある複数の値を持つtime-series-expressionのその他のディメンションによってディメンション化されている必要があります。(この変数は追加ディメンションを持つことができます。ただしこの場合Oracle OLAPは、予測エンジンが予測を実行するときに、それぞれの追加ディメンションをディメンションのステータス・リストの最初の値に制限します。)
- SMSEASONAL name
-
予測エンジンが平滑季節係数を表すデータを移入する変数の名前。予測エンジンは係数を1サイクルのみ生成し、その値をステータスにある最初の期間から始まるこの変数に格納し、他のすべての値は
NA
に設定されます。この変数は、時間ディメンション、およびステータスにある複数の値を持つtime-series-expressionのその他のディメンションによってディメンション化されている必要があります。(この変数は追加ディメンションを持つことができます。ただしこの場合Oracle OLAPは、予測エンジンが予測を実行するときに、それぞれの追加ディメンションをディメンションのステータス・リストの最初の値に制限します。) - BACKCAST
-
BACKCASTキーワードは、予測エンジンが適合履歴データを返すことを指定します。通常、このデータは履歴期間のサブセット(適合ウィンドウともいう)でのみ使用可能です。予測エンジンは、適合ウィンドウ以外の履歴期間に対応するデータの値を
NA
に設定します。注意:
BACKCASTの値を指定してINTO変数の値を指定しない場合、予測エンジンはバックキャスト・データをソース変数に移入するので、元のデータは上書きされます。
- time-series-expression
-
FCEXECが値を計算するデータを指定する式。time-series-expressionは、time-dimensionによってディメンション化される数式である必要があります。time-series-expressionは、他のディメンションによってディメンション化することもできます。その場合、FCEXECは時間ディメンション以外の式のディメンションをすべて暗黙的にループ処理します。time-series-expressionの最大ステータス長は5000です。
使用上の注意
単一値の予測
FCEXECコマンドは、時間ディメンション以外の時系列式のすべてのディメンションを暗黙的にループ処理します。多次元の時系列式の値を1つのみ予測する場合、FCEXECコマンドを実行する前に、すべての非時間ディメンションのステータスを単一の値に制限する必要があります。
例
例9-119 予測プログラム
fcin1
という名前の入力変数にあるデータから予測を行うautofcst
という名前のプログラムを定義するとします。fcin1
変数は、timedim
という名前の時間ディメンションによってディメンション化されます。autofcst
プログラムの定義および仕様は、次のとおりです。
DEFINE autofcst PROGRAM PROGRAM " Using the Automatic forecasting method " Suppose you want to create a forecast from the data in " an input variable named fcin1 that is dimensionsed by " a time dimension named timedim. " " Open a forecasting context hndl = FCOPEN('MyForecast') " Initialize the target variables fcout1 = NA fcseas1 = NA fcsmseas1 = NA " Specify that the forecast be of the AUTOMATIC type fcset hndl method 'automatic' " Execute the forecast FCEXEC hndl time timedim INTO fcout1 - seasonal fcseas1 smseasonal fcsmseas1 backcast fcin1 " Create a report showing the input and output of the forecast REPORT DOWN timedim fcin1 fcout1 fcseas1 fcsmseas1 " Run a program named queryall to retrieve the characteristics " of the forecasting trials QUERYALL " Close the forecasting context FCCLOSE hndl END
autofcst
プログラムは、予測コンテキストを開いて、予測のオプションのAUTOMATICへの設定、予測されたデータに関するレポート、およびOracle OLAPが使用する方法を決定するために実行した様々な試行の特性に対する問合せとレポートを行い、予測コンテキストを閉じます。
autofcst
プログラムには、予測への入力および予測からの出力に関するレポートを表示する次のレポート・コマンドがあります。
REPORT DOWN timedim fcin1 fcout1 fcseas1 fcsmseas1
この文によって作成されるサンプル・レポートを次に示します。
TIMEDIM FCIN1 FCOUT1 FCSEAS1 FCSMSEAS1 -------------- ---------- ---------- ---------- ---------- Jan97 NA NA 1.06725482 1.02926773 Feb97 NA NA .978607917 .945762221 Mar97 NA NA 1.12699278 .860505188 Apr97 NA NA .576219022 .905284834 May97 NA NA .920601317 .907019312 Jun97 NA NA 0.91118344 1.0580697 Jul97 NA NA 1.07886483 1.05597234 Aug97 NA NA 1.08101034 1.054612 Sep97 NA NA 1.08077427 1.05361672 Oct97 2,914 NA 1.08351799 1.05380407 Nov97 2,500 NA 1.01126778 1.04504316 Dec97 2,504 NA 1.08370549 1.03104272 Jan98 3,333 NA NA NA Feb98 2,512 NA NA NA Mar98 2,888 NA NA NA ... ... ... ... ... Jan01 NA 3,371.7631 NA NA Feb01 NA 2,736.4811 NA NA Mar01 NA 3,408.3656 NA NA Apr01 NA 714.277175 NA NA May01 NA 2,502.9315 NA NA Jun01 NA 3,195.3626 NA NA Jul01 NA 3,911.6058 NA NA Aug01 NA 4,000.651 NA NA Sep01 NA 4,220.2658 NA NA Oct01 NA 3,416.0208 NA NA Nov01 NA 2,827.3943 NA NA Dec01 NA 2,990.8629 NA NA
queryall
プログラムとその出力から作成されたサンプル・レポートは、例7-87に示してあります。
FCSET
FCSETコマンドは、FCOPEN文で作成した予測コンテキストを実行する際に、Geneva Forecastingエンジンに使用させたい特性を指定するコマンドです。
FCSET文は、「予測プログラム」に示すように他のOLAP DML文と組み合せて使用する必要があります。
構文
FCSET handle-expression forecast-characteristic
ここで、forecast-characteristicの構文は次のとおりです。
- [ALLOCLAST {YES|NO}]
- [ALPHA {MAX|MIN|STEP} decimal]...
- [APPROACH {'APPAUTO'|'APPMANUAL']
- [BETA {MAX|MIN|STEP} decimal]...
- [COMPSMOOTH {YES|NO}]
- [CYCDECAY {MAX|MIN} decimal]...
- [GAMMA {MAX|MIN|STEP} decimal]...
- [HISTPERIODS integer]
- [MAXFACTOR decimal]
- [METHOD 'method']
- [MINFCFACTOR decimal]
- [MPTDECAY {MAX|MIN} decimal]...
- [NTRIALS integer]
- [PERIODICITY cycle-spec]
- [RATIO decimal]
- [SMOOTHING {YES|NO}]
- [TRANSFORM {'TRNOSEA'|'TRSEA'|'TRMPT'}]
- [TRENDHOLD {MAX|MIN|STEP} decimal]...
- [WINDOWLEN integer]
パラメータ
- handle-expression
-
これから問い合せる予測コンテキスト、およびFCOPENファンクションを使用して前に開いた予測コンテキストへのハンドルである
INTEGER
式。 - ALLOCLAST {NO|YES}
-
予測エンジンで過調整のリスクを減少させるのに、最後のサイクルの割当と最後のサイクルの予測のどちらの方法を使用するかを指定します。
-
NOを指定すると、予測エンジンでは最後のサイクルの予測が行われます。(デフォルト)
-
YESを指定すると、予測エンジンではサイクルの1つの時間間隔に対する平均値のみが予測されます。その平均値は係数で乗算され、その時間間隔の残りの各ポイントに与えられます。たとえば、最後のサイクルが24時間の時間間隔である場合、1時間の平均値のみが予測され、それに24の1時間単位の係数を乗算して各時間の値に与えられます。
-
- ALPHA {MAX|MIN|STEP} decimal
-
単純指数平滑法、二重指数平滑法およびHolt-Winters予測法でベースライン・パラメータとして使用されるアルファの値を指定します。
-
ALPHA MAX decimalではアルファの最大値を指定します。decimalには、0.0から1.0までの任意の10進値を指定できます。decimalのデフォルト値は0.3です。
-
ALPHA MIN decimalではアルファの最小値を指定します。decimalには、0.0から1.0までの任意の10進値を指定できます。decimalのデフォルト値は0.1です。
-
ALPHA STEP decimalでは、予測エンジンがアルファの値を決定する際に使用する間隔の値を指定します。decimalには、0.05から0.2までの範囲にあり、かつALPHA MAXの値とALPHA MINの値の差をちょうど割り切る任意の10進値を指定できます。decimalのデフォルト値は0.1です。
-
- APPROACH {'APPAUTO'|'APPMANUAL'}
-
予測エンジンにおける予測をどのような方法で実行するかを指定します。
-
'APPAUTO'はデフォルトの方法で、これによってGeneva Forecastingエキスパート・システムが起動され、考えられる予測法およびそのオプションがすべて検証され、データに対して最適な方法が選択および使用されます。この値を指定すると、エキスパート・システムでは、METHODキーワードに指定されたすべての値が無視されます。
この方法を選択すると、エキスパート・システムでは、コーディングされた最大設定と最小設定から、alpha、beta、gamma、傾向保持、周期減衰およびMPT変換の各設定が選択されます。APPAUTOに対してこれらの値を設定する場合は、最小および最大のいずれにも同じ値を指定します。たとえば、alphaに対して値
.2
を指定するには、ALPHA MINとALPHA MAXのどちらも.2
に設定します。エキスパート・システムではその他にも、すでに設定されているグローバル・パラメータが使用されます。(デフォルト)
-
'APPMANUAL'を指定すると、Geneva Forecastingエンジンにおいて予測が実行される際、このFCSET文に指定した予測法およびオプションが使用されます。
-
- BETA {MAX|MIN|STEP} decimal
-
二重指数平滑化法およびHolt-Winters予測法に対するベータの値を指定します。ベータは傾向の予測を制御する傾向パラメータ。
-
BETA MAX decimalではベータの最大値を指定します。decimalには、
0.0
から1.0
までの任意の10進値を指定できます。デフォルト値は0.3
です。 -
BETA MIN decimalではベータの最小値を指定します。decimalには、
0.0
から1.0
までの任意の10進値を指定できます。デフォルト値は0.1
です。 -
BETA STEP decimalでは、予測エンジンがベータの値を決定する際に使用する間隔の値を指定します。decimalには、
0.05
から0.2
までの範囲にあり、かつBETA MAXの値とBETA MINの値の差をちょうど割り切る任意の10進値を指定できます。decimalのデフォルト値は0.1
です。
-
- COMPSMOOTH {YES|NO}
-
中央値平滑データ系列に対して最適化を行うかどうかを示す。
-
NOは、元の履歴時系列データを使用した方法を実行することを指定します。(デフォルト)
-
YESを指定すると、中央値平滑データ系列に対して最適化が行われます。その結果、より平滑化された(いわゆる「ベースライン」)予測になります。
-
- CYCDECAY {MAX|MIN} decimal
-
線形回帰法および非線形回帰法に対する周期減衰の値を指定します。周期減衰とは、予測エンジンにおいて線形回帰および非線形回帰が行われる際、ベースライン・アクティビティからのずれがどの程度考慮されるかを表すものです。
-
CYCDECAY MAX decimalでは、周期減衰パラメータの最大値を指定します。decimalには、
0.2
から1.0
までの範囲にあり、かつCYCDECAY MINの値とCYCDECAY MAXの値の差を0.4
でちょうど割り切る任意の10進値を指定できます。decimalのデフォルト値は1.0
です。 -
CYCDECAY MIN decimalでは、周期減衰パラメータの最小値を指定します。 decimalには、0.2から1.0までの範囲にあり、かつCYCDECAY MINの値とCYCDECAY MAXの値の差を0.4でちょうど割り切る任意の10進値を指定できます。decimalのデフォルト値は0.2です。
-
- GAMMA {MAX|MIN|STEP} decimal
-
Holt-Winters予測法において季節パラメータとして使用されるガンマの値を指定します。
-
GAMMA MAX decimalではガンマの最大値を指定します。decimalには、
0.0
から1.0
までの任意の10進値を指定できます。decimalのデフォルト値は0.3
です。 -
GAMMA MIN decimalではガンマの最小値を指定します。decimalには、
0.0
から1.0
までの任意の10進値を指定できます。decimalのデフォルト値は0.1
です。 -
GAMMA STEP decimalでは、予測エンジンがガンマの値を決定する際に使用する間隔の値を指定します。decimalには、
0.05
から0.2
までの範囲にあり、かつGAMMA MAXの値とGAMMA MINの値の差をちょうど割り切る任意の10進値を指定できます。decimalのデフォルト値は0.1
です。
-
- HISTPERIODS integer
-
履歴期間の数。
integer
には、1
から50000
までの任意のINTEGER
値を指定でき、この値は、FCEXECコマンドに指定されるtime-series式での時間ディメンション値の最大数です。(予測期間の数は、time-series式の次元のSTATLENからHISTPERIODSの値を差し引いて求められます。) - MAXFCFACTOR decimal
-
予測データに対する上限を指定します。decimalに指定する値は、履歴系列の最大値の倍数を表します。たとえば、
10.0
を指定すると、上限値は履歴系列の最大値の10倍になります。デフォルト値は100.0
です。 - METHOD 'method''
-
予測エンジンで使用する予測法を指定します。予測法に関して指定する値は、
APPROACH
の値が'APPMANUAL'
に設定されていないかぎり無視されます。methodには次のキーワードのいずれかを指定できます。
-
AUTOMATICを指定すると、使用する方法としてデータに最適なものが予測エンジンにより決定されます。(デフォルト)
-
LINREGを指定すると、データに対して線形関係
(y=a*x+b)
を当てはめる線形回帰法が使用されます。 -
NLREG1を指定すると、元のデータからなんらかの変換(この場合は、
x'=log(x)、y'=log(y)
)を行って得られたデータに線形関係(y'=a*x'+b)
を当てはめる非線形回帰法が使用されます。この場合、x
とy(y=c*x^a)
の間の多項式モデルが構成されます。 -
NLREG2を指定すると、元のデータからなんらかの変換(この場合は、
x'=x、y'=ln(y)
)を行って得られたデータに線形関係(y'=a*x'+b)
を当てはめる非線形回帰法が使用されます。この場合、xとy(y=c*êax)
の間の指数モデルが構成されます。 -
NLREG3を指定すると、元のデータからなんらかの変換(この場合は、
x'=log(x)
、y'=y
)を行って得られたデータに線形関係(y'=a*x'+b)
を当てはめる非線形回帰法が使用されます。この場合、xとy(y=a*log(x)+b)
の間の対数モデルが構成されます。 -
NLREG4を指定すると、元のデータからなんらかの変換(この場合は、
x'=1/x、y'=1/y
)を行って得られたデータに線形関係(y'=a*x'+b)
を当てはめる非線形回帰法が使用されます。この場合、漸近曲線(y=x/(a+bx))
が構成されます。 -
NLREG5を指定すると、元のデータからなんらかの変換(この場合は、
x'=x、y'=ln(y/(K-y))
)を行って得られたデータに線形関係(y'=a'*x+b)
を当てはめる非線形回帰法が使用されます。この場合、指数関数の漸近曲線(y=cKêax/(1+cêax))
が構成されます。 -
SESMOOTHを指定すると、過去値の等比級数的な加重平均を現行予測値とし、すべての将来値をその値とする単純指数平滑法が使用されます。この方法は非季節データの短期予測に向きます。
-
DESMOOTHを指定すると、過去値の等比級数的な加重平均を現行予測値とし、同じ方法で計算されるトレンド項にその値を加算する二重指数平滑法が使用されます。したがって、単純指数平滑法は系列とトレンド項の両方に適用されます。
-
CROSTONを指定すると、クロストン断続性需要メソッドが使用されます。クロストン断続性需要メソッドは、断続的なデータ(観測値の大半が0であるようなデータ)についても扱えるように指数平滑法を拡張した予測法です。この予測法では、まず需要が正の値を示す間隔が予測され、さらに正の値を示す場合の需要の大きさが予測されます。
-
HOLT/WINTERSを指定すると、季節データにHolt-Winters法が使用されます。これは、傾向減衰を伴う二重指数平滑法において、単純指数平滑法で予測される乗法的な季節性因子を考慮した予測法です。
-
- MINFCFACTOR decimal
-
予測データに対する下限を指定します。指定する値は、履歴系列の最小値の倍数を示します。decimalには、
0.0
から1.0
までの任意の10進値を指定できます。たとえば、0.5
を指定すると、下限値は履歴系列の最小値の半分になります。decimalのデフォルト値は0.0
です。 - MPTDECAY {MAX|MIN} decimal
-
予測エンジンにおいて、移動周期的合計(MPT)系列の予測結果を分析する際、ベース値の予測値の減衰を調整するために使用するパラメータの値を指定します。
-
MPTDECAY MAX decimalでは、予測エンジンにおいて、移動周期的合計(MPT)系列の予測結果を分析する際、ベース値の予測値の減衰を調整するために使用するパラメータの最大値を指定します。decimalには、
0.2
から1.0
までの範囲にあり、かつMPTDECAY MINの値とMPTDECAY MAXの値の差を0.4
でちょうど割り切る任意の10進値を指定できます。decimalのデフォルト値は1.0
です。 -
MPTDECAY MIN decimalでは、予測エンジンにおいて、移動周期的合計(MPT)系列の予測結果を分析する際、ベース値の予測値の減衰を調整するために使用するパラメータの最小値を指定します。decimalには、
0.2
から1.0
までの範囲にあり、かつMPTDECAY MINの値とMPTDECAY MAXの値の差を0.4
でちょうど割り切る任意の10進値を指定できます。decimalのデフォルト値は0.2
です。
-
- NTRIALS integer
-
予測を決定するために予測エンジンが実行する試行の数を指定します。integerには、
1
から3
までの任意のINTEGER
値を指定できます。decimalのデフォルト値は3
です。 - PERIODICITY cycle-spec
-
単一サイクルの時間間隔の数、またはネストされたサイクルのセットのうちの各サイクルの時間間隔の数を指定します。
DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションを使用する場合、このパラメータを指定する必要はありません。この場合、予測エンジンは1年を構成する時間ディメンションの時間間隔の数(たとえば、1年には52 WEEK時間間隔があります)から周期性を導出します。
DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションを使用しない場合、cycle-specのデフォルト値は
1
であり、データはまったくグループ化されない(つまり、各時間間隔は論理的に独立している)ことが指定されます。サイクルは、データの期間を通じて繰り返される時間間隔のグループです。たとえば、日単位の時間間隔は週のサイクルにグループ化され、週単位の時間間隔は年のサイクルにグループ化されます。この場合、サイクルはネストされているといい、年のサイクルは週のサイクルより上位の集計であり、週のサイクルは年のサイクルよりさらに詳細です。より詳細なレベルのサイクルを指定すると、データに影響を与える要因に対してきめの細かい検索をOLAPで行えます。
-
単一サイクルを指定するには、cycle-specを
1
から25000
までのINTEGER
に設定します。このINTEGER
はサイクルが分割される時間間隔の数を示します。たとえば、INTEGER 12
は、サイクルが12の時間間隔に分割されることを指定します。 -
ネストされた一連のサイクルを指定するには、cycle-specにカンマで区切って並べた最大6つの
INTEGER
値をカッコで囲んで設定します。並べる各値は、ネストされたサイクル内にある時間間隔の数です。サイクルは、最大集計から最小集計の順に順序付けられます。たとえば、cycle-specが(52,7)
の場合、2つのサイクルのうちの最大集計のサイクルは52の時間間隔に分割され、その各時間間隔が7つの時間間隔に分割されることを示します。この例では、1年が52週に分割され、その各週が7日に分割されています。
-
- RATIO decimal
-
予測エンジンが平滑化に使用するウィンドウのサイズと履歴期間の合計数の比率を指定します。予測エンジンはこの値を使用してバックキャスト期間の数を決定します。
1/26
から1/2
までの任意の10進値を指定できます。decimalのデフォルト値は1/3
です。 - SMOOTHING {YES|NO}
-
予測エンジンが予測のデータを平滑化するかどうかを指定します。デフォルト値は
NO
です。予測エンジンでデータを平滑化する場合はYES
を指定します。 - TRANSFORM {'TRNOSEA'|'TRSEA'|'TRMPT'}
-
予測の実行時に予測エンジンが使用するデータ・フィルタ。
-
'TRNOSEA'を指定すると、予測エンジンではデータの季節調整は行われません。(デフォルト)
-
'TRSEA'を指定すると、予測エンジンでは、データを季節調整するフィルタを使用して変換が行われます。
-
'TRMPT' を指定すると、予測エンジンでは、移動周期的合計(MPT)フィルタを使用して変換が行われます。
-
- TRENDHOLD {MAX|MIN|STEP} decimal
-
二重指数平滑法およびHolt-Winters予測法において傾向の信頼性を示す傾向保持パラメータの値を指定します。
-
TRENDHOLD MAX decimalでは、傾向保持パラメータの最大値を指定します。decimalには、
0.0
から1.0
までの任意の10進値を指定できます。decimalのデフォルト値は0.8
です。 -
TRENDHOLD MIN decimalでは、傾向保持パラメータの最小値を指定します。decimalには、
0.0
から1までの任意の10進値を指定できます。 0
decimalのデフォルト値は0.4
です。 -
TRENDHOLD STEP decimalでは、予測エンジンが傾向保持パラメータの値を決定する際に使用する間隔の値を指定します。decimalには、
0.1
から0.2
までの任意の10進値を指定できます。decimalの値は、TRENDHOLD MAXの値とTRENDHOLD MINの値の差をちょうど割り切る必要があります。decimalのデフォルト値は0.2
です。
-
- WINDOWLEN integer
-
予測エンジンにおいて、中央値平滑化を実行する際、中央値を決定するために使用するポイント数を指定します。中央値平滑化は、系列内の各データ・ポイントをそれの中央値およびその隣接値に置き換えることによって、データにおける極端な相違を排除します。integerには、
1
から13
までの任意のINTEGER
値を指定できます。integerのデフォルト値は3
です。
例
予測プログラムの例は、例9-119を参照してください
FETCH
FETCHコマンドは、SQLによるアナリティック・ワークスペース・データへのアクセス時に使用するOLAP_TABLE
ファンクションで作成されるリレーショナル表での使用を目的として、アナリティック・ワークスペース・データを取得する方法を指定するコマンドです。
FETCHコマンドは、OLAP_TABLE
ファンクションのOLAP_commandパラメータでのみ使用できます。それ以外のコンテキストでは使用できません。
OLAP_TABLE
ファンクション内で、FETCHキーワードは、アナリティック・ワークスペース・データが表オブジェクトにマッピングされる方法を明示的に指定します。FETCHキーワードは、Oracle Databaseに移植するOLAPアプリケーション用に提供されています。
注意:
SNAPIのFETCHコマンドを使用していたExpressアプリケーションをアップグレードする場合にのみ、OLAP_TABLEでFETCHキーワードを使用します。Expressアプリケーションをアップグレードする場合、構文はExpress 6.3と同じです。前に使用していたのと同じFETCHコマンドを使用できます。
OLAP_TABLE
の引数としてFETCHを使用する場合、改行や継続マークを付けずに、文全体を1行で入力する必要があります。
OLAP DMLに埋め込まれたSQLコマンドを使用してリレーショナル表からアナリティック・ワークスペース・オブジェクトにデータをフェッチまたはインポートするには、OLAP DML SQLコマンドを使用します。
関連項目:
OLAP_TABLE
ファンクションの詳細は、『Oracle OLAP DMLリファレンス』を参照してください
構文
FETCH expression... [TAG tag-exp] [LABELED] [data-order]
ただし、data-orderには、次のいずれかを指定します。
- USING <order-dim...>
- ACROSS across-dim...
- DOWN down-dim...
- ACROSS across-dim... DOWN down-dim...
パラメータ
- expression...
-
各ターゲット列に対して1つの式で、行定義に現れるのと同じ順序です。式は空白またはカンマで区切ります。
- TAG tag-exp
-
このキーワードは無視されます。下位互換性のためにのみ構文に残されています。
- LABELED
-
このキーワードは無視されます。下位互換性のためにのみ構文に残されています。すべてのフェッチにラベルが付けられます。
- USING <order-dim...>
-
<order-dim...>に指定されるディメンション・リストに従ってデータ・ブロックを順序付けます。山カッコで囲んでディメンションまたはコンポジット、あるいはその2つの組合せを指定します。複数のディメンションは、最初のディメンションが最も変化の速いディメンションとなり、最も変化の速いディメンションから最も変化の遅いディメンションという順序になります。USING句を指定すると、ACROSSおよびDOWNを指定できません。
- ACROSS across-dim...
-
列および行のデータ・ブロックを順序付け、列ディメンションを指定します。across-dimには、1つ以上のディメンション、コンポジット、NONEキーワード、あるいはこれらの組合せのリストを指定します。複数のACROSSディメンションを指定すると、最初のディメンションが最も変化の遅いディメンションとなり、最も変化の遅いディメンションから最も変化の速いディメンションへと変化します。
DOWNではなくACROSSを指定した場合、指定されないディメンションはすべて、デフォルトでDOWNディメンションに設定され、オブジェクト定義の順序で最も変化の速いディメンションから最も変化の遅いディメンションへと変化します。ただし、NONEキーワードをACROSSディメンション・リストに追加すると、指定されないDOWNディメンションのステータスにある最初の値のみがフェッチされます。
ACROSS句を指定すると、USING句を指定できません。
- DOWN down-dim...
-
列および行のデータ・ブロックを順序付け、行ディメンションを指定します。down-dimには、1つ以上のディメンション、コンポジット、
NONE
キーワード、あるいはこれらの組合せのリストを指定します。複数のDOWN
ディメンションを指定すると、最初のディメンションが最も変化の遅いディメンションとなり、最も変化の遅いディメンションから最も変化の速いディメンションへと変化します。ACROSSではなくDOWNを指定した場合、指定されないディメンションはすべて、デフォルトでACROSSディメンションに設定され、オブジェクト定義の順序で最も変化の速いディメンションから最も変化の遅いディメンションへと変化します。ただし、NONEキーワードをDOWNディメンション・リストに追加すると、指定されないACROSSディメンションのステータスにある最初の値のみがフェッチされます。
DOWN句を指定すると、USING句を指定できません。
使用上の注意
デフォルトのデータの順序
USINGまたはDOWN/ACROSS句を指定しない場合、データのディメンションはワークスペースのオブジェクト定義のリストの順序で最も変化の速いディメンションから最も変化の遅いディメンションへと変化します。
ディメンション性が異なる複数の式の使用方法
ディメンション性が異なる複数の式を1つのFETCHコマンドで指定した場合、最も変化の速いディメンションから最も変化の遅いディメンションへと変化するディメンションの順序は予測できません。
データ・ブロックの最大サイズ
MAXFETCHを使用して、FETCHによって生成されるデータ・ブロックのサイズに上限を設定できます。
コンポジットで定義された変数
コンポジットで定義された変数の場合、FETCHのACROSS句、DOWN句およびUSING句で、ベース・ディメンションのかわりにコンポジットを指定できるため、結果のデータ・ブロックでNAフィールド数を最小限にできます。変数が名前付きコンポジットで定義されている場合、USING、DOWNまたはACROSSキーワードの後にそのコンポジットの名前を指定できます。名前のないコンポジットは、それを定義するために使用した構文で指定します。たとえば、変数d.salesの定義では次のように指定します。
DEFINE d.sales VARIABLE DECIMAL <month SPARSE<product district>>
USING、DOWNまたはACROSSキーワードの直後に式SPARSE<product district>
を指定することによってフェッチできます。
例
OLAP_TABLE
でのFETCHの使用例は、『Oracle OLAP DMLリファレンス』のOLAP_TABLEの例を参照してください。
FILECLOSE
FILECLOSEコマンドは、開かれているファイルを閉じるコマンドです。対象のファイルが開かれていない場合は、エラーが発生します。
構文
FILECLOSE fileunit
パラメータ
使用上の注意
LOG Command
LOGコマンドで開かれたファイルを閉じるには、FILECLOSEではなく、EOFキーワードとともにLOGコマンドを使用する必要があります。
例
例9-120 ファイルを開閉するプログラム
最初の引数としてファイル名を取るREADFILEという名前のプログラムがあるとします。このプログラムの次の行によって、ファイルが開かれた後、閉じられます。
fil.unit = FILEOPEN(arg(1), read) ... (Commands to read and process data) FILECLOSE fil.unit
FILECOPY
FILECOPYコマンドは、あるファイル(ソース・ファイル)の内容を別のファイル(ターゲット・ファイル)にコピーするコマンドです。ターゲット・ファイルがすでに存在する場合、そのファイルはコピーによって上書きされます。
構文
FILECOPY source-file-name target-file-name
パラメータ
- source-file-name
-
コピー元のファイルの名前を指定するテキスト式。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。
注意:
ディレクトリ・オブジェクトはデータベースで定義され、ディレクトリおよびディレクトリ内のファイルへのアクセスを制御します。CDAコマンドを使用すると、カレント・ディレクトリ・オブジェクトの特定や指定を行うことができます。使用するデータベース・ユーザー名で読取りおよび書込み可能なファイルがあるディレクトリ・オブジェクトへのアクセス権については、Oracle DBAに問い合せてください。
- target-file-name
-
コピー先のファイルの名前を指定するテキスト式。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。
例
例9-121 ファイルのコピー
次の文は、ファイルlog.txt
をセッションのカレント・ディレクトリ・オブジェクトから同じディレクトリのファイルoldlog.txt
にコピーします。
FILECOPY 'log.txt' 'oldlog.txt'
FILEDELETE
FILEMOVE
FILEMOVEコマンドは、指定したファイルの名前または場所を変更するコマンドです。新しいファイルの名前は、元の名前と同じでも異なっていても構いません。
構文
FILEMOVE old-file-name new-file-name
パラメータ
- old-file-name
-
移動または名前を変更するファイルの名前を指定するテキスト式。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。
注意:
ディレクトリ・オブジェクトはデータベースで定義され、ディレクトリおよびディレクトリ内のファイルへのアクセスを制御します。CDAコマンドを使用すると、カレント・ディレクトリ・オブジェクトの特定や指定を行うことができます。使用するデータベース・ユーザー名で読取りおよび書込み可能なファイルがあるディレクトリ・オブジェクトへのアクセス権については、Oracle DBAに問い合せてください。
- new-file-name
-
ファイルの新しい名前または場所を指定するテキスト式。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。
例
ファイルの移動
次の文を実行すると、セッションのカレント・ディレクトリ・オブジェクトのファイルlog.txt
が、backup
というディレクトリ・オブジェクトのファイルoldlog.txt
に移動します。
FILECOPY 'log.txt' 'backup/oldlog.txt'
FILEPAGE
FILEPAGEコマンドは、PAGINGがオンの場合の出力において改ページを指定するコマンドです。現行ページの残りの行数を条件に、FILEPAGEは改ページを送ることができます。
構文
FILEPAGE fileunit [n]
パラメータ
- fileunit
-
FILEOPENファンクションを事前にコールすることによって、またはOUTFILEコマンドによって(WRITEまたはAPPENDモードで開かれている)ファイルに割り当てられるファイル・ユニット番号。
- n
-
ページの残りの行数がnより少ない場合に改ページが発生することを示す正の
INTEGER
式。残りの行数がn以上の場合またはnがゼロの場合、改ページは発生しません。nがPAGESIZEより大きい場合、LINENUMがゼロではないときに改ページが発生します。nが負数の場合または省略した場合、常に改ページが発生します。Oracle OLAPは、ページ・サイズ、現行の行数および下マージンを指定するオプションの値を使用してページの残りの使用可能な行数を計算します。LINESLEFTに格納される数値は、次の計算式によって計算されます。
LINESLEFT = PAGESIZE - LINENUM - BMARGIN
使用上の注意
FILEPAGEのかわりとなるPAGEの使用方法
PAGEコマンドは、現行の出力ファイルの出力先の番号であるファイル・ユニット番号OUTFILEUNITに対してFILEPAGEコマンドを指定するのと同じ働きをします。次の2つの文は等価です。
FILEPAGE OUTFILEUNIT PAGE
例
例9-123 FILEPAGEコマンドの使用方法
次のプログラムの抜粋では、製品の次のグループが同じページに適さない場合にFILEPAGE文を送ります。プログラムは引数として出力ファイルの名前および3つのmonth
ディメンション値を取ります。
fil.unit = FILEOPEN(ARG(1) WRITE) LIMIT month TO &ARG(2) &ARG(3) &ARG(4) COMMAS = NO DECIMALS = 0 FOR district DO FILEPAGE fil.unit STATLEN(product) FOR product DO FIL.TEXT = product FOR month JOINCHARS(fil.text ' ' CONVERT(sales TEXT)) FILEPUT fil.unit fil.text DOEND FILEPUT fil.unit '' DOEND FILECLOSE fil.unit
FILEPUT
FILEPUTコマンドは、テキスト式で指定されるデータをWRITEまたはAPPENDモードで開かれているファイルに書き込むコマンドです。
構文
FILEPUT fileunit {text-exp|FROM infileunit} [EOL|NOEOL]
パラメータ
- fileunit
-
FILEOPENファンクションを事前にコールすることにより、またはOUTFILEコマンドにより、書込み(WRITEまたはAPPENDモード)用に開かれたファイルに対して割り当てられるファイル・ユニット番号。
- text-exp
-
出力用のデータを含むテキスト式。
注意:
NTEXTデータがファイルに書き込まれるように指定した場合、FILEPUTはテキストをファイルのキャラクタ・セットに変換します。キャラクタ・セットで表すことができないNTEXT文字がある場合、データが失われます。
- FROM infileunit
-
FILENEXTファンクションによって、infileunitから読み取られるレコードをfileunitで指定されるファイルに直接送信します。この句を指定すると、FILEVIEWコマンドでデータ処理を継続しながら、選択したレコードを出力ファイルに書き込むことができます。
注意:
キーワード句FROM infileunitを使用する場合、バイナリ・ファイルとバイナリ以外のファイルを混在させることはできません。BINARYキーワードでいずれかのファイルが開かれた場合、他のファイルもバイナリである必要があります。
- EOL
-
(デフォルト)改行文字が出力文字列に追加されてファイルに書き込まれることを指定します。
- NOEOL
-
改行文字がファイルに書き込まれるテキストに追加されないことを指定します。
例
例9-124 FILEPUTを使用したファイルへのデータの書込み
次の例は、3か月間の販売データのファイルを書き込むプログラムです。ファイルの名前は最初の引数です。このプログラムの抜粋は、ファイルを開いて各行のデータをファイルに書き込み、ファイルを閉じます。このプログラムは、プログラム名の後のステートメント行で4つの引数(入力データのファイル名および3つの月の名前)を取ります。
DEFINE salesdata PROGRAM LD Write Sales Data To File. Args: File Name, 3 Month Names PROGRAM VARIABLE fil.unit INTEGER VARIABLE fil.text TEXT fil.unit = FILEOPEN(ARG(1) WRITE) LIMIT month TO &ARG(2) &ARG(3) &ARG(4) LIMIT product TO ALL LIMIT district TO ALL COMMAS = NO DECIMALS = 0 FOR district DO FOR product DO fil.text = product FOR month fil.text = JOINCHARS(fil.text ' ' - CONVERT(sales TEXT)) FILEPUT fil.unit fil.text DOEND FILEPUT fil.unit '' DOEND FILECLOSE fil.unit END
例9-125 データの事前処理
次の例は、各地区における販売製品に関する1996年の売上高のデータファイルを使用します。ここでは、Aで始まるレコードのみを対象として処理しますが、残りのレコードは後で処理するために別のファイルに保存します。次のプログラムの抜粋は、FILENEXTを使用して各レコードを取得し、FILEVIEWを使用してそのレコードの種類を確認します。2番目のFILEVIEW文はレコードがタイプAの場合の処理です。それ以外のレコードはFILEPUT文によって出力ファイルに書き込まれます。
DEFINE rectype VARIABLE ID LD One Letter Code Identifying The Record Type VARIABLE in.unit INTEGER VARIABLE out.unit INTEGER . . . in.unit = FILEOPEN( GET(TEXT PROMPT 'Input Filename: ') READ) out.unit = FILEOPEN( GET(TEXT PROMPT 'Output Filename: ') - WRITE) WHILE FILENEXT(in.unit) DO FILEVIEW in.unit WIDTH 1 rectype IF rectype EQ 'A' THEN FILEVIEW COLUMN 2 WIDTH 8 district SPACE 2 - WIDTH 8 product ACROSS month year Yr96: saleS ELSE FILEPUT out.unit FROM in.unit DOEND FILECLOSE in.unit FILECLOSE out.unit . . . END
FILEREAD
FILEREADコマンドは、入力ファイルからレコードを読み取り、指定したアクション文に従ってデータを処理します。FILEREADは、バイナリ・データ、パック10進データおよびテキストを処理します。E表記法(.1E+9
など)またはM表記法(10M
など)で記述された10進データを処理できます。データをOracle OLAP変数、ディメンション、コンポジットまたはリレーションに格納する前に、適切なデータ型に変換できます。
構文
FILEREAD fileunit [STOPAFTER n] [file-format] {[attribute...] action-statement1} [[attribute...] action-statementN...]
ここで
-
file-formatは、入力ファイルのレコードの形式を指定します。以下のいずれかを使用してください。
- RULED
- CSV [DELIMITER dchar]
- STRUCTURED [TEXTSTART schar] [TEXTEND echar] [DELIMITER dchar]
-
attributeは、アクション文によって使用される情報を指定します。
- {COLUMN|COL} n
- {SPACE|SP} n
- {FIELD|FLD} n
- {WIDTH|W} n
- data-type
- dimension-value-handling
- BINARY | PACKED | SYMBOLIC
- TRANSLATE | NOTRANSLATE
- SCALE n
- ZPUNCH | ZPUNCHL
- LSET 'text'
- RSET 'text'
- stripping
- NAVALUE val
- NASPELL 'text'
- ZSPELL 'text'
- YESSPELL 'text'
- NOSPELL 'text'
- ZEROFILL
アクション文における属性の配置については、「FILEREADでのフィールド属性の配置」を参照してください。
-
action-statementsは処理を実行する文で、代入文やIF文などがあります。action-statementは、次のいずれかです。
- assignment-statement
- IF-statement
- SELECT-statement
- ACROSS-statement: action-statement
- <action-statement-group>
パラメータ
- fileunit
-
FILEOPENファンクションを事前にコールすることによって読取り用(READモード)に開かれたファイルに割り当てられるファイル・ユニット番号。
- STOPAFTER n
-
入力ファイルから読み取るレコードの数。STOPAFTERを省略した場合、あるいは負数または
NA
を指定した場合、FILEREADはファイル全体を処理します。See "STOPAFTER Keyword". - RULED
-
文字単位またはバイト単位の固定幅の列でレコードが編成されることを指定します。すべての行が同じ形式である必要があります。RULEDはデフォルトのファイル形式です。レコード内のデータの位置を指定するには、COLUMN、SPACEおよびWIDTH属性を使用します。
- CSV [DELIMITER dchar]
-
CSVは、データがCSV(カンマ区切り値)形式であることを指定します。レコード内のデータの位置を指定するには、FIELDおよびSPACE属性を使用します。
dcharは、構造化ファイルでOracle OLAPが標準フィールド・デリミタとして解釈するようにする単一文字を指定するテキスト式です。Oracle OLAPは、標準フィールド・デリミタを使用して数値フィールドおよびテキスト・フィールドを識別します。デフォルト文字はカンマ(
,
)です。CSVファイルは、スプレッドシート・プログラムによって生成される一般的な出力形式です。ソース・ファイルの文字の各行がシングル・レコードとして扱われます。レコードの各フィールドはデフォルトでカンマによって区切られます。フィールド・デリミタとして他の文字を指定するには、DELIMITERキーワードを使用します。
入力レコードの文字のグループが二重引用符で囲まれる場合、次のすべてのルールが適用されます。
-
そのグループに含まれるデリミタ文字は、デリミタではなくリテラルとして扱われます。
-
文字のグループに含まれる二重引用符(
"
)は、その後に別の二重引用符を付ける必要があります。 -
文字のグループに含まれる改行文字(
\n
)は無視されます。 -
文字のグループを囲む二重引用符の前後にあるスペースまたはタブは無視されます。
-
- STRUCTURED
-
レコードが構造化prn形式であることを指定します。レコード内のデータの位置を指定するには、FIELDおよびSPACE属性を使用します。
構造化ファイルは、PCソフトウェア用の一般的な出力形式です。テキスト・ファイルとして、フィールドが文字のグループで構成されます。文字のグループは、二重引用符で囲まれたテキスト、または小数点による以外は中断されない数列の2つの条件によって定義されます。したがって、小数点を含む引用符で囲まれていない数列は単一の値として格納されますが、千の桁を区切るカンマまたはその他のデリミタを含む引用符で囲まれていない数列は、単一の値として格納されずに複数の値に分割されます。引用符で囲まれない数字以外の文字は無視されますが、数字の直前にあるマイナス記号のみは数字の一部とみなされます。マイナス記号と数字の間にスペースを入れても切り離せません。
ファイル形式が前述のパターンに従わない場合、TEXTSTART、TEXTENDおよびDELIMITERキーワードを使用して、各フィールドの先頭および末尾を識別するためにFILEREADが使用するデリミタをカスタマイズできます。
- TEXTSTART schar
-
構造化ファイルでOracle OLAPがテキスト・フィールドの先頭として解釈するようにする単一文字を指定します。scharは文字の値です。デフォルト文字は二重引用符(
"
)です。 - TEXTEND echar
-
構造化ファイルでOracle OLAPがテキスト・フィールドの末尾として解釈するようにする単一文字を指定します。 echarrは文字の値です。デフォルト文字は二重引用符(
"
)です。 - DELIMITER dchar
-
構造化ファイルでOracle OLAPが標準フィールド・デリミタとして解釈するようにする単一文字を指定します。Oracle OLAPは、標準フィールド・デリミタを使用して数値フィールドおよびテキスト・フィールドの両方を識別します。dcharは文字の値です。デフォルト文字はカンマ(
,
)です。 - {COLUMN|COL} n
-
入力レコードでフィールドが開始する列。デフォルトでは、フィールド1は列1から開始し、それに続くフィールドは前のフィールドの後の列から開始します。現行フィールドのデフォルト列は、前のフィールドの最初の列、前のフィールドの幅、および現行フィールドに指定されるスペースの合計です。
表9-7 ファイル属性
構文 説明 {COLUMN|COL} n
入力レコードでフィールドが開始する列。デフォルトでは、フィールド1は列1から開始し、それに続くフィールドは前のフィールドの後の列から開始します。現行フィールドのデフォルト列は、前のフィールドの最初の列、前のフィールドの幅、および現行フィールドに指定されるスペースの合計です。
{SPACE|SP} n
フィールドと前のフィールドの間のスペースの数。構造化PRNファイルでは、前のフィールドと現行フィールドの間のフィールドの数。デフォルト値は
0
です。{FIELD|FLD} n
構造化PRNファイルの場合のみ、データの抽出元のフィールド。
{WIDTH|W} n
構造化されていないレコードの場合に、入力レコードでフィールドが占有する列の数。デフォルトがない場合、ルール化レコードにはWIDTHを含める必要があり、含めないとFILEREADはエラーを生成する。デフォルトは、次に示すようにデータ型から導出される。
-
INTEGER
、SHORTINTEGER
またはSHORTDECIMAL
のターゲット・データ型のBINARY入力形式の場合、デフォルトは4列。 -
DECIMAL
またはNUMBER
のターゲット・データ型のBINARY入力形式の場合、デフォルトは8列。 -
BOOLEAN
のターゲット・データ型のBINARY入力形式の場合、デフォルトは2列。 -
いずれかのターゲット・データ型のPACKED入力形式の場合、デフォルトはなし。
-
ID
のターゲット・データ型のSYMBOLIC入力形式の場合、デフォルトは8列。 -
ID
以外のターゲット・データ型のSYMBOLIC入力形式の場合、デフォルトはなし。
最大幅はテキスト入力で4,000文字。
data-type
使用できるキーワードは、INTEGER、SHORTINTEGER、DECIMAL、SHORTDECIMAL、NUMBER、TEXT、ID、DATE、VNF、RAW DATE、BOOLEAN。
-
テキスト・データの場合は、入力がアナリティック・ワークスペースに格納される前に変換されるデータ型。
-
バイナリ・データの場合は、入力レコードのデータのデータ型。
-
DAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンション以外では、デフォルトはターゲット・オブジェクトのデータ型。
-
DAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンションでは、デフォルトはVNF。
-
DATE変数、およびDAY、WEEK、MONTH、QUARTER、YEAR型のディメンションでは、RAW DATEは、入力値が1899年12月31日から後の日数を表す正の
INTEGER
値または1899年12月31日より前の日数を表す負のINTEGER
値であることを示す。
「NTEXT値を持つターゲット・オブジェクトの指定」を参照。
dimension-value-handling
ターゲット・オブジェクトがディメンションまたはディメンション・サロゲートである場合に、新しい値をターゲット・オブジェクトに追加するかどうかを指定する次のいずれかのキーワード句。
-
MATCH
新しい値をディメンションまたはディメンション・サロゲートに追加しない。ただし、ターゲット・オブジェクトがディメンションである場合は、入力フィールドの値は現行ディメンション値と一致していなければならない。処理されるレコードごとに、ディメンションは一時的にレコードのその値に制限される。値が存在しない場合、FILEREADはエラーを生成する。この属性は、ターゲット・オブジェクトがディメンション・サロゲートである場合も適用される。
-
APPEND [LAST |FIRST | BEFORE pos | AFTER pos]
新しい値を、追記の形でディメンションに追加する。フィールドには新しいディメンション値が含まれ、場合によって既存の値も含まれる。新しい値はディメンション・リストに追加され、ステータスは現行値に制限される。FILEREADの終了後、ステータスはALLに設定される。時間ディメンションの場合、既存の時間間隔と新しい時間間隔の間の欠落した時間間隔をOracle OLAPは自動的に埋める。ターゲット・オブジェクトが時間ディメンション以外のディメンションである場合は、LAST(ディメンション・リストの末尾に値を追加)、FIRST(リストの先頭に値を追加)、BEFORE pos(指定した値または
INTEGER
位置の前に値を追加)、AFTER pos(指定した値またはINTEGER
位置の後に値を追加)、のいずれかのキーワードを使用したOracle OLAPによる値の追加方法を指定できる。 -
ASSIGN
新しい値を、代入の形でディメンション・サロゲートに追加する。この属性はディメンション・サロゲートにのみ適用される。この属性によって新しい値がサロゲートに代入される。
input-field-format
入力フィールドの形式を指定する次のいずれかのキーワード。
-
SYMBOLIC。入力フィールドの形式がASCIIまたはEBCDICテキストであることを指定する。
-
BINARY。入力フィールドの形式がバイナリであることを指定する。
-
PACKED。入力フィールドの形式がパック10進であることを指定する。
TRANSLATE|NOTRANSLATE
Oracle OLAPがデータを元のオペレーティング・システムの形式からFILESET ORIGIN文の指定のとおりに変換するかどうか。データを変換する場合はTRANSLATE、データを変換しない場合はNOTRANSLATEを指定する。
SCALE n
想定10進小数点または2進小数点の右側の桁の数。デフォルトは0です。入力データがテキストの場合、SCALEによって指定される数より入力の小数点が優先される。
ZPUNCH|ZPUNCHL
入力ゾーンがどのようにオーバーパンチされているかを指定する。入力がゾーン・オーバーパンチである場合はZPUNCHを指定。入力の左がゾーン・オーバーパンチである場合はZPUNCHLを指定。
LSET 'text'
テキスト入力およびTEXTまたはIDターゲット・オブジェクトの場合に、格納の前にテキストを値の左に追加する。textが複数行の値の場合は、最初の行のみが使用される。
RSET 'text'
テキスト入力およびTEXTまたはIDターゲット・オブジェクトの場合に、格納の前にテキストを値の右に追加する。textが複数行の値の場合は、最初の行のみが使用される。
stripping
テキスト入力の場合に、入力値をターゲット・オブジェクトに格納する前に、それに含まれるスペースまたはNULLを削除するかどうかを指定する次のいずれかのキーワードを指定する。
-
NOSTRIP
スペースまたはNULLを入力値から削除しない。
-
STRIP
スペースおよびNULLを入力値の左右両方から削除する。
-
LSTRIP
スペースおよびNULLを入力値の左側から削除する。
-
RSTRIP
スペースおよびNULLを入力値の右側から削除する。
-
- NAVALUE val
-
バイナリまたはパック入力の場合、入力が指定された数値であるときに
NA
がターゲット・オブジェクトに割り当てられることを指定します。 - NASPELL 'text'
-
テキスト入力の場合に、Oracle OLAPがテキストをNAとして格納することを指定します。入力が指定されたテキストである場合、NAがターゲット・オブジェクトに割り当てられます。テキストは、複数のNA値を取れる複数行の文字列にできます。テキストに指定される値の他に、入力がNAである場合はNAがターゲット・オブジェクトに割り当てられます。
- ZSPELL 'text'
-
テキストの数値入力の場合に、Oracle OLAPがテキストを0として格納することを指定します。入力が指定されたテキストである場合、ゼロがターゲット・オブジェクトに割り当てられます。テキストは、複数のゼロ値を取れる複数行の文字列にできます。テキストに指定される値の他に、入力が
0
である場合は0
がターゲット・オブジェクトに割り当てられます。 - YESSPELL 'text'
-
テキスト入力がBOOLEANである場合に、Oracle OLAPがテキストをYESとして格納することを指定します。入力がテキストである場合、YESがターゲット・オブジェクトに割り当てられます。テキストは、複数のYES値を取れる複数行の文字列にできます。textに指定される値の他に、入力が
YES
、ONまたはTRUEである場合はYES
がターゲット・オブジェクトに割り当てられます。 - NOSPELL 'text'
-
テキスト入力がBOOLEANである場合に、Oracle OLAPがテキストをNOとして格納することを指定します。入力がテキストである場合、NOがターゲット・オブジェクトに割り当てられます。テキストは、複数のNO値を取れる複数行の文字列にできます。'text'に指定される値の他に、入力がNO、OFFまたはFALSEである場合はNOがターゲット・オブジェクトに割り当てられます。
- ZEROFILL
-
テキストの数値入力の場合に、Oracle OLAPが結果のテキストのスペースをゼロで埋めることを指定します。入力のスペースがゼロで置き換えられます。デフォルトはゼロによる埋込みを行いません。
- action-statement
-
入力ファイルからレコードが読み取られるたびに実行するアクション文を1つ以上指定できます。通常、ディメンション・ステータスの設定、および入力レコードから取得されたデータのOracle OLAPのターゲット・オブジェクトへの割当てのために、アクション文を使用します。また、入力レコードのデータを参照しないアクション文を指定することもできます。たとえば、アクション文のうちの1つを、カウンタを増分するのみの代入文に指定できます。あるいは、特定の処理において入力データを使用するが、Oracle OLAPのターゲット・オブジェクトにはそのデータを割り当てないアクション文も可能です。
アクション文のリストでは、必ず変数の前にディメンションを処理してください。FILEREADは、入力レコードごとに各アクション文を左から右に処理します。アクション文でディメンション処理を実行すると、その結果得られたステータスは次のアクション文にも有効になります。変数のディメンションを制限するアクション文を最初に指定しない場合、FILEREADはステータスにある最初の値を使用して変数のセルをターゲットにします。ACROSS句を指定しないかぎり、FILEREADは入力レコードのフィールドの単一の値をOracle OLAP変数の単一セルに割り当てます。デフォルトでは、FILEREADはデータを変数に割り当てる際に変数のディメンションをループ処理しません。「フィールド順序」を参照してください。
FILEREADアクション文にVALUEキーワードを使用して、入力レコードの特定フィールドの値を表します。VALUEは、指定したFILEREADの属性に従って書式化してそのデータを表します。レコードのフィールドが空白の場合、FILEREADはその値を
NA
とみなします。デフォルトでは、VALUEのデータ型はターゲット・オブジェクトのデータ型です。ただし、属性キーワードによって別のデータ型を指定できます。注意:
FILEREADとともに使用するアクション文をすでに指定してある場合、必要に応じて代入文を調整してVALUEキーワードを削除するだけで、SQL FETCHおよびSQL IMPORTでコードを再利用できます。ディメンション処理を制御する属性を除く大部分のFILEREAD属性は、SQLロードに対しては意味がなく、SQL FETCHおよびSQL IMPORT内で実行する際には無視されます。
- assignment-statement
-
代入文によって、Oracle OLAPオブジェクトに値を代入できます。代入文の形式は次のとおりです。
object [= expression]
objectは、データを代入して格納するターゲットです。objectには、Oracle OLAP変数、ディメンション、ディメンション・サロゲート、コンポジットまたはリレーションを指定できます。
expressionは、ターゲットに代入されるデータ値のソースです。
注意:
SQL FETCHまたはSQL IMPORT代入文では、expression構成要素はオプションではありません。ただし、FILEREAD代入文はオブジェクト名のみで構成できます。その場合、入力データはobjectに直接代入されます。FILEREAD代入文のexpressionにはVALUEキーワードを含めることができます。
- IF-statement
-
IF文では、ブール式が
TRUE
またはFALSE
のいずれであるかに従ってアクションを実行できます。IF文の形式は次のとおりです。IF bool-exp THEN action [ELSE action]
IFはブール式を評価します。TRUEの場合、THEN actionが発生します。FALSEの場合、ELSE actionが指定されていれば発生します。ブール式が
NA
の場合、actionは発生しません。actionは、次のうちのいずれかを使用できます。
-
NULL(アクションは発生しません)
-
代入文
-
SELECT文
-
IF文
-
action-statementsを含むDO … DOEND文
FILEREAD IF文にはVALUEキーワードの呼出しを含めることができます。FILEREAD IF文を使用することにより、1つのFILEREAD文で、様々なタイプのレコード(異なる構造や異なるターゲット・オブジェクトのレコードなど)を処理できます。
FILEREADでは、同じレコードから異なる値を表すために、VALUEキーワードを複数回使用できます。インスタンスごとに各値を読み取る列を指定します。
-
- SELECT statement
-
SELECT文によって、式の値に基づいてアクションを実行できます。SELECT文の形式は次のとおりです。
SELECT select-expression [WHEN expression1 action [WHEN expression2 action . . .] [ELSE action]
SELECTはSELECT式を評価し、その結果をWHEN式と順次比較します。最初に一致が見つかったところで、関連付けられたactionが発生します。一致が見つからない場合、ELSE actionが指定されていれば発生します。
SELECT文のactionはIF文のactionと同じです。
FILEREAD SELECT文にはVALUEキーワードの呼出しを含めることができます。FILEREAD SELECT文を使用することにより、1つのFILEREAD文で、様々なタイプのレコード(異なる構造や異なるターゲット・オブジェクトのレコードなど)を処理できます。
- ACROSS-statement: action-statement
-
ACROSS文では、後に続くアクション文がACROSSディメンションのステータスにあるすべての値に対して1回ずつ実行されます。ループを複数のアクション文に適用するには、アクション文を山カッコで囲みます。
ACROSS文の構文は次のとおりです。
ACROSS dimension [limit-clause]:
action-statement
limit-clauseの構文は、各種LIMITコマンドにおけるlimit-clause引数の構文(つまり、LIMITコマンドの「TO」などのlimit-type引数の後の構文)と同じです。これらの引数の構文については、LIMITコマンド(値を使用)、LIMITコマンド(LEVELRELを使用)、LIMIT(親リレーションを使用)、LIMITコマンド(関連ディメンションを使用)、LIMITコマンド(NOCONVERTを使用)およびLIMITコマンド(POSLISTを使用)を参照してください。
次の例は、
month
の現行のステータスにかかわらず、month
を最近の6つの値に制限します。ACROSS month last 6: units
FILEREAD ACROSS文では、Oracle OLAPがACROSS句によって指定されるフィールドの読取りを開始するレコード内の位置を示す属性を指定できます。位置を指定するには、属性FIELD、SPACEおよびCOLUMNを使用します。ACROSS句で指定される一連のフィールドが構造化レコードのすぐ次のフィールドまたはルール化レコードのすぐ次のバイトから始まる場合、位置属性はオプションです。
- <action-statement-group>
-
複数のアクション文は山カッコで囲んでグループ化できます。action-statement-group の形式は次のとおりです。
<action-statement1 - [action-statement2 . . .]>
アクション文のグループが使用されるのは、通常、ACROSS文の後です。山カッコの構文によって、ACROSSディメンションのステータスにあるすべての値に対して複数のアクション文を実行できます。
使用上の注意
一度に1つのレコードの読取り
FILEREADのかわりとして、レコードのフィールドを処理する1つ以上のFILEVIEW文とともに、一度に1つのレコードを読み取るFILENEXTファンクションを使用できます。
フィールド表示順
入力レコードにディメンション値と変数データの両方が含まれる場合、ディメンション値はレコードで最初に読み取られるフィールドである必要があり、変数データ値はそのディメンション値の後に読み取られる必要があります。これに従うためには、入力レコードのフィールド自体を並べ替えるか、FILEREAD属性を使用してフィールド位置を明示的に指定します。(attribute引数の説明を参照してください。)
FILEREADで位置属性を使用する必要がないように入力レコードを編成するには、すべてのディメンション値をレコードの最初のフィールドに入れ、変数データ値をレコードの最後のフィールドに入れます。たとえば、同じディメンションを同じ順序(time
、product
およびgeography
)で共有する2つの変数(units
およびsales
)のデータがあるとします。この場合、次のサンプル入力レコードに示すように、入力レコードの最初の3つのフィールドにディメンション値を入れ、4番目と5番目のフィールドに変数データを入れます。
Sep99 Snowshoes Boston 35 5565.95
STOPAFTERキーワード
デフォルトでは、FILEREADはファイルのすべてのレコードを自動的に順次読み取ります。ファイルの最初の部分のみを処理するには、STOPAFTERキーワードを使用します。FILEREADは指定された数のレコードを処理して停止します。その後にファイルを閉じることができます。
ファイルの最初の部分をスキップして残りのレコードを処理するには、STOPAFTERキーワードを使用してフィールド説明を省略します。FILEREADは指定された数のレコードを読み取りますが、データを処理しません。その後に、入力を処理するために、2番目のFILEREAD文をフィールド説明とともに発行します。次のプログラムの抜粋にこの方法を示します。
LIMIT district TO 'Boston' unit = FILEOPEN('bostdata' READ) FILEREAD unit STOPAFTER 25 FILEREAD unit WIDTH 8 product SPACE 2 ACROSS month 13 TO 24:- WIDTH 4 PACKED sales
ディメンション・メンテナンス
フィールド説明のターゲット・オブジェクトがディメンションである場合、ディメンションに値を追加するためにファイルのデータを使用するかどうかを指定できます。ディメンション属性はMATCHおよびAPPENDです。APPENDによってディメンションに値を追加する場合、APPENDのすぐ後にディメンション位置属性(LAST
、FIRST
、BEFORE
pos
、AFTER
pos
)を指定できます。
形式object=expression
の代入文では、ディメンション属性は、等号の右側に置くことができず、ターゲット・オブジェクトの前に指定する必要があります。例外として、結合ディメンションをメンテナンスする場合など、ディメンションをターゲット・オブジェクトとして右側に置くことがあります。例9-130を参照してください。
ディメンション位置番号
入力データがディメンション値ではなくディメンション位置番号で構成される場合、ディメンションの型がTEXT、ID、DAY、WEEK、MONTH、QUARTERまたはYEARである場合でも、フィールド説明で変換型をINTEGERに指定します。
FILEREAD unit COLUMN 1 WIDTH 8 INTEGER month
入力に位置番号が含まれる場合、TEXT、ID、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションに新しい値を追加する際に、APPENDキーワードは使用できません。新しい位置番号には、追加される関連付けられた値がないためです。
結合ディメンション・メンテナンス
結合ディメンションがターゲット・オブジェクトである場合、次の2つの方法のいずれかを使用して値を読み取ることができます。
-
方法1: 入力にベース・ディメンションの値または位置番号が含まれる場合、次のサンプルの2行に示すように、ディメンション・リストを等号の後に山カッコで囲んで指定する必要があります。
FILEREAD unit proddist = <COL 1 W 10 product COL 20 - W 8 district> FILEREAD unit proddist = <COL 1 W 10 INTEGER product COL 20 - W 8 INTEGER district>
この例は、
proddist
連結ディメンションの値を指定するために使用されているproduct
およびdistrict
ディメンションの値を示します。いずれかのディメンションをメンテナンスする必要がある場合には、APPEND属性も使用できます。ただし、product
またはdistrict
の値を最初に処理する必要がある場合は、構文で山カッコ内に等号が必要になるため、代替方法を使用する必要があります。(ネストされた等号は許可されません。)この場合、最初にベース・ディメンション値を読み取って処理し、次にフィールド属性を使用せずに、結合ディメンションのディメンション・リストのディメンションを使用します。たとえば、結合ディメンションのベース・ディメンション値を大文字に変換するには、次のような文を使用します。FILEREAD unit COL 14 W 8 product = UPCASE(VALUE) - COL 5 W 8 district = UPCASE(VALUE) - proddist = <product, district>
-
方法2: 入力に結合ディメンションの位置番号が含まれる場合、INTEGERキーワードを指定する必要があります。
FILEREAD unit INTEGER proddist
コンポジットによってディメンション化された変数を伴うFILEREAD
FILEREADは、コンポジットによってディメンション化された変数にデータを読み取る場合、非NA
値を割り当てられているターゲット・セルが欠落していると、それを自動的に作成します。この処理によって、その新しいセルに対応するすべてのディメンション値の組合せがコンポジットにも追加されます。したがって、ターゲット・オブジェクトおよびコンポジットは、代入後にサイズが大きくなることがあります。
コンポジットによってディメンション化された変数と効率
FILEREADの自動コンポジット・メンテナンス機能を使用して、コンポジットによってディメンション化された変数にデータをロードする場合、変数のデータにアクセスしようとする際に後で発生する可能性があるパフォーマンスの問題に注意する必要があります。変数のディメンション・リストにおけるコンポジットの位置によって、後でパフォーマンスの問題が発生するかどうかがわかります。
コンポジットが変数の定義におけるディメンション・リストの最後(最も変化の遅い位置)にある場合、ディメンション・リストにコンポジットが含まれない変数に対するのと同じようにFILEREADを使用できます。たとえば、同じFILEREAD文を使用して、次の定義の変数newsales
およびnewsales.cp
にデータを読み取ることができるので、効率が損なわれません。
DEFINE newsales VARIABLE DECIMAL <product district month> DEFINE newsales.cp VARIABLE DECIMAL <product SPARSE<district month>>
newsales.cp
は、3つのディメンションによってディメンション化されており、そのうち最後の2つのディメンションはコンポジットです。ただし、次の定義のnewsales2.cp
のような変数がある場合は、FILEREADによってロードされるデータにアクセスする際のパフォーマンスに影響することがあります。
DEFINE newsales.cp VARIABLE DECIMAL <SPARSE<district month> product >
この場合、パフォーマンスの問題を回避するために、次に示す2つの方法のいずれかを使用します。
-
FILEREADを使用する前に、CHGDFNをSEGWIDTHキーワードとともに使用して変数のセグメント・サイズを変更します。CHGDFN SEGWIDTHによって変数のセグメントのサイズを指定できます。セグメントは、変数が保持する値の合計数のうちの一部分です。変数内のセグメント数は、データのロード時やデータへのアクセス時のパフォーマンスに影響します。CHGDFN SEGWIDTH文で指定するセグメント・サイズは、varnameで指定する変数に対してのみではなく、同じ組合せのディメンションとコンポジットが同じ順序で定義されているその他すべての変数およびリレーションに対しても使用されます。
-
結合ディメンションの場合と同じようにコンポジット値を明示的に追加できます。この方法は、名前付きコンポジットと名前のないコンポジットの両方に使用できます。「コンポジット・メンテナンス」を参照してください。
コンポジット・メンテナンス
FILEREADによってコンポジットを明示的にメンテナンスする場合、結合ディメンションのメンテナンスのために使用するのと同じ構文を使用します。コンポジットに名前がない場合、形式SPARSE<dim1 dim2 ...>
で指定します。FILEREADによる明示的コンポジット・メンテナンスと自動コンポジット・メンテナンスのそれぞれの利点については、「コンポジットによってディメンション化された変数を伴うFILEREAD」および「コンポジットによってディメンション化された変数と効率」を参照してください。
FILEREADでのDWMQYディメンションの使用方法
フィールドのターゲット・オブジェクトがDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションである場合、デフォルトの変換型はVNFです。したがって、入力値がターゲット・ディメンションのVNF(ディメンションのVNFがないときはデフォルトのVNF)に従って書式化されている場合、変換型を指定する必要はありません。
フィールドのターゲット・オブジェクトがDATE変数であるか、DAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンションである場合、DATEORDERに示す日付として有効な入力スタイルである値は、FILEREADによって正確に解釈されます。DAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンションでは、変換型としてDATEを指定する必要があります。DATE変数の値では、DATEがデフォルトの変換型なのでDATEキーワードはオプションです。
時間ディメンションまたはDATE変数の値が日付を表すINTEGER
値(1
= January
1,
1900
)である場合も、FILEREADによって正確に解釈されます。この場合、変換型としてRAW DATEを指定する必要があります。
空白のフィールド
フィールドが空白である場合、その値はNA
であり、ターゲット変数にNA
が代入されます。空白のフィールドの例として、スペースで埋められたテキスト・フィールド、レコードの末尾より後から始まるフィールド、またはフィールド・デリミタ間にスペースも何もない構造化ファイルのフィールドがあります。
FILEREADでのフィールド属性の配置
通常、フィールド属性は、ターゲット・オブジェクトの直前または等号の右側の式の直前に置きます。
attributes object
ただし、複数のフィールドに属性を適用するには、山カッコで囲んだターゲット・オブジェクトのリストの前に属性を指定します。1つのオブジェクトに適用する複数の属性を含めるには、属性を適用するオブジェクトの前に属性を山カッコで囲んで指定します。
attributes0 <attributes1 object1=expression object2 attributes3 object3>
山カッコは、結合ディメンション値のベース値を囲む場合にも使用します。
FILEREADでエラーが発生した場合のエラー処理
FILEREADがエラーを検出した場合、エラー・トラップおよび適切な処理によって発生したエラーを制御できます。データを互換性のないデータ型に変換しようとした場合、または無効なディメンション値が検出された場合に、エラーが発生します。FILEERRORファンクションを使用して、エラーの原因に関する詳細を取得できます。エラーを処理した後は、TRAP文を使用してエラー・トラップをオンに戻し、GOTOを使用してFILEREAD文に分岐して戻ります。処理は次のレコードから続行します。例9-128を参照してください。
NTEXT値を持つターゲット・オブジェクトの指定
構造化ファイルまたはCSVファイルのデータにNTEXT型のターゲット・オブジェクトを指定した場合、FILEREADは値を格納する前に、その値がNTEXTオブジェクトに割り当てられていても、ファイルのデータをデータベース・キャラクタ・セットに変換するため、ファイルのデータがデータベース・キャラクタ・セットで表せない場合にデータが失われることがあります。固定幅の列であるルール化ファイルの場合、FILEREADはデータベース・キャラクタ・セットに変換しないので、データが失われることはありません。
例
例9-126 ディメンション値とデータ
アナリティック・ワークスペースに6文字の製品識別番号が含まれているとします。製品名および各月の売上数量の値をインポートする必要があります。直近の四半期のデータファイルの形式は、次のとおりです。
Jan951234aa00Chocolate Chip Cookies 123 Jan951099bb00Oatmeal Cookies 145 Jan952355cc00Sugar Cookies 223 Jan955553ee00Ginger Snap Cookies 233 Feb951234aa00Chocolate Chip Cookies 123 Feb951099bb00Oatmeal Cookies O145 Feb952355cc00Sugar Cookies SS223 Feb955553ee00Ginger Snap Cookies G233 Mar952355cc00Sugar oCookies 223 Mar955553ee00Ginger Snap Cookies 233 Mar953222dd00Brownies 432
ディメンションおよび変数の定義は、次のとおりです。
DEFINE month DIMENSION MONTH DEFINE productid DIMENSION ID DEFINE productname VARIABLE TEXT <productid> DEFINE units.sold VARIABLE INTEGER <month productid>
次のプログラムは、FILEREADを使用してmonth
およびproductid
の新しい値をアナリティック・ワークスペースに追加し、データを正しい変数に格納します。1つのFILEREAD文でディメンションをメンテナンスしてファイルを閉じ、再びそのファイルを処理して関連付けられたデータを取得します。
DEFINE read.product PROGRAM PROGRAM VARIABLE fi INT fi = FILEOPEN('Dr.Dat' READ) FILEREAD fi COLUMN 1 APPEND WIDTH 5 month - COLUMN 6 APPEND WIDTH 6 productid FILECLOSE fi fi = FILEOPEN('Dr.Dat' READ) FILEREAD fi COLUMN 1 WIDTH 5 month - COLUMN 6 WIDTH 6 productid - COLUMN 12 WIDTH 30 productname - COLUMN 44 WIDTH 22 units.sold FILECLOSE fi END
例9-127 ディメンション・サロゲート値
この例は、1つのFILEREAD操作でproduct
ディメンションに値を追加し、product
ディメンションのNUMBER
ディメンション・サロゲートであるprodnum
に値を代入します。2番目のFILEREADでは、month
、product
およびdistrict
によってディメンション化されているunits
変数に値を代入します。ディメンション値およびサロゲート値のデータファイルの形式は、次のとおりです。
Kiyaks400
次の文は、ファイル・ユニットを定義してファイルを開き、その内容を読み取ってproduct
ディメンションへの値の追加およびprodnum
サロゲートへの値の代入を行い、ファイルを閉じます。
DEFINE funit INT funit = FILEOPEN('Ds.Dat' READ) FILEREAD funit COL 1 APPEND W 6 product COL 7 ASSIGN W 3 prodnum FILECLOSE funit
変数値のデータファイルの形式は、次のとおりです。
Jan02400Boston416
次の文は、ファイルを開いてその内容を読み取り、prodnum
サロゲートの値との一致を見つけてunits
変数に値を代入した後、ファイルを閉じます。
funit = FILEOPEN('Var.Dat' READ) FILEREAD funit COL 1 W 5 month COL 6 MATCH W 3 prodnum - COL 9 W 6 district COL 15 W 3 INTEGER units FILECLOSE funit
例9-128 エラー処理
書式指定に一致しないデータが入力ファイルにある場合、または、デフォルトのMATCH属性を使用しているときにアナリティック・ワークスペースに含まれないディメンション値が入力ファイルにある場合、エラーが発生します。トラップ・ラベルでエラー処理を使用してエラーの種類をチェックし、不正なレコードをスキップし、ファイルの処理を続行します。FILEPUT文を使用して、不正なレコードを別のファイルに格納することもできます(FILEPUTコマンドを参照)。
次の例では、トラップ・ラベルの文が、ファイルが正常に開かれたか(fil.unit
はINTEGER
値)およびユーザーがプログラムを中断したのかどうかをチェックします。これらのエラーの原因に該当しない場合、プログラムは不正なレコードを検出したと判断し、トラップをリセットしてからFILEREAD文に分岐して戻り、次のレコードの処理を続行します。
DEFINE read.price PROGRAM PROGRAM VARIABLE fil.unit INTEGER TRAP ON ERROR fil.unit = FILEOPEN( ARG(1) READ) LIMIT month TO &ARG(2) NEXT: FILEREAD fil.unit - WIDTH 8 product - WIDTH 4 BINARY price FILECLOSE fil.unit RETURN error: IF fil.unit EQ NA THEN RETURN IF ERRORNAME NE 'attn' AND ERRORNAME NE 'quit' THEN DO SHOW JOINCHARS('Record ' RECNO(fil.unit) ' is Invalid.') TRAP ON ERROR GOTO NEXT DOEND FILECLOSE fil.unit END
例9-129 アナリティック・ワークスペース・オブジェクトへの割当て前のファイル・データの事前処理
各フィールドのデータをアナリティック・ワークスペースの変数またはディメンションに割り当てる前に、そのデータを処理することもできます。たとえば、データファイルには6桁の数字の製品識別子があり、アナリティック・ワークスペースにはそれと同じ製品番号の値で先頭にPが付くproduct
ディメンションがあるとします。このとき、ファイルの識別子を処理して各値の先頭にPを追加できます。
FILEREAD unit COLUMN 1 WIDTH 6 APPEND LSET 'p' product
例9-130 ファイル・データによる結合ディメンションのメンテナンス
FILEREADによって結合ディメンションをメンテナンスするには、最初にベース・ディメンションをメンテナンスするために入力ファイルの新しい値を追加します。次に、その結果のベース・ディメンション値の組合せを結合ディメンションに割り当てます。次の例は、2つの異なるフィールドからベース・ディメンション値を取得し、その値をベース・ディメンションに追加し、さらに、その組合せを結合ディメンションに追加します。
FILEREAD unit APPEND proddist = <W 8 product, W 8 district>
この文では、山カッコで囲まれていることによって3つのすべてのディメンションにAPPENDが適用されます。ベース・ディメンションには新しい値を追加せずに、新しい結合ディメンション値のみを追加するには、次の2つの文に示すように、キーワードMATCHを明示的に指定するか、ターゲット・オブジェクトの順序を変更します。
fileread unit APPEND proddist = <W 8 MATCH product,W 8 MATCH district>
または
FILEREAD unit W 8 product W 8 district APPEND proddist = <product, district>
例9-131 構造化PRNファイルからのデータの読取り
フィールド2にproduct
ディメンションの値、フィールド3にdistrict
ディメンションの値、およびフィールド6から始まる複数月の売上値がある構造化PRNファイルからデータを読み取るとします。次の文によって、ファイルの最初の10レコードを読み取ることができます。
FILEREAD unit STOPAFTER 10 STRUCTURED FIELD 2 product - district FIELD 6 ACROSS month: sales
FILESET
FILESETコマンドは、指定したファイル・ユニットのページング属性を設定するコマンドです。
構文
FILESET fileunit attrib-arg1 exp1 [attrib-argN expN ...]
ただし、attrib-argには、次のいずれかを指定します。
- BMARGIN
- LINENUM
- LSIZE
- ORIGIN
- PAGENUM
- PAGEPRG
- PAGESIZE
- PAGING
- PAUSEATPAGEEND
- TABEXPAND
- TMARGIN
パラメータ
- fileunit
-
FILEOPEN文またはOUTFILE文を使用してあらかじめ開かれているファイルに割り当てられるファイル・ユニット番号。開かれているファイルに対してのみ属性を設定できます。属性の引数が、変更するファイル特性を指定します。属性は、指定したファイル・ユニットに対応する必要があり、対応しない場合、Oracle OLAPはエラーを返します。属性名とその新しい値のペアを指定することで、複数の属性を1つのFILESET文に設定できます。
- BMARGIN
-
下部余白になる空白行の数を指定します。
- LINENUM
-
現行の行数を指定します。PAGINGがオンの場合は改ページのたびにリセットされ、オフの場合は増え続けます。
- LSIZE
-
テキスト出力ファイルの行の最大長、またはバイナリ入力ファイルのレコード長を指定します。
- ORIGIN
-
ファイルが作成されたシステムのタイプを指定します。ORIGIN属性のデフォルト値は現在使用しているシステムを反映するので、異なるシステムで作成されたファイルの場合はORIGINを設定する必要があります。ORIGINの設定は、データ読取り文によるファイルの解釈の仕方に影響します。たとえば、データ読取り文はこの設定の情報を使用して、バイナリ・データのバイトを反転する必要があるかどうかなどを決定します。次の表を参照して、正しい選択をしてください。使用しているシステムが表にない場合、ORIGINの値としてPCまたはHPを使用してみてください。どちらかの値で機能しない場合、もう一方の値に変更してください。
表9-8 FILESETのORIGIN句の値
値 ハードウェアまたはオペレーティング・システム ALPHA
Alphaプロセッサを使用するDECワークステーション
AVMS
VMで実行されるDEC Alphaプロセッサ
HP
HP MPE XL
HPS700
HP Series 700 Workstation
HPS800
HP Series 800 Workstation
IBMPC
DOS、WindowsまたはWindows NTを実行するIntelプロセッサ
INTEL5
UNIXを実行するIntel5プロセッサ
MIPS
MIPSシステム
MVS
IBM MVS/TSO
NTALPHA
Windows NTを実行するDEC Alphaプロセッサ
PC
DOS、WindowsまたはWindows NTを実行するIntelプロセッサ
RS6000
IBM AIXを実行するIBM RS6000プロセッサ
SOLARIS2
Solaris2を実行するワークステーション
SUNOS4
SunOS4を実行するワークステーション
VAX
VAX VMS(G formatの浮動小数点のみ)
VM
VM/CMS
- PAGENUM
-
現行のページ数を指定します。
- PAGEPRG
-
出力がページングされる際にページ・タイトルおよびヘッダーを生成するOracle OLAPプログラムを指定します。
- PAGESIZE
-
各ページの行数を指定します。
- PAGING
-
出力が各ページで書式化されるかどうかを指定します。これは、PAGINGオプションをYESに設定するのと同じです。
- PAUSEATPAGEEND
-
各ページが終わるたびにOracle OLAPが一時停止するかどうかを指定します。
- TABEXPAND
-
タブ文字が拡張されるかどうかを指定します。TABEXPANDがゼロの場合、タブ文字は拡張されません。0より大きい値は、タブ間の距離のバイト数を示します。TABEXPANDのデフォルト値は
8
です。 - TMARGIN
-
上部余白になる空白行の数を指定します。
- exp
-
設定する属性の新しい値を含む式。式のデータ型は属性のデータ型と同じである必要があります。
例
例9-132 レポートのページングの設定
ディスク・ファイルのレポートに出力を送信する場合、次のように属性を設定することによって、レポートを各ページに編成して最初のページを1とすることができます。
DEFINE fil.unit INTEGER fil.unit = FILEOPEN('REPORT' WRITE) FILESET fil.unit PAGING YES PAGENUM 1
FILEVIEW
FILEVIEWコマンドは、入力ファイルから一度に1つのレコードを読み取るFILENEXTファンクションとともに機能してデータを処理し、フィールド説明に従ってOracle OLAPディメンションおよび変数にデータを格納するコマンドです。FILENEXTでレコードを読み取ってから、必要に応じて、1つ以上のFILEVIEW文を使用してフィールドを処理します。FILEVIEWには、入力の形式および出力の処理を指定するためにFILEREADと同じ属性があります。
構文
FILEVIEW fileunit [field-desc...]
パラメータ
- fileunit
-
FILEOPENファンクションを事前にコールすることによって読取り用(READモード)で開かれるファイルに割り当てられるファイル・ユニット番号。
- field-desc
-
フィールド説明は、各入力レコードの1つ以上のフィールドの処理方法を示します。フィールド説明の属性は、入力データの書式化の方法を指定します。FILEVIEWは、書式指定に従って各フィールドを読み取り、入力データを指定されたオブジェクトに割り当てます。データをオブジェクトに直接割り当てることも、式を指定して割当ての前にデータを操作することもできます。1つのフィールド説明によって、1つの入力フィールドのデータを1つのOracle OLAPオブジェクトに割り当てることができます。あるいは、ACROSSキーワードを使用して、入力レコードの複数の値を最も変化の速いディメンションによってディメンション化されている変数に割り当てることもできます。フィールド属性には入力レコードの列番号が含まれるので、入力フィールドを任意の順序で処理できます。
フィールド説明の形式は、次のとおりです。
[[pos] ACROSS dim [limit-clause]:] [attribs] object [= exp]
- pos
-
Oracle OLAPがACROSS句によって指定されるフィールドの読取りを開始するレコード内の位置を指定する1つ以上の属性。位置を指定するには、属性FIELD、SPACEおよびCOLUMNを使用します(FILEREADコマンドを参照)。ACROSS句で指定される一連のフィールドが構造化レコードのすぐ次のフィールドまたはルール化レコードのすぐ次のバイトから始まる場合、pos引数はオプションです。
- ACROSS-statement: action-statement
-
入力レコードにおける1つ以上のデータ・フィールドのディメンションを指定します。FILEVIEWは、dimの現行のステータスの値に従ってフィールドのデータを変数に割り当てます。通常、各フィールド説明で1つの値を処理します。ただし、ACROSSキーワードを使用することにより、現在ステータスにあるディメンション値ごとに1つの入力値を処理できます。ループを複数のアクション文に適用するには、アクション文を山カッコで囲みます。
ACROSS文の構文は次のとおりです。
ACROSS dimension [limit-clause]:
action-statement
limit-clauseの構文は、各種LIMITコマンドにおけるlimit-clause引数の構文(つまり、LIMITコマンドの「TO」などのlimit-type引数の後の構文)と同じです。これらの引数の構文については、LIMITコマンド(値を使用)、LIMITコマンド(LEVELRELを使用)、LIMIT(親リレーションを使用)、LIMITコマンド(関連ディメンションを使用)、LIMITコマンド(NOCONVERTを使用)およびLIMITコマンド(POSLISTを使用)を参照してください。
次の例は、
month
の現行のステータスにかかわらず、month
を最近の6つの値に制限します。ACROSS month last 6: units
- attribs
-
レコード内の位置および入力データの形式をOracle OLAPに知らせる1つ以上の属性。(使用可能な属性の説明は、FILEREADコマンドを参照してください。)
- object [= exp]
-
入力データの割当て先となるOracle OLAP変数、ディメンションまたはリレーション。= expがない場合、データは暗黙的にオブジェクトに割り当てられます。= expがある場合、データは式に従って処理されてobjectに割り当てられます。
VALUEキーワードを使用して、レコードの特定フィールドの値を表すことができます。VALUEは、使用するFILEREADの属性に従って書式化してファイルのデータを表します。レコードのフィールドが空白の場合、FILEREADはその値を
NA
とみなします。デフォルトでは、VALUEのデータ型はターゲット・オブジェクトのデータ型です。ただし、属性キーワードによって別のデータ型を指定できます。VALUEは、同じレコードから異なる値を表すために複数回使用できます。次のサンプル・コードに示すように、インスタンスごとに各値を読み取る列を指定します。sales = if col 1 w 1 text value eq 'A' then col 2 w 8 value - else col 10 w 8 value
この例では、VALUEのデフォルトのデータ型は、ターゲット・オブジェクト
sales
のデータ型である10進数です。ただし、VALUEの最初のインスタンスはテキスト式と比較されるので、そのデータ型を指定するためには属性TEXTを使用する必要があります。 - SELECT exp
-
フィールド説明のSELECTキーワードは、1つのFILEVIEW文によって様々なタイプのレコード(異なる構造や異なるターゲット・オブジェクトのレコードなど)を処理します。フィールド説明内に、次の構文を使用できます。
SELECT exp - [WHEN exp action [WHEN exp action ...]] - [ELSE action] IF bool-exp THEN action [ELSE action] DO field-desc [field-desc] ... DOEND
action引数は、次のうちのいずれかです。
-
NULL(アクションは発生しません)
-
ネストされたIF文およびSELECT文を含むfield-description
SELECTは最初の式を評価しますが、この式にはVALUEキーワードの呼出しを含めることができ、デフォルトのデータ型はTEXTです。次に、SELECTはその結果をWHEN式と順次比較します。最初に一致が見つかったところで、関連付けられたactionが発生します。一致が見つからない場合、ELSEactionが指定されていれば発生します。
-
- IF bool-exp
-
フィールド説明のIFキーワードは、1つのFILEVIEW文によって様々なタイプのレコード(異なる構造や異なるターゲット・オブジェクトのレコードなど)を処理します。フィールド説明内に、次の構文を使用できます。
IF bool-exp THEN action [ELSE action]
actionはSELECTの説明と同じです。
IFはブール式を評価しますが、この式にはVALUEキーワードの呼出しを含めることができます。式がTRUEの場合、IFはTHENアクションを実行し、式がFALSEの場合に、ELSEアクションが指定されていればそのアクションが実行されます。式が
NA
の場合、アクションは発生しません。
使用上の注意
レコード順序
FILEVIEWは、レコードのフィールドを任意の順序で処理できます。列番号によって明示的にフィールドを特定して、処理する順序にフィールド説明を列記します。また、レコード内のデータに応じて異なる処理を実行するには、同じレコードに対して複数のFILEVIEW文を使用します。
代替OLAP DML文
ファイルのすべてのレコードを複雑なオプションの処理を行わずに同じ方法で処理するには、FILEREAD文を使用すると簡単です。
ディメンション値
フィールド説明のターゲット・オブジェクトがディメンションである場合、ディメンションに値を追加するためにファイルのデータを使用するかどうかを指定できます。ディメンション属性は、次のようにMATCHおよびAPPENDです。
-
MATCH -- フィールドにある値はすでにディメンションの値である必要があります。FILEVIEWはステータスを一時的にその値に制限します。すでにディメンション値になっているのではない場合、FILEVIEWはエラーを生成します。FILEVIEW文の実行後と実行前のディメンション・ステータスは同じです。
-
APPEND -- フィールドの値はすでに存在するか新規です。値が存在する場合、FILEVIEWはステータスをその値に制限し、存在しない場合、FILEVIEWは値を追加してからステータスを制限します。FILEVIEWが終了するとディメンションはALLに制限されます。
ディメンションの処理の詳細は、FILEREADコマンドを参照してください。
FILEVIEWでエラーが発生した場合のエラー処理
FILEVIEWがエラーを検出した場合、エラー・トラップおよび適切な処理によって発生したエラーを制御できます。データを互換性のないデータ型に変換しようとした場合、または無効なディメンション値が検出された場合に、エラーが発生します。FILEERRORファンクションを使用すると、発生したエラーのタイプを確認できます。エラーを処理した後は、GOTOを使用してFILEVIEW文に分岐して戻ることができます。
属性リスト
FILEVIEWおよびFILEREADの属性の完全なリスト、NA
値の処理、日付値の読取り、多次元データの読取り、NTEXT値の格納、および属性の指定については、FILEREADコマンドを参照してください。
コンポジットを伴うFILEVIEW
FILEREADにおけるコンポジットおよびコンポジットによってディメンション化された変数の説明は、FILEVIEWにも適用されます。
例
例9-133 可変の月数
次のプログラムは、可変の月数に関する販売データを含む入力ファイルを処理します。ファイルには次のレコードがあります。
-
レコード1 -- タイトル(無視されます)。
-
レコード2 -- 列ラベル。月名を使用して
month
のステータスを設定します。月数はファイルを処理するまで不明です。 -
レコード3 -- 列ラベルに下線を引くダッシュ(無視されます)。
-
レコード4 -- 空白。
-
レコード5から最後まで -- レコード5には3タイプのレコードがあり、各タイプごとに1行読み取られます。
レコード5のうちの1つのレコード・タイプは、次の表に示す内容の詳細行を表します。
列 | 幅 | 書式 | データ |
---|---|---|---|
1 |
8 |
シンボリック |
地区名または空白(詳細行で地区名が空白である場合、地区名を含む最新の行によって現行地区が決定される) |
10 |
10 |
シンボリック |
製品名 |
21 |
10 |
シンボリック |
最初の月の売上 |
33 |
10 |
シンボリック |
2番目の月の売上 |
45 |
レコードの最後まで |
シンボリック |
その他の月の売上 |
レコード5の別のレコード・タイプは、次の表に示す内容の合計行を表します。
列 | 幅 | データ |
---|---|---|
1 |
18 |
空白 |
21 |
レコードの最後まで |
合計 |
レコード5の最後のレコード・タイプは、次の表に示すように、行セパレータとしてのダッシュまたは等号を含みます。
列 | 幅 | データ |
---|---|---|
1 |
18 |
空白 |
21 |
レコードの最後まで |
ダッシュ(--)または等号(==) |
次は、サンプル・ファイルのレコードです。
This is the Title Jan95 Feb95 Mar95 Apr95 ---------- ---------- ---------- ---------- Boston Tents 32,153.52 32,536.30 43,062.75 57,608.39 Canoes 66,013.92 76,083.84 91,748.16 125,594.28 Racquets 52,420.86 56,837.88 58,838.04 69,338.88 Sportswear 53,194.70 58,913.40 62,797.80 67,869.10 Footwear 91,406.82 86,827.32 100,199.46 107,526.66 ---------- ---------- ---------- ---------- 295,189.82 311,198.74 356,646.21 427,937.31 ---------- ---------- ---------- ---------- Atlanta Tents 40,674.20 44,236.55 51,227.06 78,469.37 . . . Footwear 53,284.54 57,331.30 59,144.76 70,516.98 ---------- ---------- ---------- ---------- 231,780.46 245,812.33 275,622.68 355,784.92 ---------- ---------- ---------- ---------- 1,813,326 1,985,731 2,185,174 2,638,409 ========== ========== ========== ==========
次のプログラムは、ファイルでカバーされている月を確認し、詳細行を読み取り、販売データを適切な地区および月に割り当てます。FILEVIEWが空白である列1から19までを検出すると、プログラムは合計行を無視して下線を引きます。プログラムはデータファイルの名前を引数として受け取ります。
DEFINE salesdata PROGRAM LD Store Several Months of Sales Data in an Analytic Workspace PROGRAM VARIABLE fil.unit INTEGER VARIABLE flag BOOLEAN VARIABLE mname TEXT VARIABLE label TEXT VARIABLE savedist TEXT TRAP ON error NOPRINT PUSH month district fil.unit = FILEOPEN(ARG(1) READ) IF FILENEXT(fil.unit) NE YES "Skip Record 1 THEN SIGNAL noread IF FILENEXT(fil.unit) NE YES "Process Record 2 THEN SIGNAL noread FILEVIEW fil.unit COLUMN 21 ACROSS month: - WIDTH 10 mname = JOINLINES( mname VALUE) LIMIT month TO mname IF FILENEXT(fil.unit) NE YES "Skip Record 3 THEN SIGNAL noread IF FILENEXT(fil.unit) NE YES "Skip Record 4 THEN SIGNAL noread WHILE FILENEXT(fil.unit) "Process Record 5 To End Of File DO "Store Value In Local Label Variable FILEVIEW fil.unit COLUMN 1 WIDTH 18 label IF label NE NA "Check For NA (Blank Field) THEN DO "Get District Value If Present IF EXTCHARS(label, 1, 8) NE ' ' "Set District Status THEN savedist = BLANKSTRIP(EXTCHARS(label, 1, 8)) FILEVIEW fil.unit - COLUMN 1 WIDTH 8 district = IF VALUE NE NA THEN - VALUE ELSE savedist - COLUMN 10 WIDTH 10 product - COLUMN 19 ACROSS month: WIDTH 10 SPACE 2 - SCALE 2 newsales DOEND NEXT: DOEND FILECLOSE fil.unit POP month district RETURN error: IF fil.unit EQ NA THEN SHOW JOINCHARS('Can\'t Open Data File ' ARG(1) '.') ELSE IF ERRORNAME NE 'attn' AND ERRORNAME NE 'QUIT' THEN DO SHOW JOINCHARS('RECORD ' RECNO(fil.unit) ' is invalid.') GOTO NEXT DOEND ELSE IF ERRORNAME EQ 'noread' THEN DO SHOW 'File Too Short.' FILECLOSE fil.unit DOEND ELSE DO SHOW 'Data Import Interrupted.' FILECLOSE fil.unit DOEND POP month district RETURN
例9-134 追加処理
FILEVIEWが読み取ったディメンション値を表示またはその後の処理のために保存する場合、フィールドを再び読み取ってその値を変数に保存できます。次のプログラムの行は、FILEVIEWが読み取った月の名前を表示します。FILEVIEWコマンドは、列1の月の値をmname
という名前の変数に保存します。
WHILE FILENEXT(fil.unit) DO FILEVIEW fil.unit WIDTH 8 month WIDTH 5 INTEGER units - COLUMN 1 WIDTH 8 mname SHOW mname PROMPT DOEND
例9-135 ファンクションとしてのVALUEキーワードの使用
次のような15文字幅の列を持つnumbers.dat
という名前のディスク・ファイルからデータを読み取ってレポートするとします。
1.0 2.0 3.0 4.0 5.0 -1.0 -2.0 -3.0 -4.0 -5.0 0.0 0.0 1.43900000E+03 1.39900000E+03
次に示すtry
という名前のプログラムで、FILEVIEWとともにVALUEキーワードをファンクションとして使用してこのデータを読み取ることができます。ただし、この最初のサンプル・プログラムは機能しません。FILEVIEWコマンドによってフィールドがスキップされます。データがスキップされる原因は、FILEREADが現行レコードからフィールドをフェッチするたびに、列ポインタが更新されてそのフィールドの先を指すことにあります。COLUMN、SPACEまたはFIELD属性を使用して次のフェッチが位置を指定するのではない場合、前のフェッチによって指定されるデフォルトの位置からデータが読み取られます。これは通常は望ましい動作ですが、単一の割当てを実行するために複数のフェッチが必要な場合(たとえば次に示すとおり、同じIF...THEN...ELSEコマンドのブロックにVALUEファンクションが2回コーディングされている場合など)には機能しません。NAMELISTおよびDIRLIST属性は、ディレクトリ内の特定ファイル名の複数バージョンに対して1つの値を返します。また、NAMELIST属性は、ルート・ファイル名は同じでファイル・タイプが異なるディレクトリ内の複数ファイルに対しても1つの値のみを返します。
DEFINE try PROGRAM PROGRAM VARIABLE funit INTEGER DEFINE dvar VARIABLE DECIMAL <year> PUSH year LIMIT year TO LAST 5 TRAP ON ERROR funit=FILEOPEN('numbers.dat' R) WHILE FILENEXT(funit) DO FILEVIEW funit ACROSS year: W 15 TEXT dvar = - IF FINDCHARS(VALUE, 'e') EQ 0 - "Incorrect Use of Value THEN CONVERT(VALUE, dec) - "Results in Skipped ELSE -9999.99 "Fields REPORT DOWN year dvar DOEND error: FILECLOSE funit DELETE dvar POP year END
次のようにtry
プログラムを実行すると、
try
次のように出力で数値がスキップされます。
YEAR DVAR ------------- ---------- Yr93 2.00 Yr94 4.00 Yr95 NA Yr96 -9,999.99 Yr97 -9,999.99 YEAR DVAR ------------- ---------- Yr93 -2.00 Yr94 -4.00 Yr95 NA Yr96 -9,999.99 Yr97 -9,999.99 YEAR DVAR ------------- ---------- Yr93 0.00 Yr94 -9,999.99 Yr95 -9,999.99 Yr96 -9,999.99 Yr97 -9,999.99
これに対し、2番目のVALUEが一定の距離を戻るようにSPACE属性を使用し、同じフィールドが読み取られるようにすると、正常に機能します。前述のサンプル・プログラムでSPACEを使用するには、THEN句を次の句に変更します。
THEN CONVERT(SPACE -15 VALUE, dec) -
ここで、変更したプログラムを実行します。
try
次のように出力されます。
YEAR DVAR ------------- ---------- Yr93 1.00 Yr94 2.00 Yr95 3.00 Yr96 4.00 Yr97 5.00 YEAR DVAR ------------- ---------- Yr93 -1.00 Yr94 -2.00 Yr95 -3.00 Yr96 -4.00 Yr97 -5.00 YEAR DVAR ------------- ---------- Yr93 0.00 Yr94 0.00 Yr95 -9,999.99 Yr96 -9,999.99 Yr97 -9,999.99
FOR
OLAP DMLプログラムでは、FORコマンドにより1つ以上のディメンションが指定され、このディメンションのステータスに基づいて、1つ以上の文の反復処理が制御されます。FOR文を含めたこれらの文は通常、FORループと呼ばれます。
構文
FOR dimension... statement
パラメータ
使用上の注意
FORディメンション
FOR文は、指定したディメンションのステータスにある値をループします。最後のディメンション値の後、ディメンション・ステータスはループ前のステータスにリストアされ、次の文のプログラム実行が再開されます。
ループ内のステータス
TEMPSTATコマンドは、FORループ内またはREPORT文によって自動的に生成されるループ内でループするディメンションを制限します。
ソート不可
現行のステータスがFORループを定義および制御するので、ループ内でFORディメンションをソートできません。
代入文と他のループ文
OLAP DML代入文(SET)および他の一部のOLAP DML文は、自動的にディメンション・ステータスをループし、FORループより効率的です。代入文などのこのような文をループに入れることによって不必要なループが発生しないように注意してください。
分岐
BREAK、CONTINUEおよびGOTOの各文を使用すると、FORループ内での分岐またはFORループ外への分岐が可能なため、文の実行順序を変更できます。
FOR文のネスト
対応するDOおよびDOEND文を必要に応じて指定することによって、FOR文をFORループ内で任意の深さまでネストできます。
例
例9-136 FORループのDOによるROWコマンドの繰返し
レポート・プログラムで、3か月の各月におけるテントの売上数量を表示するとします。次のようにFOR文をDO/DOENDシーケンスとともに使用して、month
ディメンションの各値に対し、ROWコマンドおよびBLANKコマンドを繰り返します。
LIMIT product TO tents LIMIT month TO 'Jan96' TO 'Mar96' ROW district ROW UNDER '-' VALONLY name.product BLANK FOR month DO ROW INDENT 5 month WIDTH 6 UNITS BLANK DOEND
このプログラムの行によって次のレポートが生成されます。
BOSTON 3-Person Tents -------------- Jan96 307 Feb96 209 Mar96 277
例9-137 値をループ処理するFOR文の使用方法
FORコマンドは、ディメンションの現行のステータスの各値に対してコマンドをループして実行します。FOR文を実行する前に、ディメンションを目的の値に制限する必要があります。たとえば、各製品の価格を表示する一連の出力行を生成できます。
LIMIT month TO FIRST 1 LIMIT product TO ALL FOR product SHOW JOINCHARS('Price for ' product ': $' price)
各出力行の形式は、次のとおりです。
Price for TENTS: $165.50
データが多次元である場合、FOR文に複数のディメンションを指定して処理順序を制御できます。たとえば、次の文を使用すると、units
データのディメンション値が処理される順序を制御できます。
FOR month district product units = ...
この代入文を実行すると、month
ディメンションが最後に変化し、district
ディメンションがその前に変化し、product
ディメンションが最初に変化します。したがって、最初の地区のすべての製品に対してループが実行されてから次の地区が実行され、最初の月のすべての地区に対して実行されてから次の月が実行されます。
FORループ内では、ループの文が実行される間、指定した各ディメンションは一時的に単一の値に制限されます。そのため、ループ内でディメンション値の組合せを限定できます。
例9-138 FORループでのDO/DOENDの使用方法
売上数量の実績値がunits
という名前の変数に格納され、売上数量の目標値がunits.plan
という名前の変数に格納される場合、コードをループに入れることによって、ディメンション値の同じ組合せに対する両方の数値を比較できます。
LIMIT month TO FIRST 1 LIMIT product TO ALL LIMIT district TO ALL FOR district product DO IF (units.plan - units)/units.plan GT .1 THEN SHOW JOINCHARS(- 'Unit sales for ' product ' in ' - district ' are not within 10% of plan.') DOEND
このコードの各行は次のように処理されます。
-
データが特定の月に制限されます。
-
すべての地区および製品がステータスに入れられ、FORループに入ります。
-
FORループで、実績値が目標値と比較されます。
Boston
におけるTents
の売上数量が目標値の10%を超えて下回る場合、次のメッセージが現行の出力ファイルに送信されます。Unit sales for TENTS in BOSTON are not within 10% of plan.
-
すべての製品の処理が終わると、最初の地区のFORループが完了します。
-
次の地区のループが実行されていきます。
FORループが実行される間、FOR文で指定される各ディメンションは一時的に単一の値に制限されることに注意してください。FORループで
district
を指定してproduct
を指定しない場合、FORループが実行される間、product
のすべての値はステータスにあります。したがって、IF...THEN...ELSEコマンドでは、product
ディメンションの最初の値に関してのみ、データの比較が行われます。
FORECAST
FORECASTコマンドは、直線傾向、指数的成長、Holt-Winters補外の3つの方法のいずれかによってデータを予測するコマンドです。FORECASTは、指定した方法に従って計算を実行し、オプションとしてその結果をアナリティック・ワークスペースの変数に格納します。
その後、FORECAST.REPORTを実行して予測の標準レポートを生成できます。また、INFOファンクションを使用して、独自にカスタマイズしたレポートまたはさらに詳細な分析に使用するために結果を部分的に取得することもできます。
ヒント:
大部分のアプリケーションは、FORECAST文を使用せずに予測コンテキストを使用してデータを予測します。詳細は、「予測プログラム」を参照してください。
構文
FORECAST [LENGTH n] - [METHOD {TREND|EXPONENTIAL|WINTERS PERIODICITY p [argument...]}] - [TIME dimension] [FCNAME name] time-series
ここで、argumentは予測の特性を指定する次の句のいずれか1つ以上です。
- ALPHA n
- BETA n
- GAMMA n
- STSMOOTHED n STSEASONAL n-series STTREND n
- FCSMOOTHED name
- FCSEASONAL name
- FCTREND name
パラメータ
- LENGTH n
-
予測する時間間隔の数を指定します。デフォルトはゼロです。LENGTHを指定した場合、FCNAMEオプションも指定する必要があります。
- METHOD TREND
-
(デフォルト)予測方法が履歴データの直線補外であることを指定します。
- METHOD EXPONENTIAL
-
予測方法が期間から期間の定率成長を使用する履歴データの直線補外であることを指定します。
- METHOD WINTERS
-
予測方法が、データにおける線形傾向および季節的変動の両方を考慮する補外法であるHolt-Winters法であることを指定します。Oracle OLAPは、最初に履歴データの各時間間隔に関して統計的に関連する3つの系列を構成します。(「Holt-Winters構成系列」を参照。)次にOracle OLAPは、指定された数の時間間隔に関するその3つの系列から将来への予測を生成します。
Holt-Winters予測の結果に影響を与える複数の引数を指定できます。PERIODICITYのみ必須です。他の引数については、Oracle OLAPは使用可能なデータに基づいて妥当な値を選択します。
- PERIODICITY p
-
季節サイクルの長さで、pは、2以上の
INTEGER
を指定する式です。たとえば、分析するデータが月別の値である場合、pは12です。METHOD WINTERSキーワードを使用する場合、PERIODICITYは必須です。
- ALPHA n
- BETA n
- GAMMA n
-
Holt-Winters予測のために計算される最初の3系列に対する平滑化定数(「Holt-Winters構成系列」を参照)。ALPHAは平滑データ系列用、BETAは季節指数系列用、GAMMAは傾向系列用です。値nは、0より大きく1より小さい小数式です。各値はオプションです。省略した場合、Oracle OLAPはその系列に対して最適な平滑化定数を計算して、履歴期間における1つ先の時間間隔の平均絶対誤差率を最小限にします。
- STSMOOTHED n STSEASONAL n-series STTREND n
-
STSMOOTHEDは、平滑データ系列の開始値を指定します(「Holt-Winters構成系列」を参照)。値nは、0より大きく1より小さい小数式です。STSMOOTHEDを指定した場合、STSEASONALおよびSTTRENDも指定する必要があります。この値を省略した場合、Oracle OLAPが開始値を計算します。
STSEASONALは、季節指数系列の開始値を指定します(「Holt-Winters構成系列」を参照)。n-seriesは、季節サイクルにおける時間間隔ごとに1つの値とする10進値の配列です。必要な値の数はPERIODICITYに指定する数と同じです(「Holt-Winters開始値」を参照)。STSEASONALを指定した場合、STSMOOTHEDおよびSTTRENDも指定する必要があります。この値を省略した場合、Oracle OLAPが開始値を計算します。
STTRENDは、傾向系列の開始値を指定します(「Holt-Winters構成系列」を参照)。Nは10進値です。STTRENDを指定した場合、STSMOOTHEDおよびSTSEASONALも指定する必要があります。この値を省略した場合、Oracle OLAPが開始値を計算します。
- FCSMOOTHED name
- FCSEASONAL name
- FCTREND name
-
Oracle OLAPが平滑データ系列、季節指数系列および傾向系列用に計算したデータを格納する数値変数(「Holt-Winters構成系列」を参照)。nameによって指定される変数には、そのディメンションの1つとしてTIME dimensionがある必要があります。系列計算ではDECIMALの結果が生成されますが、Oracle OLAPはその値を格納する前にnameのデータ型に変換します。事前系列のいずれかまたはすべてを保存できます。系列を保存しない場合、Oracle OLAPは予測の完了後にその値を破棄します。
- TIME dimension
-
時間ディメンションとしてみなされるディメンションの名前。dimensionの現行のステータスによって、予測の計算に使用される履歴データの時間間隔の数が決定されます。時間ディメンションのステータスは、逓増する連続的な値の範囲である必要があります。LENGTHが、この範囲を超えて隣接する、予測される値の数を指定します。
time-seriesが1つのみのディメンションである場合、時間ディメンションはデフォルトでそのディメンションに設定されます。time-seriesに複数のディメンションがあり、そのディメンションの1つがDAY、WEEK、MONTH、QUARTERまたはYEARの型である場合、時間ディメンションはデフォルトでその型に設定されます。それ以外の場合は、他のディメンションが単一の値に制限されるときでも、時間ディメンションを指定する必要があります。FORECASTは、時間ディメンション以外のディメンションではステータスにある最初の値のみを使用します。
- FCNAME name
-
FORECASTによって計算される値を格納する数値変数の名前。nameは、時間ディメンションによってディメンション化されている必要があり、他のディメンションがあっても構いません。nameのデータ型が10進数でない場合、FORECASTはその値を適切なデータ型に変換します。
履歴データに対応する適合値は、時間ディメンションの現行のステータスに対してnameに格納されます。予測値は、LENGTHによって指定される時間間隔の数に対してnameに格納されます。その予測時間間隔は、時間ディメンションの現行のステータスの直後に続きます。
Holt-Winters法の場合、適合値は前の時間間隔で計算される1つ先の時間間隔の予測です。最終予測値は適合値から推定されます。
TRENDおよびEXPONENTIALの方法の場合、FORECASTは時間ディメンションの現行のステータスを通じて回帰方程式を評価することによって適合値を取得します。
- time-series
-
予測される時系列を指定する式。Time-seriesは、時間ディメンションによってディメンション化される数式である必要があります。time-seriesに他のディメンションがある場合、FORECASTはその現行のステータスの最初の値のみを使用します。time-seriesは、FORECASTが適合値および予測値を計算する元の履歴データです。(FCNAMEの説明を参照してください。)
使用上の注意
多次元式の予測
多次元式のすべての値を予測するには、FORECAST文を1つ以上のFORループ内に入れたプログラムを使用して、式の残りのすべてのディメンションをループ処理します。
結果の一部の取得
INFO文を使用すると、独自のレポートまたはさらに詳細な分析のためにFORECASTの結果の一部を取得できます。
引数の順序
予測されるデータを指定する式であるtime-seriesが最後にくる必要があることを除き、FORECASTの引数を指定する順序は任意です。
Time-seriesデータの処理
各方法には、time-seriesに指定される入力データの処理に関してそれぞれの基準があります。
-
TREND --
NA
ではない値が最低2つ必要です。ゼロおよび負の値を受け入れます。NA
値を無視します -
EXPONENTIAL: 最低2つの正の値が必要です。ゼロ、負および
NA
値を無視します。 -
WINTERS: ゼロおよび負の値を受け入れます。加重移動平均を計算することによって
NA
値を埋めます。
ゼロ値
いずれの方法でも、time-seriesによって指定される履歴データにゼロ値を許可しますが、その時間間隔は平均絶対誤差率(MAPE)の計算から除外されます。
Holt-Winters構成系列
Holt-Winters予測法は、統計的に関連する3つの系列を構成して実際の予測に使用します。これらの系列は、次のとおりです。
-
平滑データ系列は、季節的影響および確率的誤差を除いた元データです。
-
季節指数系列は、各時間間隔の季節的影響です。ゼロより大きい値はその時間間隔のデータに季節的増加があることを表し、ゼロより小さい値はデータに季節的減少があることを表します。Holt-Winters法は、季節的影響が時間の経過とともに変化することを認めるので、すべての履歴期間に季節指数値があります。
-
傾向系列は、季節的影響および確率的誤差を除いた各時間間隔のデータにおける変化です。Holt-Winters法は、傾向影響が時間の経過とともに変化することを認めるので、すべての履歴期間に傾向値があります。
引数を省略したHolt-Winters
Holt-Winters法では、STSMOOTHED、STTRENDおよびSTSEASONAL句を省略した場合、AbrahamおよびLedolter著『Statistical Methods for Forecasting』のアルゴリズムを使用してOracle OLAPが必要な開始値を計算します。Holt-Winters予測に不慣れな場合は、Oracle OLAPで開始値を計算してください。
Holt-Winters開始値
開始値を指定した場合、Oracle OLAPは値を解読してリストを作成することによって、STSEASONAL開始値を取得します。そのリストには、PERIODICITYによって指定される数の値が少なくとも必要です。これより多い値は無視され、少ない場合はエラーが発生します。STSEASONAL式は多次元も可能であり、履歴データと同じディメンションを持つ必要がありません。(ディメンション化された式を解明する際のリストの順序については、UNRAVELファンクションを参照してください。)
計算された値の取得
Oracle OLAPがALPHA、BETA、GAMMAに対して計算する値、およびSTSMOOTHED、STSEASONAL、STTRENDに対して計算する値は、INFOファンクションを使用して確認できます。
予測のレポートの生成
FORECAST.REPORTプログラムは、FORECASTコマンドを使用して作成される予測の標準レポートを生成します。
レポートには、予測の計算式および平均絶対誤差率を含む予測のパラメータに続いて、予測値が示されます。このレポートを生成するには、次のように入力します。
FORECAST.REPORT
例
例9-139 EXPONENTIAL法の使用方法
次の文は、fcst.sales
という名前の変数を作成し、sales
変数のディメンションを制限し、EXPONENTIAL法を使用して1997年のChicago地区におけるスポーツウェアの売上を予測し、計算の結果をfcst.sales
に格納します。
DEFINE fcst.sales DECIMAL <month> LIMIT product TO 'Sportswear' LIMIT district TO 'Chicago' LIMIT month TO 'Jan95' TO 'Dec96' FORECAST LENGTH 12 METHOD EXPONENTIAL FCNAME fcst.sales - time month sales
ここでFORECAST.REPORTを実行すると、生成された値を表示できます。その予測に対してFORECAST.REPORTプログラムを実行すると、次のレポートが生成されます。
Forecasting Analysis ==================== Variable to Forecast: SALES Forecast dimension: MONTH Forecast method: EXPONENTIAL Mean absolute percent error: 16.64% Forecast Equation: SALES = 87718.0009541883 * (1.00553383457899 ** MONTH) MONTH Actual Value Fitted Value -------------------- ------------ ------------ Jan95 72,123.47 88,203.42 Feb95 80,071.75 88,691.52 Mar95 78,812.69 89,182.33 Apr95 97,413.26 89,675.85 May95 94,406.65 90,172.10 ... ... ... Dec96 72,095.02 100,140.38 ... ... ...
例9-140 WINTERS法の使用方法
次の文は、month
ディメンションを制限し、WINTERS法を使用して季節的影響を考慮した予測を計算します。
DEFINE fcst.sales DECIMAL <montH> LIMIT month TO year 'Yr95' 'Yr96' FORECAST LENGTH 12 METHOD WINTERS - PERIODICITY 12, ALPHA .5, BETA .5, GAMMA .5 - time month, FCNAME fcst.sales, sales
ここでFORECAST.REPORTを実行すると、生成された値を表示できます。その予測に対してFORECAST.REPORTプログラムを実行すると、次のレポートが生成されます。
Forecasting Analysis ==================== Variable to Forecast: SALES Forecast dimension: MONTH Forecast method: WINTERS Alpha: 0.50 Beta: 0.50 Gamma: 0.50 Periodicity: 12 Mean absolute percent error: 0.20% MONTH Actual Value Fitted Value -------------------- ------------ ------------ Jan95 72,123.47 72,154.67 Feb95 80,071.75 80,027.51 Mar95 78,812.69 79,171.08 Apr95 97,413.26 97,200.81 May95 94,406.65 94,464.71 .... ... ... Dec97 77,867.23
FORECAST.REPORT
FORECAST.REPORTプログラムは、FORECASTコマンドを使用して作成される予測の標準レポートを生成します。
レポートには、予測の計算式および平均絶対誤差率を含む予測のパラメータに続いて、予測値が示されます。
構文
FORECAST.REPORT
例
例9-141 EXPONENTIAL法を使用した予測のレポート
例9-139に示す予測を実行したとします。その予測に対してFORECAST.REPORTプログラムを実行すると、次のレポートが生成されます。
Forecasting Analysis ==================== Variable to Forecast: SALES Forecast dimension: MONTH Forecast method: EXPONENTIAL Mean absolute percent error: 16.64% Forecast Equation: SALES = 87718.0009541883 * (1.00553383457899 ** MONTH) MONTH Actual Value Fitted Value -------------------- ------------ ------------ Jan95 72,123.47 88,203.42 Feb95 80,071.75 88,691.52 Mar95 78,812.69 89,182.33 Apr95 97,413.26 89,675.85 May95 94,406.65 90,172.10 ... ... ... Dec96 72,095.02 100,140.38 ... ... ...
例9-142 WINTERS法を使用した予測のレポート
例9-140に示す予測を実行したとします。その予測に対してFORECAST.REPORTプログラムを実行すると、次のレポートが生成されます。
Forecasting Analysis ==================== Variable to Forecast: SALES Forecast dimension: MONTH Forecast method: WINTERS Alpha: 0.50 Beta: 0.50 Gamma: 0.50 Periodicity: 12 Mean absolute percent error: 0.20% MONTH Actual Value Fitted Value -------------------- ------------ ------------ Jan95 72,123.47 72,154.67 Feb95 80,071.75 80,027.51 Mar95 78,812.69 79,171.08 Apr95 97,413.26 97,200.81 May95 94,406.65 94,464.71 .... ... ... Dec97 77,867.23
FULLDSC
FULLDSCプログラムは、1つ以上のワークスペース・オブジェクトに関して、そのプロパティおよびトリガーを含む定義を表示するレポートを生成します。
構文
FULLDSC [names]
パラメータ
使用上の注意
FULLDSCの出力
FULLDSCプログラムは、DESCRIBEコマンドの拡張です。したがって、FULLDSCによってリスト表示するオブジェクト定義には、DESCRIBEコマンドでリスト表示される定義の構成要素が含まれ、オブジェクトに割り当てられているプロパティはその後に示されます。プロパティごとの各行には、PROPERTYという文字列、プロパティの名前およびその値が表示されます。
参照するオブジェクトの制限
通常、NAMEのステータスはALLなので、引数のないFULLDSCは、現行のワークスペースのすべてのオブジェクトに関する定義を含むレポートを生成します。ただし、FULLDSCと組み合せてLIMITコマンドを使用すると、ワークスペースの特定グループのオブジェクトに関する定義をレポートできます。最初にLIMITを使用して、NAMEディメンションのステータスを参照したい定義のオブジェクトの名前に制限します。次に、FULLDSC文を引数を付けずに実行して定義を表示します。
ページ番号付き出力
FULLDSC文によってページ番号付き出力を生成するには、FULLDSCを使用する前にPAGINGをYES
に設定します。
FULLDSC出力によるオブジェクトの作成
FULLDSC文からの出力の各行は有効な文であるので、その出力を使用して他のワークスペースにオブジェクトを作成できます。たとえば、OUTFILE文を実行して後続の出力をファイルに送り、その後でFULLDSC文を実行できます。次に別のワークスペースにアクセスしてINFILE文を使用すると、FULLDSC出力を読み取ることができます。これで、対象のワークスペースに同じオブジェクトが作成されます。
FULLDSCによって生成される出力では、元の名前および値の式が保存されないため、オブジェクトのプロパティを作成した元のPROPERTY文が完全に一致して複製されない場合もあります。さらに、FULLDSCはDECIMALSオプションを255に設定するので、後続のゼロが削除されます。「例9-143」を参照してください。
例
注意:
例9-143 変数のプロパティのリスト表示
この例は、プロパティDECPLACEおよびREPPRGが追加されているactual
変数のすべての定義に関するレポートを生成します。次の文
FULLDSC actual
によって、次の出力が生成されます。
DEFINE ACTUAL VARIABLE DECIMAL <LINE DIVISION MONTH> LD Actual $ Financials PROPERTY 'DECPLACE' 4 PROPERTY 'REPPRG' 'qtrrep'
DECPLACEプロパティが次の文によって指定されていたとします。PRPNAMEはその値がDECPLACEである変数です。
PROPERTY prpname 4.00
FULLDSCによる出力は、先の例と同じ結果になります(つまり、値4.00が4として表示されます)。したがって、FULLDSC出力に対してINFILE技術を使用してオブジェクトを作成した場合、元のプロパティ値はDECIMALの型(値4.00による)であったにもかかわらず、新たに作成されたプロパティ値はINTEGERの型(値4による)になることになります。プロパティ値が使用されるときには適切な変換が実行されるので、多くの場合、この相違は大きな問題ではありません。
GOTO
OLAP DMLプログラム内のGOTOコマンドは、プログラム内の文の実行順序を変更します。
構文
GOTO label
パラメータ
- label
-
「ラベルの構成のガイドライン」に従って構成された、プログラム中の他の位置にあるラベルの名前。プログラムの実行は、指定したラベルの直後の行に分岐します。
GOTOに指定するlabelの後にはコロンを付ける必要はありません。ただし、プログラムの他の位置にある実際のラベルの後にはコロンを付けます。
使用上の注意
ラベルの構成のガイドライン
特定の位置に分岐する制御構造を使用する場合、位置を明確に識別するためにその位置のラベルを指定する必要があります。ラベルを作成するには、次のガイドラインに従います。
-
ラベルの最初の文字は、英字、ピリオド(
.
)、アンダースコア(_
)のいずれかであることが必要です。 -
ラベルの残りの文字には、英字、数字、ピリオドまたはアンダースコアの任意の組合せを使用できます。
-
ラベルの直後にはコロン(
:
)を付ける必要があります。 -
ラベルの最初の8バイトは、一意である必要があります(使用するキャラクタ・セットによって、1バイトが1文字ではない場合もあります)。(使用するキャラクタ・セットによって、1バイトが1文字ではない場合もあります。)ラベルは最大3999バイト(テキスト行の最大長からラベルを識別するコロンの1バイトを差し引いた値)です。ただし、ラベル名の最初の8バイトのみが使用されるので、最初の8バイトが一意ではない場合、8バイトを超えるラベル名に関しては問題が発生することがあります。
不明なGOTOラベル
labelに対応する実際のラベルが同じプログラムの他の位置に存在しない場合、エラーとともに実行が停止します。
IFおよびWHILEとともに使用するGOTO
次の構文に基づいて、GOTO文をIF...THEN...ELSEまたはWHILEと組み合せて使用することにより、条件分岐を設定できます。
IF boolean-expression THEN GOTO label1 ELSE GOTO label2
ただし、プログラミング論理の明確性を保つために、GOTOの使用は最小限にしてください。GOTOはほとんどの場合、FOR、IF...THEN...ELSEまたはWHILEを使用した単独または複数の条件実行文で置き換えることができます。また、同じプログラム内で異なるケースを処理するSWITCHコマンドを使用することもできます。
FORとともに使用するGOTO
FORループでGOTO文を使用すると、ループ内での分岐やループ外への分岐が可能です。GOTO文およびラベルがどこにあるかによって、文の実行順序が変更されます。
-
同じループ内のラベルに分岐するFORループのGOTOは、現行のディメンション・ステータスに影響を与えずにそのラベルで実行を継続します。その後のループの繰返しは普通に継続されます。ループの終端、すなわちDOEND文の直前に分岐するには、CONTINUE文の使用をかわりに検討します。
-
ループの外側のラベルに分岐するFORループのGOTOは、FOR文の処理を終了します。指定されたラベルで実行が継続され、ディメンション・ステータスはループ前の状態にリストアされます。ループのDOENDの直後の文に分岐するには、BREAK文の使用をかわりに検討します。
FORループの外側のGOTO文を使用してループ内(すなわちループの内側のラベル)に分岐すると、ループの残りが1回実行された後にエラーが発生します。
TEMPSTAT文とGOTO文
プログラムのFORループ処理内部で、DO ... DOEND句がTEMPSTATの後に続く場合、DOEND、BREAK、GOTOのいずれかが検出されると、ステータスはリストアされます。
GOTO文の代替方法
GOTOはプログラム内での分岐を簡単に行えますが、多用するとプログラムの論理が不明瞭になってフローがわかりにくくなります。特に複数のラベルがあったり、多くのコードをスキップするGOTO文がある複雑なプログラムを使用する場合は、このような状況が発生しやすくなります。
プログラムの論理を明確に保つために、GOTOの使用は最小限にします。
GOTO文が最良のプログラミング方法であることもありますが、多くの場合はさらに適した代替方法があります。次に例を示します。
-
通常、FOR文の中のGOTO文は、そのかわりとなる文をIF...THEN...ELSEコマンドの中のDO文とDOEND文の間に配置することで代用できます。
-
各セットの文が長い場合、または各セットの文をプログラム内の複数の場所で使用する場合、そのセットをサブプログラムに配置することを検討します。この場合、異なる2つのプログラムからどちらかを選択するには、IF...THEN...ELSEコマンドを使用でき、多数の異なるプログラムからいずれかを選択するには、SWITCHコマンドを使用できます。
例9-137は、FORコマンドで値をループ処理する方法を示しています。例9-138は、FORループ内でのDO ... DOENDの使用方法を示しています。
例
例9-144 IFとともに使用するGOTO
次の例は、プログラムを実行するときにユーザーが指定する引数によって、3つの地域のうちの1つに関するレポートを生成するプログラムです。ユーザーがEAST
、WEST
またはCENTRAL
を指定すると、対応するラベルに実行が分岐し、ラベルに続く文(文グループ1、2または3)が実行されます。ユーザーがそれ以外の引数を指定した場合、実行はargerror
ラベルに分岐し、その後の文によってエラー処理が行われます。
DEFINE flexrpt PROGRAM PROGRAM IF NOT INLIST('East\nWest\nCentral', UPCASE(ARG(1))) THEN GOTO argerror SWITCH &UPCASE(ARG(1)) DO CASE 'EAST': ..." (statement group 1) BREAK CASE 'WEST': ... "(statement group 2) BREAK CASE 'CENTRAL': ..." (statement group 3) BREAK DOEND argerror: ..." statements to handle error) END
GROUPINGIDコマンド
GROUPINGIDコマンドは、事前に定義されたオブジェクトに階層ディメンションの値に対応するグルーピングIDを移入し、さらに$GID_DEPTHシステム・プロパティを作成して移入するコマンドです。
グルーピングIDは、階層ディメンションのレベルに対応する数値です。階層の最下位レベルのグルーピングIDは0
(ゼロ)です。特に、階層ディメンションの異なるレベルの値を識別する場合に、グルーピングIDは便利です。階層の同じレベルのディメンション値は、グルーピングIDの値が同じです。特定レベルのディメンション値を選択する場合、groupingid = nの単一条件で目的の値を識別できるため、グルーピングIDを使用すると簡単です。
通常、OLAP_TABLE
ファンクションを使用してSQLでアナリティック・ワークスペース・データにアクセスする場合に、GROUPINGID文を使用します。
関連項目:
詳細は「階層の使用をサポートするオブジェクト」の「gidrelリレーション」を参照してください。またグルーピングIDの詳細は、『Oracle Database SQL言語リファレンス』のGROUPING_IDファンクションに関する項を参照してください。
構文
GROUPINGID [parent-relation] INTO destination-object - {USING level-relation} [INHIERARCHY {inh-variable | inh-valueset}] [LEVELORDER lo-valueset] - [ROLLUP | GROUPSET]
ここで、destination-objectは、次のいずれかです。
- grouping-relation
- grouping-variable
- grouping-surrogate
パラメータ
- parent-relation
-
階層ディメンションのセルフ・リレーション。このセルフ・リレーションは、階層ディメンションによってディメンション化されます。セルフ・リレーションの値は、階層ディメンションの各値の親です。GROUPINGIDコマンドを使用してサロゲートを移入する際、GROUPINGIDコマンドにLEVELORDER句を指定する場合にかぎり、parent-relation引数はオプションです。
- grouping-relation
-
事前に定義されたリレーションの名前。grouping-relationのディメンションの1つは、階層ディメンションである必要があります。GROUPINGIDコマンドが実行されると、grouping-relationの値が計算されて移入されます。リレーションを宛先オブジェクトとして指定すると、Oracle OLAPでは、リレーションの移入時に、そのリレーションに対する$GID_DEPTHプロパティの作成および設定が自動的に行われます。
- grouping-variable
-
事前に定義された数値変数の名前。grouping-variableのディメンションの1つは、階層ディメンションである必要があります。grouping-variableのデータ型は、
NUMBER
などの数値型にできます。GROUPINGIDコマンドが実行されると、grouping-variableの値が計算されて移入されます。変数の定義については、DEFINE VARIABLEコマンドを参照してください。 - grouping-surrogate
-
階層ディメンションの事前定義済のサロゲートの名前。GROUPINGIDコマンドが実行されると、grouping-surrogateの値が計算され移入されます。サロゲートの定義については、DEFINE SURROGATEコマンドを参照してください。
- USING
-
グルーピングIDを作成する際に階層ディメンションのこの値のレベルを検討することを指定します。
- level-relation
-
階層ディメンションによってディメンション化されるリレーション。階層ディメンションの値ごとに、リレーションにはディメンションの値に対するレベルの名前の値があります。
- INHIERARCHY
-
グルーピングIDを作成する際に階層ディメンションの値の一部のみを検討することを指定します。
注意:
ROLLUPまたはGROUPSETを指定する場合は、INHIERARCHY句を指定することはできません。
- inh-variable
-
階層ディメンションによってディメンション化されるか、または複数階層の階層ディメンションの場合には階層の名前であるディメンションによってディメンション化されるBOOLEAN変数。ディメンション値が階層にある場合の変数の値は
TRUE
であり、ない場合はFALSE
です。 - inh-valueset
-
グルーピングIDを作成する際に検討される階層ディメンションの値を識別する値を持つ値セット・オブジェクトの名前。値セットに含まれない値は無視されます。
- LEVELORDER
-
グルーピングIDを作成する際のレベルのトップダウン順序を指定します。
- lo-valueset
-
グルーピングIDを作成する際に使用されるレベルの名前の値を持つ値セット・オブジェクトの名前。値セット・オブジェクトの値の順序によって、割り当てられるグルーピングIDが決定されます。
- ROLLUP
-
SQL
SELECT
文にROLLUPを指定した場合にSQLが行うのと同じ方法で、Oracle OLAPでグルーピングIDが作成されるように指定します。関連項目:
『Oracle Database SQL言語リファレンス』のROLLUP CUBE句に関する項
ROLLUPキーワードは、宛先オブジェクトがリレーションである場合にのみ有効です。このキーワードを指定すると、$GID_TYPEおよび$GID_LISTプロパティ。
- GROUPSET
-
SQL
SELECT
文にGROUPING SETを指定した場合にSQLが行うのと同じ方法で、Oracle OLAPでグルーピングIDが作成されるように指定します。関連項目:
詳細は、『Oracle Database SQL言語リファレンス』のGROUPING SETS句に関する項を参照してください
GROUPSETキーワードは、宛先オブジェクトがリレーションである場合にのみ有効です。このキーワードを指定すると、Oracle OLAPでは、グルーピングIDのリレーションに対して$GID_TYPEおよび$GID_LISTという2つのプロパティの作成と移入が行われます。
例
例9-145 リレーションにグルーピングIDを移入するGROUPINGIDコマンドの使用方法
アナリティック・ワークスペースに次のオブジェクトが含まれているとします。
DEFINE GEOG DIMENSION TEXT LD A dimension with two hierarchies for geography DEFINE geog_hierlist DIMENSION TEXT LD List of Hierarchies for geog dimension DEFINE GEOG_INHIER VALUESET GEOG <GEOG_HIERLIST> LD A valueset of geog that are just the values in each hierarchy DEFINE GEOG_PARENTREL RELATION GEOG <GEOG GEOG_HIERLIST> LD Self-relation for geog showing parents of each value DEFINE GEOG_INHIER VALUESET GEOG <GEOG_HIERLIST> LD A valueset of geog that are just the values in each hierarchy DEFINE GEOG_LEVELREL RELATION GEOG_LEVELLIST <GEOG GEOG_HIERLIST> LD Level of each dimension member for geog
これらのオブジェクトが、次のレポートに表示されている値を持っているとします。
REPORT geog_hierlist GEOG_HIERLIST -------------- Political_Geog Sales_Geog REPORT DOWN geog W 20 geog_parentrel -------------GEOG_PARENTREL-------------- --------------GEOG_HIERLIST-------------- GEOG Political_Geog Sales_Geog -------------- -------------------- -------------------- Boston MA MA Springfield MA MA Hartford CT CT Mansfield CT CT Montreal Quebec Quebec Walla Walla WA WA Portland WA WA Oakland CA CA San Diego CA CA MA USA East CT USA East WA USA West CA USA West Quebec Canada East East NA All Regions West NA All Regions All Regions NA NA USA All Countries NA Canada All Countries NA All Countries NA NA ->REPORT W 20 geog_inhier GEOG_HIERLIST GEOG_INHIER -------------- -------------------- Political_Geog Boston Springfield Hartford Mansfield Montreal Walla Walla Portland Oakland San Diego MA CT WA CA Quebec USA Canada All Countries Sales_Geog Boston Springfield Hartford Mansfield Montreal Walla Walla Portland Oakland San Diego MA CT WA CA Quebec East West All Regions ->REPORT DOWN geog W 20 geog_levelrel --------------GEOG_LEVELREL-------------- --------------GEOG_HIERLIST-------------- GEOG Political_Geog Sales_Geog -------------- -------------------- -------------------- Boston City City Springfield City City Hartford City City Mansfield City City Montreal City City Walla Walla City City Portland City City Oakland City City San Diego City City MA State-Prov State-Prov CT State-Prov State-Prov WA State-Prov State-Prov CA State-Prov State-Prov Quebec State-Prov State-Prov East NA Region West NA Region All Regions NA All Regions USA Country NA Canada Country NA All Countries All Countries NA
geogの値に対するグルーピングIDを作成するには、まずGIDディメンションを次のように定義し、グルーピングIDに使用するのに十分な個数の値をそのディメンションに移入します。
DEFINE GID_DIMENSION DIMENSION NUMBER (16,0)
次に、グルーピングIDを保持するリレーションを定義します。
DEFINE GEOG_GIDREL RELATION GID_DIMENSION <GEOG GEOG_HIERLIST>
ここで、GROUPINGIDコマンドを実行し、geog_gidrel relationを移入します。
GROUPINGID geog_parentrel INTO geog_gidrel USING geog_levelrel - INHIERARCHY geog_inhier
geog_gidrelのレポートに、リレーションが移入されていることが表示されます。
REPORT down geog w 20 geog_gidrel ---------------GEOG_GIDREL--------------- --------------GEOG_HIERLIST-------------- GEOG Political_Geog Sales_Geog -------------- -------------------- -------------------- Boston 0 0 Springfield 0 0 Hartford 0 0 Mansfield 0 0 Montreal 0 0 Walla Walla 0 0 Portland 0 0 Oakland 0 0 San Diego 0 0 MA 1 1 CT 1 1 WA 1 1 CA 1 1 Quebec 1 1 East NA 3 West NA 3 All Regions NA 7 USA 3 NA Canada 3 NA All Countries 7 NA
geog_gidrelのFULLDSCを実行すると、$GID_DEPTHプロパティが作成され、geog_gidrel
に移入されたことが確認できます。
DEFINE GEOG_GIDREL RELATION GID_DIMENSION <GEOG GEOG_HIERLIST> PROPERTY '$GID_DEPTH' 4
例9-146 変数にグルーピングIDを移入するGROUPINGIDの使用方法
アナリティック・ワークスペースに次のオブジェクトがあるとします。
DEFINE geography DIMENSION TEXT WIDTH 12 LD Geography Dimension Values DEFINE geography.parent RELATION geography <geography> LD Child-parent relation for geography DEFINE geography.hierarchyid DIMENSION INTEGER LD Dimension whose values are ids for hierarchies in geography
地理のStandard
階層にグルーピングID変数を作成するには、グルーピングIDを生成する階層にある値のみの親子関係を定義し、グルーピングIDを保持する変数を定義します。これらの定義の例は、次のとおりです。
DEFINE geog.gid INTEGER VARIABLE <geography> DEFINE geography.newparent RELATION geography <geography>
この後、次のような文を使用して変数を移入します。
" Populate the child-parent relation for hierarchy 1 geography.newparent = geography.parent(geography.hierarchyid 1) " Populate the grouping id variables GROUPINGID geography.newparent INTO geog.gid
このコードによって作成される新規オブジェクトに関するレポート(geography.newparent
およびgeog.gid
)は、次のとおりです。
REPORT geography.newparent GEOGRAPHY GEOGRAPHY.NEWPARENT ---------------- ---------------- World NA Americas World Canada Americas Toronto Canada Montreal Canada Ottawa Canada Vancouver Canada Edmonton Canada Calgary Canada Usa Americas Boston Usa Losangeles Usa Dallas Usa Denver Usa Newyork Usa Chicago Usa Seattle Usa Mexico Americas ... ... Japan Asia Tokyo Japan Osaka Japan Kyoto Japan China Asia Beijing China Shanghai China ... ... India Asia Ireland Europe Taiwan Asia Thailand Asia REPORT geog.gid GEOGRAPHY GEOG.GID ---------------- ---------------- World 7 Americas 3 Canada 1 Toronto 0 Montreal 0 Ottawa 0 Vancouver 0 Edmonton 0 Calgary 0 Usa 1 Boston 0 Losangeles 0 Dallas 0 Denver 0 Newyork 0 Chicago 0 Seattle 0 Mexico 1 ... ... Japan 1 Tokyo 0 Osaka 0 Kyoto 0 China 1 Beijing 0 Shanghai 0 ... ... India 1 Ireland 1 Taiwan 1 Thailand 1