LIMITコマンドでは、ディメンションおよびそのディメンション・サロゲートの現行のステータス・リストを設定し、値セットに値を代入します。LIMITは、ディメンションのデータの範囲を一時的に制限することで、作業するデータ値を制限するために使用します。LIMITを使用すると、ディメンションの現行のステータス・リストを作成します。ディメンションの現行のステータス・リストとは、そのディメンションで現在アクセス可能な値を順序付けしたリストです。ディメンションの現行のステータス・リストに存在する値は、「ステータスにある」と言われます。ディメンション・ステータスの詳細およびアナリティック・ワークスペースのデータで作業する際のステータスの重要性の詳細は、「OLAP DML処理対象のデータセットの指定方法」を参照してください。
ヒント: コンポジット、結合ディメンション、連結ディメンション、またはパーティション・テンプレートの1つ以上のベース・ディメンションの現行のステータス・リストの設定を、そのオブジェクトに対して選択された値に基づいて行います(LIMIT BASEDIMSを参照)。 |
構文
LIMIT {dimension | valueset } [concat-component] limit-type [limit-clause] [IFNONE label]
limit-typeは、Oracle OLAPによる現行のステータス・リストの変更方法を指定する、次のキーワードのいずれかになります。
パラメータ
ステータスが設定されるディメンションまたはディメンション・サロゲートの名前。
値が代入される値セットの名前。
制限に使用する値の連結ディメンションのコンポーネントの名前を指定します。concat-componentに値を指定すると、指定した連結ディメンションのステータスが、その連結ディメンションのコンポーネントであるdimensionの値で制限されます。このlimit-clauseは、dimensionが連結ディメンションの場合にのみ適用されます。連結ディメンションのステータスとそのコンポーネントのディメンションのステータスは、共有されません。連結ディメンションのステータスを設定する際に、コンポーネントのディメンションをlimit-clauseとして使用した後、そのディメンションのステータスを変更した場合、連結ディメンションのステータスは変更されません。
ディメンションのステータスまたは値セットのステータスを、limit-clause引数で指定した値で置換します。TOキーワードの値は、LIMIT文に指定する順序またはvaluelist引数によって暗黙的に指定される順序で、ディメンションのデフォルト・ステータスから選択されます。順序を暗黙的に指定する引数を使用した場合、値の順序はデフォルト・ステータス内における値の位置に基づきます。
ステータスに存在していない値をlimit-clause引数で指定して追加することによって、ディメンションのステータスまたは値セットのステータスを拡張します。ADDキーワードの値は、LIMIT文に指定する順序またはvaluelist引数によって暗黙的に指定される順序で、ディメンションのデフォルト・ステータスから選択されます。順序を暗黙的に指定する引数を使用した場合、値の順序はデフォルト・ステータス内における値の位置に基づきます。ADDによって、一意のディメンション値は、現行のステータス・リストまたは値セット・リストの後に指定された順序で追加されます。
現行のステータス内の指定した位置に値をlimit-clause引数で指定して挿入することによって、ディメンションまたは値セットのステータスを拡張します。INSERTキーワードの値は、LIMIT文に指定する順序またはvaluelist引数によって暗黙的に指定される順序で、ディメンションのデフォルト・ステータスから選択されます。
順序を暗黙的に指定する引数(value1
TO
value2
など)を使用した場合、値の順序はデフォルト・ステータス内における値の位置に基づきます。INSERTは、現行のステータス内の指定された位置に値を追加します。追加する値がすでにステータスにある場合は、その値は現行のステータスにある位置から削除され、値リストにある順序で追加されるので、追加する値の順序は維持されます。
ステータスにある最初の値の前に新しい値を挿入します。
ステータスにある最後の値の後に新しい値を挿入します。
新しい値を現行のステータス内のpositionの前または後に挿入することを指定します。
現行のステータス内のディメンション値、現行のステータス内のディメンション値を値とする文字式、またはデフォルト・ステータス内のディメンション値の位置を表すINTEGER
式。
limit-clause引数で指定した値のみを維持したまま、ディメンションのステータスまたは値セットのステータスを削減します。Oracle OLAPでは、値の選択は、現行のディメンション・ステータスに基づいて行われます。KEEPによってステータス内に残される値は、現行の値順序で維持されます。
KEEPと同様、KEEP REORDERはlimit-clause引数で指定した値のみを維持したまま、ディメンションのステータスまたは値セットのステータスを削減します。Oracle OLAPでは、値の選択は、現行のディメンション・ステータスに基づいて行われます。ただしKEEP REORDERでは、現行のステータスの順序ではなく、選択した引数(つまりlimit-clause引数)の順序で結果が並び替えられます。
limit-clause引数で指定した値を削除して、ディメンションのステータスまたは値セットのステータスを削減します。Oracle OLAPでは、値の選択は、現行のディメンション・ステータスに基づいて行われます。KEEPによってステータス内に残される値は、現行の値順序で維持されます。
ディメンションのステータスまたは値セットのステータスを、limit-clause引数で指定していない値で置換します。COMPLEMENTの後に引数を指定しない場合、ステータスは、現在ステータスに存在しないすべての値で置き換えられます。Oracle OLAPでは、値の選択は、現行のディメンション・ステータスに基づいて行われます。COMPLEMENTでは、ディメンション値はデフォルトの順序のまま維持されます。(省略形はCOMP)
limit-clause引数に基づいてディメンションの値または値セットの値をソートします。LIMITでは、limit-clause引数に基づいた一時的な値リストを作成し、このリストを使用して現行のステータス・リストをソートします。一時リスト内に存在しない値はすべて現行のステータス・リストの最後に移動されます。
NA
値が、ソートされたリストの最後でなく最初に配置されます。
制限に使用する値を指定します。この構文は複雑なため、次のトピックに分けて説明します。
(OLAP DMLプログラム内でのみ使用)要求されたステータスが、NULLステータスであるか、NULLステータスの関連ディメンション(つまり、値のない関連ディメンション)に基づく場合、プログラムの実行をlabelに分岐することを指定します いずれの場合も、プログラムの実行が分岐すると、NULLステータスは適用されません。かわりに、LIMIT文が実行される前の元のステータスが維持されます。これは、OKNULLSTATUSがYES
の場合も同様です。1つのOLAP DMLプログラム内で、同じ文にIFNONEおよびNULLの両方は使用できません。
「ラベルの構成のガイドライン」に従って構成された、プログラム中の他の位置にあるラベルの名前。プログラムの実行は、指定したラベルの直後の行に分岐します。
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'
連結ベース・ディメンションを持つ結合ディメンションを制限する方法の例は、例10-25「連結ベース・ディメンションを使用した結合ディメンションの制限」を参照してください。
連結の制限
単純なディメンション、結合ディメンションおよび他の連結ディメンションを連結のベース・ディメンションとして使用して、連結ディメンションを定義できます。連結ディメンションをその値の1つに制限するための構文は、次のとおりです。
LIMIT concatdim TO <base-dim: value>
たとえば、連結ディメンションreg.dist.ccdim
が、そのベース・ディメンションとして単純なディメンションregion
とdistrict
を持つとします。次の文によって、reg.dist.ccdim
のステータスはregion: East
とdistrict: 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
ディメンションがあり、このディメンションには値25
、410
、150
、205
、310
および10
があるとします。また、このディメンションは、store_id
のINTEGERディメンション・サロゲートstorepos
も使用します。ディメンション・サロゲートstorepos
には値1
、2
、3
、4
、5
および6
があります。store_id
のTEXTディメンション・サロゲートはstorename
です。このディメンション・サロゲートには、テキスト値Raoul's - Boston
、Poldy's Potpourri
、Molly's Emporium
、Raoul's - Atlanta
、Kinch'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
が、そのベース・ディメンションとして単純なディメンションregion
とdistrict
を持つとします。連結ディメンションとコンポーネントの各ディメンションとの間には暗黙的なリレーションが存在します。
次の文では、関連ディメンションの構文を使用し、コンポーネントの(関連)ディメンションの位置を指定して、連結ディメンションのステータスを設定します。
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.ccdim
をdistrict
のステータスに制限します。
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>
連結ディメンションを、そのコンポーネントのディメンションの値セットを使用して制限することもできます。
複数のコンポーネントのディメンションに同一の値が含まれている場合、連結ディメンションをそれらの値に制限するにはブール式を使用します。district
とregion
の両方のディメンションに値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'
を、ディメンション値ではなくキーワード式として解釈します。
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つ以上で構成されます。
exclusive-val-argsは、次のいずれか1つです。
パラメータ
ステータスが設定されるディメンションまたはディメンション・サロゲートの名前。
値が代入される値セットの名前。
制限の決定に使用する値の連結ディメンションのコンポーネントの名前。(この引数の詳細な説明は、LIMITコマンドを参照してください。)
Oracle OLAPによる現行のステータス・リストの変更方法を指定するキーワード。(これらのキーワードのリストおよび説明は、LIMITコマンドを参照してください。)
1つ以上のINTEGER
値のリスト、または数値を保持する単一セル変数の名前のリスト。各値はカンマ(,
)で区切ります。小数桁のある数値(SHORTDECIMAL値またはDECIMAL値)は、ディメンション値として使用される前に自動でINTEGER
値に切り捨てられます。INTEGER
は、ディメンション値全体における論理位置によってディメンション値を指定します。NUMBER
ディメンションの値はINTEGER
位置では指定できません。NUMBER
ディメンションの値がINTEGER
値の場合は、intvalue1、intvalue2などにディメンション値を指定することでディメンションのステータスを設定できます。
各行がディメンションの値である複数行のテキスト式。
ディメンション値の範囲を指定しますが、ここで、value1およびvalue2は、INTEGER
値またはディメンション値のいずれかです。範囲は、昇順(1から10までなど)または降順(10から1までなど)のどちらでも指定できます。INTEGER
値を指定すると、その値がディメンションのデフォルトのステータス・リストにおける値の論理位置となります。ディメンション値を指定すると、コマンドによってその値がディメンションのデフォルトのステータス・リストにおける値の論理位置に変換されます。これに従って、ディメンションまたは値セットの現行のステータスが割り当てられます。
ヒント: NUMBER ディメンションの値は、INTEGER位置で指定できません。かわりに、NUMBER ディメンションのINTEGER ディメンション・サロゲートを定義して、サロゲートの位置でディメンションを制限します。 |
ディメンションの1つ以上の値のリスト。ディメンション値は、有効なディメンション値のテキスト式として指定できます。NUMBER
ディメンションの場合は、ディメンション値は数値です。DAY、WEEK、MONTH、QUARTER、YEAR型のディメンションの場合は、ディメンション値はDATE
式として指定できます。
ステータスを設定するディメンションの値を含む保存済のリストであるアナリティック・ワークスペースの値セット・オブジェクト。ディメンション・サロゲートに対して値セットは定義できないため、ディメンション・サロゲートのステータスを設定する場合、値セットは指定できません。ただし、ディメンションを値セットで制限すると、そのディメンションのディメンション・サロゲートも自動で同じ値セットに制限されます。また、LIMITファンクションを指定することもできます。
デフォルトのステータス内にあるすべてのディメンション値をステータスに含めることを指定します。デフォルトのステータスは、読取り権限が付与されているすべてのディメンション値で構成され、これらのディメンション値は、ディメンションを前回メンテナンスしたときと同じ順序で配置されています。アナリティック・ワークスペースを起動した時点では、アナリティック・ワークスペース内の各ディメンションのステータスはデフォルトのステータスです。PERMIT文またはPERMITRESET文でディメンションに対する読取り権限を変更すると、そのディメンションのデフォルトのステータスも変更されます。
ディメンションまたはステータスを制限する際にOracle OLAPによってそのTRUE値が使用される式。boolean-expressionは、ステータスを設定するディメンションによってディメンション化されている必要があります。ディメンション・サロゲートの場合、ブール式はサロゲートの作成元のディメンション全体で評価されます。ブール式で比較する各式のデータ型は、同様のものである必要があります。データ型の変換の詳細は、CONVERTファンクションを参照してください。LIMITでブール式を正しく使用するには、LIMITコマンドが複数のディメンションを持つブール式をどのように処理するかを理解する必要があります(詳細は、「LIMITによる複数のディメンションで使用するブール式の処理」を参照)。
ディメンションのステータスまたは値セットのステータスを基準に基づいて設定することを指定しますが。ここで、nは選択する値の数で、expressionは選択のための基準です。ステータスを設定するディメンションを除き、expressionのディメンションはすべて単一の値に制限されている必要があります。TOPではステータスが降順で格納され、BOTTOMではステータスが昇順で格納されます。BASEDONキーワードの後にコンポジットは使用できません。これを行うと、エラー・メッセージが表示されます。
式で表された基準に基づく最上位または最下位の検索をし、ディメンションまたは値セットのステータスを設定するように指定します。この構成では、値は式に対する占有率に基づいてソートされ、ステータスに追加されます。
たとえば、次の文では、製品がTOTAL(sales)
に対する各製品の占有率に従って降順でソートされ、product
ごとのsales
の累積合計が全売上の30パーセント以上になるまで、上位の値から順にステータスに追加されます。
LIMIT product TO TOP 30 PERCENTOF TOTAL(sales, product)
重要: 副次的な影響がある基準式、またはそれ自体の値を変更するような基準式は使用しないでください。 |
TO、ADD、COMPLEMENTまたはINSERTで使用する場合は、ディメンションの値全体における最初のn個または最後のn個の値を示します。KEEPまたはREMOVEで使用する場合は、現行のステータス内の最初のn個、最後のn個またはn番目の値を示します。
重要: PERCENTOF基準に基づくステータスにある最後の値が、関連付けられた同じ基準値を持つ複数のディメンション値の1つである場合があります。この場合、LIMITでは、基準値の合計が指定された割合をはるかに上回る場合でも、結果のステータス内にその基準値を持つすべてのディメンション値を含めます。 |
TO、ADD、COMPLEMENTまたはINSERTで使用する場合は、ディメンションの値全体におけるn個の値を示します。KEEPまたはREMOVEで使用する場合は、現行のステータス内のn個の値を示します。指定できる値の個数や範囲は任意です。
LIMIT文に引数を2,000まで含めることができることを示します。引数が300より少ない場合、LONGLISTは必要ありません。
制限を行う際、MAINTAIN ADD SESSION文を使用して作成したディメンション・メンバーのみが使用されるよう指定します。
制限を行う際、現在ステータス内にある値を使用するよう指定します。このキーワードは、VALUES (dimname)文と同じ役割を果たします(ただし、より効率的です)。
空のディメンションまたは値セットのリストを示します。このキーワードをTOまたはKEEP引数で使用すると、OKNULLSTATUSがNO
に設定されている場合でも、現行のステータスからすべての値が削除され、空のディメンションまたは値セットのリストが残されます。同じLIMIT文内に、IFNONEとNULLの両方は使用できません。ADD、INSERTおよびREMOVEでは、ステータスは変更されません。COMPLEMENT NULLは、ステータスにあるすべての値を認識します。
要求されたステータスが、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
変数がproduct
、district
およびmonth
という3つのディメンションによってディメンション化されているとします。
ブール式を使用して、最初にdistrict
とmonth
のディメンションを単一の値に明示的に制限して結果を確認し、次に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
に制限した後で、month
をquarter
に制限し、最後に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 {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]
パラメータ
ステータスが設定されるディメンションまたはディメンション・サロゲートの名前。
値が代入される値セットの名前、またはLIMITファンクション。
制限の決定に使用する値の連結ディメンションのコンポーネントの名前。(この引数の詳細な説明は、LIMITコマンドを参照してください。)
Oracle OLAPによる現行のステータス・リストの変更方法を指定するキーワード。(これらのキーワードのリストおよび説明は、LIMITコマンドを参照してください。)
階層ディメンションのステータスをディメンションの現行の値と同じレベルにある階層ディメンションのすべての値に設定し、階層ディメンションを、ディメンションの現行の値と同じレベルにあり、かつ指定された値セット内にある階層ディメンションの値に制限します。
level-relation-nameで指定したリレーションの値に基づいて制限を行うように指定します。level-relation-nameが多次元リレーションの場合、このキーワードを指定します。
制限する階層ディメンションのレベル・リレーションの名前を指定します。詳細は、「levelrelリレーション」を参照してください。
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によってディメンションの現行ステータスが使用されます。
制限する階層ディメンションのレベル・ディメンションによってディメンション化されている、値セット・オブジェクトの名前を指定します。この引数を使用した結果は、ディメンションの現行位置のレベル値に対応する個々の値セットとなります。
また、LIMITファンクションを指定することもできます。
要求されたステータスが、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 {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次元リレーションの場合もこの簡素化された構文を使用できます。)
パラメータ
ステータスが設定されるディメンションまたはディメンション・サロゲートの名前。
値が代入される値セットの名前、またはLIMITファンクション。
制限の決定に使用する値の連結ディメンションのコンポーネントの名前。(この引数の詳細な説明は、LIMITコマンドを参照してください。)
Oracle OLAPによる現行のステータス・リストの変更方法を指定するキーワード。(これらのキーワードのリストおよび説明は、LIMITコマンドを参照してください。)
relation-nameで指定したリレーションの値に基づいて制限を行うように指定します。relation-nameが多次元リレーションの場合、このキーワードを指定します。また、制限されるディメンションとrelated-dimension-nameによって指定するディメンションの間に複数のリレーションが存在する場合、この句を使用して、制限を行う際に使用されるリレーションを識別できます。
Oracle OLAPが制限を行う際の基準の値を識別します。各引数の意味は次のとおりです。
relation-dimension-nameは、relation-nameで指定したリレーションのディメンションの名前です。
inclusive-val-argsは、親値を判別する際に使用するrelation-dimension-nameの値を指定します。LIMITコマンドのvaluelist句に対するinclusive-val-args引数の構文に記述されている任意のinclusive valuelist引数を指定できます。構文の詳細は、LIMITコマンド(値を使用)を参照してください。この引数を省略すると、制限を行う際に関連ディメンションの現行のステータス・リストが使用されます。
制限するディメンションに関連する1次元のリレーションまたはディメンションの名前を指定します。また、related-dimension-nameとして、制限するディメンションのディメンション・サロゲート、または関連ディメンションのディメンション・サロゲートを指定することもできます。たとえば、dimsurr
はdim2
のディメンション・サロゲートで、dim2
はdim1
に関連付けられているとします。ディメンション・サロゲートdimsurr
には、値Dsv1
、Dsv2
、Dsv3
およびDsv4
があります。次の文では、dimsurr
の値を指定して、dim1
を制限します。
LIMIT dim1 TO dimsurr dsv1 dsv3
関連ディメンションの値、関連ディメンションのディメンション・サロゲートの値、またはLIMITコマンドに示されている構文で指定したディメンションの値。構文の詳細は、LIMITコマンド(値を使用)を参照してください。この引数がLIMIT文内に存在する場合、ステータスは、related-dimension値に関連する制限対象のディメンションの値を選択することで取得されます。valuelistを指定しない場合、related-dimensionの現行のステータス値が使用されます。
要求されたステータスが、NULLステータスであるか、NULLステータスの(つまり、値のない)関連ディメンションに基づく場合、プログラムの実行をlabelに分岐することを指定します。(この句の詳細な説明は、LIMITコマンドを参照してください。)
使用上の注意
2段階の処理から構成される関連ディメンションへの制限
ディメンションまたは値セットを関連ディメンションに制限する際、結果のステータスは次の2段階の処理で決定されます。
ディメンション値が、関連ディメンションの値の順序に配置されます。
関連ディメンションの値に対してディメンションの値が複数ある場合、それらの値はデフォルト・ステータスの順序で配置されます。
関連ディメンションへの制限におけるソートの抑制
LIMIT.SORTRELをNO
に設定すると、ディメンションまたは値セットを関連ディメンションに制限する際に行われるソートを抑制できます。大きなディメンションを制限する場合、これによってパフォーマンスが大幅に向上します。
注意: LIMIT.SORTRELをNO に設定すると、出力されるディメンションが論理的な順序で表示されない場合があります。 |
LIMITコマンドの制限句に親リレーションを使用すると、階層ディメンションまたはそのディメンション・サロゲートのステータスの設定や、値セットへの値の代入を、階層内のファミリ・リレーションに基づいて実行できます。
構文
LIMIT {dimension | valueset} [concat-component] limit-type-
[family-keyword ] USING parent-relation-clause [IFNONE label]
ここで、
family-keywordは次の構成のいずれかです。
parent-relation-clauseの構文は、指定するオブジェクトのディメンション性によって異なります。
親リレーションが多次元の場合は、次の構文を使用します。
RELATION parentrel [QUALIFY relation-dimension-name [inclusive-val-args... | CURRENT]...]
(親リレーションが1次元の場合もこの構文を使用できます。)
親リレーションが1次元の場合、次の簡素化された構文を使用できます。
parentrel [inclusive-val-args | CURRENT]
パラメータ
ステータスが設定されるディメンションまたはディメンション・サロゲートの名前。
値が代入される値セットの名前、またはLIMITファンクション。
制限の決定に使用する値の連結ディメンションのコンポーネントの名前。(この引数の詳細な説明は、LIMITコマンドを参照してください。)
Oracle OLAPによる現行のステータス・リストの変更方法を指定するキーワード。(これらのキーワードのリストおよび説明は、LIMITコマンドを参照してください。)
valuelist内の各値の親を検索します。ディメンションでは、valuelistが存在しない場合、ステータスにある各値の親が検索されます。値セットでは、valuelistが存在しない場合、値セット内にある各値の親が検索されます。親の検索にはparent-relationが使用されます。
valuelist内の各値の子を検索します。ディメンションでは、valuelistが存在しない場合、ステータスにある各値の子が検索されます。値セットでは、valuelistが存在しない場合、値セット内にある各値の子が検索されます。子の検索にはparent-relationが使用されます。
DISTANCE句を含めない場合、次のようになります。
valuelist内の各値の祖先(親、その親など)を検索します。ディメンションでは、valuelistが存在しない場合、ステータスにある各値の祖先が検索されます。
値セットでは、valuelistが存在しない場合、値セット内にある各値の祖先が検索されます。つまり、祖先の検索とは、値の親、その親の親というように、親のない値に達するまで検索を行うことです。
DISTANCE句を含める場合、generationで指定した世代のメンバーである祖先に制限されます。
generationでは、現行の世代には0、親には1、親の親には2、親の親の親には3(以降同様)を指定します。
負の値に対しては、子孫の世代(つまり、-1は子、-2は孫、以降同様)が返されます。
DISTANCE句を含めない場合、次のようになります。
valuelist内の各値の子孫(子、孫など)を検索します。ディメンションでは、valuelistが存在しない場合、ステータスにある各値の子孫が検索されます。
値セットでは、valuelistが存在しない場合、値セット内にある各値の子孫が検索されます。つまり、子孫の検索とは、値の子、その子の子というように、子のない値に達するまで検索を行うことです。
DISTANCE句を含める場合、generationで指定した世代のメンバーである子孫に制限されます。
generationでは、現行の世代には0、子には1、孫には2、孫の子には3(以降同様)を指定します。
負の数に対しては、祖先の世代(つまり、-1は親、-2は親の親、以降同様)が返されます。
valuelistの値、それ自身を含む、valuelist内の各値のすべての兄弟オブジェクトを検索します。SIBLINGSキーワードを使用した1つのLIMIT文を発行するのは、PARENTSを指定したLIMIT文を発行してから、CHILDRENを指定したLIMIT文を発行するのと同じです。ディメンションでは、valuelistが存在しない場合、ステータスにある各値の兄弟オブジェクトが検索されます。値セットでは、valuelistが存在しない場合、値セット内にある各値の兄弟オブジェクトが検索されます。
(省略形はTOPANC)階層の最上位にあるメンバー、つまり、祖先を持たないメンバーを検索します。これは、次の2つのLIMITコマンドを発行するのと同等です。
LIMIT dimension to ANCESTORS .... LIMIT dimension REMOVE DESCENDANTS....
(省略形はBOTTOMDESC)階層の最下位にあるメンバー、つまり、子孫を持たないメンバーを検索します。
特定のparent-relationに基づいて、子孫(子、孫など)を検索します。違いは値の順序です。DESCENDANTSでは、値をレベルごとにグループ化し(すべての子、すべての孫など)、HIERARCHYでは、子の各グループをその親の次に配置します。HIERARCHYでは、ステータスにある元の値(つまり、LIMIT文が実行される前にステータスにあった値)が含まれます。
子を親の前にリストするように指定します。デフォルトでは、子は親の後にリストされます。
ステータスから元の値を除外します。デフォルトでは、元の値はステータスに含まれます。
valuelist内の各値について、n世代スキップします。ディメンションでは、valuelistが存在しない場合、ステータスにある各値についてn世代スキップします。値セットでは、valuelistが存在しない場合、値セット内にある各値についてn世代スキップします。このキーワードをDEPTHと組み合せて使用すると、ドリルダウン時に有効です(例10-29「SKIPとDEPTを使用したドリルダウン」を参照)。
valuelistの各値からn世代下まで含めます。ディメンションでは、valuelistが存在しない場合、ステータスにある各値のn世代下まで含まれます。値セットでは、valuelistが存在しない場合、値セット内にある各値のn世代下まで含まれます。デフォルトでは、DEPTH値は99です。このキーワードをSKIPと組み合せて使用すると、値のドリルダウン時に有効です。
子のグループが構成されるたびに、テキスト式で表された文を実行します。たとえば、Oracle OLAP変数に格納されている情報に基づいて、子の各グループをソートできます。次の文では、子のグループが構成されると、売上数量に基づいて市場が昇順にソートされます。
LIMIT market TO HIERARCHY RUN 'SORT market a unit.m' USING -
market.market
注意: この例で、TOのかわりにKEEPまたはREMOVEをLIMIT文に使用すると、SORT文は無効になります。 |
親の値を決定する際に使用する値を指定します。
ディメンションの親リレーションの名前を指定します。
ディメンション・サロゲートを制限するには、サロゲートの作成元のディメンションの親リレーションを使用します。
parent-relation-clauseの先頭を識別します。parentrelが多次元リレーションの場合は、このキーワードを使用します。
parentrelのディメンションの名前を指定します。この句の使用方法は、LIMITコマンドとLIMITファンクションのどちらをコーディングするかによって異なります(「LIMITのループ動作(親リレーションを使用)」を参照)。
親の値を決定する際に使用する値を指定します。LIMITコマンドのvaluelist句に対するinclusive-val-args引数の構文に記述されている任意のinclusive valuelist引数を指定できます。構文の詳細は、LIMITコマンド(値を使用)を参照してください。
ディメンションの現行値の子の値に制限するように指定します。(これは、dimension_name
+0
を指定した場合と同じになります。)
要求されたステータスが、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は、market
とmarket.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キーワードを使用し、market
をEast
、Central
および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コマンドでは、ディメンションおよびそのディメンション・サロゲートの現行のステータス・リストの設定や、値セットへの値の代入ができます。
LIMITコマンドでNOCONVERTキーワードを使用すると、ディメンションのステータスが別のディメンション内の値の位置番号に基づいて設定されます。
構文
LIMIT{dimension | valueset} [concat-component] limit-type -
NOCONVERT [{unrelated-dimension|numeric-valueset}] -
[IFNONE label]
パラメータ
ステータスが設定されるディメンションまたはディメンション・サロゲートの名前。
値が代入される値セットの名前、またはLIMITファンクション。
制限の決定に使用する値の連結ディメンションのコンポーネントの名前。(この引数の詳細な説明は、LIMITコマンドを参照してください。)
Oracle OLAPによる現行のステータス・リストの変更方法を指定するキーワード。(これらのキーワードのリストおよび説明は、LIMITコマンドを参照してください。)
ディメンションのステータスを、別のディメンションのステータス・リスト内にある指定した値の位置番号に基づいて設定します。
制限するディメンションに関連しないディメンションの名前を指定します。この引数を使用することで、ディメンションまたは値セットのステータスを、関連しないディメンションのステータスにある各値の位置番号に基づいて設定するように指定できます。関連しないディメンションのステータスにある値に基づいたステータスの設定は、2つのディメンションが異なるアナリティック・ワークスペース内にある場合に特に有効です(たとえば、それぞれ別のアナリティック・ワークスペースにある2つの製品ディメンションの間に1対1の関係が存在する場合など)。
数値の値セットを指定します。この引数を使用すると、NOCONVERTによって、ステータスが値セットの数値に基づいて設定されます。数値は、ディメンションのデフォルト・ステータス内における値の位置を表します。
(OLAP DMLプログラム内でのみ使用)要求されたステータスが、NULLステータスであるか、NULLステータスの関連ディメンション(つまり、値のない関連ディメンション)に基づく場合、プログラムの実行をlabelに分岐することを指定します いずれの場合も、プログラムの実行が分岐すると、NULLステータスは適用されません。(この句の詳細な説明は、LIMITコマンドを参照してください。)
LIMITコマンドでは、ディメンションおよびそのディメンション・サロゲートの現行のステータス・リストの設定や、値セットへの値の代入ができます。
LIMITコマンドでPOSLISTキーワードを使用すると、ディメンションのステータスがそのディメンション内の値の位置に基づいて設定されます。
パラメータ
ステータスが設定されるディメンションまたはディメンション・サロゲートの名前。
値が代入される値セットの名前、またはLIMITファンクション。
制限の決定に使用する値の連結ディメンションのコンポーネントの名前。(この引数の詳細な説明は、LIMITコマンドを参照してください。)
Oracle OLAPによる現行のステータス・リストの変更方法を指定する標準キーワード(LIMITコマンドを参照)。
ディメンションのステータスを、ディメンション内の値の位置に基づいて設定します。poslist-textexpはテキスト式です。この式の各行は、制限するディメンションの位置番号を評価する数値です。
要求されたステータスが、NULLステータスであるか、NULLステータスの(つまり、値のない)関連ディメンションに基づく場合、プログラムの実行をlabelに分岐することを指定します。(この句の詳細な説明は、LIMITコマンドを参照してください。)