ヘッダーをスキップ
Oracle® OLAP DMLリファレンス
11gリリース2 (11.2)
B61346-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

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文を使用して、後で説明を追加することもできます)。(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...>] [TEMP] [AW workspace] [SESSION]

パラメータ

name

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

VALUESET

値セットを定義するときのオブジェクト型。

dimension

値セットに保存する値が格納されている、事前定義されたディメンションの名前。

dims

多次元の値セットを定義する際の、当該値セットのディメンション化に使用する事前定義済ディメンションの名前。

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)