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

前
 
次
 

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]
KEE
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と同様、KEEP REORDERは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つの方法があります。

  • OKNULLSTATUSオプションをYESに設定する。この指定は、(LIMIT文にIFNONE引数が存在しないかぎり)常にNULLステータスを許可することを示します。

  • LIMIT文でNULLキーワードを使用して、特定のディメンションまたは値セットのステータスをNULLに設定する。TO NULLまたはKEEP NULLを指定することで、これを実行できます。この指定は、このLIMIT文についてのみNULLステータスを許可することを示します。

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

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

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

結合の制限

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

  • 実際の値を指定し、値の各組合せを山カッコで囲みます。

    LIMIT proddist TO '<Tents, Boston>' -
       '<Footwear, Denver>'
    

  • その値の変数名を使用し、その組合せを山カッコで囲みます。

    prodname = 'Canoes'
    distname = 'Seattle'
    LIMIT proddist To <prodname, distname>
    
  • 各行の組合せを山カッコで囲んだ複数行のリストを作成します。

    namelist = '<Tents Boston>\n<Footwear, -
       Denver>\n <Canoes, Seattle>'
    LIMIT proddist TO namelist
    

  • 結合ディメンションとそのベース・ディメンションの間の暗黙的なリレーションを使用して、結合ディメンションを制限します。たとえば、次の文を使用すると、PRODDISTが、ベース値の1つとしてCanoesを持つすべての結合値に制限されます。

    LIMIT proddist TO product 'Canoes'
    

    注意:

    結合ディメンションのベース・ディメンション値には論理位置番号が使用できます。論理位置番号の使用は、「ディメンションが結合ディメンションの場合のINSTATの使用」を参照してください。

連結ベース・ディメンションを持つ結合ディメンションを制限する方法の例は、例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コマンドで値の制限句を使用すると、値が値セットに代入されるか、単一のディメンションまたは複数のディメンション・サロゲートの現行のステータス・リストが次のように設定されます。

  • 指定した単一の値または複数の値。値は次のいずれかです。

    • カンマで区切られたリテラル値として表現されたディメンション値、または各行がディメンション値である複数行のテキスト式

    • value1 TO value2で表現されたディメンション値の範囲

    • カンマ区切りのINTEGER値で表現された、ディメンション値の論理位置を表すINTEGER値

    • value1 TO value2で表現された、ディメンション値の論理位置を表すINTEGER値の範囲

    • 値セット

  • ブール式がTRUEである値

  • ある基準に基づいた最上位または最下位のディメンション値

  • 式で表された基準に基づいた割合による最上位または最下位のディメンション値

構文

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

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

ここで、

  • inclusive-val-argsは、次のいずれか1つ以上で構成されます。


         intvaluelist 
         text-expression
         value1 TO value2
         valuelist
         valueset
  • exclusive-val-argsは、次のいずれか1つです。


         ALL
         boolean-expression
         {BOTTOM|TOP} BASEDON expression
         {BOTTOM|TOP} n-percent PERCENTOF expression
         {FIRST|LAST} n
         NTH {n |n TO n}...
         LONGLIST
         LONGLIST
    SESSION
    STATUS
         NULL

パラメータ

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までなど)のどちらでも指定できます。INTEGER値を指定すると、その値がディメンションのデフォルトのステータス・リストにおける値の論理位置となります。ディメンション値を指定すると、コマンドによってその値がディメンションのデフォルトのステータス・リストにおける値の論理位置に変換されます。これに従って、ディメンションまたは値セットの現行のステータスが割り当てられます。


ヒント:

NUMBERディメンションの値は、INTEGER位置で指定できません。かわりに、NUMBERディメンションのINTEGERディメンション・サロゲートを定義して、サロゲートの位置でディメンションを制限します。

valuelist

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

valueset

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

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ファンクション、またはQDRの値のリストに含まれている際のOracle OLAPの動作は、LIMITSTRICTオプションの設定によって決まります。存在しない値を指定した場合、デフォルトでは、存在しない値は無効な値として処理された後、制限の実行は停止され、エラーが発生します。存在しない値がNA値として処理されるようにするには、LIMITSTRICTの値をNOに設定します。

  • 引用符付き文字列内に引用符付き文字列を埋め込むことができ、これは、Joe's Deliなどのように、コンポジットまたは結合ディメンションのベース・ディメンション値に特殊文字がある場合に必要です。「テキスト・リテラル」を参照してください。

  • ディメンションがNTEXTデータ型で、ディメンション値を示す引数がTEXTデータ型の場合、LIMITによって引数の値はNTEXTに変換されます。同様に、ディメンションがTEXTデータ型で、ディメンション値を示す引数がNTEXTデータ型の場合、LIMITによって引数の値はTEXTに変換されますが、この場合、データベース・キャラクタ・セットで表せないNTEXT値のデータは失われる可能性があります。

  • DAY、WEEK、MONTH、QUARTER、YEAR型のディメンションの値を指定する場合、値は、ディメンションのVNF(値名書式)で指定されている書式(ディメンションにVNFがない場合は、制限するディメンションの型に対するデフォルトVNF)またはDATE値の有効な入力形式で指定できます。

    指定する必要のある日付のコンポーネントは、制限するディメンションの型に関連するコンポーネントのみです。DAYまたはWEEKディメンションでは、日、月および年の各コンポーネントを指定する必要があります。MONTHまたはQUARTERディメンションでは、月および年のみを指定します(1995年6月の場合はJun95または0695など)。YEARディメンションでは、年のみを指定します(1995年の場合は95など)。日付の有効な入力形式の説明は、DATEORDERを参照してください。

    完全な日付を表すDATE式またはテキスト値を指定する場合は、該当するディメンション値が表す期間内にある任意の日付を指定できます。指定された値があいまいな場合、Oracle OLAPでは、DATEORDERオプションを使用して解決します。

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

このタイプのLIMITコマンド(またはLIMITファンクション)を使用して、多次元ブール式のディメンションを1つのみに制限すると、その式を、制限されるディメンションの値と制限されないディメンションの現行の値のみに効率よく制限できます。

たとえば、sales変数がproductdistrictおよびmonthという3つのディメンションによってディメンション化されているとします。

ブール式を使用して、最初にdistrictmonthのディメンションを単一の値に明示的に制限して結果を確認し、次にproductを制限します。

LIMIT month TO 'Jan95'
LIMIT district TO 'Boston'
LIMIT product TO sales GT 90000
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の構文は、指定するオブジェクトのディメンション性によって異なります。

  • 多次元のレベル・リレーションを指定するには、次の構文を使用する必要があります。

    RELATION level-relation-name [QUALIFY relation-dimension-name [inclusive-val-args...]...]

    (レベル・リレーションが1次元の場合もこの構文を使用できます。)

  • 1次元のレベル・リレーションを指定するには、次の簡素化された構文を使用できます。

     level-relation-name [valueset2]   

パラメータ

dimension

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

valueset

値が代入される値セットの名前、またはLIMITファンクション

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コマンド(値を使用)を参照してください。)この引数を省略すると、制限を行う際にOracle OLAPによってディメンションの現行ステータスが使用されます。

valueset2

制限する階層ディメンションのレベル・ディメンションによってディメンション化されている、値セット・オブジェクトの名前を指定します。この引数を使用した結果は、ディメンションの現行位置のレベル値に対応する個々の値セットとなります。

また、LIMITファンクションを指定することもできます。

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 time TO RELATION timelevelsrel QUALIFY time CURRENT

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

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

構文

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

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

  • リレーションを指定する際の構文は次のとおりです。

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

  • 制限対象のディメンションに関連するディメンションを指定する際の構文は次のとおりです。

     related-dimension-name [related-dimension-valuelist]   

    (オブジェクトが1次元リレーションの場合もこの簡素化された構文を使用できます。)

パラメータ

dimension

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

valueset

値が代入される値セットの名前、またはLIMITファンクション

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]

ここで、

  • family-keywordは次の構成のいずれかです。


         PARENTS
         CHILDREN
          ANCESTORS [DISTANCE generation ]
          DESCENDANTS [DISTANCE generation ]
          SIBLINGS
    TOPANCESTORS
    BOTTOMDESCENDANTS
          HIERARCHY [INVERTED] [NOORIGIN] [SKIP n] [DEPTH n] [RUN textexp]] 
  • parent-relation-clauseの構文は、指定するオブジェクトのディメンション性によって異なります。

    • 親リレーションが多次元の場合は、次の構文を使用します。

      RELATION parentrel [QUALIFY relation-dimension-name [inclusive-val-args... | CURRENT]...]

      (親リレーションが1次元の場合もこの構文を使用できます。)

    • 親リレーションが1次元の場合、次の簡素化された構文を使用できます。

       parentrel [inclusive-val-args | CURRENT] 

パラメータ

dimension

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

valueset

値が代入される値セットの名前、またはLIMITファンクション

concat-component

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

limit-type

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

PARENTS

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

CHILDREN

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

ANCESTORS [DISTANCE generation]

DISTANCE句を含めない場合、次のようになります。

  • valuelist内の各値の祖先(親、その親など)を検索します。ディメンションでは、valuelistが存在しない場合、ステータスにある各値の祖先が検索されます。

  • 値セットでは、valuelistが存在しない場合、値セット内にある各値の祖先が検索されます。つまり、祖先の検索とは、値の親、その親の親というように、親のない値に達するまで検索を行うことです。

DISTANCE句を含める場合、generationで指定した世代のメンバーである祖先に制限されます。

  • generationでは、現行の世代には0、親には1、親の親には2、親の親の親には3(以降同様)を指定します。

  • 負の値に対しては、子孫の世代(つまり、-1は子、-2は孫、以降同様)が返されます。

DESCENDANTS [DISTANCE generation]

DISTANCE句を含めない場合、次のようになります。

  • valuelist内の各値の子孫(子、孫など)を検索します。ディメンションでは、valuelistが存在しない場合、ステータスにある各値の子孫が検索されます。

  • 値セットでは、valuelistが存在しない場合、値セット内にある各値の子孫が検索されます。つまり、子孫の検索とは、値の子、その子の子というように、子のない値に達するまで検索を行うことです。

DISTANCE句を含める場合、generationで指定した世代のメンバーである子孫に制限されます。

  • generationでは、現行の世代には0、子には1、孫には2、孫の子には3(以降同様)を指定します。

  • 負の数に対しては、祖先の世代(つまり、-1は親、-2は親の親、以降同様)が返されます。

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

ディメンションの親リレーションの名前を指定します。

ディメンション・サロゲートを制限するには、サロゲートの作成元のディメンションの親リレーションを使用します。

RELATION  

parent-relation-clauseの先頭を識別します。parentrelが多次元リレーションの場合は、このキーワードを使用します。

QUALIFY relation-dimension-name 

parentrelのディメンションの名前を指定します。この句の使用方法は、LIMITコマンドとLIMITファンクションのどちらをコーディングするかによって異なります(「LIMITのループ動作(親リレーションを使用)」を参照)。

inclusive-val-args

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

CURENT

ディメンションの現行値の子の値に制限するように指定します。(これは、dimension_name +0を指定した場合と同じになります。)

IFNONE label

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

使用上の注意

LIMITのループ動作(親リレーションを使用)

QUALIFY句を含めない場合、parentrelが多次元であるときに、このLIMITによってステータスに含まれる値セットは、LIMITコマンドとLIMITファンクションのどちらを発行しているかによって異なります。

  • LIMITコマンドの場合: ステータスにある値のセットには、parentrelの関連ディメンションのステータスにある値すべてが含まれます。parentrelの関連ディメンションの現行値のみをステータスにある値のセットに含める場合は、parentrelの各関連ディメンションに対してQUALIFY related-dimension CURRENT句を指定します。

  • LIMITファンクションの場合: ステータスにある値のセットには、parentrelの関連ディメンションの現行値のみが含まれます。parentrelの関連ディメンションのステータスにある値すべてをステータスにある値のセットに含める場合は、parentrelの各関連ディメンションに対してQUALIFY related-dimension related-dimension句を指定します。

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

この例では、市場(market)ディメンションの地域(region)レベルから地区(district)のデータをドリルダウンします。まず、地区、地域および米国全体レベルでの合計を組み込んだ市場ディメンションを地域レベルのデータに制限します。このLIMITは、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

値が代入される値セットの名前、またはLIMITファンクション

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に分岐することを指定します いずれの場合も、プログラムの実行が分岐すると、NULLステータスは適用されません。(この句の詳細な説明は、LIMITコマンドを参照してください。)


LIMITコマンド(POSLISTを使用)

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

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

構文

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

     POSLIST poslist-exp [IFNONE label]

パラメータ

dimension

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

valueset

値が代入される値セットの名前、またはLIMITファンクション

concat-component

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

limit-type

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

POSLIST poslist-textexp

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

IFNONE label

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