DEFINEコマンドは、アナリティック・ワークスペースに新規オブジェクトを追加するコマンドです。ここでは、DEFINEコマンドの概略を示します。続いて、各オブジェクト型を作成する次のようなDEFINEコマンドの使用方法について説明します。
パラメータ
新規オブジェクトの名前を示すTEXT
式。名前の値を指定する際は、次のガイドラインに従ってください。
名前は1から64文字で指定する必要があります。マルチバイト・キャラクタ・セットを使用している場合、必要なバイト数が64バイトを超えるときでも64文字まで指定できます。各文字には、英文字(A
からZ
)、数字(0
から9
)、アンダースコア(_
)またはドット(.
)を使用できます。ただし、これらの文字の使用には次の制約があります。
名前は、ドット記号(.
)単独またはアンダースコア記号(_
)単独では構成できません。
名前では、予約語を重複できません。予約語の確認の詳細は、RESERVEDファンクションを参照してください。
名前の最初の文字は数字にできません。
2番目の文字が数字の場合、最初の文字はドット(.
)にできません。
デフォルトでは、定義は現行のワークスペースに作成されます。アタッチされている別のワークスペースに定義を作成する場合は、nameに修飾オブジェクト名を指定するか、AW引数を使用してワークスペースを指定します。両方を一緒には使用できません。
注意: 作成するオブジェクトの名前が、アタッチされている別のワークスペース内の既存オブジェクトと同じ名前でも、Oracle OLAPでは警告を行いません。 |
定義するオブジェクト型。デフォルトはVARIABLEです。オブジェクト型については、DEFINEコマンドのサブセクションに記載されています。
属性はオブジェクト型ごとに異なります。各属性は、それぞれのオブジェクト型の項に一覧で示されています。
オブジェクトを定義する先の、アタッチされたワークスペースの名前。nameに修飾オブジェクト名を使用することでも、現行ワークスペース以外のアタッチされたワークスペースを指定できます。nameに修飾オブジェクト名を指定する場合は、この句は使用できません。
オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、読取り専用アクセス権のある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キーワードを使用すると、アナリティック・ワークスペースに新しいaggmapオブジェクトが追加されます。aggmapオブジェクトとは、Oracle OLAPによる変数データの割当て方法または集計方法についての仕様です。
aggmapを定義することで、aggmapオブジェクトがアナリティック・ワークスペースに作成されますが、計算仕様は定義されません。aggmap仕様では、データの集計方法か割当て方法のいずれかを指定できます。
パラメータ
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
aggmapを定義するときのオブジェクト型。
(オプションで、以前のリリースのソフトウェアとの互換性のために維持されています。)集計のためのaggmapオブジェクト(AGGMAP型のaggmap)を定義する場合のディメンションの名前。aggmapの定義または仕様では、結合ディメンションをベース・ディメンションとして指定できません。
オブジェクトを定義する先の、アタッチされたワークスペースの名前。この引数の詳細は、DEFINEコマンドを参照してください。
オブジェクトを現行のセッションでのみ存在させることを指定します。この引数の詳細は、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キーワードを使用すると、アナリティック・ワークスペースに新しい名前付きコンポジットが追加されます。概念として、コンポジットは次の2つの構造から成り立っていると考えられます。
コンポジット・オブジェクト自体。コンポジットには、ディメンション値の組合せ(つまり、コンポジット・タプル)が含まれており、Oracle OLAPでは、この組合せを使用して、コンポジットによってディメンション化される変数の構造を決定します。
コンポジット値とそのベース・ディメンション値との間の索引。
コンポジットでディメンション化される変数では、配列要素(つまり変数セル)はコンポジットのタプルに格納されるディメンション値についてのみがOracle OLAPによって作成され、ベース・ディメンション内のすべての値についてセルが作成されるわけではありません。変数のデータは、コンポジットの各タプルに対し、セルからセルへ順番に格納されます。データ格納の観点からは、コンポジット内のベース・ディメンション値の各組合せは、通常のディメンションの値と同様に扱われます。したがって、通常のディメンションとコンポジットを1つずつ持つ変数を定義する場合、変数のデータは、2次元の変数と同様に格納されます。コンポジットを使用することにより、変数に対して作成される要素の数が減り、データの格納がより効率化されます。
構文
DEFINE name COMPOSITE <dims...> [AW workspace] [index-algorithm] [SESSION]
ここで、index-algorithmは、Oracle OLAPが、コンポジット値とそのベース・ディメンション値を関連付ける索引を作成する際に使用するアルゴリズムです。このオプションの引数を指定しない場合、SPARSEINDEXオプションで指定された値が使用されます。index-algorithmの有効な値は次のとおりです。
パラメータ
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
名前付きコンポジットを定義するときのオブジェクト型。
コンポジットのベース・ディメンションとする、2つ以上のディメンションの名前。index-algorithmの値としてCOMPRESSEDを指定する場合は、1つ以上のディメンションが階層ディメンションである必要があります。
dims内のディメンションの順序は、index-algorithmに指定する値によって次のように異なります。
Bツリー・コンポジットまたはハッシュ・コンポジットについては、「変数の格納および文のループ処理におけるディメンションの順序の影響」で説明されているように、最も変化の速いディメンションから最も変化の遅いディメンションという順序でディメンションを指定します。
圧縮コンポジットについては、ディメンションを指定する順序は任意で構いません。AGGREGATEコマンドまたはAGGREGATEファンクションでFORCEORDERを指定しないかぎり、値が格納される順序はOracle OLAPにより選択され最適化されます。Oracle OLAPにより最適化された順序を確認するには、キューブ操作ログを表示します。
関連項目: キューブ操作ログおよびDBMS_CUBE_LOGパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。 |
コンポジットを定義する前に、まず、リストで使用するすべてのディメンションおよび名前付きコンポジットを定義しておく必要があります。リスト内にある名前のないコンポジットは、DEFINEを実行することで自動作成されます。
オブジェクトを定義する先の、アタッチされたワークスペースの名前。この引数の詳細は、DEFINEコマンドを参照してください。
コンポジット値とベース・ディメンション値の関連付けとして、Bツリー索引の作成を指定します。BTREEは、コンポジットの標準的な索引付けメソッドです。BTREEコンポジットでディメンション化される変数では、配列要素(つまり変数セル)はコンポジットのタプルに格納されるディメンション値についてのみがOracle OLAPによって作成され、ベース・ディメンション内のすべての値についてセルが作成されるわけではありません。
コンポジット値とベース・ディメンション値の関連付けとして、拡張性の高いBツリー索引の作成を指定します。BTREE64コンポジットでディメンション化される変数では、BTREEコンポジットと同様に、配列要素(つまり変数セル)はコンポジットのタプルに格納されるディメンション値についてのみ作成され、ベース・ディメンション内のすべての値についてセルが作成されるわけではありません。ただし、BTREEコンポジットとは異なり、BTREE64コンポジットでは2GBを超えるBツリーがサポートされます。
注意: 通常、BTREE64コンポジットは、2GBを超えるリレーショナル表からデータを移入する変数をディメンション化する場合に定義します。 |
コンポジット値とベース・ディメンション値の関連付けとして、圧縮型索引の作成を指定します。1つ以上の階層ディメンションがdimsに指定され、これから集計される変数のコンポジットを作成する場合にのみ、COMPRESSEDを指定します。
圧縮コンポジットは、そのコンポジットを使用する変数の非NAの詳細データを識別するベース・ディメンション値の各セットにつき、1つのコンポジット・タプルを保持します。さらに、圧縮コンポジットでディメンション化された変数では、複数の子孫を持つ親を表すタプルに対してのみコンポジット内での物理的な位置が作成されることによって、変数、コンポジットおよびコンポジット索引内の冗長性が削減されます。その後、コンポジット構造とベース・ディメンション値の索引が作成され、このコンポジット構造が変数のディメンションとして使用されます。圧縮コンポジットの実際の構造は、Bツリー・コンポジットまたはハッシュ・コンポジットの構造より小さいため、圧縮コンポジットでディメンション化される変数も、Bツリー・コンポジットまたはハッシュ・コンポジットでディメンション化される変数よりも小さくなります。また、圧縮コンポジットの索引には複数の子孫を持つ親ノードのみが含まれるので、圧縮コンポジットの索引にはレベルが少なく、Bツリー・コンポジットの索引よりも小さくなります。実際のパフォーマンスは階層の深さやコンポジット内のディメンションの順序により異なりますが、圧縮コンポジットで定義された変数の集計は、通常、Bツリー・コンポジットまたはハッシュ・コンポジットで定義された変数の集計よりもはるかに高速です。
注意: Oracle OLAPは、AGGREGATEコマンドまたはAGGREGATEファンクションの機能を使用して圧縮コンポジットによってディメンション化される変数のデータを圧縮します。したがって、1つ以上の圧縮コンポジットによりディメンション化されている変数を集計する場合には、特に注意が必要です。詳細は、「圧縮コンポジットによってディメンション化される変数の集計」を参照してください。 |
コンポジット値とベース・ディメンション値の関連付けとして、ハッシュ索引の作成を指定します。HASHはほとんど使用しませんが、通常は、コンポジットに2つまたは3つのディメンションがある場合にのみ使用します。Bツリー・コンポジットまたはハッシュ・コンポジットでディメンション化される変数では、配列要素(つまり変数セル)はコンポジットのタプルに格納されるディメンション値についてのみがOracle OLAPによって作成され、ベース・ディメンション内のすべての値についてセルが作成されるわけではありません。
オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。
使用上の注意
共有コンポジット
単一のBツリー・コンポジットまたはハッシュ・コンポジットを使用して、複数の変数をディメンション化することが可能です(ただし、このような形では圧縮コンポジットを共有できません)。(このような形では圧縮コンポジットを共有できません。)Bツリー・コンポジットまたはハッシュ・コンポジットでディメンション化された変数の実際のスパース性は、そのコンポジットが非共有コンポジットおよび共有コンポジットのいずれであるかによって異なります。
非共有コンポジットは、1つの変数のディメンション化にのみ使用されるコンポジットです。いずれのコンポジット(Bツリー・コンポジット、ハッシュ・コンポジットおよび圧縮コンポジット)も、非共有コンポジットとして使用できます。非共有コンポジットは、それを使用する変数が移入される場合にのみ、移入されます。したがって、非共有コンポジットは、それを使用してディメンション化する変数のスパース性を完全に反映します。その変数についての、各非NA
値のディメンション値の組合せのみを保持します。
共有コンポジットは、複数の変数のディメンション化に使用されるコンポジットです。共有コンポジットとして使用できるのは、Bツリー・コンポジットまたはハッシュ・コンポジットのいずれかで、圧縮コンポジットは共有できません。共有コンポジットの移入は、それを使用する変数のいずれかが移入されると行われます。共有コンポジットは、それを使用してディメンション化するすべての変数について、非NA
値のディメンション値のあらゆる組合せを保持します。つまり、共有コンポジットは、それを使用してディメンション化するすべての変数のスパース性を反映します。したがって、通常、共有コンポジットでディメンション化する変数は、完全にスパースな変数ではありません。
変数のサイズが重要な場合で、同じディメンションでスパースな、ただし、スパース性のパターンが大幅に異なる複数の変数がある場合、それぞれの変数に対し別のコンポジットを定義します。
例
この項では、名前付きBツリー・コンポジットの簡単な作成例を紹介します。コンポジットを使用して変数をディメンション化する例は、例9-99「非圧縮コンポジットによりディメンション化される変数の定義」および例9-100「圧縮コンポジットによりディメンション化される変数の定義」を参照してください。
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(単純)コマンドは、単純なディメンションを定義するコマンドです。変数が通常のディメンションによってディメンション化されている場合、Oracle OLAPでは、変数内に、変数のディメンション値の各セットについて1つの配列要素を作成します。単純なディメンションの値は、同じデータ型を持つ一意のデータ値です。単純なディメンションは、フラット・ディメンション、または階層の異なるレベルからの値を含む階層ディメンションです。
構文
DEFINE name DIMENSION type [TEMP] [AW workspace] [SESSION]
ここで、typeは、ディメンションのデータ型です。typeの構文は、データ型に応じて次のように異なります。
TIMESTAMP
[( truncation-code )]TIMESTAMP_TZ
[( truncation-code )]TIMESTAMP_LTZ
[( truncation-code )]パラメータ
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
ディメンションを定義するときのオブジェクト型。
ディメンションの値をTEXTデータ型として指定し、このTEXTデータ型は、Oracle DatabaseにおけるCHARおよびVARCHAR2データ型に相当します。このデータ型は、データベース・キャラクタ・セットで1行に最大4000バイトを格納できます。
ディメンションの値をNTEXTデータ型として指定し、このNTEXTデータ型は、Oracle DatabaseにおけるNCHARおよびNVARCHAR2データ型に相当します。このデータ型は、UTF-8文字コードで1行に最大4,000バイトを格納できます。
データベース・キャラクタ・セットで1行に最大8シングルバイト文字を格納する、特殊なテキスト・データ型を指定します。
TEXTまたはNTEXTディメンションの場合の、オブジェクトの各値の格納の幅(バイト単位)。幅の有効な値は1
から4000
までです。特定のディメンションの値が同じようなサイズであることがわかっている場合にのみ、固定幅を指定します。指定された幅を超える値は、切り捨てられます。
ディメンションの値をINTEGER
データ型として指定します。数字が示す位置(1、2など)によって識別される値を持つディメンションのためのデータ型です。INTEGER
データ型は、ディメンションに文字値が含まれないことを意味します。可能な場合は、テキスト・データ型または時間間隔のデータ型を使用する方が簡単です。
ディメンションの値をNUMBER
データ型として指定します。NUMBER
ディメンションは、値を位置によって指定できず、値によってしか指定できないという点で、その他のディメンションと異なります。NUMBER
ディメンションの値を位置で指定するには、NUMBER
ディメンションに対しINTEGER
型のディメンション・サロゲートを定義します。
NUMBER
型の値が保持できる合計桁数。
NUMBER
型の値が保持できる、小数点より右の桁数。たとえば、精度7およびスケール2を指定した場合、ディメンションに指定可能な値の最高値は99999.99です。精度の値を指定し、スケールの値を指定しなかった場合、スケールは0となります。
ディメンションの値をDATETIME
データ型として指定します。
ディメンションの値をTIMESTAMP
データ型として指定します。
ディメンションの値をTIMESTAMP_TZ
データ型として指定します。
ディメンションの値をTIMESTAMP_LTZ
データ型として指定します。
表8-13「ROUNDおよびTRUNC日付ファンクションの日時書式テンプレート」に示す書式モデルを指定するテキスト式。書式モデルは、日時の値をどのように切り捨てるかを示します。
ディメンションの値が一時的なもので、現行のセッションのみで保持できることを示します。ディメンションは現行のワークスペース内に定義を持ち、現行のセッションの間のみ値を保持できます。ただし、更新およびコミットすると、ディメンションの定義は保存されます。セッションを終了するか、別のワークスペースに切り替えると、データ値は廃棄されます。ワークスペースを開始する時点では常に、一時ディメンションの値はNA
です。
ディメンションを定義する先の、アタッチされたアナリティック・ワークスペースの名前。ディメンションによってディメンション化するオブジェクトはすべて、同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。
使用上の注意
単純なディメンションによりディメンション化される変数のNA値
変数が通常のディメンションによってディメンション化されている場合、Oracle OLAPでは、変数内に、変数のディメンション値の各セットについて1つの配列要素を作成します。配列要素が空の場合は、その要素にNA
値が含まれているとみなされます。場合によっては、これが原因でスパースな変数(つまり、配列要素が空である割合が比較的高い変数)になることがあります。スパース性には、次の2つのタイプがあります。
制御されたスパース性: 1つ以上のディメンションの範囲にデータがない場合に発生します。たとえば、過去数か月にわたりデータがないmonth
によってディメンション化される、新しい変数などです。
ランダムなスパース性: ディメンション値のある組合せがデータをまったく持たない場合に発生します。たとえば、ある地区では特定の製品のみが販売され、他の製品のデータが存在しない場合があります。他の地区ではそれらの製品とともに他の製品群も販売されている場合があります。
アナリティック・ワークスペースのページ容量に相当する数の配列要素が連続してNA
値を持つ場合、Oracle OLAPはそれらのNA
値を実際には格納せず、内部で管理します。ただし、アナリティック・ワークスペースのページに正常な値とNA
値が混在する場合は、それらすべての値を格納します。変数を1つ以上のコンポジットまたは結合ディメンションでディメンション化することにより、NA
値を持つ配列要素の数を減らすことができます。DEFINE COMPOSITEコマンドおよびDEFINE DIMENSION(結合)コマンドを参照してください。
例
例9-81 単純なディメンションの定義
この例では、アナリティック・ワークスペースにディメンションcity
を追加します。定義した直後に、そのオブジェクトに説明を追加できます(CONSIDERおよびLD文を使用して、後で説明を追加することもできます)。(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)コマンドは、値が時間間隔を表す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の構文は、型に応じて次のように異なります。
パラメータ
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
ディメンションを定義するときのオブジェクト型。
WEEKおよびMONTH型について、複数の週または複数の月にわたる期間を指定します。WEEKキーワードとともに使用する場合、multipleは2から52までのINTEGER
です。MONTHキーワードとともに使用する場合、multipleは2、3、4または6です。
WEEK、MONTH、QUARTERまたはYEARディメンションの開始フェーズまたは終了フェーズを指定します。
単一の週では、phaseは曜日名(DAYNAMESオプション内の名前)または日付です。
複数の週では、phaseは日付でなければなりません。
月、四半期または年では、phaseは、月名(MONTHNAMESオプション内の名前)または日付で表現された月です。
phaseを日付で指定する場合は、DATEデータ型の変数値で有効な任意の入力スタイルを使用し、月、日および年を一重引用符で囲んで指定します。意味があいまいな形式('03 05 97'
など)で日付が指定されている場合、その日付はDATEORDERオプションの現行の設定に基づいて解釈されます。
注意: WEEK型の複数期間のディメンションを定義して、BEGINNINGまたはENDING引数を指定しない場合、DEFINEにより、'31DEC1899' の日付で始まるフェーズが自動で指定されます。 |
ディメンションの値が一時的なもので、現行のセッションのみで保持できることを示します。ディメンションは現行のワークスペース内に定義を持ち、現行のセッションの間のみ値を保持できます。ただし、更新およびコミットすると、ディメンションの定義は保存されます。セッションを終了するか、別のワークスペースに切り替えると、データ値は廃棄されます。ワークスペースを開始する時点では常に、一時ディメンションの値はNA
です。
ディメンションを定義する先の、アタッチされたアナリティック・ワークスペースの名前。ディメンションによってディメンション化するオブジェクトはすべて、同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。
使用上の注意
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(結合)コマンドは、結合ディメンションを定義するコマンドです。
概念として、結合ディメンションは次の2つの構造から成り立っていると考えられます。
ディメンション・オブジェクト自体。ディメンションの値は、2つ以上の他のディメンションの値の組合せ(つまり、結合タプル)であり、Oracle OLAPではこの組合せを使用して、結合ディメンションによってディメンション化されるすべての変数の構造を決定します。
結合ディメンション値とそのベース・ディメンション値との間の索引。
コンポジットは、ディメンション値の組合せのリストを使用して変数をディメンション化するために使用できる、もう1つのオブジェクトです。コンポジットと結合ディメンションの主な違いについては、「結合ディメンションとコンポジットの違い」を参照してください。
構文
DEFINE name DIMENSION <dims. . .> index-algorithm [AW workspace] [SESSION]
ここで、index-algorithmは、Oracle OLAPが、結合ディメンションへの索引を作成する際に使用するアルゴリズムです。index-algorithmの有効な値は次のとおりです。
パラメータ
定義する結合ディメンションの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
結合ディメンションを定義するときのオブジェクト型。
結合ディメンションのベース・ディメンションとする、事前に定義されている1つ以上のディメンション。「変数の格納および文のループ処理におけるディメンションの順序の影響」で説明されているように、最も変化の速いディメンションから最も変化の遅いディメンションという順序でディメンションを指定します。ディメンション・リストは山カッコで囲む必要があります。
通常、結合ディメンションのベース・ディメンションは単純なディメンションですが、別の結合ディメンションを使用することもできます。ただし、dimsの値の1つに単純なディメンションがある場合、dimsには、同じ単純なディメンションをベースの1つとして持つ結合ディメンションまたは連結ディメンションは指定できません。
結合値とベース・ディメンション値の関連付けとして、Bツリー索引の作成を指定します。通常は、結合ディメンションの索引アルゴリズムとしてBTREEを指定します。
ヒント: BTREEまたはNOHASHのいずれを指定するべきかわからない場合は、NOHASHを使用します。これは、NOHASH結合からBTREE結合へはCHGDFN文を使用していつでも変更できる一方、CHGDFN文を使用してBTREE結合からNOHASH結合に変更できるのは、結合がもともとNOHASH結合として定義されたものである場合に限られるためです。 |
Oracle OLAPでは結合ディメンションの索引を作成しないかわりに、内部構造を使用して、結合値をベース・ディメンション値に関連付けることを指定します。NOHASHでは索引が作成されないため、結合ディメンションに関連付けられた構造の数は減少するため、多くの場合、結合ディメンションの値をロードおよびアクセスする時間が短縮されます。ただし、NOHASHは複雑なアルゴリズムであり、しばしば予期しないパフォーマンスに繋がるため、あまり使用されません。
(デフォルト、非推奨。)結合値とベース・ディメンション値の関連付けとして、ハッシュ索引の作成を指定します。
ヒント: HASHはデフォルトですが、通常、結合ディメンションの索引アルゴリズムにはBTREEを指定します。結合ディメンションが3つより多いベース・ディメンションを持つ場合は、パフォーマンスを最高にするために、HASHのかわりにBTREEを使用します。 |
ディメンションを定義する先の、アタッチされたアナリティック・ワークスペースの名前。ディメンションによってディメンション化するオブジェクトはすべて、同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。
使用上の注意
結合ディメンションとコンポジットの違い
ディメンション値の組合せのリストを使用して変数をディメンション化するには、コンポジットまたは結合ディメンションのいずれかを使用できます。どちらのタイプのオブジェクトを使用するかを決める際は、次の点に注意してください。
オブジェクトの移入のメンテナンス: 結合ディメンションは、ほとんどの制御を提供します。一方、コンポジットは、使用に際し次のように非常に便利です。
コンポジットに格納するディメンション値の組合せを、Oracle OLAPが決定する。コンポジットでディメンション化された変数が移入される場合は、Oracle OLAPが自動でコンポジットを移入します。
コンポジットに格納するディメンション値の組合せを、ユーザーが決定する。他のディメンションを移入およびメンテナンスするのと同じ方法で、MAINTAIN文を使用して、結合ディメンションを明示的に移入およびメンテナンスする必要があります。
ディメンション操作: ディメンション操作は結合ディメンションに対しては実行できますが、コンポジットにはできませんが、コンポジットのベース・ディメンションにのみディメンション操作を実行できます。たとえば、結合ディメンションにはLIMIT操作を実行できますが、ビューをコンポジット値のサブセットに制限するにはコンポジットのベース・ディメンションを制限する必要があり、さらに、結合ディメンションを使用してリレーションを定義できますが、コンポジットではできません。
コンポジットの詳細は、DEFINE COMPOSITEコマンドを参照してください。
結合ディメンションとベース・ディメンションの関係
結合ディメンションの値はベース・ディメンションと関連付けられています。結合ディメンションによりディメンション化されている変数のデータは、結合値の組合せ、ベース・ディメンションの個々の値、または結合ディメンションのベース・ディメンションのいずれかに関連付けられている他のディメンションの値を使用して指定できます。
ディメンションの値のサブセットの定義
ベース・ディメンションが1つしかない結合ディメンションを定義できますが、これによって、そのディメンションの値のサブセットを作成できます。ベース・ディメンションが1つでも、山カッコで囲む必要があります。
式における結合ディメンション値の使用方法
式において結合ディメンションの値を参照するには、次のガイドラインに従って値を指定します。
ディメンション値の指定全体を山カッコで囲み、さらに一重引用符で全体を囲みます。各値を個別に一重引用符で囲まないでください。
ベース・ディメンション値には、大文字と小文字を正しく使用します。
ディメンション値の指定に空白が埋め込まれたテキスト値が含まれる場合、それらのディメンション値をカンマで区切る必要があります。
たとえば、item.org
が、ベース・ディメンションitem
およびorg
を持つ結合ディメンションである場合、item.org
の値を参照するには次の書式を使用します。
'<Expenses, Direct Sales>'
例
例9-84 結合ディメンションの定義
単純なディメンションcity
、state
およびregion
を定義および移入し、それらに次の値があるとします。
CITY STATE REGION --------- ---------- ------ Princeton New Jersey East Newark New Jersey Central Patterson New York New York Illinois Chicago Indiana
cityandstate
という結合ディメンションを定義して、それに値を追加するには、次のOLAP DML文を使用します。
DEFINE cityandstate DIMENSION <city state> MAINTAIN cityandstate add <'Princeton' 'New Jersey'> MAINTAIN cityandstate add <'Newark' 'New Jersey'> MAINTAIN cityandstate add <'Patterson' 'New Jersey'> MAINTAIN cityandstate add <'New York' 'New York'> MAINTAIN cityandstate add <'Chicago' 'Illinois'> MAINTAIN cityandstate add <'Princeton' 'Indiana'>
DEFINE DIMENSION CONCATコマンドは、連結ディメンションを定義するコマンドです。連結ディメンションは、重複する値または異なるデータ型を持つ一連のベース・ディメンションを1つのディメンションにグループ化するディメンションです。
重複するデータ値がある場合は、非一意の連結ディメンションを作成します。たとえば、「New York」が都市レベルと州レベルの両方の値であるような場合、地理階層に対し非一意のディメンションを作成します。すべてのベース・ディメンションのデータ値がすべて一意である場合は、一意の連結ディメンションを作成できます。
ヒント: 連結ディメンションの値を指定する方法は、連結ディメンションが一意の連結ディメンションか非一意の連結ディメンションかによって異なります。詳細は、「CONCATディメンションの値の指定」を参照してください。 |
パラメータ
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
連結ディメンションを定義するときのオブジェクト型。
連結ディメンションをベース・ディメンションとする、事前に定義されている1つ以上のディメンション。「変数の格納および文のループ処理におけるディメンションの順序の影響」で説明されているように、最も変化の速いディメンションから最も変化の遅いディメンションという順序でディメンションを指定します。ディメンション・リストはカッコで囲む必要があります。
ベース・ディメンションとして使用できるディメンションの型は、定義する連結ディメンションが一意か非一意かによって異なります。
非一意の連結ディメンションを定義する場合は、ベース・ディメンションとして、任意のデータ型の単純なディメンション、結合ディメンションまたは別の連結ディメンションを指定できます。
一意の連結ディメンションを定義する場合、すべてのベース・ディメンションのデータ値が一意であり、ベース・ディメンションのいずれにおいても重複していないという条件を満たしていれば、ベース・ディメンションとしてTEXT型またはID型の単純なディメンション、または別の一意の連結ディメンションを指定できます。
連結ディメンションのベース・ディメンションとしてコンポジットは指定できません。
単純なディメンションおよび結合ディメンションは、連結ディメンションの最下位のコンポーネントです。連結ディメンションを定義する際に連結ディメンションをベース・ディメンションとして指定すると、内部連結のベース・ディメンションは外部連結のコンポーネントのディメンションになります。
連結ディメンションのコンポーネントのディメンションでは、同一のディメンションは1回しか使用できません。ただし、連結では、結合ディメンションは1つの分割できない構成単位であり、Oracle OLAPは連結の定義において結合のベース・ディメンションを検討しません。したがって、ある単純なディメンションが結合のベース・ディメンションであり、その結合とその同じ単純なディメンションが連結ディメンションのベース・ディメンション(またはコンポーネント)であることが可能です。
たとえば、次の定義は許可されます。
DEFINE conjointdim.a DIMENSION <simpledim.b, simpledim.c> DEFINE conjointdim.b DIMENSION <simpledim.a, simpledim.b> DEFINE conjointdim.c DIMENSION <simpledim.a, conjointdim.a> DEFINE concatdim.a DIMENSION CONCAT (simpledim.a, conjointdim.a) DEFINE concatdim.b DIMENSION CONCAT (simpledim.a, conjointdim.b) DEFINE concatdim.c DIMENSION CONCAT (simpledim.b, conjointdim.b) DEFINE concatdim.d DIMENSION CONCAT (simpledim.a, concatdim.c)
concatdim.a
の定義では、ベース・ディメンションはsimpledim.a
とconjointdim.a
です。concatdim.d
の定義では、ベース・ディメンションはsimpledim.a
とconcatdim.c
です。concatdim.d
のコンポーネントのディメンションは、simpledim.a
、simpledim.b
およびconjointdim.b
です。simpledim.a
およびsimpledim.b
はconjointdim.b
のベース・ディメンションですが、結合のベース・ディメンションは連結のコンポーネントのディメンションではないため、コンポーネントのディメンションとしては1回しか使用されません。
しかし、次の定義は、同じ単純なディメンションが、concatdim.e
のベース・ディメンションであるとともに、(concatdim.b
のベース・ディメンションであることから)concatdim.e
のコンポーネントでもあるため、許可されません。
DEFINE concatdim.e DIMENSION CONCAT (simpledim.a, concatdim.b)
注意: basedimlist引数内の単純なディメンション、およびbasedimlist内の結合ディメンションまたは連結ディメンションのベース・ディメンションである単純なディメンションは、INTEGERデータ型を持つことはできません。 |
ベース・ディメンションのテキスト値を一意とすることを指定します。このキーワードを指定した場合、basedimlistにリストされるディメンションは、テキスト型またはID型の単純なディメンション、または一意の連結ディメンションのいずれかである必要があります。
ディメンションの値が一時的なもので、現行のセッションのみで保持できることを示します。ディメンションは現行のワークスペース内に定義を持ち、現行のセッションの間のみ値を保持できます。ただし、更新およびコミットすると、ディメンションの定義は保存されます。セッションを終了するか、別のワークスペースに切り替えると、データ値は廃棄されます。ワークスペースを開始する時点では常に、一時ディメンションの値はNA
です。
ディメンションを定義する先の、アタッチされたアナリティック・ワークスペースの名前。ディメンションによってディメンション化するオブジェクトはすべて、同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。
例
例9-85 連結ディメンションの定義
単純なディメンションcity
、state
およびregion
を定義および移入し、それらに次の値があるとします。
CITY STATE REGION --------- ---------- ------ Princeton New Jersey East Newark New Jersey Central Patterson New York New York Illinois Chicago Indiana
次のOLAP DML文を使用して、これらのディメンションに基づく連結ディメンションを定義します。
DEFINE geog DIMENSION CONCAT(region cityandstate)
geog
の値は次のとおりです。
<REGION: East> <REGION: Central> <CITYANDSTATE: <Princeton New Jersey>> <CITYANDSTATE: <Newark New Jersey>> <CITYANDSTATE: <Patterson New Jersey>> <CITYANDSTATE: <New York New York>> <CITYANDSTATE: <Chicago Illinois>> <CITYANDSTATE: <Princeton Indiana>>
DEFINE DIMENSION ALIASOFコマンドは、単純なディメンションのディメンション別名を定義するコマンドです。別名ディメンションは、そのベース・ディメンションと同じ型および値を持ちます。通常、ある変数を同じディメンションで2回ディメンション化する必要がある場合に、別名ディメンションを定義します。
また、LIMIT文を使用して別名ディメンションを制限し、別名ディメンションを使用して変数やリレーションを定義できます。ただし、別名ディメンションは直接的にメンテナンスできませんが、かわりに、MAINTAINを使用してそのベース・ディメンションをメンテナンスします。
パラメータ
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
ディメンションを定義するときのオブジェクト型。定義するディメンションが別のディメンションの別名であることを示します。
別名を定義する単純なディメンションの名前。このディメンションとして、連結または結合ディメンション、コンポジット、サロゲートは指定できません。
ディメンションの値が一時的なもので、現行のセッションのみで保持できることを示します。ディメンションは現行のワークスペース内に定義を持ち、現行のセッションの間のみ値を保持できます。ただし、更新およびコミットすると、ディメンションの定義は保存されます。セッションを終了するか、別のワークスペースに切り替えると、データ値は廃棄されます。ワークスペースを開始する時点では常に、一時ディメンションの値はNA
です。
ディメンションを定義する先の、アタッチされたアナリティック・ワークスペースの名前。ディメンションによってディメンション化するオブジェクトはすべて、同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
例
例9-86 別名ディメンションの定義
部門内に従業員が参加する複数のプロジェクトがあり、ある従業員が1つのプロジェクトのリーダーであると同時に別のプロジェクトの参加者でもあるとします。また、各従業員がリーダーとしてまたは参加者としてプロジェクトに参加した時間をそれぞれ追跡するとします。この情報を追跡するために、追跡の単位とする時間(この例ではyear
)、project
および従業員についての2つのディメンション(参加者としての従業員のためのemployee
というディメンションと、リーダーとしての従業員のためのleader
というディメンション)でディメンション化する変数を設計します。この構造は次の定義でサポートされます。
DEFINE year DIMENSION TEXT DEFINE project DIMENSION TEXT DEFINE employee DIMENSION TEXT DEFINE leader DIMENSION ALIASOF employee DEFINE hours VARIABLE INTEGER <year project employee leader>
MAINTAIN year ADD '2001' '2002' '2003' MAINTAIN project ADD 'projA' 'projB' MAINTAIN employee add 'Adams' 'Baker' 'Charles'
別名ディメンション(つまり、leader
)を明示的に移入する必要がないことに注意してください。employee
ディメンションを移入すると、その別名ディメンションであるleader
も移入されます。
EMPLOYEE -------------- Adams Baker Charles LEADER -------------- Adams Baker Charles
別名を制限せずにあるディメンションを制限したり、ディメンションを制限せずにその別名を制限することができます。たとえば、次の文を発行して、year
2001におけるproject
ProjAについてのemployee
をAdamsに制限すると、レポートにはAdamsが参加するプロジェクトのすべてのリーダーが表示されます。
LIMIT year TO '2001' LIMIT employee TO 'Adams' LIMIT project TO 'projA' REPORT DOWN leader ACROSS employee: hours PROJECT: projA YEAR: 2001 --HOURS--- -EMPLOYEE- LEADER Adams -------------- ---------- Adams 1 Baker 2 Charles 1
一方、year
2001におけるproject
ProjAについてのleader
をAdamsに制限すると、レポートにはAdamsがリーダーとなるプロジェクトのすべての従業員が表示されます。
LIMIT employee TO ALL LIMIT leader TO 'Adams' LIMIT project TO 'projA' REPORT DOWN leader ACROSS employee: hours PROJECT: projA YEAR: 2001 -------------HOURS-------------- ------------EMPLOYEE------------ LEADER Adams Baker Charles -------------- ---------- ---------- ---------- Adams 1 3 3
DEFINEコマンドとともにFORMULAキーワードを使用すると、アナリティック・ワークスペースに新しい計算式オブジェクトが追加されます。計算式を定義することにより、式を保存します。計算式は、繰り返し使用する式のかわりに使用できます。計算式の名前は、その式のテキストのかわりです。Oracle OLAPでは、計算式のデータは変数に保存せず、要求されるたびに、実行時ベースで計算を行います。
パラメータ
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
計算式を定義するときのオブジェクト型。
計算式を使用したときに値を生成するために実行される計算。定数または変数の名前を含めた有効な式を任意に指定できます(第2章「OLAP DML式」を参照)。
EQ文を使用して式を定義する際、または式を定義した後で、計算式に対しその式を指定できます。式を指定せずに計算式を定義すると、計算式の実行時にNA
値が指定されたデータ型で返されます。
注意: Oracle OLAPでは、計算式内のテキストを自動で大文字に変換しません。 |
expressionの値を指定しないときに計算式に対して指定するデータ型。変数に適用可能な任意のデータ型を使用できます。値を指定しない場合、データ型は実行時に決まります。
計算式の定義にexpressionを含めると、expressionを使用して定義される計算式のデータ型がDEFINEにより自動的に決まります。EQ文を使用して後で式を追加する場合、その式のデータ型はここで指定するデータ型と一致する必要があります。一致しない場合、DEFINEによって、出力が指定されたデータ型に変換されます。
計算式のディメンション。リストを山カッコで囲みます。dimensions引数はオプションです。計算式が単一セルの値の場合、ディメンションは指定しません。また、定義に式を含める場合にも、値を指定しません。ディメンションはDEFINEにより自動で決定されます。
ただし、定義に式を含めない場合は、ディメンションを指定する必要があります。EQ文を使用して後で式を追加する場合、その式が計算式の定義と同じディメンションを持っている必要があります。同じディメンションを持たない場合、DEFINEによって、指定されたディメンションが出力に強制的に追加されます。
制限: コンポジットでディメンション化する計算式は定義できません。 |
計算式を定義する先の、アタッチされたワークスペースの名前。計算式がディメンション化されている場合、そのディメンションと同じワークスペースに定義する必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。
DEFINEコマンドとともにMODELキーワードを使用すると、アナリティック・ワークスペースに新しいモデル・オブジェクトが追加されます。モデルとは、相互に関連した一連の方程式です。方程式の計算は、変数またはディメンション値のいずれかに基づきます。計算の結果を変数に直接代入するか、データ計算の対象となるディメンション値を指定できます。たとえば、財務アプリケーションでは、すべての方程式について明細項目ディメンションの値を基礎とし、経費合計や純益などの明細項目についてのデータを計算できます。
注意: モデルを定義することでアナリティック・ワークスペースに作成されるのは、モデル・オブジェクトのみです。MODELで説明されているように、モデルの仕様もコーディングする必要があります。 |
例
例9-88 単純なモデルの定義
この例では、損益計算書の明細項目を計算するincome.calc
という単純なモデルを示します。モデルの方程式は、demo
ワークスペースのline
ディメンションを基礎とします。まず、モデルを定義して、LDを追加します。
DEFINE income.calc MODEL LD Model for calculating Income Statement items
その後、MODEL文を使用して、モデルの仕様を入力します。この例では、次のモデル説明に示す行のようなモデル明細を入力できます。
DEFINE income.calc MODEL LD Model for calculating Income Statement items MODEL dimension line net.income = opr.income - taxes opr.income = gross.margin - (marketing+selling+r.d) gross.margin = revenue - cogs END
actual
変数についてモデルを解決するには、入力明細項目(Revenue
、Cogs
、Marketing
、Selling
、R.D
およびTaxes
)のactual
にデータを入力します。その後、次の文を実行します。
income.calc actual
DEFINEコマンドとともにPARTITION TEMPLATEキーワードを使用すると、アナリティック・ワークスペースに新しいパーティション・テンプレート・オブジェクトが追加されます。パーティション・テンプレートは、パーティション変数のパーティション仕様です。パーティション変数は、アナリティック・ワークスペースであるLOBのリレーショナル表に複数行として格納され、各パーティションが表の1行になります。パーティション変数とパーティション化されていない変数は、どちらもDEFINE VARIABLE文を使用して定義します。パーティション変数を定義するには、まず、パーティション・テンプレート・オブジェクトを定義する必要があります。
構文
DEFINE name PARTITION TEMPLATE <dimlist> PARTITION BY
{RANGE|LIST} (dims_partitioned_by) ([partition_definition_statement...]) [AW workspace]
ここで、partition_definition_statementはパーティションを定義する文です。RANGEとLISTのどちらを指定するかによって、構文は異なります。
RANGEの場合:
PARTITION partition-name VALUES LESS THAN const-exp <partition-dimlist>
LISTの場合:
PARTITION partition-name VALUES ([valuelist)] <partition-dimlist>
パラメータ
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
パーティション化する変数のすべての論理ディメンションのリスト。ディメンションの名前は、左右を1組の山カッコ(<
>
)で囲む必要があります。ディメンションは、パーティション・テンプレートの定義に含める前に定義しておく必要があります。
実際に変数のパーティションを指定する、dimlistにより指定されたディメンションのサブセット。レンジ・パーティション化およびリスト・パーティション化(つまり、RANGEまたはLISTキーワードのいずれかを指定する場合)では、dims_partitioned_byには1つのディメンションしか指定できません。INTEGER
ディメンションに対しては、変数をパーティション化できません。
パーティションの名前。
比較値によってRANGEパーティションを指定することを示します。
dims_partitioned_byに対し指定されたディメンションのデータ型と同じデータ型を持つ定数式。
パーティション・テンプレート・オブジェクトの、すべてのディメンションのリスト(ディメンションはコンポジットのメンバーである場合もあります)。ディメンションの名前は、左右を1組の山カッコ(<
>
)で囲む必要があります。この引数を使用して、partition-nameに対応するパーティションをディメンション化するために使用するコンポジット(ある場合)を指定します。値を指定しない場合は、パーティションは、パーティション・テンプレート・オブジェクトのすべてのディメンションによって稠密にディメンション化されます。
値の指定によってLISTパーティションを指定することを示します。
カンマで区切った、ディメンション値のリスト。テキスト値は、一重引用符で囲む必要があります('mytext'
など)。結合の値を指定するには、ベース・ディメンション値をカンマで区切り、1組の山カッコで囲んで指定します(<'Value1', 'Value2'>
など)。非一意の連結ディメンションの値を指定するには、ベース・ディメンション値をコロンで区切り、1組の山カッコで囲んで指定します(<'Value1': 'Value2'>
など)。
ヒント: 値セット・オブジェクトを使用して値を指定する必要がある場合は、valuelistに値を指定しないでください。かわりに、パーティション・テンプレート定義からvaluelistを省き、MAINTAIN ADD TO PARTITION文を使用してパーティションのための値を指定します。 |
DEFINEコマンドとともにPROGRAMキーワードを使用すると、アナリティック・ワークスペースに新しいOLAP DMLプログラム・オブジェクトが追加されます。OLAP DMLプログラムは、一部のワークスペース管理または分析タスクの完了に役立つOLAP DML文のコレクションです。プログラムを定義することでアナリティック・ワークスペースに作成されるのは、プログラム・オブジェクトのみです。プログラムの実際の行もコーディングする必要があります。
パラメータ
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
プログラムを定義するときのオブジェクト型。
ファンクションとしてコールされた際にプログラムが返す値のデータ型。変数に適用可能な任意のデータ型を使用できます。
ディメンションの名前で、ファンクションとしてコールされた際、プログラムはこのディメンションの値を返します。戻り値はディメンションの単一の値で、位置(INTEGER
)ではありません。ディメンションは、プログラムと同じワークスペースに定義されている必要があります。
プログラムを定義する先の、アタッチされたワークスペースの名前。プログラムがディメンションを返す場合、プログラムはディメンションと同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。
使用上の注意
値を返す場合
プログラムから値を返す必要がある場合は、プログラム内でRETURN文を使用します。RETURN文への引数は、返す値を指定する式です。この式が、宣言されているデータ型またはディメンションと一致しない場合、値は宣言されているデータ型またはディメンション値に変換されます(可能な場合)。
プログラムの定義でデータ型またはディメンションを指定しない場合、戻り値はワークシート・データとして処理され、すべての戻り値がOracle OLAPによってコール側のコンテキストで必要とされるデータ型に変換されるため、予期しない結果になる場合があります。
プログラムから値を返すには、プログラムをファンクションとしてコールする必要があります。つまり、文の中で式として使用する必要があります。次の例では、プログラムisrecent
はファンクションとして扱われます。これは、REPORTコマンドの引数です。
REPORT isrecent(actual)
プログラムがディメンションの値を返す場合、プログラムはLISTBYファンクションの出力に含まれ、そのディメンションに対するOBJ(ISBY)はTRUE
です。
ユーザー定義のファンクションとしてのプログラムの詳細は、ARGUMENT、CALLおよびRETURNコマンドを参照してください。
例
例9-89 テスト結果に基づくプログラム・フロー
saleseval
プログラムは、ある月の売上総額がその月の予定売上高の合計を超えているかどうかをテストするプログラムです。このプログラムでは、テストの結果に基づいて異なる文を実行します。
DEFINE SALESEVAL PROGRAM PROGRAM ARGUMENT onemonth MONTH VARIABLE excess DECIMAL ALLSTAT LIMIT month TO onemonth IF TOTAL(sales, month) GT TOTAL(sales.plan, month) THEN DO excess = (TOTAL(sales, month) - - TOTAL(sales.plan, month)) - / TOTAL(sales.plan, month) * 100 SHOW JOINCHARS('Sales exceeded plan by ' excess '%.') DOEND ELSE SHOW JOINCHARS('We\'re not meeting plan. ' - 'Let\'s get working!') REPORT DOWN product W 10 ACROSS district: sales - sales.plan END
ある月の売上総額がその月の予定売上高の合計を超えている場合は、THEN文の行が実行されます。プログラムは、実際の売上高が予定売上高を超えている割合を計算し、結果をexcess
という数値の変数に格納します。その後、結果を現行の出力ファイルに送信します。出力では、JOINCHARSファンクションによって、計算された式excess
とテキスト式「Sales exceeded plan by」が結び付けられます。
ある月の売上総額がその月の予定売上高を超えていない場合は、ELSE文の行が実行され、別のメッセージが生成されます。
THEN文またはELSE文の行が実行された後、制御はプログラム内の次の行に移動し、予定を超えた売上のレポートが生成されます。
DEFINEコマンドとともにRELATIONキーワードを使用すると、アナリティック・ワークスペースに新しいリレーション・オブジェクトが追加されます。リレーションは、2つ以上のディメンションの値間における対応関係を表します。変数のようにディメンションを持つことができますが、リレーションの値は関連ディメンションからの値である必要があります。
注意: アナリティック・ワークスペースにリレーションを定義しても、アナリティック・ワークスペースにはリレーションの定義のみが追加され、リレーション自体は移入されません。OLAP DMLを使用してリレーションを移入するには、OLAP DMLのSQL、FILEREAD、SETまたはSET1文を発行します。 |
パラメータ
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
リレーションを定義するときのオブジェクト型。
1つ以上のdimensionsが関連付けられているディメンションを指定します。通常、リレーションは、たとえば都市が各地域に属しているなど、2つのディメンション間の関係についての情報を保存するために使用されます。
定義では、通常、値がより少ないほうのディメンションを関連ディメンションとして指定します(たとえば、地域)。そして、値が多いほうのディメンションを、リレーションのディメンションとして指定します(たとえば、都市)。
リレーションのディメンションの名前。ディメンションの名前は、左右を1組の山カッコ(< >
)で囲む必要があります。ディメンションは、リレーションの定義に含める前に定義しておく必要があります。ディメンション・リストにコンポジットは含められません。
制限: Oracle OLAPでは、リレーションのディメンションとしてのコンポジットの使用はサポートしていません。コンポジットを定義しないでください。 |
ヒント: 同一ディメンション間の2つのリレーションを定義するには、RELATIONコマンドを使用してデフォルトのリレーションを指定します。 |
リレーションの値が一時的なものであることを示します。リレーションは現行のワークスペース内に定義され、現行のセッションの間のみ値を保持できます。ただし、ワークスペースを更新およびコミットすると、リレーションの定義は保存されます。セッションを終了するか、別のワークスペースに切り替えると、データ値は廃棄されます。ワークスペースを開始する時点では常に、一時リレーションの値はNA
です。
リレーションを定義する先の、アタッチされたワークスペースの名前。リレーションは、そのディメンションと同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
オブジェクトを現行のセッションでのみ存在させることを指定します。セッションの終了時に、オブジェクトは廃棄されます。SESSIONキーワードで指定される動作は、TEMPキーワードで指定される動作とは異なり、TEMPキーワードでは値は一時的ですが、オブジェクト定義は作成したワークスペースに保存されます。
例
例9-90 リレーションの作成および移入と、そのリレーションによる合計
次の例では、division
とproduct
の間のリレーションを定義し、リレーションの値を格納して、division
ごとにunits
を合計します(units
はproduct
によりディメンション化されています)。次の文により、div.prod
リレーションを定義します。
DEFINE div.prod RELATION division <product>
次の文により、division
の値をdiv.prod
に格納します。
LIMIT product TO 'Tents' 'Canoes' div.prod = 'Camping' LIMIT product TO 'Racquets' div.prod = 'Sporting' LIMIT product TO 'Sportswear' 'Footwear' div.prod = 'Clothing'
REPORT文を使用して、div.prod
に格納された値を参照できます。
report div.prod
この文によって生成される出力は、次のとおりです。
PRODUCT DIV.PROD ------------- ---------- Tents Camping Canoes Camping Racquets Sporting Sportswear Clothing Footwear Clothing
データがproduct
によりディメンション化されているにもかかわらず、div.prod
リレーションを使用することでレポートに部門合計を表示できます。
REPORT TOTAL(units division)
DEFINEコマンドとともにSURROGATEキーワードを使用すると、アナリティック・ワークスペースに新しいディメンション・サロゲート・オブジェクトが追加されます。サロゲートは、ディメンションの値の代替セットを提供します。サロゲートは、モデル内のディメンションではなく、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)
パラメータ
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
ディメンション・サロゲートを定義するときのオブジェクト型。
サロゲートを作成するディメンションの名前。ターゲットを決める際の注意点については、「サロゲートの使用に関する制限」を参照してください。
テキスト値のあるディメンション・サロゲートのデータ型。ディメンション・サロゲートの値がすべて8シングルバイト文字またはそれ以下の場合、IDデータ型を指定します。1つ以上のディメンション値が8シングルバイトを超える文字の場合、TEXTまたはNTEXTデータ型を指定する必要があります。使いやすさと効率を向上させるために、可能な場合は常にディメンションにはIDデータ型を指定します。
TEXTまたはNTEXTディメンション・サロゲートでの、オブジェクトの各値の格納の幅(バイト単位)。幅の有効な値は1から4000までです。特定のディメンション・サロゲートの値が同じようなサイズであることがわかっている場合にのみ、固定幅を指定します。指定された幅を超える値は、切り捨てられます。
ディメンション内での値の順序位置(1、2など)を示す値を持つディメンション・サロゲートのデータ型。NUMBER
型ディメンションにINTEGER型ディメンション・サロゲートを作成することで、ディメンション値をディメンションの値ではなく位置で指定できるようになります。INTEGER型ディメンション・サロゲートを定義すると、ディメンション内の各位置のサロゲートに自動でINTEGER
値が割り当てられます。
ディメンション・サロゲートをNUMBER
データ型として指定します。詳細は、「数値データ型」を参照してください。
NUMBER
型ディメンション・サロゲートの値の合計文字数を指定します。
NUMBER
型のディメンション・サロゲートの小数点以下の文字数を指定します。
日時データ型(つまり、DATETIME
、TIMESTAMP
、TIMESTAMP_TZ
またはTIMESTAMP-LTZ
)を指定します。詳細は、「日時データ型と期間データ型」を参照してください。
ディメンション・サロゲートを定義する先の、アタッチされたワークスペースの名前。サロゲートを定義するディメンションは、同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。このキーワードは、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キーワードを使用すると、アナリティック・ワークスペースに新しい値セット・オブジェクトが追加されます。値セットは、1つまたは複数のディメンションに対するディメンション値のリストです。値セットを使用すると、複数のセッションにまたがってディメンション・ステータス・リストを保存できます。
注意: 値セットを定義すると、アナリティック・ワークスペースに値セットの定義が追加され、その値はすべてNULL(NA )に設定されます。値セットに値を割り当てるには、LIMITコマンドを使用します。また、値セットの操作には、STATUS文およびSTATFIRST、INSTAT、VALUESの各ファンクションを使用できます。 |
パラメータ
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
値セットを定義するときのオブジェクト型。
値セットに保存する値が格納されている、事前定義されたディメンションの名前。
多次元の値セットを定義する際の、当該値セットのディメンション化に使用する事前定義済ディメンションの名前。
値セットの値が一時的なものであることを示します。値セットは現行のワークスペース内に定義を持ち、現行のセッションの間のみ値を保持できます。ただし、更新およびコミットすると、値セットの定義は保存されます。セッションを終了するか、別のワークスペースに切り替えると、値は廃棄されます。ワークスペースを開始する時点では常に、一時値セットの値はNULLです。
値セットを定義する先の、アタッチされたワークスペースの名前。値セットは、そのディメンションと同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
オブジェクトを現行のセッションでのみ存在させることを指定します。セッションの終了時に、オブジェクトは廃棄されます。SESSIONで指定される動作は、TEMPキーワードで指定される動作とは異なり、TEMPキーワードでは値は一時的ですが、オブジェクト定義は作成したワークスペースに保存されます。
例
例9-93 値セットの作成と値セットへの値の割当て
この例では、デモンストレーション・ワークスペースにlineset
という値セットを追加します。lineset
値セットはline
によりディメンション化されており、そのためline
ディメンションの現行の値で制限できます。LD文で、オブジェクトに説明を追加します。
次の各文は、まずline
ディメンションを制限して値をステータスに表示します。次に、値セットを定義し、その値セットをlineディメンションの現在のステータスにある値に制限して、lineset
という値セットを作成します。最後に、linesetの値を表示します。
LIMIT line TO FIRST 2 STATUS line
The current status of LINE is: REVENUE, COGS " Define the valueset and specify a long description for it
DEFINE lineset VALUESET line LD Valueset for LINE dimension values " Assign the values that are currently in status for line " as the values of valueset LIMIT lineset TO line UPDATE SHOW lineset
Revenue Cogs
例9-94 多次元の値セットの作成と値セットへの値の割当て
アナリティック・ワークスペースに、次の定義を持つ変数およびディメンションがあるとします。
DEFINE geography DIMENSION TEXT DEFINE product DIMENSION TEXT DEFINE sales VARIABLE DECIMAL <geography product> DEFINE salestax VARIABLE DECIMAL <geography>
また、その同じアナリティック・ワークスペースに、ワークスペース内の変数およびディメンションの名前を値とする、次のようなディメンションがあるとします。
DEFINE all_variables DIMENSION TEXT MAINTAIN all_variables ADD 'sales' 'salestax' DEFINE all_dims DIMENSION TEXTMAINTAIN all_dims ADD 'geography' 'product'
次の文により、all_variables
およびall_dims
の値のための値セットが作成され移入された後、その値セットの値がレポートされます。
DEFINE variables_dims VALUESET all_dims <all_variables> " Assign all values of all_dims and all_variables to the valueset LIMIT variables_dims TO ALL REPORT variables_dims ALL_VARIABLES VARIABLES_DIMS ---------------- ------------------------------ sales geography product salestax geography product
それらを使用する変数と関連付けられた正しいディメンションを持つ、多次元の値セットを作成するには、QDRを使用してall_variables
のsalestax
値のためのall_dims
値を制限する、次の文を発行します。
LIMIT variables_dims(all_variables 'salestax') TO 'geography' REPORT variables_dims ALL_VARIABLES VARIABLES_DIMS ---------------- ------------------------------ sales geography product salestax geography
DEFINEコマンドとともにVARIABLEキーワードを使用すると、アナリティック・ワークスペースに新しい変数オブジェクトが追加されます。変数には、数値、テキスト、ブールまたは日付のいずれか1つの型のデータが保存されます。変数のデータ型の他に、変数について作成する定義によって、次のような変数の特性が決定されます。
変数である配列内に実際に作成される要素の数
変数の要素の論理的な順序
変数のデータは永続的に格納されるか、そのセッションでのみ使用可能か
変数のデータに対しOracle OLAPによって作成されるLOBの数
VARIABLEコマンドを使用して、ローカルなプログラム変数を定義することもできます。これらの変数は、プログラムが実行されているときにのみ存在します。
注意: アナリティック・ワークスペースに変数を定義しても、アナリティック・ワークスペースには変数の定義のみが追加され、変数自体は移入されません。OLAP DMLを使用して変数を移入するには、OLAP DMLのSQL、FILEREAD、SETまたはSET1文を発行します。 |
構文
DEFINE name [VARIABLE] datatype [<dims...>] [WITH NULLTRACKING] [WITH AGGCOUNT] -
[PERMANENT | TEMP ] -
[ RANSPACE64] [(partition-instance...)] [WIDTH n] [AW workspace] [SESSION]
ここで、
dimsは変数のディメンションを表し、各ディメンション間はカンマで区切ります。変数のディメンションに対しては、ディメンション・オブジェクト、パーティション・テンプレート・オブジェクト、名前付き非圧縮コンポジット、圧縮コンポジット、または名前のない非圧縮コンポジットを次のような形で指定できます。
注意: 変数のdimsに指定する順序は、様々な文(REPORTやUNRAVELなど)のディメンションおよび動作のデフォルト順序であり、変数のデータの格納方法に影響します(「変数の格納および文のループ処理におけるディメンションの順序の影響」を参照)。また、同じディメンションを使用して複数のオブジェクトを定義する場合、各定義においてディメンションを同じ順序でリストすると、ほとんどの操作がより効率よく動作します。 |
partition-instanceは変数のパーティションを表し、各パーティション間はカンマで区切ります。パーティションは、次の構文を使用して指定します。
PARTITION partition-name INTERNAL [TEMP | PERMANENT]
パラメータ
定義する変数の名前。この引数の一般情報は、DEFINEコマンドを参照してください。
変数を定義するときのオブジェクト型。これはデフォルトなので、VARIABLEを入力する必要はありません。
変数に保存するデータのデータ型。データ型、その略称、および適用可能な値の範囲は、表2-1「OLAP DMLのデータ型の一覧」を参照してください。
DEFINE DIMENSION文を使用して事前に定義した単純、連結、結合または別名ディメンションの名前。この場合は、ディメンションの名前を指定します。
データ型がTEXT
、NTEXT
またはRAW
の変数を定義する際は、このキーワードを指定して、変数値に対する最大文字数を2**32
から2**64
に増やします。
DEFINE PARTITION TEMPLATE文を使用して事前に定義したパーティション・テンプレート・オブジェクトの名前。dimsには、パーティション・テンプレート・オブジェクトのディメンションの名前を指定します。これらのディメンションは、パーティション・テンプレート・オブジェクトの定義に使用したものと同じである必要があります。
DEFINE COMPOSITE文を使用して事前に定義された非圧縮コンポジットの名前。オプションのbasedims引数には、コンポジットの定義に使用するディメンションの名前をカンマで区切って指定します。
DEFINE COMPOSITE文を使用して事前に定義された圧縮コンポジットの名前。オプションのbasedims引数には、コンポジットの定義に使用するディメンションの名前をカンマで区切って指定します。
圧縮コンポジットでディメンション化される変数を定義する際は、次の点に注意してください。
圧縮コンポジットによりディメンション化できるのは、1つの変数のみ、または変数の1つのパーティションのみです。圧縮コンポジットは共有コンポジットにはできません。
圧縮コンポジットは、変数を定義するDEFINE VARIABLE文での変数のディメンション・リストにおいて、最後のディメンションにする必要があります。
名前のないコンポジットをOracle OLAPによって作成し、変数をディメンション化する際にそれを使用するように指定します。basedims引数には、名前のないコンポジットを作成する対象となるディメンションの名前をカンマで区切って指定します。
変数がコンポジットによりディメンション化されている場合は、Oracle OLAPによってその変数のセルにNA2ビットが作成されるように指定します。
AVERAGE、HWAVERAGEまたはWAVERAGE演算子を持つRELATION文について計算された集計値に加えられたリーフ・ノード数の非NA
カウント数を格納するためのINTEGER
変数が自動的に作成されるように指定します。圧縮コンポジットによりディメンション化された変数の平均集計を計算する場合は、この句を指定する必要があります。Aggcount変数の詳細は、「Aggcount変数」を参照してください。
変数または変数のパーティションについて、永続的であるか一時的であるかを指定します。変数やパーティションの永続的または一時的な定義は常に、更新およびコミット後、セッションの間で保存されます。永続的または一時的の指定では、更新およびコミット後、セッションを終了するか別のワークスペースに切り替えた際に、変数の値または変数のパーティションの値を保存するか、廃棄するかが決まります。
永続的な変数およびパーティション: Oracle OLAPにより、永続変数または永続パーティションのデータ値が保存されます。ワークスペースを開始した場合、永続変数または永続パーティションのデータ値はそれらを最後にコミットしたときと同じです。
一時的な変数およびパーティション: Oracle OLAPにより、一時変数または一時パーティションのデータ値が廃棄されます。ワークスペースを開始する時点では常に、一時変数または一時パーティションの値はNA
です。
PERMANENTおよびTEMPキーワードを指定する際は、次の点に注意してください。
デフォルトでは、変数は永続的です。
一時変数は、パーティション・テンプレート・オブジェクトまたは一時ディメンションによってディメンション化できます。
デフォルトでは、変数の最上位レベルのパーティションは、それを含む変数と同じ永続性を保持します。具体的には、PERMANENTキーワードを使用してそれを永続パーティションにしないかぎり、一時変数のパーティションは一時パーティションであり、TEMPORARYキーワードを使用してそれを一時パーティションにしないかぎり、永続変数のパーティションは永続パーティションです。別の動作を指定するには、PERMANENTまたはTEMPキーワードのいずれかを使用します。
デフォルトでは、サブパーティションは親パーティションと同じ永続性を保持します。別の動作を指定するには、PERMANENTまたはTEMPキーワードのいずれかを使用します。
(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-nameはパーティションの名前です。
圧縮コンポジットでディメンション化される変数のパーティションを定義する際は、次の点に注意してください。
1つの圧縮コンポジットによりディメンション化できるパーティションは1つのみです。
圧縮コンポジットでディメンション化される変数のパーティションは、階層ディメンションの親子関係を踏襲する必要があります。AGGREGATEコマンドを実行する際、データはパーティション間にまたがって集計できません。変数が正しくパーティション化されているかどうかを確認するには、PARTITIONCHECKファンクションを使用します。
変数を定義する先の、アタッチされたワークスペースの名前。変数がディメンション化されている場合、そのディメンションと同じワークスペースに定義する必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
オブジェクトを現行のセッションでのみ存在させることを指定します。セッションの終了時に、オブジェクトは廃棄されます。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文
文 | キーワード | 説明 |
---|---|---|
|
WITH AGGCOUNT |
変数および関連するAggcount変数を定義する。 |
|
指定した変数に関連付けられたAggcount変数の値を取得する。 |
|
|
ADD|DROP AGGCOUNT |
指定された変数に対して、Aggcount変数の追加または削除を行う。 |
|
HASAGGCOUNT |
指定した変数に関連付けられたAggcount変数が存在するかどうかを示す |
NA2ビットとNULLトラッキング
リレーショナル・ファクト表には、NULLファクト(NULL値を持つファクト)が含まれていることがあります。通常、Oracle OLAPでは、コンポジットによりディメンション化された変数が作成される際、NA(またはNULL)値に対してコンポジット・タプルは作成されません。このような場合、OLAP DML変数ではNULLファクトが削除されるため、各変数とそのベース・リレーショナル・ファクト表とは一致しません。
OLAP DMLのコンポジット・ディメンションでディメンション化された変数(NULLファクトを持つリレーショナル・ファクト表に対応する変数)をサポートするため、Oracle OLAPには、NA2ビットと呼ばれる特殊なNA値があります。基礎となるリレーショナル表にNULLファクトが含まれているため、これらのNA2ビットによって、変数の各セルにNULL値が存在するかどうかのトラッキングが行われます。対応するファクト表にNULLファクトがある場合、Oracle OLAPでは、変数のコンポジット・タプルにあえてNA値を指定する必要があるため、NA2ビットを使用して前述の処理が実行されます。Oracle OLAPでは、SQL IMPORTコマンドやAGGREGATEコマンドを使用して変数を移入する場合、およびマテリアライズド・ビューとして作成された変数を移入する場合に、NA2ビットが使用されます。また、OLAP_TABLE SQLファンクションを使用してリレーショナル表を移入する場合にも使用されます。さらにOracle OLAPにおいて、算術演算子やブール演算子を使用して式の評価が行われる場合、NA2値は認識の対象となります。
OLAP DMLでは、NA2ビットを持つ変数に対して次のような文を使用できます。
NA2ビットを持つ変数を作成する場合は、NULLTRACKING句を指定したDEFINE VARIABLE文を使用します。
NA2ビットを持たない変数にNA2ビットを追加するには、NULLTRACKING句を指定したCHGDFN文を使用します。
NA2ビットを持つ変数からNA2ビットを削除するには、DROP NULLTRACKING句を指定したCHGDFN文を使用します。
テストやデバッグを行う場合、NA2ファンクションを使用すると、各変数のNA2ビットをTRUEに設定できます。NAFLAGファンクションを使用すると、変数の各値がNA値であるかどうか、またその場合はそれがOLAPにより無視される通常のNA値であるのか、通常のNA値であると同時にNA2値でもあるのかを判定できます。
関連項目:
|
非常に大きな変数の定義
理論上は、変数には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パーティションを定義するパーティション・テンプレートを定義します。
DEFINE partition_sales_by_year PARTITION TEMPLATE <time product> - PARTITION BY LIST (time)(- PARTITION time_2003 VALUES ('2003', 'Dec2003', 'Jan2003', '31Dec2003', '01Dec2003', '31Jan2003', '01Jan2003') <time product>- PARTITION time_2002 VALUES ('2002', 'Dec2002', 'Jan2002', '31Dec2002', '01Dec2002', '31Jan2002', '01Jan2002') <time product>)
(わかりやすくするために、この例では、各パーティションに対し、各年のディメンション値の一部のみが指定されていることに注意してください。通常、パーティションに多くの数の値を指定する必要がある場合は、DEFINE PARTITION STATEMENT文内ではそれを行いません。かわりに、値を指定せずにパーティションを定義し、その後で、例10-53「値セットを使用したパーティションの値の指定」に記載されているように、MAINTAIN ADD TO PARTITION文またはMAINTAIN MOVE TO PARTITION文を使用して値を指定します。)
partition_sales_by_year
というパーティション・テンプレートによって定義されたパーティションを使用して、パーティション化されたsales
変数を定義します。
DEFINE sales DECIMAL <partition_sales_by_year<time product>>
dayの値でsalesを移入した後、次のREPORT文を発行して、どのsales
値がどのパーティションにあるかを確認できます。
REPORT DOWN PARTITION(partition_sales_by_year) time product sales PARTITION(PARTITION_SALES_BY_YEAR) TIME PRODUCT SALES ----------------------------------- ---------- ---------- ---------- TIME_2003 2003 00001 NA TIME_2003 Dec2003 00001 NA TIME_2003 Jan2003 00001 NA TIME_2003 31Dec2003 00001 14.78 TIME_2003 01Dec2003 00001 15.52 TIME_2003 31Jan2003 00001 13.61 TIME_2003 01Jan2003 00001 10.39 TIME_2003 2003 00002 NA TIME_2003 Dec2003 00002 NA TIME_2003 Jan2003 00002 NA TIME_2003 31Dec2003 00002 16.05 TIME_2003 01Dec2003 00002 12.27 TIME_2003 31Jan2003 00002 10.83 TIME_2003 01Jan2003 00002 11.07 TIME_2002 2002 00001 NA TIME_2002 Dec2002 00001 NA TIME_2002 Jan2002 00001 NA TIME_2002 31Dec2002 00001 18.80 TIME_2002 01Dec2002 00001 13.64 TIME_2002 31Jan2002 00001 12.41 TIME_2002 01Jan2002 00001 16.97 TIME_2002 2002 00002 NA TIME_2002 Dec2002 00002 NA TIME_2002 Jan2002 00002 NA TIME_2002 31Dec2002 00002 17.47 TIME_2002 01Dec2002 00002 16.58 TIME_2002 31Jan2002 00002 18.94 TIME_2002 01Jan2002 00002 18.36
例9-102 固定幅のTEXT変数の定義
次の文により、employee
でディメンション化されたlastname
というTEXT変数が定義されます。lastname
内の値は20文字に制限されているため、20文字を超える値は切り捨てられます。
DEFINE lastname TEXT <employee> WIDTH 20
例9-103 名前付きBツリー・コンポジットを使用する変数の定義
アナリティック・ワークスペースに次のようなディメンションがあるとします。
DEFINE month DIMENSION TEXT DEFINE product DIMENSION TEXT DEFINE region DIMENSION TEXT
会社で、すべての地域ではなく一部の地域でのみ特定の製品の販促マーケティングを実施し、変数データがproduct
およびregion
ディメンションでスパースになるとします。そのため、ベース・ディメンションがproduct
およびregion
であるproddist
というコンポジットを定義するとします。コンポジットには、データを持つ値についてのみ、ディメンションと値の組合せが含まれます。たとえば、テントについての販促は行うがスキーについては行わないという場合、コンポジットにはテントと地域の組合せは含まれますが、スキーと地域の組合せは含まれません。
次の文で、ベース・ディメンションがproduct
およびdistrict
であるproddist
というBツリー・コンポジットと、month
およびproddist
でディメンション化されたpromo
という変数が作成されます。
DEFINE proddist COMPOSITE <product region> DEFINE promo VARIABLE INTEGER <month proddist <product district>>
わかりやすくするために、アナリティック・ワークスペースには次のディメンション・データのみが格納されているとします。
PRODUCT -------------- Tents Skis REGION -------------- Northeast Southwest MONTH -------------- Jan2003 Feb2003 Mar2003 Apr2003 May2003 Jun2003 Jul2003 Aug2003 Sep2003 Oct2003 Nov2003 Dec2003
2003年9月にNortheast地域において、$5,000の経費でスキーの販促セールを実施することにしたとします。この内容でpromo
を移入した後、promo
のセルは12セルのみで、各セルは、month
の値、およびproddist
についての<'Skis' 'Northeast'>
のコンポジット・タプル値によりディメンション化されています。2003年9月のセルは値$5,000を含み、他のすべてのセルはNA
を含みます。promo内には、これ以外のNA値はなく、product
またはregion
の他の値について、セルは作成されません。
例9-104 NULLトラッキングを持つ変数の定義
アナリティック・ワークスペースに次のオブジェクトが定義されているとします。
DEFINE GEOG DIMENSION TEXT LD A dimension with a simple hierarchy for geography DEFINE geog_levellist DIMENSION TEXT LD List of Levels in in the hierarchy of the geog dimension DEFINE GEOG_PARENTREL RELATION GEOG <GEOG> LD Self-relation for geog showing parents of each value in the hierarchy DEFINE GEOG_LEVELREL RELATION GEOG_LEVELLIST <GEOG> LD Level of each dimension member for geog DEFINE product DIMENSION TEXT LD A nonhierarchical dimension DEFINE time DIMENSION TEXT LD A hierarchical text dimension for time DEFINE time_levellist DIMENSION TEXT LD List of Levels in hierarchy of the time dimension DEFINE time_parentrel RELATION time <time> LD A self-relation for time show parents of each value in the hierarchy DEFINE TIME_LEVELREL RELATION TIME_LEVELLIST <TIME> LD Level of each dimension member for time DEFINE prod_geog COMPOSITE <product geog> COMPRESSED
ここで、time
およびprod_geog
コンポジットによりディメンション化しておく必要があるsales
変数を定義するとします。この変数は、最終的にSQL IMPORTを使用して移入することになりますが、ファクト表内の一部のファクトにはNULL値が含まれていることがわかっているため、この変数にはNULLトラッキングを含める必要があります。そのためには、WITH NULLTRACKING句が指定された次のような文を発行します。
DEFINE sales VARIABLE DECIMAL <time prod_geog<product geog>> WITH NULLTRACKING
テスト用に、RANDOMファンクションを使用してこの変数を移入します。変数の移入を行ったら、レポートを発行して変数内のNA値を表示します。
REPORT DOWN time ACROSS geog: sales PRODUCT: TVs -----------------------SALES----------------------- -----------------------GEOG------------------------ TIME Boston Springfield Hartford All Places -------------- ------------ ------------ ------------ ------------ 2007 NA NA NA NA 2008 NA NA NA NA All years NA NA NA NA Jan07 NA NA NA NA Feb07 NA NA NA NA Mar07 NA NA NA NA Apr07 NA NA NA NA May07 NA NA NA NA Jun07 NA NA NA NA Jul07 NA NA NA NA Aug07 NA NA NA NA Sep07 NA NA NA NA Oct07 NA NA NA NA Nov07 NA NA NA NA Dec07 NA NA NA NA Jan08 NA NA NA NA Feb08 NA NA NA NA Mar08 NA NA NA NA Apr08 NA NA NA NA May08 NA NA NA NA Jun08 NA NA NA NA Jul08 NA NA NA NA Aug08 NA NA NA NA Sep08 NA NA NA NA Oct08 NA NA NA NA Nov08 NA NA NA NA Dec08 NA NA NA NA PRODUCT: Radios -----------------------SALES----------------------- -----------------------GEOG------------------------ TIME Boston Springfield Hartford All Places -------------- ------------ ------------ ------------ ------------ 2007 NA NA NA NA 2008 NA NA NA NA All years NA NA NA NA Jan07 24.59 23.70 33.12 28.65 Feb07 22.78 21.42 26.28 37.06 Mar07 25.74 32.08 22.75 24.62 Apr07 22.23 23.21 20.79 28.68 May07 20.51 29.71 30.35 33.05 Jun07 34.43 35.96 33.85 39.34 Jul07 24.86 38.02 36.78 31.22 Aug07 39.05 21.08 35.80 33.81 Sep07 34.38 21.69 25.04 33.40 Oct07 33.82 39.27 20.28 24.39 Nov07 25.48 23.03 32.45 39.94 Dec07 25.14 30.66 33.75 23.37 Jan08 NA NA NA NA Feb08 NA NA NA NA Mar08 NA NA NA NA Apr08 NA NA NA NA May08 NA NA NA NA Jun08 NA NA NA NA Jul08 NA NA NA NA Aug08 NA NA NA NA Sep08 NA NA NA NA Oct08 NA NA NA NA Nov08 NA NA NA NA Dec08 NA NA NA NA
同じくテスト用に、NAFLAGファンクションを使用してレポートを生成し、変数内のNAのタイプを取得します。次のレポートからわかるように、RANDOMを使用して変数の移入が行われたため、NAはすべて通常のNA値であって、NA2値ではありません。
REPORT DOWN time ACROSS geog: NAFLAG(sales) PRODUCT: TVs -------------------NAFLAG(SALES)------------------- -----------------------GEOG------------------------ TIME Boston Springfield Hartford All Places -------------- ------------ ------------ ------------ ------------ 2007 1 1 1 1 2008 1 1 1 1 All years 1 1 1 1 Jan07 1 1 1 1 Feb07 1 1 1 1 Mar07 1 1 1 1 Apr07 1 1 1 1 May07 1 1 1 1 Jun07 1 1 1 1 Jul07 1 1 1 1 Aug07 1 1 1 1 Sep07 1 1 1 1 Oct07 1 1 1 1 Nov07 1 1 1 1 Dec07 1 1 1 1 Jan08 1 1 1 1 Feb08 1 1 1 1 Mar08 1 1 1 1 Apr08 1 1 1 1 May08 1 1 1 1 Jun08 1 1 1 1 Jul08 1 1 1 1 Aug08 1 1 1 1 Sep08 1 1 1 1 Oct08 1 1 1 1 Nov08 1 1 1 1 Dec08 1 1 1 1 PRODUCT: Radios -------------------NAFLAG(SALES)------------------- -----------------------GEOG------------------------ TIME Boston Springfield Hartford All Places -------------- ------------ ------------ ------------ ------------ 2007 1 1 1 1 2008 1 1 1 1 All years 1 1 1 1 Jan07 0 0 0 0 Feb07 0 0 0 0 Mar07 0 0 0 0 Apr07 0 0 0 0 May07 0 0 0 0 Jun07 0 0 0 0 Jul07 0 0 0 0 Aug07 0 0 0 0 Sep07 0 0 0 0 Oct07 0 0 0 0 Nov07 0 0 0 0 Dec07 0 0 0 0 Jan08 1 1 1 1 Feb08 1 1 1 1 Mar08 1 1 1 1 Apr08 1 1 1 1 May08 1 1 1 1 Jun08 1 1 1 1 Jul08 1 1 1 1 Aug08 1 1 1 1 Sep08 1 1 1 1 Oct08 1 1 1 1 Nov08 1 1 1 1 Dec08 1 1 1 1
再びテスト用に、NAファンクションを使用して、2008年の月でディメンション化された変数のセルにNA2ビットを設定します。次のコードは、NA2ファンクションのSHOWを発行し、そのファンクションを使用して、2008年の月でディメンション化された変数のセルにNA2ビットを設定した結果を示したものです。
SHOW NA2 NA LIMIT time TO 'Jan08' 'Feb08' 'Mar08' 'Apr08' 'May08' 'Jun08' 'Jul08' 'Aug08' 'Sep08' 'Oct08' 'Nov08' 'Dec08' saleswithnull= NA2
状況を単純化して、ここでは次の3つのLIMIT文を発行し、sales変数およびsales変数に対するNAFLAGファンクションについてのレポートを表示するというテストを行います。NAFLAGレポートに示されているように、NA2値が割り当てられている月の値Jan08
では、NAFLAGに対する値として2
が返されており、年2008
では値1
が返されています。
LIMIT product to 'Radios' LIMIT time TO 'Jan08' '2008' LIMIT geog TO 'Boston' 'All Places' REPORT DOWN time ACROSS geog: sales PRODUCT: Radios ----------SALES---------- ----------GEOG----------- TIME Boston All Places -------------- ------------ ------------ Jan08 NA NA 2008 NA NA REPORT DOWN time ACROSS geog: NAFLAG(sales)
PRODUCT: Radios ------NAFLAG(SALES)------ ----------GEOG----------- TIME Boston All Places -------------- ------------ ------------ Jan08 2 2 2008 1 1
ここで、次のコードを発行してsales変数からNA2ビットを削除するとします。
CHGDFN sales DROP NULLTRACKING
sales変数のDESCRIBEでは、その定義の中にWITH NULLTRACKING句がないことが示されており、NAFLAGの結果のレポートでは、現在のNA値がNA2ビットを持たない通常のNA値であることが示されています。
DESCRIBE sales DEFINE SALES VARIABLE DECIMAL <TIME PROD_GEOG <PRODUCT GEOG>> REPORT DOWN time ACROSS geog: sales PRODUCT: Radios ----------SALES---------- ----------GEOG----------- TIME Boston All Places -------------- ------------ ------------ Jan08 NA NA 2008 NA NA "Report on the type of NA values in the sales variable REPORT DOWN time ACROSS geog: NAFLAG(sales) PRODUCT: Radios ------NAFLAG(SALES)------ ----------GEOG----------- TIME Boston All Places -------------- ------------ ------------ Jan08 1 1 2008 1 1
DEFINEコマンドとともにWORKSHEETキーワードを使用すると、アナリティック・ワークスペースに新しいワークシート・オブジェクトが追加されます。ワークシートは、スプレッドシートと同様に、ワークシート行とワークシート列でディメンション化された2次元のオブジェクトです。スプレッドシート・パッケージとワークスペース・ディメンションおよび変数との間で転送する必要のあるデータを、一時的に保存できます。
ワークシートを最初に定義した時点では、ワークシートに値は含まれていません。既存のスプレッドシートからワークシートに値を移入するには、IMPORT(スプレッドシート)文を使用でき、MAINTAIN文を使用すると、ワークシート行およびワークシート列のディメンションに対して値の追加や削除を行うことができます。
パラメータ
定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。
ワークシートを定義するときのオブジェクト型。
ワークシートのディメンションの名前。この引数を指定する場合は、column-dimおよびrow-dimに2つのINTEGER
ディメンションの名前を指定する必要があります。この引数を指定しない場合は、ワークシートは自動でWKSCOL
およびWKSROW
でディメンション化されます。詳細は、「ワークシート・ディメンション」を参照してください。
ワークシートが一時的であることを示します。ワークシートは指定されたワークスペース内に定義され、現行のセッションの間のみ値を保持できます。ただし、更新およびコミットすると、ワークシートの定義は保存されます。セッションを終了するか、別のワークスペースに切り替えると、データ値は廃棄されます。
ワークシートを定義する先の、アタッチされたワークスペースの名前。ワークシートは、そのディメンションと同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。
オブジェクトを現行のセッションでのみ存在させることを指定します。セッションの終了時に、オブジェクトは廃棄されます。SESSIONで指定される動作は、TEMPキーワードで指定される動作とは異なり、TEMPキーワードでは値は一時的ですが、オブジェクト定義は作成したワークスペースに保存されます。
使用上の注意
ワークシート・ディメンション
ワークシートは常に、ワークシートの行と列を表す2つのディメンションによりディメンション化される必要があります。ワークシート行およびワークシート列のディメンションは、Oracle OLAPにより自動で作成することも、明示的に作成することもできます。
ワークシート行ディメンションおよびワークシート列ディメンションを作成して名前をDEFINE WORKSHEETのcolumn-dimおよびrow-dim引数に指定しない場合は、Oracle OLAPにより、自動で次のディメンションが作成されます。
ワークシート行のための、1から63までの値を持つWKSROW
というINTEGERディメンション
ワークシート列のための、1から63までの値を持つWKSROW
というINTEGERディメンション
注意: アタッチされているいずれかのワークシートにWKSCOL およびWKSROW がすでに存在する場合、Oracle OLAPは、現行のワークシート内にこれらを作成できません。この場合、DEFINE WORKSHEETコマンドは、これらのデフォルト・ディメンションを使用するワークシートの作成に失敗します。(また、WKSCOL とWKSROW は、DESCRIBEによって生成されたワークシートの説明には表示されないことに注意してください。) |
ワークシート行およびワークシート列のディメンションは、他の単純なディメンションを作成する場合と同じように、次の文を発行することで作成できます。
DEFINE DIMENSION(単純)文を使用して、2つの単純なINTEGERディメンションを作成します。一方のディメンションは行数、もう一方は列数を表します。
MAINTAIN文を使用して、行数を表す整数を持つディメンションと列数を表す整数を持つもう1つのディメンションを移入します。
例
例9-105 ワークシートの定義
これらの文により、columns
およびrows
でディメンション化された、travelexp
という一時ワークシートが定義されます。
DEFINE itemsheet WORKSHEET DEFINE columns INT DIMENSION MAINTAIN columns ADD 5 DEFINE rows INT DIMENSION MAINTAIN rows ADD 10 DEFINE travelexp WORKSHEET <columns rows> TEMPORARY
例9-106 スプレッドシート・データのインポート
スプレッドシートからワークシートへデータをインポートできます。すべてのセルが同じ型のデータを含む場合は、UNRAVELを使用して、1つの文でデータを変数へ転送できます。ワークシート・ディメンションをセルの小さいグループに制限し、UNRAVELを使用して各グループを個別の変数に転送することもできます。インポートしたデータをitemsheet
というワークシートからitems
という変数へ転送するには、次の文を使用できます。
DEFINE itemsheet WORKSHEET IMPORT itemsheet FROM dif FILE 'file name' LIMIT WKSCOL TO FIRST 3 LIMIT WKSROW TO FIRST 10 items = UNRAVEL(itemsheet)