この章では、次の項目について説明します。
文字AからKで始まる各OLAP DMLファンクションにつき1つの項目(ABSから説明)
この他のOLAP DMLファンクションについては、第8章「OLAP DMLファンクション: LからZ」でアルファベット順に説明しています。
その他のOLAP DMLリファレンス項目については、第4章「OLAP DMLプロパティ」、第5章「OLAP DMLオプション」、第9章「OLAP DMLコマンド: AからG」および第10章「OLAP DMLコマンド: HからZ」を参照してください。
OLAPファンクションの動作は、他のプログラミング言語のファンクションの動作とほとんど同じです。アクションを開始したり値を返します。OLAP DMLファンクションには、「すべてのデータ・オブジェクトの値に対するOLAP DML文の適用」で説明する、ループ特性がある点が異なります。
OLAP DMLファンクションの多くは、標準のテキスト・ファンクションと計算ファンクションです。他のOLAP DMLファンクションは、さらに複雑な情報を返します。たとえば、OLAP DMLでは、アナリティック・ワークスペースおよびそのオブジェクトに関する様々な種類の情報を取得できるAWファンクションやOBJファンクション、およびユーザーの要求により集計データの計算をその場で実行できるAGGREGATEファンクションが提供されています。
また、ファンクションとして実行可能なOLAP DMLプログラムを作成することにより、OLAP DMLの機能を強化できます。
ヒント: OLAP DML文の多くはコーディングの際、文の名前の頭文字および2つの子音字を並べた3文字に省略して表すことができます。 |
A B C D E F G H I J K L M N O P Q R S T U V W Y
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
Y
OLAP DMLの代表的な数値ファンクションやテキスト・ファンクションには次のようなものがあります。
データ・モデルに特有の次のようなファンクションもあります。
アナリティック・ワークスペースおよびオブジェクト情報のファンクション
集計、割当ておよびモデル仕様のファンクション
変換ファンクション
システムおよびデータベース情報のファンクション
日時ファンクション
日付のみのファンクション
財務ファンクション
ファイル管理ファンクション
NAファンクション
数値(一般)ファンクション
数値集計ファンクション
オブジェクトの値取得ファンクション
プログラム引数およびコンテキストのファンクション
レポート・ファンクション
統計ファンクションおよび予測ファンクション
ステータス操作ファンクション
テキスト・ファンクション
時系列ファンクション
ABSファンクションは、式の絶対値を計算するファンクションです。実数の絶対値は、符号に関係なくその数値そのものであるため、このファンクションが返す値は常に正の値になります。たとえば、3は3と-3の両方の絶対値です。
例
例7-1 絶対範囲の値の検索
1996年のBostonにおけるスポーツウェアの予定売上高と、実際の売上高の差を求めるとします。予定額と実際の売上高の差が、プラスとマイナスの両方で$5,000より大きい月を調べます。ABSを使用して、それらの月を検索できます。
LIMIT product TO 'Sportswear' LIMIT district TO 'Boston' LIMIT month TO YEAR 'Yr96' LIMIT month KEEP ABS(sales - sales.plan) GT 5000 REPORT DOWN month sales sales.plan sales - sales.plan
DISTRICT: BOSTON ------------PRODUCT------------- -----------SPORTSWEAR----------- SALES - MONTH SALES SALES.PLAN SALES.PLAN -------------- ---------- ---------- ---------- Jun96 79,630.20 73,568.52 6,061.68 Jul96 95,707.30 80,744.18 14,963.12 Aug96 82,004.00 71,811.45 10,192.55 Sep96 89,988.60 78,282.07 11,706.53 Dec96 50,281.40 56,720.87 -6,439.47
ADD_MONTHSファンクションは、指定した日付からnか月後の日付を返すファンクションです。
パラメータ
開始日を識別するDATETIME
式。start_datetimeの日の構成要素が月の最後の日である場合や、返される月の日数が少ない場合は、返される日の構成要素が月末の最後の日になります。それ以外は、返される日付の日の構成要素はstart_datetimeの日の構成要素と同じになります。例7-2「月末の計算」を参照してください。
start_datetimeに追加される月数を表すINTEGER
。
AGGCOUNTファンクションは、指定した変数に関連付けられたAggcount変数の値を取得します。Aggcount変数はINTEGER
変数で、Oracle OLAPは、USING AGGOUNT句を含むDEFINE VARIABLE文を実行する際に、Aggcount変数を自動的に作成します。
戻り値
INTEGER
AVERAGE、HAVERAGE、WAVERAGEまたはHWAVERAGEを持つRELATION(集計用)文の実行時に、集計値の計算に加えられるリーフ・ノード数の非NA
カウント数であるAggcount変数の値。
例
例7-3 Aggcount変数についてのレポート
アナリティック・ワークスペースに次の定義を持つオブジェクトが格納されているとします。
DEFINE geog DIMENSION TEXT DEFINE time DIMENSION TEXT DEFINE product DIMENSION TEXT DEFINE cc_geog_product COMPOSITE <geog product> COMPRESSED DEFINE sales VARIABLE DECIMAL <time cc_geog_product <geog product>> WITH AGGCOUNT DEFINE geog_parentrel RELATION geog <geog> DEFINE product_parentrel RELATION product <product> DEFINE time_parentrel RELATION time <time> DEFINE aggsales AGGMAP AGGMAP RELATION time_parentrel OPERATOR AVERAGE ARGS COUNT YES RELATION geog_parentrel RELATION product_parentrel END
注意すべき点は、sales
変数の定義にはAggcount変数の定義が含まれていること、およびaggsales
aggmapではtime_parentrel
リレーションのRELATION文にAVERAGE
演算子が含まれていることです。
また、sales
変数のベース値のみが移入され、RadioおよびTVに対するsalesの値が次のようになったとします。
REPORT sales PRODUCT: Radio -------------SALES-------------- --------------TIME-------------- GEOG 2004 2005 Average -------------- ---------- ---------- ---------- Maine 122.93 176.69 NA California 168.32 150.92 NA Quebec NA NA NA Ontario 187.46 164.46 NA USA NA NA NA Canada NA NA NA World NA NA NA PRODUCT: TV -------------SALES-------------- --------------TIME-------------- GEOG 2004 2005 Average -------------- ---------- ---------- ---------- Maine 184.75 135.40 NA California 139.89 145.71 NA Quebec NA NA NA Ontario 123.63 113.32 NA USA NA NA NA Canada NA NA NA World NA NA NA PRODUCT: AV -------------SALES-------------- --------------TIME-------------- GEOG 2004 2005 Average -------------- ---------- ---------- ---------- Maine NA NA NA California NA NA NA Quebec NA NA NA Ontario NA NA NA USA NA NA NA Canada NA NA NA World NA NA NA
AVに対しては集計が行われなかったため、Aggcount変数への移入はまだ行われず、sales
のAggcount変数にはNA
値が格納されます。
ここで、次の文を発行してsales
変数の集計を行います。
AGGREGATE sales USING aggsales
sales
のレポートには、次の値が表示されます。
REPORT sales PRODUCT: Radio -------------SALES-------------- --------------TIME-------------- GEOG 2004 2005 Average -------------- ---------- ---------- ---------- Maine 122.93 176.69 149.81 California 168.32 150.92 159.62 Quebec NA NA NA Ontario 187.46 164.46 175.96 USA 291.24 327.61 309.42 Canada 187.46 164.46 175.96 World 478.70 492.07 485.38 PRODUCT: TV -------------SALES-------------- --------------TIME-------------- GEOG 2004 2005 Average -------------- ---------- ---------- ---------- Maine 184.75 135.40 160.07 California 139.89 145.71 142.80 Quebec NA NA NA Ontario 123.63 113.32 118.47 USA 324.64 281.11 302.87 Canada 123.63 113.32 118.47 World 448.27 394.42 421.35 PRODUCT: AV -------------SALES-------------- --------------TIME-------------- GEOG 2004 2005 Average -------------- ---------- ---------- ---------- Maine 307.67 312.08 309.88 California 308.21 296.63 302.42 Quebec NA NA NA Ontario 311.09 277.78 294.43 USA 615.88 608.71 612.30 Canada 311.09 277.78 294.43 World 926.97 886.49 906.73
Aggcount変数のレポートからは、salesの平均値を集計するために必要なINTEGER
値がAggcount変数に移入されていることがわかります。
REPORT AGGCOUNT (sales) PRODUCT: Radio --------AGGCOUNT (SALES)-------- --------------TIME-------------- GEOG 2004 2005 Average -------------- ---------- ---------- ---------- Maine NA NA 2 California NA NA 2 Quebec NA NA NA Ontario NA NA 2 USA 2 2 4 Canada NA NA 2 World 3 3 6 PRODUCT: TV --------AGGCOUNT (SALES)-------- --------------TIME-------------- GEOG 2004 2005 Average -------------- ---------- ---------- ---------- Maine NA NA 2 California NA NA 2 Quebec NA NA NA Ontario NA NA 2 USA 2 2 4 Canada NA NA 2 World 3 3 6 PRODUCT: AV --------AGGCOUNT (SALES)-------- --------------TIME-------------- GEOG 2004 2005 Average -------------- ---------- ---------- ---------- Maine 2 2 4 California 2 2 4 Quebec NA NA NA Ontario 2 2 4 USA 4 4 8 Canada 2 2 4 World 6 6 12
AGGMAPINFOファンクションは、アナリティック・ワークスペース内のaggmapオブジェクトの仕様に関する情報を返すファンクションです。
集計仕様(AGGMAP型のaggmapオブジェクト)に関する情報は、コンパイル後にのみ取得できます。集計仕様をコンパイルするには、COMPILE文を使用するか、またはFUNCDATAキーワードを指定してAGGREGATEコマンドを実行します。AGGMAPINFOファンクションで使用する前に集計仕様がコンパイルされていない場合は、AGGMAPINFOでコンパイルされます。ALLOCATEで使用するaggmapはコンパイルする必要がありません。
パラメータ
aggmapオブジェクトの名前。
返される情報の種類を指定します。詳細は、表7-1「AGGMAPINFOファンクションのchoiceパラメータのキーワード」を参照してください。
表7-1 AGGMAPINFOファンクションのchoiceパラメータのキーワード
キーワード | データ型 | 説明 |
---|---|---|
ADDED_MODELS |
|
AGGMAP ADDまたはREMOVEモデル文を使用して現在aggmapに追加されているモデル。モデルの名前を複数行のテキスト文字列で返す。 |
AGGINDEX |
|
aggmapにあるAGGINDEX文の設定を示す。 |
CHILDREN member-name |
|
MAINTAIN ADD SESSION文を使用して追加されるディメンション・メンバーで、一時計算メンバーを計算するために使用する方程式の右側に使用。メンバーの名前を複数行のテキスト文字列で返す。 |
CUSTOMMEMBERS |
|
MAINTAIN ADD SESSION文で追加されるメンバー。メンバーの名前を複数行のテキスト文字列で返す。 |
DIMENSION |
|
aggmapで使用されるモデルまたはリレーションのディメンションの名前。メンバーの名前を複数行のテキスト文字列で返す。 |
FCACHE |
|
AGGREGATEファンクションのキャッシュがOracle OLAPにあるかどうかを示す。(AGGMAP型のaggmapにのみ適用。) |
MAPTYPE |
|
aggmapの型。
|
MODELS |
|
aggmapのモデル。モデルの名前を複数行のテキスト文字列で返す。 |
NUMRELS |
|
aggmap仕様にあるRELATION文の合計数。 |
RELATIONS |
|
aggmap仕様のRELATION文で指定されているリレーションの名前。各文を別々の行で表示。 |
STORE |
|
aggmapのCACHE文がSTOREに設定されているかどうかを示す。 |
VARIABLES |
|
AGGMAP ADDまたはREMOVEモデル文または$AGGMAPプロパティを使用してデフォルトのaggmapとして指定されているaggmapオブジェクトの変数。変数の名前を複数行のテキスト文字列で返す。 |
返される情報を具体的に指定します。
PRECOMPUTEを指定すると、RELATION文のPRECOMPUTEキーワードの後にある制限句のテキストを返します。単一のRELATION文を指定するには、rel-pos引数を使用する必要があります。RELATION文にPRECOMPUTEキーワードがない場合はNA
を返します。(AGGMAP型のaggmapにのみ適用。)
RELATIONを指定すると、rel-pos引数で指定したRELATION文の後にあるリレーションの名前を返します。
STATUSを指定すると、rel-pos引数で指定したRELATION文のPRECOMPUTE句をコンパイルした結果のステータス・リストを返します。(AGGMAP型のaggmapにのみ適用。)
aggmapのRELATION文を指定するINTEGER
。このINTEGER
値はRELATION文のリストにおける文の位置を示します。rel-pos引数はRELATION、PRECOMPUTEまたはSTATUSキーワードでのみ使用できます。たとえば、aggmapの最初のRELATION文に関する情報を取得するには、rel-pos引数としてINTEGER
値の1
を使用します。aggmapの4番目のRELATION文に関する情報を取得するには、INTEGER
値の4
を使用します(以降同様)。使用できるのは、1
からaggmap仕様にあるRELATION文の合計数までの任意のINTEGER
値です。aggmapオブジェクトのRELATION文の合計数を取得するには、NUMRELSキーワードを使用します。
例
例7-4 aggmapオブジェクトに関する情報の取得
sales.agg
という名前のaggmapが次の文で定義されているとします。
DEFINE sales.agg AGGMAP <time, product, geography>
次の仕様がAGGMAP文でsales.agg
に追加されているとします。
AGGMAP RELATION time.r PRECOMPUTE (time ne 'Year98') RELATION product.r RELATION geography.r CACHE STORE END
aggmapに仕様が追加されている場合、AGGMAPINFOを使用してその仕様に関する情報を取得できます。
RELATION文で指定されている各階層の名前を参照するには、次の文を使用します。
SHOW AGGMAPINFO(sales.agg RELATIONS)
次の結果が表示されます。
time.r product.r geography.r
次の文と結果で、aggmapオブジェクトにあるRELATION文の数を取得できます。
SHOW AGGMAPINFO(sales.agg NUMRELS) 3
次の文と結果で、即時計算されるデータがセッションのキャッシュに格納されることを確認できます。aggmapにCACHE STORE文が含まれているので、結果はYES
です。
show AGGMAPINFO(sales.agg STORE) YES
次の文によって、aggmapにある2番目のRELATION文で指定されているリレーション名が表示されます。
SHOW AGGMAPINFO(sales.agg RELATION 2) product.r
次の文によって、aggmapにある最初のRELATION文のPRECOMPUTEキーワードの後にある制限句が表示されます。
SHOW AGGMAPINFO(sales.agg PRECOMPUTE 1) time NE 'YEAR98'
time
ディメンション値がJan98
からDec99
、Year98
およびYear99
であるとします。次の文によって、aggmapにある最初のRELATION文のディメンションに対するステータス・リストが表示されます。
SHOW AGGMAPINFO(sales.agg STATUS 1) Jan98 TO Dec99, Year99
RELATION文の制限句でtime
ディメンション値がYear98
と等しくないように指定されているので、Year98
以外のすべてのtime
ディメンション値がステータスに含まれます。
次の文によって、sales.agg
のaggmapの型が表示されます。
SHOW AGGMAPINFO(sales.agg MAPTYPE) AGGMAP
AGGREGATEファンクションは、指定されたaggmapでPRECOMPUTEと指定されていない変数のデータを計算します。 (事前計算するデータを指定する方法は、PRECOMPUTE文およびRELATION(集計用)文のPRECOMPUTE句を参照してください。)集計の対象になるのは、現在ステータスにある値に限られます。
構文
AGGREGATE (var ... [USING aggmap] -
[FROM fromspec|FROMVAR textvar] [FORCECALC FORCEORDER] [COUNTVAR countvar])
パラメータ
(必要な場合は)計算されてから返されるデータの変数の名前。
このキーワードは、指定したaggmapを使用して集計が実行されることを示します。
データの集計方法を指定する事前定義されたaggmapの名前。aggmapの詳細は、DEFINE AGGMAPを参照してください。
このキーワードは、異なるオブジェクトから詳細データが取得されることを示します。FROM句は、集計の実行時における詳細データの取得元の変数を指定する唯一の方法です。「集計の詳細データの取得元を指定する方法」を参照してください。
集計の詳細データの取得元である任意にディメンション化された変数、計算式またはリレーション。
このキーワードは、キャップストーン集計を実行するために異なるオブジェクトから詳細データが取得されることを示します。FROMVAR句は、集計の実行時における詳細データの取得元の変数を指定する唯一の方法です。「集計の詳細データの取得元を指定する方法」を参照してください。
リーフ・ノードを解決するために使用される任意にディメンション化された変数。値を計算するときにノードが詳細データを必要としない場合は、NA
を指定します。
該当するセルに値が格納されている場合でも、aggmap内にあるRELATION文のPRECOMPUTE句で指定されていない値は再計算するように指定します。ユーザーが詳細データ・セルを変更し、動的計算集計セルに反映された変更値を参照できるようにする場合に、FORCECALCキーワードを使用します。
注意: 変数に$AGGREGATE_FORCECALCプロパティを設定すると、この動作を集計時のデフォルトの動作にすることができます。この場合、FORCECALCキーワードをAGGREGATEファンクションで指定する必要はありません。 |
aggmapにリストされているRELATION文と同じ順序で計算を実行するよう指定します。AGGREGATEコマンドで計算された値の一部を変更した場合に、このオプションを使用します。このオプションを指定しないと、AGGREGATEファンクションで使用する最適化方法において、変更された値が無視されることがあります。FORCEORDERを使用するとパフォーマンスが低下します。
注意: 変数に$AGGREGATE_FORCEORDERプロパティを設定すると、この動作を集計時のデフォルトの動作にすることができます。この場合、FORCEORDERキーワードをAGGREGATEファンクションで指定する必要はありません。 |
AVERAGE、HAVERAGE、HWAVERAGEまたはWAVERAGE演算子を含むRELATION(集計用)文について計算された集計値に加えられたリーフ・ノードの数の非NA
カウント数を格納する場合、countvarで指定されたユーザー定義の変数を使用するよう指定します。
注意: 通常、平均集計値の格納にユーザー定義のCountvar変数は使用しません。かわりに、Oracle OLAPが作成したAggcount変数を使用します。圧縮コンポジット用の平均演算子を持つRELATION(集計用)文が集計仕様に含まれる場合は、Aggcount変数を使用する必要があります。Aggcount変数の詳細は、「Aggcount変数」を参照してください。 |
countvar変数は、varで指定された変数と同一のディメンションが同一の順序で定められているINTEGER
変数である必要があります。複数の変数を同時に集計する場合、個別に結果を記録するためにINTEGER
変数をそれぞれ定義する必要があります。
使用上の注意
実行時計算をサポートする手順
事前集計と実行時集計を組み合せる手順は次のとおりです。
事前計算されるデータの量を制限するaggmapを作成します。
AGGREGATEコマンドをFUNCDATA引数で実行します。
AGGREGATEコマンドの実行後に変更を加えた場合(「aggmapのコンパイル」を参照)、COMPILE文でaggmapを再コンパイルします。
$AGGREGATE_FROMプロパティをデータ変数に追加します(「実行時計算をトリガーするためのNA値の使用」を参照)。
アナリティック・ワークスペースに対してUPDATEおよびCOMMITを実行します。
aggmapのコンパイル
データをロードする場合は、明示的にCOMPILE文を実行するかAGGREGATEコマンドをFUNCDATA引数で実行し、必ずaggmapをコンパイルしてください。コンパイルされていない場合、AGGREGATEファンクションを使用する各セッションでaggmapは実行時に再コンパイルされます。aggmapをコンパイルするときは、モデルの計算など他の計算を先に実行しておきます。
aggmap定義のディメンションまたはaggmapのテキストに含まれるリレーションをメンテナンスした後は、aggmapを再コンパイルする必要があります。
データ値の実行時変更
ユーザーが実行時にデータ値を変更する可能性がある場合、そのデータが同期化されていないことがあります。この問題を回避する方法は次のとおりです。
ALLOCATE文を使用して、新しい集計のデータを階層の下位にある関係する値に配布する。
実行時の変更の影響を受けるデータを事前計算しない(格納された集計値は、実行時の変更を関係する値に反映するように変更できないため)。
実行時計算をトリガーするためのNA値の使用
$NATRIGGERプロパティを変数に追加することで、データが問い合されるたびにAGGREGATEファンクションを暗黙的にコールできます。次の文によって、sales.aggmap
というaggmapを使用してsales
データが集計されます。
CONSIDER sales PROPERTY '$NATRIGGER' 'AGGREGATE(sales USING sales.aggmap)'
以降は、REPORT
SALES
などの文でAGGREGATEファンクションが実行され、NAではなく計算された値が返されます。
部分ロールアップ後のAGGREGATEファンクションの使用
生成するすべてのデータを事前計算できるほどバッチ・ウィンドウが長くない場合、連日に分けて集計を実行し、AGGREGATEファンクションを使用して残りを計算します。各段階で次のように実行します。
新しいデータが集計されるように、aggmapにあるRELATION文のPRECOMPUTE句を変更します。
AGGREGATEコマンドをFUNCDATAキーワードで実行します。
AGGREGATEファンクションが残りのデータを計算するように、$NATRIGGERプロパティが変数に設定されていることを確認します。
複数のaggmapの使用
変数をロールアップする際に使用するaggmapは、可能なかぎり1つにしてください。ただし、場合によっては、希望する方法でデータをロールアップするために複数のaggmapが必要となる変数もあります。データをロールアップするために複数のaggmapが必要となる変数がある場合、最後のaggmapが、AGGREGATEファンクション用として確保されるメタデータに相当するため、一部のデータを即時計算すると問題が発生します。AGGREGATEファンクションでは、AGGREGATEコマンドで使用するすべてのaggmapを結合したメタデータが必要です。この問題を解決するには、NA
値を正しく識別する別のaggmapを作成し、AGGREGATEファンクションで使用します。このaggmapは必ずコンパイルしてください。
次の質問に対する答えが確実ではない場合、AGGREGATEファンクションで複数のaggmapを使用しないでください。
この質問に対して「定義している」と確実に答えられない場合は、AGGREGATEファンクションで複数のaggmapを使用しないでください。
例
この項では、一部のAGGREGATEファンクションの使用例を示します。その他の集計の例は、AGGMAPコマンドの例を参照してください。
例7-5 式の計算式としてのAGGREGATEファンクションの使用
例9-32「キャップストーン集計」は、AGGREGATEコマンドを使用して最終キャップストーン集計を実行する例です。キャップストーン集計は、計算式の式として実行時に実行することもできます。
アナリティック・ワークスペースに次のオブジェクト定義が含まれているとします。
DEFINE GEOG.D DIMENSION TEXT DEFINE GEOG.PARENTREL RELATION GEOG.D <GEOG.D> DEFINE TIME.D DIMENSION TEXT DEFINE TIME.PARENTREL RELATION TIME.D <TIME.D> DEFINE SALES_JAN76 VARIABLE INTEGER <GEOG.D> DEFINE SALES_FEB76 VARIABLE INTEGER <GEOG.D> DEFINE SALES_MAR76 VARIABLE INTEGER <GEOG.D> DEFINE SALES_CAPSTONE76 VARIABLE INTEGER <GEOG.D TIME.D> DEFINE CAPSTONE_SOURCE VARIABLE TEXT <TIME.D>
次の定義で2つのaggmapオブジェクトを作成します。ここでは、capstone_aggmap
が、PRECOMPUTE NA
句を使用したRELATION文で構成されていることに注意してください。
DEFINE LEAF_AGGMAP AGGMAP AGGMAP RELATION geog.parentrel OPERATOR SUM END DEFINE CAPSTONE_AGGMAP AGGMAP AGGMAP RELATION time.parentrel OPERATOR SUM PRECOMPUTE (NA) END
例9-32「キャップストーン集計」では、AGGREGATEコマンドを使用して最終キャップストーン集計が実行されます。この例では、AGGREGATEファンクションを計算式の式として含むf_sales_capstone76
という名前の計算式としてキャップストーン集計を定義します。
DEFINE F_SALES_CAPSTONE76 FORMULA INTEGER <GEOG.D TIME.D> EQ AGGREGATE ( sales_capstone76 USING capstone_aggmap fromvar capstone_source)
アナリティック・ワークスペースで集計されない変数および計算式に対してレポートを作成すると、結果は次のとおりになります。
GEOG.D SALES_JAN76 SALES_FEB76 SALES_MAR76 -------------- -------------- -------------- -------------- Boston 1,000 2,000 3,000 Medford 2,000 4,000 6,000 San Diego 3,000 6,000 9,000 Sunnydale 4,000 8,000 12,000 Massachusetts NA NA NA California NA NA NA United States NA NA NA --------------------F_SALES_CAPSTONE76--------------------- --------------------------TIME.D--------------------------- GEOG.D Jan76 Feb76 Mar76 76Q1 -------------- -------------- -------------- -------------- -------------- Boston 1,000 2,000 3,000 6,000 Medford 2,000 4,000 6,000 12,000 San Diego 3,000 6,000 9,000 18,000 Sunnydale 4,000 8,000 12,000 24,000 Massachusetts NA NA NA NA California NA NA NA NA United States NA NA NA NA ---------------------SALES_CAPSTONE76---------------------- --------------------------TIME.D--------------------------- GEOG.D Jan76 Feb76 Mar76 76Q1 -------------- -------------- -------------- -------------- -------------- Boston 1,000 2,000 3,000 NA Medford 2,000 4,000 6,000 NA San Diego 3,000 6,000 9,000 NA Sunnydale 4,000 8,000 12,000 NA Massachusetts NA NA NA NA California NA NA NA NA United States NA NA NA NA
次のAGGREGATE文を使用してリーフ変数を集計します。
AGGREGATE sales_jan76 sales_feb76 sales_mar76 USING leaf_aggmap
リーフ変数のレポートには、集計された値が表示されます。
GEOG.D SALES_JAN76 SALES_FEB76 SALES_MAR76 -------------- -------------- -------------- -------------- Boston 1,000 2,000 3,000 Medford 2,000 4,000 6,000 San Diego 3,000 6,000 9,000 Sunnydale 4,000 8,000 12,000 Massachusetts 3,000 6,000 9,000 California 7,000 14,000 21,000 United States 10,000 20,000 30,000
f_sales_capstone76
計算式のレポートには、76Q1
の集計された値が表示されます。
--------------------F_SALES_CAPSTONE76--------------------- --------------------------TIME.D--------------------------- GEOG.D Jan76 Feb76 Mar76 76Q1 -------------- -------------- -------------- -------------- -------------- Boston 1,000 2,000 3,000 6,000 Medford 2,000 4,000 6,000 12,000 San Diego 3,000 6,000 9,000 18,000 Sunnydale 4,000 8,000 12,000 24,000 Massachusetts 3,000 6,000 9,000 18,000 California 7,000 14,000 21,000 42,000 United States 10,000 20,000 30,000 60,000
これに対し、sales_capstone76
変数には76Q1
の集計値が格納されないので、この変数のレポートには集計値は表示されません。
---------------------SALES_CAPSTONE76---------------------- --------------------------TIME.D--------------------------- GEOG.D Jan76 Feb76 Mar76 76Q1 -------------- -------------- -------------- -------------- -------------- Boston 1,000 2,000 3,000 NA Medford 2,000 4,000 6,000 NA San Diego 3,000 6,000 9,000 NA Sunnydale 4,000 8,000 12,000 NA Massachusetts 3,000 6,000 9,000 NA California 7,000 14,000 21,000 NA United States 10,000 20,000 30,000 NA
例7-6 レポートに対するデータの即時集計
units
変数は、tp.agg
というaggmapを使用して即時集計されます。
units
変数のオブジェクト定義は次のとおりです。
DEFINE units VARIABLE INTEGER <time product>
time
の親リレーションには次の値が含まれます。
---TIME.PARENTREL---- --TIME.HIERARCHIES--- TIME STANDARD YTD ---------- ---------- ---------- Jan01 Q1.01 Last.Ytd Feb01 Q1.01 Last.Ytd Mar01 Q1.01 Last.Ytd Q1.01 2001 NA
product
ディメンションの親リレーションには次の値が含まれます。
PRODUCT.PA PRODUCT RENTREL ---------- ---------- Food Na Snacks Food Drinks Food Popcorn Snacks Cookies Snacks Cakes Snacks Soda Drinks Juice Drinks
units
変数では、データは各ディメンション階層の最下位レベルにのみ格納されます。
-------------------UNITS------------------- -------------------TIME-------------------- PRODUCT Jan01 Feb01 Mar01 Q1.01 ----------- ---------- ---------- ---------- ---------- Food NA NA NA NA Snacks NA NA NA NA Drinks NA NA NA NA Popcorn 2 2 4 NA Cookies 3 6 3 NA Cakes 4 4 2 NA Soda 7 3 9 NA Juice 1 3 2 NA
aggmapは、すべてのデータが即時計算されることを指定しています。
DEFINE tp.agg AGGMAP LD <time product> Aggmap AGGMAP RELATION time.parentrel PRECOMPUTE (NA) RELATION product.parentrel PRECOMPUTE (NA) END
次のREPORT文は、AGGREGATEファンクションを使用してデータを計算します。
REPORT aggregate(units USING tp.agg) -------AGGREGATE(UNITS USING TP.AGG)------- -------------------TIME-------------------- PRODUCT Jan01 Feb01 Mar01 Q1.01 ----------- ---------- ---------- ---------- ---------- Food 17 18 20 55 Snacks 9 12 9 30 Drinks 8 6 11 25 Popcorn 2 2 4 8 Cookies 3 6 3 12 Cakes 4 4 2 10 Soda 7 3 9 19 Juice 1 3 2 6
例7-7 $NATRIGGERを使用したデータ集計
$NATRIGGERプロパティでAGGREGATEファンクションをunits
に追加すると、単純なREPORT文で集計結果を表示できます。
CONSIDER units PROPERTY '$NATRIGGER' 'AGGREGATE(units USING tp.agg)' REPORT units -------------------UNITS------------------- -------------------TIME-------------------- PRODUCT Jan01 Feb01 Mar01 Q1.01 ----------- ---------- ---------- ---------- ---------- Food 17 18 20 55 Snacks 9 12 9 30
例7-8 1つの値を除くすべての値の即時計算
AGGREGATEファンクションは、RELATION文のPRECOMPUTE句で指定されたデータの補数を計算します。これにより現在ステータスにある値が返されます。
たとえば、次のRELATION文を含むaggmapを使用するとします。
RELATION letter.letter PRECOMPUTE ('AA')
AGGREGATEファンクションは、次に示すようにAA
を除くすべての集計を計算します。
REPORT AGGREGATE(units USING letter.aggmap) AGGREGATE(UNITS LETTER USING LETTER.AGGMAP) -------------- -------------------- A 3 AA NA AB 3 AAB 2 ABA 1 ABB 2 AAAA 1 AABA 2 ABAA 1 ABBB 1 ABBA 1 ...
AGGREGATIONファンクションをモデル内で使用すると、カスタム集計を表すモデルの作成が可能です。このようなaggmapは、AGGREGATEファンクションの動的集計で使用できます。
注意: AGGREGATIONファンクションは動的集計でのみ使用されるため、このようなファンクションを含むモデルはAGGREGATEコマンドでは使用できません。 |
パラメータ
カスタム集計に含まれる1つ以上のディメンション値のリスト。指定する値は、ターゲット・ディメンション値が属しているディメンションと同じディメンションに属している必要があります。各ディメンション値はテキスト・リテラルとして指定する必要があります。変数のようにテキスト式によって表すことはできません。
例
例7-9 カスタム集計を作成するためのAGGREGATIONファンクションの使用
それぞれのステップで、次のような各コード行をプログラムで実行します。
新しいディメンション値my_time
をtime
ディメンションに追加します。
MAINTAIN time ADD 'My_Time'
モデルmytime_custagg
を定義し、AGGREGATIONファンクションを使用してこのモデルの仕様を設定します。
DEFINE mytime_custagg MODEL MODEL JOINLINES('DIMENSION time' 'My_Time = AGGREGATION(\'23\' \'24\')')
(引用符付き文字列に引用符を使用する場合は、バックスラッシュのエスケープ文字が必要です。)
sales_aggmap
というaggmapを定義します。
DEFINE sales_aggmap AGGMAP <time cpc <customer product channel> > AGGMAP RELATION prntrel.time RELATION prntrel.chan RELATION prntrel.prod RELATION prntrel.cust END
モデルmytime_custagg
をsales_aggmap
に追加します。
AGGMAP ADD mytime_custagg TO sales_aggmap
対象とする値に各ディメンションを制限し、レポートを作成します。
" Run a report LIMIT time TO 'My_Time' '23' '24' LIMIT channel TO '5' LIMIT product TO '70' LIMIT customer TO '114' REPORT DOWN time AGGREGATE(sales USING sales_aggmap)
CHANNEL: 5 PRODUCT: 70 --AGGREGATE(SALES--- USING SALES_AGGMAP)- ------CUSTOMER------ TIME 114 -------------- -------------------- my_time 682,904.34 23 84,982.92 24 597,921.42
ANYファンクションは、ブール式のいずれかの値がTRUE
の場合にYES
を返し、式のいずれの値もTRUE
ではない場合にNO
を返すファンクションです。
パラメータ
評価されるブール式。
内部動作が若干変更されます。このキーワードは、元のパフォーマンスが非常に遅い場合にのみ指定してください。
結果のディメンションの名前。または、boolean-expressionの1つのディメンションと結果のディメンションとする別のディメンションとの間のリレーションの名前。
デフォルトでは、ANYはYES
値またはNO
値のどちらか1つを返します。結果の1つ以上のディメンションを指定すると、ANYは指定されているディメンションでTRUE
値を調べ、値の配列を返します。各ディメンションは、boolean-expressionのディメンションであるか、そのディメンションの1つと関連付けられている必要があります。
ヒント: 指定したディメンションがboolean-expressionの実際のディメンションではなくboolean-expressionのディメンションに関連付けられたディメンションであり、かつ2つのディメンション間のリレーションが複数ある場合は、ディメンション間のデフォルトのリレーションを使用して計算が行われます。(デフォルトのリレーションの詳細は、RELATIONコマンドを参照してください。)Oracle OLAPでこのデフォルトのリレーションを使用しない場合は、リレーションの名前を指定して、関連付けられたディメンションを指定します。 |
使用上の注意
ANYでのNASKIPの影響
ANYはNASKIPオプションの影響を受けます。NASKIPの設定がYES
(デフォルト)の場合、NA
ではない式のいずれかの値がTRUE
であるときにANYはNA
値を無視してYES
を返し、いずれの値もTRUE
ではないときにNO
を返します。NASKIPの設定がNO
の場合、ANYは式のいずれかの値がNA
であればNA
を返します。式のすべての値がNA
の場合は、NASKIPの設定にかかわらず、ANYはNA
を返します。
DAY、WEEK、MONTH、QUARTERまたはYEAR型のデータ
boolean-expressionがDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションによってディメンション化されている場合、これらの型の他の任意のディメンションを関連ディメンションとして指定できます。Oracle OLAPでは、これらのディメンション間の暗黙的なリレーションを使用します。これらのディメンションのいずれかと別のディメンションとのマッピング(週から月など)を制御するには、ディメンション間のリレーションを明示的に定義し、そのリレーションの名前をANYファンクションのdimension引数として指定します。
Oracle OLAPは、関連ディメンションの期間ごとに、ターゲット期間に終了するすべてのソース期間のデータ値を調べます。この方法は、どのディメンションがより上位の集計期間を保持しているかにかかわらず、適用されます。
例
例7-14 TRUE値の有無の調査(地区別)
スポーツウェアの売上が$150,000を超える月が最低1回あった地区を探すとします。ANYファンクションを使用して、いずれかの月でブール式(sales GT 150000
)がTRUE
であるかどうかを判断します。district
でディメンション化された結果を得るために、ANYファンクションの2番目の引数としてdistrict
を指定します。
LIMIT product TO 'SPORTSWEAR' REPORT HEADING 'High Sales' ANY(sales GT 150000, district)
この文によって生成される出力は、次のとおりです。
DISTRICT High Sales -------------- ---------- Boston NO Atlanta YES Chicago NO Dallas YES Denver NO Seattle NO
ARCTANファンクションは、指定した正接の角度値をラジアン単位で計算するファンクションです。
特定の比の逆正接を示す全範囲(0
から2
π)の数値を取得するには、ARCTAN2を使用します。
ARCTAN2ファンクションは、特定の比の逆正接を示す全範囲(0
から2
π)の数値を返すファンクションです。このファンクションは、引数の符号に応じて-πからπまでの範囲で値を返します。値はラジアン単位で表されます。
指定した正接の角度値(比以外)をラジアン単位で計算するには、ARCTANを使用します。
OLAP DMLプログラムの内部でARGファンクションを使用すると、プログラムに渡される引数を参照できます。このファンクションは、1つの引数をテキスト値として返します。
注意: 通常は、プログラムに渡される引数の参照にARGファンクションを使用しなくても済むよう、ARGUMENT文を使用して、プログラム内で引数を定義します。プログラムに渡される引数をARGUMENTを使用して定義する方法の詳細は、「プログラムに渡される引数の宣言」を参照してください。 |
パラメータ
参照する引数の位置に応じた数値。ARG(1)
を指定するとプログラムの最初の引数が返され、ARG(2)
を指定するとプログラムの2番目の引数が返されます(以降同様)。プログラムによってコールされる引数の数がn個未満の場合、ARGはNULL値を返します。また、ARGはnの値がゼロまたは負の値の場合にもNULL値を返します。
例
例7-20 引数の代入
売上レポートを生成するプログラムがあるとします。任意の2つの期間(月単位)を対象にしてレポートを生成できるようにするため、プログラム内ではmonth
ディメンションを特定の月に制限しないことにします。そのかわりに、ARGファンクションをLIMITコマンド内で使用し、2か月間の開始月と終了月は、プログラムの実行時に引数で指定するようにします。
ARGファンクションの前にはUPCASEファンクションが記述されています。UPCASEファンクションを使用すると、アナリティック・ワークスペース内のディメンション値が大文字で指定されている場合、引数を大文字または小文字で指定できます。&
(アンパサンド)を接頭辞として使用した場合、Oracle OLAPは、LIMITコマンドの実行前にARGの値(この場合はmonth
ディメンションの値)を置換すると判断するため、同様の効果があります。ただし、&
(アンパサンド)が付いているプログラム行はコンパイルできないので、プログラムの実行結果の表示速度が遅くなるというデメリットがあります。
DEFINE salesrpt PROGRAM PROGRAM PUSH month product district TRAP ON cleanup LIMIT month TO UPCASE(ARG(1)) TO UPCASE(ARG(2)) LIMIT product TO 'CANOES' LIMIT district TO all REPORT grandtotals DOWN district sales LIMIT month TO UPCASE(ARG(3)) TO UPCASE(ARG(4)) REPORT grandtotals DOWN district sales cleanup: POP month product district END
このプログラムを実行するには、プログラム名(salesrpt
)を指定し、その後に2組の月(レポートの対象となる売上期間の開始月と終了月)を指定します。その後、LIMIT MONTH
文を実行すると、コマンドラインに指定した月は、LIMITコマンドのARG(1)
、ARG(2)
、ARG(3)
およびARG(4)
の戻り値として渡されます。
salesrpt 'Jan95' 'Mar95' 'Jan96' 'Mar96'
PRODUCT: Canoes ------------SALES-------------- ------------MONTH-------------- DISTRICT Jan95 Feb95 Mar95 --------------------------------------------- Boston 66,013.92 76,083.84 91,748.16 Atlanta 49,462.88 54,209.74 67,764.20 Chicago 45,277.56 50,595.75 63,576.53 Dallas 33,292.32 37,471.29 43,970.59 Denver 45,467.80 51,737.01 58,437.11 Seattle 64,111.50 71,899.23 83,943.86 ---------- --------- --------- 303,625.98 341,996.86 409,440.44 ========== ========== ========== PRODUCT: Canoes ------------SALES--------------- ------------MONTH--------------- DISTRICT Jan96 Feb96 Mar96 --------------------------------------------- Boston 70,489.44 82,237.68 97,622.28 Atlanta 56,271.40 61,828.33 77,217.62 Chicago 48,661.74 54,424.94 68,815.71 Dallas 35,244.72 40,218.43 46,810.68 Denver 44,456.41 50,623.19 57,013.01 Seattle 67,085.12 74,834.29 87,820.04 ---------- --------- --------- 322,208.83 364,166.86 435,299.35 ========== ========== ==========
OLAP DMLプログラムの内部でARGCOUNTファンクションを使用すると、現行のプログラムが起動したときに指定されていた引数の数が返されます。
例
例7-21 引数の数の確認
次の例では、3つの引数が渡されたことをプログラム(ユーザー定義ファンクション)で確認します。渡された引数の数が3と等しくない場合、プログラムは戻り値として-1
を返して終了します。
DEFINE threearg PROGRAM INTEGER LD User-defined function expecting three arguments PROGRAM ARGUMENT division TEXT ARGUMENT product TEXT ARGUMENT month MONTH IF ARGCOUNT NE 3 THEN RETURN -1 ELSE DO ...
OLAP DMLプログラムの内部でARGFRファンクションを使用すると、プログラムに渡される引数を参照できます。このファンクションは、1つ以上の引数のグループを、指定した引数の番号を先頭に単一のテキスト値として返します。ARGFRは、コマンドとして起動したプログラムの内部でのみ使用でき、プログラムをユーザー定義ファンクションとして起動したりCALL文で起動した場合は使用できません。
注意: 通常は、プログラムに渡される引数の参照にARGFRファンクションを使用しなくても済むよう、ARGUMENT文を使用して、プログラム内で引数を定義します。プログラムに渡される引数をARGUMENTを使用して定義する方法の詳細は、「プログラムに渡される引数の宣言」を参照してください。 |
パラメータ
参照する引数のグループにある最初の引数の位置に応じた数値。ARGFR(1)
を指定すると最初の引数とその後のすべての引数が返され、ARGFR(2)
を指定すると2番目の引数とその後のすべての引数が返されます(以降同様)。存在する引数の数がn個未満の場合、ARGFRはNULL値を返します。また、ARGFRはnの値が0
(ゼロ)または負の値の場合にもNULL値を返します。
例
例7-22 ARGおよびARGFRによる引数の受渡し
売上レポートを生成するプログラムがあるとします。任意の製品および任意の期間(月単位)を対象にしてレポートを生成できるようにするため、プログラム内ではproduct
とmonth
の2つのディメンションを特定の値に制限しないことにします。そのかわりに、product
引数にはARG、month
引数にはARGFRファンクションを使用したLIMITコマンドを使用します。これによって、プログラムを実行したときにこれらの項目を指定できます。
ARGFRの前にアンパサンド(&
)を付けてLIMITコマンド内に記述すると、Oracle OLAPでは、&ARGFR
の値が置換されてからコマンドが実行されるため、引数全体がLIMITコマンドの句として処理されます。salesrprt
プログラムには、&ARGFR
を指定したLIMITコマンドが記述されています。
DEFINE salesrpt PROGRAM PROGRAM PUSH product month district TRAP ON cleanup LIMIT product TO UPCASE(ARG(1)) LIMIT month TO &ARGFR(2) LIMIT district TO ALL REPORT grandtotals DOWN district sales cleanup: POP product month district END
salesrpt
プログラムのコマンドラインには、2つ以上の引数を指定する必要があります。最初の引数はレポートの対象製品を表し、2番目以降の引数は月を表します。LIMIT month
文では、コマンドラインに引数として指定した月が&ARGFR(2)
ファンクションによって返されます。
次の文によって、month
の値としてJan96
、Feb96
、Mar96
およびApr96
を指定したsalesrpt
プログラムが実行されます。
salesrpt 'Canoes' 'Jan96' TO 'Apr96'
この文によって生成される出力は、次のとおりです。
PRODUCT: CANOES -------------------SALES------------------ -------------------MONTH------------------ DISTRICT Jan96 Feb96 Mar96 Apr96 ------- ---------- ---------- ---------- --------- Boston 70,489.44 82,237.68 97,622.28 134,265.60 Atlanta 56,271.40 61,828.33 77,217.62 109,253.38 Chicago 48,661.74 54,424.94 68,815.71 93,045.46 Dallas 35,244.72 40,218.43 46,810.68 64,031.28 Denver 44,456.41 50,623.19 57,013.01 78,038.13 Seattle 67,085.12 74,834.29 87,820.04 119,858.56 ---------- ---------- ---------- ---------- 322,208.83 364,166.86 435,299.34 598,492.41 ========== ========== ========== ==========
次の文では、1996年の最初の3か月が指定されています。
salesrpt 'Tents' quarter 'Q1.96'
PRODUCT: TENTS -------------SALES------------- -------------MONTH------------- DISTRICT Jan96 Feb96 Mar96 -------------- ---------- ---------- --------- Boston 50,808.96 34,641.59 45,742.21 Atlanta 46,174.92 50,553.52 58,787.82 Chicago 31,279.78 31,492.35 42,439.52 Dallas 50,974.46 53,702.75 71,998.57 Denver 35,582.82 32,984.10 44,421.14 Seattle 45,678.41 43,094.80 54,164.06 ---------- ---------- --------- 260,499.35 246,469.11 317,553.32 ========== ========== ==========
OLAP DMLプログラムの内部でARGSファンクションを使用すると、プログラムに渡される引数を参照できます。このファンクションは、すべての引数を1つのテキスト値として返します。ARGSは、コマンドとして起動したプログラムの内部でのみ使用でき、プログラムをユーザー定義ファンクションとして起動したりCALL文で起動した場合は使用できません。
注意: 通常は、プログラムに渡される引数の参照にARGSファンクションを使用しなくても済むよう、ARGUMENT文を使用して、プログラム内で引数を定義します。プログラムに渡される引数をARGUMENTを使用して定義する方法の詳細は、「プログラムに渡される引数の宣言」を参照してください。 |
例
例7-23 ARGSによる引数の受渡し
簡単な売上レポートを生成するプログラムがあるとします。任意の月を対象にしてレポートを生成できるようにするため、プログラム内ではmonth
ディメンションを特定の月に制限しないことにします。LIMITコマンドでARGSファンクションを使用し、レポートの対象月は、プログラムの実行時に引数で指定するようにします。
ARGSの前にアンパサンド(&
)を付けてLIMITコマンド内に記述すると、Oracle OLAPでは、&ARGS
の値が置換されてからコマンドが実行されるため、引数全体がLIMITコマンドの句として処理されます。salesreport
プログラムには、&ARGS
を指定したLIMITコマンドが記述されています。
DEFINE salesrpt PROGRAM PROGRAM PUSH month product district TRAP ON cleanup LIMIT month TO &ARGS LIMIT product TO 'CANOES' LIMIT district TO ALL REPORT grandtotals DOWN district sales cleanup: POP month product district END
次の文を実行すると、LIMITコマンドによって、month
ディメンションに値Jan96
およびFeb96
が適用されます。
salesrpt 'Jan96' 'Feb96'
PRODUCT: CANOES --------SALES-------- --------MONTH-------- DISTRICT Jan96 Feb96 ---------------------------------- Boston 70,489.44 82,237.68 Atlanta 56,271.40 61,828.33 Chicago 48,661.74 54,424.94 Dallas 35,244.72 40,218.43 Denver 44,456.41 50,623.19 Seattle 67,085.12 74,834.29 ---------- ---------- -- 322,208.83 364,166.86 ========== ========== ==
AVERAGEファンクションは、式の値の平均値を計算するファンクションです。
パラメータ
平均を計算する値の式。
内部動作が若干変更されます。このキーワードは、元のパフォーマンスが非常に遅い場合にのみ指定してください。
結果のディメンションの名前。または、expressionの1つのディメンションと結果のディメンションとする別のディメンションとの間のリレーションの名前。
デフォルトでは、AVERAGEファンクションの戻り値は単一の値になります。結果に対し1つ以上のディメンションを指定すると、AVERAGEは、指定されたディメンションに基づいて値を計算し、値の配列を返します。各ディメンションは、expressionのディメンションであるか、そのディメンションの1つと関連している必要があります。
ヒント: 指定したディメンションがexpressionの実際のディメンションではなくexpressionのディメンションに関連付けられたディメンションであり、かつ2つのディメンション間のリレーションが2つ以上ある場合は、ディメンション間のデフォルトのリレーションを使用して計算が行われます。(デフォルトのリレーションの詳細は、RELATIONコマンドを参照してください。)Oracle OLAPでこのデフォルトのリレーションを使用しない場合は、リレーションの名前を指定して、関連付けられたディメンションを指定します。 |
使用上の注意
NA値とAVERAGE
AVERAGEは、他の集計ファンクションと同様に、NASKIPオプションの影響を受けます。NASKIPがYES
に設定されている場合(デフォルト)、AVERAGEはNA
値を無視し、NA
値以外の値の平均値を返します。NASKIPがNO
に設定されている場合、AVERAGEは式の値のいずれかがNA
であればNA
を返します。式のすべての値がNA
の場合は、NASKIPの設定にかかわらず、AVERAGEはNA
を返します。
DAY、WEEK、MONTH、QUARTER、YEAR型のディメンションの平均値計算
DAY、WEEK、MONTH、QUARTER、YEAR型のディメンションによってexpressionがディメンション化されている場合は、これらの型のいずれかを持つ他のディメンションを関連ディメンションとして指定できます。Oracle OLAPでは、これら2つのディメンション間の暗黙的なリレーションが使用されます。これらの型のディメンションと別のディメンションとのマッピング(週から月など)を制御するには、2つのディメンション間のリレーションを明示的に定義し、そのリレーションの名前をAVERAGEファンクションのdimension引数として指定します。
関連ディメンションの各期間では、Oracle OLAPによって、ターゲット期間で終了するすべてのソース期間のデータの平均が計算されます。この方法は、どのディメンションがより上位の集計期間を保持しているかにかかわらず、適用されます。2つのディメンションの期間の間でデータを集計または割り当てる方法を制御するには、TCONVERTファンクションを使用します。
例
例7-25 月間売上の平均値の計算
この例では、スポーツウェアの月間平均売上を販売地区別に計算する方法を示します。
LIMIT product TO 'SPORTSWEAR' REPORT W 14 HEADING 'Average Sales' AVERAGE(sales district)
この文によって生成される出力は、次のとおりです。
DISTRICT Average Sales ----------- -------------- Boston 69,150.41 Atlanta 151,192.36 Chicago 95,692.99 Dallas 162,242.89 Denver 88,892.72 Seattle 54,092.32
地域ごとの月間平均売上を調べることもできます。region
ディメンションはdistrict
ディメンションに関連しているので、AVERAGEファンクションの結果のディメンションとしてdistrict
ではなくregion
を指定します。
AWファンクションは、現在アタッチされているワークスペースの情報を返すファンクションです。
パラメータ
必要な特定の情報を示します。AWファンクションで使用できるキーワードと、それぞれの戻り値のデータ型および意味について、表7-2「AWファンクションのキーワード」で説明します。
表7-2 AWファンクションのキーワード
情報を取得するワークスペースの名前を示すテキスト式。この引数を指定しなかった場合、現行のワークスペースに関する情報がAWファンクションによって返されます。ATTACHED、LIST、NAMEの各キーワードは、このルールの例外です。
BACKファンクションは、現在実行しているすべてのプログラムの名前を、それぞれ1行で表示する複数行のテキスト値として返すファンクションです。複数のプログラムを実行している場合、あるプログラムが、ネストしたプログラムの一連の実行として他のプログラムをコールしています。
戻り値の中の最初の名前は、BACKのコールが記述されているプログラムの名前です。最後の名前は、他のプログラムのコールを最初に実行したプログラムの名前です。
BACKは、プログラム内でのみ使用可能です。
例
例7-27 BACKファンクションによるプログラムのデバッグ
次の例では、3つのプログラムを使用します。program1
がprogram2
をコールし、program2
がprogram3
をコールします。
DEFINE program1 PROGRAM PROGRAM SHOW 'This is program number 1' CALL program2 END DEFINE program2 PROGRAM PROGRAM SHOW 'This is program number 2' CALL program3 END DEFINE program3 PROGRAM PROGRAM SHOW 'This is program number 3' SHOW 'These programs are currently executing:' SHOW BACK END
program1
の実行によって生成される出力は、次のとおりです。
This is program number 1 This is program number 2 This is program number 3 These programs are currently executing: PROGRAM3 PROGRAM2 PROGRAM1
BASEDIMファンクションは、連結ディメンションのループ処理を行い、連結ディメンションの現行値の基になるディメンションの名前を返します。
パラメータ
ベース・ディメンションまたはコンポーネントのディメンションの名前を必要とする連結ディメンションを指定します。戻り値のデータ型はTEXTです。
LEAFキーワードを指定すると、concatdimディメンションのコンポーネント・ディメンションの名前がBASEDIMによって返されます。連結ディメンションのベース・ディメンションは、連結ディメンションを定義したときにbasedimlist引数で指定した単純なディメンション、結合ディメンションまたは他の連結ディメンションです。単純なディメンションおよび結合ディメンションは、連結ディメンションの最下位レベルのコンポーネント、つまりリーフです。
連結ディメンションを定義する際に連結ディメンションをベース・ディメンションとして指定すると、内部連結のベース・ディメンションは外部連結のコンポーネントのディメンションになります。LEAFキーワードを指定すると、内部連結ディメンションのコンポーネントの単純なディメンションおよび結合ディメンションの名前がBASEDIMによって返されます。
ベース・ディメンションがすべて単純なディメンションまたは結合ディメンションの場合は、ベース・ディメンションが最下位レベルのコンポーネントになるため、LEAFキーワードの指定の有無にかかわらず、BASEDIMによってこれらのディメンションの名前が返されます。
ベース・ディメンションがすべて単純なディメンションまたは結合ディメンションの場合は、ベース・ディメンションが最下位レベルのコンポーネントになるため、LEAFキーワードの指定の有無にかかわらず、BASEDIMによってこれらのディメンションの名前が返されます。
例
例7-28 ベース・ディメンション名の戻り値
この例では、product
ディメンションは2つの値に、district
ディメンションは最初の3つの値に、region
ディメンションは3つの値のみに制限されます。ベース・ディメンションとしてregion
およびdistrict
を持つ一意ではない連結ディメンションを定義し、次に、ベース・ディメンションとしてproduct
ディメンションと最初の連結ディメンションを持つ一意でない別の連結ディメンションを定義します。さらに、外部連結ディメンションのベース・ディメンションの名前を取得します。
LIMIT district TO 'Boston' TO 'Chicago' LIMIT product TO 'Tents''Canoes' DEFINE region.district DIMENSION CONCAT(region district) DEFINE product.region.district DIMENSION CONCAT(product region.district) REPORT BASEDIM(product.district.region)
この文によって生成される出力は、次のとおりです。
PRODUCT PRODUCT REGION.DISTRICT REGION.DISTRICT REGION.DISTRICT REGION.DISTRICT REGION.DISTRICT REGION.DISTRICT
BASEVALファンクションは、連結ディメンションのループ処理を行い、連結ディメンションのベース・ディメンションの値を返します。ベース・ディメンションが連結ディメンションの場合は、そのベース・ディメンションの値も返します。
戻り値
BASEVALの戻り値のデータ型は次のルールに従って決まります。
concatdimの任意のコンポーネント・ディメンションのデータ型がNTEXTの場合、または任意のコンポーネント・ディメンションがNTEXT型の単純なディメンションを使用する結合ディメンションの場合、戻り値のデータ型はNTEXTになります。
すべてのコンポーネント・ディメンションのデータ型が同じで、コンポーネント・ディメンションの中に結合ディメンションが存在しない場合、戻り値のデータ型はコンポーネント・ディメンションのデータ型になります。
これ以外の場合、戻り値のデータ型はTEXTになります。
例
例7-30 NTEXT値の戻り値
次の例では、単純なディメンション2つと一意でない連結ディメンション1つを作成し、連結ディメンションの値を取得します。
DEFINE textdim DIMENSION TEXT DEFINE ntextdim DIMENSION NTEXT MAINTAIN textdim ADD 'v1' 'v2' MAINTAIN ntextdim ADD 'n1' 'n2' DEFINE concatdim DIMENSION CONCAT(textdim ntextdim) REPORT w 18 BASEVAL(concatdim)
この文によって生成される出力は、次のとおりです。
CONCATDIM BASEVAL(CONCATDIM) -------------------- ------------------ <textdim: v1> v1 <textdim: v2> v2 <ntextdim: n1> n1 <ntextdim: n2> n2
戻り値のデータ型はNTEXTです。v1
およびv2
というTEXT値は、BASEVALファンクションによってNTEXT値に変換されてから返されます。
例7-31 ベース連結ディメンションのベース値の戻り値
この例では、単純なディメンションstate
およびcity
を定義し、これらに値を追加します。ベースとしてstate
およびcity
を持つ一意でない連結ディメンションstatecity
を定義し、次に、ベースとしてregion
、district
およびstatecity
を持つ一意でない別の連結ディメンションgeog
を定義します。最後に、BASEVALファンクションによって返される値がREPORT文によって返されます。
DEFINE city DIMENSION TEXT DEFINE state DIMENSION TEXT MAINTAIN city ADD 'Boston' 'Worcester' 'Portsmouth' 'Portland' - 'Burlington' 'Hartford' 'New York' 'Albany' MAINTAIN state ADD 'MA' 'NH' 'ME' 'VT' 'CT' 'NY' DEFINE statecity DIMENSION CONCAT(state city) DEFINE geog DIMENSION CONCAT(region district statecity) LCOLWIDTH = 20 REPORT W 16 BASEVAL(geog)
この文によって生成される出力は、次のとおりです。
GEOG BASEVAL(GEOG) -------------------- ---------------- <region: East> East <region: Central> Central <region: West> West <district: Boston> Boston <district: Atlanta> Atlanta <district: Chicago> Chicago <district: Dallas> Dallas <district: Denver> Denver <district: Seattle> Seattle <state: MA> MA <state: NH> NH <state: ME> ME <state: VT> VT <state: CT> CT <state: NY> NY <city: Boston> Boston <city: Worcester> Worcester <city: Portsmouth> Portsmouth <city: Portland> Portland <city: Burlington> Burlington <city: Hartford> Hartford <city: New York> New York <city: Albany> Albany
DAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンションの場合、BEGINDATEファンクションは、式が非NA
値になるディメンション・ステータスの最初の期間の開始日を返します。たとえば、式がmonth
でディメンション化され、式が非NA
値になる最初のディメンション値がJan97
であるとします。この場合、BEGINDATEによって返される日付はJanuary 1, 1997
です。
注意: データ型がTEXTの階層ディメンションとして実装されている時間ディメンションでこのファンクションは使用できません。 |
BIN_TO_NUMファンクションは、ビット・ベクトルを等価の数値に変換するファンクションです。
BIN_TO_NUMは、データ・ウェアハウス・アプリケーションでグルーピング・セットを使用して目的のグループを選択するために役立ちます。
BITANDファンクションは、2つの負でない値のビットに対して論理演算AND
を実行します。このファンクションは、通常、DECODEファンクションと組み合せて使用します。
AND演算は2つのビット値を比較します。値が同じ場合には、演算子から1が返されます。値が異なる場合には0(ゼロ)が返されます。重要なビットのみが比較対象とされます。たとえば、整数5(バイナリ101)と整数1(バイナリ001または1)をAND演算で比較すると、右端のビットのみが比較対象とされ、結果の値は1(バイナリ1)となります。
BLANKSTRIPファンクションは、テキスト値の先行または後続の空白を削除するファンクションです。BLANKSTRIPは、インポートした固定長フィールドから不要な空白を削除するときなどに有効です。
OLAP DMLプログラムの内部でCALLTYPEファンクションを使用すると、プログラムがファンクションまたはコマンドとして起動されたか、CALL文コマンドを使用して起動されたか、あるいはOLAP DML文の実行によってトリガーされたかどうかが示されます。
戻り値
TEXT
CALLTYPEの戻り値は次のとおりです。
FUNCTION
。値を返すファンクションとしてプログラムが起動された場合。
COMMAND
。コマンドとしてプログラムが起動された場合。
CALL
。CALL文を使用してプログラムが起動された場合。
TRIGGER
。プログラムがOLAP DML文に応答して起動したトリガー・プログラム(TRIGGERコマンドによってプログラムとオブジェクト・イベントが関連付けられている)の場合。
例
例7-35 コールする方法の判別
myprog
というこのサンプル・プログラムでは、プログラムの起動方法に応じて、CALLTYPEからどのように異なる値が返されるかを示します。
DEFINE myprog PROGRAM PROGRAM SHOW CALLTYPE RETURN('This is the return value') END
次の文を実行すると、myprog
は1)コマンドとして、2)CALL文によって、3)ファンクションとして起動されます。
myprog CALL myprog SHOW myprog
この3つの文を実行した場合、次の出力が現行の出力ファイルに送信されます。myprogの戻り値は、プログラムがファンクションとしてコールされた場合にのみ表示されます。
COMMAND CALL FUNCTION This is the return value
CATEGORIZEファンクションは、数式の値をカテゴリ別にグループ化します。カテゴリは、一連の増加する数値を指定することによって定義します。CATEGORIZEから返された結果は、expressionのすべてのディメンションによってディメンション化されます。expressionのセルごとに、CATEGORIZEによって、数値がカテゴリの範囲内の場合はそのカテゴリ、最初のカテゴリの範囲より小さい値の場合は0
、最後のカテゴリの範囲を超える値の場合は-1
、NA
値の場合はNA
、のいずれかが返されます。
構文
CATEGORIZE(expression {values|group-expression})
ただし、valuesの構文は次のとおりです。
bottom-value [next-lowest-break-value] top-value
パラメータ
分類対象となる値を持つ数式。
一連の数値のうちの最低値を表し、かつカテゴリ1の下限となる数値。
次のカテゴリの範囲の先頭を表す数値。
一連の数値のうちの最高値を表し、かつ最上位のカテゴリの上限となる数値。
カテゴリのブレーク値を定義する1次元の数式。
例
例7-36 カテゴリ範囲の値の指定
アナリティック・ワークスペースに、次のgeography
ディメンション、items
ディメンションおよびsales2
変数が含まれるとします。
DEFINE geography DIMENSION TEXT MAINTAIN geography ADD 'g1' 'g2' 'g3' DEFINE items DIMENSION TEXT MAINTAIN items ADD 'Item1' 'Item2' 'Item3' 'Item4' 'Item5' DEFINE sales2 DECIMAL <geography items>
sales2
変数には、次のデータ値が含まれているとします。
-------------SALES2------------- -----------GEOGRAPHY------------ ITEMS g1 g2 g3 -------------- ---------- ---------- ---------- Item1 30.00 15.00 12.00 Item2 10.00 20.00 18.00 Item3 15.00 20.00 24.00 Item4 30.00 25.00 25.00 Item5 NA 7.00 21.00
次の文を発行すると、sales2
変数の分類結果が表示されます。
REPORT CATEGORIZE(sales2 10 15 20 25)
この文によって生成される出力は、次のとおりです。
-CATEGORIZE(SALES2 10 15 20 25)- -----------GEOGRAPHY------------ ITEMS g1 g2 g3 -------------- ---------- ---------- ---------- Item1 -1.00 2.00 1.00 Item2 1.00 3.00 2.00 Item3 2.00 3.00 3.00 Item4 -1.00 3.00 3.00 Item5 NA 0.00 3.00
例7-37 グループ式の指定
次の文によって、groups
ディメンションとgroupval
変数が定義されます。
DEFINE groups DIMENSION TEXT MAINTAIN groups ADD 'Grp1' 'Grp2' 'Grp3' 'Grp4' DEFINE groupvals DECIMAL <groups> groupvals(groups 'Grp1') = 10 groupvals(groups 'Grp2') = 15 groupvals(groups 'Grp3') = 20 groupvals(groups 'Grp4') = 25
次の文を発行すると、sales
変数をexpression引数とし、groupvals
変数をgroup-expression引数として指定したCATEGORIZEファンクションがコールされ、その実行結果が表示されます。
REPORT CATEGORIZE(sales, groupvals)
この文の実行結果は、「カテゴリ範囲の値の指定」に記載されている文の実行結果と同じです。
CHANGEBYTESファンクションは、指定した文字列がテキスト式に1つ以上存在する場合、この文字列を別の文字列に変更するファンクションです。
CHANGECHARSファンクションは、指定した文字列がテキスト式に1つ以上存在する場合、この文字列を別の文字列に変更するファンクションです。
戻り値
すべての引数がTEXT値である場合、戻り値はTEXTです。すべての引数がNTEXT値である場合、戻り値はNTEXTです。引数にTEXTとNTEXTの両方の値が存在する場合は、すべてのTEXT値がNTEXT値に変換されてからファンクションの演算が実行され、戻り値はNTEXTになります。
パラメータ
変更される文字が含まれているTEXT
式またはNTEXT
式。text-expressionが複数行のテキスト値の場合、改行はCHANGECHARSの戻り値でも維持されます。
変更される1つ以上の文字が含まれているTEXT
式またはNTEXT
式。
oldtextが置換される1つ以上の文字が含まれているTEXT
式またはNTEXT
式。
text-expressionにoldtextが複数回出現する場合、oldtextをnewtextに置換する回数を表すINTEGER
。デフォルトでは、出現するすべてのoldtextを変更します。
CHANGECHARSに対して、text-expressionとoldtextの文字を大文字に変更してから一致検索を実行することを指定します。CHANGECHARSの戻り値は大文字になりません。
CHANGEDRELATIONSファンクションは、特定の変数およびaggmapオブジェクトについて、その変数が最後に集計されたとき以降にaggmap内およびaggmap内のリレーションに変更があったかどうかを識別するファンクションです。
パラメータ
変更を確認するaggmapオブジェクトがある変数の名前。
変更を確認するaggmapがある、変数の1つ以上のパーティションの名前(カンマ区切りで指定)。
変更を確認するaggmapオブジェクトの名前。aggmapに値を指定しない場合は、variableの$AGGMAPプロパティに指定されたaggmapが使用されます(存在する場合)。
CHANGEDVALUESファンクションは、変数が最後に集計されたとき以降に、変数の値が変更されたかどうかを識別する(または変更された値の数を返す)ファンクションです。
CHARLISTファンクションは、1つの式をその値ごとに別の行にして、複数行のテキスト値に変換するファンクションです。
パラメータ
複数行のテキスト値に変換する式。式のデータ型がTEXT
またはNTEXT
以外である場合、その式はCHARLISTにより自動的にTEXT
に変換されます。
戻り値のディメンション。ディメンションを指定しないと、CHARLISTの戻り値は単一の値になります。戻り値に1つ以上のディメンションを指定すると、CHARLISTによって、指定したディメンションの現行のステータス・リストにある値ごとに複数行のテキスト値が返されます。各ディメンションは、式の実際のディメンションである必要があり、関連ディメンションやベース・ディメンションは指定できません。
CHARTOROWIDファンクションは、テキスト・データ型からROWIDデータ型に値を変換するファンクションです。
CHGDIMSファンクションは、式のディメンション性を変更したり、式の評価時にディメンション・ステータスを変更するファンクションです。
構文
CHGDIMS (expression, limit-type)
ここで、limit-typeは次のいずれかです。
[CACHE] LIMITSAVE valueset-list
[CACHE] LIMIT valueset-list
TO dimension-list
ADD dimension-list
パラメータ
変更する対象の式。
制限の結果をキャッシュするように指定し、CHGDIMSをコールしたOLAP DML文の実行が終了するまでCHGDIMSの後続の実行で使用できるように、その結果を保存します。
式のディメンション・ステータスの値が位置に設定されてから、CHGDIMSコマンドが実行されます(つまり、LIMITSAVEを指定した場合、現行のディメンション・ステータスの値は変更されません)。たとえば、式がLAGファンクションの場合に相対位置変更が現在の値から計算されるようにしたり、SQL SELECT文のような外部ループ内にCHGDIMSをコーディングする場合に、外部ループで設定されるディメンション・ステータスの値を保持したいときに、CHGDIMSにLIMITSAVEを指定します。
expressionのディメンション・ステータスの値が新しいステータスの最初の位置に設定されてからexpressionが評価されます。これは、expressionが評価される直前に発行されたLIMIT TOコマンドとほぼ同じ方法で行われます。
値セットの名前またはLIMITファンクション。
expressionのディメンションをdimension-listで指定されたディメンションとして、expressionの評価が行われるように指定します。
expressionのディメンションをexpressionのディメンションおよびdimension-listで指定されたディメンションとして、expressionの評価が行われるように指定します。
例
アナリティック・ワークスペースに次のオブジェクトがあるとします。
DEFINE PRODUCT DIMENSION TEXT DEFINE GEOG DIMENSION TEXT DEFINE SALES VARIABLE INTEGER <PRODUCT GEOG>
さらに、sales
変数に次のような値が含まれているとします。
-------------------SALES------------------- ------------------PRODUCT------------------ GEOG Trousers Skirts Dresses Shoes -------------- ---------- ---------- ---------- ---------- USA 13 20 32 18 Canada 17 32 15 28
次のコード行は、式の条件付けに応じて、TOTAL(sales)
式により返される値がどのように異なるかを示しています。
"Total over all dims with standard status SHOW TOTAL(sales) 175 "Total over all dims using new status for product SHOW CHGDIMS(TOTAL(sales) LIMIT LIMIT(product TO FIRST 2)) 82 "Total just over product SHOW TOTAL(CHGDIMS(sales TO product)) 83
CHRファンクションは、整数値(または暗黙的に整数値に変換可能な値)を文字に変換するファンクションです。
注意: このファンクションを含むコードを、ASCIIベースのマシン・アーキテクチャとEBCDICベースのアーキテクチャ間で共有することはできません。 |
戻り値
テキスト値。シングルバイト・キャラクタ・セットでは、number
> 256
の場合、number
MOD 256
に相当するバイナリ値が返されます。マルチバイト・キャラクタ・セットでは、number
は1つの完全なコード・ポイントに解決可能でなければなりません。無効なコード・ポイントは検証されず、無効なコード・ポイントを指定した場合の結果はそのコード・ポイントによって異なります。
COALESCEファンクションは、式のリストの最初の非NA
式を返します。すべての式がNA
と評価された場合は、NA
を返します。
例
例7-45 COALESCEによる製品の販売価格の算出
アナリティック・ワークスペースに次のオブジェクトが定義されているとします。(計算式sale
では、計算にCOALESCEファンクションを使用します。)
DEFINE product_id DIMENSION TEXT DEFINE supplier_id DIMENSION TEXT DEFINE list_price VARIABLE DECIMAL <product_id supplier_id> DEFINE min_price VARIABLE DECIMAL <product_id supplier_id> DEFINE sale FORMULA DECIMAL <Product_id supplier_id> EQ COALESCE(0.9*list_price, min_price, 5)
次のコードは、supplier_id
を1つの値に限定し、当該仕入先により指定されている製品の表示価格、最低価格および販売価格を示すレポートを表示します。
LIMIT supplier_id TO '102050' REPORT DOWN product_id list_price min_price sale ----------SUPPLIER_ID----------- -------------102050------------- PRODUCT_ID LIST_PRICE MIN_PRICE SALE -------------- ---------- ---------- ---------- 2382 850.00 731.00 765.00 3355 NA NA 5.00 1770 NA 73.00 73.00 2378 305.00 247.00 274.50 1769 48.00 NA 43.20 1660 16.45 16.45 14.80
COLVALファンクションは、ある列の数値を、レポート内の同じ行内で現行の列の左に返すファンクションです。COLVALは、ROWコマンドおよびREPORTコマンドでのみ使用できます。
戻り値
選択した列に数値データまたはブール・データが含まれる場合はDECIMAL、列(n)に含まれる値がTEXTまたはIDのみの場合はNA、現行の列、現行の列の右側の列または存在しない列を指定した場合はエラー。
パラメータ
値を取得する対象の、現行の行内の列の番号。nは任意のINTEGER
式です。
絶対列番号(レポートの左端から右方向へカウント)で指定するには正の数を使用します。絶対列番号を指定する際は、レポート内にあるすべての列をカウントする必要があります。たとえば、レポートの左側にラベルの列を生成するREPORTコマンドを使用している場合、このラベルの列を列1としてカウントします。たとえば、COLVAL(2)
はレポートの左端から2番目の列を表します。
相対列番号(現行の列から、右から左の方向へカウント)で指定するには負の数を使用します。たとえば、COLVAL(-2)
は現行の列から2列左の列を表します。
例
例7-46 レポート内での列の計算
レポート上に、実際の売上高と予定売上高を、両者間の差額とともに表示するとします。この場合、COLVALファンクションを使用して差額を計算できます。
LIMIT month TO 'Jun96' LIMIT district TO 'Boston' FOR product ROW product sales sales.plan COLVAL(2)-COLVAL(3)
これらの文によって生成される出力は次のとおりです。
Tents 95,120.83 80,138.18 14,982.65 Canoes 157,762.08 132,931.39 24,830.69 Racquets 97,174.44 84,758.46 12,415.98 Sportswear 79,630.20 73,568.52 6,061.68 Footwear 153,688.02 109,219.15 44,468.87
CONTEXTファンクションは、コンテキストに保存されているオブジェクト値についての情報を取得するためのファンクションです。最初にCONTEXTコマンドを使用してコンテキストを作成する必要があります。
戻り値
CONTEXTファンクションの戻り値のデータ型は、指定する引数に応じて異なります。引数を指定せずにCONTEXTファンクションを使用する場合は、現行のセッション内のすべてのコンテキストの名前を含む複数行のテキスト値が返されます。
パラメータ
コンテキストの名前を含むテキスト式。CONTEXTファンクションの引数としてcontext-nameしか指定しない場合は、コンテキストに保存されているすべてのオブジェクトの名前を含む複数行のテキスト値が返されます。
CONTEXTファンクションでUPDATEを指定すると、値がコンテキストに保存または削除された回数が返されます。
コンテキスト内に値が保存されているオブジェクトの名前。CONTEXTファンクションでnameを指定すると、そのオブジェクトの保存済のステータスまたは値が返されます。
例
例7-47 コンテキスト名のリスト
次の文では、CONTEXTファンクションは現行セッションのコンテキスト名のみを返します。これは、例9-72「ディメンション・ステータスの保存」で使用されているのと同じコンテキストです。
SHOW CONTEXT
この文によって生成される出力は、次のとおりです。
democontext1
CONVERTファンクションは、値をあるデータ型から別のデータ型へ変換するファンクションです。
パラメータ
変換する対象の式または変数。
expressionの変換後のデータ型。データ型を表すキーワードについては、表7-3「CONVERTファンクションのtypeパラメータのキーワード」で説明します。
表7-3 CONVERTファンクションのtypeパラメータのキーワード
キーワード | 説明 |
---|---|
BINARY |
Oracle標準データ型への変換を示すものではないが、付加的な変換機能を提供。BINARYは変換を行わない。データ型にかかわりなく、すべての値の内部表現はテキスト値として返される。
|
BOOLEAN |
Oracle OLAP |
BYTE |
単一文字を0から255の範囲のASCIIの |
DATE |
Oracle OLAP |
DATETIME |
Oracle OLAP |
DECIMAL |
Oracle OLAP |
DSINTERVAL |
Oracle OLAP DML |
ID |
Oracle OLAP |
INFILE |
|
INTEGER |
Oracle OLAP |
LONGINTEGER |
Oracle OLAP |
NTEXT |
Oracle OLAP標準データ型への変換。 |
NUMBER [( |
Oracle OLAP |
PACKED |
数値を10進値に変換してから、パック形式(15桁およびプラス記号またはマイナス記号を含む8バイト長のテキスト値)に変換。小数部はパック形式の数字には表せないため、変換処理により小数は直近のINTEGERに丸められる。「PACKEDおよびBINARY変換」を参照。 |
ROWID |
テキスト値から |
SHORTDECIMAL |
Oracle OLAP |
SHORTINTEGER |
Oracle OLAP |
TEXT |
Oracle OLAP標準データ型への変換。SQLの |
TIMESTAMP |
Oracle OLAP DML |
TIMESTAMP_LTZ |
Oracle OLAP DML TIMESTAMP_LTZデータ型への変換。 |
TIMESTAMP_TZ |
Oracle OLAP DML |
UROWID |
テキスト値から |
YMINTERVAL |
Oracle OLAP DML |
typeにTEXT、NTEXT、ID、DATEまたはINFILEを指定する場合は、追加引数を指定して変換の方法を決定できます。これを、表7-4「TEXT、NTEXT、ID、DATEおよびINFILEの変換方法を指定する構文」にまとめます。
表7-4 TEXT、NTEXT、ID、DATEおよびINFILEの変換方法を指定する構文
type引数のキーワード | 変換前の値 | すべてのパラメータの構文 |
---|---|---|
TEXT |
任意の数値 |
TEXT [decimal-int|DECIMALS [comma-bool|COMMAS [paren-bool|PARENS]]] |
NTEXT |
任意の数値 |
NTEXT [decimal-int|DECIMALS [comma-bool|COMMAS [paren-bool|PARENS]]] |
ID |
任意の数値 |
ID [decimal-int|DECIMALS] |
TEXT、NTEXTまたはID |
任意の日時 |
ID|TEXT|NTEXT ['date_format'] |
TEXT、NTEXTまたはID |
DATE |
ID|TEXT|NTEXT ['dateformat'] |
VNFを持つDAY、WEEK、MONTH、QUARTER、YEAR型のディメンションのIDまたはTEXT |
DATE |
ID [dwmqy-dimension]|TEXT [dwmqy-dimension|'vnf '] |
DATE |
TEXT、NTEXTまたはID |
DATE [date-order|dwmqy-dimname] |
NTEXT |
TEXT |
NOXLATE |
TEXT |
NTEXT |
NOXLATE |
INFILE |
INFILE [width-exp|LSIZE [escape-int|0]] |
|
|
BINARY [width-exp] |
数値データをTEXTまたはID値に変換する際に使用される小数点以下の桁数を制御するINTEGER式。この引数を指定しない場合、CONVERTではDECIMALSオプションの現行の値(デフォルトは2)を使用します。
数値データのテキスト表現でカンマを使用して3桁を区切るかどうかを決定するブール式。式の値をYES
に設定すると、カンマが使用されます。この引数を指定しない場合、CONVERTではCOMMASオプションの現行の値(デフォルトはYES
)を使用します。
数値データのテキスト表現で負の値をカッコで囲むかどうかを決定するブール式。式の値をYES
に設定すると、カッコが使用され、NO
に設定すると、負の値の前にマイナス記号が付きます。この引数を指定しない場合、CONVERTではPARENSオプションの現行の値(デフォルトはNO
)を使用します。
日時式をテキストに変換する際に使用するテンプレートを指定するテキスト式。各データ・フィールドの有効な書式は、DATE_FORMATコマンドを使用して指定できる書式と同じです。
date_format引数を含めない場合、結果の書式はセッションのデフォルトの日付書式によって決まります。詳細は、「デフォルトの日時書式テンプレート」を参照してください。
日付のみの式をテキストに変換する際に使用するテンプレートを指定するテキスト式。テンプレートには、日付の4つの構成要素(日、月、年、曜日)についての書式指定を含めることができます。テンプレート内の各構成要素は、左の山カッコ(<
)と右の山カッコ(>
)で囲む必要があります。構成要素の前後または構成要素間には、別のテキストを入れることが可能です。
日付の各構成要素についての有効な書式は、DATEFORMATオプションで許可されている書式と同じです。
次の文では、CONVERTは今日の日付をdateformat引数で指定されている書式でのテキスト値として返します。
SHOW CONVERT(TODAY TEXT '<MM>-<DD>-<YY>')
この例では、今日の日付は1998年3月31日です。SHOW文は、この日付を次のように表示します。
03-31-98
dateformat引数を含めない場合、結果の書式はDATEFORMATオプションの現行の設定により決定されます。
DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションの名前。Oracle OLAPでは、日付のみの値をTEXTまたはID値に変換する際、dwmqy-dimensionのVNFを使用します。dwmqy-dimensionのVNFが指定されていない場合は、デフォルトのVNFが使用されます。
次の文では、CONVERTは今日の日付を、YEARディメンションのVNFで指定されている書式でのテキスト値として返します。
show convert(today text year)
この例では、今日の日付は1998年3月31日です。SHOW文は、この日付を次のように表示します。
YR98
DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションの値をテキストに変換する際に使用する値名書式を指定する、テキスト・テンプレート。テンプレートには、時間間隔の構成要素の書式指定を含めることができます。時間間隔の構成要素には、日付の全構成要素(日、月、年、曜日)と、会計年度および会計期間の構成要素が含まれます。また、テンプレートには、構成要素として、DAY、WEEK、MONTH、QUARTERまたはYEARディメンションの名前も含められます。テンプレート内の各構成要素は、左の山カッコと右の山カッコで囲む必要があります。構成要素の前後または構成要素間には、別のテキストを入れることが可能です。
CONVERTファンクションに対するvnf引数は、VNFコマンド内のテンプレートと似ています。ただし、VNFコマンド・テンプレートでは入力の解釈を厳密かつ明白に設計する必要があるのに対し、vnf引数はそれほどの制約はありません。したがって、vnf引数で使用できる書式スタイルは、VNFコマンド・テンプレートで許可されるものよりも広範です。
vnf引数で有効な書式スタイルには、VNFコマンド・テンプレートで許可されるすべての書式スタイルに加え、DATEFORMATテンプレートで許可されるすべての書式スタイルが含まれます。DATEFORMATでは、VNFコマンド・テンプレートでは許可されない次のような書式スタイルを提供しますが、これらは、CONVERTファンクションへのvnf引数では有効です。
日付の序数スタイル(DT、DTL)
月のfirst-letterスタイル(MT)
曜日のスタイル(W、WT、WTXT、WTXTL、WTEXT、WTEXTL)
その期間の最後の日または月ではなく、最初の日または月を表示するように指定するには、これらの書式にBコードを追加します。
DAY、WEEK、MONTH、QUARTERまたはYEAR型のどのディメンションに対しても、VNFおよびDATEFORMATの両書式スタイルを任意の組合せで使用できます。この構文は、ディメンションの各型に対し特定の書式組合せしか有効でないVNFコマンドのテンプレートと対照的です。
次の文では、CONVERTはMONTHディメンションの現行の値を、vnf引数で指定されている書式でのテキスト値として返します。
SHOW CONVERT(month TEXT '<MTEXTL>, <YYYY>')
この例では、ステータスにある最初のMONTH値はDEC97で、SHOW文はこれを次のように表示します。
December, 1997
vnf引数を含めない場合は、結果の書式は、変換する値が属するディメンションのVNFにより決定されます。ディメンションにVNFがない場合には、変換するディメンションの型のデフォルトVNFに基づく書式が使用されます。
テキスト値の構成要素(月、日、年)の順序があいまいな場合に、指定されたテキスト値を日付のみの値として解釈する方法を指定するテキスト式。式は、'MDY'
、'DMY'
、'YMD'
、'YDM'
、'MYD'
、'DYM'
のいずれかです。各文字は、日付の構成要素(M
は月、D
は日、Y
は年)を表します。
date-orderまたはdwmqy-dimname引数を含めない場合には、テキスト式内の解釈のあいまいな点は、DATEORDERオプションの現行の設定によって解決されます。日付のみの値の完全な説明とその解釈方法については、DATEORDERオプションを参照してください。
テキスト値の構成要素の順序があいまいな場合に、指定されたテキスト値を日付のみの値として解釈する方法の決定に使用するVNFまたはデフォルト日付順序を持つ、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションの名前。
date-orderまたはdwmqy-dimname引数を含めない場合には、テキスト式内の解釈のあいまいな点は、DATEORDERオプションの現行の設定によって解決されます。日付のみの値の完全な説明とその解釈方法については、DATEORDERオプションを参照してください。
CONVERTからの出力の幅を指定するINTEGER式。最小幅は7です。デフォルトの幅は、LSIZEオプションの現行の値です。escape-int引数を指定している場合、この引数は必須です。
出力にエスケープ・シーケンスを使用するかどうかを指定します。この引数には、表7-5「CONVERTのescape-intパラメータの値」に示されている値を指定できます。
表7-5 CONVERTのescape-intパラメータの値
値 | 説明 |
---|---|
-1 |
エスケープを使用しない。先行するWIDTH引数から1が減算されないように、-1の前にカンマが付く( |
0 |
(デフォルト)印刷不可の文字にエスケープを使用する。 |
1 |
すべての文字にエスケープを使用する。 |
OLAP DMLにおけるエスケープ・シーケンスの詳細は、「エスケープ・シーケンス」を参照してください。
変換後の結果の幅を制御するINTEGER
式。1
、2
または4
バイトを評価できます。デフォルトの幅は、BOOLEAN
では2
、INTEGER
では4
です。INTEGER
値が大きすぎて指定された幅に収まらない場合は、NA
が返されます。幅が無効または他のデータ型について指定されている場合は、エラーが発生します。
キャラクタ・セット変換の実行を禁止することを示すキーワード。Oracle OLAPでは、かわりに、変換後の値にターゲット・データ型のタグのみを付け、データはCONVERTファンクションがコールされる前の状態のまま維持します。このキーワードは、TEXTまたはNTEXT変数にバイナリ・データを保存するために必要な場合のみ使用してください。
使用上の注意
INFILE変換
1行の最大文字数は4,000です。4,000文字を超える行を生成するINFILE変換を試行すると、エラーが発生します。ソース行が99文字を超えており、それらのうち相当数がエスケープ・シーケンスを必要とする場合、このタイプのエラーが発生する可能性があります。
日付のみの値の数値への変換
日付のみのデータ型の値を数値データ型の値に変換すると、その結果は日付を表す順序番号になります(順序番号1
は1900年1月1日を表します)。
Oracle OLAPではまず、日付のみの値は、それに対応する順序番号のINTEGER値として変換されます。ターゲット・データ型がINTEGER以外の数値データ型である場合はさらに、そのINTEGER値が、指定された数値データ型に変換されます。
SHORTINTEGER値が取り得る最大値は32,767で、(INTEGER値としては)1992年9月17日を表します。したがって、この日付以降の日付のみの値をSHORTINTEGER値に変換しようとすると、CONVERTによりNA
が返されます。
数値の日付のみの値への変換
結果は、指定した数値と等しい順序番号に対応する日付のみの値(1900年1月1日が順序番号1に対応)となりますが、結果が有効な日付の範囲にない場合はNA値となります。有効な日付範囲は、1900年1月1日(順序番号1)から9999年12月31日(順序番号2,958,464)までです。
数値データ型がINTEGERデータ型の場合、そのINTEGER値は、指定した数値と等しい順序番号に対応する日付のみの値に直接変換されます。数値データ型がINTEGERでない場合、その値はまずINTEGER値に変換され、さらにそのINTEGER値が日付のみの値に変換されます。
日付のみのディメンション値のID値への変換
変換の結果が8文字を超える場合、その結果は切り捨てられます。
リレーション値のINTEGER値への変換
変換の結果は、リレーションのディメンションにおけるその値の位置を表すINTEGER値となります。この動作は、リレーションの値がディメンション値であり、TEXT値ではないことによります。
数値データ型から他のデータ型への値の変換
変換の結果は、指定したデータ型の値になります。ただし、ターゲット・データ型に対して有効な値の範囲にない場合はNA
となります。
たとえば、32,767より大きいINTEGER値または-32,767より小さいINTEGER値をSHORTINTEGER値に変換しようとすると、CONVERTからはNA
が返されます。
文字列値を日時値に変換する際には、次の書式設定のルールが適用されます。
先行ゼロを含む数値書式要素の桁がすべて指定されている場合は、日時文字列の書式文字列に含まれる句読点を省略できます。たとえば、MM、DD、YYなどの2桁の書式要素で、2ではなく02を指定する場合です。
日時文字列の書式文字列で最後にある時刻フィールドを省略できます。
日時書式要素と日付文字列内の対応する文字の一致に失敗した場合、かわりの書式要素が適用されます(表7-6「Oracleの書式一致」を参照)。
表7-6 Oracleの書式一致
元の書式要素 | 元の書式要素のかわりに使用される書式要素 |
---|---|
'MM' |
|
|
|
|
|
|
|
|
|
NULL値および空白テキスト値のバイト値への変換
CONVERTでは、NULL文字列(''
)と空白文字列(' '
)に対しては同じ値を返します。どちらも、変換の結果は32
です。
PACKEDおよびBINARY変換
PACKEDおよびBINARY型は、PACKEDおよびBINARYのデータを含むバイナリ・ファイルを作成するのに役立ちます。そのようなファイルを作成するには、BINARYキーワードとともにFILEOPEN文を使用してファイルを開き、FILEPUTを使用して値を書き込みます。FILEPUT文の引数としてROWファンクションを使用することで、ファイルの形式を設定できます。
例
例7-49 10進値のテキストへの変換
この例では、JOINCHARSとCONVERTファンクションを使用して、製品および月について一定のテキストを変数price
の値と結び付け、価格を小数点以下の桁なしで表す方法を示します。
LIMIT month TO 'Jul96' LIMIT product to 'Canoes' SHOW JOINCHARS('Price of Canoes = $' CONVERT(price TEXT 0)) Price of Canoes = $200
例7-50 テキスト値のエスケープ・シーケンスへの変換
この例では、CONVERTファンクションをESCAPEBASEオプションとともに使用して、TEXT値を、デフォルトの10進エスケープ・シーケンスから16進エスケープ・シーケンスへ変換する方法を示します。
DEFINE textvar VARIABLE TEXT textvar = 'testvalue' SHOW CONVERT(textvar INFILE 9 1) '\d116\d101\d115\d116\d118\d097\d108\d117\d101' ESCAPEBASE = 'x' SHOW CONVERT(textvar INFILE 9 1) '\x74\x65\x73\x74\x76\x61\x6C\x75\x65'
CORRELATIONファンクションは、2つの式のデータ値のペアについて相関係数を返すファンクションです。相関係数は、データ値間の関係の強度を示します。相関係数が正の1
または負の1に近いほど、式内のデータ値間の関係は強くなります。相関係数0
(ゼロ)は相関がないことを意味し、+1
(プラス1)または-1
(マイナス1)は完全な相関を意味します。正の相関係数は、一方の式のデータ値が増加(または減少)すると、もう一方の式のデータ値も増加(または減少)することを示します。負の相関係数は、一方の式のデータ値が増加すると、もう一方の式のデータ値は減少することを示します。
パラメータ
少なくとも1つのディメンションがexpression2と共通している、ディメンション化された数式。
少なくとも1つのディメンションがexpression1と共通している、ディメンション化された数式。
Pearsonの積率相関係数(Pearson product-moment)を計算します。たとえば販売個数と単価などのように、データ水準が間隔尺度または比例尺度で、式のデータ値が線形関係を持ち、正規分布する場合、このメソッドを使用します。
Spearmanの順位相関係数(Spearman's rho)を計算します。式が線形関係を持たないか、正規分布しない場合に、このノンパラメトリック・メソッドを使用します。相関係数の計算時に、このメソッドではexpression1およびexpression2のデータ値に順位を付け、expression1の各要素の順位をexpression2の対応する要素と比較します。このメソッドは、式のほとんどの値が一意であることを前提としています。
Kendallの順位相関係数(Kendall's tau)を計算します。このノンパラメトリック・メソッドでは、SPEARMANメソッドと同様に、まずexpression1およびexpression2のデータ値を順位付けます。ただし、KENDALLメソッドでは、各ペアの順位を次に続くペアと比較します。このメソッドは、expression1およびexpression2のデータ値のほとんどが一意でない場合に使用します。
CORRELATIONが相関係数を計算する、オプションのディメンション・リスト。expression1およびexpression2の両方が、dimension-listにあるすべてのディメンションでディメンション化されている必要があります。CORRELATIONは、dimension-listのすべてのディメンションに対して、expression1のデータ値をexpression2のデータ値と相関させます。CORRELATIONは、dimension-listのディメンション以外のexpression1とexpression2のすべてのディメンションによってディメンション化された各セルに対し1つの相関係数を含む、1つの配列を返します。
dimension-list引数を指定しない場合は、expression1およびexpression2で共通するディメンション全体の相関係数がCORRELATIONによって計算されます。2つの式のディメンションがすべて同じ場合は、CORRELATIONは単一の相関係数を返します。いずれかの式にもう一方の式では共有されていないディメンションが含まれている場合には、CORRELATIONは、各セルに1つの相関係数を含んだ配列を返しますが、このとき、セルは、式内の共有されていないディメンションによってディメンション化されています。
使用上の注意
CORRELATIONでのNASKIPの影響
CORRELATIONはNASKIPオプションの影響を受けます。NASKIPがYES
に設定されている場合(デフォルト)、CORRELATIONではNA
値を無視します。NASKIPがNO
に設定されている場合、式のNA
値はNA
相関係数になります。
例
例7-51 PEARSONメソッドによる相関付け
アナリティック・ワークスペースにunits
およびprice
の2つの変数があるとします。price
変数の2つのディメンション(month
およびproduct
)は、units
変数と共有されていて、units変数には、3つ目のディメンションとしてdistrict
があります。
次のCORRELATION文では、dimension-list引数は指定されていません。この文のCORRELATIONファンクションからは、2つの変数で共有されていないディメンション内の各ディメンション値についての相関係数が返されます。
REPORT CORRELATION(units price pearson)
この文によって生成される出力は、次のとおりです。
CORRELATION (UNITS PRICE DISTRICT PEARSON) -------------- ----------- Boston -0.75 Atlanta -0.85 Chicago -0.83 Dallas -0.66 Denver -0.83 Seattle -0.69
次の文で、month
およびproduct
ディメンションを制限します。
LIMIT month to 'Jan96' TO 'Mar96' LIMIT product TO 'Tents' TO 'Racquets'
次の文により、ステータスにある制限されたディメンション値について、product
ディメンションを基準とした相関係数がレポートされます。
REPORT CORRELATION(units price pearson basedon product) CORRELATION(UNITS PRICE PEARSON- --------BASEDON PRODUCT)-------- -------------MONTH-------------- DISTRICT Jan96 Feb96 Mar96 -------------- ---------- ---------- ---------- Boston -0.96 -0.90 -0.89 Atlanta -0.97 -0.97 -0.97 Chicago -0.96 -0.95 -0.95 Dallas -0.98 -0.98 -0.99 Denver -0.97 -0.97 -0.97 Seattle -0.89 -0.83 -0.83
次の文により、制限されたディメンション値について、month
ディメンションを基準とした相関係数がレポートされます。
REPORT CORRELATION(units price pearson basedon month) CORRELATION(UNITS PRICE PEARSON- ---------BASEDON MONTH)--------- ------------PRODUCT------------- DISTRICT Tents Canoes Racquets -------------- ---------- ---------- ---------- Boston -0.59 -0.92 -0.55 Atlanta -0.73 -0.83 0.03 Chicago -0.91 -0.84 -0.68 Dallas -0.86 -0.92 0.31 Denver -0.98 -0.94 -0.67 Seattle -0.98 -0.89 -0.70
COUNTファンクションは、ブール式のTRUE
値の件数をカウントします。式にTRUE
値がない場合は、0
(ゼロ)が返されます。
パラメータ
TRUE
値をカウントする対象のブール式。
内部動作が若干変更されます。このキーワードは、元のパフォーマンスが非常に遅い場合にのみ指定してください。
結果のディメンションの名前。または、boolean-expressionの1つのディメンションと結果のディメンションとする別のディメンションとの間のリレーションの名前。
デフォルトでは、COUNTはYES
値またはNO
値のどちらか1つを返します。結果のディメンションを1つ以上指定すると、COUNTでは、指定したディメンションに対してTRUE
値の有無がテストされ、値の配列が返されます。各ディメンションは、boolean-expressionのディメンションであるか、そのディメンションの1つと関連付けられている必要があります。
ヒント: 指定したディメンションがboolean-expressionの実際のディメンションではなくboolean-expressionのディメンションに関連付けられたディメンションであり、かつ2つのディメンション間のリレーションが複数ある場合は、ディメンション間のデフォルトのリレーションを使用して計算が行われます。(デフォルトのリレーションの詳細は、RELATIONコマンドを参照してください。)Oracle OLAPでこのデフォルトのリレーションを使用しない場合は、リレーションの名前を指定して、関連付けられたディメンションを指定します。 |
使用上の注意
COUNTでのNASKIPの影響
COUNTは、NASKIPオプションの影響を受けます。NASKIPがYES
に設定されている場合(デフォルト)、NA
値の数にかかわらず、COUNTはブール式のTRUE
値の件数を返します。NASKIPがNO
に設定されている場合、式の値にNA
が1つでもあると、COUNTはNA
を返します。式のすべての値がNA
の場合には、NASKIPがどちらに設定されていても、COUNTはNA
を返します。
例
例7-55 地区ごとのTRUE値のカウント
COUNTを使用して、各地区でスポーツウェアを2,000枚以上販売した月の数を検索できます。各地区の販売件数を取得するには、結果のディメンションとしてdistrict
を指定します。
LIMIT product TO 'SPORTSWEAR' REPORT HEADING 'Count' COUNT(units GT 2000, district)
この文によって生成される出力は次のとおりです。
DISTRICT Count -------------- ---------- Boston 0 Atlanta 23 Chicago 11 Dallas 24 Denver 7 Seattle 0
CUMSUMファンクションは、時間ディメンション全体または別のディメンション全体の累積合計を計算するファンクションです。合計されるデータが1次元である場合、CUMSUMでは、一連の累積合計を1回(該当ディメンションのすべての値に対し1回)行います。データに、合計する対象のディメンション以外のディメンションがある場合、CUMSUMは、他のディメンションにあるステータス中の値の各組合せに対し別個に、一連の累積合計を行います。
パラメータ
値を合計する対象の数値変数または演算。たとえば、UNITSなど。
cum-expressionが多次元の場合、CUMSUMによりファンクションの処理中に使用する一時変数が作成されます。STATUSキーワードを指定すると、一時変数のサイズの計算時に、ディメンションのデフォルト・ステータスのかわりに現行のステータスが使用されます。式のディメンションがいくつかの値に制限されており、物理的に断片化されている場合は、STATUSを指定することで、CUMSUMのパフォーマンスを向上させることができます。
結果がステータス外になる式(たとえば、LEADまたはLAGファンクションを使用した場合、または修飾データ参照を使用した場合)でCUMSUMをSTATUSキーワードとともに使用した場合、ステータス外の結果はNA
として返されます。
注意: 合計されるデータが1次元の場合にSTATUSキーワードを指定すると、エラーが発生します。 |
合計の対象とする、cum-expressionのディメンション。
各新年の開始時など、新しいリセット・ディメンション値ごとに一連の累積合計をやり直すかどうかを指定します。リセット・ディメンションは、次のいずれかです。
明示的に定義されたリレーションを介してtotal-dimに関連付けられている任意のディメンション。
total-dimがDAY、WEEK、MONTH、QUARTER、YEAR型のいずれかである場合、DAY、WEEK、MONTH、QUARTERまたはYEAR型の任意のディメンション。CUMSUMでは2つのディメンション間の暗黙的なリレーションを使用するため、それらは明示的なリレーションで関連付けられている必要はありません。「暗黙的なリレーションの変更」を参照してください。
total-dimによってディメンション化されたリレーション。CUMSUMでは、関連ディメンションをリセット・ディメンションとして使用しますが、これによって、リレーションが複数ある際にどのリレーションを使用するかを選択できます。
CUMSUMで、現行のステータスにあるtotal-dimの値のみを使用するように指定します。INSTATを指定しないと、現行のステータスにかかわらず、total-dimのすべての値の合計が算出されます。「デフォルトで現行のステータスを無視するINSTAT」を参照してください。
使用上の注意
暗黙的なリレーションの変更
total-dim引数とreset-dim引数の両方にDAY、WEEK、MONTH、QUARTERまたはYEAR型を持つディメンションを指定すると、CUMSUMでは、明示的なリレーションが存在する場合にも、2つのディメンション間の暗黙的なリレーションを使用します。ただし、reset-dim引数に対しリレーションの名前を指定することで、このデフォルトの動作を無効にして、明示的なリレーションを使用できます。
デフォルトで現行のステータスを無視するINSTAT
INSTATキーワードを指定しない場合は、CUMSUMでは、合計の計算時に現行のステータスを無視します。全体を合計するディメンションがMONTHであるとします(INSTATは指定されていません)。ある月のCUMSUM合計には、それ以前の月のいくつかがステータス中でなくても、それらのすべての月の値が使用されます。リセット・ディメンションが指定されていると、ある月の合計には、先行する月のうち、リセット・ディメンションの同じ値に呼応するすべての月の値が使用されます(たとえば、同じ年内の先行するすべての月)。年の初めから当日までの合計を計算するには、リセット・ディメンションとしてYEARを指定します。
例
例7-56 多次元CUMSUM計算
この例では、1996年の最初の6か月間について、Atlanta地区におけるテントおよびカヌーの個数(units
)の累積合計を計算します。レポートには、月ごとの個数、リセット・ディメンションとして年(year
)を使用して計算した年の初めから当日までの合計数、およびリセット・ディメンションなしに先行するすべての月で計算した合計数が示されます。次の文を発行するとします。
LIMIT district TO 'Atlanta' LIMIT product TO 'Tents' 'Canoes' LIMIT month TO 'Jan96' TO 'Jun96' REPORT DOWN month units CUMSUM(units, month year) - CUMSUM(units, month)
次のレポートが表示されます。
DISTRICT: ATLANTA ------------------------PRODUCT------------------------ ---------TENTS------------- ---------CANOES------------ CUMSUM(UNI CUMSUM(UNI TS, MONTH CUMSUM(UNI TS, MONTH CUMSUM(UNI MONTH UNITS YEAR) TS, MONTH) UNITS YEAR) TS, MONTH) ----- -------- --------- ---------- ------- --------- ---------- Jan96 279 279 5,999 281 281 5,162 Feb96 305 584 6,304 309 590 5,471 Mar96 356 940 6,660 386 976 5,857 Apr96 537 1,477 7,197 546 1,522 6,403 May96 646 2,123 7,843 525 2,047 6,928 Jun96 760 2,883 8,603 608 2,655 7,536
CUMSUM(UNITS, MONTH)の合計には、最初の月JAN95以降のすべての月の値が含まれます。CUMSUM(UNITS, MONTH YEAR)の合計には、JAN96以降の値のみが含まれます。
例7-57 四半期でのリセット
この例では、同じ製品および地区について、1996年1年間の累積合計を計算します。リセット・ディメンションとしてquarter
が指定されているため、合計は各四半期の初めで累積が開始されます。Jan96
、Apr96
、Jul96
およびOct96
の累積合計は、これらの月の個数と同じです。次の文を発行するとします。
LIMIT district TO 'Atlanta' LIMIT product TO 'Tents' 'Canoes' limit month TO year 'Yr96' REPORT DOWN month units CUMSUM(units, month quarter)
次のレポートが表示されます。
DISTRICT: ATLANTA ------------------PRODUCT------------------ --------TENTS-------- -------CANOES-------- CUMSUM(UNI CUMSUM(UNI TS, MONTH TS, MONTH MONTH UNITS QUARTER) UNITS QUARTER) ------------ ---------- ---------- ---------- ---------- Jan96 279 279 281 281 Feb96 305 584 309 590 Mar96 356 940 386 976 Apr96 537 537 546 546 May96 646 1,183 525 1,071 Jun96 760 1,943 608 1,679 Jul96 852 852 626 626 Aug96 730 1,582 528 1,154 Sep96 620 2,202 520 1,674 Oct96 554 554 339 339 Nov96 380 934 309 648 Dec96 284 1,218 288 936
CURRENT_TIMESTAMPファンクションは、セッションのタイムゾーンでの現在の日時をTIMESTAMP_TZ
データ型の値として返します。タイムゾーン・オフセットがセッションの現在のローカル時間を示します。
セッションのタイムゾーンにおける現在の日時をTIMESTAMP
値として取得する場合は、LOCALTIMESTAMPファンクションを使用してください。
DAYOFファンクションは、指定した日付の曜日を示す、1から7までの範囲のINTEGER
を返すファンクションです。結果の1
は日曜日を表します。結果は、指定したDATE式と同じディメンションを持ちます。
DDOFファンクションは、指定した日付の日にちを示す、1から31までの範囲のINTEGER
を返すファンクションです。DDOFにより返される結果は、指定したDATE式と同じディメンションを持ちます。
DECODEファンクションは、ある式を1つ以上の他の式と比較し、基準の式が検索式と等しい場合に呼応する結果式を返します。一致する式がまったくない場合にはデフォルトの式(デフォルトが指定されている場合)またはNA
(デフォルトが指定されていない場合)を返すファンクションです。
パラメータ
(比較の基準とする)検索される式。このファンクションでは、比較の前に、exprを1番目のsearch値のデータ型に自動変換します。
(比較する対象の)検索する式。このファンクションでは、比較の前に、各search値を1番目のsearch値のデータ型に自動変換します。
expressionがsearchと等しいときに返される式。
expressionがsearchと等しくないときに返される式。
使用上の注意
値の評価の順序
search、resultおよびdefaultの値は、式から導出されます。このファンクションでは、いずれかの値をexprと比較する前にまずすべてのsearch値を評価するのではなく、各search値を、それぞれexprと比較する前にのみ評価します。したがって、先行するsearchがexprと等しい場合、以後のsearchは評価されません。
例
例7-64 IDフィールドのデコード
アナリティック・ワークスペースに次のオブジェクトが含まれているとします。計算式inventory_location
では、DECODEファンクションを使用して、warehouse_id
のINTEGER
値に対応するテキスト値を特定しています。
DESCRIBE DEFINE product_id DIMENSION TEXT DEFINE warehouse_id DIMENSION INTEGER DEFINE inventories VARIABLE DECIMAL <product_id warehouse_id> DEFINE inventory_location FORMULA TEXT <warehouse_id> EQ - DECODE (warehouse_id, 1, 'Southlake', 2, 'San Francisco', 4, 'Seattle', - 'Non domestic') REPORT inventories ---------------INVENTORIES--------------- ---------------PRODUCT_ID---------------- WAREHOUSE_ID 1770 1775 -------------------- -------------------- -------------------- 1 30.63 79.02 2 71.49 55.83 3 88.71 68.02 4 86.27 41.86 REPORT inventory_location WAREHOUSE_ID INVENTORY_LOCATION -------------------- -------------------- 1 Southlake 2 San Francisco 3 Non domestic 4 Seattle
次の各レポートにより、inventory_location
を使用すると、warehouse_id
の実際の値ではなく、デコードされたwarehouse_id
の値をレポートに表示できることがわかります。
LIMIT product_id to '1775' REPORT DOWN warehouse_id inventories ----INVENTORIES----- -----PRODUCT_ID----- WAREHOUSE_ID 1775 -------------------- -------------------- 1 79.02 2 55.83 3 68.02 4 41.86 REPORT DOWN inventory_location inventories ----INVENTORIES----- -----PRODUCT_ID----- INVENTORY_LOCATION 1775 -------------------- -------------------- Southlake 79.02 San Francisco 55.83 Non domestic 68.02 Seattle 41.86
例7-65 BITANDを使用したDECODE
アナリティック・ワークスペースに、レポート済の値を持つ次のオブジェクトがあるとします。
DEFINE order_id DIMENSION TEXT DEFINE customer_id DIMENSION TEXT DEFINE order_customer COMPOSITE <order_id customer_id> DEFINE order_status VARIABLE NUMBER(2) <order_customer<order_id customer_id>> REPORT DOWN order_customer order_status ORDER_ID CUSTOMER_ID ORDER_STATUS ------------ ------------ ------------ 2458 101 0.00 2397 102 1.00 2454 103 1.00 2354 104 0.00 2358 105 2.00 2381 106 3.00 2440 107 3.00 2357 108 5.00 2394 109 5.00 2435 144 6.00 2455 145 7.00 2356 105 5.00 2360 107 4.00
order_status
の値は、最初の3ビットに注文に関する情報が格納され、その他のビットは常に0であるビットマップとして使用されるとします。
最初のビットは、場所に関する情報に使用されます。
0=郵便局(Post Office)。0、2、4、6の整数値に対応します。
1=倉庫(Warehouse)。1、3、5、7の整数値に対応します。
2番目のビットは、輸送方法に使用されます。
0=航空便(Air)。0、1、4、5の整数値に対応します。
1=地上便(Ground)。2、3、6、7の整数値に対応します。
3番目のビットは、受領方法に使用されます。
0=保証付き(Certified)。0、1、2、3の整数値に対応します。
1=保険付き(Insured)。4、5、6、7の整数値に対応します。
次の計算式は、DECODEを使用してビット値をテキスト値に置き換えます。
DEFINE location FORMULA DECODE(BITAND(order_status, 1), 1, 'Warehouse', 'PostOffice') DEFINE method FORMULA DECODE(BITAND(order_status, 2), 2, 'Ground', 'Air') DEFINE receipt FORMULA DECODE(BITAND(order_status, 4), 4, 'Insured', 'Certified')
これにより、デコードされた値を表示するレポートを発行できます。
REPORT DOWN order_customer order_status location method receipt ORDER_ID CUSTOMER_ID ORDER_STATUS LOCATION METHOD RECEIPT ------------ ------------ ------------ ------------ ------------ ------------ 2458 101 0.00 PostOffice Air Certified 2397 102 1.00 Warehouse Air Certified 2454 103 1.00 Warehouse Air Certified 2354 104 0.00 PostOffice Air Certified 2358 105 2.00 PostOffice Ground Certified 2381 106 3.00 Warehouse Ground Certified 2440 107 3.00 Warehouse Ground Certified 2357 108 5.00 Warehouse Air Insured 2394 109 5.00 Warehouse Air Insured 2435 144 6.00 PostOffice Ground Insured 2455 145 7.00 Warehouse Ground Insured 2356 105 5.00 Warehouse Air Insured 2360 107 4.00 PostOffice Air Insured
DEPRDECLファンクションは、一連の資産の減価償却費を計算するファンクションです。DEPRDECLは、指定した資産の耐用年数に基づいて資産を定率法で減価償却します(「DEPRDECLで使用される計算方法」を参照)。期首価額と期末価額は、各期間に取得した資産に対して指定します。
ヒント: DEPRDECLに使用されている減価償却の純粋な定率法は、最も一般的な形式の定率法とは異なります。より一般的な形式の定率法については、定率法と定額法を組み合せて使用しているDEPRDECLSWファンクションの項を参照してください。 |
構文
DEPRDECL(start-exp end-exp n [STATUS] [decline-factor [ {FULL|HALF|portion-exp}[time-dimension] ] ])
パラメータ
資産の期首価額が格納された数式。start-exp式は、時間ディメンションによってディメンション化する必要があります。start-expには、時間ディメンションの値ごとに、その期間に取得した資産の初期価額が格納されます。start-expには、時間ディメンションに加えて、非時間ディメンションもあります。
資産の期末価額が格納された数式。end-exp式は、start-expと同じディメンションでディメンション化する必要があります。end-expには、時間ディメンションの値ごとに、その期間に取得した資産の最終(または残存)価額が格納されます。start-expのそれぞれの値には、これに対応するend-exp値が必要です。たとえば、1996年に取得した資産の残存価額が$200
であった場合、1996年のend-expの値は$200
になります。
資産の減価償却期間の期間数が格納されるINTEGER
式。n式には、start-expの任意の非時間ディメンションを格納できますが、時間ディメンションは格納できません。
DEPRDECLが減価償却費を計算する際に、現行のステータス・リスト(つまり現在ステータスにあり、現行のステータスの順序に並んでいるディメンション値のみ)を使用することを指定します。デフォルトでは、デフォルトのステータス・リストが使用されます。
減価償却費の計算に使用するために定率を指定する数式。decline-factor式には、start-expの任意の非時間ディメンションを格納できますが、時間ディメンションは格納できません。
係数が2の場合は、定率が2倍であることを示します。デフォルト値は2
です。
(デフォルト)ある期間の減価償却費全額を、資産の取得期間に計上することを指定します。一連の全資産に対する全額を計上します。
ある期間の減価償却費の半額を、資産の取得期間に計上することを指定します。一連の全資産に対する半額を計上します。取得した期間に計上される減価償却費の一部としてHALFを指定すると、各期間にHALF係数が適用されます。各期間の全減価償却の半分は次の期間にロールされ、後半の減価償却は期間n
+ 1
に実施されます。HALFは、ある期間の下半期に資産を取得した場合などに使用します。
一定の資産については全額を計上し、それ以外の資産については半額を計上する場合は、start-expの任意の非時間ディメンションによってディメンション化されるportion-exp式を指定できます。portion-exp式は、FULLまたはHALFの値を指定したテキスト式にする必要があります。
start-expおよびend-expがディメンション化される時間ディメンションの名前。時間ディメンションが、DAY、WEEK、MONTH、QUARTER、YEAR型のいずれかである場合、time-dimension引数はオプションです。
使用上の注意
DEPRDECLで使用される計算方法
DEPRDECLでは、償却が全額は完了していない一連の全資産について、特定の期間の減価償却費が、その期間の減価償却費の合計として計算されます。ある資産の最初の減価償却期間とは、その資産を取得した期間を指します。
DEPRDECLでは、当期資産額にdecline-factorを乗算し、この値を資産の有効期間内の期間数で除算することによって、定率法による減価償却費が期間ごとに計算されます。ただし、特定の期間について計算した結果、当期資産額が期末価額を下回る場合、減価償却費は調整されます。この場合、減価償却費は当期資産額から期末価額を減算した値として計算されます。
低い期末価額
ある資産に対して指定した期末価額が、最後の期間の減価償却費を調整する必要がないほど低い場合、全期間にわたる減価償却費の合計は、通常、期首価額から指定の期末価額を減算した値より小さくなります。
高い期末価額
ある資産に対して指定した期末価額が比較的高い場合は、減価償却の有効期間として指定した期間よりも短い期間内に全額が償却される場合があります。この場合、減価償却の指定した有効期間全体にわたってこの減価償却費を適用するには、decline-factorを小さくします。
DEPRDECLとNA値
start-expの値がNA
で、これに対応するend-expの値がNA
でない場合は、エラーが発生します。同様に、end-expの値がNA
で、これに対応するstart-expの値がNA
でない場合もエラーが発生します。
start-expの値とこれに対応するend-expの値がどちらもNA
の場合、DEPRDECLの動作はNASKIPオプションの影響を受けます。NASKIPの設定がYES
(デフォルト)の場合、DEPRDECLでは、減価償却費の計算時に値が0とみなされます。NASKIPの設定がNO
の場合は、DEPRDECLからの戻り値は、影響するすべての期間に対してNA
になります。
例
例7-66 単一期間に取得した資産のDEPRDECLによる減価償却費の計算
この例では、DEPRDECLを使用して、単一の期間に取得した資産の減価償却費を計算する方法を示します。
次の文を実行すると、assets
およびsalvage
という2つの変数が作成されます。
DEFINE assets DECIMAL <year> DEFINE salvage DECIMAL <year>
変数assets
およびsalvage
に対して、次の値を代入します。
YEAR ASSETS SALVAGE -------------- ---------- ---------- Yr95 1,000.00 100.00 Yr96 0.00 0.00 Yr97 0.00 0.00 Yr98 0.00 0.00 Yr99 0.00 0.00 Yr00 0.00 0.00
assets
変数には、1995年に取得した資産の期首価額が格納されています。salvage
変数には、1995年に取得した資産の期末価額が格納されています。
次の文を実行すると、資産価額と残存価額の他に、資産の減価償却費もレポートされます。DEPRDECLをコールして減価償却費を計算する場合は、資産の有効期間内の5期間(この場合は5年)、償却係数として2(2倍の定率)が指定されます。
REPORT assets salvage W 12 HEADING 'Depreciation' - DEPRDECL(assets salvage 5 2 FULL year)
この文によって生成される出力は、次のとおりです。
YEAR ASSETS SALVAGE Depreciation -------------- ---------- ---------- ------------ Yr95 1,000.00 100.00 400.00 Yr96 0.00 0.00 240.00 Yr97 0.00 0.00 144.00 Yr98 0.00 0.00 86.40 Yr99 0.00 0.00 29.60 Yr00 0.00 0.00 0.00
この例では、1999年の減価償却費は、当期資産額が残存価額を下回らないように調整されています。当期資産額は、期首資産価額から減価償却累計額を減算することによって計算されます。たとえば、1998年では、減価償却累計額は$870.40($400.00+$240.00+$144.00+$86.40=$870.40)となります。したがって、1998年の当期資産額は、$129.60($1,000.00-$870.40=$129.60)となります。この例では、通常、当期資産額と2の乗算結果を5で除算することによって減価償却費を計算します。ここで、$129.60と2の乗算結果を5で除算すると、求められる減価償却費は$51.84となります。この減価償却費を1998年の当期資産額である$129.60から減算すると、1999年の当期資産額は$77.76となり、残存価額である$100を下回ります。当期資産額が残存価額を下回らないように、DEPRDECLファンクションでは、当期資産額($129.60)から残存価額($100.00)を減算して減価償却費($29.60)を計算します。
例7-67 複数の期間に取得した資産のDEPRDECLによる減価償却費の計算
DEPRDECLを使用すると、一連の資産の減価償却費も計算できます。
次のレポートに示す変数assets
およびsalvage
の1997年の値を変更するとします。
YEAR ASSETS SALVAGE -------------- ---------- ---------- Yr95 1,000.00 100.00 Yr96 0.00 0.00 Yr97 500.00 50.00 Yr98 0.00 0.00 Yr99 0.00 0.00 Yr00 0.00 0.00 Yr01 0.00 0.00 Yr02 0.00 0.00
ここで、assets
とsalvage
の1995年と1997年の値には、ゼロ以外の値が格納されています
次の文を実行すると、資産額と残存価額がレポートされ、DEPRDECLを使用して各年の減価償却費が計算されます。ここでは、資産の有効期間として5年、償却係数として2(2倍の定率)が指定されています。
REPORT assets SALVAGE W 12 HEADING 'Depreciation' - DEPRDECL(assets salvage 5 2 FULL year)
この文によって生成される出力は、次のとおりです。(1997年に取得した資産があるため、この年の減価償却費は増加しています。)
YEAR ASSETS SALVAGE Depreciation -------------- ---------- ---------- ------------ Yr95 1,000.00 100.00 400.00 Yr96 0.00 0.00 240.00 Yr97 500.00 50.00 344.00 Yr98 0.00 0.00 206.00 Yr99 0.00 0.00 101.00 Yr00 0.00 0.00 43.20 Yr01 0.00 0.00 14.80 Yr02 0.00 0.00 0.00
DEPRDECLSWファンクションは、一連の資産の減価償却費を計算するファンクションです。DEPRDECLSWは、指定した資産の耐用年数に基づいて資産を定率法の変動で減価償却します(「DEPRDECLSWで使用される計算方法」を参照)。DEPRDECLSWでは、最初は定率法が使用され、時系列における次のいずれかの時点で定額法に切り替わります。
残りの期間全体にわたる減価償却を定額法にした場合、同じ期間の減価償却を定率法にした場合より減価償却額が上回る最初の期間(デフォルト)
switch-period引数で指定した期間
このバリエーションの定率法は、最も一般的に使用されている形式の減価償却の定率法です。
構文
DEPRDECLSW(start-exp end-exp n [STATUS]
[decline-factor [{FULL|HALF| portion-exp} [switch-period [time-dimension]]]])
パラメータ
資産の期首価額が格納された数式。start-exp式は、時間ディメンションによってディメンション化する必要があります。start-expには、時間ディメンションの値ごとに、その期間に取得した資産の初期価額が格納されます。start-expには、時間ディメンションに加えて、非時間ディメンションもあります。
資産の期末価額が格納された数式。end-exp式は、start-expと同じディメンションでディメンション化する必要があります。end-expには、時間ディメンションの値ごとに、その期間に取得した資産の最終(または残存)価額が格納されます。start-expのそれぞれの値には、これに対応するend-exp値が必要です。たとえば、1990年に取得した資産の残存価額が$200であった場合、1990年のend-expの値は$200になります。
資産の減価償却期間の期間数が格納されるINTEGER
式。n式には、start-expの任意の非時間ディメンションを格納できますが、時間ディメンションは格納できません。
DEPRDECLSWが減価償却費を計算する際に、現行のステータス・リスト(つまり現在ステータスにあり、現行のステータスの順序に並んでいるディメンション値のみ)を使用することを指定します。デフォルトでは、デフォルトのステータス・リストが使用されます。
減価償却費の計算に使用するために定率を指定する数式。decline-factor式には、start-expの任意の非時間ディメンションを格納できますが、時間ディメンションは格納できません。
係数が2の場合は、定率が2倍であることを示します。デフォルトは2です。
(デフォルト)ある期間の減価償却費全額を、資産の取得期間に計上することを指定します。一連の全資産に対する全額を計上します。この引数はオプションですが、この引数を指定するときは、先行するオプション引数も指定する必要があります。
ある期間の減価償却費の半額を、資産の取得期間に計上することを指定します。一連の全資産に対する半額を計上します。HALFは、ある期間の下半期に資産を取得した場合などに使用します。取得した期間に計上される減価償却費の一部としてHALFを指定すると、各期間にHALF係数が適用されます。各期間の全減価償却の半分は次の期間にロールされ、後半の減価償却は期間n
+ 1
に実施されます。この引数はオプションですが、この引数を指定するときは、先行するオプション引数も指定する必要があります。
一定の資産については全額を計上し、それ以外の資産については半額を計上する場合は、start-expの任意の非時間ディメンションによってディメンション化されるportion-exp式を指定できます。portion-exp式は、FULLまたはHALFの値を指定したテキスト式にする必要があります。この引数はオプションですが、この引数を指定するときは、先行するオプション引数も指定する必要があります。
計算を定額法に切り替える期間を示すINTEGER
式。この引数はオプションですが、この引数を指定するときは、先行するオプション引数も指定する必要があります。
一般的な会計慣行では、残りの期間全体にわたる減価償却を定額法にした場合、同じ期間の減価償却を定率法にした場合より減価償却額が上回る最初の期間中に定額法に切り替えます。この動作は、switch-period引数を指定しないことで指定できます。
switch-period引数を指定しなかったとき、あるいはこの引数の値がNA
または0のときは、残りの期間全体にわたる減価償却を定額法にした場合、同じ期間の減価償却を定率法にした場合より減価償却額が上回る最初の期間中に、計算方法が定率法から定額法に切り替わります。この場合、DEPRDECLSWファンクションの動作はDEPRDECLファンクションの動作と変わりません。
様々な資産に対して異なる切替え期間を指定する場合は、start-expの任意の非時間ディメンションでディメンション化される式を指定できます。
start-expおよびend-expがディメンション化される時間ディメンションの名前。時間ディメンションが、DAY、WEEK、MONTH、QUARTER、YEAR型のいずれかである場合、time-dimension引数はオプションです。この引数を指定するときは、先行するオプション引数も指定する必要があります。
使用上の注意
DEPRDECLSWで使用される計算方法
DEPRDECLSWでは、償却が全額は完了していない一連の全資産について、特定の期間の減価償却費が、その期間の減価償却費の合計として計算されます。ある資産の最初の減価償却期間とは、その資産を取得した期間を指します。
DEPRDECLSWでは、定率法による減価償却の計算対象となる期間ごとに、当期資産額にdecline-factorを乗算し、その結果を資産の有効期間の数で除算することによって減価償却費が計算されます。DEPRDECLSWが定額法に切り替わると、(前期からの)減価償却費が資産価額から減算され、得られた金額が資産の有効期間の残りの期間数で除算されます。ただし、特定の期間について減価償却費を計算した結果、当期資産額が期末価額を下回る場合、減価償却費は調整されます。この場合、減価償却費は当期資産額から期末価額を減算した値として計算されます。
DEPRDECLSWで使用されている定額法は、DEPRSLで使用されている従来の定額法とは異なります。減価償却の定率法では、減価償却の他の方法とは異なり、算出された減価償却費が減価償却可能な残りの金額を上回る期間まで、資産の残存価額が無視されます。DEPRDECLSWでは、定率法から定額法に切り替わった後でも、この方法で残存価額が無視されます。たとえば、資産の期首価額が16,000で、5期間後の残存価額が1,000であるとします。定率法を使用した期間(ここでは最初の3期間)を通じた減価償却費の合計は11,544です。残りの期間について定額法で計算する場合、残りの総額(16,000-11,544=3,456)が計算の基礎になり、総額から残存価額を減算した値(2,456)にはなりません。したがって、最後の2期間の減価償却費は1,728になりますが、最後の1期間については残存価額が差し引かれるため、728になります。
想定外の調整法
ある資産に対して指定した期末価額が比較的高い場合は、減価償却の有効期間として指定した期間よりも短い期間内に全額が償却される場合があります。この場合、減価償却の指定した有効期間全体にわたってこの減価償却費を適用するには、decline-factorを小さくします。
DEPRDECLSWとNA値
start-expの値がNA
で、これに対応するend-expの値がNA
でない場合は、エラーが発生します。同様に、end-expの値がNA
で、これに対応するstart-expの値がNA
でない場合もエラーが発生します。
start-expの値とこれに対応するend-expの値がどちらもNA
の場合、DEPRDECLSWの動作はNASKIPオプションの影響を受けます。NASKIPの設定がYES
(デフォルト)の場合、DEPRDECLSWでは、減価償却費の計算時に値が0とみなされます。NASKIPの設定がNO
の場合は、DEPRDECLSWからの戻り値は、影響するすべての期間に対してNA
になります。
例
例7-68 単一期間に取得した資産の減価償却費の計算
この例では、DEPRDECLSWを使用して、単一の期間に取得した資産の減価償却費を計算する方法を示します。切替え期間を指定しなかった場合のDEPRDECLSWの動作も示します。
次の文を実行すると、assets
およびsalvage
という2つの変数が作成されます。
DEFINE assets DECIMAL <year> DEFINE salvage DECIMAL <year>
変数assets
およびsalvage
に対して、次の値を代入します。
YEAR ASSETS SALVAGE ------- ---------- ----------- Yr95 1,000.00 100.00 Yr96 0.00 0.00 Yr97 0.00 0.00 Yr98 0.00 0.00 Yr99 0.00 0.00 Yr00 0.00 0.00
変数assets
には、1995年に取得した資産の期首価額が格納されています。salvage
には、1995年に取得した資産の期末価額が格納されています。
次の文を実行すると、資産額と残存価額がレポートされ、DEPRDECLSWを使用して各年の減価償却費が計算されますが、ここでは、資産の有効期間として5年、償却係数として2(2倍の定率)が指定されています。この文では、switch-period引数は指定されていません。このため、DEPRDECLSWではswitch-periodのデフォルトが使用され、この結果、残りの期間全体にわたる減価償却を定額法にした場合、同じ期間の減価償却を定率法にした場合より減価償却額が上回る最初の期間中に、計算方法が定率法から定額法に切り替わります。
REPORT assets salvage W 12 HEADING 'Depreciation' - DEPRDECLSW (assets salvage 5 2 FULL)
この文によって生成されるレポートは、次のとおりです。
YEAR ASSETS SALVAGE Depreciation ------- ---------- ----------- -------------- Yr95 1,000.00 100.00 400.00 Yr96 0.00 0.00 240.00 Yr97 0.00 0.00 144.00 Yr98 0.00 0.00 108.00 Yr99 0.00 0.00 8.00 Yr00 0.00 0.00 0.00
例7-69 切替え期間の指定
あるいは、切替えが実行される期間を指定することもできます。
3年目(Yr97
)に減価償却を定率法から定額法に切り替えるには、次の文に示すように、切替え期間として3
を指定します。
REPORT assets salvage W 12 HEADING 'DEPRECIATION' - DEPRDECLSW (assets salvage 5 2 FULL 3 year)
この文によって生成されるレポートは、次のとおりです。
YEAR ASSETS SALVAGE Depreciation -------- ---------- ----------- -------------- Yr95 1,000.00 100.00 400.00 Yr96 0.00 0.00 240.00 Yr97 0.00 0.00 120.00 Yr98 0.00 0.00 120.00 Yr99 0.00 0.00 20.00 Yr00 0.00 0.00 0.00
例7-70 複数の期間に取得した資産の減価償却費の計算
DEPRDECLSWを使用すると、一連の資産の減価償却費を計算できます。次のレポートに示す変数assets
およびsalvage
の1997年の値を変更するとします。
YEAR ASSETS SALVAGE -------------- ---------- ---------- Yr95 1,000.00 100.00 Yr96 0.00 0.00 Yr97 500.00 50.00 Yr98 0.00 0.00 Yr99 0.00 0.00 Yr00 0.00 0.00 Yr01 0.00 0.00 Yr02 0.00 0.00
ここで、assets
とsalvage
の1995年と1997年の値には、ゼロ以外の値が格納されています。
次の文を実行すると、資産価額と残存価額の他に、資産の減価償却費もレポートされます。DEPRDECLSWをコールして減価償却費を計算する場合は、資産の有効期間内の5期間(この場合は年)、償却係数として2(2倍の定率)が指定されます。この文では、switch-period引数は指定されていません。このため、DEPRDECLSWではswitch-periodのデフォルトが使用され、この結果、残りの期間全体にわたる減価償却を定額法にした場合、同じ期間の減価償却を定率法にした場合より減価償却額が上回る最初の期間中に、計算方法が定率法から定額法に切り替わります。
REPORT assets salvage W 12 HEADING 'Depreciation' - DEPRDECLSW(assets salvage 5 2 FULL)
この文によって生成される出力は、次のとおりです。
YEAR ASSETS SALVAGE Depreciation -------------- ---------- ---------- ------------ Yr95 1,000.00 100. 00 400.00 Yr96 0.00 0.00 240.00 Yr97 500.00 50.00 344.00 Yr98 0.00 0.00 228.00 Yr99 0.00 0.00 80.00 Yr00 0.00 0.00 54.00 Yr01 0.00 0.00 4.00 Yr02 0.00 0.00 0.00
1997年に取得した資産があるため、この年の減価償却費は増加しています。
DEPRSLファンクションは、一連の資産の減価償却費を計算するファンクションです。DEPRSLは、指定した資産の耐用年数に基づいて資産を定額法で減価償却します(「DEPRSLの計算方法」を参照)。期首価額と期末価額は、各期間に取得した資産に対して指定します。
パラメータ
資産の期首価額が格納された数式。start-exp式は、時間ディメンションによってディメンション化する必要があります。start-expには、時間ディメンションの値ごとに、その期間に取得した資産の初期価額が格納されます。start-expには、時間ディメンションに加えて、非時間ディメンションもあります。
資産の期末価額が格納された数式。end-exp式は、start-expと同じディメンションでディメンション化する必要があります。end-expには、時間ディメンションの値ごとに、その期間に取得した資産の最終(または残存)価額が格納されます。start-expのそれぞれの値には、これに対応するend-exp値が必要です。たとえば、1995年に取得した資産の残存価額が$200であった場合、1995年のend-expの値は$200になります。
資産の減価償却の有効期間が格納されたINTEGER
式。n式には、start-expの任意の非時間ディメンションを格納できますが、時間ディメンションは格納できません。
DEPRSLが減価償却費を計算する際に、現行のステータス・リスト(つまり現在ステータスにあり、現行のステータスの順序に並んでいるディメンション値のみ)を使用することを指定します。デフォルトでは、デフォルトのステータス・リストが使用されます。
(デフォルト)ある期間の減価償却費全額を、資産の取得期間に計上することを指定します。一連の全資産に対する全額を計上します。
ある期間の減価償却費の半額を、資産の取得期間に計上することを指定します。一連の全資産に対する半額を計上します。取得した期間に計上される減価償却費の一部としてHALFを指定すると、各期間にHALF係数が適用されます。各期間の減価償却費総額の半分は次の期間にロールされ、後半の減価償却は期間n
+ 1
に実施されます。HALFは、ある期間の下半期に資産を取得した場合などに使用します。
一定の資産については全額を計上し、それ以外の資産については半額を計上する場合は、start-expの任意の非時間ディメンションによってディメンション化されるportion-exp式を指定できます。portion-exp式は、FULLまたはHALFの値を指定したテキスト式にする必要があります。
start-expおよびend-expがディメンション化される時間ディメンションの名前。時間ディメンションが、DAY、WEEK、MONTH、QUARTER、YEAR型のいずれかである場合、time-dimension引数はオプションです。
使用上の注意
DEPRSLの計算方法
DEPRSLでは、償却が全額は完了していない一連の全資産について、特定の期間の減価償却費が、その期間の減価償却費の合計として計算されます。ある資産の最初の減価償却期間とは、その資産を取得した期間を指します。
DEPRSLとNA値
start-expの値がNA
で、これに対応するend-expの値がNA
でない場合は、エラーが発生します。同様に、end-expの値がNA
で、これに対応するstart-expの値がNA
でない場合もエラーが発生します。
start-expの値とこれに対応するend-expの値がどちらもNA
の場合、DEPRSLの動作はNASKIPオプションの影響を受けます。NASKIPの設定がYES
(デフォルト)の場合、DEPRSLでは、減価償却費の計算時に値が0とみなされます。NASKIPの設定がNO
の場合は、DEPRSLからの戻り値は、影響するすべての期間に対してNA
になります。
例
例7-71 単一期間に取得した資産のDEPRSLによる減価償却費の計算
この例では、DEPRSLを使用して、単一の期間に取得した資産の減価償却費を計算する方法を示します。
次の文を実行すると、assets
およびsalvage
という2つの変数が作成されます。
DEFINE assets DECIMAL <year> DEFINE salvage DECIMAL <year>
変数assets
およびsalvage
に対して、次の値を代入します。
YEAR ASSETS SALVAGE -------------- ---------- ---------- Yr95 1,000.00 100.00 Yr96 0.00 0.00 Yr97 0.00 0.00 Yr98 0.00 0.00 Yr99 0.00 0.00 Yr00 0.00 0.00
変数assets
には、1995年に取得した資産の期首価額が格納されています。変数salvage
には、1995年に取得した資産の期末価額が格納されています。
次の文を実行すると、資産額と残存価額がレポートされ、DEPRSLによって各年の減価償却費が計算されます。ここでは、資産の有効期間として5年が指定されています。
REPORT assets salvage W 12 HEADING 'Depreciation' - DEPRSL(assets salvage 5 FULL year)
この文によって生成される出力は、次のとおりです。
YEAR ASSETS SALVAGE Depreciation -------------- ---------- ---------- ------------ Yr95 1,000.00 100.00 180.00 Yr96 0.00 0.00 180.00 Yr97 0.00 0.00 180.00 Yr98 0.00 0.00 180.00 Yr99 0.00 0.00 180.00 Yr00 0.00 0.00 0.00
例7-72 複数の期間に取得した資産のDEPRSLによる減価償却費の計算
DEPRSLを使用すると、一連の資産の減価償却費も計算できます。次のレポートに示す変数assets
およびsalvage
の1997年の値を変更するとします。
YEAR ASSETS SALVAGE -------------- ---------- ---------- Yr95 1,000.00 100.00 Yr96 0.00 0.00 Yr97 500.00 50.00 Yr98 0.00 0.00 Yr99 0.00 0.00 Yr00 0.00 0.00 Yr01 0.00 0.00 Yr02 0.00 0.00
ここで、assets
とsalvage
の1995年と1997年の値には、ゼロ以外の値が格納されています。
次の文を実行すると、資産価額と残存価額の他に、資産の減価償却費もレポートされます。DEPRSLをコールして減価償却費を計算する場合は、資産の有効期間として5期間(この場合は5年)が指定されています。
REPORT assets salvage W 12 HEADING 'Depreciation' - DEPRSL(assets salvage 5 FULL year)
この文によって生成されるレポートは、次のとおりです。
YEAR ASSETS SALVAGE Depreciation -------------- ---------- ------------- -------------------- Yr95 1,000.00 100.00 180.00 Yr96 0.00 0.00 180.00 Yr97 500.00 50.00 270.00 Yr98 0.00 0.00 270.00 Yr99 0.00 0.00 270.00 Yr00 0.00 0.00 90.00 Yr01 0.00 0.00 90.00 Yr02 0.00 0.00 0.00
1995年に取得した資産は、1999年に全額が償却されました。したがって、2000年と2001年にDEPRSLによって返される数字は、1997年にのみ取得した資産の減価償却費を含む数字となります。
DEPRSOYDファンクションは、一連の資産の減価償却費を計算するファンクションです。DEPRSOYDは、指定した資産の耐用年数に基づいて資産を級数法で減価償却します(「DEPRSOYDで使用される計算方法」を参照)。期首価額と期末価額は、各期間に取得した資産に対して指定します。
パラメータ
資産の期首価額が格納された数式。start-exp式は、時間ディメンションによってディメンション化する必要があります。start-expには、時間ディメンションの値ごとに、その期間に取得した資産の初期価額が格納されます。start-expには、時間ディメンションに加えて、非時間ディメンションもあります。
資産の期末価額が格納された数式。end-exp式は、start-expと同じディメンションでディメンション化する必要があります。end-expには、時間ディメンションの値ごとに、その期間に取得した資産の最終(または残存)価額が格納されます。start-expのそれぞれの値には、これに対応するend-exp値が必要です。たとえば、1995年に取得した資産の残存価額が$200であった場合、1995年のend-expの値は$200になります。
資産の減価償却の有効期間が格納されたINTEGER
式。n式には、start-expの任意の非時間ディメンションを格納できますが、時間ディメンションは格納できません。
DEPRSOYDが減価償却費を計算する際に、現行のステータス・リスト(つまり現在ステータスにあり、現行のステータスの順序に並んでいるディメンション値のみ)を使用することを指定します。デフォルトでは、デフォルトのステータス・リストが使用されます。
(デフォルト)ある期間の減価償却費全額を、資産の取得期間に計上することを指定します。一連の全資産に対する全額を計上します。
ある期間の減価償却費の半額を、資産の取得期間に計上することを指定します。一連の全資産に対する半額を計上します。取得した期間に計上される減価償却費の一部としてHALFを指定すると、各期間にHALF係数が適用されます。各期間の減価償却費総額の半分は次の期間にロールされ、後半の減価償却費は期間n + 1に償却されます。HALFは、ある期間の下半期に資産を取得した場合などに使用します。
一定の資産については全額を計上し、それ以外の資産については半額を計上する場合は、start-expの任意の非時間ディメンションによってディメンション化されるportion-exp式を指定できます。portion-exp式は、FULLまたはHALFの値を指定したテキスト式にする必要があります。
start-expやend-expがディメンション化される時間ディメンションの名前。時間ディメンションがDAY、WEEK、MONTH、QUARTER、YEAR型のいずれかである場合、time-dimension引数はオプションです。
使用上の注意
DEPRSOYDで使用される計算方法
DEPRSOYDでは、償却が全額は完了していない一連の全資産について、特定の期間の減価償却費が、その期間の減価償却費の合計として計算されます。ある資産の最初の減価償却期間とは、その資産を取得した期間を指します。
DEPRSOYDでは、資産の有効期間中の1期間ごとに、減価償却総額のうち特定の減価額を基準にすることによって減価償却費が計算されます。減価額とは、減価額と未償却期間の数とを乗算することにより、資産の有効期間全体にわたる減価償却費を全額完了できる金額のことです。
たとえば、資産の有効期間が5年の場合、減価額xは、DEPRSOYDによって次のように計算されます。
5x + 4x + 3x + 2x + 1x = total depreciation
この場合、減価額は減価償却費総額の1/15になります。初期の資産額が$1,000で、その残存価額が$100の場合、減価償却の総額は$900.00、xは$60($900/15)となります。最初の期間では、減価償却費は$300($60 x 5)となります。2番目の期間では、減価償却費は$240($60 x 4)となります(以降同様)。
DEPRSOYDとNA値
start-expの値がNA
で、これに対応するend-expの値がNA
でない場合は、エラーが発生します。同様に、end-expの値がNA
で、これに対応するstart-expの値がNA
でない場合もエラーが発生します。
start-expの値とこれに対応するend-expの値がどちらもNA
の場合、DEPRSOYDの動作はNASKIPオプションの影響を受けます。NASKIPの設定がYES
(デフォルト)の場合、DEPRSOYDでは、減価償却費の計算時に値が0とみなされます。NASKIPの設定がNO
の場合は、DEPRSOYDからの戻り値は、影響するすべての期間に対してNA
になります。
例
例7-73 単一期間に取得した資産のDEPRSOYDによる減価償却費の計算
この例では、DEPRSOYDを使用して、単一の期間に取得した資産の減価償却費を計算する方法を示します。
次の文を実行すると、assets
およびsalvage
という2つの変数が作成されます。
DEFINE assets DECIMAL <year> DEFINE salvage DECIMAL <year>
変数assets
およびsalvage
に対して、次の値を代入します。
YEAR ASSETS SALVAGE -------------- ---------- ---------- Yr95 1,000.00 100.00 Yr96 0.00 0.00 Yr97 0.00 0.00 Yr98 0.00 0.00 Yr99 0.00 0.00 Yr00 0.00 0.00
変数assets
には、1995年に取得した資産の期首価額が格納されています。変数salvage
には、1995年に取得した資産の期末価額が格納されています。
次の文を実行すると、assets
とsalvage
の値がレポートされ、DEPRSOYDによって各年の減価償却費が計算されます。ここでは、資産の有効期間として5年が指定されています。
REPORT assets salvage W 12 HEADING 'Depreciation' - DEPRSOYD(assets salvage 5 FULL year)
この文によって生成されるレポートは、次のとおりです。
YEAR ASSETS SALVAGE Depreciation -------------- ---------- ---------- ------------ Yr95 1,000.00 100.00 380.00 Yr96 0.00 0.00 240.00 Yr97 0.00 0.00 180.00 Yr98 0.00 0.00 120.00 Yr99 0.00 0.00 60.00 Yr00 0.00 0.00 0.00
例7-74 複数の期間に取得した資産のDEPRSOYDによる減価償却費の計算
DEPRSOYDを使用すると、一連の資産の減価償却費も計算できます。次のレポートに示す変数assets
およびsalvage
の1997年の値を変更するとします。
YEAR ASSETS SALVAGE -------------- ---------- ---------- Yr95 1,000.00 100.00 Yr96 0.00 0.00 Yr97 500.00 50.00 Yr98 0.00 0.00 Yr99 0.00 0.00 Yr00 0.00 0.00 Yr01 0.00 0.00 Yr02 0.00 0.00
ここで、assets
とsalvage
の1995年と1997年の値には、ゼロ以外の値が格納されています。
次の文を実行すると、資産価額と残存価額の他に、資産の減価償却費もレポートされます。DEPRSOYDをコールして減価償却費を計算する場合は、資産の有効期間として5期間(この場合は5年)が指定されています。
REPORT assets salvage W 12 HEADING 'Depreciation' - DEPRSOYD(assets salvage 5 FULL year)
この文によって生成される出力は、次のとおりです。
YEAR ASSETS SALVAGE Depreciation -------------- ---------- ---------- ------------ Yr95 1,000.00 100.00 300.00 Yr96 0.00 0.00 240.00 Yr97 500.00 50.00 330.00 Yr98 0.00 0.00 240.00 Yr99 0.00 0.00 160.00 Yr00 0.00 0.00 60.00 Yr01 0.00 0.00 30.00 Yr02 0.00 0.00 0.00
2番目の資産があるために、減価償却費は1997年に増加しています。減価償却費は、最初の資産の$180.00($60
x
3
)と2番目の資産の$150.00($30
x
5
)の合計になります。
ENDDATEファンクションは、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションでディメンション化された式に対し、式が非NA
値を持つディメンション・ステータスの最後の期間の最終日を返します。たとえば、式がMONTH型のディメンションでディメンション化され、式が非NA
値を持つ最後のディメンション値がDEC98
である場合、ENDDATEを実行すると、日付December
31,
1998
が返されます。
ENDOFファンクションは、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションでディメンション化された式に対し、そのディメンションの現行のステータス・リストでの先頭の期間の最終日を返します。
ENDOFが特に有用なのは、ディメンションにデフォルトとは異なるフェーズがある場合や、期間が数週間または数年間で構成されている場合です。たとえば、ディメンションの期間が4週間である場合、ENDOFファンクションを使用すると、特定の4週間という期間の最終日を特定できます。
パラメータ
DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンション。この型のディメンション間に独自のリレーションを明示的に定義している場合、ここでその時間リレーションの名前を使用できます。
例
例7-76 会計年度最終日の検索
次の文を実行すると、年のディメンション(7月に始まる税制年度用のtaxyear
というディメンション)が定義され、1998
年から2000
年までの税制年度のディメンション値が追加されて、各税制年度の最終日を示すレポートが生成されます。
DEFINE taxyear DIMENSION YEAR BEGINNING july VNF 'TY<ffb>' MAINTAIN taxyear ADD '01july98' '01july00' REPORT W 14 ENDOF(taxyear)
これらの文によって生成される出力は次のとおりです。
TAXYEAR ENDOF(TAXYEAR) -------------- -------------- TY98 30JUN99 TY99 30JUN00 TY00 30JUN01
EVERYファンクションは、ブール式のすべての値がTRUE
の場合にYES
を返し、ブール式のいずれかの値がFALSE
の場合にNO
を返すファンクションです。
パラメータ
評価の対象となる値を持つブール式。
内部動作が若干変更されます。このキーワードは、元のパフォーマンスが非常に遅い場合にのみ指定してください。
結果のディメンションの名前。または、boolean-expressionの1つのディメンションと結果のディメンションとする別のディメンションとの間のリレーションの名前。
デフォルトでは、EVERYはYES
値またはNO
値のどちらか1つを返します。結果のディメンションを1つ以上指定すると、EVERYでは、指定したディメンションに対してTRUE
値の有無がテストされ、値の配列が返されます。各ディメンションは、boolean-expressionのディメンションであるか、そのディメンションの1つと関連付けられている必要があります。
ヒント: 指定したディメンションがboolean-expressionの実際のディメンションではなくboolean-expressionのディメンションに関連付けられたディメンションであり、かつ2つのディメンション間のリレーションが複数ある場合は、ディメンション間のデフォルトのリレーションを使用して計算が行われます。(デフォルトのリレーションの詳細は、RELATIONコマンドを参照してください。)Oracle OLAPでこのデフォルトのリレーションを使用しない場合は、リレーションの名前を指定して、関連付けられたディメンションを指定します。 |
使用上の注意
EVERYでのNASKIPの影響
EVERYはNASKIPオプションの影響を受けます。NASKIPをYES
(デフォルト)に設定すると、EVERYでは、式のすべての非NA
がTRUE
の場合、NA
値は無視されてYES
が返され、TRUE
でない値がある場合は、NO
が返されます。NASKIPをNO
に設定すると、EVERYでは、式の値のいずれかがNA
値の場合、NA
値が返されます。式のすべての値がNA
の場合、NASKIPの設定にかかわらず、EVERYはNA
を返します。
例
例7-77 すべての値がTRUEかどうかの調査(地区別)
EVERYファンクションを使用して、各地区のスポーツウェアの販売実績が毎月$50,000を超えたかどうかを調査できます。地区でディメンション化された結果を得るためには、EVERYの2番目の引数としてdistrict
を指定します。
LIMIT product TO 'Sportswear' REPORT HEADING 'Top Sales' EVERY(sales GT 50000, district)
この文によって生成される出力は、次のとおりです。
DISTRICT Top Sales -------------- ---------- Boston No Atlanta Yes Chicago Yes Dallas Yes Denver Yes Seattle NO
例7-78 すべての値がTRUEかどうかの調査(地域別)
すべての地区のスポーツウェア販売実績が毎月$50,000を超える地域を調査する必要があるとします。region
ディメンションはdistrict
ディメンションに関連付けられているため、EVERYファンクションの結果のディメンションとして、district
のかわりにregion
を指定できます。
REPORT HEADING 'Top Sales' EVERY(sales GT 50000, region)
この文によって生成される出力は、次のとおりです。
REGION Top Sales -------------- ---------- East No Central Yes West NO
EXISTSファンクションは、アタッチされたワークスペース内でオブジェクトが定義されているかどうかを判別するファンクションです。EXISTSファンクションは、オブジェクトを使用する前にその定義が存在するかどうかをプログラムの内部で調べるときに役立ちます。
EXTBYTESファンクションは、テキスト式の一部を抽出します。
パラメータ
一部が抽出されるTEXT
式。text-expressionが複数行のTEXT
値である場合、改行はEXTBYTESの戻り値でも維持されます。
抽出を開始するバイト位置を表すINTEGER
。text-expressionの最初のバイト位置は1です。この引数を省略した場合、EXTBYTESは最初のバイトから開始します。
抽出するバイト数を表すINTEGER
。lengthを指定しない場合、またはtext-expressionのstartから最後までのバイト数を超える場合、text-expressionのstartから最後までが抽出されます。
EXTCHARSファンクションは、テキスト式の一部を抽出します。
ヒント: マルチバイト・キャラクタ・セットを使用している場合、EXTCHARSファンクションのかわりにEXTBYTESファンクションを使用できます。 |
パラメータ
一部が抽出されるTEXT
またはNTEXT
式。text-expressionが複数行のテキスト値である場合、改行はEXTCHARSの戻り値でも維持されます。
抽出を開始する文字位置を表すINTEGER
。text-expressionの最初の文字位置は1です。この引数を省略した場合、EXTCHARSは最初の文字から開始します。
抽出する文字数を表すINTEGER
。lengthを指定しない場合、またはtext-expressionのstartから最後までの文字数を超える場合、text-expressionのstartから最後までが抽出されます。
EXTCOLSファンクションは、複数行のテキスト値の各行から指定した列を抽出します。このファンクションは、抽出された列のみを含む複数行のテキスト値を返します。列は、複数行のテキスト値の各行における文字位置を示します。各行の最初の文字は列1であり、2番目の文字は列2です(以降同様)。
パラメータ
指定した列の抽出元のTEXT
またはNTEXT
式。text-expressionが複数行のテキスト値である場合、その各行から指定した列の文字が抽出されます。
抽出を開始する列位置を表すINTEGER
(1
から32767
)。text-expressionの各行における最初の文字の列位置は1
です。text expressionの特定の行にある最後の文字よりも右側にくる開始列を指定した場合、戻り値の対応する行は空です。
抽出する列数を表すINTEGER
。numcolsを指定しない場合、EXTCOLSは各行の最初の列から最後までのすべての文字を抽出します。text expressionの特定の行における開始位置に続く文字数を超える長さを指定した場合、戻り値の対応する行には存在する文字のみが含まれます。EXTCOLSは、欠落した列を埋めるための空白をその行の最後に返しません。
EXTRACTファンクションは、日時値または期間値の式から、指定した日時の値を抽出して返します。このファンクションは、非常に大きな変数内の日時値を操作するときに利用すると便利です。
戻り値
戻り値は次のように場合によって異なります。
タイムゾーン値を持つ日時から抽出する場合は、UTC形式の値が返されます。
TIMEZONE_REGIONまたはTIMEZONE_ABBR(省略形)を抽出する場合は、適切なタイムゾーン名または省略形であるテキスト文字列が返されます。
その他の値を抽出する場合は、グレゴリオ暦の値が返されます。
指定した値にあいまいさがある場合は、NAが返されます。
パラメータ
YEAR、MONTH、DAY、HOUR、MINUTEまたはSECONDのいずれかのキーワードを使用して、ファンクションによって返される時刻要素を指定します。
TIMEZONE_HOURまたはTIMEZONE_MINUTEのいずれかのキーワードを使用して、TIMESTAMP_TZ
式の時間または分の部分が返されるように指定します。
TIMEZONE_REGIONまたはTIMEZONE_ABBRのいずれかのキーワードを使用して、地域名またはその省略形のいずれかの文字列が返されるように指定します。
DATETIME
、TIMESTAMP
、TIMESTAMP_TZ
またはTIMESTAMP_LTZ
式。これらの式の指定方法は、「日時式」を参照してください。
DSINTERVAL
またはYMINTERVAL
式。これらの式の指定方法は、「期間式」を参照してください。
FCOPENファンクションは、予測コンテキストを作成してそのコンテキストへのハンドルを返します。
FCOPENファンクションは、「予測プログラム」に示すように他のOLAP DML文と組み合せて使用する必要があります。
パラメータ
予測コンテキストの名前。
FCOPENファンクションを使用して前に作成した異なる予測コンテキストへのハンドルであるINTEGER式。Oracle OLAPは、このパラメータで指定される予測コンテキストと同じオプションで新しい予測コンテキストを初期化します。(予測コンテキストの特性を指定するオプションの説明は、FCSETコマンドを参照してください。)
FCQUERYファンクションは、FCEXECコマンドの実行によって作成された予測の結果を問い合せます。
FCQUERYファンクションは、「予測プログラム」に示すように他のOLAP DML文と組み合せて使用する必要があります。
パラメータ
HANDLELISTキーワードを指定すると、FCQUERYファンクションは、現在開かれている予測コンテキストへのハンドルのリストである複数行のテキスト式を返します。
これから問い合せる予測コンテキスト、およびFCOPENファンクションを使用して前に開いた予測コンテキストへのハンドルであるINTEGER式。
取得する次のような特定の情報。
予測全体に指定されているオプションに関する情報を取得する場合、TRIALキーワードは使用しません。この場合のoptionは、FCSETコマンドを使用して指定可能なオプション、および表7-7「予測全体に指定可能なオプション」に示すオプションです。
特定の試行に関する情報を取得する場合、TRIAL trial-num句を使用します。この場合のoptionは、表7-8「個別の試行に指定可能なオプション」に示すオプションです。
オプション | 戻り値 | 説明 |
---|---|---|
ALLOCLAST |
BOOLEAN |
過調整の可能性を最後のサイクルの予測ではなく割当てによって削減するかどうかを示す。 |
ALPHA |
DOUBLE |
予測の試行に対するアルファの値。アルファは、単純指数平滑法、二重指数平滑法およびHolt-Winters予測法に使用されるレベルまたはベースラインのパラメータ。 |
BETA |
DOUBLE |
予測の試行に対するベータの値。ベータは傾向の予測を制御する傾向パラメータ。ベータは二重指数平滑法およびHolt-Winters予測法に使用される。 |
COMPSMOOTH |
BOOLEAN |
中央値平滑データ系列に対して最適化を行うかどうかを示す。 |
CYCDECAY |
DOUBLE |
予測の試行に対する周期減衰パラメータの値。周期減衰は、Oracle OLAPが線形回帰および非線形回帰を行う際にベースライン・アクティビティからのずれをどこまで考慮するかに関係する。 |
GAMMA |
DOUBLE |
予測の試行に対するガンマの値。ガンマはHolt-Winters予測法に使用される季節パラメータ。 |
HISTUSED |
INTEGER |
先行するすべての |
MAD |
DOUBLE |
予測の試行に対する平均絶対偏差(MAD)。 |
MAPE |
DOUBLE |
予測の試行に対する平均誤差率(MAPE)。 |
MAXFCFACTOR |
DECIMAL |
予測データの上限。 |
METHOD |
TEXT |
予測の試行に対してOracle OLAPが使用した予測法。各種の方法の説明は、FCSETコマンドのMETHODオプションを参照。 |
MINFCFACTOR |
DECIMAL |
予測データの下限。 |
MPTDECAY |
DOUBLE |
予測の試行に対する移動周期的合計(MPT)系列の予測の解読の際に使用されたベース値の評価の減衰を調整したときにOracle OLAPが使用したパラメータの値。 |
NCYCLES |
INTEGER |
FCSETのPERIODICITY引数を使用して指定されるサイクルの数。 |
PERIODICITY |
INTEGER |
1つ以上のサイクルの期間における長さ。戻り値は、次のようにFCQUERYファンクションをコールする方法によって異なる。 CYCLE引数を指定した場合、PERIODICITYは指定したサイクルの期間の数を返す。 CYCLE引数を指定せず、FCSET ALLOCLASTが CYCLE引数を指定せず、FCSET ALLOCLASTが |
RMSE |
DOUBLE |
予測の試行に対するルート平均2乗誤差(RMSE)。 |
SMOOTHING |
BOOLEAN |
予測の試行に対してOracle OLAPがデータを平滑化したかどうかを示す。 |
TRANSFORM |
TEXT |
予測の試行に対してOracle OLAPが使用したデータ・フィルタ。各種のフィルタの説明は、FCSETコマンドのTRANSFORMオプションを参照。 |
TRENDHOLD |
DOUBLE |
予測の試行に対する傾向保持パラメータの値。傾向保持パラメータは、二重指数平滑法およびHolt-Winters予測法における傾向の信頼性を示す。 |
情報を取得する試行の番号であるINTEGER式。
PERIODICITYオプションから情報を取得するサイクルを指定するINTEGER式(表7-8「個別の試行に指定可能なオプション」を参照)。FCSETコマンドでPERIODICITY引数を使用して一連のサイクルを指定した場合、cycle-numの値は指定した一連のサイクルでの目的のサイクルの位置を示します。たとえば、FCSET PERIODICITY <52,7>
を指定したとします。この場合、1のcycle-numは52を返し、2のcycle-numは7を返します。FCSETコマンドでPERIODICITY引数を使用して一連のサイクルを指定しなかった場合、この引数を指定する必要はありません。
使用上の注意
オプションの使用方法
予測全体に指定されているオプションに関する情報または特定の試行に関する情報を取得できます。
予測全体に指定されているオプションに関する情報を取得する場合、TRIALキーワードは使用しません。この場合のoptionは、HANDLEID、TRIALSRUN、またはFCSETコマンドを使用して指定できるオプションです。
特定の試行に関する情報を取得する場合、TRIAL trial-num句を使用します。この場合のoptionは、ALPHA、BETA、CYCDECAY、GAMMA、MAD、MAPE、METHOD、MPTDECAY、RMSE、SMOOTHING、TRANSFORMまたはTRENDHOLDです。
ディメンション化されたデータへのアクセス
FCEXECコマンドを実行するときに複数の時系列がステータスにある場合、TRIALSRUNおよびNTRIALのディメンション化されたデータも時系列式のディメンションによってディメンション化されます。Oracle OLAPはFCQUERYファンクションによって返される値をスカラー式として扱いますが、次の方法でそのディメンション化されたデータにアクセスできます。
FORループで、FCQUERYはFORディメンションの現行値に対するデータを返します。
QUALファンクションで、FCQUERYは修飾ディメンションの指定値に対するデータを返します。
その他のすべての場合で、FCQUERYは各ディメンションのステータスにある最初の値に対するデータを返します。
例
例7-87 予測の問合せ
例9-119「予測プログラム」に示すautofcst
プログラムは、queryall
という名前のプログラムをコールします。queryall
プログラムは、次のコードを使用して予測の試行の特性を取得します。
DEFINE queryall PROGRAM PROGRAM VARIABLE numtrials INTEGER VARIABLE loopindx INTEGER numtrials = FCQUERY(hndl trialsrun) row numtrials 'TRIALS' loopindx = 1 WHILE loopindx LE numtrials DO ROW loopindx 'METHOD' FCQUERY(hndl method trial loopindx) ROW loopindx 'TRANSFORM' FCQUERY(hndl transform trial loopindx) ROW loopindx 'SMOOTHING' FCQUERY(hndl smoothing trial loopindx) ROW loopindx 'ALPHA' FCQUERY(hndl alpha trial loopindx) ROW loopindx 'BETA' FCQUERY(hndl beta trial loopindx) ROW loopindx 'GAMMA' FCQUERY(hndl gamma trial loopindx) ROW loopindx 'TRENDHOLD' FCQUERY(hndl trendhold trial loopindx) ROW loopindx 'CYCDECAY' FCQUERY(hndl cycdecay trial loopindx) row loopindx 'MPTDECAY' FCQUERY(hndl mptdecay trial loopindx) ROW loopindx 'MAD' FCQUERY(hndl mad trial loopindx) ROW loopindx 'MAPE' FCQUERY(hndl mape trial loopindx) ROW loopindx 'RMSE' FCQUERY(hndl rmse trial loopindx) loopindx = loopindx + 1 DOEND END
QUERYALLプログラムの出力から作成されたサンプル・レポートは、次のとおりです。
3 TRIALS 1 METHOD HOLT/WINTERS 1 TRANSFORM TRNOSEA 1 SMOOTHING NO 1 ALPHA 0.2 1 BETA 0.3 1 GAMMA 0.3 1 TRENDHOLD 0.8 1 CYCDECAY -1 1 MPTDECAY -1 1 MAD 324.97047 1 MAPE 23.6192147 1 RMSE 389.40202 2 METHOD HOLT/WINTERS 2 TRANSFORM TRNOSEA 2 SMOOTHING NO 2 ALPHA 0.2 2 BETA 0.3 2 GAMMA 0.2 2 TRENDHOLD 0.8 2 CYCDECAY -1 2 MPTDECAY -1 2 MAD 324.97047 2 MAPE 23.6192147 2 RMSE 389.40202 3 METHOD HOLT/WINTERS 3 TRANSFORM TRNOSEA 3 SMOOTHING NO 3 ALPHA 0.2 3 BETA 0.3 3 GAMMA 0.1 3 TRENDHOLD 0.8 3 CYCDECAY -1 3 MPTDECAY -1 3 MAD 324.97047 3 MAPE 23.6192147 3 RMSE 389.40202
FILEERRORファンクションは、データ読取り文FILEREADおよびFILEVIEWを使用した入力ファイルからのレコードの処理時に発生した最初のエラーに関する情報を返します。これによって、発生したエラーのタイプとOracle OLAPが読み取ろうとしていたレコードの位置がわかります。引数として指定するキーワードによって、返される情報の種類が決まります。
FILEERRORをコールしてエラーのタイプを確認します。次に、再びFILEERRORをコールしてエラーの原因に関する詳細を取得します。エラーのタイプに関する戻り値は、FILEERRORのキーワードでもあります。FILEERRORがNA
以外の値を返した場合、2回目はその戻り値を引数としてFILEERRORをコールします。
FILEERRORの省略形はFILEERRです。
パラメータ
発生したエラーのタイプを指定するテキスト式を返します。エラーのタイプとその意味を、表7-9「FILEERRORによって返されるエラーのタイプ」に示します。
表7-9 FILEERRORによって返されるエラーのタイプ
戻り値 | 意味 |
---|---|
DIMENSION |
データ読取り文がディメンションのステータスを設定(暗黙的または明示的なMATCH属性による)しようとしましたが、指定された位置または値が存在しませんでした。 |
NA |
現行レコードの処理でエラーは発生しませんでした。 |
POSITION |
データ読取りプログラムがレコードの無効な位置から読み取ろうとしました。フィールドまたは列がレコードの先頭より前にある場合、またはフィールドがレコードの末尾を超えて拡張される場合、POSITIONエラーが発生することがあります。レコードの末尾を超えるエラーは、バイナリ・データまたはパック・データの場合にのみ発生し、シンボリック(テキスト)データの場合、データ読取り文によって短いレコードが空白文字で埋められます。 |
VALUE |
値を、要求されたデータ型に変換できませんでした。パック・データの場合、レコードに無効な16進数がありました。 |
WIDTH |
データ読取り文が無効なフィールド幅を指定しました。無効な幅は、次のようにデータの形式(シンボリック、パックまたはバイナリ)によって異なります。
バイナリ形式の場合、幅に関する要件はデータが |
エラーが発生したときの列番号(ルール化レコード)またはフィールド番号(構造化レコード)であるINTEGERを返します。
現行フィールド幅であるINTEGERを返します。幅としてNA
が指定されていた場合、またはエラーがPOSITIONエラーだった場合、NA
が返されます。POSITIONエラーでは、幅が評価される前に処理が停止されます。
エラー・タイプがVALUEである場合、変換されなかった値であるテキスト式を返します。パック・データの場合、無効な値が16進エスケープとして示されます。エラー・タイプがDIMENSIONである場合、既存のディメンション値と一致しなかった値を返します。他のエラー・タイプの場合、NA
を返します。
エラー・タイプがDIMENSIONだった場合、一致するディメンション値がなかったディメンションの名前であるテキスト式を返します。他のエラー・タイプの場合、NA
を返します。
使用上の注意
制御のフロー
FILEREADまたはFILEVIEWでエラーが発生すると、現行レコードの処理が停止され、該当するエラー・メッセージが表示されます。次に、プログラムにトラップ・ラベルがある場合、問題を調査するためにFILEERRORをコールするラベルに制御が分岐します。FILEREADまたはFILENEXTファンクションに分岐して戻ると、次のレコードの処理が続行されます。そのレコードにさらにエラーがある場合、それらのエラーは評価されません。
現行の出力ファイルでのエラー・メッセージの表示
現行の出力ファイルにエラー・メッセージが表示されるようにするには、データ読取りプログラムでECHOPROMPTをYES
に設定します。FILEREADまたはFILEVIEWでエラーが発生した場合、エラー・メッセージの後にFILEERRORによる評価が行われます。
例
例7-88 TRAPによるエラー処理
この例では、トラップ・ラベル(ERROR:)のサンプルとそれに続くエラー処理コードを示します。(エラー・トラッピングおよびトラップ・ラベルについては、TRAPコマンドを参照。)このコードは、ファイルが開かれているかどうかをチェックします。開かれている場合、分岐の原因になったエラーがデータ読取りエラーであるかどうかをチェックします。その場合、プログラムはSHOWコマンドでFILEERRORをコールしてエラーに関する情報を表示します。ここには示されていないプログラムの本体には、ファイルを開いてファイル・ユニット番号を変数fil.unit
に割り当てるコードが含まれます。ERRTYPEはプログラムの先頭で宣言されているローカル変数です。
error: IF fil.unit EQ NA THEN DO POPLEVEL 'save' RETURN DOEND IF ERRORNAME NE 'attn' THEN DO ERRTYPE = FILEERROR(TYPE) IF ERRTYPE NE NA THEN SHOW JOINCHARS('Error in record ' RECNO(fil.unit) - ' in column ' FILEERROR(POSITION) ': ' - ERRTYPE ' ' FILEERROR(&ERRTYPE)) TRAP ON ERROR GOTO NEXT DOEND FILECLOSE fil.unit POPLEVEL 'save' RETURN
FILEGETファンクションは、読取り用に開かれているバイナリ以外のファイルのテキストを返します。FILEGETがそのファイルの末尾に達すると、NA
を返します。FILEGETで読み取られるすべてのテキストは、データベース・キャラクタ・セットに変換されます。FILEGETは、データベース・キャラクタ・セットで表せないデータを読み取ることはできません。
パラメータ
FILEOPENファンクションを事前にコールすることによって読取り用に開かれたファイルに割り当てられるINTEGER値。
FILEGETがファイルから返すバイト数を指定するINTEGER式。入力ファイルで行端文字に達すると、FILEGETは作成中の結果でそのまま新しい行を開始します。LENGTHを省略した場合、FILEGETは、含まれるバイト数にかかわらず1行または1レコードを読み取ります。
使用上の注意
読み取られるバイト数と返されるバイト数の違い
LENGTHで指定する値は、FILEGETファンクションが読み取るバイト数ではなく、返すバイト数を参照します。これらの値は、異なる値になる場合があります。たとえば、読取り対象のファイルにタブ文字が含まれている場合、FILEGETが返すバイト数にはタブ拡張のバイト数も含まれるため(存在する場合)、FILEGETが返すバイト数は、FILEGETが読み取ったバイト数よりも大きくなります。
例
例7-89 ファイルを読み取るプログラム
引数としてファイル名を取るreadfile
という名前のプログラムがあるとします。このプログラムは、ファイルを開いてファイルの各行を読み取り、それをwholetext
という名前の複数行のテキスト変数に追加し、ファイルを閉じます。readfile
はローカル変数を使用して、ファイル・ユニット番号、および読み取られるとおりにファイルの各行を格納します。
DEFINE wholetext VARIABLE TEXT LD Multiline text variable DEFINE readfile PROGRAM LD Program to store data from a file in a multiline text variable PROGRAM VARIABLE fil.unit INTEGER "Local Var To Store File Unit VARIABLE fil.text TEXT "Local Var To Store Single Lines FIL.UNIT = FILEOPEN(ARG(1) READ) FIL.TEXT = FILEGET(fil.unit) "Read The First Line WHILE fil.text NE NA "Test For End-of-file DO wholetext = JOINLINES(wholetext, fil.text) fil.text = FILEGET(fil.unit) "Read The Next Line DOEND FILECLOSE fil.unit END
FILENEXTファンクションは、レコードをFILEVIEWコマンドによって処理できるようにします。レコードを読み取れた場合にYES
を返し、ファイルの末尾に達した場合にNO
を返します。
使用上の注意
ファイルの開閉
FILENEXTでファイルからレコードを取得するには、まずFILEOPENファンクションを使用してファイルを読取り用(READモード)として開きます。終了したらFILECLOSE文でファイルを閉じます。
データの処理
FILENEXTでレコードを読み取った後、FILEVIEW文を使用してレコードを処理します。FILEVIEWは、入力データを処理し、それを各フィールドの説明に従ってアナリティック・ワークスペース・オブジェクトまたはローカル変数に割り当てます。FILEVIEWは、同じレコードを連続処理するために複数回コールできます。別のレコードを処理するには、FILENEXTを再びコールします。
自動ループ
すべてのレコードが基本的に同じ方法で処理される場合、FILEREADコマンドを使用すると、ファイルのレコードが自動的にループされるので便利です。
レコードの書込み
選択したレコードの出力ファイルへの書込みについては、FILEPUTコマンドを参照してください。
レコード数
RECNOファンクションを使用すると、読取り専用アクセスで開かれているファイルの現行レコード数を取得できます。
バイナリ・ファイルおよびテキスト・ファイルの読取り
ファイルを開くときにBINARYを指定しなかった場合、FILENEXTは次の改行文字を含めてそこまでデータを読み取ります。ファイルを開くときにBINARYを指定した場合、FILENEXTファンクションを使用する前に、FILESETを使用してLSIZEを適切なレコード長に設定する必要があります。その後、FILENEXTはデータを一度に1レコードずつ読み取ります。
例
例7-90 FILENEXTを使用するプログラム
レコードが次のようにレイアウトされているファイルの月間販売データを受け取るとします。
Column Width Format Data
1 1 Text Division code
2 10 Text District name
12 10 Text Product name
30 4 Packed binary Sales in dollars
34 4 Packed binary Sales in units
コードがAである部門に関してのみレコードを処理します。次のプログラムの抜粋は、ファイルを開き、ファイルの各行を読み取って部門Aのデータであるかどうかを判別し、部門Aのデータである場合に販売データを読み取った後、ファイルを閉じます。ファイル名は、プログラム名の後のステートメント行で引数として指定します。
VARIABLE fil.unit INTEGER . . . fil.unit = FILEOPEN(arg(1) READ) LIMIT month TO &arg(2) WHILE FILENEXT(fil.unit) DO FILEVIEW fil.unit WIDTH 1 rectype IF rectype EQ 'A' THEN FILEVIEW fil.unit COLUMN 2 WIDTH 10 district - WIDTH 10 product - COLUMN 30 WIDTH 4 BINARY sales - WIDTH 4 BINARY UNITS DOEND FILECLOSE fil.unit
FILEOPENファンクションは、ファイルを開き、それにファイル・ユニット番号(不定のINTEGER
)を割り当て、その番号を返します。その後でそのファイルを参照する場合、ファイル名ではなくこのファイル・ユニット番号を使用します。Oracle OLAPがファイルを開くことができない場合、エラーが発生します。
パラメータ
開くファイルの名前を指定するテキスト式。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。
注意: ディレクトリ・オブジェクトはデータベースで定義され、ディレクトリおよびディレクトリ内のファイルへのアクセスを制御します。CDA文を使用して、カレント・ディレクトリ・オブジェクトを特定および指定できます。使用するデータベース・ユーザー名で読取りおよび書込み可能なファイルがあるディレクトリ・オブジェクトへのアクセス権については、Oracle DBAに問い合せてください。 |
(省略形はR)読取り用としてファイルを開きます。
(省略形はW)書込み用としてファイルを開きます。ファイル・アクセスはファイルの先頭から開始されます。したがって、既存のファイルをWRITEモードで開くと、ファイルにデータが書き込まれる前にそのすべての内容が消去されます。
書込み用としてファイルを開きます。ファイル・アクセスはファイルの末尾から開始され、既存の内容にデータが追加されます。
バイナリ形式のファイル(パック・データまたはバイナリ・データのファイル)を開きます。BINARYを指定すると、Oracle OLAPはファイル内のすべての文字をデータとして認識します。レコードの終端の指定に改行文字を使用しない場合、固定長のレコードとみなされ、レコード長はFILESET(...LSIZE)で設定できます。デフォルトのレコード長は80です。
file-nameによって指定されるファイルからデータを読み取る際にOracle OLAPが使用するキャラクタ・セットを指定します。この引数を省略すると、Oracle OLAPでは、ファイルのデータは、NLS_LANGオプションに記録されているデータベース・キャラクタ・セットを持つものとして処理されます。
FILEQUERYファンクションは、ファイルに関する情報を返します。FILEQUERYファンクション・コールに指定する属性引数によって、返される情報の種類が決まります。
パラメータ
ファイル・ユニット番号またはファイル名。
ファイル・ユニット番号は、FILEOPENファンクションを事前にコールすることによって開かれたファイル、またはOUTFILEコマンドによって開かれたファイルに割り当てられる番号です。FILEOPENファンクションの戻り値またはOUTFILEUNITオプションの値を使用できます。
ファイル名は、移動または名前を変更するファイルの名前を指定するテキスト式です。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。
注意: ディレクトリ・オブジェクトはデータベースで定義され、ディレクトリおよびディレクトリ内のファイルへのアクセスを制御します。CDA文を使用して、カレント・ディレクトリ・オブジェクトを特定および指定できます。使用するデータベース・ユーザー名で読取りおよび書込み可能なファイルがあるディレクトリ・オブジェクトへのアクセス権については、Oracle DBAに問い合せてください。 |
ファイル・ユニット番号を指定する必要がある属性と、ファイル名が必要な属性があります。どちらを指定しても構わない属性もあります。詳細は、表7-10「FILEQUERYによって返されるファイル属性」を参照してください。
ファイルに関して取得する情報の種類を指定します。FILEQUERYの戻り値のデータ型は、指定する属性によって異なります。指定する属性はファイルに対応する必要があり、対応しない場合はエラーが発生します。表7-10「FILEQUERYによって返されるファイル属性」に、attrib-argに有効なキーワードをリストし、各キーワードを説明し、file-id引数にファイル名のファイル・ユニット番号を指定するかどうかを示します。
表7-10 FILEQUERYによって返されるファイル属性
キーワード | 戻り値 | 戻り値のデータ型 | file-idパラメータ |
---|---|---|---|
APPEND |
ファイルが最後に書込み用で開かれている場合は |
|
ファイル・ユニット番号 |
BMARGIN |
下マージンになる空白行の数。 |
|
ファイル・ユニット番号 |
CHANGED |
ファイルのアーカイブ・ビットが設定されている場合は |
|
ファイル・ユニット番号またはファイル名 |
EOF |
ファイルの末尾に達した場合は |
|
ファイル・ユニット番号 |
EXISTS |
ファイルが存在する場合は |
|
ファイル・ユニット番号またはファイル名 |
FILENAME |
ファイル・ユニットに関連付けられたファイル名。 |
|
ファイル・ユニット番号 |
LINENUM |
現行の行数。PAGINGがオンの場合は改ページのたびにリセットされ、PAGINGがオフの場合は増え続ける。ファイルが現在READモードで開かれている場合、現行レコード数を返す。 |
|
ファイル・ユニット番号 |
LINESLEFT |
ページの残りの行数。 |
|
ファイル・ユニット番号 |
LSIZE |
書込み用に開かれているファイルの場合、標準のOracle OLAPページ・ヘッダーの行の長さ。(STDHDRプログラムを参照。)読取り用に開かれているファイル・ユニットの場合、バイナリ入力ファイルのレコード長を示す。 |
|
ファイル・ユニット番号 |
NLS_CHARSET |
ファイル・ユニットに使用されているキャラクタ・セット。詳細は、FILEOPENファンクションを参照。 |
|
ファイル・ユニット番号 |
NUMBYTES |
ファイルのサイズ(バイト単位)。 |
|
ファイル・ユニット番号またはファイル名 |
ORIGIN |
作成されたファイルがあるコンピュータのタイプ。ORIGIN属性が関連するのは読取り用に開かれたファイルのみで、FILESET文を発行するときに設定される。 |
|
ファイル・ユニット番号 |
PAGENUM |
現行のページ数。「ページング属性」を参照。 |
|
ファイル・ユニット番号 |
PAGEPRG |
出力がページングされる際にヘッダーを生成するOracle OLAPプログラムまたは文。「ページング属性」を参照。 |
|
ファイル・ユニット番号 |
PAGESIZE |
各ページの行数。「ページング属性」を参照。 |
|
ファイル・ユニット番号 |
PAGING |
出力がページで書式化される場合は |
|
ファイル・ユニット番号 |
PAUSEATPAGEEND |
各ページの終わりでOracle OLAPが一時停止する場合は |
|
ファイル・ユニット番号 |
R[EAD] |
読取り用にファイルが開かれている場合は |
|
ファイル・ユニット番号 |
RO |
ファイルの読取り専用属性が設定されている場合は |
|
ファイル・ユニット番号またはファイル名 |
TABEXPAND |
ファイルがFILEGETまたはFILEREADによって読み取られるときにタブ文字が拡張される場合は |
|
ファイル・ユニット番号またはファイル名 |
TMARGIN |
上部余白になる空白行の数。 |
|
ファイル・ユニット番号 |
UNIT |
指定されたファイル名のファイル・ユニット。 |
|
ファイル名 |
W[RITE] |
書込み用にファイルが開かれている場合は |
|
ファイル・ユニット番号 |
使用上の注意
タブの処理
ソース・ファイルのタブ文字がFILEGETまたはFILEREADによって読み取られるときに拡張されるようにするには、FILESETコマンドでTABEXPAND属性を指定できます。TABEXPANDがゼロの場合、タブ文字は拡張されません。0より大きい値は、タブ間の距離のバイト数を示します。TABEXPANDのデフォルト値は8です。
ページング属性
ページング属性は、特に指定のないかぎり、PAGINGがYES
に設定されていて、WRITEモードで現在開かれているファイル(FILEOPEN(...WRITE)やFILEOPEN(...APPEND)で開かれたファイルなど)にのみ適用されます。FILESETコマンドによって任意のページング属性を設定できます。
ワイルド・カード文字
(UNIXのみ)UNIXファイル名の問合せにおいて、EXISTS属性引数による検索でワイルドカード文字(* ?
)を使用できます。
例
例7-93 書込み用に開かれたファイルのページング・オプションの設定
次の各文は、書込み用に開かれたファイルに対してページング・オプションがどのように設定されているかを表示します。
DEFINE fil.unit INTEGER fil.unit = FILEOPEN('REPORT' WRITE)
次の文
SHOW FILEQUERY(fil.unit PAGING)
によって、次の出力が生成されます。
YES
次の文
SHOW FILEQUERY(fil.unit PAGESIZE)
によって、次の出力が生成されます。
66
次の文
SHOW FILEQUERY(fil.unit TMARGIN)
によって、次の出力が生成されます。
5
次の文はファイルを閉じます。
FILECLOSE fil.unit
FILTERLINESファンクションは、作成したフィルタ式を複数行のテキスト式の各行に適用します。
戻り値
TEXTまたはNTEXT
このファンクションでは、TEXT値とNTEXT値を引数として使用できます。戻り値のデータ型は、引数として指定する値のデータ型によって次のように異なります。
すべての引数がTEXT値である場合、戻り値はTEXTです。
すべての引数がNTEXT値である場合、戻り値はNTEXTです。
引数にTEXTとNTEXTの両方の値が存在する場合は、すべてのTEXT値がNTEXT値に変換されてからファンクションの演算が実行され、戻り値はNTEXTになります。
パラメータ
filter-expressionに従って各行が変更される複数行のテキスト式。
source-expressionの各行に対してフィルタとして適用される式。フィルタ式の語は、ソース式の各行に対してFILTERLINESが実行する処理を指定します。
フィルタ式によってNA
が生成されることがありますが、これはソース式の現行の行に対応する行が結果のテキスト式にないことを示します。
フィルタ式にVALUEキーワードを使用して、ソース式の現行の行を表すことができます。
使用上の注意
FILTERLINESの結果
FILTERLINESは、ソース式の各行に対するフィルタ式のアクションの結果である行で構成されるテキスト式を返します。フィルタ式は、入力ソース行のいずれかまたはすべてに対する複数行のテキストを返すことがあります。これらの行はフィルタ式によって再度処理されません。
例
例7-94 ファイル名からの拡張子の削除
次の例は、ファイル名のリストに対してFILTERLINESを使用して、拡張子のない同じファイル名のリストを生成します。
評価されるfilelist
という名前の複数行のテキスト変数は、次のとおりです。
myfile1.txt file2.txt myfile3 file4.txt
次の文の場合、
SHOW FILTERLINES(FILELIST - IF FINDCHARS(VALUE '.') GT 0 - THEN EXTCHARS(VALUE 1 FINDCHARS(VALUE '.') -1) - ELSE VALUE)
によって、次の出力が生成されます。
myfile1 file2 myfile3 file4
FINDBYTESファンクションは、テキスト式内のバイトにおける、指定したグループの先頭のバイト位置を返します。
ヒント: シングルバイト・キャラクタ・セットを使用している場合、FINDBYTESファンクションのかわりにFINDCHARSファンクションを使用できます。 |
パラメータ
指定するバイトの検索元のTEXT
式。text-expressionの値は複数行も可能です。その場合、FINDBYTESは指定するバイトをすべての行で検索します。大文字および小文字の区別も含めて完全一致する必要があります。
ヒント: NTEXT値に対してこのファンクションを使用する必要がある場合、CONVERTまたはTO_CHARファンクションを使用してNTEXT値をTEXTに変換します。 |
検索対象のバイトのグループ。bytesが複数行の値である場合、FINDBYTESは最初の行以外をすべて無視します。
text-expressionでbytesが見つからない場合、FINDBYTESはゼロを返します。バイトのグループが複数回出現する場合、FINDBYTESは最初に出現する位置を返します。
text-expressionで検索を開始するバイト位置を指定するINTEGER式。デフォルトはtext-expressionの位置1(最初のバイト)です。
指定したテキストの先頭のバイト位置ではなく行数をFINDBYTESが返すことを指定します。
FINDCHARSファンクションは、テキスト式内の文字における、指定したグループの先頭の文字位置を返します。
ヒント: マルチバイト・キャラクタ・セットを使用している場合、FINDCHARSファンクションのかわりにFINDBYTESファンクションを使用できます。 |
パラメータ
指定する文字の検索元のテキスト式。text-expressionは複数行の値も可能です。その場合、FINDCHARSは指定した文字をすべての行で検索します。大文字および小文字の区別も含めて完全一致する必要があります。
FINDCHARSでは、引数としてTEXT値およびNTEXT値を使用できます。1つの引数のみがNTEXTである場合、FINDCHARSはファンクション操作を実行する前に、他の引数をNTEXTに自動的に変換します。
検索対象の文字のグループ。charactersが複数行の値である場合、FINDCHARSは最初の行以外をすべて無視します。
text-expressionでcharactersが見つからない場合、FINDCHARSはゼロを返します。文字のグループが複数回出現する場合、FINDCHARSは最初に出現する位置を返します。
text-expで検索を開始する文字位置を指定するINTEGER式。デフォルトはtext-expの位置1(最初の文字)です。
指定したテキストの先頭の文字位置ではなく行数をFINDCHARSが返すことを指定します。
FINDLINESファンクションは、複数行のテキスト式における1行以上の位置を判別します。
パラメータ
テキスト式の値内で、特定の行または行のグループの位置を特定します。FINDLINESは指定する行をtext-expressionで検索します。大文字および小文字の区別も含めて完全一致する必要があります。また、複数行を指定した場合、FINDLINESでは、指定したすべての行がtext-expression内の単一の連続ブロックとして検索されます。すべての行がtext-expressionで出現するが、連続ブロックではない場合、FINDLINESは見つからないものとして0(ゼロ)を返します。
FINDLINESでは、引数としてTEXT値およびNTEXT値を使用できます。1つの引数のみがNTEXTである場合、FINDLINESはファンクション操作を実行する前に、他の引数をNTEXTに自動的に変換します。
text-expressionの値がNA
である場合、FINDLINESはNA
を返すことに注意してください。
検索する行を指定するテキスト式。text-expressionでlinesが見つからない場合、FINDLINESは0を返します。linesが複数回出現する場合、FINDLINESは最初に出現する行数を返します。
例
例7-97 連続した2行の検索
この例は、newlist
というTEXT変数の複数行の値における2行「products」と「services」の位置を検索する方法を示します。newlist
変数の値は、次のとおりです。
salespeople products services regions priorities
次のFINDLINESファンクション・コールに対するlines引数の文字「\n
」は、「product」と「services」が別の行であることを示す改行を表します。
SHOW FINDLINES(newlist, 'products\nservices')
この文の結果は次のとおりです。
2
FINTSCHEDファンクションは、指定の期間数で完済する一連の固定金利分割払い融資に関する返済額の金利部分を計算します。期間ごとに、その期間に受けた融資額および返済期間にわたって融資に適用される単一の金利を指定します。
FINTSCHEDは、所定期間の結果を、その期間で受けた各融資または未払いの各融資に対する金利支払い額の合計として計算します。
戻り値
DECIMAL
FINTSCHEDファンクションによって返される結果は、loans, rates, nのすべてのディメンションおよびtime-dimension引数として使用されるディメンションの結合によってディメンション化されます。
パラメータ
初期融資額を含む数式。loansに時間ディメンションがない場合、またはloansが複数の時間ディメンションによってディメンション化されている場合、time-dimension引数が必要です。
loansに対する金利を含む数式。ratesがディメンション化された変数の場合、この変数は、異なる時間ディメンションなどの任意のディメンションによってディメンション化できます。ratesが時間ディメンションによってディメンション化される場合、その期間に受けた融資額に適用される各期間の金利を指定します。融資を受ける期間の金利は、その融資の返済期間を通じて適用されます。金利は小数値で表し、たとえば、5%は.05
として表します。
一連の融資の全額返済に必要な支払い回数を指定する数式。n式にはディメンション化変数を指定できますが、この式を時間ディメンション引数でディメンション化することはできません。loansがディメンション化される時間ディメンションの各期間に、またはtime-dimension引数で指定されるディメンションの各期間に、1回の支払いが行われます。たとえば、loansがMONTHによってディメンション化される場合、毎月1回支払いが行われます。
金利支払い額が計算される基準になるディメンションの名前。時間ディメンションがDAY、WEEK、MONTH、QUARTERまたはYEARの型である場合、loansに複数の時間ディメンションがないかぎり、time-dimension引数はオプションです。
FINTSCHEDが支払いの金利部分を計算する際に、現行のステータス・リスト(つまり現在ステータスにあり、現行のステータスの順序に並んでいるディメンション値のみ)を使用することを指定します。デフォルトでは、デフォルトのステータス・リストが使用されます。
使用上の注意
FINTSCHEDとNA値
loansの値がNA
以外の値で、対応するratesの値がNA
の場合、エラーが発生します。
FINTSCHEDはNASKIPオプションの影響を受けます。NASKIPの設定がYES
(デフォルト)であり、影響を受ける期間の融資の値がNA
である場合、FINTSCHEDによって返される結果は、対応する金利の値がNA
であるかNA
以外であるかによって異なります。表7-11「特定期間の融資または金利の値がNAである場合のNASKIPの影響」は、特定の期間の融資または金利の値がNA
である場合、NASKIPが結果にどのように影響するかを示しています。
表7-11 特定期間の融資または金利の値がNAである場合のNASKIPの影響
融資の値 | 金利の値 | NASKIP = YESの場合の結果 | NASKIP = NOの場合の結果 |
---|---|---|---|
非 |
|
エラー |
エラー |
|
非 |
金利の値 ( |
影響を受ける期間に対して |
|
|
影響を受ける期間に対して |
影響を受ける期間に対して |
たとえば、融資額の式と対応する金利の式の両方の値が1997年に対してNA
であり、その後の年に対してNA
以外であるとします。支払い回数が3である場合、FINTSCHEDは1997、1998および1999年に対してNA
を返します。2000年に対しては、FINTSCHEDは1998、1999および2000年に受けた融資に対する支払い額の金利部分を返します。
時間ディメンションのステータスの影響を受けないFINTSCHED
FINTSCHEDでは、時間ディメンションのステータスがどのように制限されているかにかかわらず、時間ディメンションの最初の値から計算を開始します。たとえば、loansはyear
によってディメンション化されており、year
の値の範囲はYr95
からYr99
までの間であるとします。year
のステータスを制限してYr95
を対象外にしている場合でも、計算は必ずYr95
から開始されます。
ただし、loansが時間ディメンションによってディメンション化されていない場合は、FINTSCHEDによって、時間ディメンションの現行のステータスの最初の値から計算が開始されます。たとえば、loansはyear
によってディメンション化されていないが、year
がtime-dimensionとして指定されているとします。year
のステータスがYr97
からYr99
までに制限されると、計算はYr95
からではなくYr97
から開始されます。
例
例7-98 金利の計算
次の文を実行すると、loans
およびrates
という2つの変数が作成されます。
DEFINE loans DECIMAL <year> DEFINE rates DECIMAL <year>
変数loans
およびrates
に、次の値を代入したとします。
YEAR LOANS RATES -------------- ---------- ---------- Yr95 100.00 0.05 Yr96 200.00 0.06 Yr97 300.00 0.07 Yr98 0.00 0.00 Yr99 0.00 0.00
各年のloans
には、その年に受けた固定金利融資額の初期値が含まれます。各年のrates
の値は、その年に受けた融資に対する金利で、それぞれの融資に対して、融資の返済が完了するまでその同一の金利が課されます。
次の文を実行すると、各融資の返済が3回払いと指定され、融資の支払いの金利の部分が計算されます。
REPORT W 20 HEADING 'Payment' FINTSCHED(loans, rates, 3, year)
生成されるレポートは次のとおりです。
YEAR Payment -------------- -------------------- Yr95 5.00 Yr96 15.41 Yr97 30.98 Yr98 18.70 Yr99 7.48
1995年に支払う金利は、1995年に5%の金利で融資を受けた$100に対する金利です。1996年に支払う金利分は、1995年に5%の金利で受けた融資の残りの元金に対する金利と、1996年に6%の金利で融資を受けた$200に対する金利の合計です。1997年に支払う金利分は、1995年に5%の金利で受けた融資の残りの元金に対する金利、1996年に6%の金利で受けた融資の残りの元金に対する金利、および1997年に7%の金利で融資を受けた$300に対する金利の合計です。1995年の融資は1997年に完済するので、1998年に支払う金利分は、1996年および1997年の融資の残りの元金に対する金利です。1999年には、金利支払いの対象は1997年に受けた融資の元金の支払い残高になります。
FPMTSCHEDファンクションは、一連の固定金利分割払い融資を指定の期間数で完済するための返済スケジュール(元金と金利)を計算します。期間ごとに、その期間に受けた融資額および返済期間にわたって融資に適用される単一の金利を指定します。
FPMTSCHEDは、所定期間の支払い額を、その期間で受けた各融資または未払いの各融資に対する元金および金利支払い額の合計として計算します。
戻り値
DECIMAL
FPMTSCHEDファンクションによって返される結果は、loansとratesのすべてのディメンション、およびtime-dimension引数として使用されるディメンションの結合によってディメンション化されます。
パラメータ
初期融資額を含む数式。loansに時間ディメンションがない場合、またはloansが複数の時間ディメンションによってディメンション化されている場合、time-dimension引数が必要です。
loansに対する金利を含む数式。ratesがディメンション化された変数の場合、この変数は、異なる時間ディメンションなどの任意のディメンションによってディメンション化できます。ratesが時間ディメンションによってディメンション化される場合、その期間に受けた融資額に適用される各期間の金利を指定します。融資を受ける期間の金利は、その融資の返済期間を通じて適用されます。金利は小数値で表し、たとえば、5%は.05
として表します。
一連の融資の全額返済に必要な支払い回数を指定する数式。n式はディメンション化できますが、時間ディメンション引数でディメンション化することはできません。loansがディメンション化される時間ディメンションの各期間に、またはtime-dimension引数で指定されるディメンションの各期間に、1回の支払いが行われます。たとえば、loansがmonth
によってディメンション化される場合、毎月1回支払いが行われます。
金利支払い額が計算される基準になるディメンションの名前。loansの時間ディメンションがDAY、WEEK、MONTH、QUARTERまたはYEARの型である場合、loansに複数の時間ディメンションがないかぎり、time-dimension引数はオプションです。
FPMTSCHEDが支払いスケジュールを計算する際に、現行のステータス・リスト(つまり現在ステータスにあり、現行のステータスの順序に並んでいるディメンション値のみ)を使用することを指定します。デフォルトでは、デフォルトのステータス・リストが使用されます。
使用上の注意
FPMTSCHEDとNA値
loansの値がNA
以外の値で、対応するratesの値がNA
の場合、エラーが発生します。
FPMTSCHEDはNASKIPオプションの影響を受けます。NASKIPの設定がYES
(デフォルト)であり、影響を受ける期間に対して融資額の値がNA
である場合、FPMTSCHEDによって返される結果は、対応する金利の値がNA
であるかNA
以外であるかによって異なります。表7-11「特定期間の融資または金利の値がNAである場合のNASKIPの影響」は、特定の期間の融資または金利の値がNA
である場合、NASKIPが結果にどのように影響するかを示しています。
たとえば、融資額の式と対応する金利の式の両方の値が1997年に対してNA
であり、その後の年に対してNA
以外であるとします。支払い回数が3である場合、FPMTSCHEDは1997、1998および1999年に対してNA
を返します。2000年に対しては、FPMTSCHEDは1998、1999および2000年に受けた融資に対する支払い額を返します。
時間ディメンションのステータスの影響を受けないFPMTSCHED
FPMTSCHEDでは、時間ディメンションのステータスがどのように制限されているかにかかわらず、時間ディメンションの最初の値から計算を開始します。たとえば、loansはyear
によってディメンション化されており、year
の値の範囲はYr95
からYr99
までの間であるとします。year
のステータスを制限してYr95
を対象外にしている場合でも、計算は必ずYr95
から開始されます。
ただし、loansが時間ディメンションによってディメンション化されていない場合は、FPMTSCHEDによって、時間ディメンションの現行のステータスの最初の値から計算が開始されます。たとえば、loansはyear
によってディメンション化されていないが、year
がtime-dimensionとして指定されているとします。year
のステータスがYr97
からYr99
までに制限されると、計算はYr95
からではなくYr97
から開始されます。
例
例7-100 返済スケジュールの計算
次の文を実行すると、loans
およびrates
という2つの変数が作成されます。
DEFINE loans DECIMAL <year> DEFINE rates DECIMAL <year>
変数loans
およびrates
に、次の値を代入したとします。
year loans rates -------------- ---------- ---------- Yr95 100.00 0.05 Yr96 200.00 0.06 Yr97 300.00 0.07 Yr98 0.00 0.00 Yr99 0.00 0.00
各年のloans
には、その年に受けた固定金利融資額の初期値が含まれます。各年のrates
の値は、その年に受けた融資に対する金利で、それぞれの融資に対して、融資の返済が完了するまでその同一の金利が課されます。
次の文を実行すると、各融資の返済が3回払いと指定され、融資の元金と金利を全額返済する返済スケジュールが計算されます。
REPORT W 20 HEADING 'Payment' FPMTSCHED(loans, rates, 3, year)
生成されるレポートは次のとおりです。
YEAR Payment -------------- -------------------- Yr95 36.72 Yr96 111.54 Yr97 225.86 Yr98 189.14 Yr99 114.32
1995年の支払い額は、1995年に受けた$100の融資のうち支払い期限に到達した元金と、この融資に対する5パーセントの金利の合計額です。1996年の支払いは、1995年に受けた融資に対する2回目の支払い(元金および5%の金利)、および1996年に受けた$200の融資に対する1回目の支払い(元金および6%の金利)の合計です。1997年の支払いは、1995年に受けた融資に対する3回目の最後の支払い、1996年に受けた融資に対する3回払いのうちの2回目の支払い、および1997年に受けた$300の融資に対する1回目の支払い(元金および7%の金利)の合計です。1995年の融資は1997年に全額返済されるので、1998年の支払いは、1996年と1997年の融資の元金と金利が対象になります。1999年の支払いは、1997年の融資に対する元金および金利の最後の支払いです。
FROM_TZファンクションは、タイムスタンプ値およびタイムゾーンをTIMESTAMP_TZ
値に変換します。
パラメータ
TIMESTAMPデータ型のテキスト式。
TZH:TZMまたはTZR(オプションでTZDも伴う)書式で文字列を返すテキスト式。
例
例7-102 タイムスタンプ値およびタイムゾーンからのTIMESTAMP_TZ値の作成
DEFINE mytimestamp VARIABLE TIMESTAMP DEFINE mytimezone VARIABLE TEXT DEFINE mytimestamptz VARIABLE TIMESTAMP_TZ mytimestamp = '26-MAR-06' mytimezone = '-04:00' mytimestamptz = FROM_TZ (mytimestamp mytimezone) REPORT mytimestamptz MYTIMESTAMPTZ ------------------------------ 26-MAR-06 12.00.00 AM -04:00
GETファンクションは、現行の入力ストリームから入力を要求します。入力は、単一アイテムのデータ、ディメンション値、アナリティック・ワークスペース・オブジェクト、または単に入力ストリームの次の項目の場合があります。GETファンクションの最も単純な形式でも、特定のデータ型の値が必要です。
GET(datatype)
GETには、入力を確認する引数も複数あります。
GETはファンクションであるため、OLAP DMLコマンド内で使用する必要があります。また、代入文で変数に入力を格納して後で使用でき、またはLIMITコマンドで使用して、ディメンションのステータスを設定することもできます。プログラムでGETを使用することにより、プログラムの完了に必要な情報を要求できます。
構文
GET({RAW TEXT|[NEW|VALID|POSLIST] input} -
[VERIFY condition-exp [IFNOT result-exp]])
ここで、inputは次のいずれかです。
パラメータ
ディメンションの名前を指定するテキスト式。dim-nameを指定した場合、GETはこのディメンションの値を入力として要求し、その入力がディメンションの有効な値であることを確認します。
GETが入力ストリームの次の項目を入力されているとおりに返すことを指定します。「RAW TEXTを指定したGET」を参照してください。
dim-name引数のあるNEWキーワードによって、GETはディメンションの新しい値を要求します。NEWを指定してディメンション値を要求すると、GETは入力が既存のディメンション値ではないことを確認します。
dim-name引数のあるVALIDキーワードによって、GETはディメンションの新しい値または既存の値を要求します。VALIDを指定してディメンション値を要求すると、GETは入力が既存のディメンション値または有効な新規ディメンション値のいずれかであることを確認します。
dim-name引数のあるPOSLISTキーワードによって、GETはディメンションのその位置によって識別されるディメンション値を要求します。POSLISTを指定してディメンション値を要求すると、GETは入力がディメンションの既存の位置番号であることを確認します。「POSLISTを指定したGET」を参照してください。
GETが現行アナリティック・ワークスペースのオブジェクトの名前を要求することを指定します。NAMEを指定した場合、GETは入力が現行アナリティック・ワークスペースに存在するオブジェクトであることを確認します。オブジェクト名は一重引用符で囲まず、DEFINEに示す有効なオブジェクト名のルールに従う必要があります。GETは、自動的にオブジェクト名を大文字に変換します。
NEW NAMEキーワードを使用すると、新しいアナリティック・ワークスペース・オブジェクトの名前を要求できます。NEWを指定してアナリティック・ワークスペースのオブジェクト名を要求すると、GETは入力を確認して、アタッチされたアナリティック・ワークスペース(EXPRESS.DB
を含む)の既存のオブジェクト名ではないことを確認します。
VALID NAMEキーワードを使用すると、アナリティック・ワークスペース・オブジェクトの名前を要求できます。VALIDを指定してアナリティック・ワークスペースのオブジェクト名を要求すると、現行のアナリティック・ワークスペースがない場合や、該当の名前が存在するかどうかに関係なく、GETは、入力が有効なオブジェクト名のルールに従っていることを確認します。
POSLIST NAMEキーワードを使用すると、NAMEディメンションでの位置によって識別されるアナリティック・ワークスペースのオブジェクト名を要求できます。POSLISTを指定してアナリティック・ワークスペースのオブジェクト名を要求すると、GETは入力がNAMEディメンションの既存の位置番号であることを確認します。
GETによって要求されるデータの型を指定しますが、これは、Oracle OLAPデータ型(INTEGER、SHORTINTEGER、DECIMAL、SHORTDECIMAL、BOOLEAN、ID、TEXTおよびDATE)のいずれも可能です。データ型を要求する場合、GETはNA
の値を受け入れます。
VERIFYでは、GETに対する入力が適合する必要があるブール条件を指定できます。condition-expにVALUEキーワードを使用すると、代入が実行される前に入力を検証できます。たとえば、LSIZEの値を要求する場合のブール条件は次のようになります。
VALUE NE NA AND VALUE GE 1 AND VALUE LE 80
IFNOT句には、入力がcondition-expに適合しない場合に備えるテキスト式を指定します。たとえば、プログラム内のエラー処理ルーチンにジャンプするようにします。IFNOTを使用しないでエラーが発生した場合、GETはエラー・メッセージを生成し、入力の待機を再開します。
使用上の注意
現行の入力ストリーム
Oracle OLAPは、現行の入力ストリームから処理の文を取得します。INFILE文を使用すると、デフォルトの入力ストリームを無効にできます。INFILEによって、Oracle OLAPはファイルから入力を読み取ります。入力ファイルの各行には、単一の文を含める必要があります。
INFILEからの入力
GETファンクションが入力ファイルにある場合、Oracle OLAPは入力ファイルの次の行をGETに対する入力であるとみなします。GETファンクションをコールする文に続く行(複数可)に、GETに対する必要な入力を必ず指定する必要があります。
たとえば、使用する小数点以下の桁数を取得するためにGETをコールするレポート・プログラムを起動する1行が入力ファイルに含まれているとします。入力ファイルは、この後に他の文が続きます。プログラム・コールに続く行に小数点以下の必要な桁数を指定しない場合、GETは入力ファイルのその後の行を文として実行せずに検査して目的の数値を探します。「テキスト値を取得するGETの使用方法」を参照してください。
INTEGERのディメンション値
GETがINTEGERディメンションの値を要求する場合、通常、入力はディメンション値の位置番号の形式です。
INTEGER以外のディメンション値
整数以外のディメンション値は、大文字で入力して一重引用符で囲む必要があります。
DWMQYディメンションへの値の入力
DAY、WEEK、MONTH、QUARTERまたはYEARディメンションの値は、ディメンションのVNF書式(ディメンションのVNFがないときはデフォルトのVNFの書式)で、または日付として入力できます。VNF書式で値を入力する方法の説明は、VNFコマンドを参照してください。日付として値を入力する場合の有効な入力スタイルの説明は、「日付のみの入力値」を参照してください。
VNF書式を使用する場合でも、日付として値を指定する場合でも、時間ディメンションのその型に関連する日付の構成要素のみを指定する必要があります。たとえば、MONTHディメンションの場合、月および年のみを指定します。
TEXT値またはID値
GETに対する入力として指定したTEXT値やID値の大文字と小文字の区別は、入力したときと同じ状態で維持されます。TEXT値およびID値は、一重引用符または二重引用符で始まる場合および埋め込まれた空白や\dnnn
、\n
などのエスケープ・シーケンスが含まれる場合を除き、引用符で囲む必要はありません。(値中の一重引用符は、Oracle OLAPがリテラルと解釈するように、\'
のようにバックスラッシュを前に置きます。)
日付のみの値
GETがDATE値を要求する場合、「日付のみの入力値」の説明に示す日付の有効なスタイルで入力できます。Oracle OLAPはDATEORDERオプションの現行値を使用して、日付のみの値のあいまいさを解決します。
数値
GETは、SHORTDECIMAL値またはDECIMAL値をINTEGER値に変換する際に値を丸めます。GETがINTEGER値またはSHORTINTEGER値を要求し、入力がそのデータ型の範囲外の数値である場合、GETはエラー・メッセージを生成し、入力の待機を再開します。
RAW TEXTを指定したGET
GETがRAW TEXT入力を要求し、入力が提供されない場合、GETはNULL文字列(''
)を返します。RAW TEXT以外の型のデータの場合、GETは入力があるまで待機します。
POSLISTを指定したGET
GETファンクションとともにPOSLISTキーワードを使用した場合、Oracle OLAPは、ディメンション名ではなく、ディメンション値を識別する位置の値の入力を要求します。POSLISTキーワードの構文は、代入文を使用して作成された代入文とともにGETファンクションを使用するのか、LIMITコマンドとともにGETファンクションを使用するのかによって異なります。GETファンクションの結果と等しい変数を設定するには、次の構文を使用します。
expression = GET(POSLIST dimension)
ディメンションをGETファンクションによって返される値に制限するには、次の構文に示すようにPOSLISTキーワードを2回指定します。
LIMIT dimension TO POSLIST GET(POSLIST dimension)
GREATESTファンクションは、式のリストで最大の式を返します。最初の式より後の式はすべて、比較の前に最初の式のデータ型に暗黙的に変換されます。
式のリストで最小の式を検索するには、LEASTを使用します。
GROUPINGIDファンクションは、GROUPINGIDコマンドで作成済のグルーピング・リレーションを使用して、階層ディメンションの値のグルーピングIDを取得します。
例
例7-106 単一のグルーピングID値の取得
例9-145「リレーションにグルーピングIDを移入するGROUPINGIDコマンドの使用方法」の説明どおりに、GROUPINGIDコマンドを使用してgeog
ディメンションの2つの階層のグルーピングIDを定義するとします。この場合、GROUPINGIDファンクションを使用して、geog
ディメンションの値のグルーピングIDを取得できます。
" For the Political Geog hierarchy LIMIT geog TO 'Hartford' LIMIT geog_hierlist TO 'Political_Geog' SHOW GROUPINGID(geog_gidrel) 0.00 SHOW OBJ(PROPERTY '$GID_DEPTH' 'geog_gidrel') 4 LIMIT geog TO ALL LIMIT geog TO 'Canada' SHOW GROUPINGID(geog_gidrel) 3.00 SHOW OBJ(PROPERTY '$GID_DEPTH' 'geog_gidrel') 4 " For the Sales Geog hierarchy LIMIT geog TO 'Hartford' LIMIT geog_hierlist TO 'Sales_Geog' SHOW GROUPINGID(geog_gidrel) 0.00 SHOW OBJ(PROPERTY '$GID_DEPTH' 'geog_gidrel') 4 LIMIT geog TO ALL LIMIT geog TO 'West' SHOW GROUPINGID(geog_gidrel) 3.00 SHOW OBJ(PROPERTY '$GID_DEPTH' 'geog_gidrel') 4
GROWRATEファンクションは、時系列式の増加率をその系列の最初と最後の値を基準にして計算します。
GROWRATEは、時間ディメンションのステータスの最初と最後の値に対応するexpressionの値を基準にして計算を行います。expressionのその間の値は無視されます。GROWRATEが使用する計算は、次のとおりです。
GROWRATE = ((last/first)**(1/(n-1))-1
指数のnは、時間ディメンションのステータスの値の数です。
戻り値
DECIMAL
GROWRATEによって返される結果は、time-dimensionで指定したディメンションを除くexpressionのすべてのディメンションによってディメンション化されます。
パラメータ
増加率を計算する数式。式は時間ディメンションによってディメンション化されている必要があります。expressionの最初と最後の値には、次のルールが適用されます。
expressionの最初の値はゼロにできません。(これは、GROWRATE計算でゼロによる除算を回避するためです。)
expressionの最初と最後の値は、両方とも正数であるか両方とも負数である必要があります。(あるいは、expressionの最後の値は、最初の値が正数であるか負数であるかにかかわらずゼロにできます。)
expressionの最初と最後の値のいずれもNA
にはできません。
expressionがディメンション化される時間ディメンションの名前。時間ディメンションがDAY、WEEK、MONTH、QUARTERまたはYEARの型である場合、loansに複数の時間ディメンションがないかぎり、time-dimension引数はオプションです。
例
例7-107 増加率の測定
次の文は、actual
変数のディメンションを制限し、レポートを生成します。
LIMIT month TO 'Dec95' TO 'Mar96' LIMIT line TO 'net.income' REPORT DOWN division ACROSS month: actual
この文によって生成されるレポートは次のとおりです。
LINE: NET.INCOME ------------------ACTUAL------------------- -------------------MONTH------------------- DIVISION Dec95 Jan96 Feb96 Mar96 -------------- ---------- ---------- ---------- ---------- Camping 4,378.09 19,915.13 22,510.38 34,731.63 Sporting 6,297.02 13,180.29 17,429.17 18,819.14 Clothing 87,471.74 107,257.85 133,566.01 127,132.55
文REPORT W 20 GROWRATE(actual)
によって、1995年12月から1996年3月におけるdemo
ワークスペースの実際の純益の増加率を表示するレポートが生成されます。
--GROWRATE(ACTUAL)-- --------LINE-------- DIVISION NET.INCOME -------------- -------------------- Camping 0.99 Sporting 0.44 Clothing 0.13
HIERCHECKは、指定したaggmapの特定のリレーションまたはすべてのリレーションにおける階層に循環構造があるかどうかをチェックするためのファンクションです。階層ディメンションの親リレーションは、ディメンションのそれぞれの値の親を表します。(循環構造が現れるのは、親リレーションの中でディメンション値が誤ってそれ自身の祖先または子孫として指定された場合です。)
またHIERCHECKによるチェックを、階層に関するその他の状況について行うよう指定することもできます。
構文
コマンドとして使用する場合
HIERCHECK parent-relation [STATUS|NOSTATUS|valueset-name] [MULTIPATH] [CONSISTENT]-
[BALANCED levelrelation-name]
または
HIERCHECK aggmap-name [MULTIPATH] [CONSISTENT]levelrelation-name]
パラメータ
チェックする親リレーションの名前を指定するテキスト式。
aggmapの名前を表すテキスト式。HIERCHECKでは、aggmapにおけるすべてのリレーションがチェックされます。
HIERCHECKにおいて、リレーションの現行のディメンション・ステータスが使用されるよう指定します。
ステータスにおいて、HIERCHECKの実行対象となるリレーションのディメンションの値を指定します。
HIERCHECKにおいて、リレーションのデフォルトのディメンション・ステータスが使用されるよう指定します。
HIERCHECKにおいて、それぞれの子からその親へのパスが複数存在するかどうかのチェックが行われるよう指定します。
HIERCHECKにより、階層に整合性があるかどうかのチェックが行われるよう指定します。階層に整合性があるとは、異なる階層のすべてのノードが同じ子を持つことをいいます。
levelrel-nameに指定したレベル・リレーションを使用することにより、HIERCHECKにおいて、次の項目がすべて真かどうかのチェックが行われるよう指定します。
階層内でNAレベルを持つ要素はすべて、リーフを持たないルートであるか、またはリーフであるかのどちらかである。
階層内で同じ(非NA)レベルにある要素はすべて、その階層のルート(複数可)からの深さが同じである。
階層内でレベル(非NA)が異なる要素は互いに深さが異なる。
使用上の注意
HIERCHECKを使用する理由
階層を作成したときに、それが有効であることを確認するための方法としてHIERCHECKを使用することをお薦めします。つまり、変数のデータをロールアップする前に、ディメンションの階層が正しく構成されているかどうかを確認する必要があるということです。たとえば、AGGREGATEコマンドでは、HIERCHECKを使用して、実行時の無限ループの発生を回避します。階層ディメンションのレベルを設定した後は、階層ディメンションによってディメンション化される変数にデータをロードする前、または変数に対して初めてAGGREGATEコマンドを使用する前に、親リレーションでループがあるかどうかをチェックしてください。最初にHIERCHECKを使用してすべての階層ディメンションの親リレーションをチェックしなくても変数をロールアップできますが、最初にHIERCHECKを使用することを習慣にしてください。
AggmapでHIERCHECKを使用する場合のステータス
aggmapにおけるリレーション内に値セットが存在する場合、HIERCHECKではこの値セットを使用して、リレーションのディメンション・ステータスが決定されます。それ以外の場合はすべて、リレーションのデフォルトのディメンション・ステータスが使用されます。
リレーションのディメンションではないすべてのディメンションに対しては、現在のステータスが使用されます。
HIERCHECKによってトリガーされるエラー・メッセージ
HIERCHECKでは、親リレーションの中にループが検出されるとエラーが通知され、実行が停止されます(つまり、HIERCHECKは常に、最初のエラー・メッセージが出た段階で停止します)。エラー・メッセージに示されるのは、ループに含まれるディメンション値、ループが発生する追加ディメンション値と呼ばれる階層の名前(親リレーションに1つ以上の名前付き階層がある場合)、およびループが検出された親リレーションの名前です。親リレーションにループがない場合、メッセージは表示されません。例7-108「ループのチェック」を参照してください。
例
例7-108 ループのチェック
次の例は、親リレーションを作成し、それにループがあるかどうかをチェックする方法を示します。最初に、ディメンションを定義してそれに値を追加します。
DEFINE geography DIMENSION ID MAINTAIN geography ADD 'U.S.' MAINTAIN geography ADD 'East' 'Central' 'West' MAINTAIN geography ADD 'Boston' 'Atlanta' 'Chicago' 'Dallas' 'Denver' 'Seattle'
次に、そのディメンションをそれ自身に関連付けます。次の文は、GEOG.GEOGという名前の親リレーションを定義し、この親リレーションは、GEOGRAPHYディメンションをそれ自身に関連付けます。
define geog.geog RELATION geography <geography>
さらに、ディメンション値の階層を指定します。この例では、階層に3つのレベル(国、地域、都市)があります。階層を指定して、最上位レベルを除くすべてのレベルに対して、親ディメンション値を子ディメンション値に(たとえば、East
をBoston
に)割り当てます。これを行うために、値をリレーションに格納します。最初にLIMITコマンドを使用して子をグループ化し、次に、グループ化した子に親を割り当てます。
LIMIT geography TO 'East' 'Central' 'West' geog.geog = 'U.S.' LIMIT geography TO 'Boston' 'Atlanta' geog.geog = 'East' LIMIT geography TO 'Chicago' 'Dallas' geog.geog = 'Central' LIMIT geography TO 'Denver' 'Seattle' geog.geog = 'West'
これにより、次の文に示すように、親リレーションgeog.geog
でループがあるかどうかをチェックできます。
HIERCHECK geog.geog
この場合、HIERCHECKはエラー・メッセージを生成しないので、geog.geog
にはループがありません。HIERCHK.LOOPFNDがNO
に設定され、HIERCHK.LOOPVALSおよびHIERCHK.XTRADIMSがNA
の設定のままです。
リレーションに格納される値に次の誤りがあったとします。
LIMIT geography TO 'East' 'Central' 'West' geog.geog = 'East'
この文は、East
をそれ自身の親としているのが誤りなので、AGGREGATEコマンドで無限ループが発生します。次に示すように、geog.geog
リレーションでループがあるかどうかをチェックする文を実行するとエラー・メッセージが生成されます。
HIERCHECK geog.geog ERROR: HIERCHECK has detected one or more loops in the hierarchy represented by GEOG.GEOG. The values involved are 'East'.
HIERHEIGHTファンクションは、指定されたレベルのノードの値を、階層ディメンションの現行のステータス・リストの最初の値として返します。
指定された階層ディメンションの値を、事前定義済のリレーションにレベル別に移入するには、HIERHEIGHTコマンドを使用します。
パラメータ
階層ディメンションの親子のセルフ・リレーション。詳細は、「parentrelリレーション」を参照してください。
階層ディメンションのレベルを表すINTEGER
値。値1
は階層ディメンションの最下位レベルを表します。
使用上の注意
階層ディメンションの制限
HIERHEIGHTファンクションは、常に階層ディメンションの単一の値を返します。HIERHEIGHTファンクションをコールする前に階層ディメンションを単一の値に制限しない場合、ディメンションの現行のステータス・リストの最初の値に対してHIERHEIGHTファンクションが実行されます。通常、HIERHEIGHTファンクションをコールする前に階層ディメンションを単一の値に制限するか、階層ディメンションの各値に対してHIERHEIGHTファンクションを実行するためにFOR文の後にHIERHEIGHTファンクションを使用します。
例
例7-109 単純なコマンドとしてのHIERHEIGHTの使用方法
アナリティック・ワークスペースに、geography
という名前の階層ディメンション、およびgeography
のStandard
階層にあるgeography
値のセルフ・リレーションであるg0.stanparent
という名前のリレーションがあるとします。
DEFINE g0.newparent RELATION geography <geography> LD Parent-child when hierarchy of geography is 1
REPORT g0.stanparent
のような文を発行すると、g0.stanparent
の値が表示されます。
GEOGRAPHY G0.STANPARENT ---------------- ---------------- World NA Americas World Canada Americas Toronto Canada Montreal Canada Ottawa Canada ... ... USA Americas Boston USA LosAngeles USA ... ... Mexico Americas Mexicocity Mexico Argentina Americas BuenosAires Argentina Brazil Americas Saopaulo Brazil Colombia Americas Bogota Colombia Australia World East.Aust Australia Sydney East.Aust Madrid Spain Budapest Hungary Athens Greece Vienna Austria Melbourne East.Aust Central.aust Australia ... ... Perth West.Aust Bombay India Malaysia Asia Europe World France Europe Caen France Paris France
次のOLAP DML文を発行して、geographyを値Americas
に制限します。
LIMIT geography TO 'Americas'
HIERHEIGHTファンクションを使用して階層の最下位レベル(レベル1)のAmericas
のノードを検索するには、次のOLAP DML文を発行します。
REPORT HIERHEIGHT(g0.stanparent 1)
生成されるレポートは次のとおりです。
HIERHEIGHT(G0.STANPARENT COUNTER) ------------------------------ NA
HIERHEIGHTファンクションを使用して階層の最上位レベル(レベル4
)のAmericas
のノードを検索するには、次のOLAP DML文を発行します。
REPORT HIERHEIGHT(g0.stanparent 4)
生成されるレポートは次のとおりです。
HIERHEIGHT(G0.STANPARENT COUNTER) ------------------------------ World
HIERHEIGHTファンクションを使用して階層のレベル2
および3
のAmericas
のノードを検索するには、次のOLAP DML文を発行します。
REPORT HIERHEIGHT(g0.stanparent 2) REPORT HIERHEIGHT(g0.stanparent 3)
生成されるレポートは次のとおりです。
HIERHEIGHT(G0.STANPARENT COUNTER) ------------------------------ NA HIERHEIGHT(G0.STANPARENT COUNTER) ------------------------------ Americas
各レベルの出力は、HIERHEIGHTコマンドを使用して作成したリレーションに作成された値との間に対応関係があることに注意してください。たとえば、geography
のStandard階層に対してgeog.stanhierrel
という名前のリレーションを作成し、geography
をAmericas
に制限したとします。geog.stanhierrel
のレポートには、レベルごとに同じgeography
の値が表示されます。
LIMIT geography TO 'AMERICAS' REPORT DOWN geography geog.stanhierrel ---------------------------GEOG.STANHIERREL-------------------- ----------------------------GEOG.LVLDIM------------------------ GEOGRAPHY 1 2 3 4 ---------------- ---------------- ---------------- ---------------- ------------ Americas NA NA Americas World
例7-110 FOR文の後のHIERHEIGHTの使用方法
アナリティック・ワークスペースに、findnodes
という次のようなプログラムがあるとします。このプログラムは、geography
値がすべてステータスにあるノードを検索します。
DEFINE FINDNODES PROGRAM PROGRAM VARIABLE level INTEGER FOR geography DO counter = 1 WHILE counter LE statlen(geog.lvldim) DO REPORT HIERHEIGHT(g0.stanparent level) level = level + 1 DOEND DOEND END
次のOLAP文を発行して、geography
をAmericas
およびAsia
に制限し、Standard
階層のレベルごとにHIERHEIGHTファンクションをコールするとします。
LIMIT geography TO 'Americas', 'Asia' CALL findnodes
Americas
およびAsia
のgeography
値に関するfindnodes
プログラムの出力は、次のとおりです。プログラムのレポートは、最初にAmericas
の各レベルの値を表示します。次に、Asia
の各レベルの値がレポートされます。
HIERHEIGHT(G0.STANPARENT COUNTER) ------------------------------ NA HIERHEIGHT(G0.STANPARENT COUNTER) ------------------------------ NA HIERHEIGHT(G0.STANPARENT COUNTER) ------------------------------ Americas HIERHEIGHT(G0.STANPARENT COUNTER) ------------------------------ World HIERHEIGHT(G0.STANPARENT COUNTER) ------------------------------ NA HIERHEIGHT(G0.STANPARENT COUNTER) ------------------------------ NA HIERHEIGHT(G0.STANPARENT COUNTER) ------------------------------ Asia HIERHEIGHT(G0.STANPARENT COUNTER) ------------------------------ World
各レベルの出力は、HIERHEIGHTコマンドを使用して作成したリレーションに作成された値との間に対応関係があることに注意してください。
LIMIT geography TO 'Americas' 'Asia' REPORT DOWN geography geog.stanhierrel ---------------------------GEOG.STANHIERREL-------------------- ----------------------------GEOG.LVLDIM------------------------ GEOGRAPHY 1 2 3 4 ---------------- ---------------- ---------------- ---------------- ------------ Americas NA NA Americas World Asia NA NA Asia World
HIERSHAPEファンクションは、階層ディメンションが指定されたシェイプを持つかどうかを識別します。
構文
HIERSHAPE(parent-relation[(qdr)] {LEVEL | RAGGED | SKIPLEVEL | REGULAR} USING levelrel -
[INHIERARCHY inhvalueset] LEVELORDER levelvalueset)
パラメータ
階層ディメンションの親子のセルフ・リレーションの名前を表すテキスト式。(「parentrelリレーション」を参照してください。)
parent-relationを修飾するQDRの名前を表すテキスト式。
このオプションは、すべてのメンバーが、levelrelで定義されているレベルと同じレベルの一部であるかどうかを決めます。
リーフ・ノードが階層内の異なるレベルに位置する階層。
1つ以上のリーフ・ノードが、その次の最も明らかなレベルより上位に位置する親にリンクされている階層。
それぞれの子が階層の次のレベルに位置する親を持つ、従来のレベルベース階層。
階層ディメンションのレベル・リレーションの名前を表すテキスト式。(「levelrelリレーション」を参照してください。)
階層ディメンションのinhier値セットの名前を表すテキスト式。(「inhier値セットまたは変数」を参照してください。)
階層ディメンションのhierlevels値セットの名前を表すテキスト式。(「hierlevels値セット」を参照してください。)
使用上の注意
スターに矛盾しない階層
ディメンションのすべてのレベル階層を、ディメンション・レベルごとに1つの列およびリーフ・メンバーごとに1つの行を持つ単一の表として表すことができる場合、ディメンションはスターに矛盾しません。このように表すことができない場合、ディメンションはスターに矛盾します。
スターに矛盾するディメンションの例として、時間ディメンションにYEAR、QUARTERおよびMONTHという3つのレベルがあり、さらにFISCALおよびCALENDARという2つの階層があるとします。両方の階層には、降順に、YEAR、QUARTERおよびMONTHというレベルがあります。階層には次のメンバーがあるとします。
CALENDAR階層:
CY2012 CYQ1_2012 Jan_2012 Feb_2012 Mar_2012 CYQ2_2012 Apr_2012 May_2012 Jun_2012 ...
FISCAL階層:
FY2012 FYQ1_2012 Apr_2012 May_2012 Jun_2012 FYQ2_2012 Jul_2012 Aug_2012 Sep_2012 ...
これは有効かつ矛盾しないディメンションですが、1つの表で3つの列のみを使用して表すことができないため、スターに矛盾します。たとえば、MONTHがApr_2012である列には、CYQ2_2012およびFYQ1_2012というQUARTERに対する2つの異なる値が必要になりますが、これは可能ではありません。
このディメンションをスターに矛盾にしないようにするには、MONTHレベルを、FISCAL_MONTHおよびCALENDAR_MONTHという2つの異なるレベルに置き換え、同様に、YEAR年レベルを、FISCAL_YEARおよびCALENDAR_YEARに置き換える必要があります。
INFOファンクションは、FORECAST、PARSEまたはREGRESS文によって生成される情報、あるいはアナリティック・ワークスペースのモデルに関して生成される情報を取得します。
INFOファンクションの構文は、取得する情報の種類によって異なるので、次のように4つに分けて説明します。
INFO(FORECAST)ファンクションは、FORECAST文によって生成されてOracle OLAPによって内部的に格納される情報を取得します。INFOにキーワードを使用することにより、計算した予測に関する特定の情報を抽出できます。
注意: INFOを使用する前に、結果に関する標準的なレポートで、これによって必要な情報がすべて得られるため、FORECAST.REPORTについて理解しておいてください。INFOは、主にカスタマイズされたレポートの作成やさらに詳細な結果の分析の実行に効果的です。 |
予測が計算されていない情報を抽出しようとすると、INFOはエラーを生成します。キーワードAVAILABLEを使用すると、現在取得できる結果があるかどうかを判断できます。
戻り値
後述の表に示すように、戻り値は使用するキーワードによって異なります。範囲外の索引を使用した場合、または直前に使用した予測法に適用されないキーワードを選択した場合、INFOはNA
を返します。たとえば、予測の計算式に2つの係数がある場合に12番目の係数を要求すると、INFOはNA
を返します。
パラメータ
FORECAST文によって生成される情報を取得することを示します。
取得する特定の情報。FORECASTに関して使用可能なキーワードを、表7-12「すべての方法に対するキーワード」、表7-13「TRENDおよびEXPONENTIAL予測に対するキーワード」および表7-14「WINTERS予測に対するキーワード」に示します。索引付けが必須と示されているキーワードには、index引数が必要です。
複数の異なる結果がありうるchoiceに関して、取得する結果を指定するINTEGER式。たとえば、傾向方程式には複数の係数がある可能性があります。indexを使用することによって、情報を取得する係数を指定できます。indexが必須のchoiceで省略すると、エラーが発生します。
表7-12 すべての方法に対するキーワード
キーワード | タイプ | 索引付け | 意味 |
---|---|---|---|
AVAILABLE |
BOOL |
なし |
情報を取得できる計算予測があるか |
DEPENDENT |
TEXT |
なし |
予測される変数または式 |
METHOD |
TEXT |
なし |
予測法 |
MAPE |
DEC |
なし |
平均絶対誤差率(適合度の程度) |
LENGTH |
INT |
なし |
計算される予測期間の数 |
TIME |
TEXT |
なし |
予測が実行されるディメンション |
FCNAME |
TEXT |
なし |
適合値および予測値が含まれる変数の名前(予測が保存されていない場合は |
表7-13 TRENDおよびEXPONENTIAL予測に対するキーワード
キーワード | タイプ | 索引付け | 意味 |
---|---|---|---|
FORMULA |
TEXT |
なし |
予測方程式のテキスト。 |
NUMCOEFS |
INT |
なし |
係数の数。 |
COEFFICIENT |
DEC |
あり |
予測方程式の指定される係数。取得する係数をindexで指定。 |
表7-14 WINTERS予測に対するキーワード
キーワード | タイプ | 索引付け | 意味 |
---|---|---|---|
PERIODICITY |
INT |
なし |
季節サイクルの期間の数。 |
ALPHA |
DEC |
なし |
平滑データ系列の平滑化定数。 |
BETA |
DEC |
なし |
季節指数系列の平滑化定数。 |
GAMMA |
DEC |
なし |
傾向系列の平滑化定数。 |
STSMOOTHED |
DEC |
なし |
平滑データ系列の開始値。 |
STSEASONAL |
DEC |
あり |
季節指数系列の開始値。取得する開始値をindexで指定。 |
STTREND |
DEC |
なし |
傾向系列の開始値。 |
FCSMOOTHED |
TEXT |
なし |
平滑データ系列を保持する変数。 |
FCSEASONAL |
TEXT |
なし |
季節指数系列を保持する変数。 |
FCTREND |
TEXT |
なし |
傾向系列を保持する変数。 |
例
例7-111 予測情報の取得
この例では、売上が予測されているとします。
次の文は、sales
変数のディメンションを制限し、予測の計算式を取得します。
LIMIT product TO 'Sportswear' LIMIT district TO 'Chicago' LIMIT month TO 'Jan95' TO 'Dec96' FORECAST LENGTH 12 METHOD EXPONENTIAL FCNAME fcst time - month sales SHOW INFO(FORECAST FORMULA)
これらの文によって生成される出力は次のとおりです。
87718.0009541865 * (1.005533834579 ** MONTH)
次の文は、予測の平均絶対誤差率を取得します。
SHOW INFO(FORECAST MAPE)
この文によって生成される出力は、次のとおりです。
.17
INFO(MODEL)ファンクションは、アナリティック・ワークスペースのモデルに関してOracle OLAPにより生成されて内部的に格納される情報を取得します。INFOにキーワードを使用することにより、コンパイルされたモデルの構造および現行セッションで実行したモデルのステータスに関する特定の情報を抽出できます。
注意: INFOを使用する前に、MODEL.COMPRPT、MODEL.DEPRTおよびMODEL.XEQRPTによって作成されるレポート(必要とする情報をすべて含む)について理解しておいてください。 |
キーワードAVAILABLEをINFOで指定すると、現在取得できるモデルの結果があるかどうかを判断できます。それ以外の情報を、現行セッションでモデルを検討または定義しないで抽出しようとすると、INFOはエラーを生成します。
戻り値
後述の表に示すように、戻り値は使用するキーワードによって異なります。範囲外の索引を使用した場合、または関係のない情報を要求した場合、INFOはNA
を返します。たとえば、モデルに5つの文が含まれている場合に文6に関する情報を要求すると、INFOはNA
を返し、あるいは、代入ターゲットが実際は変数である場合にDIMENSION REFERENCEを指定すると、INFOはNA
を返します。
構文
INFO(MODEL choice [index1 [index2 [index3]]])
ここで、indexは、複数の異なる結果がありうるchoiceに関して、取得する結果を指定する引数です。選択するキーワードによって、次の索引引数を1つ以上指定できます。
パラメータ
アナリティック・ワークスペースのモデルに関する情報を取得することを示します。INFOは、最も新しく定義したモデル、または現行セッションで検討したモデルに関する情報を返します(DEFINE MODELおよびCONSIDERコマンドを参照)。
取得する情報を特定するキーワード。モデルに関して使用可能なキーワードを、それぞれの情報カテゴリを表す次の表に示します。
表7-17「ターゲット、ソースおよび依存関係に関する情報を取得するINFO(MODEL)のキーワード」。ここに示すキーワードによって、方程式である文に関する情報が提供されます。この方程式の形式は代入ターゲット=式です。式は1つ以上のデータソースを参照できます。代入ターゲットおよびデータソースは変数またはディメンション値にでき、そのディメンション性に影響を与える修飾子を持つことができます。
表7-18「実行ステータスに関する情報を取得するINFO(MODEL)のキーワード」。ここに示すすべてのキーワード(XEQSTATUSを除く)は、連立ブロックとともにモデルを実行した後にのみ関係します。現行モデルがコンパイルされていない場合にAVAILABLEまたはNAMEを除くいずれかのキーワードを使用すると、Oracle OLAPはエラーを返します。
各表は4つの列で構成され、キーワード、戻り値のデータ型、キーワードに関連付けられた索引引数、および意味を示します。
表7-15 モデルに関する一般情報を取得するINFO(MODEL)のキーワード
キーワード | データ型 | 索引引数 | 意味 |
---|---|---|---|
AVAILABLE |
BOOL |
(引数なし) |
情報を取得できるモデルがあるか。 |
NAME |
TEXT |
[MODEL model-num] |
model-numがない場合(またはmodel-numが0の場合)、現行モデルの名前。model-numが0より大きい場合、現行モデル内の指定されたmodel-numであるインクルードされたモデルの名前。 |
COUNT STATEMENTS |
INT |
(引数なし) |
現行モデルの文の数。この数には、コメント、方程式、およびDIMENSIONとINCLUDEのコマンド(ある場合)が含まれるが、インクルードされたモデルの文は含まれない。 |
STATEMENT |
TEXT |
stmnt-num |
文stmnt-numのテキスト。 |
SIMULTANEOUS |
BOOL |
(引数なし) |
現行モデルに連立ブロックが含まれるか。 |
表7-16 モデルの構造に関する情報を取得するINFO(MODEL)のキーワード
キーワード | データ型 | 索引引数 | 意味 |
---|---|---|---|
COUNT ELEMENTS |
INT |
[BLOCK block-num] |
block-numがない場合、現行モデルのブロックの数。block-numがある場合、現行モデルのブロックblock-num内の文およびネストされたブロックの合計数。 特定要素に関して詳細情報を要求する場合(たとえば、TYPE ELEMENTキーワードによって)、その要素が属するブロック番号およびブロック内の要素番号を常に指定する。 |
TYPE ELEMENT |
TEXT |
element-num BLOCK block-num |
ブロックblock-numの要素element-numがネストされたブロックであるか文であるかに従って、BLOCKまたはSTATEMENTが返される。 |
NUMBER BLOCK |
INT |
element-num BLOCK block-num |
ブロックblock-numの要素element-numであるネストされたブロックのブロック番号。 |
TYPE BLOCK |
TEXT |
block-num |
ブロックblock-numの実行タイプに従って、SIMPLE、STEP-FORWARD、STEP-BACKWARDまたはSIMULTANEOUSが返される。 |
COUNT DIMS |
INT |
[BLOCK block-num] |
block-numがない場合、現行モデルのモデル・ディメンションの数。block-numがある場合、現行モデル内のブロックblock-numのステップフォワード・ディメンション、ステップバックワード・ディメンションまたは連立ディメンションの数。 |
DIMENSION |
TEXT |
dimension-num [BLOCK block-num] |
block-numがない場合、現行モデルのモデル・ディメンションdimension-numの名前。block-numがある場合、ブロックblock-numの指定されたステップフォワード・ディメンション、ステップバックワード・ディメンションまたは連立ディメンションの名前。 |
NUMBER STATEMENT |
INT |
element-num BLOCK block-num |
ブロックblock-numの要素element-numである文の文番号。 文番号はそのモデル内の文の位置を表す。文に関してさらに情報を要求する(たとえば、HIDDENキーワードによって)には、そのモデルが現在検討しているモデルでなければならない。 |
HIDDEN |
BOOL |
stmnt-num |
文stmnt-numが後続の文によってマスクされているか。 |
NUMBER MODEL |
INT |
element-num BLOCK block-num
|
ブロックblock-numの要素element-numである文がどこから受け取られるかを示すインクルードされたモデルの番号。
|
表7-17 ターゲット、ソースおよび依存関係に関する情報を取得するINFO(MODEL)のキーワード
キーワード | データ型 | 索引引数 | 意味 |
---|---|---|---|
COUNT SOURCES |
INT |
STATEMENT stmnt-num |
現行モデル内の文stmnt-numのデータソースの数。 |
TYPE REFERENCE |
TEXT |
STATEMENT stmnt-num [SOURCE source-num] |
source-numがない場合、文stmnt-numの代入ターゲットのオブジェクト型。source-numがある場合、文stmnt-numのデータソースsource-numのオブジェクト型。参照が変数に対する場合、オブジェクト型はVARIABLE。参照がディメンションの値に対する場合、オブジェクト型はDIMENSION。 |
VARIABLE REFERENCE |
TEXT |
STATEMENT stmnt-num [SOURCE source-num] |
source-numがない場合、文stmnt-numの代入ターゲットである変数の名前。source-numがある場合、文stmnt-numのデータソースsource-numである変数の名前。 |
VALUE REFERENCE |
TEXT |
STATEMENT stmnt-num [SOURCE source-num] |
source-numがない場合、文stmnt-numの代入ターゲットであるディメンション値。source-numがある場合、文stmnt-numのデータソースsource-numであるディメンション値。 |
DIMENSION REFERENCE |
TEXT |
STATEMENT stmnt-num [SOURCE source-num] |
source-numがない場合、文stmnt-numのターゲット・ディメンション値のモデル・ディメンション。source-numがある場合、文stmnt-numのソース・ディメンション値source-numのモデル・ディメンション。 |
COUNT QUALIFIERS |
INT |
STATEMENT stmnt-num [SOURCE source-num] |
source-numがない場合、文stmnt-numの代入ターゲットの修飾子の数。source-numがある場合、文stmnt-numのデータソースsource-numの修飾子の数。 |
TYPE QUALIFIER |
TEXT |
qualifier-num STATEMENT stmnt-num [SOURCE source-num] |
source-numがない場合、文stmnt-numのターゲットの修飾子qualifier-numの修飾子型。source-numがある場合、文stmnt-numのデータソースsource-numの修飾子qualifier-numの修飾子型。修飾子型は、LAG(前のディメンション値のみ)、LEAD(後の値のみ)、BOTH(前と後の両方の値)、VARIABLE(モデルが実行される際の変数の値に従って前または後の値)というように、ディメンションの依存関係を示す。さらに、QDR(修飾データ参照)の修飾子型もある。 |
DIMENSION QUALIFIER |
TEXT |
qualifier-num STATEMENT stmnt-num [SOURCE source-num] |
qualifier-num STATEMENT stmnt-num [SOURCE source-num] source-numがない場合、文stmnt-numの代入ターゲットの修飾子qualifier-numのディメンション。source-numがある場合、文stmnt-numのデータソースsource-numの修飾子qualifier-numのディメンション。 |
表7-18 実行ステータスに関する情報を取得するINFO(MODEL)のキーワード
キーワード | データ型 | 索引引数 | 意味 |
---|---|---|---|
XEQSTATUS |
TEXT |
[BLOCK block-num] |
block-numがない場合は、モデル全体の実行ステータスで、モデルが実行されていなかったときのステータスはNOT EXECUTED。block-numがある場合は、ブロックblock-numの実行ステータスで、モデルが実行されていなかったときはエラーが返される。モデルが実行されていたとき、モデル全体またはブロックのステータスはSOLVED、DIVERGEDまたはFAILED TO CONVERGE。外部レベルのブロックのステータスは、その中のネストされたブロックが発散した場合または収束に失敗した場合はEXECUTION INCOMPLETEになる。 |
COUNT ITERATIONS |
INT |
BLOCK block-num |
ブロックblock-numが解決されるまでに、またはそのブロックが発散するか収束に失敗するまでにそれに対して実行された反復の数。 |
DAMP |
DEC |
(引数なし) |
モデルが実行されたときのMODDAMPオプションの値。(解決方法がGAUSSの場合のみ該当。) |
DIVERGSTMT |
INT |
BLOCK block-num |
ブロックblock-numの計算時に発散した文の要素番号。 |
GAMMA |
INT |
(引数なし) |
モデルが実行されたときのMODGAMMAオプションの値。 |
MAXITERS |
INT |
(引数なし) |
モデルが実行されたときのMODMAXITERSオプションの値。 |
OVERFLOW |
INT |
(引数なし) |
モデルが実行されたときのMODOVERFLOWオプションの値。 |
SIMULTYPE |
TEXT |
(引数なし) |
モデルが実行されたときのMODSIMULTYPEオプションの値(AITKENSまたはGAUSS)。 |
TOLERANCE |
INT |
(引数なし) |
モデルが実行されたときのMODTOLERANCEオプションの値。 |
情報を取得するブロックを指定するINTEGER式。block-numは、MODEL.COMPRPTプログラムによって生成されるレポートで特定されるブロック番号に一致します。
情報を取得するモデル・ディメンションまたはブロック・ディメンションを指定するINTEGER式。モデル全体の場合、そのモデルで最初にリストされるディメンションはdimension-num 1になります。たとえば、MODEL.COMPRPTによってモデル・ディメンションが<line month>
として指定されるとします。この場合、line
がdimension-num 1
で、month
がdimension-num 2
です。現行モデルの連立ブロックの場合、ブロックの最初のディメンションがdimension-num 1
になり、それに続きます。ステップフォワード・ブロックまたはステップバックワード・ブロックのディメンションは1つなので、ブロックのディメンションは常にdimension-num 1
です。モデル全体のディメンションのリスト、またはモデルの各ブロックのディメンションのリストを参照するには、MODEL.COMPRPTプログラムを実行します。
情報を取得する要素を指定するINTEGER式。要素に関する情報を要求する場合、要素が属するブロック番号を常に指定します。要素は指定したブロックの文であるか、指定したブロック内のネストされたブロックです。要素番号はコンパイルされたモデルの文およびブロックの順序に一致します。MODEL.COMPRPTプログラムを実行すると、コンパイルされたモデルの要素のリストを参照できます。
たとえば、現行モデルのコンパイルされた構造が次のとおりであるとします。
block 1 statement a block 2 statement b statement c END block 2 statement d END block 1
この前のモデルのblock
1
に関する情報を要求する場合、statement
a
がelement-num 1
、block
2
がelement-num 2
、statement
d
がelement-num 3
です。block
2
に関する情報を要求する場合、statement
b
がelement-num 1
、statement
c
がelement-num 2
です。
インクルードされたモデルの階層の場合、情報を取得するモデルを指定するINTEGER式。現在検討しているモデルはmodel-num 0
(ゼロ)、そのモデルがインクルードするモデルはmodel-num 1
などとなります。ルート・モデルが階層で最も大きいモデル番号になります。
情報を取得する修飾子を指定するINTEGER式。修飾子は、変数またはディメンション値の参照のディメンション性を変更します。参照は、LAG、LEAD、TOTALなどのファンクション、または修飾データ参照(QDR)で修飾できます。文の修飾子を参照するには、その文を含むモデルに対してMODEL.DEPRTプログラムを実行します。
モデル内の方程式ごとに、MODEL.DEPRTのレポートは、代入ターゲットとその修飾子を1行で示してその後にデータソースを続けます。各データソースはその修飾子とともに別の行に示されます。さらに、MODEL.DEPRTのレポートは、各修飾子の修飾子型LAG、LEAD、BOTH、VARIABLEまたはQDRも示します(INFOのキーワードを示す3つ目の表のTYPE QUALIFIERを参照)。
ターゲットおよび各ソースに関して、qualifier-numは、MODEL.DEPRTのレポートでリストされる修飾子の順序に一致します。
情報を取得するデータソースを指定するINTEGER式。計算において、変数またはディメンション値に対する各参照が代入ターゲットのデータのソースとして数えられます。定数値はソースとして数えられません。
文のデータソースを参照するには、その文を含むモデルに対してMODEL.DEPRTプログラムを実行します。モデル内の方程式ごとに、MODEL.DEPRTのレポートは、代入ターゲットを1行で示してその後にデータソースを続けます。各データソースは別の行に示されます。
情報を取得する文を指定するINTEGER式。常に、Stmnt-numは現在検討しているモデルの文を指します。インクルードされたモデルから受け取る文は指しません。
現行モデルの文番号を参照するには、MODEL.COMPRPTプログラムを実行します。このレポートによって、各文の左側に、文の取得元のモデルとそのモデル内の文番号がリストされます。
例
例7-112 修飾子情報の取得
次の文は、income.plan
という名前のモデルの文3であるとします。
budget(line revenue) = LAG(actual(line revenue), 1, month) - + plan.factor
MODEL.DEPRPT
プログラムを実行すると、この文のターゲットおよびソースの修飾子を参照できます。
MODEL.DEPRPT income.plan
この文によって生成される出力は、次のとおりです。
MODEL INCOME.PLAN ... 3 BUDGET(QDR <LINE>): ACTUAL(LAG <MONTH>)(QDR <LINE>) PLAN.FACTOR ...
このレポートによって、代入ターゲットbudget
には2つのデータソースactual
およびplan.factor
があることがわかります。
例7-113 修飾子情報のチェック
次の文は、INCOME.PLANを現行モデルにして、文3の代入ターゲットの修飾子の数と型をチェックします。
CONSIDER income.plan SHOW INFO(MODEL COUNT QUALIFIERS STATEMENT 3)
これらの文によって生成される出力は次のとおりです。
1
OLAP DML文
SHOW INFO(MODEL TYPE QUALIFIER 1 STATEMENT 3)
によって、次の出力が生成されます。
QDR
例7-114 異なるデータソースのチェック
次に示す各文は、文3の2つのデータソースの修飾子の数および型をチェックします。
OLAP DML文
SHOW INFO(MODEL COUNT QUALIFIERS STATEMENT 3 SOURCE 1)
によって、次の出力が生成されます。
2
OLAP DML文
SHOW INFO(MODEL TYPE QUALIFIER 1 STATEMENT 3 SOURCE 1)
によって、次の出力が生成されます。
LAG
OLAP DML文
SHOW INFO(MODEL TYPE QUALIFIER 2 STATEMENT 3 SOURCE 1)
によって、次の出力が生成されます。
QDR
OLAP DML文
SHOW INFO(MODEL COUNT QUALIFIERS STATEMENT 3 SOURCE 2)
によって、次の出力が生成されます。
0
INFO(PARSE)ファンクションは、PARSE文によって生成されてOracle OLAPによって内部的に格納される情報を取得します。INFOにキーワードを使用することにより、解析した式に関する特定の情報を抽出できます。
戻り値
戻り値は、表7-19に示すように、使用するキーワードによって異なります。取得できない情報を抽出しようとした場合、または範囲外の索引を使用した場合、INFOはNA
を返します。たとえば、4つの式を含む句を解析してから12番目のFORMULAを要求すると、INFOはNA
を返します。
パラメータ
PARSE文によって生成される情報を取得することを示します。
取得する特定の情報。PARSEに対して選択可能なキーワードを、表7-19「INFO PARSEのキーワード」に示します。索引付けが可能と示されているキーワードは、オプションのindex引数を取ることができます。
複数の異なる結果がありうるchoiceに関して、取得する結果を指定するINTEGER式。たとえば、3つの式を含むテキストを解析した場合、各式にはそれぞれの計算式およびデータ型があります。indexを使用することによって、対象とする式を指定できます。
indexを省略した場合、INFOはすべての情報を複数行の値で返します。
表7-19 INFO PARSEのキーワード
キーワード | タイプ | 索引付け | 意味 |
---|---|---|---|
PARSEABLE |
BOOL |
なし |
Oracle OLAPがテキストを解析できたか。 |
ERRORTEXT |
TEXT |
なし |
式が解析されなかった場合のエラー・メッセージのテキスト。 |
NUMFORMULAS |
INT |
なし |
解析された式(計算式)の数。 |
NUMDIMS |
INT |
なし |
解析されたすべての式の結合にあるディメンションの数。 |
FORMULA |
TEXT |
あり |
指定された式のテキスト(計算式)。取得するテキストをindexで指定。 |
DATA |
TEXT |
あり |
指定された式のデータ型。 |
TYPE |
TEXT |
あり |
指定された式のオブジェクトの型。式がオブジェクトの名前である場合はその型が返され、式が修飾データ参照である場合はQDR、式がそれ以外である場合はEXPが返される。 |
DIMENSION |
TEXT |
あり |
式のすべてのディメンションの結合にある指定されたディメンションの名前。 |
例
例7-115 修飾子情報の取得
単純なレポート・プログラムにおいて、レポートの対象とするデータをプログラムに対する引数としてユーザーが指定できるようにします。ユーザーが指定できるのは、データ変数の式および名前です。ARGS文では式の引数を処理できないので、PARSEおよびINFOを使用して、プログラムの引数を解析してレポートを生成します。
次の文は、単純なレポート・プログラムを作成します。
DEFINE report1 PROGRAM PROGRAM PUSH month product district DECIMALS DECIMALS = 0 LIMIT month TO FIRST 2 LIMIT product TO ALL LIMIT district TO 'Chicago' PARSE ARGS REPORT ACROSS month: WIDTH 8 <&INFO(PARSE FORMULA 1) - WIDTH 13 &INFO(PARSE FORMULA 2)> POP month product district DECIMALS END
ユーザーがこのプログラムを実行する場合、変数の名前(sales
)または式(sales-expense
)、あるいはその両方を引数として指定できます。
次の文
REPORT1 sales sales-expense
によって、次の出力が生成されます。
DISTRICT: CHICAGO --------------------MONTH-------------------- --------Jan95--------- --------Feb95--------- PRODUCT SALES SALES-EXPENSE SALES SALES-EXPENSE ------------ -------- ------------- -------- ------------- Tents 29,099 1,595 29,010 1,505 Canoes 45,278 292 50,596 477 Racquets 54,270 1,400 58,158 1,863 Sportswear 72,123 7,719 80,072 9,333 Footwear 90,288 8,117 96,539 13,847
INFO(REGRESS)ファンクションは、REGRESS文によって生成されてOracle OLAPによって内部的に格納される情報を取得します。INFOにキーワードを使用することにより、計算した回帰に関する特定の情報を抽出できます。
注意: INFOを使用する前に、結果に関する標準的なレポートを生成するもので、これによって必要な情報がすべて得られるため、REGRESS.REPORTについて理解しておいてください。INFOは、主にカスタマイズされたレポートの作成やさらに詳細な結果の分析の実行に効果的です。 |
パラメータ
REGRESS文によって生成される情報を取得することを示します。
取得する特定の情報。REGRESSに対して選択可能なキーワードを、表7-20「INFO REGRESSのキーワード」に示します。索引付けが必須と示されているキーワードには、index引数が必要です。
複数の異なる結果がありうるchoiceに関して、取得する結果を指定するINTEGER式。たとえば、回帰において複数の独立変数がある場合があります。indexを使用することによって、情報を取得する独立変数を指定できます。indexが必須のchoiceで省略すると、エラーが発生します。
表7-20 INFO REGRESSのキーワード
キーワード | タイプ | 索引付け | 意味 |
---|---|---|---|
AVAILABLE |
BOOL |
なし |
情報を抽出できる計算された回帰があるか。 |
DEPENDENT |
TEXT |
なし |
回帰の従属変数の名前。 |
NOINTERCEPT |
BOOL |
なし |
切片によって計算される回帰が抑止されたか。 |
WEIGHTED |
BOOL |
なし |
直前の回帰は加重されたか。 |
WEIGHT |
TEXT |
なし |
直前の回帰を加重するために使用された式。 |
NUMCOEFS |
INT |
なし |
係数の数。 |
INDEPENDENT |
TEXT |
あり |
独立変数。取得する独立変数をindexで指定(切片が抑止されなかった場合、切片が最初となる)。 |
COEFFICIENT |
DEC |
あり |
予測係数。取得する係数をindexで指定。 |
STDERROR |
DEC |
あり |
予測係数の標準エラー。取得する標準エラーをindexで指定。 |
TRATIO |
DEC |
あり |
予測係数のT-比率。取得するT-比率をindexで指定。 |
NUMOBS |
INT |
なし |
使用された測定値の数。 |
FRATIO |
DEC |
なし |
回帰のF-比率。 |
RBSQ |
DEC |
なし |
回帰の修正R-2乗。 |
FORMULA |
TEXT |
なし |
回帰計算式。 |
STDERROREST |
DEC |
なし |
回帰に対する予測の標準エラー。 |
RESET |
BOOL |
|
AVAILABLEの元の状態をリセットして |
使用上の注意
回帰結果を取得可能かどうかの判断
回帰が実行されていない情報を抽出しようとすると、INFOはエラーを生成します。キーワードAVAILABLEを使用すると、現在取得できる結果があるかどうかを判断できます。回帰が一度正常に実行されると、その後で1回以上回帰が失敗しても前の成功した回帰の結果が取得可能なので、AVAILABLEはTRUEのままです。AVAILABLEの状態を変更するためにRESETを使用して元の値のNO
に戻すまで、AVAILABLEはTRUEのままです。
索引が原因のNAの結果
範囲外の索引を使用した場合、INFOはNA
を返します。たとえば、回帰において5つの独立変数がある場合に12番目の独立変数の係数を要求すると、INFOはNA
を返します。
INLISTファンクションは、テキスト値のすべての行が別のテキスト値の行であるかどうかを判別します。通常、INLISTは、リスト(複数行のテキスト値の形式)のすべての行がマスター・リスト(別の複数行のテキスト値の形式)にあるかどうかを判断するために使用します。
INLISTでは、引数としてTEXT値およびNTEXT値を使用できます。1つの引数のみがNTEXTである場合、INLISTはファンクション操作を実行する前に、他の引数をNTEXTに自動的に変換します。
パラメータ
listの各行の比較対象とする複数行のテキスト式。
各行をmasterlistの行と比較する複数行のテキスト式。listのすべての行がmasterlistの行にある場合、INLISTは値YES
を返します。listの1つ以上の行がmasterlistの行にない場合、INLISTは値NO
を返します。
例
例7-118 リストとマスター・リストの比較
この例では、INLISTを使用して、1つのリストの各行がマスター・リストにあるかどうかを確認する方法を示します。この例のマスター・リストは、depts
という変数の複数行のテキスト値です。depts
変数の値は、次のとおりです。
Marketing Purchasing Accounting Engineering Personnel
最初のファンクション・コールでは、テキスト・リテラルとして指定したリストをマスター・リストと比較します。戻り値はYES
です。
INLIST(depts, 'Accounting\nPersonnel')
2番目のファンクション・コールでは、次の値を持つ変数newlist
を比較します。
Development Accounting
これをdepts
のマスター・リストと比較します。戻り値はNO
です。
INLIST(depts, newlist)
INSBYTESファンクションは、テキスト式に1バイト以上を挿入します。
シングルバイト・キャラクタ・セットを使用している場合は、INSCHARSを使用します。
パラメータ
バイトを挿入するTEXT
式。text-expressionが複数行のTEXT値である場合、改行はINSBYTESの戻り値でも維持されます。
text-expressionに挿入する1バイト以上のバイト。
指定されたbytesが挿入される位置の前のバイト位置を表すINTEGER
。text-expressionの最初のバイト位置は1です。テキストの先頭にバイトを挿入するには、afterに0を指定します。この引数を省略した場合、INSBYTESはtext-expressionの最後のバイトの後ろにバイトを挿入します。
text-expressionの長さより大きな値をafterに指定した場合、INSBYTESはtext-expressionの末尾に空白を追加します。挿入される空白の数は、afterの値とtext-expressionの長さとの差です。たとえば、insbytes('abc' 'def' 4)
では、次のようにdef
がabc
に追加される前に1つの空白が挿入されます。
abc def
INSCHARSファンクションは、テキスト式に1文字以上を挿入します。
マルチバイト・キャラクタ・セットを使用している場合、INSCHARSファンクションのかわりにINSBYTESファンクションを使用できます。
戻り値
TEXTまたはNTEXT
このファンクションでは、TEXT値とNTEXT値を引数として使用できます。戻り値のデータ型は、引数として指定する値のデータ型によって次のように異なります。
すべての引数がTEXT値である場合、戻り値はTEXTです。
すべての引数がNTEXT値である場合、戻り値はNTEXTです。
引数にTEXTとNTEXTの両方の値が存在する場合は、すべてのTEXT値がNTEXT値に変換されてからファンクションの演算が実行され、戻り値はNTEXTになります。
パラメータ
文字を挿入する式。text-expressionが複数行のTEXT値である場合、改行はINSCHARSの戻り値でも維持されます。
text-expressionに挿入する1文字以上の文字。
指定されたcharactersが挿入される位置の前の文字位置を表すINTEGER
。text-expressionの最初の文字位置は1です。テキストの先頭に文字を挿入するには、afterに0を指定します。この引数を省略した場合、INSCHARSはtext-expressionの最後の文字の後ろに文字を挿入します。
text-expressionの長さより大きな値をafterに指定した場合、INSCHARSはtext-expressionの末尾に空白を追加します。挿入される空白の数は、afterの値とtext-expressionの長さとの差です。たとえば、INSCHARS('abc' 'def' 4)
では、次のように'def'
が'abc'に追加される前に1つの空白が挿入されます。
abc def
INSCOLSファンクションは、複数行のTEXT値の列に別のTEXT値のすべての列を挿入します。挿入される列は指定した列位置の後ろに配置され、各行の元の列は右に移動します。このファンクションは、挿入された列で構成された複数行のTEXT値を返します。
戻り値
TEXTまたはNTEXT
このファンクションでは、TEXT値とNTEXT値を引数として使用できます。戻り値のデータ型は、引数として指定する値のデータ型によって次のように異なります。
すべての引数がTEXT値である場合、戻り値はTEXTです。
すべての引数がNTEXT値である場合、戻り値はNTEXTです。
引数にTEXTとNTEXTの両方の値が存在する場合は、すべてのTEXT値がNTEXT値に変換されてからファンクションの演算が実行され、戻り値はNTEXTになります。
戻り値の行数は、text-expressionの行数と常に同じです。columnsのTEXT式の行がこれより少ない場合、INSCOLSはその式の最後の行を戻り値の後続の行で繰り返します。
パラメータ
列を挿入する式。
各行に1つ以上の列を含む式。この式のすべての列がtext-expressionの対応する行に挿入されます。
列が挿入される前の列位置を表す0から32,767のINTEGER
。各行における最初の文字の列位置は1です。afterを指定しない場合、挿入は各行の末尾から開始されます。1行の全体の長さは、シングルバイト文字では32,767列またはマルチバイト文字ではそれより少ない列を超えることができません。
text-expressionのある行における最後の文字よりも右側にくるafter列を指定した場合、戻り値の対応する行における間の列は空白で埋められます。
INSLINESファンクションは、複数行のテキスト式に1行以上を挿入します。
戻り値
TEXTまたはNTEXT
このファンクションでは、TEXT値とNTEXT値を引数として使用できます。戻り値のデータ型は、引数として指定する値のデータ型によって次のように異なります。
すべての引数がTEXT値である場合、戻り値はTEXTです。
すべての引数がNTEXT値である場合、戻り値はNTEXTです。
引数にTEXTとNTEXTの両方の値が存在する場合は、すべてのTEXT値がNTEXT値に変換されてからファンクションの演算が実行され、戻り値はNTEXTになります。
INSTATファンクションは、ディメンション値またはディメンション・サロゲート値が現行のステータス・リストにあるか、またはディメンション値が値セットにあるかどうかをチェックします。
パラメータ
ディメンション、ディメンション・サロゲートまたは値セットの名前。
テストするディメンション値またはディメンション・サロゲート値で、テキスト・リテラル(一重引用符で囲む)または値を指定する式のどちらかです。結合ディメンションまたは連結ディメンションの値を指定するには、値を山カッコで囲みます。結合ディメンションの場合、複数のベース・ディメンション値をカンマと空白で区切ります。連結ディメンションの場合、ベース・ディメンションとその値をコロンと空白で区切ります。
使用上の注意
無効な値のチェック
INSTAT文でディメンション名およびディメンション値を指定すると、値がディメンションの現行のステータス・リストにあるかどうかがわかります。それに対し、ISVALUEファンクションでは、あるアイテムがステータスにあるかどうかにかかわらず、ディメンションの値であるかどうかがわかります。valueがディメンション値ではない場合、INSTATはエラーを生成し、ISVALUEは単にFALSE
の値を返します。
例
例7-123 値セットを指定したINSTATの使用
アナリティック・ワークスペースに、次のような定義および値を持つgeog
ディメンションがあるとします。
DEFINE geog TEXT DIMENSION GEOG -------------- Austria Belgium Canada
また、値セットmygeogs
を定義し、次の文を使用してこの値セットの値を識別するとします。
DEFINE mygeogs VALUESET geog LIMIT mygeogs TO 'Belgium'
値セットに対してREPORTは発行できません。これを試行すると、Oracle OLAPによってエラー・メッセージが発行されます。
REPORT mygeogs ORA-34104: INSTATTEST!MYGEOGS is not a type of object that contains data values.
ただし、INSTATファンクションを使用して、ディメンションのどの値が値セットにあるかを表示できます。
REPORT INSTAT (mygeogs, geog) GEOG INSTAT (MYGEOGS, GEOG) -------------- ------------------------ Austria no Belgium yes Canada no
例7-124 現行のステータスのチェック
次の例では、プログラムに引数としてmonth
ディメンションの値を渡しています。プログラムの最初の部分でINSTATを使用して、引数として渡されたディメンション値がmonth
の現行のステータスにあるかどうかをチェックします。現行のステータスにある場合、プログラムはレポート・プログラムをコールします。現行のステータスにない場合、プログラムはエラー処理セクションに分岐します。
ARGUMENT onemonth month IF INSTAT(month onemonth) THEN sales_report ELSE GOTO error ...
例7-125 ディメンションが結合ディメンションの場合のINSTATの使用
指定するディメンションが結合ディメンションである場合、値全体を一重引用符で囲む必要があります。たとえば、アナリティック・ワークスペースにregion
ディメンションおよびproduct
ディメンションがあるとします。region
ディメンション値には、East
、Central
およびWest
があります。product
ディメンション値には、Tents
、Canoes
およびRacquets
があります。
次の文は、結合ディメンションを定義してそれに値を追加します。
DEFINE reg.prod DIMENSION <geography product> MAINTAIN reg.prod ADD <'East', 'Tents'> <'West', 'Canoes'>
ベース位置を指定するには、次のような文を使用します。
SHOW INSTAT(reg.prod '<1, 1>') YES
ベース・テキスト値を指定するには、次のような文を使用します。
SHOW INSTAT(reg.prod '<\'East\', \'Tents\'>') YES
例7-126 ディメンションが連結ディメンションの場合のINSTATの使用
指定するディメンションが連結ディメンションである場合、コンポーネントのディメンションとディメンション値のペアである<component dimension: dimension value>
全体を一重引用符で囲む必要があります。次の文は、ベース・ディメンションとしてregion
およびproduct
を持つ連結ディメンションを定義します。
DEFINE reg.prod.ccdim DIMENSION CONCAT(region product)
reg.prod.ccdim
のレポートで返される結果は、次のとおりです。
REG.PROD.CCDIM ---------------------- <region: East> <region: Central> <region: West> <product: Tents> <product: Canoes> <product: Racquets>
ベース・ディメンション位置を指定するには、次のような文を使用します。
SHOW INSTAT(reg.prod.ccdim '<product: 3>') yes
ベース・ディメンション・テキスト値を指定するには、次のような文を使用します。
SHOW INSTAT(reg.prod.ccdim '<product: Tents>') YES
INSTRファンクション群(INSTR、INSTRB、およびINSTRC)は、文字を使用して文字列からサブストリングを検索し、文字列のうち指定したサブストリングに一致する部分の最初の文字の位置を返します。戻り値となるサブストリング位置の決定方法は各ファンクションで異なります。
INSTRは、入力キャラクタ・セットの定義どおりに文字を使用して長さを計算します。
INSTRBは、バイトを使用して長さを計算します。
INSTRCは、Unicodeの完全文字を使用して長さを計算します。
パラメータ
検索元のテキスト式。
検索元で検索する文字列。
string内でファンクションが検索を開始する位置を示すゼロ以外のINTEGER。INSTRは、入力キャラクタ・セットでの定義どおりに文字を使用してpositionを計算します。INSTRBは、バイトを使用してpositionを計算します。INSTRCは、Unicodeの完全文字を使用してpositionを計算します。
positionが負数である場合、INSTRはstringの最後から逆方向に数えて検索します。positionのデフォルト値は1
なので、ファンクションはstringの最初の位置から検索を開始します。
stringでどの一致文字列をファンクションが検索するかを示すINTEGER。occurrenceの値は正数である必要があります。occurrenceのデフォルト値は1
なので、ファンクションはsubstringの最初の一致文字列を検索します。
例
例7-127 文字位置を使用したサブストリング位置の順方向検索
次の例は、文字列「Corporate Floor」で文字列「or」の検索を3番目の文字から開始します。「Corporate Floor」で「or」が2回目に出現する位置を返します。
SHOW INSTR('Corporate Floor','or', 3, 2) 14
IRRファンクションは、一連のキャッシュ・フロー値に関連付けられている内部収益率を計算します。結果の各値は、対応するキャッシュ・フローの正味現在価値がゼロに等しくなる各期間の割引率として計算されます。
戻り値
DECIMAL(たとえば、n 8.25パーセントの内部収益率では、.0825
の結果値が生成される)
IRRファンクションによって返される結果は、時間ディメンションを除くcashflowsのすべてのディメンションによってディメンション化されます。cashflowsが時間ディメンションによってのみディメンション化される場合、IRRは単一の値を返します。
パラメータ
キャッシュ・フロー値の系列を指定する、time-dimensionによってディメンション化される数式。
注意: 結果値の計算に使用されるすべてのキャッシュ・フローは、それらが関連付けられている期間内の同じ相対時点に発生するとみなされます。ステータス外のディメンション位置に対応するキャッシュ・フローは無視されます。 |
時間ディメンションを指定する名前。cashflowsのディメンションがDAY、WEEK、MONTH、QUARTERまたはYEAR型である場合、time-dimensionの値を指定しないと、IRRは自動的にcashflowsのDAY、WEEK、MONTH、QUARTERまたはYEARのディメンションを使用するため、time-dimension引数はオプションです。
使用上の注意
複数の割引率
キャッシュ・フローの系列には、正味現在価値がゼロに等しくなる割引率が複数ある場合があります。この場合、IRRはそれらの割引率のうちの1つを内部収益率とみなして結果を返します。解が1つのみで-99.9から10,000パーセントである場合、IRRファンクションはそれを内部収益率とします。IRRが内部収益率を計算できない場合、結果の対応する値はNA
です。
例
例7-131 内部収益率の計算
次の文は、project
という名前のディメンションを作成し、それに値を追加します。さらに、year
およびproject
によってディメンション化されるcflow
という名前の変数を作成します。
DEFINE project DIMENSION TEXT MAINTAIN project ADD 'a' 'b' 'c' 'd' 'e' DEFINE cflow VARIABLE DECIMAL <project year>
次の値をCFLOWに割り当てたとします。
------------------------CFLOW---------------------- -----------------------PROJECT--------------------- YEAR a b c d e -------------- ---------- ---------- ---------- ---------- ------- Yr95 -200.00 -200.00 -300.00 -100.00 -200.00 Yr96 100.00 150.00 200.00 25.00 25.00 Yr97 100.00 400.00 200.00 100.00 200.00
続いて、次の文
REPORT IRR(cflow, year)
によって生成される内部収益率のレポートは、次のとおりです。
IRR(CFLOW, PROJECT YEAR) -------------- ---------- a 0.00 b 0.84 c 0.22 d 0.13 E 0.06
ISDATEプログラムは、テキスト式が有効な日付を表しているかどうかを決定します。ISDATEは、テキスト式が日付のみの値に変換可能かどうかを確認するテストを行うのみで、実際の変換は行いません。変換を実行するには、CONVERTを使用する必要があります。
パラメータ
日付のみのデータ型による定義どおりに有効な値を表しているかどうかをテストする1行のIDまたはTEXT式。日付を入力する場合の有効なスタイルの説明は、「日付のみの入力値」を参照してください。
ISINFINITEファンクションは、数式の値が無限大であるかどうかを示す値を返します。
関連項目: このファンクションは、SQLの浮動小数点条件IS [NOT] INFINITEと同様の情報を返します(『Oracle Database SQL言語リファレンス』を参照)。 |
ISNANファンクションは、数式の値が特殊なNaN
値であるかどうかを示す値を返します。
関連項目: このファンクションは、SQLの浮動小数点条件IS [NOT] NANと同様の情報を返します(『Oracle Database SQL言語リファレンス』を参照)。 |
ISSESSIONファンクションは、指定したディメンションの現在のメンバーが一時的なメンバー(つまり、MAINTAIN ADD SESSION文を実行して追加したメンバー)かどうかを判別します。
ISVALUEファンクションは、指定された値がディメンションまたはコンポジットにあるかどうかを調べます。
ヒント: ディメンションの値がディメンションの現在のステータスにあるかどうかを判別する場合には、INSTATを使用します。 |
パラメータ
チェックされるディメンションまたはコンポジットの名前。
コンポジットに名前がない場合、そのコンポジットを指すSPARSEキーワードを使用します(たとえば、SPARSE <market product>
)。
調べる値。IDまたはTEXTディメンションの場合はテキスト・リテラルまたはテキスト式、INTEGERディメンションの場合はINTEGER
、あるいはコンポジットおよび結合ディメンションの場合は山カッコで囲んだ値の組合せ。
JOINBYTESファンクションは、複数のテキスト値を単一行として結合します。
JOINBYTESは、NA
の値を持つ引数を無視し、結合するテキストから改行を削除します。(複数行のテキスト式の改行を維持するには、INSCHARSファンクションを使用します。)また、結合される行の長さが32,767(結合される行の最大の長さ)を超える場合、JOINBYTESは自動的に改行して残りのバイトを次の行に移します。マルチバイト文字のバイトの間で改行が発生することもあります。この場合、JOINBYTESはいずれかのバイトの後で1行を終了し、その文字の次のバイトで次の行を開始します。
パラメータ
JOINBYTESがnext-expressionに結合する式。first-expressionのデータ型がTEXTまたはNTEXT以外である場合、JOINBYTESはそれをTEXTに変換します。NTEXT式をTEXTに変換するには、CONVERTまたはTO_CHARファンクションを使用します。
first-expressionと結合する1つ以上の式。連結する式のデータ型がTEXTまたはNTEXT以外である場合、JOINBYTESはそれをTEXTに変換します。NTEXT式をTEXTに変換するには、CONVERTまたはTO_CHARファンクションを使用します。
例
例7-135 JOINBYTESを使用した値の連結
この例は、JOINBYTESを使用して、2つの変数name.product
およびprice
の現行値を組み合せる方法を示します。変数price
のデータ型はDECIMALですが、JOINBYTESはその値を他のテキスト値と結合するために自動的にTEXTに変換します。
LIMIT product TO 'Canoes' LIMIT month TO 'Dec96'
JOINBYTESファンクションをコールします。
JOINBYTES('Current Price for ' name.product ' is: $' price)
次の値が返されます。
Current Price for Aluminum Canoes is: $200.03
JOINCHARSファンクションは、複数の非NA式を単一行テキストとして結合します。JOINCHARSは、結合するテキストから改行を削除します。(改行を維持するには、INSCHARSを使用します。)
結合される行の長さが32,767バイトを超える場合、JOINCHARSは自動的に改行して残りの文字を次の行に移します。マルチバイト文字のバイトの間で改行が発生する場合、JOINCHARSはマルチバイト文字を分割せず、かわりに、マルチバイト文字のすべてのバイトを次の行に移します。
ヒント: マルチバイト・キャラクタ・セットを使用している場合、JOINCHARSファンクションのかわりにJOINBYTESファンクションを使用できます。 |
戻り値
TEXTまたはNTEXT
戻り値のデータ型は、引数として指定する値のデータ型によって次のように異なります。
すべての引数がTEXT値である場合、戻り値はTEXTです。
すべての引数がNTEXT値である場合、戻り値はNTEXTです。
引数にTEXTとNTEXTの両方の値が存在する場合は、すべてのTEXT値がNTEXT値に変換されてからファンクションの演算が実行され、戻り値はNTEXTになります。
パラメータ
JOINCHARSがnext-expressionに結合する式。first-expressionのデータ型がTEXTまたはNTEXT以外である場合、JOINCHARSはそれをTEXTに変換します。
first-expressionと結合する1つ以上の式。連結する式のデータ型がTEXTまたはNTEXT以外である場合、JOINCHARSはそれをTEXTに変換します。
例
例7-136 JOINCHARSを使用した値の連結
この例は、JOINCHARSを使用して、2つの変数name.product
およびprice
の現行値を組み合せる方法を示します。変数price
のデータ型はDECIMALですが、JOINCHARSはその値を他のテキスト値と結合するために自動的にTEXTに変換します。
LIMIT product TO 'Canoes' LIMIT month TO 'Dec96'
JOINCHARSファンクションをコールします。
JOINCHARS('Current Price for ' name.product ' is: $' price)
次の値が返されます。
Current Price for Aluminum Canoes is: $200.03
JOINCOLSファンクションは、2つ以上の複数行のテキスト値の対応する行を結合します。このファンクションは、最大32,767バイト(単一の連結行の最大長さ)までの連結された行から構成される複数行のテキスト値を返します。
戻り値の行の数は、行が最も多い引数式の行の数と常に同じです。これより行が少ない引数式に対しては、JOINCOLSはその式の最後の行を戻り値の後続の行で繰り返します。この繰返し機能は、引数式が空白、ハイフンなどの単一行セパレータである場合に便利です。例7-137「2つのテキスト式の列の結合」を参照してください。
戻り値
TEXTまたはNTEXT
すべての引数がTEXT値である場合、戻り値はTEXTです。すべての引数がNTEXT値である場合、戻り値はNTEXTです。引数にTEXTとNTEXTの両方の値が存在する場合は、すべてのTEXT値がNTEXT値に変換されてからファンクションの演算が実行され、戻り値はNTEXTになります。
パラメータ
JOINCOLSが行をnext-expressionの行に結合する式。式のデータ型がTEXTまたはNTEXT以外である場合、JOINCOLSはそれをTEXTに変換します。JOINCOLSは、値がNA
である引数を無視します。
first-expressionと結合する1つ以上の式。連結する式のデータ型がTEXTまたはNTEXT以外である場合、JOINCOLSはそれをTEXTに変換します。JOINCOLSは、値がNA
である引数を無視します。
例
例7-137 2つのテキスト式の列の結合
この例では、citylist
の各行が引用符付きテキスト値およびcityreps
の対応する行と結合されます。
citylist
値は、次のとおりです。
Boston Houston Chicago Denver
cityrep
値は、次のとおりです。
Brady Lopez Alfonso Cody
JOINCOLSファンクションをコールします。
JOINCOLS(citylist ' -- ' cityreps)
次の値が返されます。
Boston -- Brady Houston -- Lopez Chicago -- Alfonso Denver -- Cody
JOINLINESファンクションは、2つ以上の式の値を単一の複数行のテキスト値に結合します。複数行のテキスト値が結合される場合、先頭にくるのは最初の式のすべての行で、その後に2番目の式のすべての行と続きます。通常、JOINLINESの引数はテキスト値ですが、他のデータ型も可能です。
戻り値
TEXTまたはNTEXT
すべての引数がTEXT値である場合、戻り値はTEXTです。すべての引数がNTEXT値である場合、戻り値はNTEXTです。引数にTEXTとNTEXTの両方の値が存在する場合は、すべてのTEXT値がNTEXT値に変換されてからファンクションの演算が実行され、戻り値はNTEXTになります。
KEYファンクションは、結合ディメンションまたはコンポジットの値に対して指定されたベース・ディメンションの値を返します。
パラメータ
結合ディメンションまたはコンポジットの値を指定する式。結合ディメンションを指定した場合、KEYはステータスにある最初の値を使用します。コンポジットを指定した場合、KEYはコンポジットのすべてのベース・ディメンションについて、ステータスにある最初の値を使用します。
ベース・ディメンション値を調べる対象である、以前に指定した結合ディメンションまたはコンポジットのベース・ディメンションの名前を表す式。
例
例7-139 結合に関するレポート
結合ディメンションによってディメンション化されたデータに関するレポートを生成するとします。KEYファンクションを使用すると、各結合ディメンション値のベース値を各行のラベルにすることができます。ベース値はそれぞれ別々の列に配置されるため見やすくなります。
次のプログラムの抜粋は、結合ディメンションproddist
をループ処理しますが、このディメンションの値はproduct
およびdistrict
の組合せです。また、proddist
によってディメンション化されるdsales
という名前の変数があるとします。
DEFINE proddist DIMENSION <product district> LD Conjoint dimension made up of combinations of product and district values DEFINE dsales VARIABLE DECIMAL <month proddist> LD Sparse sales data made dense by dimensioning by conjoint dimension proddist
次のプログラムの抜粋は、3か月間のdsales
を表示します。結合ディメンション値のベース値はそれぞれ独立した列として表示されます。比較のため、2番目のループではKEYファンクションを使用せずに結合ディメンションを直接使用します。結合ディメンション値は1つの列で山カッコで囲まれて表示されます。
LIMIT month TO FIRST 3 FOR proddist ROW KEY(proddist district) KEY( proddist product) ACROSS month: dsales BLANK 2 FOR proddist ROW W 25 proddist ACROSS month: dsales
このプログラムによって次のレポートが生成されます。
Boston Tents 32,153.52 32,536.30 43,062.75 Denver Canoes 45,467.80 51,737.01 58,437.11 Atlanta Sportswear 114,446.26 123,164.92 138,601.64 <Tents, Boston> 32,153.52 32,536.30 43,062.75 <Canoes, Denver> 45,467.80 51,737.01 58,437.11 <Sportswear, Atlanta> 114,446.26 123,164.92 138,601.64