プライマリ・コンテンツに移動
Oracle® OLAP DML Reference
12c Release 1 (12.1)
B71310-04
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

9 OLAP DMLコマンド: AからG

この章では、次の項目について説明します。

この他のOLAP DMLコマンドについては、第10章「OLAP DMLコマンド: HからZ」でアルファベット順に説明しています。

その他のOLAP DMLリファレンス項目については、第4章「OLAP DMLプロパティ」第5章「OLAP DMLオプション」第7章「OLAP DMLファンクション: AからK」および第8章「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のキューブとキューブ・ディメンションの変更コマンド


ADD_CUBE_MODEL
ADD_DIMENSION_MEMBER
ADD_MODEL_DIMENSION
CREATE_LOGICAL_MODEL
REMOVE_CUBE_MODEL
REMOVE_DIMENSION_MEMBER
REMOVE_MODEL_DIMENSION
SET_INCLUDED_MODEL
SET_PROPERTY
UPDATE_ATTRIBUTE_VALUE
UPDATE_DIMENSION_MEMBER

OBJORGファンクションも参照してください。

集計コマンド


AGGMAP
AGGMAP ADDまたはREMOVEモデル
AGGMAP SET
AGGREGATEコマンド
DEFINE AGGMAP
HIERDEPTH
HIERHEIGHTコマンド

割当てコマンド


ALLOCATE
ALLOCMAP
DEFINE AGGMAP

代入コマンド


CLEAR
MAINTAIN
SET
SET1
TRIGGERコマンド
TRIGGERASSIGN

デバッグ・コマンド


DBGOUTFILE
LOGコマンド
MONITOR
SIGNAL
TRACKPRG
TRAP

アナリティック・ワークスペース・オブジェクトの定義コマンド


CHGDFN
CONSIDER
COPYDFN
DEFINE
DELETE
DESCRIBE
FULLDSC
GROUPINGIDコマンド
HIDE
HIERHEIGHTコマンド
LD
LISTBY
LISTNAMES
LOAD
PROPERTY
RELATIONコマンド
RENAME
TRIGGERコマンド
UNHIDE

ディメンション・ステータス・コマンド


ACROSS
ALLSTAT
LIMITコマンド
LIMIT BASEDIMS
STATUS
TEMPSTAT

予測および回帰コマンド


FCCLOSE
FCEXEC
FCSET
FORECAST
FORECAST.REPORT
REGRESS
REGRESS.REPORT

日付の書式設定コマンド


DATE_FORMAT
VNF

計算式コマンド


DEFINE FORMULA
EQ
TRACE

アナリティック・ワークスペースの管理コマンド


AWコマンド
COMMIT
EXPORT(EIF)
IMPORT(EIF)
PERMIT
PERMITRESET
RENAME
UPDATE

アナリティック・ワークスペースのマルチライタ・モードの管理コマンド


ACQUIRE
RELEASE
RESYNC
REVERT

ファイルの管理コマンド


CDA
FILECLOSE
FILECOPY
FILEDELETE
FILEMOVE
FILEPAGE
FILEPUT
FILEREAD
FILESET
FILEVIEW
IMPORT(テキスト)
INFILE
LISTFILES
OUTFILE

データ・モデル・コマンド


AGGMAP ADDまたはREMOVEモデル
DEFINE MODEL
DIMENSION(モデル内)
INCLUDE
MODEL
MODEL.COMPRPT
MODEL.DEPRT
MODEL.XEQRPT
SET
TRACE

プログラミング・コマンド


ALLCOMPILE
ARGUMENT
BREAK
BREAK
CALL
CONTINUE
CONTINUE
DEFINE PROGRAM
DO ... DOEND
FOR
GOTO
HIDE
IF...THEN...ELSEコマンド
PARSE
PROGRAM
RETURN
SLEEP
SWITCHコマンド
TRACE
TRIGGERコマンド
TRIGGERASSIGN
UNHIDE
VARIABLE
WHILE

レポート・コマンド


BLANK
HEADING
PAGE
REPORT
ROWコマンド
SHOW
STDHDR
ZEROTOTAL

値の保存およびリストア・コマンド


CONTEXTコマンド
POP
POPLEVEL
PUSH
PUSHLEVEL

ソート・コマンド


MOVE
SORTコマンド

スプレッドシート・コマンド


DEFINE WORKSHEET
EXPORT(スプレッドシート)
IMPORT(スプレッドシート)

SQLの実行コマンド


FETCH
SQL

OLAP DML文の編集コマンド


EDIT
RECAP
REDO
REEDIT

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を変更する必要があり、budgetinvestmentとの一貫性を保持する必要がある場合に、別のユーザー(ユーザーI)がinvestmentを変更する必要があるとします。この使用例では、どのユーザーもbudgetinvestmentの両方を変更する必要はありませんが、すべてのユーザーは自分が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_namelogical_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_compileFALSEを指定した場合、アナリティック・ワークスペース・オブジェクトの値が有効になる前に、キューブ・ディメンションを明示的にコンパイルする必要があります。コンパイルの実行には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_compileFALSEが指定されていると、コール・エラーがスローされます。

例9-5 OLAPキューブ・ディメンションへのメンバーの追加

この例では、my_timeという名前のOLAPキューブ・ディメンションにメンバーを追加します。

  1. 次の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.
    
  2. 次の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
    
  3. 次のPL/SQL文を発行し、my_timeキューブ・ディメンションをコンパイルします。

     exec dbms_cube.build('MY_TIME USING (COMPILE)');
    
  4. コンパイル後に、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.
    
  5. 次のPL/SQL文を実行し、新しい階層でmy_cubeを解決します。

    exec dbms_cube.build(script => 'MY_CUBE USING (SOLVE)', add_dimensions => false);
    
  6. 次の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文を含む入力ファイルの使用方法を示します。

  1. 各ディメンションの階層の名前を識別します。セルフ・リレーションとして階層を定義した場合、セルフ・リレーションの名前を使用します。

  2. 集計するデータを決定します。

    timeおよびproductディメンションのすべてのレベルのデータを計算し、geographyのデータは計算しないとします。geographyディメンションの最下位レベルのデータは、都市レベルにあります。階層の2番目のレベルには、EastCentralおよびWestの各地域を表す3つのディメンション値があります。階層の3番目のレベルには、Totalという1つのディメンション値があります。

    Eastのデータを事前計算し、アナリティック・ワークスペースに格納するとします。CentralWestおよびTotalのデータは、ユーザーがそのデータを要求した時点でのみ計算され、そのデータはアナリティック・ワークスペースに格納されません。そのため、aggmapオブジェクトに追加する仕様にこの情報を指定する必要があります。

  3. 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文が集計仕様に追加されます。

  4. units.txtファイルをアナリティック・ワークスペースに読み取るには、次の文を実行します。

    INFILE 'inf/units.txt'
    
  5. この時点で、units.agg aggmapがアナリティック・ワークスペースに存在している必要があります。次の文を使用して、units変数を集計できます。

    AGGREGATE units USING units.agg
    

    これで、すべての時間および製品についてのEastのデータが計算され、アナリティック・ワークスペースに格納されます。

  6. ユーザーがCentralWestまたはTotalのデータを要求した際に、そのデータが計算されて表示されるようにアナリティック・ワークスペースを設定します。次の文に示すとおり、通常、AGGREGATEファンクションとともに使用する前に、aggmapオブジェクトをコンパイルすることをお薦めします。

    COMPILE units.agg
    

    AGGREGATEコマンドを使用するのみの場合は、この文によりaggmapオブジェクトが使用前にコンパイルされるため必要ありません。ただし、AGGREGATEコマンドとともにFUNCDATAキーワードを使用しない場合、即時計算の実行に必要なメタデータがコンパイルされていません。他の必要な計算(モデルの計算など)がすべて実行済の場合は、データのロード時にaggmapをコンパイルするのが最適な方法になります。実行していない場合は、ユーザーはアナリティック・ワークスペースを開くたびに、集計が自動的にコンパイルされるのを待機する必要があります。つまり、なんらかのデータが即時計算される場合、アナリティック・ワークスペースをユーザーから使用可能にする前にaggmapをコンパイルすることにより、すべてのユーザーの問合せパフォーマンスを向上させることができます。

  7. units変数にプロパティを追加します。

    CONSIDER units
    PROPERTY '$NATRIGGER' 'AGGREGATE(units USING units.agg)'
    

    このプロパティは、データ・セルにNA値が含まれる場合、Oracle OLAPがAGGREGATEファンクションをコールして、そのセルのデータを集計することを示しています。このため、ユーザーにより要求されるすべてのunitsデータが表示されます。ただし、geographyディメンションのEastディメンション値のデータのみが実際に集計され、アナリティック・ワークスペースに格納されます。他のすべてのデータ(CentralWestおよびTotalのデータ)は、ユーザーにより要求された時点でのみ計算されます。

例9-7 非加算集計の実行

この例では、加算集計および非加算集計を組み合せる演算子および引数の使用方法を説明します。

salesdebtinterest_rateおよびinventoryの4つの変数を定義したとします。これらの変数は、同じディメンション性で定義されており、ここで、cpproductおよびgeographyディメンションで定義されたコンポジットです。

<time cp<product geography>>

1つのAGGREGATEコマンドを使用して、4つの変数すべてを集計するとします。debt変数には加算集計が必要です。sales変数には加重合計集計が必要で、interest_rateには階層加重平均が必要です。そのため、salesおよびinterest_rateの両方に定義が必要な加重オブジェクトが必要で、加重値を移入する必要があります。inventoryには、階層内の最後の値である合計インベントリの結果が必要です。

debtおよびinventoryの集計演算は、OPERATORキーワードを使用して指定します。しかし、salesおよびinterest_rateには加重オブジェクトが必要な集計演算があるため、ARGSキーワードを使用してそれらの演算を指定する必要があります。演算子変数を定義して、OPERATORキーワードを使用します。通常、演算子変数は、メジャー・ディメンションまたは明細項目ディメンションによってディメンション化されます。

実行する集計を定義する手順は、次のとおりです。

  1. メジャー・ディメンションを使用して、ARGSキーワードとともに使用する引数変数の定義も行うため、次の文に示されているようにmeasureディメンションを定義します。

    DEFINE measure DIMENSION TEXT
    MAINTAIN measure 'sales', 'debt', 'interest_rate', 'inventory'
    

    注意:

    RELATION文でmeasureディメンションを使用する場合は、同じ集計仕様に必ずMEASUREDIM文を含める必要があります。

  2. 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'
    
  3. salesおよびinterest_rateには加重オブジェクトが必要なため、それらの加重オブジェクトを定義および移入します。次の文では、currencyという名前の(salesが使用する)加重オブジェクトが定義されます。

    DEFINE currency DECIMAL <time geography>
    

    currency変数は、timeおよびgeographyのみによってディメンション化されることに注意してください。この変数の目的は、外国通貨の換算情報としての役割を果す加重の提供であるため、productディメンションを含める必要はありません。

  4. 使用する加重値を持つcurrencyを移入します。

  5. interest_rate変数の非加算集計(階層加重平均)には、変数debtの合計が必要です。つまり、interest_ratedebtの集計結果がない場合は集計できません。

    この時点で、引数変数を定義でき、この引数変数には、interest_rateの加重オブジェクトとしてdebtの集計結果を指定する必要があります。同じ引数変数を使用して、sales変数の加重オブジェクトとしてcurrencyを指定します。次の文では、argvarという名前の引数変数が定義されます。

    DEFINE argvar TEXT <measure>
    
  6. 次の文により、引数変数が移入されます。

    argvar (measure 'sales') = 'weightby currency'
    argvar (measure 'debt') = NA
    argvar (measure 'interest_rate') = 'weightby debt'
    argvar (measure 'inventory') = NA
    
  7. productおよびgeographyの集計では、salesdebtおよび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'
    
  8. ここで、次の文を発行して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
    
  9. 最後に、次の文を使用して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文が含まれるようになりました。この例では、Year99timeディメンション値を持つデータを除き、timeディメンションの階層time.rのデータをすべて集計することを指定しています。さらに、Allproductディメンション値を持つデータ以外の、productディメンションの階層product.rの全データを集計しています。geographyディメンション値はすべて集計されます。CACHE STORE文は、その場でロールアップされるすべてのデータを1度のみ計算し、その値を同じセッション中に他のアクセス要求のキャッシュに格納することを指定します。

これで、次のようにAGGREGATEコマンドを実行してsales.agg aggmapを使用できるようになります。

AGGREGATE sales USING sales.agg

この例では、timeディメンションのYear99値、またはproductディメンションのAll値によってディメンション化されるすべてのデータ値が、即時計算されます。他のデータはすべて集計され、アナリティック・ワークスペースに格納されます。

例9-10 複数のaggmapの使用

予測を使用する場合、その予測で必要となるすべての入力データが事前計算されていることを確認する必要があります。事前計算されていないと、予測は不適切なデータまたは存在しないデータを使用します。たとえば、予測ですべての明細項目を集計する必要があるとします。timelinedivisionによってディメンション化されるbudget変数を使用する場合、1つの方法としてlineディメンションの完全な集計を実行してDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションを予測し、残りのディメンションdivisionを集計するという方法があります。

この処理は、次の3つのaggmapオブジェクトを定義することにより可能になります。

  1. forecast.agg1という名前の最初のaggmapを定義しますが、これは、予測で必要とされるデータを集計します。これには、次の文が含まれます。

    RELATION line.parentrel
    
  2. forecast.agg2という名前の2番目のaggmapを定義しますが、これは、最初のaggmapおよび予測を使用して生成されるデータを集計します。これには、次の文が含まれます。

    RELATION division.parentrel PRECOMPUTE ('L3')
    
  3. 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は、Year99timeディメンション値またはAllproductディメンション値を持つデータを除き、それ以外のすべてのsalesデータをロールアップして、データベースにコミットします(処理されなかったセルのデータは、ユーザーが最初にそれらにアクセスしたときに計算されます)。AGGINDEX値がNOの場合は、Oracle OLAPに、即時計算するデータの索引を作成しないことを認識させることができます。

ここで、次の文を実行します。

sales2 = AGGREGATE(sales1 USING sales.agg) ACROSS SPARSE -
   <product, channel, customer>

これで、sales2にはsales1にあるすべてのデータと、Year99の集計されたすべてのデータが格納されるようになります。これは、timeがコンポジットに含まれていないためです。

一方、Allproduct値の集計データは計算されず、sales2には格納されません。このデータが計算も格納もされないのは、productディメンションがコンポジットに含まれているためであり、コンポジットに含まれるディメンションに必要な索引は、集計仕様にAGGINDEX NO文が含まれているため作成されませんでした。索引が存在しなかったため、Oracle OLAPはAGGREGATEファンクションをコールして即時計算すべきデータを計算しませんでした。

例9-12 ディメンション属性による集計

販売を行っているある会社で、顧客の名前、性別、年齢および販売量の記録を保持するとします。このデータを保持するため、アナリティック・ワークスペースにcustomerという名前のディメンションと、customerによってディメンション化される3つの変数(customer_sexcustomer_agesalesという名前)を含めます。

 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変数のデータをこの変数に移入します。

必要なオブジェクトを作成および移入する手順は、次のとおりです。

  1. 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
    
  2. 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
    
  3. 集計データを保持するsales_by_sex_ageという名前の変数を作成します。sales変数と同様に、この変数の型はDECIMALですが、customerではなくsexおよびageによってディメンション化されます。

    DEFINE sales_by_sex_age VARIABLE DECIMAL <sex age>
    
  4. 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)の名前が含まれます。

  5. 集計の詳細データを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

次の手順は、集計プロセスの概要を示しています。

  1. 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
    
  2. 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
    
  3. 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オブジェクトを使用してこの計算を実行する手順は、次のとおりです。

  1. データを集計する地区の値を表すnot_northという名前の値セットを作成します。

    DEFINE not_north VALUESET district
    LIMIT not_north TO ALL
    LIMIT not_north REMOVE 'North'
    
  2. 計算結果を保持するtotal_sales_exclud_northという名前の変数を定義します。

    DEFINE total_sales_exclud_north VARIABLE DECIMAL <time>
    

    salesのように、total_sales_exclud_north変数はtimeによってディメンション化されることに注意してください。ただし、salesとは異なり、この変数は各地区の詳細データを保持しますが、SouthWestおよびEast地区(つまりNorthを除くすべての地区)の(集計された)総計値のみであるため、total_sales_exclud_north変数はdistrictによってはディメンション化されません。

  3. 実行する計算を指定する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値セットも使用します。

  4. データを集計します。

    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コマンドを使用して、salesunitspriceおよび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変数は、geographyproductchannelおよびtimeによってディメンション化されます。

まず、各ディメンションの階層を検討します。各階層にいくつレベルがあるか。ユーザーが通常問合せを行うデータのレベルはどれか。新規ワークスペースを設計するのはいつか、ユーザーが問い合せを予定するデータのレベルはどれか。

ユーザーがtime階層のsalesデータを問い合せるかどうかについて、次の表にある情報を把握できたとします。

時間レベル名 記述レベル名 ディメンション値の例 ユーザーは通常このレベルの問合せを行うか
L1 Year99Year00 はい
L2 四半期 Q3.99Q3.99Q1.00 はい
L3 Jan99Dec00 はい

一方、次の表はユーザーがgeography階層のsalesデータをどのような方法で問い合せるかを示しています。

地理的レベル名 記述レベル名 ディメンション値の例 ユーザーは通常このレベルの問合せを行うか
L1 世界 World はい
L2 大陸 Europe、Americas いいえ
L3 Hungary、Spain はい
L4 市区町村 Budapest、Madrid はい

最後に、次の表はユーザーがproductディメンション階層のsalesデータをどのような方法で問い合せるかを示しています。

製品レベル名 記述レベル名 ディメンション値の例 ユーザーは通常このレベルの問合せを行うか
L1 全製品 Totalprod はい
L2 除算 Audiodiv、Videodiv はい
L3 カテゴリ TV、VCR はい
L4 製品 Tuner、CDplayer はい

ユーザーがデータを問い合せる方法に関するこれらの情報を活用して、次のような集計の方針を採用します。

  • すべてのレベルに対して問合せが頻繁に行われるため、timeおよびproductを完全に集計します。

  • geographyディメンションについては、頻繁に問合せが行われるL1(World)およびL3(Country)のデータを集計します。しかし、L2に対する問合せは少ないため、即時計算します。

最下位レベルのデータは、アナリティック・ワークスペースにロードされます。集計データは、このソース・データから計算されます。

このため、集計仕様は次のようになる可能性があります。

RELATION time.parentrel
RELATION geography.parentrel PRECOMPUTE (geog.leveldim 'L3' 'L1')
RELATION product.parentrel

例9-24 PRECOMPUTE句を含むRELATION文を使用した集計仕様

この集計仕様は、RELATION文にPRECOMPUTE句を使用して、AGGREGATEコマンドにより集計されるデータを制限します。

DEFINE gpct.aggmap AGGMAP
LD Aggmap for sales, units, quota, costs
AGGMAP
RELATION geography.parentrel PRECOMPUTE (geography.levelrel 'L3')
RELATION product.parentrel PRECOMPUTE (LIMIT(product complement 'TotalProd'))
RELATION channel.parentrel
RELATION time.parentrel PRECOMPUTE (time NE '2001')
END

AGGINDEX

圧縮されていないキューブで使用される集計仕様で、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ファンクションが実行され、データが即時計算されます。

AGGINDEXの値がNOの場合、マテリアライズされたコンポジット・タプルおよびコンポジットに含まれないディメンションのすべての値のデータを集計するためにのみ、NAトリガーがコールされます。PRECOMPUTEDではないコンポジット・ディメンション・メンバーのデータは、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に追加する場合、timeproductおよび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ディメンションの最下位レベルのデータは、月レベルです。そのため、最下位レベルのデータに関連付けされたディメンション値は、Jan99Feb99などです。月のデータが、四半期および年に集計されます。年の最初の6か月のデータがあるとします。AGGINDEXの値がYESの場合、Q1Q2およびYr99ディメンション値の索引が作成されますが、Q3およびQ4には作成されません。

AGGINDEX文の使用例は、例9-11「集計仕様におけるAGGINDEX文の使用方法」を参照してください。

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

実行する集計の種類を説明するキーワード。キーワードは、表9-1「集計方法」にリストされています。

ARGS

集計のオプション処理を示します。

DIVIDEBYZERO

0(ゼロ)で割り算できるかどうかを指定します。

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ファンクションを使用して即時集計された変数データを格納またはキャッシュするかどうかを決定する唯一の因子です。「集計データを格納またはキャッシュするかどうかの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ファンクションを使用して計算されたデータがユーザーの変更内容を反映しない点にあります。

集計仕様でCACHE文を使用する例は、例9-13「集計仕様におけるCACHE文の使用方法」および例9-14「詳細レベルを除くすべての階層レベルの移入」を参照してください。

DIMENSION(集計用)

集計仕様で、DIMENSION文はステータスをディメンションの単一の値に設定します。集計仕様がDIMENSION文によりそのような単一の値を指定しない場合、Oracle OLAPは集計の実行時にディメンションの現行のステータスの値を使用します。

DIMENSION文を使用して、ディメンションのステータスが、集計で使用する値に確実に設定されるようにします。ソース・オブジェクト、基礎オブジェクトおよびターゲット・オブジェクトによって共有されない各ディメンションには、個別のDIMENSION文を使用する必要があります。

構文

DIMENSION dimension 'dimval'

パラメータ

dimension

制限するディメンションの名前。

dimval

集計中にディメンション・ステータスを設定するディメンションの単一の値を表すTEXT式。

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

実行する集計の種類を説明するキーワード。キーワードは、表9-1「集計方法」にリストされています。

ARGS

集計のオプション処理を示します。

DIVIDEBYZERO

0(ゼロ)で割り算できるかどうかを指定します。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(集計用)文を参照してください。

数値

すべての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

パラメータ

name

メジャー・ディメンションの名前。メジャー・ディメンションは、ユーザーが定義するディメンションです。ディメンション値は、既存の変数の名前です。


注意:

メジャー・ディメンションは、aggmapオブジェクトの定義に含まれている場合は指定できません。

使用上の注意

メジャー・ディメンションの定義

次の文では、MEASUREという名前のディメンションが定義されます。

DEFINE measure DIMENSION TEXT

メジャー・ディメンションの移入

一度メジャー・ディメンションを定義したら、MAINTAIN文を使用してディメンション値をMEASUREディメンションに追加できます。

次の文では、salesunitspriceおよび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「集計仕様におけるMEASUREDIM文の使用方法」を参照してください。

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  

実行する計算の種類を説明するキーワード。キーワードは表9-1「集計方法」にリストされており、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ディメンションに別の演算を指定する場合、opvargeographyによってディメンション化できません。

演算子変数のページング量を最小化するには、固定幅8TEXT型として演算変数を定義します。

PARENTALIAS

集計されるディメンションの別名ディメンションを、現在集計されている親値にQDRとして設定するように指定します。

dimension-alias-name

rel-nameディメンションの別名ディメンションの名前。

ARGS

集計のオプション処理を示します。

DIVIDEBYZERO

0(ゼロ)で割り算できるかどうかを指定します。

  • 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階層にJanFebおよびMarのデータを格納する一方で、Fiscal階層ではMayJunおよびJulのデータを格納している場合など)。

  • AGGREGATEファンクションによって即時計算する値や、AGGREGATEコマンドによって事前計算する値の指定。使用する値セットにより、ディメンション値の名前が指定されます。この方法で値セットを使用するには、次の構文を使用します。

    RELATION rel-name PRECOMPUTE (valueset)
    

    この場合、PRECOMPUTEキーワードの後ろの値セットを使用します。

    値セットを使用して階層ディメンションを制限する場合で、複数のaggmapを使用し、階層に一貫性がない場合は、AGGREGATEファンクションでFORCECALCキーワードを使用するか、集計対象の変数に$AGGREGATE_FORCECALCプロパティを設定しておく必要があります。

PRECOMPUTEまたはOPERATOR句を変更する場合

PRECOMPUTEまたはOPERATOR句を変更する場合は、変数データを再集計し、aggmapを再コンパイルして正確なデータを生成する必要があります。

異なる階層レベルにロードされたデータの集計

異なるレベルの階層にあるディメンション値にデータをロードする場合、集計仕様のRELATION文のPRECOMPUTE句にステータスを設定する方法に注意する必要があります。

timeディメンションに3つのレベルを持つ階層があり、月は四半期に集計され、四半期は年に集計されるとします。一部のデータが月ディメンション値にロードされ、他のデータが四半期ディメンション値にロードされます。たとえば、Q1JanuaryFebruaryおよびMarchの親です。Marchのデータは、Marchディメンション値にロードされます。しかし、JanuaryおよびFebruaryのデータの合計は、Q1ディメンション値に直接ロードされます。実際、JanuaryおよびFebruaryディメンション値には、データのかわりにNA値が含まれます。ここで目標とするのは、MarchのデータをQ1のデータに追加することです。

JanuaryFebruaryおよびMarchQ1に集計しようとする場合、Marchのデータは単純にQ1のデータを置き換えます。これが起こると、Q1にはJanuaryFebruaryおよび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にはJanuaryFebruaryおよびMarchが含まれますが、MarchではなくFebruaryQ1の最後の月にするとします。そのためには、次の文を使用します。

MAINTAIN time MOVE 'Feb01' AFTER 'Mar01'

これで、LAST演算子はFEB01Q1の最後の月とみなすようになりました。

読取り権限と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.7salesw加重オブジェクトの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文によって集計されるのは、ステータスにあるソース・データ値のみです。親値は、ステータスにあるかどうかに関係なく計算されます。たとえば、Jan01Feb01および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}

パラメータ

ADD

モデルを、aggmapオブジェクトに一時的に追加します。モデルは、セッションの期間中のみaggmapにアタッチされます。アナリティック・ワークスペースが更新およびコミットされた場合でも、セッションが閉じるとモデルはaggmapから廃棄されます。

REMOVE

モデルを、aggmapから削除します。

model

指定されたaggmapに追加するモデル・オブジェクトの名前。

aggmap

以前に定義された、AGGMAP型のaggmapオブジェクトの名前。

例9-25 aggmapへのモデルの一時的な追加

例として、次の定義を持つletter.aggmapという名前のaggmapオブジェクトがあるとします。

DEFINE LETTER.AGGMAP AGGMAP
AGGMAP
RELATION letter.letter PRECOMPUTE ('AA')
END

さらに、ディメンション値AABおよびABAによりディメンション化されるセルの、サマリー変数データを作成するとします。ただし、このデータをアナリティック・ワークスペースに永続的に格納することはしません。セッション中に、データを参照するだけです。

この種類の集計を実行する手順は、次のとおりです。

  1. カスタム集計のディメンション値を作成します。このディメンション値は、ディメンション値AABおよびABAの親になります。次の文では、letterディメンションに'BB'を追加します。

    MAINTAIN letter ADD 'BB'
    
  2. AGGREGATIONファンクションを含むMODELオブジェクトを作成し、このオブジェクトによって子ディメンション値が新しいディメンション値に関連付けられます。次のモデルは、AABおよびABAの親としてBBを識別します。親ディメンション値(この場合はBB)を、親リレーション(letter.letter)の親としてあらかじめ定義することはできません。

    DEFINE LETTER.MODEL MODEL
    MODEL
    DIMENSION letter
    BB=AGGREGATION('AAB' 'ABA')
    
  3. 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
    
  4. モデルは、次の式のようにAGGREGATEファンクションによってのみ実行され、AGGREGATEコマンドからは無視されます。

    REPORT AGGREGATE(units USING letter.aggmap)
    
  5. セッション中にaggmapからモデルを削除する場合、AGGMAP REMOVE文を使用します。

  6. 使用しているaggmapが、アナリティック・ワークスペースで永続オブジェクトにならないようにするには、セッションを閉じる前に次の文を発行して、手順1で追加したディメンション値を削除してください。

    MAINTAIN letter DELETE 'BB'
    

    セッションが終了すると、Oracle OLAPはAGGMAP ADD文を使用して追加されたモデルを自動的に削除します。AGGMAP REMOVE文を明示的に発行する必要はありません。

AGGMAP SET

変数のデフォルトaggmapを指定します。


注意:

$AGGMAPプロパティを使用して変数のデフォルト集計仕様を指定したり、$ALLOCMAPプロパティを使用して変数のデフォルト割当て仕様を指定したりすることも可能です。

構文

AGGMAP SET aggmap AS DEFAULT FOR variables

パラメータ

aggmap

以前に定義されたaggmapオブジェクトの名前。

variables

指定されたaggmapがデフォルトaggmapとなっている、1つ以上の変数の名前であるテキスト式。リテラル値を指定する場合は、変数の名前をカンマで区切ります

例9-26 AGGMAP SETを使用したデフォルトaggmapの指定

例4-3「$AGGREGATE_FROMプロパティの使用」では、例9-13「集計仕様におけるCACHE文の使用」に示されているAGGREGATEコマンドを次の文に簡略化する方法を説明します。

AGGREGATE sales_by_revenue USING revenue_aggmap

revenue_aggmapsales_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ファンクションの項にある注意を参照してください。

たとえば、表9-2「geography階層」に示すように、areaディメンションおよび1つのgeographyディメンションに対して1つの階層をサポートするarea.area親子関係を使用するとします。

表9-2 geography階層

レベル areaディメンション area.area親リレーション

1

TotalUS

NA

2

East

TotalUS

2

South

TotalUS

3

Boston

East

3

New York

East

3

Atlanta

South


ここで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レベルのブランチ(たとえば、BostonMassachusettsおよびtotalUS)がある4レベルの階層(たとえば、neighborhoodscitiesstatesおよびtotalUS)が使用可能です。

アクセス権に関する制限

セルごとにアクセス権がある変数ではAGGREGATEが機能しないので、即座にエラーが返されます。また、PERMITERRORオプションも無視されます。ただし、AGGREGATEは、オブジェクト・レベルまたディメンション・レベルのアクセス権がある変数では機能します。PERMITコマンドおよびPERMITERRORオプションを参照してください。

集計の詳細データの取得元を指定する方法

データを集計する場合、詳細データの取得元を次の方法で指定できます。

  • $AGGREGATE_FROMプロパティまたは$AGGREGATE_FROMVARプロパティを変数に割り当てる。


    注意:

    変数には、これらのプロパティの一方のみ割当て可能です。$AGGREGATE_FROMプロパティと$AGGREGATE_FROMVARプロパティの両方を1つの変数に割り当てることはできません。

  • データを集計するAGGREGATEコマンドまたはAGGREGATEファンクションにFROM句またはFROMVAR句を含める。

集計を実行すると、Oracle OLAPによって次のように詳細データの取得元が決定されます。

  1. FROM句またはFROMVAR句で場所が指定されている場合、Oracle OLAPはその場所にある詳細データを使用します。

  2. FROM句またはFROMVAR句で場所が指定されていない場合、Oracle OLAPは$AGGREGATE_FROMプロパティまたは$AGGREGATE_FROMVARプロパティを使用して場所が指定されているかどうかを確認します。これらのプロパティの1つで場所が指定されている場合、Oracle OLAPはその場所にある詳細データを使用します。

  3. FROM句またはFROMVAR句、あるいは$AGGREGATE_FROMプロパティまたは$AGGREGATE_FROMVARプロパティで場所が指定されていない場合、Oracle OLAPはその変数自体の詳細データを使用して集計を実行します。

この項では、一部のAGGREGATEコマンドの使用例を示します。その他の集計の例は、AGGMAPコマンドの例を参照してください。

例9-27 バッチ・ジョブでのデータの事前計算

通常、データベースのデータをメンテナンスする方法の一部として、事前計算された集計をバッチ・ウィンドウで生成します。たとえば、『Oracle OLAPユーザーズ・ガイド』の説明に従い、ジョブ・マネージャを使用して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.rproductディメンションの名前は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オブジェクトを定義します。「1つの変数の集計」で説明したように、act.aggという名前の同じaggmapオブジェクトを定義します。各変数のデータを同じようにロールアップするには、同一のaggmapを使用し、1つの文で両方の変数を計算します。

次の文を使用してactuals変数およびforecast変数を計算します。

AGGREGATE actuals forecast USING act.agg

各ディメンションにあるそれぞれのディメンション値のすべてのデータをロールアップするようにaggmapで指定しているので、この文はactualsおよびforecastにあるすべてのデータをロールアップします。

例9-30 複数の変数でのCOUNTVARの使用

3つの変数(salesunitsおよびprojected_sales)のデータを1つのAGGREGATEコマンドで集計するとします。各変数には次のディメンション性があります。

<month product geography>

COUNTVARで結果を計算するには、salesunitsおよび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
  1. 次の定義で2つのaggmapオブジェクトを定義します。

    DEFINE leaf_aggmap AGGMAP
    AGGMAP
    RELATION geog.parentrel OPERATOR SUM
    END
    
    DEFINE capstone_aggmap AGGMAP
    AGGMAP
    RELATION time.parentrel OPERATOR SUM
    END
    
  2. データを集計するために、次の定義で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
    
  3. 次の文を発行して変数を集計します。

    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]

パラメータ

n

ゼロ以上の値で指定するINTEGER式。この式は、UPDATE文が実行される前にコンパイルされるオブジェクトの数を指定します。たとえば、1を指定すると、各オブジェクトがコンパイルされるごとにUPDATE文が実行されます。0(ゼロ)を指定すると、すべてのオブジェクトがコンパイルされた後にUPDATE文が実行されます。この引数を省略すると、ALLCOMPILEはUPDATE文を実行しません。ALLCOMPILEの実行で更新を頻繁に行うと、アナリティック・ワークスペースの領域を最も有効に使用できます。

例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はerrorlognameNAを設定します。割当てで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であり、その変数はdivisiontimeおよびlineにディメンション化されています。timeディメンションは非一意の連結ディメンションであり、ベース・ディメンションとしてyearquarterおよび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です。divisiontimeおよび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の編集による割当て仕様のコーディング」にある手順を参照してください。

構文

ALLOCMAP [specification]

パラメータ

specification

現行のaggmapオブジェクトの割当て仕様である複数行のテキスト式。割当て仕様は、ALLOCMAP文で始まり、END文で終わります。これらの2つの文の間に、指定する計算に応じて次の文のうち1つ以上をコーディングします。

CHILDLOCK
DEADLOCK
DIMENSION(割当て用)
ERRORLOG
ERRORMASK
MEASUREDIM(割当て用)
RELATION(割当て用)
SOURCEVAL
VALUESET

各文は、複数行のテキスト式で構成されています。コマンドライン・レベルでALLOCMAP文をコード化する際は、改行デリミタ(\n)で文を区切るか、JOINLINESを使用します。

どの文を含めるかを決定する方法については、「割当て仕様の設計」を参照してください。

使用上の注意

割当て仕様の設計

最小限として、割当て仕様はRELATION文またはVALUESET文から構成されます。ただし、次のように他のOLAP DML文を仕様に含めることで、より複雑な割当て仕様を作成、またはエラー処理のデフォルト設定を変更できます。

  1. 階層割当ての場合、階層の親子関係を識別するためのセルフ・リレーションを指定するRELATION文。いくつかの処理を実行する順で文をリストするか、または実行順序が重要でなければ、変数定義にあるディメンションと同じ順序でRELATION文をリストします。

  2. 非階層割当ての場合、割当ての際に使用される値を指定するVALUESET文。

  3. ディメンション階層の親と子の両要素に対するロックをaggmapのRELATION文で指定しているか否かを検出するかどうかをALLOCATEコマンドに指定するCHILDLOCK文。

  4. ターゲット・セルがロックされているか、または一部の処理のためにNAの基礎値がそのセルに含まれることが原因で、割当てで値を配布できないときに発生するデッドロックを検出した場合、割当てを継続するかどうかをALLOCATEコマンドに指定するDEADLOCK文。

  5. ディメンションがターゲット変数およびソース・オブジェクトまたは基礎オブジェクトによって共有されない場合、そのディメンションのステータスとして設定する単一の値を指定するDIMENSION(割当て用)文。

  6. ALLOCATEコマンドによって指定されるエラー・ログに記録可能なエラーの数、およびその最大数までエラーが発生した場合に割当てを継続するかどうかを指定するERRORLOG文。

  7. エラー・ログに記録しないエラー条件を指定するERRORMASK文。

  8. ソース・データを変数から取得している場合、割当て後に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.parentproduct.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変数は、timeproductcustomerおよび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

割当て後のtotalchannelprojectedsalesのレポートは次のとおりです。

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]

パラメータ

DETECT

ディメンション階層の親とそのいずれかの子に対して割当てロックが存在することを検出するようにALLOCATE文に指定します。ロックされた親および子が検出されると、ALLOCATE文によって割当てのエラー・ログにエントリが作成されます。

NODETECT

(デフォルト)ディメンション階層の親とそのいずれかの子に対してロックが存在する場合でも、割当てを継続するようにALLOCATE文に指定します。

割当て仕様にCHILDLOCK文を使用する例は、例9-79「割当て用のAggmapの作成」を参照してください。

DEADLOCK

割当て仕様では、DEADLOCK文は、ターゲット・セルが割当て仕様のRELATION文によってロックされているか、またはターゲット・セルがNAの基礎値を持つために、ディメンション階層の値によって指定されるターゲット・セルにソース値を配布できない場合の処理をALLOCATE文に指定します。

構文

DEADLOCK [SKIP|NOSKIP]

パラメータ

SKIP

ターゲット・セルがロックされているか、NAの基礎値を持つために、ディメンション階層のブランチによって指定されるセルにソース値を配布できない場合でも、エラーをロギングして割当てを継続するようにALLOCATE文に指定します。

NOSKIP

ターゲット・セルがロックされているか、NAの基礎値を持つために、ディメンション階層のブランチのセルにソース値を配布できない場合、割当てを中止してエラーを返すようにALLOCATE文に指定します。NOSKIPはALLOCATEコマンドによって使用されるaggmapにDEADLOCK文を含めない場合のデフォルトのアクションです。

割当て仕様でDEADLOCK文を使用する例は、例9-37「入力ファイルからの割当て仕様」および例9-38「テキスト式からの割当て仕様」を参照してください。

DIMENSION(割当て用)

割当て仕様では、DIMENSION文は、ステータスをディメンションの単一の値に設定します。割当て仕様におけるこのディメンションは、ソース・オブジェクト、基礎オブジェクトおよびターゲット・オブジェクトが共有しないディメンションです。割当て仕様でDIMENSION文によってこのような単一の値が指定されていない場合、Oracle OLAPは割当てを実行する際にディメンションの現行のステータス値を使用します。

DIMENSION文を使用すると、ディメンションのステータスを割当てで使用したい値に設定できます。ソース・オブジェクト、基礎オブジェクトおよびターゲット・オブジェクトによって共有されない各ディメンションには、個別のDIMENSION文を使用する必要があります。

構文

DIMENSION dimension 'dimval'

パラメータ

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

割当て仕様では、ERRORMASK文は、割当てエラー・ログに記録しないエラー条件を指定します。エラー・ログはALLOCATEコマンドにERRORLOGキーワードで指定します。

構文

ERRORMASK <num...>

パラメータ

num...

エラー・ログに記録しないエラーの番号。

例9-41 CHILDLOCKエラーを対象外にする

CHILDLOCKエラーを対象外にするには、割当て仕様に次の文を入力します。

ERRORMASK 10

例9-42 すべての割当てエラーを対象外にする

すべてのエラーを対象外にするには、割当て仕様に次の文を入力します。

ERRORMASK 1 2 3 4 5 6 7 8 9 10

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 nafillvalweightobj]}]

パラメータ

rel-name

割当てのパスを識別するディメンション階層の値を指定するOracle OLAPのセルフ・リレーション。rel-nameの値によって識別されるターゲット変数のセルが割り当てられたデータを受け取ります。

qdr. . .

セルフ・リレーションの一部ではないリレーションの各ディメンションに単一のディメンション値を指定する1つ以上の修飾データ参照。セルフ・リレーションに複数の階層がある場合、セルフ・リレーションのディメンションの階層ディメンションにqdrを指定し、割当てに含まれない階層を単一の値に制限する必要があります。

OPERATOR operator

表9-3「割当て演算子」に示されている割当て方法、または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またはロックベースのデッドロックを検出したときに使用する演算子を指定します。有効な演算子は、表9-3「割当て演算子」に示されているHFIRST、HLASTおよびHEVENです。

REMOPERATOR operator

REMOPERATORキーワードの後のoperatorには、割当てによって生じた残りを格納する際にALLOCATEの処理が使用する演算子を指定します。たとえば、INTEGER値である10を階層の同レベルの3つのセルに割り当てると残りは1になります。REMOPERATORは、この残りを割当て演算によって格納する場所を指定します。REMOPERATORの有効な演算子は、表9-3「割当て演算子」に示されている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を指定します。

割当て文にRELATION文を使用する例は、ALLOCMAPコマンドの例(特に、例9-40「割当て仕様におけるRELATION文の入力」)を参照してください。

SOURCEVAL

割当て仕様では、SOURCEVAL文は、ALLOCATEコマンドが割当て前のソース・セルの値を正常に割り当てた後、その割当て演算でソース・セルに割り当てる値を指定します。

SOURCEVALのデフォルト値はNAなので、ALLOCATEは割当て後に割り当てられたソース・セルのそれぞれの値をNAに設定します。SOURCEVALにCURRENTを指定すると、割り当てられたソース・セルは割当て前に持っていた値を保持します。SOURCEVALにZEROを指定すると、割り当てられた各ソース・セルにゼロ値を割り当てます。

構文

SOURCEVAL [CURRENT|ZERO|NA]

パラメータ

CURRENT

割当て後のソース・セルの値は、割当て前の値と同じであることを指定します。

ZERO

割当て後のソース・セルの値は、ゼロであることを指定します。

NA

割当て後のソース・セルの値は、NAであることを指定します。(デフォルト値)

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引数はテキスト式であり、表9-3「割当て演算子」で示されている演算子タイプが使用されます。演算子タイプは割当ての方法を指定します。この方法によって、ALLOCATEが値を割り当てるvs-nameリレーションのターゲット変数のセルが決定されます。FIRST演算子、LAST演算子、HFIRST演算子およびHLAST演算子に対してdimorder valuesetを使用して異なるステータスを指定していないかぎり、ALLOCATEは割当てディメンションのデフォルトの論理順序を使用してセルを決定します。割当てには、デフォルトの演算子はありません。

OPERATOR opvar

OPERATORキーワードの後のopvar引数には、ディメンションの各値に対して異なる演算を指定するTEXT変数を指定します。変数の値は、表9-3「割当て演算子」に示されている割当て演算子です。演算子変数は、割当て演算子をあるディメンションの値で変更するために使用します。opvar引数は、次のタイプのディメンションで使用します。

  • メジャー・ディメンション: 割り当てられる変数に応じて割当て方法を変更します。メジャー・ディメンションの値は、割り当てられる変数の名前です。これにより、各メジャーの割当てに使用される演算を識別する値のテキスト変数がディメンション化されます。割当て仕様には、メジャー・ディメンションを識別するMEASUREDIM(割当て用)文が含まれている必要があります。

  • 明細項目ディメンション: 割り当てられる明細項目に応じて割当て方法を変更します。通常、明細項目ディメンションは非階層で、財務割当てを識別します。データ変数のディメンション化、および各項目の割当てに使用する演算を識別するテキスト変数のディメンション化の両方に、明細項目ディメンションを使用します。演算変数は通常、長期間にわたる明細項目の割当てに使用します。

opvar引数は、この引数を使用して割り当てられるディメンションによってディメンション化できません。たとえば、geographyディメンションに別の演算を指定する場合、opvargeographyによってディメンション化できません。


ヒント:

演算子変数をページングする量を最小限にするには、opvar変数を固定幅8TEXT型で定義します。

NAOPERATOR text-exp

NAOPERATORキーワードの後のoperatorには、ALLOCATEの処理でNAまたはロックベースのデッドロックを検出したときに使用する演算子を指定します。有効な演算子は、表9-3「割当て演算子」に示されているHFIRST、HLASTおよびHEVENです。

REMOPERATOR text-exp

REMOPERATORキーワードの後のoperatorには、割当てによって生じた残りを格納する際にALLOCATEの処理が使用する演算子を指定します。たとえば、INTEGER値である10を階層の同レベルの3つのセルに割り当てると残りは1になります。REMOPERATORは、この残りを割当て演算によって格納する場所を指定します。REMOPERATORの有効な演算子は、表9-3「割当て演算子」に示されている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段階の処理が発生します。

  1. 指定したデータ型を確定する。コール側プログラムで指定した引数の式は、左から右に評価され、そのデータ型が識別されます。ディメンション値を表す式には、テキスト(TEXTまたはID)、数値(INTEGERDECIMALなど)またはRELATION値が使用可能です。引数の式の1つにエラーがあると、処理は停止します

  2. 指定した各データ型と宣言したデータ型を一致させる。引数の式は、宣言された引数と、位置によって一致されます。最初の引数の式は最初に宣言された引数と一致し、2番目の引数の式は2番目に宣言された引数と一致します(以降同様)。それぞれの式は、宣言された引数の宣言されたデータ型に順次変換されます。

引数をディメンション値として宣言すると、コール側プログラムから渡される対応する値は、TEXTまたはID(指定したディメンションの値)、数値(論理的なディメンションの位置)、RELATION(物理的なディメンションの位置)のいずれかになります。RELATIONメソッドは、対応する値として使用されたディメンション名やリレーション名を評価した結果のディメンション値がOracle OLAPによって渡される方法です。対応する値が整数以外の数値(DECIMALなど)の場合は、論理的なディメンション位置の値に最も近いINTEGER値に丸められます。

引数をディメンション値以外の値として宣言し、コール側プログラムから渡された対応する値がRELATION値の場合、エラーが発生します。RELATION値を渡し、それをTEXT引数として受け取る場合は、CONVERTを使用し、プログラムの引数リストの値を変換します。

引数をディメンションの値セットとして宣言した場合は、該当するディメンションの値セットの名前のみが引数として使用されます。

最初または2番目の段階でエラーが発生した場合、プログラムは実行されません。

コマンドに対する引数の処理引数をカッコで囲まずに独立型のコマンドとしてプログラムを起動すると、各引数は宣言された引数と、位置によって一致されます。コールされるプログラムは、指定した引数を宣言した引数として参照するか、またはARG (n)、ARGSおよびARGFR (n)の各ファンクションを介して参照します。この場合、引数は値ではなくテキスト文字列として渡されます。

余分な引数コール側プログラムで指定した引数の数が、コールされるプログラムで宣言されている引数の数より多い場合、コール側プログラムで指定された余分な引数は無視されます。コール側プログラムで指定した引数の数が、コールされるプログラムで宣言されている引数の数より少ない場合、コールされるプログラムで宣言されている余分な引数にはNA値が代入されます。

アナリティック・ワークスペース・オブジェクトの名前と重複する引数名

通常、引数にアナリティック・ワークスペース・オブジェクトと同じ名前を指定すると、プログラムの内部では、アナリティック・ワークスペース・オブジェクトではなく、引数が参照されます。このルールの例外が発生するのは、参照される文に対して、アナリティック・ワークスペース・オブジェクトが引数として必要な場合のみです。

例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つの引数であることを示すために引用符が必要です。

custom.rptプログラムでは、次の文を使用してこの式のレポートを生成できます。

ARGUMENT rptexp TEXT
REPORT &rptexp

アンパサンド置換を使用して複数のディメンション値を渡す例は、例10-18「LIMITでのアンパサンド置換の使用」を参照してください。

例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文字以下です。すべての文字は、データベースのキャラクタ・セットに含まれる文字、数字またはアンダースコアを使用する必要があります。

  • DMLでは、数字は先頭に使用できず、予約語も使用できません。(予約語は、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では次のアクションが実行されます。

  1. 対象のワークスペースが現行のワークスペースになります。

  2. 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_READPERMIT_WRITEONATTACHMYATTACHおよび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プログラムによるアナリティック・ワークスペースのアタッチ

売上データのワークスペースとして、expensesrevenueの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文字以下です。すべての文字は、データベースのキャラクタ・セットに含まれる文字、数字またはアンダースコアを使用する必要があります。

  • DMLでは、数字は先頭に使用できず、予約語も使用できません。(予約語は、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キーワードで使用すると、作成するワークスペースの各セグメントの最大サイズが設定されます。KMGのいずれも指定しない場合、nに対して指定する値はバイトとして解釈されます。値nの後にKMGのいずれかを指定すると、この値はそれぞれKB、MB、GBと解釈されます。

使用上の注意

アナリティック・ワークスペースのアクセス権

アナリティック・ワークスペースに対して追加可能なセキュリティには、次のようないくつかのレベルがあります。

  • SQL GRANT文を使用するリレーショナル表レベル。

  • 別々のアタッチ・モードと起動プログラムを使用したアナリティック・ワークスペース・レベルおよびワークスペース・オブジェクト・レベル。AW ATTACHコマンドおよび「起動プログラム」を参照してください。

例9-52 アナリティック・ワークスペースの作成と始動

AWコマンドでCREATEキーワードを使用すると、新規のワークスペースを作成および始動できます。

AW CREATE mywork

AW DELETE

AW DELETEコマンドは、デタッチされたアナリティック・ワークスペースをデータベースから削除します。Oracle OLAPでは、アナリティック・ワークスペースを削除するための手順の一部としてCOMMITが自動的に実行されることに注意してください。DELETEキーワードは、ワークスペースをアタッチしているユーザーがいないときにのみ正常に実行されます。


注意:

また、現行のアナリティック・ワークスペースにおいて、別のアナリティック・ワークスペースが削除される場合、TRIGGER_AWという名前のプログラムが存在すれば、そのTRIGGER_AWプログラムが実行されます。


関連項目:

AW DETACHAW TRUNCATE

構文

AW DELETE workspace

パラメータ

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

アナリティック・ワークスペースの名前。使用するキーワードに応じて、アナリティック・ワークスペースの名前または別名のいずれかを指定できます。

使用上の注意

アナリティック・ワークスペースが変更されているかどうかの判断

次の文は、アタッチ以降、アナリティック・ワークスペースが変更されているかどうかを示します。

  • CHANGEDキーワードを指定したAWファンクション

  • AW LIST。アタッチされていないアナリティック・ワークスペースを示します。

Cache Size

デフォルトで、キャッシュされたアナリティック・ワークスペースのリストは2つです。つまり、キャッシュ・リストに一度に含まれるアナリティック・ワークスペースはデフォルトで2つのみで、新しいワークスペースをキャッシュ・リストに追加すると、前のワークスペースが削除されます。たとえば、mywk1mywk2の順序で、この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]

パラメータ

NOTHAW

後でワークスペースをアタッチする際に、AW ATTACHでTHAWキーワードを指定できないように指定します。


注意:

アナリティック・ワークスペースをいったん固定すると、AW ATTACHコマンドでTHAWキーワードを指定しないかぎり、読取り専用モードまたは読取りマルチライタ・モードでアナリティック・ワークスペースをアタッチした場合に、固定されたビューのアナリティック・ワークスペースがアタッチされます。

使用上の注意

アナリティック・ワークスペースの固定

アナリティック・ワークスペースを固定する際は、次の点に注意してください。

  • 一度に固定できるアナリティック・ワークスペースの世代は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 PURGE CACHE

AW PURGE CACHEコマンドは、現在キャッシュ内にあるすべてのアナリティック・ワークスペースをデタッチするコマンドです。

構文

AW PURGE CACHE

AW ROLLBACK TO FREEZE

AW ROLLBACK TO FREEZEは、直近のAW FREEZEコマンド実行により作成されたアナリティック・ワークスペースを現行のワークスペースにするためのコマンドです。

構文

AW ROLLBACK TO FREEZE

AW SEGMENTSIZE

AW SEGMENTSIZEコマンドは、複数のセグメントに対してアナリティック・ワークスペースを設定するコマンドです。

構文

AW SEGMENTSIZE [K, M, or G] [workspace]

パラメータ

workspace

アナリティック・ワークスペースの名前。使用するキーワードに応じて、アナリティック・ワークスペースの名前または別名のいずれかを指定できます。

SEGMENTSIZE [K, M, or G] [workspace]

指定したワークスペースに対して各セグメントの最大サイズを設定します。ワークスペースが指定されていない場合は、現行のワークスペースが対象になります。

現行のワークスペースがすでに複数のセグメントを持っている場合、SEGMENTSIZEの設定は最新のセグメントにのみ反映され、それより前のセグメントには反映されません。前のセグメントは、各セグメントの作成時にSEGMENTSIZEの設定で決定された様々なサイズになる場合があります。KMGのいずれも指定しない場合、nに対して指定する値はバイトとして解釈されます。値nの後にKMGのいずれかを指定すると、この値はそれぞれKB、MB、GBと解釈されます。

AW THAW

AW THAWコマンドは、現在のトランザクションが存在する場合はそのトランザクションをコミットし、前のAW FREEZEコマンドを取り消すコマンドです。

構文

AW THAW

AW TRUNCATE

既存のアナリティック・ワークスペースからオブジェクトおよびデータをすべて削除します。アナリティック・ワークスペースで使用されている表領域もすべて割当てが解放されます。AW TRUNCATEを使用してデータを削除する方が、AW DELETEを使用してアナリティック・ワークスペースを削除するよりも効率的であり、データ以外に削除される対象も少なくなります。たとえば、AW TRUNCATEを使用してデータを削除した場合、削除前に付与されていたオブジェクト権限はすべて保持されます。

表の削除に関する詳細は、『Oracle Database SQL言語リファレンス』のTRUNCATE TABLEに関する説明を参照してください。


注意:

所有しないスキーマにあるアナリティック・ワークスペースを削除するには、「アナリティック・ワークスペースの作成および削除に必要な権限」で概説する適切なSQL GRANT権限が必要です。

構文

AW TRUNCATE workspace

パラメータ

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]

パラメータ

n

挿入する空白行の行数を指定する0(ゼロ)以上の値のINTEGER式。nを省略すると、Oracle OLAPによって空白行が1行挿入されます。NAを指定すると、エラーが発生します。

例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 ...)]

パラメータ

program-name

コールされるプログラムの名前。

arg

コールされるプログラムに必要な1つ以上のオプションの引数。これらの引数は、コールされるプログラムでARGUMENTを使用して宣言するか、またはARGを使用して参照します。プログラムにARGUMENT文が使用されている場合は、CALLを使用してプログラムを起動する際に、コールされるプログラムで宣言されている引数の順序と一致するように引数を指定します。

使用上の注意

ディメンションの引数

ディメンションの値やディメンション名を引数として渡す場合は、'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段階の処理が発生します。いずれかの段階でエラーが発生した場合、プログラムは実行されません。

  1. 指定したデータ型を確定する。コール側プログラムで指定した引数の式は、左から右に評価され、そのデータ型が識別されます。ディメンション値を表す式には、テキスト(TEXTまたはID)、数値(INTEGERDECIMALなど)またはRELATION値が使用可能です。引数の式の1つにエラーがあると、処理は停止します。

  2. 指定した各データ型と宣言したデータ型を一致させる。引数の式の順序は、コールされるプログラムで宣言された引数の順序と一致します。最初の引数の式は最初に宣言された引数変数と一致し、2番目の引数の式は2番目に宣言された引数変数と一致します(以降同様)。それぞれの式は、引数変数の宣言されたデータ型に順次変換されます。

引数変数をディメンション値として宣言すると、コール側プログラムから渡される対応する値は、指定したディメンションの値を表すTEXTまたはID、論理的なディメンションの位置を表す数値、物理的なディメンションの位置を表すRELATIONのいずれかになります。対応する値が整数以外の数値(DECIMALなど)の場合は、論理的なディメンション位置を表す最も近いINTEGER値に丸められます。

引数変数をディメンション値以外の値として宣言し、コール側プログラムから渡された対応する値がRELATION値の場合、エラーが発生します。RELATION値を渡し、それをTEXT引数として受け取る場合は、CONVERTファンクションを使用し、プログラムの引数リストの値を変換します。

余分な引数を持つARGUMENT文

コール側プログラムで指定した引数の数が、コールされるプログラムで宣言されている引数の数より多い場合、コール側プログラムで指定した余分な引数は無視されます。コール側プログラムで指定した引数の数が、コールされるプログラムで宣言されている引数の数より少ない場合、コールされるプログラムで宣言されている余分な引数変数にはNA値が代入されます。

値で渡されるARGUMENT文

ARGUMENT文を使用して引数を宣言すると、引数は値でプログラムに渡されます。したがって、コールされるプログラムには引数ののみが渡され、このプログラムに関連するアナリティック・ワークスペース・オブジェクトへのアクセスは行われません。ただし、アナリティック・ワークスペース・オブジェクトの名前を一重引用符で囲んだ引数として指定した場合は、アナリティック・ワークスペース・オブジェクトの値は渡されません。そのかわりに、このオブジェクトの名前がテキスト文字列として渡されます。例9-59「プログラムまたはファンクションのコール」を参照してください。

例9-59 プログラムまたはファンクションのコール

この例では、2つのプログラムroundup.proundup.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 

(roundup.fプログラムをroundup.pプログラムと比較してください。roundup.fからは値が返されますが、レポートは生成されません。)

CDA

CDAコマンドを使用すると、セッションのカレント・ディレクトリ・オブジェクトを特定または変更できます。

既定のカレント・ディレクトリ・オブジェクトを使用すると、ディレクトリ・オブジェクトの名前を指定することなく、DMLファイルのアクセス文でファイル識別子を指定できます。ファイル・アクセス文の例としては、FILECOPY、FILEMOVE、FILEDELETE、EXPORTおよびIMPORTがあります。

構文

CDA [directory-alias]

パラメータ

directory-alias

実行しているセッションのカレント・ディレクトリ・オブジェクトになるディレクトリ・オブジェクトを指定するテキスト式。

この引数を指定しなかった場合、CDAによってカレント・ディレクトリ・オブジェクトの名前が現行の出力ファイルに送信されます。カレント・ディレクトリ・オブジェクトが存在しない場合、この文によって、存在しないという状況が通知されます。

使用上の注意

既定のカレント・ディレクトリ・オブジェクトでのファイル識別子の指定

次の文を実行すると、セッションのカレント・ディレクトリ・オブジェクトのファイル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はコンポジットでのみ使用できます。)HASHは結合に対するデフォルトです。コンポジットのデフォルトは、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が150monthとSEGWIDTHが90,000productでディメンション化される変数の場合、各セグメントには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)を使用して、特定のディメンション・セットを持つオブジェクトのセグメント数が多すぎるかどうかを確認できます。セグメント数が多すぎる場合、次の手順でセグメントの数を削減できます。

  1. 該当するディメンション・セットを使用する変数およびリレーションを、EIFファイルにエクスポートします。

  2. ディメンション・セット内のディメンションに対し、MAINTAIN DELETE ALL文を実行します。

  3. オプションで、このディメンション・セットを持つ変数またはリレーションにCHGDFN文を実行し、SEGWIDTHキーワードに対する長さ引数の値を増やします。

  4. EIFファイルから、手順1でエクスポートしたすべての値をインポートします。

BTREEからNOHASHへの結合の索引アルゴリズムの変更

BTREEアルゴリズムで定義された結合ディメンションをNOHASH結合へ変更する必要がある場合は、次の方法で行います。

  1. 結合ディメンションとそれによってディメンション化されたすべてのオブジェクトを、EIFファイルにエクスポートします。

  2. 結合ディメンションによってディメンション化されたすべてのオブジェクトを削除し、さらに結合自体も削除します。

  3. 結合をNOHASH結合として再定義します。

  4. 結合ディメンションとそれによってディメンション化されたオブジェクトを、EIFファイルからインポートします。インポート時に、定義上のNOHASH属性によって、結合ディメンションがNOHASH結合として読み込まれます。

名前のないコンポジットから名前付き結合ディメンションへの変更

名前のないコンポジットを結合ディメンションに変更するには、まずRENAME文を使用して名前のないコンポジットを名前付きコンポジットに変更し、その後、CHGDFNを使用して名前付きコンポジットを結合ディメンションに変更します。

変数からNULLトラッキングを削除する例は、例9-104「NULLトラッキングを使用した変数の定義」を参照してください。

例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変数には、timeproductおよび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は最も変化の遅いディメンションであるため、ユーザーが必要としない地域のデータを削除することにより、データの保存に必要なページ数を削減でき、これによって、アナリティック・ワークスペースのサイズの縮小と、パフォーマンスの向上が可能になります。

  1. 各ディメンションにステータスを設定します。ユーザーが必要とする地域は、ニューイングランド、ヨーロッパおよびオーストラレーシアのみです。次の文により、ユーザーが必要とする地域以外の地域の全期間および全製品を現行のステータスに設定します。つまり、次の文によって、ユーザーがアクセスする必要のないデータをすべてステータスに入れます。

    LIMIT time TO ALL
    LIMIT product TO ALL
    LIMIT geography COMPLEMENT 'NewEngland' 'Europe' 'Australasia'
    
  2. 不要なデータを削除するには、次の文を使用します。

    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

パラメータ

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により、オブジェクトが、コンパイル可能なオブジェクトのコンパイルに使用するオブジェクトと同じ名前、型(変数、ディメンションなど)、データ型(INTEGERTEXTなど)およびディメンションを持っているかどうかがチェックされます。

アクティブなアナリティック・ワークスペースが複数ある場合、両方のアナリティック・ワークスペースに同じ名前のオブジェクトを存在させることはできません。たとえば、プログラムのアナリティック・ワークスペースが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

パラメータ

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

パラメータ

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コマンドは、DATETIMETIMESTAMPTIMESTAMP_TZTIMESTAMP_LTZDSINTERVALまたは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「日時フィールドと値」を参照)。

  • 日時の書式要素であるFFTZDTZHTZMおよび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から12)。

HH12

なし

時間(1から12)。

HH24

あり

時間(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

Yes

短い時間書式で値を返します。時間の構成要素(時間や分など)の表示が、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文で変更できます。

ISO標準日付書式要素

Oracleでは、ISO規格に従って、日時書式要素IYYY、IYY、IY、IおよびIWによって返された値が計算されます。

これらの値と日時書式要素YYYY、YYY、YY、YおよびWWによって戻される値の相違点については、『Oracle Databaseグローバリゼーション・サポート・ガイド』の「グローバリゼーション・サポート」の章を参照してください。

RR日時書式要素

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「日時書式要素の接尾辞」に、日時書式要素に追加できる接尾辞を示します。

表9-5 日時書式要素の接尾辞

接尾辞 意味 要素の例 値の例

TH

序数

DDTH

4TH

SP

スペルアウトした数字

DDSP

FOUR

SPTHまたはTHSP

スペルアウトした序数

DDSPTH

FOURTH


日付書式要素の接尾辞を使用する際は、次の点に注意してください。

  • 前述の接尾辞のいずれかを日時書式要素に追加する場合、戻り値は必ず英語になります。

  • 日時の接尾辞は、書式の出力にのみ有効です。データベースに日付を挿入するためには使用できません。

日時書式要素およびグローバリゼーション・サポート

いくつかの日時書式要素の機能は、Oracle Databaseを使用している国および言語に依存します。たとえば、次に示す日時書式要素は、スペルアウトした値を返します。

  • MONTH

  • MON

  • DAY

  • DY

  • BC、AD、B.C.またはA.D.

  • AM、PM、A.M.またはP.M.

これらの値を戻す言語は、初期化パラメータNLS_DATE_LANGUAGEによって明示的に指定することも、初期化パラメータNLS_LANGUAGEによって暗黙的に指定することもできます。日時書式要素YEARSYEARによって戻される値は常に英語です。

日時書式要素Dは、週の何日目であるか(1から7)を返します。週の第1日目は、初期化パラメータNLS_TERRITORYで暗黙的に指定されます。


関連項目:

グローバリゼーション・サポートの初期化パラメータの詳細は、『Oracle Databaseリファレンス』および『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

日付書式要素における大文字

スペルアウトした単語、省略形またはローマ数字での大文字の使用方法は、対応する書式要素での大文字の使用方法に従います。たとえば、日時書式要素'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

PRGTRACEECHOPROMPTの両方を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仕様では、データの集計方法か割当て方法のいずれかを指定できます。

  • 集計仕様のコーディングについては、AGGMAPコマンドを参照してください。

  • 割当て仕様のコーディングについては、ALLOCMAPコマンドを参照してください。

構文

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値のディメンション値のあらゆる組合せを保持します。つまり、共有コンポジットは、それを使用してディメンション化するすべての変数のスパース性を反映します。したがって、通常、共有コンポジットでディメンション化する変数は、完全にスパースな変数ではありません。

変数のサイズが重要な場合で、同じディメンションでスパースな、ただし、スパース性のパターンが大幅に異なる複数の変数がある場合、それぞれの変数に対し別のコンポジットを定義します。

この項では、名前付きBツリー・コンポジットの簡単な作成例を紹介します。コンポジットを使用して変数をディメンション化する例は、例9-99「非圧縮コンポジットによりディメンション化される変数の定義」および例9-100「圧縮コンポジットによりディメンション化される変数の定義」を参照してください。

例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「ROUNDおよびTRUNC日付ファンクションの日時書式テンプレート」に示す書式モデルを指定するテキスト式。書式モデルは、日時の値をどのように切り捨てるかを示します。

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 結合ディメンションの定義

単純なディメンションcitystateおよび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.aconjointdim.aです。concatdim.dの定義では、ベース・ディメンションはsimpledim.aconcatdim.cです。concatdim.dのコンポーネントのディメンションは、simpledim.asimpledim.bおよびconjointdim.bです。simpledim.aおよびsimpledim.bconjointdim.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 連結ディメンションの定義

単純なディメンションcitystateおよび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

別名を制限せずにあるディメンションを制限したり、ディメンションを制限せずにその別名を制限することができます。たとえば、次の文を発行して、year2001における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

一方、year2001における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では、計算式のデータは変数に保存せず、要求されるたびに、実行時ベースで計算を行います。


関連項目:

「OLAP DML計算式」

構文

DEFINE name FORMULA {expression | [ datatype ][<dimensions...>]} [AW workspace] [SESSION]

パラメータ

name

定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。

FORMULA

計算式を定義するときのオブジェクト型。

expression

計算式を使用したときに値を生成するために実行される計算。定数または変数の名前を含めた有効な式を任意に指定できます(第2章「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]

パラメータ

name

定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。

MODEL

モデルを定義するときのオブジェクト型。

AW workspace

オブジェクトを定義する先の、アタッチされたワークスペースの名前。この引数の詳細は、DEFINEコマンドを参照してください。

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変数についてモデルを解決するには、入力明細項目(RevenueCogsMarketingSellingR.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はパーティションを定義する文です。RANGELISTのどちらを指定するかによって、構文は異なります。

  • 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文を使用してパーティションのための値を指定します。

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です。

ユーザー定義のファンクションとしてのプログラムの詳細は、ARGUMENTCALLおよび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 リレーションの作成および移入と、そのリレーションによる合計

次の例では、divisionproductの間のリレーションを定義し、リレーションの値を格納して、divisionごとにunitsを合計します(unitsproductによりディメンション化されています)。次の文により、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

日時データ型(つまり、DATETIMETIMESTAMPTIMESTAMP_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_variablessalestax値のための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 [VARIABLEdatatype [<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「OLAP DMLのデータ型の一覧」を参照してください。

dimension_name

DEFINE DIMENSION文を使用して事前に定義した単純、連結、結合または別名ディメンションの名前。この場合は、ディメンションの名前を指定します。

RANSPACE64

データ型がTEXTNTEXTまたは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文」に、これらの文を示します。

表9-6 Aggcount変数用のOLAP DML文

キーワード 説明

DEFINE VARIABLE


WITH AGGCOUNT

変数および関連するAggcount変数を定義する。

AGGCOUNT



指定した変数に関連付けられたAggcount変数の値を取得する。

CHGDFN


ADD|DROP AGGCOUNT

指定された変数に対して、Aggcount変数の追加または削除を行う。

OBJ


HASAGGCOUNT

指定した変数に関連付けられたAggcount変数が存在するかどうかを示すBOOLEAN値を返す。


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を使用してマテリアライズド・ビューを作成する方法の詳細は、『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「通常のディメンションを2つ使用してディメンション化される変数の定義」で使用したものと同じディメンション、リレーションおよびaggmapを使用して、アナリティック・ワークスペースが作成されているとします。ここでは次の文を発行して、コンポジットおよびそのコンポジットによりディメンション化される変数を定義するとします。

DEFINE COMP_PROD_GEOG COMPOSITE <PROD GEOG>
DEFINE SALES_DIMS_COMPOSITE VARIABLE NUMBER (12,2) <COMP_PROD_GEOG <PROD GEOG>>

例9-98「通常のディメンションを2つ使用してディメンション化される変数の定義」での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「通常のディメンションを2つ使用してディメンション化される変数の定義」で使用したものと同じディメンション、リレーションおよび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「通常のディメンションを2つ使用してディメンション化される変数の定義」での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. 各年のデータに対し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文を使用して値を指定します。)

  2. partition_sales_by_yearというパーティション・テンプレートによって定義されたパーティションを使用して、パーティション化されたsales変数を定義します。

    DEFINE sales DECIMAL <partition_sales_by_year<time product>>
    
  3. 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コマンドは、これらのデフォルト・ディメンションを使用するワークシートの作成に失敗します。(また、WKSCOLWKSROWは、DESCRIBEによって生成されたワークシートの説明には表示されないことに注意してください。)

  • ワークシート行およびワークシート列のディメンションは、他の単純なディメンションを作成する場合と同じように、次の文を発行することで作成できます。

    1. DEFINE DIMENSION(単純)文を使用して、2つの単純なINTEGERディメンションを作成します。一方のディメンションは行数、もう一方は列数を表します。

    2. 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

パラメータ

statement

1つ以上のOLAP DML文またはユーザー定義プログラム、あるいはその両方。

使用上の注意

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

パラメータ

PROGRAM
MODEL
AGGMAP
FORMULA

編集の対象となるオブジェクトが、プログラム、モデル、aggmap、計算式のいずれであるかを示します。

object-name

既存のプログラム、モデル、aggmap、計算式のいずれかの名前を指定するテキスト式。これらのオブジェクトのいずれかを編集するには、その前にDEFINE文を使用して、アナリティック・ワークスペース内に対象のオブジェクトを作成します。

使用上の注意

新しく定義された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]

パラメータ

expression

計算式を使用したときに値を生成するために実行される計算。式を指定しないと、式はEQコマンドによってNAに設定されます。計算式のテキストは大文字に変換されません。

使用上の注意

データ型とディメンション

通常、新しい式のデータ型とディメンションは、計算式の定義で指定したデータ型とディメンションに一致します。一致していない場合、得られた値は計算式のデータ型に変換され、結果が強制的に計算式のディメンション性に合せられます。DESCRIBEコマンドを使用すると、計算式のデータ型とディメンションが表示されます。新しい式のデータ型とディメンションを確認するには、式を解析します。例9-115「PARSEとEQの使用方法」を参照してください。

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 [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の設定またはディスクがいっぱいになったときのファイルのサイズによって決まるので様々です。

KMGのいずれも指定しない場合、nに対して指定する値はバイトとして解釈されます。値nの後にKMGのいずれかを指定すると、この値はそれぞれ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.e001export.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変数であり、monthproductおよびdistrictによってディメンション化されているとします。salesをスライスする方法を指定するために、次の文に示すように1次元の変数を作成します。

DEFINE salescatter VARIABLE TEXT <district>

salescatterdistrictによってディメンション化されるので、この文によって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

FCCLOSEコマンドは、予測コンテキストを閉じるコマンドです。Oracle OLAPが予測コンテキストを閉じると、FCEXECコマンドで指定される変数のデータのみがアプリケーションで使用可能になります。Oracle OLAPは、一時ページも含めて予測に関連付けられた他のすべてのデータを消去します。

FCCLOSEコマンドは、「予測プログラム」に示すように他のOLAP DML文と組み合せて使用する必要があります。

構文

FCCLOSE handle-expression

パラメータ

handle-expression

FCOPENファンクションを使用して前に開いた予測コンテキストへのハンドルであるINTEGER式

予測プログラムの例は、例9-119「予測プログラム」を参照してください。

FCEXEC

FCEXECコマンドは、予測のためにFCSETコマンドによって指定されるパラメータ・オプションに基づいて予測を実行するコマンドです。FCEXECコマンドは、時間ディメンション以外の式のディメンションをすべて暗黙的にループ処理します。

FCEXECコマンドは、「予測プログラム」に示すように他のOLAP DML文と組み合せて使用する必要があります。

構文

FCEXEC handle-expression [choicetime-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)を当てはめる非線形回帰法が使用されます。この場合、xy(y=c*x^a)の間の多項式モデルが構成されます。

  • NLREG2を指定すると、元のデータからなんらかの変換(この場合は、x'=x、y'=ln(y))を行って得られたデータに線形関係(y'=a*x'+b)を当てはめる非線形回帰法が使用されます。この場合、xとy(y=c*e^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=cKe^ax/(1+ce^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-spec1から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進値を指定できます。 0decimalのデフォルト値は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ファンクションの詳細は、付録A「OLAP_TABLE SQLファンクション」を参照してください。

構文

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の使用例は、例A-9「OLAP_TABLEでFETCHを使用するスクリプト」を参照してください。

FILECLOSE

FILECLOSEコマンドは、開かれているファイルを閉じるコマンドです。対象のファイルが開かれていない場合は、エラーが発生します。

構文

FILECLOSE fileunit

パラメータ

fileunit

FILEOPENファンクションを事前にコールすることによって開かれたファイル、またはOUTFILEコマンドによって開かれたファイルに割り当てられるINTEGERのファイル・ユニット番号。

使用上の注意

LOGコマンド

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

FILEDELETEコマンドは、オペレーティング・システムのディスク領域からファイルを削除するコマンドです。

構文

FILEDELETE file-name

パラメータ

file-name

削除するファイルの名前を指定するテキスト式。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。


注意:

ディレクトリ・オブジェクトはデータベースで定義され、ディレクトリおよびディレクトリ内のファイルへのアクセスを制御します。CDAコマンドを使用すると、カレント・ディレクトリ・オブジェクトの特定や指定を行うことができます。使用するデータベース・ユーザー名で読取りおよび書込み可能なファイルがあるディレクトリ・オブジェクトへのアクセス権については、Oracle DBAに問い合せてください。

例9-122 変数を使用したファイルの指定

次の文は、filevarという名前のテキスト変数にファイル名が格納されているファイルを削除します。

FILEDELETE filevar

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はファイル全体を処理します。「STOPAFTERキーワード」を参照してください。

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はエラーを生成する。デフォルトは、次に示すようにデータ型から導出される。

  • INTEGERSHORTINTEGERまたは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で位置属性を使用する必要がないように入力レコードを編成するには、すべてのディメンション値をレコードの最初のフィールドに入れ、変数データ値をレコードの最後のフィールドに入れます。たとえば、同じディメンションを同じ順序(timeproductおよび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のすぐ後にディメンション位置属性(LASTFIRSTBEFORE posAFTER 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では、monthproductおよび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.unitINTEGER値)およびユーザーがプログラムを中断したのかどうかをチェックします。これらのエラーの原因に該当しない場合、プログラムは不正なレコードを検出したと判断し、トラップをリセットしてから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の設定は、データ読取り文によるファイルの解釈の仕方に影響します。たとえば、データ読取り文はこの設定の情報を使用して、バイナリ・データのバイトを反転する必要があるかどうかなどを決定します。正しく設定するために表9-8「FILESETの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

出力がページングされる際にページ・タイトルおよびヘッダーを生成するOLAP DMLプログラムを指定します。

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]:] [attribsobject [= 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が発生します。一致が見つからない場合、ELSE actionが指定されていれば発生します。

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

パラメータ

dimension

1つ以上のディメンションで、その現行のステータスによって1つ以上の文の反復処理が制御されます。文は、現行のステータスにある指定されたディメンションの値の各組合せに対して繰り返されます。複数のディメンションを指定した場合、最初のディメンションが最後に変化します。ディメンションのかわりにコンポジットを指定できます。

statement

繰り返される文。2つ以上の文を繰り返すには、それらをDOとDOENDで囲みます。

     DO
       statement1
          ...
       statementN
     DOEND

FORの後で文を1つのみ繰り返す場合、DOおよびDOENDはオプションです。

使用上の注意

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

このコードの各行は次のように処理されます。

  1. データが特定の月に制限されます。

  2. すべての地区および製品がステータスに入れられ、FORループに入ります。

  3. FORループで、実績値が目標値と比較されます。BostonにおけるTentsの売上数量が目標値の10%を超えて下回る場合、次のメッセージが現行の出力ファイルに送信されます。

    Unit sales for TENTS in BOSTON are not within 10% of plan.
    
  4. すべての製品の処理が終わると、最初の地区のFORループが完了します。

  5. 次の地区のループが実行されていきます。

    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 [argument...]}] -

     [TIME dimension] [FCNAME nametime-series

ここで、argumentは予測の特性を指定する次の句のいずれか1つ以上です。

     ALPHA n
     BETA n
     GAMMA n
     STSMOOTHED 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つの系列を構成して実際の予測に使用します。これらの系列は、次のとおりです。

  1. 平滑データ系列は、季節的影響および確率的誤差を除いた元データです。

  2. 季節指数系列は、各時間間隔の季節的影響です。ゼロより大きい値はその時間間隔のデータに季節的増加があることを表し、ゼロより小さい値はデータに季節的減少があることを表します。Holt-Winters法は、季節的影響が時間の経過とともに変化することを認めるので、すべての履歴期間に季節指数値があります。

  3. 傾向系列は、季節的影響および確率的誤差を除いた各時間間隔のデータにおける変化です。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「EXPONENTIAL法の使用方法」に示す予測を実行したとします。その予測に対して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「WINTERS法の使用方法」に示す予測を実行したとします。その予測に対して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]

パラメータ

names

空白またはカンマで区切られた、1つ以上のワークスペース・オブジェクトの名前。FULLDSCは、指定した各オブジェクトのすべての定義を表示します。この引数を省略した場合、FULLDSCはNAMEディメンションの現行のステータスにあるすべてのオブジェクトの定義を表示します。

使用上の注意

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 変数のプロパティのリスト表示

この例は、プロパティ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文字ではない場合もあります。)ラベルは最大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コマンドを使用できます。

FORコマンドで値をループ処理する方法については、例9-137「値をループ処理するFOR文の使用方法」を参照してください。FORループ内でのDO ... DOENDの使用方法については、例9-138「FORループでのDO/DOENDの使用方法」を参照してください。

例9-144 IFとともに使用するGOTO

次の例は、プログラムを実行するときにユーザーが指定する引数によって、3つの地域のうちの1つに関するレポートを生成するプログラムです。ユーザーがEASTWESTまたは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