ROWコマンドは、単一の行のセルに一連のデータを連続して生成するコマンドです。一連のROWコマンドは、対応するセルをそれぞれ生成し、これによりデータの列が作成されます。このため、通常、ROWコマンドは一連の列を生成するコマンドと言えます。ROWコマンドによる出力は、現行の出力ファイルに送信されます。
一般にROWコマンドは、レポート書込み文としてまとめて考えることができる他のコマンド、ファンクションおよびオプションとともに使用されます。
ROWコマンドは、生成するデータおよびデータの出力書式(オプション)を指定する一連の列説明で構成されます。
さらに、ROWには行および列の計算を実行するための幅広い機能があります。計算を実行して計算結果を出力に含めることができます。あらゆる種類の計算式を列説明で使用できます。また、行および列の合計ファンクションを利用できます(表10-6「行と列の計算」を参照)。
ROWは、主にレポート・プログラムで使用してレポートの行を生成します。レポートにおける行の最大幅は4000文字です。
ヒント: ROWコマンドの小計機能を必要としないことが前もって明らかな場合、ROWコマンドのかわりにHEADING文を使用してレポートの行を生成すると、Oracle OLAPは小計を管理しないので時間を節約できます。 |
構文
ROW [attributes] [ACROSS dimension [limit-clause]:] {exp1|SKIP } -
[[attributes] [ACROSS dimension [limit-clause]:] {expn|SKIP }]
引数
引数を持たないROWは、空白行を生成します。
列に関する1つ以上の属性。属性とは、列内でデータ値を書式化する方法を決定する書式指定です。列書式の記述に使用できる属性の数に制限はありません(使用できる属性については、表10-5「ROWの列属性」を参照)。一部の書式属性のデフォルトは、Oracle OLAPオプションの現在の設定に依存しています(これらのオプションのリストについては、表10-7「レポート関連のオプション」を参照)。
ACROSS句では、式のディメンション(またはコンポジット)のいずれか1つをループし、ディメンション化された式の複数の値を単一行に挿入します。通常のROWは、現在の制限内で最初のディメンション値に対応する値を表示するのみです。ACROSS句を使用すると、ROWは現在ステータスにある各ディメンション値について1つのデータ列を生成します。
複数のデータ式に同じACROSS句を適用することも、異なるデータ式ごとに別のACROSS句を適用することもできます。「複数式」および「個別のACROSS句」を参照してください。
文をループさせるディメンションまたはコンポジットの名前。
コンポジットでディメンション化された変数のデータを表示するときにACROSS句を含めない場合、ROWはコンポジットのベース・ディメンション値に対応するすべてのデータ・セルの出力を表示します。ベース・ディメンション値の組合せで特定のコンポジットが存在しない場合、ROWは対応するデータ・セルにNA
を表示します。同様に、ACROSS句でコンポジットのベース・ディメンションのいずれかを指定すると、ROWはコンポジットに値が存在しないデータ・セルにNA
を表示します。ただし、ACROSS句でコンポジットを指定すると、ROWはコンポジットにベース・ディメンション値の組合せが存在するデータ・セルにのみ出力を表示します。この場合、データをより的確に反映する簡潔なレポートが生成されます。
ACROSS句で指定されたディメンションがNULLステータスである場合、ROWはそのACROSS句に対してデータ列を生成しません。
ACROSS句でディメンションを指定する場合は、この句を使用すると、ROW文を実行している間、そのディメンションのステータスを一時的に変更できます。
limit-clauseの構文は、各種LIMITコマンドにおけるlimit-clause引数の構文(つまり、LIMITコマンドの「TO」などのlimit-type引数の後の構文)と同じです。これらの引数の構文については、LIMITコマンド(値を使用)、LIMITコマンド(LEVELRELを使用)、LIMITコマンド(親リレーションを使用)、LIMITコマンド(関連ディメンションを使用)、LIMITコマンド(NOCONVERTを使用)およびLIMITコマンド(POSLISTを使用)を参照してください。
次の例は、月の現行のステータスに関係なく、一時的に月を最新の6つの値に制限します。
ACROSS month LAST 6: units
指定する制限によってディメンションのステータスが空になる場合は、エラーが発生します。ただし、IFNONE label句が含まれている場合、エラーが表示されずにプログラムの実行は指定されたラベルに分岐するため、ここでエラーを処理できます。
注意: ACROSS句でコンポジットを指定する場合、limit-clause引数を含めることはできません。ROW文を実行する前に、LIMITコマンドでコンポジットのベース・ディメンションを目的の値に制限する必要があります。 |
式のかわりに使用され、その列を空白のままにすることを示します。
属性 | 意味 |
---|---|
WIDTH n (W n) |
列の幅を空白n個分にする。最初の列のデフォルトの幅は、LCOLWIDTHオプションの値。他の列は、COLWIDTHオプションの値。最大幅は4000文字。幅が |
SPACE n (SP n) |
n個の空白を列の前に挿入。最初の列のデフォルト値は |
INDENT n |
列内で、値を空白n個分インデント。デフォルトは0。 |
LEFT (L) |
列内で値を左揃え。これはTEXTデータのデフォルトの設定。 |
RIGHT (R) |
列内で値を右揃え。これは数値データおよびブール・データのデフォルトの設定。 |
CENTER (C) |
列内で値を中央揃え。 |
LSET 'text' |
textを値の左側に追加。 |
NOLSET |
値の左側に何も追加しない。 |
RSET 'text' |
textを値の右側に追加。 |
NORSET |
値の右側に何も追加しない。 |
FILL 'char' |
列の未使用の位置にcharを置く。デフォルトの埋込み文字は空白。 |
DECIMAL n (D n) |
小数桁をn桁表示。小数桁は、DECIMALCHARオプションに現在指定されている文字で区切られる。小数桁の数のデフォルト値は、DECIMALSオプションで制御される。 |
NODECIMAL |
DECIMALSオプションで指示された小数桁の桁数を表示。 |
COMMA |
カンマ、またはTHOUSANDSCHARオプションに現在記録されている文字で、3桁および6桁を区切る。デフォルト値はCOMMASオプションで制御される。 |
NOCOMMA |
3桁および6桁を文字で区切らない。 |
PAREN |
カッコを使用して負の数を表す。デフォルト値はPARENSオプションで制御される。 |
NOPAREN |
マイナス符号を使用して負の数を表す。デフォルト値はPARENSオプションで制御される。 |
LEADINGZERO |
|
NOLEADINGZERO |
|
CNLEADINGZERO |
有効桁を切り捨てない場合、 |
MNOTATION |
常にM表記法を使用(百万で除算した値に |
CMNOTATION |
値が列の中に収まるために必要な場合、条件付きでM表記法を使用。 |
NOMNOTATION |
M表記法を使用しない(サイズの大きすぎる値にはアスタリスクを使用)。 |
MDECIMAL n |
M表記法で書式化された値の小数点以下の桁をn桁まで表示。nの値は0〜16または255。 |
ENOTATION |
指数表記法またはE表記法とも呼ばれる科学表記法を使用(値の後に |
CENOTATION |
値が列の中に収まるために必要な場合、条件付きでE表記法を使用。 |
NOENOTATION |
E表記法を使用しない(デフォルトの設定は条件付きのM表記法)。 |
EDECIMAL n |
E表記法で書式化された値の小数点以下の桁をn桁まで表示。nの値は0〜16または255。 |
NASPELL 'text' |
|
NONASPELL |
NASPELLオプションに指定した内容で |
ZSPELL 'text' |
ゼロの数値のかわりにtextを使用。デフォルト値はZSPELLオプションで制御される。 |
NOZSPELL |
ZSPELLオプションで指定した内容でゼロ値を表示。 |
YESSPELL 'text' |
|
NOSPELL 'text' |
|
TRUNCATE (TRUNC) |
文字値が列に収まらない場合、文字値を列幅に合せて切り捨てる。 |
NOTRUNCATE (NOTRUNC) |
文字値が列に収まらない場合、追加の行を生成。 |
FOLDUP |
複数行の文字値の場合、最後の行のみを他の値と並べて表示し、それ以外の行は上部に配置。また、先行または後続の空白を削除。 |
FOLDDOWN |
複数行の文字値の場合、最初の行を他の値と並べて表示し、それ以外の行をその下に配置。また、先行または後続の空白を削除。 |
VALONLY |
値に対してのみ下線または上線を引く(UNDERおよびOVERと組み合せて使用)。 |
NOVALONLY |
列の幅全体に下線または上線を引く(UNDERおよびOVERと組み合せて使用)。 |
UNDER textexp |
文字式(textexp)の値を持つ値に下線を引く。textexpがリテラル値の場合は、一重引用符で囲まなければならない。有効なリテラル値は、値または列に下線を引く 条件が一致した場合にのみ下線を引くには、textexpに次の文を使用する。
|
OVER textexp |
文字式(textexp)の値を持つ値に上線を引く。textexpがリテラル値の場合は、一重引用符で囲まなければならない。有効なリテラル値は、値または列に上線を引く 条件が一致した場合にのみ上線を引くには、textexpに次の文を使用する。
|
表10-6「行と列の計算」に示すファンクションを使用すると、すでにレポートに生成されている値に対して計算を実行できます。
表10-6 行と列の計算
ファンクション | データ型 | 戻り値 |
---|---|---|
COLVAL(n) |
DECIMAL |
現行の行のn番目の列の値。n >
|
RUNTOTAL(n) ここで、 n = 1、2、...32 |
DECIMAL |
nについて、SUBTOTALまたはZEROTOTALが最後に実行されてから現行の列で生成されたすべての数字の合計。nの合計を |
SUBTOTAL(n) ここで、 n = 1、2、...32 |
DECIMAL |
nについて、SUBTOTALまたはZEROTOTALが最後に実行されてから現行の列で生成されたすべての数字の合計。nの合計を
|
表10-7「レポート関連のオプション」に示すオプションは、ROWコマンドのデフォルトの書式に影響を与えます。
表10-7 レポート関連のオプション
オプション | 意味 |
---|---|
COLWIDTH |
WIDTH属性を使用しない場合の最初の列以外の列幅。デフォルトは |
COMMAS |
COMMA属性およびNOCOMMA属性を使用しない場合に3桁区切り文字を使用するかどうかを指定。デフォルトは |
DECIMALS |
DECIMAL属性を使用しない場合の小数点以下の桁数。デフォルトは |
LCOLWIDTH |
WIDTH属性を使用しない場合の最初の列の列幅。デフォルトは |
LSIZE |
STDHDRプログラムが標準ヘッダーを中央揃えする行サイズを定義。デフォルトは |
NASPELL |
NASPELL属性を使用しない場合に |
NLS_LANGUAGE |
|
NLS_TERRITORY |
小数点および3桁を区切る文字を指定。これらの値は、DECIMALCHARおよびTHOUSANDSCHARオプションに反映される。 |
PARENS |
PAREN属性およびNOPAREN属性を使用しない場合に、負の数にカッコを使用。デフォルトは |
ZEROROW |
すべての数値がゼロの行の生成または非表示を制御。デフォルトは |
ZSPELL |
ZSPELL属性を使用しない場合にゼロ値に使用するテキスト。デフォルトのテキストは |
表10-8「ROWコマンドと互換性のあるOLAP DML文」に示す文をROWコマンドとともに使用します。
表10-8 ROWコマンドと互換性のあるOLAP DML文
コマンド | 処理 |
---|---|
BLANK n |
n行の空白行を生成。デフォルトは1行。 |
HEADING column- description(s) |
レポートのタイトルおよび列ヘッダーを生成。ヘッダーの数値は列合計に加算されない。 |
PAGE |
PAGINGの設定が |
ZEROTOTAL |
すべての列について、32の合計をすべて |
ZEROTOTAL ALL col(s) |
指定した列について、または列引数がない場合はすべての列について、32の合計をすべて |
ZEROTOTAL n col(s) |
指定した列について、または列引数がない場合はすべての列について、指定された合計(n)を |
注意
レポート書込みのコマンド
ROWコマンドと関連付けられているオプションおよびコマンドは、まとめてレポート書込み文と呼ばれます。表10-6「行と列の計算」は、レポートで行と列の計算に使用できるファンクションを示します。表10-7「レポート関連のオプション」は、ROW出力のデフォルトの書式を決定するレポート関連のオプションを示します。表10-8「ROWコマンドと互換性のあるOLAP DML文」は、レポートを作成する際、ROWと組み合せて使用する追加文を示します。PAGINGオプションと関連付けられているページング関連のオプションを使用して、ページ向け書式のレポート・プログラムを作成できます。
コンポジットと結合ディメンションのラベル
ディメンション・リストにコンポジットまたは結合ディメンションを持つデータのレポートを生成する場合、KEYファンクションを使用してベース・ディメンションごとにラベル列を生成できます。また、ラベル列ごとに別のWIDTH属性を指定できます。たとえば、ベース・ディメンションproduct
およびdistrict
によるコンポジットであるproddist
の場合、次のような文を使用できます。
FOR proddist ROW W 12 KEY(proddist district) W 8 KEY(proddist product) ...
複数式
同じ書式属性またはACROSS句を複数のデータ式に適用する場合は、それらの式を山カッコ(<
>
)で囲み、共通の属性またはACROSS句をそのカッコで囲んだ式の直前に置きます。
attributes <expression1, expression2, ...>
または
ACROSS dimension: <expression1, expression2, ...>
山カッコ内の式のいずれか1つにのみ適用する属性がある場合は、その式の直前に適用する属性を置きます。
attributes1 <expression1, attributes2 expression2>
山カッコ内の属性(ある列に固有)がカッコ外の属性(複数の列に共通)と矛盾する場合、固有の属性が共通の属性よりも優先されます。
左右のカッコの数が同じであるかぎり、カッコは任意の深さまでネストできます。
個別のACROSS句
ACROSS句で生成するデータの場合、ある式のすべての列を作成してから、別のACROSS句を使用して追加する式にそのすべての列を作成できます。
ACROSS dim: expression1, ACROSS dim: expression2
また、ACROSS句をネストして、式の2つ以上のディメンションのデータ列を行全体に表示できます。
ACROSS dim1: ACROSS dim2: expression
行と列の計算
行と列の計算に使用できるファンクションのリストは、表10-6「行と列の計算」を参照してください。これらのファンクションを使用して、レポートの生成済の値に計算を実行できます。Oracle OLAPでは、列ごとに32の現在までの合計を保持するため、レポートには最大で32レベルの小計を含めることができます。ただし、数値が大きすぎるためにデータ・セルに収まらない場合、ROWはセルの右側に記号Mを付けて最も近い百万の単位にその数値を丸めます。それでも値が大きすぎる場合、値はアスタリスクに置き換えられます。
コンポジットでディメンション化された変数とROWを使用する場合のパフォーマンスのヒント
デフォルトでは、ROWが明示的にコンポジットをループする場合、または明示的にコンポジットをループするFORループでROWを実行する場合、Oracle OLAPはコンポジットのベース・ディメンションにおける値の現行の順序に従ってコンポジットの値をソートします。ソートの作業には一定の処理時間が必要なため、変数が大きい場合はパフォーマンスに影響することがあります。変数の規模が非常に大きく、ROW出力の生成順序よりもパフォーマンスを重視する場合は、SORTCOMPOSITEオプションをNO
に設定します。
例
例10-109 データ値のラベリング
この例では、ROWは、sales
の値とそれを特定するdistrict
、month
およびproduct
の対応するディメンション値を含む出力行を生成します。
ROW W 8 district month product sales
この文によって生成される出力は、次のとおりです。
Boston Jan95 Tents 32,153.52
例10-110 2つの変数のレポート
このROW文で生成される出力行には、district
の現行のディメンション値、その後ろに1996年の最初の2か月に関するスポーツウェアのsales
およびsales.plan
の値が表示されます。
LIMIT month TO 'Jan96' 'Feb96' LIMIT product TO 'Sportswear' ROW W 8 district ACROSS month: <sales sales.plan>
この文によって生成される出力は、次のとおりです。
Boston 57,079.10 61,434.20 63,121.50 64,006.91
例10-111 出力の書式設定とラベリング
このROW文では、1996年のテントについて実際の売上高および予定売上高を表示します。month
のステータスをこのROW文についてのみ制限するため、ACROSS句に値Jun96
を含めます。値はドル単位の整数値として書式化し、さらに、その値にはドル記号、および実績値か予測値かを区別するラベルをそれぞれ付けます。
LIMIT product TO 'Tents' ROW WIDTH 15 name.product ACROSS month 'Jun96': - DECIMAL 0 LSET '$' W 18 - <RSET ' (actual)' sales - RSET ' (plan)' sales.plan>
この文によって生成される出力は、次のとおりです。
3-Person Tents $95,121 (actual) $80,138 (plan)
例10-112 コンポジットでディメンション化された変数に関するレポート
この例で、D.SALESはディメンション・リストにディメンションmonth
および名前のないコンポジットSPARSE
<product
district>
を含む変数です。ROW文のACROSS句でコンポジットを指定することにより、コンポジットに値が含まれるデータ・セルのみを含むレポートを作成できます。
LIMIT product TO ALL LIMIT district TO 'Atlanta' LIMIT month TO 'Jan96' ROW ACROSS SPARSE <product district>: d.sales