ヘッダーをスキップ
Oracle OLAP DMLリファレンス
11g リリース1(11.1)
E05732-02
  目次へ
目次
索引へ
索引

戻る
戻る
 
次へ
次へ
 

LIMITコマンド

LIMITコマンドは、ディメンションおよびそのディメンション・サロゲートの現行のステータス・リストの設定や、値セットに値を代入するコマンドです。LIMITは、ディメンションのデータの範囲を一時的に制限し、制限したデータ値で作業を行うために使用します。LIMITを使用すると、ディメンションの現行のステータス・リストを作成できます。ディメンションの現行のステータス・リストとは、そのディメンションで現在アクセス可能な値を順序付けしたリストです。ディメンションの現行のステータス・リストに存在する値は、「ステータスにある」と言われます。ディメンション・ステータスの詳細およびアナリティック・ワークスペースのデータで作業する際のステータスの重要性の詳細は、「OLAP DML処理対象のデータセットの指定方法」を参照してください。


ヒント:

コンポジット、結合ディメンション、連結ディメンション、またはパーティション・テンプレートの1つ以上のベース・ディメンションの現行のステータス・リストの設定を、そのオブジェクトに対して選択された値に基づいて行います(LIMIT BASEDIMSを参照)。

構文

LIMIT {dimension | valueset} [concat-component] limit-type [limit-clause] [IFNONE label]

limit-typeは、Oracle OLAPによる現行のステータス・リストの変更方法を指定する、次のキーワードのいずれかになります。

TO
ADD
INSERT [FIRST|LAST|BEFORE position|AFTER position]
KEEP
REMOVE
KEEP REORDER
COMPLEMENT
SORT [NAFIRST]

引数

dimension

ステータスが設定されるディメンションまたはディメンション・サロゲートの名前。

valueset

値が代入される値セットの名前。

concat-component

制限に使用する値の連結ディメンションのコンポーネントの名前を指定します。concat-componentに値を指定すると、指定した連結ディメンションのステータスが、その連結ディメンションのコンポーネントであるdimensionの値で制限されます。このlimit-clauseは、dimensionが連結ディメンションの場合にのみ適用されます。連結ディメンションのステータスとそのコンポーネントのディメンションのステータスは、共有されません。連結ディメンションのステータスを設定する際に、コンポーネントのディメンションをlimit-clauseとして使用した後、そのディメンションのステータスを変更した場合、連結ディメンションのステータスは変更されません。

TO

ディメンションのステータスまたは値セットのステータスを、limit-clause引数で指定した値で置換します。TOキーワードの値は、LIMIT文に指定する順序またはvaluelist引数によって暗黙的に指定される順序で、ディメンションのデフォルト・ステータスから選択されます。順序を暗黙的に指定する引数を使用した場合、値の順序はデフォルト・ステータス内における値の位置に基づきます。

ADD

ステータスに存在していない値をlimit-clause引数で指定して追加することによって、ディメンションのステータスまたは値セットのステータスを拡張します。ADDキーワードの値は、LIMIT文に指定する順序またはvaluelist引数によって暗黙的に指定される順序で、ディメンションのデフォルト・ステータスから選択されます。順序を暗黙的に指定する引数を使用した場合、値の順序はデフォルト・ステータス内における値の位置に基づきます。ADDによって、一意のディメンション値は、現行のステータス・リストまたは値セット・リストの最後に指定された順序で追加されます。

INSERT

現行のステータス内の指定した位置に値をlimit-clause引数で指定して挿入することによって、ディメンションまたは値セットのステータスを拡張します。INSERTキーワードの値は、LIMIT文に指定する順序またはvaluelist引数によって暗黙的に指定される順序で、ディメンションのデフォルト・ステータスから選択されます。

順序を暗黙的に指定する引数(value1 TO value2など)を使用した場合、値の順序はデフォルト・ステータス内における値の位置に基づきます。INSERTは、現行のステータス内の指定された位置に値を追加します。追加する値がすでにステータスにある場合は、その値は現行のステータスにある位置から削除され、値リストにある順序で追加されるので、追加する値の順序は維持されます。

FIRST

ステータスにある最初の値の前に新しい値を挿入します。

LAST

ステータスにある最後の値の後に新しい値を挿入します。

BEFORE
AFTER

新しい値を現行のステータス内のpositionの前または後に挿入することを指定します。

position

現行のステータス内のディメンション値、現行のステータス内のディメンション値を値とする文字式、またはデフォルト・ステータス内のディメンション値の位置を表すINTEGER式。

KEEP

limit-clause引数で指定した値を維持したままディメンションのステータスまたは値セットのステータスを削減します。Oracle OLAPでは、値の選択は、現行のディメンション・ステータスに基づいて行われます。KEEPによってステータス内に残される値は、現行の値順序で維持されます。

KEEP REORDER

KEEP REORDERはKEEPと同様、limit-clause引数で指定した値を維持したままディメンションのステータスまたは値セットのステータスを削減します。Oracle OLAPでは、値の選択は、現行のディメンション・ステータスに基づいて行われます。ただしKEEP REORDERでは、現行のステータスの順序ではなく、選択した引数(つまりlimit-clause引数)の順序で結果が並び替えられます。

REMOVE

limit-clause引数で指定した値を削除してディメンションのステータスまたは値セットのステータスを削減します。Oracle OLAPでは、値の選択は、現行のディメンション・ステータスに基づいて行われます。KEEPによってステータス内に残される値は、現行の値順序で維持されます。

COMPLEMENT

ディメンションのステータスまたは値セットのステータスを、limit-clause引数で指定していない値で置換します。COMPLEMENTの後に引数を指定しない場合、ステータスは、現在ステータスに存在しないすべての値で置き換えられます。Oracle OLAPでは、値の選択は、現行のディメンション・ステータスに基づいて行われます。COMPLEMENTでは、ディメンション値はデフォルトの順序のまま維持されます(省略形はCOMP)。

SORT

limit-clause引数に基づいてディメンションまたは値セットの値をソートします。LIMITでは、limit-clause引数に基づいた一時的な値リストを作成し、このリストを使用して現行のステータス・リストをソートします。一時リスト内に存在しない値はすべて現行のステータス・リストの最後に移動されます。

NAFIRST

NA値が、ソートされたリストの最後でなく最初に配置されます。

limit-clause

制限に使用する値を指定します。この構文は複雑なため、次のトピックに分けて説明します。

LIMITコマンド(値を使用)
LIMITコマンド(LEVELRELを使用)
LIMITコマンド(関連ディメンションを使用)
LIMITコマンド(親リレーションを使用)
LIMITコマンド(NOCONVERTを使用)
LIMITコマンド(POSLISTを使用)
IFNONE

(OLAP DMLプログラム内でのみ使用)要求されたステータスが、NULLステータスであるか、NULLステータスの関連ディメンション(つまり、値のない関連ディメンション)に基づく場合、プログラムの実行をlabelに分岐することを指定します。いずれの場合も、プログラムの実行が分岐すると、NULLステータスは適用されません。かわりに、LIMIT文が実行される前の元のステータスが維持されます。これは、OKNULLSTATUSがYESの場合も同様です。1つのOLAP DMLプログラム内で、同じ文にIFNONEおよびNULLの両方は使用できません。

label

「ラベルの構成のガイドライン」に従って構成された、プログラム中の他の位置にあるラベルの名前。プログラムの実行は、指定したラベルの直後の行に分岐します。

IFNONEで指定するlabelの後にはコロンを付けないでください。ただし、プログラムの他の位置にある実際のラベルの後にはコロンを付けます。

注意

連結ディメンションの値の指定

一意でない連結ディメンションの値を指定するには、次の構文を使用します。

<base-dimension: value>

デフォルトのステータス・リスト

アナリティック・ワークスペースを最初にアタッチする場合、各ディメンションの現行のステータス・リストは、値が格納されている順で読取り権限を持つディメンションのすべての値によって構成されます。この値のリストは、ディメンションのデフォルトのステータス・リストと呼ばれています。

一意の値

LIMITでは、ディメンションの一意の値のみが選択されます。値がLIMIT文内に2回以上指定されている場合、その値は、最初に指定された位置でステータスに配置されます。たとえば、次のような行があるとします。

LIMIT time TO 'Jan97', 'Feb97', 'Jan97'
STATUS time


生成される出力は次のとおりです。

The current status of TIME is:
JAN97, FEB97

存在しない値

Oracle OLAPでは、存在しない値を明示的にリストしないかぎり、値を持たないディメンションや値セットのステータスを設定しようとした場合、エラーは表示されません。たとえば、新しく定義したディメンションWEEKに値を何も追加しなかったとします。この場合、文LIMIT week TO FIRST 10を実行してもエラーになりません。しかし、LIMIT week TO 'Pete'の場合は、Peteが値ではないため、エラーになります。同様に、LIMIT week TO 20の場合も、weekには位置20に値がないため、エラーになります。

ディメンションまたは値セットのステータスのNULLへの設定

Oracle OLAPでは、NULLステータスを許可することを明示的に指定した場合にのみ、ディメンションまたは値セットのステータスをNULL(空のステータス)に設定できます。これを許可するには、次の2つの方法があります。

これらのいずれの方法でもNULLステータスを許可していない状態で、結果としてNULLステータスとなるLIMIT文を実行しても、Oracle OLAPでは、文の実行時にステータスはNULLに変更されません。かわりに、Oracle OLAPでは、ステータスは文の実行前のステータスのまま維持され、エラーが表示されるか(IFNONEが存在しない場合)、IFNONEラベルへの分岐が実行されます(IFNONEが存在する場合)。

IFNONE引数は、ディメンションのステータスがNULLに設定された場合、プログラムの実行が通常どおりに処理されないことを示します。したがって、IFNONEが存在すると、OKNULLSTATUSがYESの場合でもIFNONEラベルへの分岐が実行され、ステータスはNULLに設定されません。IFNONEとNULLキーワードがどちらも存在する場合、Oracle OLAPでは、エラーによって非一貫性が通知されます。

IFNONEでは、非構造化プログラミング技術の使用が必須です。現在、Oracle OLAPでは、それにかわる別の構造化技術を提供しているため、IFNONEの使用は推奨されていません。IFNONEは、Oracle OLAPの以前のリリースとの互換性のために残された機能です。

結合の制限

結合ディメンションを値リストに制限するには、次の構成を使用します。










連結ベース・ディメンションを持つ結合ディメンションを制限する方法の例は、例10-25「連結ベース・ディメンションを使用した結合ディメンションの制限」を参照してください。

連結の制限

単純なディメンション、結合ディメンションおよび他の連結ディメンションを連結のベース・ディメンションとして使用して、連結ディメンションを定義できます。連結ディメンションをその値の1つに制限するための構文は、次のとおりです。

LIMIT concatdim TO <base-dim: value>

たとえば、連結ディメンションreg.dist.ccdimが、そのベース・ディメンションとして単純なディメンションregiondistrictを持つとします。次の文によって、reg.dist.ccdimのステータスはregion: Eastdistrict: Atlantaの2つの値に設定されます。

LIMIT reg.dist.ccdim TO <region: 'East'> <district: 'Atlanta'>

連結ディメンションのステータスを設定する他の方法は、例10-16「連結ディメンションの制限」を参照してください。

IFNONEラベルを使用した分岐の代替処理

IFNONEラベルへ分岐するかわりに、OKNULLSTATUSオプションを使用してディメンションのNULLステータスを処理することもできます。OKNULLSTATUSをYESに設定すると、ディメンションのステータスをNULLへ設定できるようになります。その後、NULLステータスを確認してからIF...THEN...ELSEコマンド文で適切なコマンドを実行するか、SWITCHコマンド文のケースの1つとしてNULLステータスを処理できます。

OKNULLSTATUS = YES
LIMIT month TO sales GT salesnum
IF STATLEN(month) LT 1
   THEN GOTO showerr

例10-14 値の追加と削除

次の行によって、monthディメンションのステータスに値を追加します。

LIMIT month TO 'Jan96' TO 'Jun96'
LIMIT month ADD 'Jul96' 'Sep96'

STATUS month文を発行すると、次の出力が生成されます。

The current status of MONTH is:
Jan96 TO Jul96, Sep96

次の行によって、monthディメンションのステータスから値を削除します。

LIMIT month REMOVE 'Jan96' TO 'Mar96'

STATUS month文を発行すると、次の出力が生成されます。

The current status of MONTH is:
Apr96 TO Jul96, Sep96

例10-15 ディメンション・サロゲートを使用した制限

ディメンションとそのディメンション・サロゲートは、同じステータスを共有します。

たとえば、store_idというNUMBERディメンションがあるとします。このディメンションには値25410150205310および10があります。また、このディメンションは、store_idのINTEGERディメンション・サロゲートstoreposを使用します。ディメンション・サロゲートstoreposには値12345および6があります。store_idのTEXTディメンション・サロゲートはstorenameです。このディメンション・サロゲートには、テキスト値Raoul's - BostonPoldy's PotpourriMolly's EmporiumRaoul's - AtlantaKinch's Kitchen SuppliesおよびRaoul's - Chicagoがあります。次のすべての文は等価です。

LIMIT store_id TO 25 410 150
LIMIT store_id TO storepos 1 2 3
LIMIT storepos TO 1 TO 3
LIMIT storepos TO first 3
LIMIT storename TO first 3
LIMIT storename TO 'Raoul\'s - Boston' TO 'Molly\'s Emporium'
LIMIT store_id TO storename storepos 1 2 3
LIMIT storename TO store_id 25 TO 150

次の文では、store_idのTEXTディメンション・サロゲートであるstorenameを制限することで、store_idディメンションのステータスを設定し、store_idの値をレポートします。

LIMIT storename TO 'Raoul\'s Sweets' TO 'Henry\'s Flowers'
REPORT store_id

この文によって生成される出力は、次のとおりです。

STORE_ID
--------------
10
20
30

例10-16 連結ディメンションの制限

次の例では、連結ディメンションreg.dist.ccdimが、そのベース・ディメンションとして単純なディメンションregiondistrictを持つとします。連結ディメンションとコンポーネントの各ディメンションとの間には暗黙的なリレーションが存在します。

  • 次の文では、関連ディメンションの構文を使用し、コンポーネントの(関連)ディメンションの位置を指定して、連結ディメンションのステータスを設定します。

    LIMIT reg.dist.ccdim TO district 1, 4, 5
    

    STATUS reg.dist.ccdim文を発行すると、次の出力が生成されます。

    The current status of REG.DIST.CCDIM is:
    <DISTRICT: BOSTON>, <DISTRICT: DALLAS>, <DISTRICT: DENVER>
    
  • 次の文では、連結ディメンションを直接、連結ディメンションの位置で指定した値に制限します。

    LIMIT reg.dist.ccdim TO 1, 4, 5
    

    STATUS reg.dist.ccdim文を発行すると、次の出力が生成されます。

    The current status of REG.DIST.CCDIM is:
    <REGION: EAST>, <DISTRICT: BOSTON>, <DISTRICT: ATLANTA>
    
  • 次の文では、まずdistrictのステータスを設定してから、reg.dist.ccdimdistrictのステータスに制限します。

    LIMIT district TO LAST 3
    LIMIT reg.dist.ccdim TO district
    

    REPORT reg.dist.ccdim文を発行すると、次の出力が生成されます。

    REG.DIST.CCDIM
    ----------------------
    <district: Dallas>
    <district: Denver>
    <district: Seattle>
    
  • 次の文では、limit-clause引数は連結ディメンションの値のリストです。

    LIMIT reg.dist.ccdim TO <region: 'East'> <district:  'Boston'> <district: 'Atlanta'>
    
  • 次の文では、reg.dist.ccdimの値セットを定義して、値セットに連結ディメンションの現行のステータスを格納し、連結のステータスをALLにリセットしてから、連結を値セットに制限して、ステータスにある連結の値をレポートします。

    DEFINE regdist.vset VALUESET reg.dist.ccdim
    LIMIT regdist.vset TO reg.dist.ccdim
    LIMIT reg.dist.ccdim TO ALL
    LIMIT reg.dist.ccdim TO regdist.vset
    RPR W 22 reg.dist.ccdim
    

    この文によって生成される結果は、次のとおりです。

    REG.DIST.CCDIM
    ----------------------
    <region: East>
    <district: Boston>
    <district: Atlanta>
    

連結ディメンションを、そのコンポーネントのディメンションの値セットを使用して制限することもできます。

  • 複数のコンポーネントのディメンションに同一の値が含まれている場合、連結ディメンションをそれらの値に制限するにはブール式を使用します。districtregionの両方のディメンションに値New Yorkが存在する場合、reg.dist.ccdimをこれらの値に制限するには次の文を使用します。

    LIMIT reg.dist.ccdim TO BASEVAL(reg.dist.ccdim) EQ 'New York'
    
  • 次の例では、連結ディメンションgeogが、そのベース・ディメンションとして単純なディメンションregionと結合ディメンションcityandstateを持つとします。次の文で、結合ベース・ディメンションを制限して連結ディメンションのステータスを設定します。

    LIMIT geog TO cityandstate <'Princeton' 'New Jersey'> -
       <'Patterson' 'New Jersey'>
    

    STATUS geog文を発行すると、次の出力が生成されます。

    The current status of GEOG is:
    <CITYANDSTATE: <PRINCETON, NEW JERSEY>, <CITYANDSTATE: <PATTERSON, NEW JERSEY>>
    
  • 次の文では、結合ディメンションのベース・ディメンションの値を指定することで結合ベース・ディメンションを制限し、連結ディメンションのステータスを設定します。

    LIMIT geog TO cityandstate city 'Princeton'
    RPR W 30 geog
    

    この文によって生成される出力は、次のとおりです。

    GEOG
    ------------------------------
    <cityandstate: <Princeton, New Jersey>>
    <cityandstate: <Princeton, Indiana>>
    

例10-17 ワークシートを使用した制限

この例では、ディメンションをワークシートの列に含まれる値に制限する方法を示します。ここでは、ディメンションmonthをワークシートworkitemの最初の列に含まれている値に制限します。次の文によって、その下に示されているworkitemレポートが生成されます。

LIMIT month TO ALL
LIMIT wkscol TO 1
LIMIT wksrow TO workitem NE NA
REPORT workitem
               -WORKITEM-
               --WKSCOL--
WKSROW             1
-------------- ----------
             1 Jan96
             2 Feb96
             3 Mar96
             4 Apr96
             5 May96
             6 Jun96
             7 Jul96
             8 Aug96
             9 Sep96
            10 Oct96
            11 Nov96
            12 Dec96

次の文で、monthディメンションをworkitemの最初の列にリストされている値に制限します。

LIMIT month TO CHARLIST(workitem)

STATUS month文を発行すると、次の出力が生成されます。

The current status of MONTH is:
Jan96 TO Dec96

例10-18 LIMITでのアンパサンド置換の使用

product.rptというプログラムで、正確に2つの製品を指定する必要があるとします。この場合、2つのdimension-value引数を宣言してそれらを処理することも可能です。しかし、LIMITコマンドを使用して任意の数の製品を指定する場合は、単一の引数でアンパサンド置換を使用します。

プログラム内で次のコマンドを使用するとします。

ARGUMENT natext TEXT
ARGUMENT widthamt INTEGER
ARGUMENT rptprod TEXT
    ...
LIMIT product TO &rptprod

プログラムを実行して、レポートに最初の3つの製品を表示するように指定します。

CALL product.rpt ('Missing' 8 'first 3')

first 3をスペースで区切られた2つの別個の引数ではなく、単一の引数として扱うように指定するには、一重引用符で囲むことが必要です。アンパサンドによって、LIMITコマンドは'first 3'を、ディメンション値ではなくキーワード式として解釈します。

例10-19 NULLステータスの場合の分岐

売上数量が500を超える製品のみを含めるように、プログラムでproductディメンションのステータスを設定または絞込みするとします。IFNONEキーワードを使用して、売上数量が500を超える製品がない場合はプログラムの実行をnovalsラベルへ分岐するように指定します。

LIMIT product KEEP units GT 500 IFNONE novals

novalsラベルに続くコマンドで、売上数量が500を超える製品がないという特別な状況に対処できます。


LIMITコマンド(値を使用)

LIMITコマンドで値の制限句を使用すると、値が値セットに代入されるか、単一のディメンションまたは複数のディメンション・サロゲートの現行のステータス・リストが次のように設定されます。

構文

LIMIT {dimension | valueset} [concat-component] limit-type -

     {inclusive-val-args....| exclusive-val-args} [IFNONE label]

ここで、

引数

dimension

ステータスが設定されるディメンションまたはディメンション・サロゲートの名前。

valueset

値が代入される値セットの名前。

concat-component

制限に使用する連結ディメンションのコンポーネントの名前(この引数の詳細な説明は、LIMITコマンドを参照)。

limit-type

Oracle OLAPによる現行のステータス・リストの変更方法を指定するキーワード(これらのキーワードのリストおよび説明は、LIMITコマンドを参照)。

intvaluelist

1つ以上のINTEGER値のリスト、または数値を保持する単一セル変数の名前のリスト。各値はカンマ(,)で区切ります。小数桁のある数値(SHORTDECIMAL値またはDECIMAL値)は、ディメンション値として使用される前に自動でINTEGER値に切り捨てられます。INTEGERは、ディメンション値全体における論理位置によってディメンション値を指定します。NUMBERディメンションの値はINTEGER位置では指定できません。NUMBERディメンションの値がINTEGER値の場合は、intvalue1intvalue2などにディメンション値を指定することでディメンションのステータスを設定できます。

text-expression

各行がディメンションの値である複数行のテキスト式。

value1TOvalue2

ディメンション値の範囲を指定します。value1およびvalue2は、ディメンション値またはINTEGERのいずれかです。範囲は、昇順(1から10までなど)または降順(10から1までなど)のどちらでも指定できます。これに従ってディメンションまたは値セットのステータスが割り当てられます。NUMBERディメンションの値は、INTEGER位置で指定できません。かわりに、NUMBERディメンションのINTEGERディメンション・サロゲートを定義して、サロゲートの位置でディメンションを制限できます。

valuelist

ディメンションの1つ以上の値のリスト。ディメンション値は、有効なディメンション値のテキスト式として指定できます。NUMBERディメンションの場合は、ディメンション値は数値です。DAY、WEEK、MONTH、QUARTER、YEAR型のディメンションの場合は、ディメンション値はDATE式として指定できます。

valueset

ステータスを設定するディメンションの値を含む保存済のリストであるアナリティック・ワークスペースの値セット・オブジェクト。ディメンション・サロゲートに対して値セットは定義できません。したがって、ディメンション・サロゲートのステータスを設定する場合、値セットは指定できません。ただし、ディメンションを値セットで制限すると、そのディメンションのディメンション・サロゲートも自動で同じ値セットに制限されます。

ALL

デフォルトのステータス内にあるすべてのディメンション値をステータスに含めることを指定します。デフォルトのステータスは、読取り権限が付与されているすべてのディメンション値で構成されます。これらのディメンション値は、ディメンションを前回メンテナンスしたときと同じ順序で配置されています。アナリティック・ワークスペースを起動した時点では、アナリティック・ワークスペース内の各ディメンションのステータスはデフォルトのステータスです。PERMIT文またはPERMITRESET文でディメンションに対する読取り権限を変更すると、そのディメンションのデフォルトのステータスも変更されます。

boolean-expression

ディメンションまたはステータスを制限する際にOracle OLAPによってそのTRUE値が使用される式。boolean-expressionは、ステータスを設定するディメンションによってディメンション化されている必要があります。ディメンション・サロゲートの場合、ブール式はサロゲートの作成元のディメンション全体で評価されます。ブール式で比較する各式のデータ型は、同様のものである必要があります。データ型の変換の詳細は、CONVERTファンクションを参照してください。LIMITでブール式を正しく使用するには、LIMITコマンドが複数のディメンションを持つブール式をどのように処理するかを理解する必要があります。詳細は、「LIMITによる複数のディメンションで使用するブール式の処理」を参照してください。

BOTTOM  n BASEDON expression
TOP n BASEDON expression

ディメンションまたは値セットのステータスを基準に基づいて設定することを指定します。このとき、nは選択する値の数で、expressionは選択のための基準です。ステータスを設定するディメンションを除き、expressionのディメンションはすべて単一の値で制限されている必要があります。TOPを指定するとステータスが降順で格納され、BOTTOMを指定するとステータスが昇順で格納されます。BASEDONキーワードの後にコンポジットは使用できません。コンポジットを使用すると、エラー・メッセージが表示されます。

BOTTOM n-percent PERCENTOF expression
TOP n-percent PERCENTOF expression

式で表された基準に基づく最上位または最下位の検索をし、ディメンションまたは値セットのステータスを設定するように指定します。この構成では、値は式に対する占有率に基づいてソートされ、ステータスに追加されます。

たとえば、次の文では、製品がTOTAL(sales)に対する各製品の占有率に従って降順でソートされ、productごとのsalesの累積合計が全売上の30パーセント以上になるまで、上位の値から順にステータスに追加されます。

LIMIT product TO TOP 30 PERCENTOF TOTAL(sales, product)

重要:

副次的な影響がある基準式、またはそれ自体の値を変更するような基準式は使用しないでください。

FIRST n
LAST n

TO、ADD、COMPLEMENTまたはINSERTで使用する場合は、ディメンションの値全体における最初のn個または最後のn個の値を示します。KEEPまたはREMOVEで使用する場合は、現行のステータス内の最初のn個、最後のn個またはn番目の値を示します。


重要:

PERCENTOF基準に基づくステータスにある最後の値が、関連付けられた同じ基準値を持つ多くのディメンション値の1つである場合があります。この場合、LIMITでは、基準値の合計が指定された割合をはるかに上回る場合でも、結果のステータス内にその基準値を持つすべてのディメンション値を含めます。

NTH {n |n TO n}

TO、ADD、COMPLEMENTまたはINSERTで使用する場合は、ディメンションの値全体におけるn個の値を示します。KEEPまたはREMOVEで使用する場合は、現行のステータス内のn個の値を示します。指定できる値の個数や範囲は任意です。

LONGLIST

LIMIT文に引数を2,000まで含めることができることを示します。引数が300より少ない場合、LONGLISTは必要ありません。

SESSION

制限を行う際、MAINTAIN ADD SESSION文を使用して作成したディメンション・メンバーのみが使用されるよう指定します。

STATUS

制限を行う際、現在ステータス内にある値を使用するよう指定します。このキーワードは、VALUES (dimname)文と同じ役割を果たします(ただし、より効率的です)。

NULL

空のディメンションまたは値セットのリストを示します。このキーワードをTOまたはKEEP引数で使用すると、OKNULLSTATUSがNOに設定されている場合でも、現行のステータスからすべての値が削除され、空のディメンションまたは値セットのリストが残されます。同じLIMIT文内に、IFNONEとNULLの両方は使用できません。ADD、INSERTおよびREMOVEでは、ステータスは変更されません。COMPLEMENT NULLは、ステータスにあるすべての値を認識します。

IFNONE label

要求されたステータスが、NULLステータスであるか、NULLステータスの関連ディメンション(つまり、値のない関連ディメンション)に基づく場合、プログラムの実行をlabelに分岐することを指定します(この句の詳細な説明は、LIMITコマンドを参照)。

注意

値を指定する際の注意点

limit-clauseに値を指定する際は、次の点に注意してください。

LIMITによる複数のディメンションで使用するブール式の処理

次のLIMIT文では、sales変数がproductdistrictおよびmonthという3つのディメンションによってディメンション化されています。

LIMIT product TO sales GT 90000


次の文を実行する場合のように、districtおよびmonthディメンションが単一の値に制限されている場合には、前述のLIMIT文の結果は必要な結果のみになります。

LIMIT month TO 'Jan95'
LIMIT district TO 'Boston'
STATUS product


STATUS文によって生成される出力は、次のとおりです。

The current status of PRODUCT is:
Footwear


この場合、結果のステータスには、Boston地区において1995年1月に月の売上額が$90,000を超えた製品がすべて含まれます。ここではFootwearのみです。

MONTHディメンションが単一の値に限定されていない場合の例は次のとおりです。

LIMIT product TO ALL
LIMIT month TO 'Jan95' 'Feb95' 'Mar95'
LIMIT district TO 'Boston'


REPORT sales文を実行すると、BOSTONの3か月間の売上額を確認できます。

DISTRICT: BOSTON
               -------------SALES--------------
               -------------MONTH--------------
PRODUCT          Jan95      Feb95      Mar95
-------------- ---------- ---------- ----------
Tents           32,153.52  32,536.30  43,062.75
Canoes          66,013.92  76,083.84  91,748.16
Racquets        52,420.86  56,837.88  58,838.04
Sportswear      53,194.70  58,913.40  62,797.80
Footwear        91,406.82  86,827.32 100,199.46


しかし、次のようなLIMITコマンドおよびSTATUSコマンドを実行すると、その下に示されている出力が生成されます。ここでも、monthのステータスに含まれるのはFootwearのみです。

LIMIT product TO sales GT 90000
STATUS product

The current status of PRODUCT is:
Footwear


この例では、各製品に対し月別に3つの売上額があります。LIMITは、それぞれの製品についてステータスにある最初の月のデータのみを評価します。その月の売上データが$90,000を超えている場合に、その製品がステータスに追加されます。

各製品のすべての月のデータを評価するには、EVERY、ANYまたはNONEファンクションを使用します。たとえば、次のLIMIT文では、いずれかの月の売上額が$90,000を超えている場合、その製品はステータスに追加されます。

LIMIT product TO ANY(sales GT 90000, product)

この場合、STATUS product文を発行すると、次の出力が生成されます。

The current status of product is:
Canoes, Footwear

暗黙的なリレーションを使用した制限

DAY、WEEK、MONTH、QUARTER、YEAR型の各ディメンションは、この型の他のすべてのディメンションと暗黙的なリレーションで関連付けられています。あるDAY、WEEK、MONTH、QUARTERまたはYEARディメンションの値を、related-dimensionとして別のDAY、WEEK、MONTH、QUARTERまたはYEARディメンションを指定して制限すると、デフォルトで暗黙的なリレーションが使用されます。ただし、これらの型の2つのディメンション間に明示的なリレーションが定義されている場合は、related-dimensionとして明示的なリレーションの名前を指定することによって、デフォルトを変更できます。たとえば、次のような文を発行します。

LIMIT month TO quarter year


この文では、quarterを一時的にyearに制限した後で、monthquarterに制限し、最後にquarterを元のステータスにリストアします。

例10-20 LIMITによる変数の部分的な移入

DEFINE GEOG DIMENSION TEXT
DEFINE PRODUCTS DIMENSION TEXT
DEFINE SALES VARIABLE DECIMAL <PRODUCTS GEOG>
DEFINE COSTS VARIABLE DECIMAL <PRODUCTS GEOG>

次のレポートに示すようにディメンションを移入したものとします。ただし、値は追加していません。costs変数およびsales変数のすべての要素がレポートに表示されますが、いずれも値はNAです。

PRODUCTS
------------
TVs
Radios
Skis
Bikes

GEOG
------------
Boston
Springfield
New Orleans
Baton Rouge
Quebec City
Montreal
Toronto
Norfolk

             -------------------SALES-------------------
             -----------------PRODUCTS------------------
GEOG            TVs       Radios      Skis      Bikes
------------ ---------- ---------- ---------- ----------
Boston               NA         NA         NA         NA
Springfield          NA         NA         NA         NA
New Orleans          NA         NA         NA         NA
Baton Rouge          NA         NA         NA         NA
Quebec City          NA         NA         NA         NA
Montreal             NA         NA         NA         NA
Toronto              NA         NA         NA         NA
Norfolk              NA         NA         NA         NA

             -------------------COSTS-------------------
             -----------------PRODUCTS------------------
GEOG            TVs       Radios      Skis      Bikes
------------ ---------- ---------- ---------- ----------
Boston               NA         NA         NA         NA
Springfield          NA         NA         NA         NA
New Orleans          NA         NA         NA         NA
Baton Rouge          NA         NA         NA         NA
Quebec City          NA         NA         NA         NA
Montreal             NA         NA         NA         NA
Toronto              NA         NA         NA         NA
Norfolk              NA         NA         NA         NA

次のLIMITコマンドを発行して、Oracle OLAPからアクセスできる値が、geogディメンションの値のBostonおよびSpringfieldで索引付けされた値のみとなるように制限します。

LIMIT geog TO 'Boston' 'Springfield'

次に、geog、costsおよびsalesの新しいレポートを発行します。geogディメンションでは、BostonとSpringfieldの値のみが表示されます。同様に、costs変数とsales変数についても、BostonおよびSpringfieldで索引付けされた要素のみがレポートに表示されます。

GEOG
------------
Boston
Springfield

             -------------------SALES-------------------
             -----------------PRODUCTS------------------
GEOG            TVs       Radios      Skis      Bikes
------------ ---------- ---------- ---------- ----------
Boston               NA         NA         NA         NA
Springfield          NA         NA         NA         NA

             -------------------COSTS-------------------
             -----------------PRODUCTS------------------
GEOG            TVs       Radios      Skis      Bikes
------------ ---------- ---------- ---------- ----------
Boston               NA         NA         NA         NA
Springfield          NA         NA         NA         NA

costs変数とsales変数に値を代入するためにRANDOMファンクションを使用する2つの代入文を発行し、次にgeogディメンションのステータスをデフォルト・ステータスのALLに設定するLIMITコマンドを発行します。


sales = RANDOM (200)
costs = RANDOM (100)
LIMIT geog to ALL

次に、geog、costsおよびsalesの新しいレポートを発行します。geogディメンションのすべての値、およびcosts変数とsales変数のすべての要素が表示されます。ただし、非NA値が表示されるのは、BostonおよびSpringfieldで索引付けされたcosts変数とsales変数の要素のみです。


GEOG
------------
Boston
Springfield
New Orleans
Baton Rouge
Quebec City
Montreal
Toronto
Norfolk

             -------------------SALES-------------------
             -----------------PRODUCTS------------------
GEOG            TVs       Radios      Skis      Bikes
------------ ---------- ---------- ---------- ----------
Boston           199.97     133.82      10.07     148.17
Springfield      173.94      27.56      32.21      47.40
New Orleans          NA         NA         NA         NA
Baton Rouge          NA         NA         NA         NA
Quebec City          NA         NA         NA         NA
Montreal             NA         NA         NA         NA
Toronto              NA         NA         NA         NA
Norfolk              NA         NA         NA         NA

             -------------------COSTS-------------------
             -----------------PRODUCTS------------------
GEOG            TVs       Radios      Skis      Bikes
------------ ---------- ---------- ---------- ----------
Boston            43.52      25.32      68.68      10.38
Springfield        9.49      27.96      61.76      16.12
New Orleans          NA         NA         NA         NA
Baton Rouge          NA         NA         NA         NA
Quebec City          NA         NA         NA         NA
Montreal             NA         NA         NA         NA
Toronto              NA         NA         NA         NA
Norfolk              NA         NA         NA         NA

例10-21 ブール式を使用した制限

ブール式の値に基づいてディメンションまたは値セットを制限できます。この例では、TOTALファンクションの値をproduct別に取得し、定数と比較します。LIMIT文によって、すべての月および地区について合計した売上額が1200万を超えるすべての製品にステータスが設定されます。

LIMIT product TO TOTAL(sales product) GT 12000000

例10-22 計算式を使用した制限

ディメンションの制限のために同じ基準を頻繁に使用する場合、式を計算式として保存し、制限式として計算式の名前を使用できます。

DEFINE criterion FORMULA TOTAL(sales product) GT 12000000
LIMIT product TO criterion

例10-23 値セットを使用した制限

値セットにステータス・リストを保存し、それらの値を使用してステータスを制限できます。あるステータス・リストの生成に複数のLIMITコマンドが必要な場合、値セットを使用することで、同じリストを生成するたびにそれらのLIMITコマンドを繰り返す必要がなくなります。次の文では、districtを1996年のSportswear売上額が$1,000,000を超えた地区に制限します。ステータスは値セットsports.districtに保存されるため、1つのLIMIT文でdistrictを同じリストに制限できます。

DEFINE sports.district VALUESET district
LIMIT product TO 'Sportswear'
LIMIT month TO year 'Yr96'
LIMIT sports.district TO TOTAL(sales district) GT 1000000
LIMIT district TO sports.district

STATUS district文を発行すると、次の出力が生成されます。

The current status of DISTRICT is:
ATLANTA TO DENVER

例10-24 変数を使用した制限

ここでは、TOPおよびBASEDONキーワードを使用し、変数の値を基準値として使用して、ディメンションのステータスを制限します。ステータス・リストは、salesの値に基づいて降順でソートされます。

LIMIT product TO 'Sportswear'
LIMIT month TO 'Jul96'
LIMIT district TO TOP 2 BASEDON sales

次のREPORT文を使用します。

REPORT DOWN district sales

これによって、LIMITコマンドの結果を示す次のレポートが生成されます。

PRODUCT: SPORTSWEAR
               --SALES---
               --MONTH---
DISTRICT         Jul96
-------------- ----------
Dallas         220,416.81
Atlanta        211,666.14

例10-25 連結ベース・ディメンションを使用した結合ディメンションの制限

productという単純なディメンションとreg.dist.ccdimという連結ディメンションをベース・ディメンションとして持つprod.regdistという結合ディメンションが、アナリティック・ワークスペースに含まれているとします。結合ディメンションprod.regdistの値は、次のとおりです。

Tents   <region: East>
Tents   <region: West>
Canoes  <region: East>
Canoes  <region: West>
Tents   <district: Boston>
Tents   <district: Atlanta>
Tents   <district: Denver>
Canoes  <district: Atlanta>
Canoes  <district: Seattle>

連結ディメンションをベース・ディメンションとして持つ結合ディメンションのステータスを設定するには、2つの方法があります。

  • 連結ディメンション、およびそのコンポートネント・ディメンションの1つとその値を指定します。次のLIMIT文では、この方法によりprod.regdistのステータスが設定されます。

    LIMIT prod.regdist TO reg.proddist.ccdim district 'Atlanta'
    RPR W 20 prod.regdist
    

    この文によって生成される出力は、次のとおりです。

    --------------PROD.REGDIST---------------
          PRODUCT           REG.DIST.CCDIM
    -------------------- --------------------
    Tents                <district: Atlanta>
    Canoes               <district: Atlanta>
    
  • また、それ自体の値を指定することでも、結合のステータスを設定できます。次のLIMIT文では、この方法によりprod.regdistのステータスが設定されます。

    LIMIT prod.regdist TO <'Tents' '<region: East>'> <'Tents' '<district: Boston>'>
    RPR W 20 prod.regdist
    

    この文によって生成される出力は、次のとおりです。

    --------------PROD.REGDIST---------------
          PRODUCT           REG.DIST.CCDIM
    -------------------- --------------------
    Tents                <region: East>
    Tents                <district: Boston>
    

LIMITコマンド(LEVELRELを使用)

LIMITコマンドでLEVELRELを使用すると、階層ディメンションまたはディメンション・サロゲートの現行のレベルと同じレベルのディメンション値のみを使用して、ステータスを設定し、また値セットへ値を代入できます。

構文

LIMIT {dimension | valueset} [concat-component] limit-type -

     LEVELREL level-relation-clause [IFNONE label]

level-relation-clauseの構文は、指定するオブジェクトのディメンション性によって異なります。

引数

dimension

ステータスが設定されるディメンションまたはディメンション・サロゲートの名前。

valueset

値が代入される値セットの名前。

concat-component

制限に使用する連結ディメンションのコンポーネントの名前(この引数の詳細な説明は、LIMITコマンドを参照)。

limit-type

Oracle OLAPによる現行のステータス・リストの変更方法を指定するキーワード(これらのキーワードのリストおよび説明は、LIMITコマンドを参照)。

LEVELREL

階層ディメンションのステータスをディメンションの現行の値と同じレベルにある階層ディメンションのすべての値に設定し、階層ディメンションを、ディメンションの現行の値と同じレベルにあり、かつ指定された値セット内にある階層ディメンションの値に制限します。

RELATION

level-relation-nameで指定したリレーションの値に基づいて制限を行うように指定します。level-relation-nameが多次元リレーションの場合、このキーワードを指定する必要があります。

level-relation-name

制限する階層ディメンションのレベル・リレーションの名前を指定します。詳細は、「levelrelリレーション」を参照してください。

QUALIFY relation-dimension-name [inclusive-val-args]

Oracle OLAPが制限を行う際の基準の値を識別します。

  • relation-dimension-nameは、level-relation-nameで指定したリレーションのディメンションの名前です。

  • inclusive-val-argsは、制限を行う際の基準となるlevel-relation-nameの値を判別する際に使用するrelation-dimension-nameの値を指定します。LIMITコマンドのvaluelist句に対するinclusive-val-args引数の構文に記述されている任意のinclusive valuelist引数を指定できます(詳細は、LIMITコマンド(値を使用)を参照)。この引数を省略すると、制限を行う際にディメンションの現行ステータスが使用されます。

valueset2

制限する階層ディメンションのレベル・ディメンションによってディメンション化されている、値セット・オブジェクトの名前を指定します。level-relationパラメータで説明したオブジェクトがあるとします。また、tlevelsによってディメンション化され、各値については、最高売上年(1998など)に関係するtimeの値のみを保持するbestsalesyearという値セットを定義したとします。この場合、Monthについては、bestsalesyearは1998年のすべての月(つまり、Jan98からDec98まで)のリストを持ち、Yearについては、1つの値のみ(1998)を持つことになります。

IFNONE label

要求されたステータスが、NULLステータスであるか、NULLステータスの関連ディメンション(つまり、値のない関連ディメンション)に基づく場合、プログラムの実行をlabelに分岐することを指定します(この句の詳細な説明は、LIMITコマンドを参照)。

例10-26 階層時間ディメンションの単一の期間への制限

timeという名前の階層TEXTディメンション、値としてMonthおよびYearを持つtimelevelsという名前のレベル・ディメンション、およびtimeによってディメンション化され、関連ディメンションとしてtimelevelsを持つtimelevelsrelという名前のリレーションを定義したとします(つまり、timelevelsrelは、timeディメンションの各値について、MonthまたはYearのいずれかの値を保持します)。すでにステータスにあるtimeの値を、Jan99と同じレベルにある値のみに制限する場合は、次のような文を発行します。

LIMIT time TO LEVELREL timelevelsrel

LIMITコマンド(関連ディメンションを使用)

LIMITコマンドで関連ディメンションの制限句を使用すると、別の関連ディメンションの値を使用して、値セットへの値の代入や、ディメンションまたはディメンション・サロゲートのステータス設定を行うことができます。

構文

LIMIT {dimension | valueset} limit-type related-dim-clause [IFNONE label]

related-dim-clauseの構文は、指定するオブジェクトのタイプによって異なります。

引数

dimension

ステータスが設定されるディメンションまたはディメンション・サロゲートの名前。

valueset

値が代入される値セットの名前。

concat-component

制限に使用する連結ディメンションのコンポーネントの名前(この引数の詳細な説明は、LIMITコマンドを参照)。

limit-type

Oracle OLAPによる現行のステータス・リストの変更方法を指定するキーワード(これらのキーワードのリストおよび説明は、LIMITコマンドを参照)。

RELATION relation-name

relation-nameで指定したリレーションの値に基づいて制限を行うように指定します。relation-nameが多次元リレーションの場合、このキーワードを指定する必要があります。また、制限されるディメンションとrelated-dimension-nameによって指定するディメンションの間に複数のリレーションが存在する場合、この句を使用して、制限を行う際に使用されるリレーションを識別できます。

QUALIFY relation-dimension-name [inclusive-val-args]

Oracle OLAPが制限を行う際の基準の値を識別します。各引数の意味は次のとおりです。

  • relation-dimension-nameは、relation-nameで指定したリレーションのディメンションの名前です。

  • inclusive-val-argsは、親値を判別する際に使用するrelation-dimension-nameの値を指定します。LIMITコマンドのvaluelist句に対するinclusive-val-args引数の構文に記述されている任意のinclusive valuelist引数を指定できます。構文の詳細は、LIMITコマンド(値を使用)を参照してください。この引数を省略すると、制限を行う際にディメンションの現行ステータスが使用されます。

related-dimension-name

制限するディメンションに関連する1次元のリレーションまたはディメンションの名前を指定します。また、related-dimension-nameとして、制限するディメンションのディメンション・サロゲート、または関連ディメンションのディメンション・サロゲートを指定することもできます。たとえば、dimsurrdim2のディメンション・サロゲートで、dim2dim1に関連付けられているとします。ディメンション・サロゲートdimsurrには、値Dsv1Dsv2Dsv3およびDsv4があります。次の文では、dimsurrの値を指定して、dim1を制限します。

LIMIT dim1 TO dimsurr dsv1 dsv3
related-dimension-valuelist

関連ディメンションの値、関連ディメンションのディメンション・サロゲートの値、またはLIMITコマンドに示されている構文で指定したディメンションの値。構文の詳細は、LIMITコマンド(値を使用)を参照してください。この引数がLIMIT文内に存在する場合、ステータスは、related-dimension値に関連する制限対象のディメンションの値を選択することで取得されます。valuelistを指定しない場合、related-dimensionの現行のステータスが使用されます。

IFNONE label

要求されたステータスが、NULLステータスであるか、NULLステータスの関連ディメンション(つまり、値のない関連ディメンション)に基づく場合、プログラムの実行をlabelに分岐することを指定します(この句の詳細な説明は、LIMITコマンドを参照)。

注意

2段階の処理から構成される関連ディメンションへの制限

ディメンションまたは値セットを関連ディメンションに制限する際、結果のステータスは次の2段階の処理で決定されます。

  1. ディメンション値が、関連ディメンションの値の順序に配置されます。

  2. 関連ディメンションの値に対してディメンションの値が複数ある場合、それらの値はデフォルト・ステータスの順序で配置されます。

関連ディメンションへの制限におけるソートの抑制

LIMIT.SORTRELをNOに設定すると、ディメンションまたは値セットを関連ディメンションに制限する際に行われるソートを抑制できます。大きなディメンションを制限する場合、これによってパフォーマンスが大幅に向上します。


注意:

LIMIT.SORTRELをNOに設定すると、出力されるディメンションが論理的な順序で表示されない場合があります。

例10-27 関連ディメンションを使用した制限

ここでは、関連ディメンションを使用して、ディメンションのステータスを制限します。この文では、districtEast地域内のBostonおよびAtlantaに制限します。

LIMIT district TO region 'East'

この文では、division値のリストの最後に表示される部門の製品であるSportswearおよびFootwearproductを制限します。

LIMIT product TO division LAST 1

LIMITコマンド(親リレーションを使用)

LIMITコマンドの制限句に親リレーションを使用すると、階層ディメンションまたはそのディメンション・サロゲートのステータスの設定や、値セットへの値の代入を、階層内のファミリ・リレーションに基づいて実行できます。

構文

LIMIT {dimension | valueset} [concat-component] limit-type -

     [family-keyword] USING parent-relation-clause  [IFNONE label]

ここで、

引数

dimension

ステータスが設定されるディメンションまたはディメンション・サロゲートの名前。

valueset

値が代入される値セットの名前。

concat-component

制限に使用する連結ディメンションのコンポーネントの名前(この引数の詳細な説明は、LIMITコマンドを参照)。

limit-type

Oracle OLAPによる現行のステータス・リストの変更方法を指定するキーワード(これらのキーワードのリストおよび説明は、LIMITコマンドを参照)。

PARENTS

valuelist内の各値の親を検索します。ディメンションでは、valuelistが存在しない場合、ステータスにある各値の親が検索されます。値セットでは、valuelistが存在しない場合、値セット内にある各値の親が検索されます。親の検索にはparent-relationが使用されます。

CHILDREN

valuelist内の各値の子を検索します。ディメンションでは、valuelistが存在しない場合、ステータスにある各値の子が検索されます。値セットでは、valuelistが存在しない場合、値セット内にある各値の子が検索されます。子の検索にはparent-relationが使用されます。

ANCESTORS

valuelist内の各値の祖先(親、その親など)を検索します。ディメンションでは、valuelistが存在しない場合、ステータスにある各値の祖先が検索されます。値セットでは、valuelistが存在しない場合、値セット内にある各値の祖先が検索されます。つまり、祖先の検索とは、値の親、その親の親というように、親のない値に達するまで検索を行うことです。

DESCENDANTS

valuelist内の各値の子孫(子、孫など)を検索します。ディメンションでは、valuelistが存在しない場合、ステータスにある各値の子孫が検索されます。値セットでは、valuelistが存在しない場合、値セット内にある各値の子孫が検索されます。つまり、子孫の検索とは、値の子、その子の子というように、子のない値に達するまで検索を行うことです。

SIBLINGS

valuelistの値、それ自身を含む、valuelist内の各値のすべての兄弟オブジェクトを検索します。SIBLINGSキーワードを使用した1つのLIMIT文を発行するのは、PARENTSを指定したLIMIT文を発行してから、CHILDRENを指定したLIMIT文を発行するのと同じです。ディメンションでは、valuelistが存在しない場合、ステータスにある各値の兄弟オブジェクトが検索されます。値セットでは、valuelistが存在しない場合、値セット内にある各値の兄弟オブジェクトが検索されます。

TOPANCESTORS

(省略形はTOPANC)階層の最上位にあるメンバー、つまり、祖先を持たないメンバーを検索します。これは、次の2つのLIMITコマンドを発行するのと同等です。

   LIMIT dimension to ANCESTORS ....
   LIMIT dimension REMOVE DESCENDANTS....
BOTTOMDESCENDANTS

(省略形はBOTTOMDESC)階層の最下位にあるメンバー、つまり、子孫を持たないメンバーを検索します。

HIERARCHY

特定のparent-relationに基づいて、子孫(子、孫など)を検索します。違いは値の順序です。DESCENDANTSでは、値をレベルごとにグループ化します(すべての子、すべての孫など)。HIERARCHYでは、子の各グループをその親の次に配置します。HIERARCHYでは、ステータスにある元の値(つまり、LIMIT文が実行される前にステータスにあった値)が含まれます。

INVERTED

子を親の前にリストするように指定します。デフォルトでは、子は親の後にリストされます。

NOORIGIN

ステータスから元の値を除外します。デフォルトでは、元の値はステータスに含まれます。

SKIP

valuelist内の各値について、n世代スキップします。ディメンションでは、valuelistが存在しない場合、ステータスにある各値についてn世代スキップします。値セットでは、valuelistが存在しない場合、値セット内にある各値についてn世代スキップします。このキーワードをDEPTHと組み合せて使用すると、ドリルダウン時に有効です。例10-29「SKIPとDEPTを使用したドリルダウン」を参照してください。

DEPTH

valuelistの各値からn世代下まで含めます。ディメンションでは、valuelistが存在しない場合、ステータスにある各値のn世代下まで含まれます。値セットでは、valuelistが存在しない場合、値セット内にある各値のn世代下まで含まれます。デフォルトでは、DEPTH値は99です。このキーワードをSKIPと組み合せて使用すると、値のドリルダウン時に有効です。

RUN

子のグループが構成されるたびに、テキスト式で表された文を実行します。たとえば、Oracle OLAP変数に格納されている情報に基づいて、子の各グループをソートできます。次の文では、子のグループが構成されると、売上数量に基づいて市場が昇順にソートされます。

LIMIT market TO HIERARCHY RUN 'SORT market a unit.m' USING -
  market.market

注意:

この例で、TOのかわりにKEEPまたはREMOVEをLIMIT文に使用すると、SORT文は無効になります。

USING 

親の値を決定する際に使用する値を指定します。

parentrel

dimensionの親リレーションの名前を指定します。詳細は、「parentrelリレーション」を参照してください。ディメンション・サロゲートを制限するには、サロゲートの作成元のディメンションの親リレーションを使用します。

RELATION  

parent-relation-clauseの先頭を識別します。parentrelが多次元リレーションの場合、このキーワードを指定する必要があります。

QUALIFY relation-dimension-name 

parentrelのいずれかのディメンションの名前を指定します。

inclusive-val-args

親の値を決定する際に使用する値を指定します。LIMITコマンドのvaluelist句に対するinclusive-val-args引数の構文に記述されている任意のinclusive valuelist引数を指定できます。構文の詳細は、LIMITコマンド(値を使用)を参照してください。

IFNONE label

要求されたステータスが、NULLステータスであるか、NULLステータスの関連ディメンション(つまり、値のない関連ディメンション)に基づく場合、プログラムの実行をlabelに分岐することを指定します(この句の詳細な説明は、LIMITコマンドを参照)。

例10-28 単純なドリルダウン

この例では、市場(market)ディメンションの地域(region)レベルから地区(district)のデータをドリルダウンします。まず、地区、地域および米国全体レベルでの合計を組み込んだ市場ディメンションを地域レベルのデータに制限します。これは、marketmarket.levelの間のリレーションであるリレーションmlv.marketを使用して行います。

REPORT mlv.market文を発行すると、mlv.marketの値を示す次の出力が生成されます。

MARKET         MLV.MARKET
-------------- ----------
Totus          Totus
East           Region
Boston         District
Atlanta        District
Central        Region
Chicago        District
Dallas         District
West           Region
Denver         District
Seattle        District

次のLIMIT文でMARKETの値を制限し、STATUS文で現在ステータスにある値を生成します。文の下にSTATUSの出力が示されています。

LIMIT market TO mlv.market 'Region'
STATUS market

The current status of MARKET is:
EAST, CENTRAL, WEST

地域レベルから地区レベルのデータまでドリルダウンするには、LIMITでCHILDRENキーワードを使用します。次の例では、market.marketという親リレーションを使用してドリルダウンを実行しています。このリレーションは、marketディメンションの各値に対して、その親の名前を保持しています。

DEFINE market.market RELATION market <market>
LD Self-relation for the Market Dimension

market.marketのレポートで生成される出力は、次のとおりです。

MARKET         MARKET.MARKET
-------------- -------------
Totus          NA
East           Totus
Boston         Central
Atlanta        East
Central        Totus
Chicago        Central
Dallas         Central
West           Totus
Denver         West
Seattle        West

LIMITでCHILDRENキーワードを使用し、marketEastCentralおよびWest地域の子に制限します。

LIMIT market TO mlv.market 'Region'
Limit market TO CHILDREN USING market.market

marketのレポートで生成される出力は、次のとおりです。

MARKET
-------------
Boston
Atlanta
Chicago
Dallas
Denver
Seattle

例10-29 SKIPとDEPTを使用したドリルダウン

次の文があるとします。

LIMIT market TO HIERARCHY DEPTH 2 SKIP 1 USING market.market 'Totus'

この文によって、Oracle OLAPでは、親子関係(market.market)を調べてTotusの子および孫(DEPTH 2)を検索し、最初の世代(SKIP 1)を破棄します。結果として、ステータスは次のようになります。

Totus
Boston
Atlanta
Chicago
Dallas
Denver
Seattle


Totusがステータスに含まれていることに注意してください。HIERARCHYを使用した場合、元の値はステータスに含まれます。


LIMITコマンド(NOCONVERTを使用)

LIMITコマンドでは、ディメンションおよびそのディメンション・サロゲートの現行のステータス・リストの設定や、値セットへの値の代入ができます。

LIMITコマンドでNOCONVERTキーワードを使用すると、ディメンションのステータスが別のディメンション内の値の位置番号に基づいて設定されます。

構文

LIMIT{dimension | valueset} [concat-component] limit-type -

     NOCONVERT [{unrelated-dimension|numeric-valueset}] -

     [IFNONE label]

引数

dimension

ステータスが設定されるディメンションまたはディメンション・サロゲートの名前。

valueset

値が代入される値セットの名前。

concat-component

制限に使用する連結ディメンションのコンポーネントの名前(この引数の詳細な説明は、LIMITコマンドを参照)。

limit-type

Oracle OLAPによる現行のステータス・リストの変更方法を指定するキーワード(これらのキーワードのリストおよび説明は、LIMITコマンドを参照)。

NOCONVERT

ディメンションのステータスを、別のディメンションのステータス・リスト内にある指定した値の位置番号に基づいて設定します。

unrelated-dimension

制限するディメンションに関連しないディメンションの名前を指定します。この引数を使用することで、ディメンションまたは値セットのステータスを、関連しないディメンションのステータスにある各値の位置番号に基づいて設定するように指定できます。これは、2つのディメンションが異なるアナリティック・ワークスペース内にある場合に特に有効です(たとえば、それぞれ別のアナリティック・ワークスペースにある2つの製品ディメンションの間に1対1の関係が存在する場合など)。

numeric-valueset

数値の値セットを指定します。この引数を使用すると、NOCONVERTによって、ステータスが値セットの数値に基づいて設定されます。数値は、ディメンションのデフォルト・ステータス内における値の位置を表します。

IFNONE label

(OLAP DMLプログラム内でのみ使用)要求されたステータスが、NULLステータスであるか、NULLステータスの関連ディメンション(つまり、値のない関連ディメンション)に基づく場合、プログラムの実行をlabelに分岐することを指定します(この句の詳細な説明は、LIMITコマンドを参照)。


LIMITコマンド(POSLISTを使用)

LIMITコマンドでは、ディメンションおよびそのディメンション・サロゲートの現行のステータス・リストの設定や、値セットへの値の代入ができます。

LIMITコマンドでPOSLISTキーワードを使用すると、ディメンションのステータスがそのディメンション内の値の位置に基づいて設定されます。

構文

LIMIT {dimension | valueset} [concat-component] limit-type -

     POSLIST poslist-exp [IFNONE label]

引数

dimension

ステータスが設定されるディメンションまたはディメンション・サロゲートの名前。

valueset

値が代入される値セットの名前。

concat-component

制限に使用する連結ディメンションのコンポーネントの名前(この引数の詳細な説明は、LIMITコマンドを参照)。

limit-type

Oracle OLAPによる現行のステータス・リストの変更方法を指定する標準キーワードの1つ(LIMITコマンドを参照)。

POSLIST poslist-textexp

ディメンションのステータスを、ディメンション内の値の位置に基づいて設定します。poslist-textexpはテキスト式です。この式の各行は、制限するディメンションの位置番号を評価する数値です。

IFNONE label

要求されたステータスが、NULLステータスであるか、NULLステータスの関連ディメンション(つまり、値のない関連ディメンション)に基づく場合、プログラムの実行をlabelに分岐することを指定します(この句の詳細な説明は、LIMITコマンドを参照)。