Oracle® OLAP

DMLリファレンス

12cリリース1 (12.1)

B71310-04(原本部品番号:E17673-12)

2016年4月

Oracle OLAP DMLリファレンス, 12cリリース1 (12.1)

B71310-04

Copyright © 1994, 2016, Oracle and/or its affiliates. All rights reserved.

原本著者: David McDermid

原本協力者:  Oracle Database 12cのドキュメントを、本リリースに携わった全員にとって創造の源となったMark Townsendに捧げます。

原本協力者: Donna Carver、Chris Chiappa、Steve Donnelly、Roger Johnson、A.A. Hopeman、Kathy Taylor、Betsy Vanasse

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、このソフトウェアまたはハードウェアを安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle およびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXはThe Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

『Oracle OLAP DMLリファレンス』のこのリリースにおける変更内容

- Oracle Database 12cリリース1 (12.1)におけるOracle OLAPの変更内容

1 OLAP DMLの基礎概念

- OLAP DMLの概略

- キューブ対応のOLAP DML文

- アナリティック・ワークスペース・オブジェクトを直接処理するOLAP DML文

- OLAP DMLの構文の基本単位

- OLAP DML文の実行方法

- アナリティック・ワークスペースの概要

- アナリティック・ワークスペースの作成および削除に必要な権限

- 新しいアナリティック・ワークスペースの定義

- 定義済アナリティック・ワークスペースでの処理

- アナリティック・ワークスペースに関する情報の表示

- アナリティック・ワークスペースのデータ・オブジェクトの概要

- アナリティック・ワークスペースのデータ・オブジェクトの型

- 変数

- 変数をディメンション化できるオブジェクト

- リレーション

- 値セットとサロゲート・オブジェクト

- 階層の使用をサポートするオブジェクト

- hierlistディメンション

- parentrelリレーション

- levellistディメンション

- hierlevels値セット

- inhier値セットまたは変数

- levelrelリレーション

- familyrelリレーション

- gidrelリレーション

- すべてのデータ・オブジェクトの値に対するOLAP DML文の適用

- 文のデフォルトのループ動作の変更

- OLAP DML処理対象のデータ・セットの指定方法

- ステータス・リストの概要

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

- 現行のステータス・リスト

- データのサブセットを処理するための現行のディメンション・ステータスの変更

- 現行のディメンション・ステータスの保存およびリストア

- ステータスを変更せずにデータのサブセットを使用する方法

- 多次元階層データ・オブジェクトの移入

2 データ型、演算子および式

- OLAP DMLのデータ型

- 数値データ型

- LONGINTEGER値の使用

- NUMBER値の使用

- テキスト・データ型

- テキスト・リテラル

- エスケープ・シーケンス

- 日付のみのデータ型

- 日付のみの入力値

- 日付のみのディメンション値

- 日付のみの変数表示スタイル

- 日時データ型と期間データ型

- 日時フィールドと期間フィールド

- 日時書式テンプレート

- 文字列から日付への変換ルール

- DATETIMEデータ型

- TIMESTAMPデータ型

- TIMESTAMP_TZデータ型

- TIMESTAMP_LTZデータ型

- YMINTERVALデータ型

- DSINTERVALデータ型

- ブール・データ型

- RAWデータ型

- 行識別子データ型

- ROWIDデータ型

- UROWIDデータ型

- データ型の変換

- テキスト・データ型の自動変換

- 数値データ型の自動変換

- OLAP DML演算子

- 算術演算子

- 比較演算子および論理演算子

- 代入演算子

- OLAP DML式

- OLAP DML式の概要

- 式のデータ型を判定する方法

- 式のディメンション性を判定する方法

- 式のディメンションの判定

- ディメンション・ステータスによる式の結果(値の数)への影響

- 式でのワークスペース・オブジェクトの使用方法

- 式におけるOLAP DMLデータ・オブジェクトの動作

- 式にオブジェクトを指定する構文

- 修飾オブジェクト名を作成および使用する際の注意点

- 式におけるディメンションとコンポジットの値の指定

- コンポジットの値の指定

- CONCATディメンションの値の指定

- 式における関連ディメンションの使用方法

- 式における変数とリレーションの使用方法

- ステータスを変更せずにディメンションを単一の値に制限する方法

- 修飾データ参照の構文

- 変数の修飾

- 変数のディメンションの置換

- リレーションの修飾

- ディメンションの修飾

- QDRとアンパサンド置換の使用

- 式における空のセルでの処理

- NA値の指定

- NA値の処理方法の制御

- 数式

- 数値データ型の混在

- 算術式におけるテキスト・ディメンションの使用方法

- 浮動小数点計算の制限

- 計算中のエラーの制御

- テキスト式

- テキスト式の言語

- テキスト式におけるDATETIME値の処理

- NTEXTデータの処理

- 日時式と期間式

- 日時式

- 期間式

- 日時と期間の演算

- 日付のみの式

- ブール式

- ブール式の作成

- ブール式におけるNA値の比較

- 数値データを比較する際のエラーの制御

- 数値精度によるエラーの制御

- 浮動小数点数を比較する際のエラーの制御

- 異なる数値データ型を比較する際のエラーの制御

- ディメンション値の比較

- 日付の比較

- テキスト・データの比較

- テキスト値とテキスト・パターンの比較

- テキスト・リテラルとリレーションの比較

- 条件式

- IF...THEN...ELSE式

- SWITCH式

- 置換式

3 計算式、モデル、集計および割当て

- 計算オブジェクトの作成

- OLAP DML計算式

- OLAP DMLモデル・オブジェクト

- OLAP DMLモデルの概要

- モデルの作成

- モデルのネスト

- ディメンション・ステータスおよびモデル方程式

- 過去および将来の時間間隔からのデータの使用

- モデルにおけるNA値の処理

- 連立方程式の解決

- 複数のシナリオのモデリング

- モデルのコンパイル

- 方程式内の名前の解決

- ディメンションをループ処理するためのコード

- プログラム引数の評価

- 方程式間の依存性

- 解析結果の取得

- その他の問題の確認

- モデルの実行

- モデル実行用の構文

- ソリューション変数のディメンション

- モデルのデバッグ

- OLAP DML集計オブジェクト

- OLAP DML集計の概要

- OLAP DMLを使用したデータの集計

- 集計仕様のコンパイル

- 集計の実行

- カスタム集計の作成

- OLAP DML割当てオブジェクト

- OLAP DMLを使用したデータの割当ての概要

- Oracle OLAPの割当ての機能

- データの割当て

- データ割当て時のNA値の処理

4 OLAP DMLプロパティ

- OLAP DMLプロパティの概要

- システム・プロパティ: アルファベット順

- カテゴリ別のシステム・プロパティ

- $AGGMAP

- $AGGREGATE_FORCECALC

- $AGGREGATE_FORCEORDER

- $AGGREGATE_FROM

- $AGGREGATE_FROMVAR

- $ALLOCMAP

- $COUNTVAR

- $DEFAULT_LANGUAGE

- $GID_DEPTH

- $GID_LIST

- $GID_TYPE

- $LOOP_AGGMAP

- $LOOP_DENSE

- $LOOP_TYPE

- $LOOP_VAR

- $NATRIGGER

- $STORETRIGGERVAL

- $VARCACHE

5 OLAP DMLオプション

- オプションの概要

- オプション: アルファベット順

- カテゴリ別のオプション

- ALLOCERRLOGFORMAT

- ALLOCERRLOGHEADER

- AWWAITTIME

- BADLINE

- BMARGIN

- CALENDARWEEK

- COLWIDTH

- COMMAS

- COMPILEMESSAGE

- COMPILEWARN

- DATEFORMAT

- DATEORDER

- DAYABBRLEN

- DAYNAMES

- DECIMALCHAR

- DECIMALOVERFLOW

- DECIMALS

- DEFAULTAWSEGSIZE

- DIVIDEBYZERO

- DSECONDS

- ECHOPROMPT

- EIFBYTES

- EIFEXTENSIONPATH

- EIFNAMES

- EIFSHORTNAMES

- EIFTYPES

- EIFUPDBYTES

- EIFVERSION

- ERRNAMES

- ERRORNAME

- ERRORTEXT

- ESCAPEBASE

- EXPTRACE

- INF_STOP_ON_ERROR

- LCOLWIDTH

- LIKECASE

- LIKEESCAPE

- LIKENL

- LIMIT.SORTREL

- LIMITSTRICT

- LINENUM

- LINESLEFT

- LOCK_LANGUAGE_DIMS

- LSIZE

- MAXFETCH

- MODDAMP

- MODERROR

- MODGAMMA

- MODINPUTORDER

- MODMAXITERS

- MODOVERFLOW

- MODSIMULTYPE

- MODTOLERANCE

- MODTRACE

- MONTHABBRLEN

- MONTHNAMES

- MULTIPATHHIER

- NASKIP

- NASKIP2

- NASPELL

- NLS_CALENDAR

- NLS_CURRENCY

- NLS_DATE_FORMAT

- NLS_DATE_LANGUAGE

- NLS_DUAL_CURRENCY

- NLS_ISO_CURRENCY

- NLS_LANG

- NLS_LANGUAGE

- NLS_NUMERIC_CHARACTERS

- NLS_SORT

- NLS_TERRITORY

- NOSPELL

- OKFORLIMIT

- OKNULLSTATUS

- OUTFILEUNIT

- PAGENUM

- PAGEPRG

- PAGESIZE

- PAGING

- PARENS

- PERMITERROR

- PERMITREADERROR

- PRGTRACE

- RANDOM.SEED.1およびRANDOM.SEED.2

- RECURSIVE

- ROLE

- ROOTOFNEGATIVE

- SECONDS

- SESSCACHE

- SESSION_NLS_LANGUAGE

- SPARSEINDEX

- SQLBLOCKMAX

- SQLCODE

- SQLERRM

- SQLMESSAGES

- STATIC_SESSION_LANGUAGE

- THIS_AW

- THOUSANDSCHAR

- TMARGIN

- TRACEFILEUNIT

- TRIGGERMAXDEPTH

- TRIGGERSTOREOK

- USERID

- USETRIGGERS

- VARCACHE

- WEEKDAYSNEWYEAR

- WRAPERRORS

- YESSPELL

- YRABSTART

- ZEROROW

- ZSPELL

6 OLAP DMLプログラム

- OLAP DMLから提供されるプログラム

- OLAP DMLプログラムの作成

- プログラム内容の指定

- ユーザー定義ファンクションの作成

- 引数の受渡し

- 複数の引数の使用

- 特定のデータ型への値の変換を行わない引数の処理

- アンパサンド置換によるテキスト引数の受渡し

- プログラムのフロー制御

- 環境設定の保存

- プログラム環境の変更

- 環境を保存およびリストアする方法

- ディメンションのステータスまたはオプションの値の保存

- 複数の値の同時保存

- レベル・マーカーの使用

- CONTEXTを使用した複数の値の同時保存

- エラーの処理

- エラー・トラップ

- コール側プログラムへのエラーの受渡し

- エラーの受渡し: 方法1

- エラーの受渡し: 方法2

- エラー・メッセージの抑止

- 独自のエラー・メッセージの作成

- ネストしたプログラムでのエラーの処理

- セッション環境の保存中のエラーの処理

- プログラムのコンパイル

- プログラムがコンパイルされたかどうかの確認

- コンパイルを回避するプログラミング方法

- プログラムのテストとデバッグ

- 診断メッセージの生成

- 不適切なコード行の識別

- デバッグ・ファイルへの出力の送信

- プログラムの実行

- OLAP DMLプログラムの代表的なタイプ

- 起動プログラム

- 権限プログラム

- ONATTACHプログラム

- AUTOGOプログラム

- データのインポートおよびエクスポート・プログラム

- リレーショナル表に対するデータのインポートおよびエクスポート

- リレーショナル表からワークスペース・オブジェクトへのデータのインポート

- OLAP DMLオブジェクトからリレーショナル表へのデータのエクスポート

- フラット・ファイルに対するデータのインポートおよびエクスポート

- スプレッドシートに対するデータのインポートおよびエクスポート

- トリガー・プログラム

- オブジェクト・トリガー・プログラムの作成

- オブジェクト・トリガー・プログラムの特長

- 集計、割当て、およびモデリングのプログラム

- 予測プログラム

- ワークスペース・オブジェクトをエクスポートおよびインポートするプログラム

- Oracle OLAPによって検索されるユーザー作成のプログラム

- AUTOGO

- ONATTACH

- ONDETACH

- PERMIT_READ

- PERMIT_WRITE

- TRIGGER_AFTER_UPDATE

- TRIGGER_AW

- TRIGGER_BEFORE_UPDATE

- TRIGGER_DEFINE

7 OLAP DMLファンクション: AからK

- OLAP DMLファンクションの概要

- ファンクション: アルファベット順

- カテゴリ別のファンクション

- ABS

- ADD_MONTHS

- AGGCOUNT

- AGGMAPINFO

- AGGREGATEファンクション

- AGGREGATION

- AGGROPS

- ALLOCOPS

- ANTILOG

- ANTILOG10

- ANY

- ARCCOS

- ARCSIN

- ARCTAN

- ARCTAN2

- ARG

- ARGCOUNT

- ARGFR

- ARGS

- ASCII

- ASCIISTR

- AVERAGE

- AWファンクション

- BACK

- BASEDIM

- BASEVAL

- BEGINDATE

- BIN_TO_NUM

- BITAND

- BLANKSTRIP

- CALLTYPE

- CATEGORIZE

- CEIL

- CHANGEBYTES

- CHANGECHARS

- CHANGEDRELATIONS

- CHANGEDVALUES

- CHARLIST

- CHARTOROWID

- CHGDIMS

- CHR

- COALESCE

- COLVAL

- CONTEXTファンクション

- CONVERT

- CORRELATION

- COS

- COSH

- COUNT

- CUMSUM

- CURRENT_DATE

- CURRENT_TIMESTAMP

- DAYOF

- DBTIMEZONE

- DDOF

- DECODE

- DEPRDECL

- DEPRDECLSW

- DEPRSL

- DEPRSOYD

- ENDDATE

- ENDOF

- EVERY

- EXISTS

- EXP

- EVERSION

- EXTBYTES

- EXTCHARS

- EXTCOLS

- EXTLINES

- EXTRACT

- FCOPEN

- FCQUERY

- FILEERROR

- FILEGET

- FILENEXT

- FILEOPEN

- FILEQUERY

- FILTERLINES

- FINDBYTES

- FINDCHARS

- FINDLINES

- FINTSCHED

- FLOOR

- FPMTSCHED

- FROM_TZ

- GET

- GREATEST

- GROUPINGIDファンクション

- GROWRATE

- HEXTORAW

- HIERCHECK

- HIERHEIGHT

- HIERSHAPE

- INFO

- INFO(FORECAST)

- INFO(MODEL)

- INFO(PARSE)

- INFO(REGRESS)

- INITCAP

- INLIST

- INSBYTES

- INSCHARS

- INSCOLS

- INSLINES

- INSTAT

- INSTRファンクション

- INTPART

- IRR

- ISDATE

- ISEMPTY

- ISINFINITE

- ISNAN

- ISSESSION

- ISVALUE

- JOINBYTES

- JOINCHARS

- JOINCOLS

- JOINLINES

- KEY

8 OLAP DMLファンクション: LからZ

- LAG

- LAGABSPCT

- LAGDIF

- LAGPCT

- LARGEST

- LAST_DAY

- LEAD

- LEAST

- LENGTHファンクション

- LIMITファンクション

- LIMITMAPINFO

- LNNVL

- LOCALTIMESTAMP

- LOGファンクション

- LOG10

- LOWCASE

- LOWER

- LPAD

- LTRIM

- MAKEDATE

- MAX

- MAXBYTES

- MAXCHARS

- MEDIAN

- MIN

- MMOF

- MODE

- MODULO

- MONTHS_BETWEEN

- MOVINGAVERAGE

- MOVINGMAX

- MOVINGMIN

- MOVINGTOTAL

- NA2

- NAFILL

- NAFLAG

- NEW_TIME

- NEXT_DAY

- NLS_CHARSET_ID

- NLS_CHARSET_NAME

- NLSSORT

- NONE

- NORMAL

- NPV

- NULLIF

- NUMBYTES

- NUMCHARS

- NUMLINES

- NUMTODSINTERVAL

- NUMTOYMINTERVAL

- NVL

- NVL2

- OBJ

- OBJLIST

- OBJORG

- OBSCURE

- ORA_HASH

- PARTITION

- PARTITIONCHECK

- PERCENTAGE

- QUAL

- RANDOM

- RANK

- RAWTOHEX

- RECNO

- REGEXP_COUNT

- REGEXP_INSTR

- REGEXP_REPLACE

- REGEXP_SUBSTR

- REM

- REMAINDER

- REMBYTES

- REMCHARS

- REMCOLS

- REMLINES

- REPLACE

- REPLBYTES

- REPLCHARS

- REPLCOLS

- REPLLINES

- RESERVED

- ROUND

- ROUND(日時)

- ROUND(数値)

- ROWファンクション

- ROWIDTOCHAR

- ROWIDTONCHAR

- RPAD

- RTRIM

- RUNTOTAL

- SESSIONTIMEZONE

- SIGN

- SIN

- SINH

- SMALLEST

- SMOOTH

- SORTファンクション

- SORTLINES

- SOUNDEX

- SQLFETCH

- SQRT

- STARTOF

- STATALL

- STATCURR

- STATDEPTH

- STATEQUAL

- STATFIRST

- STATLAST

- STATLEN

- STATLIST

- STATMAX

- STATMIN

- STATRANK

- STATVAL

- STDDEV

- SUBSTRファンクション

- SUBTOTAL

- SYS_CONTEXT

- SYSDATE

- SYSINFO

- SYSTEM

- SYSTIMESTAMP

- TALLY

- TAN

- TANH

- TCONVERT

- TEXTFILL

- TO_BINARY_DOUBLE

- TO_BINARY_FLOAT

- TO_CHAR

- TO_DATE

- TO_DSINTERVAL

- TO_NCHAR

- TO_NUMBER

- TO_TIMESTAMP

- TO_TIMESTAMP_TZ

- TO_YMINTERVAL

- TOD

- TODAY

- TOTAL

- TRANSLATE

- TRIGGERファンクション

- TRIM

- TRUNCATE

- TRUNCATE(日時)

- TRUNCATE(数値)

- TZ_OFFSET

- UNIQUELINES

- UNRAVEL

- UPPER

- UPPER

- VALSPERPAGE

- VALUES

- VINTSCHED

- VPMTSCHED

- VSIZE

- WEEKOF

- WIDTH_BUCKET

- WKSDATA

- WRITABLE

- YYOF

9 OLAP DMLコマンド: AからG

- OLAP DMLコマンドの概要

- コマンド: アルファベット順

- カテゴリ別のコマンド

- ACQUIRE

- ACROSS

- ADD_CUBE_MODEL

- ADD_DIMENSION_MEMBER

- ADD_MODEL_DIMENSION

- AGGMAP

- AGGINDEX

- BREAKOUT DIMENSION

- CACHE

- DIMENSION(集計用)

- DROP DIMENSION

- MEASUREDIM(集計用)

- MODEL(集計内)

- PRECOMPUTE

- RELATION(集計用)

- AGGMAP ADDまたはREMOVEモデル

- AGGMAP SET

- AGGREGATEコマンド

- ALLCOMPILE

- ALLOCATE

- ALLOCMAP

- CHILDLOCK

- DEADLOCK

- DIMENSION(割当て用)

- ERRORLOG

- ERRORMASK

- MEASUREDIM(割当て用)

- RELATION(割当て用)

- SOURCEVAL

- VALUESET

- ALLSTAT

- ARGUMENT

- AWコマンド

- AW ALIASLIST

- AW ATTACH

- AW CREATE

- AW DELETE

- AW DETACH

- AW FREEZE

- AW LIST

- AW PURGE CACHE

- AW ROLLBACK TO FREEZE

- AW SEGMENTSIZE

- AW THAW

- AW TRUNCATE

- AWDESCRIBE

- BLANK

- BREAK

- CALL

- CDA

- CHGDFN

- CLEAR

- COMMIT

- COMPILE

- CONSIDER

- CONTEXTコマンド

- CONTINUE

- COPYDFN

- CREATE_LOGICAL_MODEL

- DATE_FORMAT

- DBGOUTFILE

- DEFINE

- DEFINE AGGMAP

- DEFINE COMPOSITE

- DEFINE DIMENSION

- DEFINE DIMENSION(単純)

- DEFINE DIMENSION(DWMQY)

- DEFINE DIMENSION(結合)

- DEFINE DIMENSION CONCAT

- DEFINE DIMENSION ALIASOF

- DEFINE FORMULA

- DEFINE MODEL

- DEFINE PARTITION TEMPLATE

- DEFINE PROGRAM

- DEFINE RELATION

- DEFINE SURROGATE

- DEFINE VALUESET

- DEFINE VARIABLE

- DEFINE WORKSHEET

- DELETE

- DESCRIBE

- DO ... DOEND

- EDIT

- EQ

- EXPORT

- EXPORT(EIF)

- EXPORT(スプレッドシート)

- FCCLOSE

- FCEXEC

- FCSET

- FETCH

- FILECLOSE

- FILECOPY

- FILEDELETE

- FILEMOVE

- FILEPAGE

- FILEPUT

- FILEREAD

- FILESET

- FILEVIEW

- FOR

- FORECAST

- FORECAST.REPORT

- FULLDSC

- GOTO

- GROUPINGIDコマンド

10 OLAP DMLコマンド: HからZ

- HEADING

- HIDE

- HIERDEPTH

- HIERHEIGHTコマンド

- IF...THEN...ELSEコマンド

- IMPORT

- IMPORT(EIF)

- IMPORT(テキスト)

- IMPORT(スプレッドシート)

- INFILE

- LD

- LIMITコマンド

- LIMITコマンド(値を使用)

- LIMITコマンド(LEVELRELを使用)

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

- LIMIT(親リレーションを使用)

- LIMITコマンド(NOCONVERTを使用)

- LIMITコマンド(POSLISTを使用)

- LIMIT BASEDIMS

- LISTBY

- LISTFILES

- LISTNAMES

- LOAD

- LOGコマンド

- MAINTAIN

- MAINTAIN ADD

- TEXT値、ID値およびINTEGER値に対するMAINTAIN ADD

- DAY値、WEEK値、MONTH値、QUARTER値およびYEAR値に対するMAINTAIN ADD

- MAINTAIN ADD SESSION

- MAINTAIN ADD TO PARTITION

- MAINTAIN DELETE

- ディメンションのMAINTAIN DELETE

- コンポジットのMAINTAIN DELETE

- MAINTAIN DELETE FROM PARTITION

- MAINTAIN MERGE

- MAINTAIN MOVE

- ディメンション値のMAINTAIN MOVE

- MAINTAIN MOVE TO PARTITION

- MAINTAIN RENAME

- MODEL

- DIMENSION(モデル内)

- INCLUDE

- MODEL.COMPRPT

- MODEL.DEPRT

- MODEL.XEQRPT

- MONITOR

- MOVE

- OUTFILE

- PAGE

- PARSE

- PERMIT

- PERMITRESET

- POP

- POPLEVEL

- PROGRAM

- PROPERTY

- PUSH

- PUSHLEVEL

- RECAP

- REDO

- REEDIT

- REGRESS

- REGRESS.REPORT

- RELATIONコマンド

- RELEASE

- REMOVE_CUBE_MODEL

- REMOVE_DIMENSION_MEMBER

- REMOVE_MODEL_DIMENSION

- RENAME

- REPORT

- RESYNC

- RETURN

- REVERT

- ROWコマンド

- SET

- SET1

- SET_INCLUDED_MODEL

- SET_PROPERTY

- SHOW

- SIGNAL

- SLEEP

- SORTコマンド

- SQL

- SQL CLEANUP

- SQL CLOSE

- SQL DECLARE CURSOR

- SQL EXECUTE

- SQL FETCH

- SQL IMPORT

- SQL OPEN

- SQL PREPARE

- SQL PROCEDURE

- SQL SELECT

- STATUS

- STDHDR

- SWITCHコマンド

- TEMPSTAT

- TRACE

- TRACKPRG

- TRAP

- TRIGGERコマンド

- TRIGGERASSIGN

- UNHIDE

- UPDATE

- UPDATE_ATTRIBUTE_VALUE

- UPDATE_DIMENSION_MEMBER

- VARIABLE

- VNF

- WHILE

- ZEROTOTAL

A OLAP_TABLE SQLファンクション

- OLAP_TABLEを使用したリレーショナル・ビューの作成

- 必須のOLAP DMLオブジェクト

- OLAP_TABLEで使用する論理表の作成

- 事前定義されたADTを使用したOLAP_TABLEの使用

- 自動ADTを使用したOLAP_TABLEの使用

- リレーショナル・ビューへの計算された列の追加

- SELECT FROM OLAP_TABLE文でのOLAP DML式の使用

- 単一行ファンクションとして使用するOLAP DML式

- SELECT FROM OLAP_TABLE文からのアナリティック・ワークスペースの変更

- OLAP_TABLE

- OLAP_CONDITION

- OLAP_EXPRESSION

- OLAP_EXPRESSION_BOOL

- OLAP_EXPRESSION_DATE

- OLAP_EXPRESSION_TEXT

B DBMS_AW PL/SQLパッケージ

- アナリティック・ワークスペースの管理

- SQL文へのOLAP DMLの埋込み

- OLAP DMLコマンドの実行方法

- OLAP DMLコマンドで引用符を使用する場合のガイドライン

- スパース性アドバイザの使用

- アナリティック・ワークスペースにおけるデータ格納オプション

- 最適なデータ格納方法の選択

- スパース性アドバイザの使用

- 例: GLOBALスキーマでのスパース性の評価

- サンプル・プログラムからのアドバイス

- AW_SPARSITY_ADVICE表に格納される情報

- 集計アドバイザの使用

- ワークスペースの集計機能

- 例: ADVISE_RELプロシージャの使用

- DBMS_AWサブプログラムの概要

- ADD_DIMENSION_SOURCEプロシージャ

- ADVISE_CUBEプロシージャ

- ADVISE_DIMENSIONALITYファンクション

- ADVISE_DIMENSIONALITYプロシージャ

- ADVISE_PARTITIONING_DIMENSIONファンクション

- ADVISE_PARTITIONING_LEVELファンクション

- ADVISE_RELプロシージャ

- ADVISE_SPARSITYプロシージャ

- AW_ATTACHプロシージャ

- AW_COPYプロシージャ

- AW_CREATEプロシージャ

- AW_DELETEプロシージャ

- AW_DETACHプロシージャ

- AW_RENAMEプロシージャ

- AW_TABLESPACEファンクション

- AW_UPDATEプロシージャ

- CONVERTプロシージャ

- EVAL_NUMBERファンクション

- EVAL_TEXTファンクション

- EXECUTEプロシージャ

- GETLOGファンクション

- INFILEプロシージャ

- INTERPファンクション

- INTERPCLOBファンクション

- INTERP_SILENTプロシージャ

- OLAP_ONファンクション

- OLAP_RUNNINGファンクション

- PRINTLOGプロシージャ

- RUNプロシージャ

- SHUTDOWNプロシージャ

- SPARSITY_ADVICE_TABLEプロシージャ

- STARTUPプロシージャ

C OLAP_API_SESSION_INIT PL/SQLパッケージ

- OLAP APIの初期化パラメータ

- 構成表の表示

- ALL_OLAP_ALTER_SESSIONビュー

- OLAP_API_SESSION_INITサブプログラムの概要

- ADD_ALTER_SESSIONプロシージャ

- CLEAN_ALTER_SESSIONプロシージャ

- DELETE_ALTER_SESSIONプロシージャ

D 以前のリリースでの変更

- Oracle Database 11gでのOLAP DML文の変更

- Oracle Database 11gで追加された文

- Oracle Database 11gで削除された文

- Oracle Database 11gで変更された文

- Oracle Database 11gで名前が変更された文

- Oracle Database 10gでのOLAP DML文の変更

- Oracle Database 10gで追加された文

- Oracle Database 10gで削除された文

- Oracle Database 10gで変更された文

- Oracle Database 10gで名前が変更された文

- Oracle Database 9iでのOLAP DML文の変更

- Oracle Database 9iで追加された文

- Oracle Database 9iで削除された文

- Oracle Database 9iで変更された文

- Oracle Database 9iで名前が変更された文

索引

はじめに

『Oracle OLAP DMLリファレンス』では、アナリティック・ワークスペースに格納されるアナリティック・ワークスペース定義を作成したり、アナリティック・ワークスペース・オブジェクトを操作するためのOLAPデータ操作言語(OLAP DML)について詳しく説明します。

対象読者

『Oracle OLAP DMLリファレンス』は、OLAP DMLプログラムを作成したり、OLAP DMLを使用してアナリティック・ワークスペースやアナリティック・ワークスペース・オブジェクトを作成するプログラマおよびデータベース管理者を対象としています。

ドキュメントのアクセシビリティについて

オラクル社のアクセシビリティへの取組みの詳細は、Oracle Accessibility ProgramのWebサイトhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=docaccを参照してください。

Oracleサポートへのアクセス

サポートを購入したオラクル社のお客様は、My Oracle Supportを介して電子的なサポートにアクセスできます。詳細は、http://www.oracle.com/pls/topic/lookup?ctx=acc&id=infoまたはhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs (聴覚障害者向け)を参照してください。

関連ドキュメント

Oracle OLAPでの処理の詳細は、次のOracleのリソースを参照してください。

- 『Oracle OLAPユーザーズ・ガイド』

- 『Oracle OLAP Java API Reference』

- 『Oracle OLAP Java API開発者ガイド』

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ドキュメントのタイトル、強調またはユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

このリファレンスでは、次に示す記号と表記規則を含むバッカス正規形(BNF)の単純な変形を使用してOLAP DML構文を表しています。

記号または表記規則

意味

[ ]

大カッコは、カッコ内の項目を任意に選択することを表します。

{ }

中カッコは、カッコ内の項目のうち、1つが必須であることを表します。

|

縦線は、大カッコまたは中カッコ内の複数の選択項目の区切りに使用します。

...

省略記号は、前述の構文要素を繰り返すことができることを示します。

デリミタ

大カッコ、中カッコ、縦線および省略記号以外のデリミタは、表示されているとおり入力する必要があります。

イタリック体

イタリック体は、名前や値に置き換える必要があるプレースホルダを示します。イタリック体でない場合は、キーワードです。文字どおりに入力する必要があります。

『Oracle OLAP DMLリファレンス』のこのリリースにおける変更内容

この序章では、『Oracle OLAP DMLリファレンス』のこのリリースにおける変更内容について説明します。以前のリリースに対する変更の詳細は、付録Dを参照してください。

Oracle Database 12cリリース1 (12.1)におけるOracle OLAPの変更内容

Oracle Database 12cリリース1 (12.1)の『Oracle OLAP DMLリファレンス』における変更内容を次に示します。

新機能

このリリースの新機能は次のとおりです。

- 行の最大長さの拡大
テキスト行の最大長さが、4,000から32,767に変更されました。

EXTCOLS、INSCOLS、JOINBYTES、JOINCOLS、REMCOLSおよびREPLCOLSのファンクション、および表2-3「OLAP DMLのテキスト・データ型」でTEXTとNTEXTの説明を参照してください。

その他の変更

このリリースには次の追加変更があります。

- パフォーマンスの向上
値セットの新しくて高度にコンパクトな格納フォーマット。

「DEFINE VALUESET」の「NOORDER」キーワードを参照してください。

- 文における変更内容
Oracle Database 12cでは、OLAP DMLの次の文が変更されました。

DEFINE VALUESET

EXTCOLS

INSCOLS

JOINBYTES

JOINCOLS

REMCOLS

REPLCOLS

1 OLAP DMLの基礎概念

この章では、次の項目について説明します。

- OLAP DMLの概略

- OLAP DMLの構文の基本単位

- OLAP DML文の実行方法

- アナリティック・ワークスペースの概要

- アナリティック・ワークスペースのデータ・オブジェクトの概要

- すべてのデータ・オブジェクトの値に対するOLAP DML文の適用

OLAP DMLの概略

OLAP DMLは、Oracle OLAPオブジェクトの定義およびOracle OLAPデータの操作を行うための基本言語です。

OLAP DML文は、主に次の2つのタイプに分けられます。

- Oracleデータ・ディクショナリでOLAP APIを使用して事前に定義されたOracle OLAPのキューブとキューブ・ディメンションを処理対象とするOLAP DML文。これらの文の概要は、「キューブ対応のOLAP DML文」を参照してください。

- アナリティック・ワークスペースで定義され格納されている下位レベルのOLAPオブジェクトを作成および操作するOLAP DML文。これらの文の概要は、「アナリティック・ワークスペース・オブジェクトを直接処理するOLAP DML文」を参照してください。

キューブ対応のOLAP DML文

OLAPキューブは、Oracle OLAPのファースト・クラス・オブジェクトであり、Oracleデータ・ディクショナリで定義されます。OLAP DML文の中には、キューブなどのOLAPのファースト・クラス・オブジェクトを処理対象とするものがあります。

関連項目:
OLAPキューブなどのOLAPの第1レベル・オブジェクトの詳細は、『Oracle OLAPユーザーズ・ガイド』を参照してください。

次のOLAP DMLプログラムは、事前定義されたOLAPのキューブとキューブ・ディメンションを処理します。

ADD_CUBE_MODEL
ADD_DIMENSION_MEMBER
ADD_MODEL_DIMENSION
CREATE_LOGICAL_MODEL
REMOVE_CUBE_MODEL
REMOVE_DIMENSION_MEMBER
REMOVE_MODEL_DIMENSION
SET_INCLUDED_MODEL
SET_PROPERTY
UPDATE_ATTRIBUTE_VALUE
UPDATE_DIMENSION_MEMBER

通常、これらのプログラムは、入力としてOLAPのキューブまたはキューブ・ディメンションのOracleデータ・ディクショナリ名をとります。これらのプログラムを実行すると、キューブまたはキューブ・ディメンションに対して必要な変更が行われるだけではなく、このようなキューブまたはキューブ・ディメンションの下位にあるすべてのアナリティック・ワークスペース・オブジェクトに対しても変更が行われます。

また、キューブに対応していないOLAP DML文でOBJORGファンクションを使用すると、OLAPのキューブまたはキューブ・ディメンションの下位にあるアナリティック・ワークスペース・オブジェクトを指定できます。

アナリティック・ワークスペース・オブジェクトを直接処理するOLAP DML文

これまで、OLAP DML文は、OLAPデータ・ディクショナリで定義されるOLAPの第1レベル・オブジェクトを処理対象としていませんでした。かわりに、OLAP DML文は、アナリティック・ワークスペースで定義され格納されている下位レベルのOLAPオブジェクトを作成および操作します。現在でもOLAP DML文のほとんどは、このような下位レベルのOLAPオブジェクトを処理対象としています。

注意:
特に明記しないかぎり、このマニュアルで説明する文と情報は、キューブに対応していないOLAP DML文(アナリティック・ワークスペース・オブジェクトを直接処理するOLAP DML文)に適用されます。

アナリティック・ワークスペース・オブジェクトを直接処理するOLAP DML文では、OLAP DML文への入力としてオブジェクト名が必要な場合、そのオブジェクト名はOracleデータ・ディクショナリで定義されたオブジェクトの名前ではなく、アナリティック・ワークスペースで定義されたオブジェクトの名前になります。

これらのOLAP DML文を使用すると、SQL、Java、OLAP APIまたはOracle OLAPツールを使用せずにアナリティック・ワークスペースのデータを分析するプログラムを作成できます。OLAP DMLでは、アナリティック・ワークスペースおよびアナリティック・ワークスペースに格納されるオブジェクトを定義できます。たとえば、次の操作を行うことができます。

- アナリティック・ワークスペースの作成(「新しいアナリティック・ワークスペースの定義」を参照)。

- DEFINEコマンドを使用したアナリティック・ワークスペースの多次元データ・オブジェクトの定義。

- データを分析する計算オブジェクトとプログラムの定義(第3章「計算式、モデル、集計および割当て」を参照)。

- 多次元データ・オブジェクトにおけるデータの移入および分析

OLAP DMLの構文の基本単位

OLAP DMLの構文の基本単位は、オプション、プロパティ、コマンド、ファンクションおよびプログラムです。これらの基本単位をすべてまとめて、OLAP DML文と呼ぶ場合があります。

OLAP DMLオプション

OLAP DMLオプションは、特殊なタイプのアナリティック・ワークスペース・オブジェクトで、Oracle OLAPによってデータがどのように計算またはフォーマットされるのか、あるいはどのOracle OLAP演算がアクティブ化されるのかなど、いくつかの特性を指定します。オプションには、読取り専用オプションと、値を指定できる読取り/書込みオプションがあります。読取り/書込みオプションには、デフォルト値があります。

独自のオプションは、アナリティック・ワークスペースの一部としては定義できません。しかし、Oracle OLAP DMLの一部として定義されているオプションは、どれでも使用できます。オプションの詳細は、第5章「OLAP DMLオプション」を参照してください。

OLAP DMLプロパティ

プロパティは、アナリティック・ワークスペース・オブジェクトの定義に関連付けられた名前付きの値です。OLAP DMLのPROPERTYコマンドを使用すると、プロパティの名前付け、作成およびオブジェクトへの割当てができます。

$(ドル記号)で始まるプロパティは、Oracle OLAPによりシステム・プロパティとして認識されます。システム・プロパティは、作成はできませんが、オブジェクトへの割当ては可能な場合があります。システム・プロパティの詳細は、第4章「OLAP DMLプロパティ」を参照してください。

OLAP DMLファンクション

OLAPファンクションの動作は、他のプログラミング言語のコマンドとほとんど同じです。アクションを開始したり値を返します。OLAP DMLファンクションには、「すべてのデータ・オブジェクトの値に対するOLAP DML文の適用」で説明する、ループ特性がある点が異なります。

OLAP DMLファンクションの多くは、標準のテキスト・ファンクションと計算ファンクションです。さらに複雑な情報を返すOLAP DMLファンクションもあります。また、ファンクションとして実行可能なOLAP DMLプログラムを作成することにより、OLAP DMLの機能を強化できます。

組込みOLAP DMLファンクションの詳細は、第7章「OLAP DMLファンクション: AからK」および第8章「OLAP DMLファンクション: LからZ」を参照してください。

OLAP DMLコマンド

OLAP DMLコマンドの動作は、他のプログラミング言語のコマンドとほとんど同じです。ただし、OLAP DMLコマンドにはループ特性があります(「すべてのデータ・オブジェクトの値に対するOLAP DML文の適用」を参照)。

多くのOLAP DMLコマンドは、複雑なアクションを実行します。これらのコマンドには、アナリティック・ワークスペースの作成に使用するAWコマンドや、アナリティック・ワークスペース内でのオブジェクトの定義に使用するDEFINEコマンドなどのデータ定義コマンドがあります。その他のOLAP DMLコマンドは、データ操作コマンドです。Oracle OLAPによってOLAP DMLプログラムの実行をトリガーするイベントとして認識されるコマンドもあります。(詳細は、「トリガー・プログラム」を参照してください。)さらに、コマンドとして実行可能なOLAP DMLプログラムを作成することにより、OLAP DMLの機能を強化できます。

組込みOLAP DMLコマンドの詳細は、第8章、第9章「OLAP DMLコマンド: AからG」および第10章「OLAP DMLコマンド: HからZ」を参照してください。

OLAP DMLプログラム

複数のOLAP DMLプログラムがOLAP DMLの一部として提供されています。プログラムの中には、印刷可能またはオンラインで参照可能なレポートを生成するものがあります。OLAP DMLの一部として提供される他のプログラムは、プログラマおよびデータベース管理者にとって有用な標準的な計算を実行します。OLAP DMLで提供されているプログラムの詳細は、「OLAP DMLから提供されるプログラム」を参照してください。

さらに、独自のOLAP DMLプログラムを作成してOLAP DMLの機能を強化することもできます(第6章「OLAP DMLプログラム」を参照)。

OLAP DML文の実行方法

OLAP Worksheetを使用すると、OLAP DML文の実行が非常に容易になります。OLAP Worksheetは、Analytic Workspace Managerの一部として提供されます。Analytic Workspace Manager内からOLAP Worksheetを開くには、次の手順を実行します。

1. Oracle Databaseインスタンスに接続します。

2. スキーマを選択します。

3. ツールを選択し、次にOLAP Worksheetを選択します。

OLAP DML文は、SQLやJavaを使用して実行することもできます。

- PL/SQL DBMS_AWパッケージを使用してOLAP DML文を実行できます。詳細は、「SQL文へのOLAP DMLの埋込み」を参照してください。

- Oracle OLAP Java APIの一部として提供されているSPL_Executorを使用して、OLAP DML文をJavaプログラムに埋め込むことができます。

関連項目:
『Oracle OLAP Java API Reference』

アナリティック・ワークスペースの概要

概念的には、アナリティック・ワークスペースは、OLAP分析のためにOracle OLAPが使用するOracle Databaseの一部です。物理的には、アナリティック・ワークスペースは、データベース内のAW$workspacenameという名前の表にLOBとして格納されます。

また、アナリティック・ワークスペースには、次の種類のオブジェクトとこれらのオブジェクトのOLAP DML定義が格納されます。

- 分析するデータおよび分析結果を含む多次元データ・オブジェクト

- 実行する分析を指定するOLAP DML文を含む計算オブジェクト(計算式、モデル、集計および割当て)

- 複雑な分析を実行するOLAP DMLプログラム

関連項目:
「アナリティック・ワークスペースのデータ・オブジェクトの概要」、第3章「計算式、モデル、集計および割当て」および第6章「OLAP DMLプログラム」

アナリティック・ワークスペースの作成および削除に必要な権限

アナリティック・ワークスペースはOracle Databaseインスタンス内に表として物理的に格納されるため、アナリティック・ワークスペースを操作するにはSQL GRANT権限が必要です。必要な権限は、アナリティック・ワークスペースが自分の所有するスキーマに存在するか、または自分が所有しないスキーマに存在するかによって異なります。

- スキーマの所有者である場合、アナリティック・ワークスペースを作成またはアタッチするときに必要なのは、SQL GRANT権限のみです。これらのタスクの実行に必要な権限とそのタスクに関連するOLAP DMLコマンドを次の表に示します。

タスク

OLAP DMLコマンド

必要なSQL GRANT権限

アナリティック・ワークスペースの作成

AW CREATE

CREATE TABLE

アナリティック・ワークスペースAS OFのアタッチ

ASOFキーワード付きのAW ATTACH

FLASHBACK TABLE

- スキーマの所有者でない場合、アナリティック・ワークスペースの作成、ASOFモードでのアナリティック・ワークスペースのアタッチ、アナリティック・ワークスペースの削除、アナリティック・ワークスペースの切捨てを行うには、次の表に示すSQL GRANT権限が必要です。

タスク

OLAP DMLコマンド

必要なSQL GRANT権限

アナリティック・ワークスペースの作成

AW CREATE

CREATE ANY TABLE、SELECT ANY TABLE、UPDATE ANY TABLE

アナリティック・ワークスペースAS OFのアタッチ

ASOFキーワード付きのAW ATTACH

FLASHBACK ANY TABLE

アナリティック・ワークスペースの削除

AW DELETE

DROP ANY TABLE

アナリティック・ワークスペースの切捨て

AW TRUNCATE

TRUNCATE ANY TABLE

Oracle Databaseでは、名前付きPL/SQLプロシージャを実行する場合、ロールは有効になりません。この場合、CREATE TABLE権限が必要です。

新しいアナリティック・ワークスペースの定義

OLAP DMLを使用すると、アナリティック・ワークスペースを作成できます。アナリティック・ワークスペースを作成するには、CREATEキーワードを指定してAWコマンドを発行し、続けてUPDATE文およびCOMMIT文を順に発行します。

定義済アナリティック・ワークスペースでの処理

定義済アナリティック・ワークスペースを使用するには、あらかじめAW ATTACH文を発行してアナリティック・ワークスペースをアタッチしておく必要があります。アナリティック・ワークスペースには、次のようなアタッチ・モードでアタッチできます。

- 読取り専用: ユーザーはワークスペースのデータに独自の変更を加えることによって、what-if分析を実行できますが、これらの変更をコミットできません。読取り専用モードでは、アタッチされるユーザーの数に制限はありません。

- 読取り/書込みアクセス権モード: 読取り/書込みモードで同時にアナリティック・ワークスペースを開くことができるのは1ユーザーのみです。ユーザーはワークスペースに対する変更をすべてコミットするか、変更しないことをコミットする必要があります。

- 読取り/書込み排他アクセス権モード: 読取り/書込み排他アタッチ・モードは、他のアクセス権モードとの互換性がありません。他のユーザーがいずれかのモードでアナリティック・ワークスペースをアタッチしている場合、ユーザーは読取り/書込み排他モードでアナリティック・ワークスペースをアタッチできません。読取り/書込み排他モードでアナリティック・ワークスペースを開くことができるのは一度に1ユーザーのみです。ユーザーはワークスペースに対する変更をすべてコミットするか、変更しないことをコミットする必要があります。

- マルチライタ・アクセス権モード: マルチライタ・モードでアタッチされているアナリティック・ワークスペースには、複数のセッションから同時にアクセスできます。マルチライタ・モードでは、変数、リレーション、値セットおよびディメンションの個々に対してアタッチ・モード(読取り専用または読取り/書込み)を指定することでアナリティック・ワークスペースを制御しているので、ユーザーは同じアナリティック・ワークスペースを同時に変更できます。

各種アタッチ・モードの詳細は、AW ATTACH文に関する構文および注意事項を参照してください。

アナリティック・ワークスペースに関する情報の表示

表1-1「アナリティック・ワークスペースに関する情報を表示する文」に、アナリティック・ワークスペースに関する情報を表示するOLAP DML文を示します。

表1-1 アナリティック・ワークスペースに関する情報を表示する文

文

説明

AWファンクション

現在アタッチされているワークスペースに関する情報を返す。

AWDESCRIBEプログラム

現行のアナリティック・ワークスペースに関する情報を、現行の出力ファイルに送信する。

EXISTSファンクション

アタッチされたワークスペースでオブジェクトが定義されているかどうかを示す値を返す。

LISTBYプログラム

1つ以上の指定されたディメンションまたはコンポジットによってディメンション化される、またはそれらに関連付けられるアナリティック・ワークスペースのすべてのオブジェクトをリストする。

LISTNAMESプログラム

アナリティック・ワークスペース内のオブジェクトの名前をリストする。

OBJファンクション

アナリティック・ワークスペース・オブジェクトに関する情報を返す。

OBJLISTファンクション

指定する1つ以上のワークスペース内のオブジェクトをリストする。

DESCRIBEコマンド

1つ以上のワークスペース・オブジェクトの簡単な定義をリストする。

FULLDSCプログラム

オブジェクトのプロパティおよびトリガーを含む、1つ以上のワークスペース・オブジェクトの完全な定義をリストする。

アナリティック・ワークスペースのデータ・オブジェクトの概要

通常、リレーショナル・データベースでは、第3正規形のデータの表にデータ値を格納します。このタイプの実装では、リレーショナル・データベース表のキー列の値は、単一レベルの一意のデータ値になります。たとえば、リレーショナル・データベースの1つのレベルに都市の名前を含む「City」という名前のキー列を持つ表が存在し、その次の上位レベルに州の名前を含む「state」という名前のキー列を持つ表が存在し、さらに同じようにその次の上位レベルに別の名前のキー列を持つ表が存在するという具合です。

アナリティック・ワークスペースでは、分析するデータを保持するオブジェクトは変数と呼ばれる配列です。変数内のキーは、変数のディメンションとして機能する他のオブジェクトに格納されます。OLAP分析のパフォーマンスを向上させるために、複数のレベルの値は階層ディメンションと呼ばれる単一のディメンション内に格納されます。たとえば、アナリティック・ワークスペースでは、都市と州の両方の名前を値として持つ「geog」という名前の階層ディメンションを持つことができます。

2つ以上のディメンションの値を関連付ける値を格納するオブジェクトは、リレーションと呼ばれます。このような階層ディメンションの異なるレベルの値に関する1対多関係は、アナリティック・ワークスペースに格納されます。たとえば、階層ディメンション「geog」の都市と州の値の関係は、通常、parentrelリレーションと呼ばれるアナリティック・ワークスペースのリレーションに格納されます。詳細は、「parentrelリレーション」を参照してください。

通常、追加のアナリティック・ワークスペース・オブジェクトには、階層ディメンションに関する追加情報を保持するように定義されます。一部の重要なOLAP DMLのコマンドとファンクション(LIMITコマンドなど)は、これらのオブジェクトの名前を文の構文内の1つの引数に指定して、アナリティック・ワークスペース内のこれらのオブジェクトの存在を推測します。

OLAP DMLを使用して定義するデータ・オブジェクトは多次元オブジェクトであり、アナリティック・ワークスペースに格納されます。OLAP DML文を使用してこれらの多次元データ・オブジェクトを操作する場合、こうした操作は各多次元データ・オブジェクトに含まれる値セット全体に同時に適用されます。

関連項目:
「アナリティック・ワークスペースのデータ・オブジェクトの型」および「階層の使用をサポートするオブジェクト」

アナリティック・ワークスペースのデータ・オブジェクトの型

OLAP DMLでは、次のようなアナリティック・ワークスペースのデータ・オブジェクトの型を使用できます。

変数

単純なディメンション

連結ディメンション

コンポジット

パーティション・テンプレート

別名ディメンション

リレーション

値セットとサロゲート・オブジェクト

ヒント:
OBJORGファンクションを使用すると、キューブおよびキューブ・ディメンションの下位にあるアナリティック・ワークスペース・オブジェクトを指定できます。

変数

アナリティック・ワークスペースで最も重要なデータ・オブジェクトは変数です。変数はデータを格納するオブジェクトです。変数内のデータはすべて同じデータ型である必要があります。通常、変数には、ビジネスの特定の側面を定量化するデータ値を含めます。たとえば、ビジネスの取引に関して(ドル、個数、パーセントなどで評価される)複数のカテゴリがある場合、各カテゴリはそれぞれ独自の変数に格納されます。たとえば、ドル(sales変数)や個数(units変数)で売上データを記録できます。

OLAP DMLは多次元プログラミング言語であるため、変数は多次元であり、他のOLAP言語でメジャーと呼ばれるものに相当します。概念的には、2つのディメンションを持つ変数を表、3つのディメンションを持つ変数をキューブなどとみなすことができます。物理的には、変数は多次元配列として格納され、この配列の実際の構造は、変数をディメンション化するオブジェクトによって決定されます。

配列のスコープとパフォーマンスは一定ではありません。永続変数とは、変数の値と定義の両方がアナリティック・ワークスペースに格納される変数です。一時変数とは、現行のセッションでのみ値を保持する変数です。アナリティック・ワークスペースを更新およびコミットすると、一時変数の定義のみが保存されます。アナリティック・ワークスペースを終了すると、データ値は廃棄されます。また、変数はプログラム内で定義することもできます。

プログラム内ではスカラー変数も定義できますが、OLAP DMLを使用して定義する変数の大半は、ディメンション化された変数です。ディメンション化された変数は、複数の値を保持する配列です。変数の索引やディメンションを使用すると、変数を編成できます。ディメンションの値は、データ値を一意に識別するという点で、リレーショナル表のキーに似ています。たとえば、ディメンションtime、geographyおよびproductによってディメンション化されたsales変数が存在する場合、time、geographyおよびproductの値の各組合せによってsalesの値が識別されます。(変数の索引は、実際にはディメンションの値ではなく、ディメンションの値のINTEGER位置です。)

変数は、フラット・ディメンションまたは階層ディメンションのどちらかでディメンション化できます。フラット・ディメンションは、ディメンション内の値がすべて同じレベルである(別の値の子や親ではない)場合に存在します。階層ディメンションは、単一ディメンションの値が互いに1対多(親子)関係である場合に存在します。

階層ディメンションは、単一のディメンション内のこのような型のデータを編成および構造化する手法です。階層ディメンションを使用すると、データを含む変数をすべてのレベルにディメンション化できます。複数の階層を持つディメンションもあります。セルフ・リレーションを作成することでディメンション値の親子関係を指定します。階層ディメンションを使用して、単一の変数内に様々なレベルの集計データを含む変数を定義します。単一の変数内にこれらすべての値を格納すると、(特に変数が大きい場合に)データを表示しようとするユーザーに対する応答時間が短くなります。

通常、階層ディメンションの上位レベルに対応する変数のセルは、下位レベルのディメンション値に対応する変数のセルの値の合計を含みます。たとえば、期間を表す階層ディメンションで定義されているsales変数の場合、各四半期を表す変数のセルは四半期の月の総売上を表すことができます。

階層ディメンションで変数を定義した後、変数データを下位レベルの階層に追加して、上位レベルの階層の値を計算または集計できます。逆に、階層の上位レベルから下位レベルにデータを配布または割当てすることもできます。

参照:
DEFINE VARIABLE

変数をディメンション化できるオブジェクト

変数とリレーションのデータがどのように実際に構造化され格納されるかは、変数やリレーションをディメンション化するために使用するオブジェクトの型とそれらのオブジェクトが変数やリレーションの定義で表示される順序によって異なります。単純なディメンション、連結ディメンション、コンポジット、パーティション・テンプレートおよび別名ディメンションにより、変数をディメンション化できます。変数をディメンション化するために選択するオブジェクトによって、変数のデータの格納方法が決定されます。

関連項目:
「階層の使用をサポートするオブジェクト」

単純なディメンション

単純なディメンションのメンバーは、すべて同じデータ型を持つデータ値です。変数が単純なディメンションでディメンション化されている場合、ディメンションの各メンバーに対する変数のセルは1つになります。データを持たない変数のディメンション・メンバーが存在する場合、Oracle OLAPでは、その空の値を持つ変数にNA値が格納されます。そのようなNA値の格納の結果、すべてNA値となった場合、Oracle OLAPは実際には値を格納しません。

参照:
DEFINE DIMENSION(単純)

連結ディメンション

連結ディメンションは、事前定義された単純なディメンションや結合ディメンションにまたがって定義されます。したがって、連結ディメンションのベース・ディメンションは異なるデータ型になる場合があります。ベース・ディメンションに2つ以上の単純なフラット・ディメンションを持つ連結ディメンションを使用すると、階層を表現できます。連結ディメンションを使用すると、アナリティック・ワークスペースのディメンションをリレーショナル表の列に容易にマップでき、リレーショナル構造のデータをアナリティック・ワークスペース構造に非常に効率的にロードできます。

参照:
DEFINE DIMENSION CONCAT

コンポジット

コンポジットは、事前定義されたディメンションにまたがって定義されます。概念として、コンポジットは次の2つの構造から成り立っていると考えられます。

- コンポジット・オブジェクト自体。コンポジットには、ディメンション値の組合せ(つまり、コンポジット・タプル)が含まれており、Oracle OLAPでは、この組合せを使用して、コンポジットによってディメンション化される変数の構造を決定します。

- コンポジット値とそのベース・ディメンション値との間の索引。

コンポジットでディメンション化される変数では、Oracle OLAPでは、単純なディメンションによって変数をディメンション化する場合のように、ベース・ディメンション内のすべての値についてセルが作成されるわけではありません。かわりに、配列要素(つまり変数セル)はコンポジットのタプルに格納されるディメンション値についてのみが作成されます。変数のデータは、コンポジットの各タプルに対し、セルからセルへ順番に格納されます。データ格納の観点からは、コンポジット内のベース・ディメンション値の各組合せは、通常のディメンションの値と同様に扱われます。したがって、通常のディメンションとコンポジットを1つずつ持つ変数を定義する場合、変数のデータは、2次元の変数と同様に格納されます。コンポジットを使用することにより、変数に対して作成される要素の数が減り、データの格納がより効率化されます。

参照:
DEFINE COMPOSITE

パーティション・テンプレート

パーティション・テンプレートは、事前定義されたディメンションやコンポジットにまたがって定義されます。パーティション・テンプレートは、パーティション変数のパーティション仕様です。パーティション変数は、アナリティック・ワークスペースであるLOBのリレーショナル表に複数行として格納され、各パーティションが表の1行になります。

参照:
DEFINE PARTITION TEMPLATE

別名ディメンション

別名ディメンションは、単純なディメンションに対する別名です。別名ディメンションは、そのベース・ディメンションと同じ型および値を持ちます。通常、ある変数を同じディメンションで2回ディメンション化する必要がある場合に、別名ディメンションを定義します。

参照:
DEFINE DIMENSION ALIASOF

リレーション

リレーションとは、アナリティック・ワークスペース内の特定のディメンションの値と、同一のディメンションまたは他のディメンションの値との対応関係を設定するオブジェクトです。リレーションはディメンション化された配列です。リレーションの各セルにはディメンションの値の索引が保持されます。2つ以上のディメンション間のリレーション、ディメンションのセット間の複数のリレーション、または同一ディメンション内のリレーション(セルフ・ディメンション)を定義できます。

通常、リレーションは階層ディメンションのセルフ・リレーションです。1対多(親子)関係にあるディメンション値間のリレーションを作成することで、子値でデータを編成し、親値でデータの集計を表示できます。たとえば、geographyディメンションに対してgeog.parentリレーションを作成して、geographyの値cityとstateの関係を定義できます。この方法により、cityでデータを編成してstateでデータの集計を表示できます。

関連項目:
DEFINE RELATION

値セットとサロゲート・オブジェクト

OLAP DMLでは、変数の定義では使用せずに変数の問合せで使用する、次の特殊なデータ・オブジェクトが用意されています。

値セット・オブジェクト

値セットは、事前定義された1つ以上のディメンションのディメンション値のリストです。値セットを使用すると、複数のセッションにまたがってディメンション・ステータス・リストを保存できます。

参照:
DEFINE VALUESET

サロゲート

ディメンション・サロゲートは、事前定義されたディメンションの値の代替セットです。サロゲートで変数をディメンション化することはできませんが、モデル、LIMITコマンド、修飾データ参照または文(FILEREAD、FILEVIEW、SQL FETCH、SQL IMPORTなど)でロードするデータでは、ディメンションのかわりにサロゲートを使用できます。

参照:
DEFINE SURROGATE

階層の使用をサポートするオブジェクト

通常、変数は階層オブジェクトによってディメンション化されます。たとえば、geog、timeおよびproductでディメンション化されているsales変数があるとします。この場合、geogディメンションには、2つの階層(国別と売上地域)が存在し、それぞれの階層では、国別の階層の最上位レベルに「すべての国」が存在し、売上地域の階層の最上位レベルに「すべての地域」が存在する複数のレベルを持つことができます。例1-1「geogという名前の階層ディメンションの定義および移入」に、このタイプの地理階層ディメンションの定義および移入を示します。

例1-1 geogという名前の階層ディメンションの定義および移入

DEFINE geog DIMENSION TEXT
LD A dimension with two hierarchies for geography
"Populate the dimension with City, State, Region, and Country values
MAINTAIN geog ADD 'Boston' 'Springfield' 'Hartford' 'Mansfield' 'Montreal' 'Walla Walla' 'Portland' 'Oakland' 'San Diego' 'MA' 'CT' 'WA' 'CA' 'Quebec' 'East' 'West' 'All Regions' 'USA' 'Canada' 'All Country'

"Display the values in geog

REPORT geog

GEOG
--------------
Boston
Springfield
Hartford
Mansfield
Montreal
Walla Walla
Portland
Oakland
San Diego
MA
CT
WA
CA
Quebec
East
West
All Regions
USA
Canada
All Country

通常、階層ディメンションを定義した後、そのディメンションについて次のオブジェクトを定義します。

- ディメンションの階層の名前をリストするhierlistディメンション。詳細および例は、「hierlistディメンション」を参照してください。

- 階層を定義するparentrelリレーション。ディメンションは、そのディメンションに対して定義されたparentrelを持つ場合は、必ず階層ディメンションになります。詳細および例は、「parentrelリレーション」を参照してください。

- すべての階層のあらゆるレベルの名前をリストするlevellistリレーション。詳細および例は、「levellistディメンション」を参照してください。

- 各階層のレベルの値であるhierlevels値セット。詳細および例は、「hierlevels値セット」を参照してください。

- 各階層の値を識別するinhier値セットまたは変数。詳細および例は、「inhier値セットまたは変数」を参照してください。

- 階層ディメンションの各値を階層のレベルに関連付けるlevelrelリレーション。詳細および例は、「levelrelリレーション」を参照してください。

- 各階層ディメンションの値とその関連付けられた値であるfamilyrelリレーション。詳細および例は、「familyrelリレーション」を参照してください。

- 各階層内の各値のグルーピングIDであるgidrelリレーション。詳細および例は、「gidrelリレーション」を参照してください。

hierlistディメンション

hierlistディメンションは、階層ディメンションの階層の名前を値として保持するアナリティック・ワークスペース内のTEXTディメンションです。たとえば、企業で異なる暦年と会計年度を使用する場合、その企業のtimeディメンションで、2つの階層(暦年用と会計年度用)を使用します。そのtime階層をサポートしたhierlistディメンションでは、2つの値(CalendarとFiscal)を使用します。

一貫性を保つために、アナリティック・ワークスペースには、各階層ディメンションに対するhierlistディメンションが含まれます。これは、階層ディメンションに1つの階層しかない場合も例外ではありません。

例1-2「geog_hierlistという名前のhierlistディメンションの定義および移入」に、このタイプのディメンションの定義および移入を示します。

例1-2 geog_hierlistという名前のhierlistディメンションの定義および移入

DEFINE geog_hierlist DIMENSION TEXT
LD List of Hierarchies for geog dimension
"Populate the geog_hierlist dimension
MAINTAIN geog_hierlist ADD 'Political_Geog' 'Sales_Geog'
"Display the values of the geog_hierlist dimension
REPORT geog_hierlist

GEOG_HIERLIST
--------------
Political_Geog
Sales_Geog

parentrelリレーション

parentrelリレーションは、階層ディメンション、それ自身(セルフ・ディメンション)およびhierlistディメンション間のリレーションです。このリレーションにより、階層内の各ディメンション・メンバーが識別されます。

例1-3「geog_parentrelという名前のparentrelリレーションの定義および移入」に、このタイプのリレーションの定義および移入を示します。

例1-3 geog_parentrelという名前のparentrelリレーションの定義および移入

"Define the relation
DEFINE geog_parentrel RELATION geog <geog geog_hierlist>
LD Self-relation for geog showing parents of each value
"Populate each cell in the relation "with the parent of the geog value
"This example using assignment statement with QDRs to do that
geog_parentrel (geog_hierlist 'Sales_Geog' geog 'Boston') = 'MA'
geog_parentrel (geog_hierlist 'Sales_Geog' geog 'Hartford') = 'CT'
geog_parentrel (geog_hierlist 'Sales_Geog' geog 'Springfield') = 'MA'
geog_parentrel (geog_hierlist 'Sales_Geog' geog 'Mansfield') = 'CT'
geog_parentrel (geog_hierlist 'Sales_Geog' geog  'Montreal') = 'Quebec'
geog_parentrel (geog_hierlist 'Sales_Geog' geog 'Walla Walla') = 'WA'
geog_parentrel (geog_hierlist 'Sales_Geog' geog 'Portland') = 'WA'
geog_parentrel (geog_hierlist 'Sales_Geog' geog 'Oakland') = 'CA'
geog_parentrel (geog_hierlist 'Sales_Geog' geog 'San Diego') = 'CA'
geog_parentrel (geog_hierlist 'Sales_Geog' geog 'CT') = 'East'
geog_parentrel (geog_hierlist 'Sales_Geog' geog 'MA') = 'East'
geog_parentrel (geog_hierlist 'Sales_Geog' geog 'WA') = 'West'
geog_parentrel (geog_hierlist 'Sales_Geog' geog 'CA') = 'West'
geog_parentrel (geog_hierlist 'Sales_Geog' geog 'Quebec') = 'East'
geog_parentrel (geog_hierlist 'Sales_Geog' geog 'East') = 'All Regions'
geog_parentrel (geog_hierlist 'Sales_Geog' geog 'West') = 'All Regions'
geog_parentrel (geog_hierlist 'Political_Geog' geog 'Boston') = 'MA'
geog_parentrel (geog_hierlist 'Political_Geog' geog 'Hartford') = 'CT'
geog_parentrel (geog_hierlist 'Political_Geog' geog 'Springfield') = 'MA'
geog_parentrel (geog_hierlist 'Political_Geog' geog 'Mansfield') = 'CT'
geog_parentrel (geog_hierlist 'Political_Geog' geog  'Montreal') = 'Quebec'
geog_parentrel (geog_hierlist 'Political_Geog' geog 'Walla Walla') = 'WA'
geog_parentrel (geog_hierlist 'Political_Geog' geog 'Portland') = 'WA'
geog_parentrel (geog_hierlist 'Political_Geog' geog 'Oakland') = 'CA'
geog_parentrel (geog_hierlist 'Political_Geog' geog 'San Diego') = 'CA'
geog_parentrel (geog_hierlist 'Political_Geog' geog 'CT') = 'USA'
geog_parentrel (geog_hierlist 'Political_Geog' geog 'MA') = 'USA'
geog_parentrel (geog_hierlist 'Political_Geog' geog 'WA') = 'USA'
geog_parentrel (geog_hierlist 'Political_Geog'  geog 'CA') = 'USA'
geog_parentrel (geog_hierlist 'Political_Geog'  geog 'Quebec') = 'Canada'
geog_parentrel (geog_hierlist 'Political_Geog'  geog 'USA') = 'All Country'
geog_parentrel (geog_hierlist 'Political_Geog' geog 'Canada') = 'All Country'

"Display the values of geog_parentrel
REPORT DOWN geog W 20 geog_parentrel
-------------GEOG_PARENTREL--------------
--------------GEOG_HIERLIST--------------
GEOG              Political_Geog         Sales_Geog
-------------- -------------------- --------------------
Boston         MA                   MA
Springfield    MA                   MA
Hartford       CT                   CT
Mansfield      CT                   CT
Montreal       Quebec               Quebec
Walla Walla    WA                   WA
Portland       WA                   WA
Oakland        CA                   CA
San Diego      CA                   CA
MA             USA                  East
CT             USA                  East
WA             USA                  West
CA             USA                  West
Quebec         Canada               East
East           NA                   All Regions
West           NA                   All Regions
All Regions    NA                   NA
USA            All Country          NA
Canada         All Country          NA
All Country    NA                   NA

levellistディメンション

levellistディメンションは、階層ディメンションの階層のすべてのレベルの名前を値として保持するTEXTディメンションです。

例1-4「geog_levellistという名前のlevellistディメンションの定義および移入」に、このタイプのディメンションの定義および移入を示します。

例1-4 geog_levellistという名前のlevellistディメンションの定義および移入

DEFINE geog_levellist DIMENSION TEXT
LD List of levels used by hierarchies of the geog dimension
"Populate the geog_levellist dimension with the names of the levels of both the
"Political_Geog and Sales_Geog hierarchies
MAINTAIN geog_levellist ADD 'All Country' 'Country' 'All Regions' 'Region' MAINTAIN geog_levellist ADD 'State-Prov' 'City'
"Display the values of the geog_levellist dimension

REPORT geog_levellist

GEOG_LEVELLIST
--------------
All Country
Country
All Regions
Region
State-Prov
City

hierlevels値セット

hierlevels値セットは、階層ディメンションの各階層に含まれているhierlevelsディメンション(通常は最下位から最上位への順)の値です。

例1-5「geog_hierlevelsという名前のhierlevels値セットの定義および移入」に、このタイプの値セットの定義および移入を示します。

例1-5 geog_hierlevelsという名前のhierlevels値セットの定義および移入

DEFINE geog_hierlevels VALUESET geog_levellist <geog_hierlist>
"Using LIMIT populate the valueset with the appropriate values for each hierarchy
LIMIT geog_hierlevels TO ALL
LIMIT geog_hierlevels (geog_hierlist 'Political_Geog') TO 'City' 'State-Prov' 'Country' 'All Country'
LIMIT geog_hierlevels (geog_hierlist 'Sales_Geog') TO 'City' 'State-Prov' 'Region' 'All Regions'

"Display the values in the valueset
REPORT W 22 geog_hierlevels

GEOG_HIERLIST     GEOG_HIERLEVELS
-------------- ----------------------
Political_Geog City
State-Prov
Country
All Country
Sales_Geog     City
State-Prov
Region
All Regions

inhier値セットまたは変数

inhier値セットは、各階層内のinhierディメンションの値です。例1-6「geog_inhierという名前のinhier値セットの定義および移入」に、このタイプの値セットの定義および移入を示します。

inhier変数は、階層ディメンションとhierlistディメンションでディメンション化されるBOOLEAN変数です。各階層では、その階層内の各ディメンション値に対してTRUE値を持っています。例1-7「geog_inhiervarという名前のinhier変数の定義および移入」に、このタイプの値セットの定義および移入を示します。

例1-6 geog_inhierという名前のinhier値セットの定義および移入

"Define the valueset
DEFINE geog_inhier VALUESET geog <geog_hierlist>
"Using LIMIT commands, populate the valueset
LIMIT geog_inhier (geog_hierlist 'Political_Geog') REMOVE 'East' 'West' 'All Regions'
LIMIT geog_inhier (geog_hierlist 'Sales_Geog') REMOVE 'Canada' 'USA' 'All Country'
"Display the values in the valueset

REPORT W 20 geog_inhier

GEOG_HIERLIST      GEOG_INHIER
-------------- --------------------
Political_Geog Boston
Springfield
Hartford
Mansfield
Montreal
Walla Walla
Portland
Oakland
San Diego
MA
CT
WA
CA
Quebec
USA
Canada
All Country
Sales_Geog     Boston
Springfield
Hartford
Mansfield
Montreal
Walla Walla
Portland
Oakland
San Diego
MA
CT
WA
CA
Quebec
East
West
All Regions

例1-7 geog_inhiervarという名前のinhier変数の定義および移入

DEFINE geog_inhiervar VARIABLE BOOLEAN <geog geog_hierlist>

"Using LIMIT commands and assignment statements, populate
" the variable
LIMIT geog_hierlist TO ALL
LIMIT geog_hierlist TO 'Political_Geog'
LIMIT geog TO 'East' 'West' 'All Regions'
geog_inhiervar = FALSE
LIMIT geog COMPLEMENT
geog_inhiervar = TRUE
LIMIT geog_hierlist TO ALL
LIMIT geog_hierlist TO 'Sales_Geog'
LIMIT geog TO ALL
LIMIT geog TO 'Canada' 'USA' 'All Country'
geog_inhiervar = FALSE
LIMIT geog COMPLEMENT
geog_inhiervar = TRUE
LIMIT geog TO ALL
LIMIT geog_hierlist TO ALL

"Display the values of the variable
REPORT DOWN geog geog_inhiervar

---GEOG_INHIERVAR----
----GEOG_HIERLIST----
Political_
GEOG              Geog    Sales_Geog
-------------- ---------- ----------
Boston                yes        yes
Springfield           yes        yes
Hartford              yes        yes
Mansfield             yes        yes
Montreal              yes        yes
Walla Walla           yes        yes
Portland              yes        yes
Oakland               yes        yes
San Diego             yes        yes
MA                    yes        yes
CT                    yes        yes
WA                    yes        yes
CA                    yes        yes
Quebec                yes        yes
East                   no        yes
West                   no        yes
All Regions            no        yes
USA                   yes         no
Canada                yes         no
All Country           yes         no

levelrelリレーション

levelrelリレーションは、階層ディメンションの各メンバーのレベルを記録する、levellistディメンションとhierlistディメンション間のリレーションです。

例1-8「geog_levelrelという名前のlevelrelリレーションの定義および移入」に、このタイプのリレーションの定義および移入を示します。

例1-8 geog_levelrelという名前のlevelrelリレーションの定義および移入

"Define the relation
DEFINE geog_levelrel RELATION geog_levellist <geog geog_hierlist>
LD Level of each dimension member for geog

"Populate the relation
"This example uses assignment statements with QDRs to populate
geog_levelrel (geog_hierlist 'Sales_Geog' geog 'Boston') = 'City'
geog_levelrel (geog_hierlist 'Sales_Geog' geog 'Hartford') = 'City'
geog_levelrel (geog_hierlist 'Sales_Geog' geog 'Springfield') = 'City'
geog_levelrel (geog_hierlist 'Sales_Geog' geog 'Mansfield') = 'City'
geog_levelrel (geog_hierlist 'Sales_Geog' geog  'Montreal') = 'City'
geog_levelrel (geog_hierlist 'Sales_Geog' geog 'Walla Walla') = 'City'
geog_levelrel (geog_hierlist 'Sales_Geog' geog 'Portland') = 'City'
geog_levelrel (geog_hierlist 'Sales_Geog' geog 'Oakland') = 'City'
geog_levelrel (geog_hierlist 'Sales_Geog' geog 'San Diego') = 'City'
geog_levelrel (geog_hierlist 'Sales_Geog' geog 'CT') = 'State-Prov'
geog_levelrel (geog_hierlist 'Sales_Geog' geog 'MA') = 'State-Prov'
geog_levelrel (geog_hierlist 'Sales_Geog' geog 'WA') = 'State-Prov'
geog_levelrel (geog_hierlist 'Sales_Geog' geog 'CA') = 'State-Prov'
geog_levelrel (geog_hierlist 'Sales_Geog' geog 'Quebec') = 'State-Prov'
geog_levelrel (geog_hierlist 'Sales_Geog' geog 'East') = 'Region'
geog_levelrel (geog_hierlist 'Sales_Geog' geog 'West') = 'Region'
geog_levelrel (geog_hierlist 'Sales_Geog' geog 'All Regions') = 'All Regions'
geog_levelrel (geog_hierlist 'Political_Geog' geog 'Boston') = 'City'
geog_levelrel (geog_hierlist 'Political_Geog' geog 'Hartford') = 'City'
geog_levelrel (geog_hierlist 'Political_Geog' geog 'Springfield') = 'City'
geog_levelrel (geog_hierlist 'Political_Geog' geog 'Mansfield') = 'City'
geog_levelrel (geog_hierlist 'Political_Geog' geog  'Montreal') = 'City'
geog_levelrel (geog_hierlist 'Political_Geog' geog 'Walla Walla') = 'City'
geog_levelrel (geog_hierlist 'Political_Geog' geog 'Portland') = 'City'
geog_levelrel (geog_hierlist 'Political_Geog' geog 'Oakland') = 'City'
geog_levelrel (geog_hierlist 'Political_Geog' geog 'San Diego') = 'City'
geog_levelrel (geog_hierlist 'Political_Geog' geog 'CT') = 'State-Prov'
geog_levelrel (geog_hierlist 'Political_Geog' geog 'MA') = 'State-Prov'
geog_levelrel (geog_hierlist 'Political_Geog' geog 'WA') = 'State-Prov'
geog_levelrel (geog_hierlist 'Political_Geog'   geog 'CA') = 'State-Prov'
geog_levelrel (geog_hierlist 'Political_Geog'  geog 'Quebec') = 'State-Prov'
geog_levelrel (geog_hierlist 'Political_Geog'  geog 'USA') = 'Country'
geog_levelrel (geog_hierlist 'Political_Geog' geog 'Canada') = 'Country'
geog_levelrel (geog_hierlist 'Political_Geog' geog 'All Country') = 'All Country'

"Display the values
REPORT DOWN geog W 20 geog_levelrel

--------------GEOG_LEVELREL--------------
--------------GEOG_HIERLIST--------------
GEOG              Political_Geog         Sales_Geog
-------------- -------------------- --------------------
Boston         City                 City
Springfield    City                 City
Hartford       City                 City
Mansfield      City                 City
Montreal       City                 City
Walla Walla    City                 City
Portland       City                 City
Oakland        City                 City
San Diego      City                 City
MA             State-Prov           State-Prov
CT             State-Prov           State-Prov
WA             State-Prov           State-Prov
CA             State-Prov           State-Prov
Quebec         State-Prov           State-Prov
East           NA                   Region
West           NA                   Region
All Regions    NA                   All Regions
USA            Country              NA
Canada         Country              NA
All Country    All Country          NA

familyrelリレーション

familyrelリレーションは、階層ディメンション、levellistディメンションおよびhierlistディメンション間のリレーションです。このリレーションでは、階層の各ディメンション・メンバーの完全な親子関係が表示されます。

例1-9「geog_familyrelという名前のfamilyrelリレーションの定義および移入」に、このタイプのリレーションの定義および移入を示します。

例1-9 geog_familyrelという名前のfamilyrelリレーションの定義および移入

"Define the relation
DEFINE geog_familyrel RELATION geog <geog geog_levellist geog_hierlist>
LD FEATURES Family/Ancestry structure for the geog dimension

"Populate the relation using the HIERHEIGHT command
HIERHEIGHT geog_parentrel INTO geog_familyrel USING geog_levelrel

"Display the values of the familyrel relation
"First the values for the Political_Geog hierarchy are displayed
"Then the values for the Sales_Geog hierarchy
REPORT DOWN geog W 12 geog_familyrel

GEOG_HIERLIST: Political_Geog
-------------------------------GEOG_FAMILYREL--------------------------------
-------------------------------GEOG_LEVELLIST--------------------------------
GEOG            All Country  Country    All Regions     Region     State-Prov      City
-------------- ------------ ------------ ------------ ------------ ------------ ------------
Boston         All Country  USA          NA           NA           MA           Boston
Springfield    All Country  USA          NA           NA           MA           Springfield
Hartford       All Country  USA          NA           NA           CT           Hartford
Mansfield      All Country  USA          NA           NA           CT           Mansfield
Montreal       All Country  Canada       NA           NA           Quebec       Montreal
Walla Walla    All Country  USA          NA           NA           WA           Walla Walla
Portland       All Country  USA          NA           NA           WA           Portland
Oakland        All Country  USA          NA           NA           CA           Oakland
San Diego      All Country  USA          NA           NA           CA           San Diego
MA             All Country  USA          NA           NA           MA           NA
CT             All Country  USA          NA           NA           CT           NA
WA             All Country  USA          NA           NA           WA           NA
CA             All Country  USA          NA           NA           CA           NA
Quebec         All          Canada       NA           NA           Quebec       NA
Countries
East           NA           NA           NA           NA           NA           NA
West           NA           NA           NA           NA           NA           NA
All Regions    NA           NA           NA           NA           NA           NA
USA            All Country  USA          NA           NA           NA           NA
Canada         All Country  Canada       NA           NA           NA           NA
All Country    All Country  NA           NA           NA           NA           NA

GEOG_HIERLIST: Sales_Geog
-------------------------------GEOG_FAMILYREL--------------------------------
-------------------------------GEOG_LEVELLIST--------------------------------
GEOG            All Country Country    All Regions     Region     State-Prov      City
-------------- ------------ ------------ ------------ ------------ ------------ ------------
Boston         NA           NA           All Regions  East         MA           Boston
Springfield    NA           NA           All Regions  East         MA           Springfield
Hartford       NA           NA           All Regions  East         CT           Hartford
Mansfield      NA           NA           All Regions  East         CT           Mansfield
Montreal       NA           NA           All Regions  East         Quebec       Montreal
Walla Walla    NA           NA           All Regions  West         WA           Walla Walla
Portland       NA           NA           All Regions  West         WA           Portland
Oakland        NA           NA           All Regions  West         CA           Oakland
San Diego      NA           NA           All Regions  West         CA           San Diego
MA             NA           NA           All Regions  East         MA           NA
CT             NA           NA           All Regions  East         CT           NA
WA             NA           NA           All Regions  West         WA           NA
CA             NA           NA           All Regions  West         CA           NA
Quebec         NA           NA           All Regions  East         Quebec       NA
East           NA           NA           All Regions  East         NA           NA
West           NA           NA           All Regions  West         NA           NA
All Regions    NA           NA           All Regions  NA           NA           NA
USA            NA           NA           NA           NA           NA           NA
Canada         NA           NA           NA           NA           NA           NA
All Country    NA           NA           NA           NA           NA           NA

gidrelリレーション

gidrelリレーションは、NUMBERディメンション、階層ディメンションおよびhierlistディメンション間のリレーションで、階層ディメンションの各階層における各ディメンション・メンバーのグルーピングIDが含まれます。各ディメンション・メンバーの階層内の深さを識別する$GID_DEPTHプロパティも保持します。

例1-10「geog_gidrelという名前のgidrelリレーションの定義および移入」に、このタイプのリレーションの定義および移入を示します。

例1-10 geog_gidrelという名前のgidrelリレーションの定義および移入

"Create a dimension that has values that are numbers
DEFINE gid_dimension DIMENSION NUMBER (38,0)"Add values to that dimension
"This example uses MAINTAIN ADD to add a few numbers
MAINTAIN gid_dimension ADD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

"Define the gidrel relation
DEFINE geog_gidrel RELATION gid_dimension <geog geog_hierlist>
"Display the complete definition of the geog_gidrel relation
"Note that it has no properties
DEFINE GEOG_GIDREL RELATION GID_DIMENSION <GEOG GEOG_HIERLIST>
"Populate the gidrel relation using the GROUPINGID command
GROUPINGID geog_parentrel INTO geog_gidrel USING geog_levelrel INHIERARCHY geog_inhier
"Display the values of the geog_gidrel relation

REPORT down geog w 20 geog_gidrel

---------------GEOG_GIDREL---------------
--------------GEOG_HIERLIST--------------
GEOG              Political_Geog         Sales_Geog
-------------- -------------------- --------------------
Boston         0                    0
Springfield    0                    0
Hartford       0                    0
Mansfield      0                    0
Montreal       0                    0
Walla Walla    0                    0
Portland       0                    0
Oakland        0                    0
San Diego      0                    0
MA             1                    1
CT             1                    1
WA             1                    1
CA             1                    1
Quebec         1                    1
East           NA                   3
West           NA                   3
All Regions    NA                   7
USA            3                    NA
Canada         3                    NA
All Country    7                    NA

"Display the complete definition of the geog_gidrel relation
"Note that it now has a $GID_DEPTH property
DEFINE GEOG_GIDREL RELATION GID_DIMENSION <GEOG GEOG_HIERLIST>
PROPERTY '$GID_DEPTH' 4

すべてのデータ・オブジェクトの値に対するOLAP DML文の適用

OLAP DMLは多次元言語です。したがって、OLAP DMLでは一度の操作が値セット全体に適用されます。これは、概念的には、これらの操作が変数内のすべてのセルの値に適用されると考えられ、一方、物理的には、これらの操作が変数である配列内のすべての要素に適用されると考えられます。したがって、OLAP DMLの代入文(SETまたは=)を使用する場合は、変数のすべての要素に値を代入するための明示的なループをコーディングする必要はありません。かわりに、1つ以上のディメンションを持つオブジェクトに対して文を発行する場合、文はオブジェクトの各ディメンションに対してステータスの値をループ処理し、要求された演算を実行します。

たとえば、3つの値Prod01、Prod02およびProd03を持つprodidという名前のディメンションがあり、prodidによってディメンション化されるquantityという名前の変数があるとします。次のコードの抜粋が示すように、Prod01、Prod02およびProd03がステータス内のすべての値である場合、値3をquantityに代入すると、値3がquantity内のすべての要素に代入されます。

quantity = 3
REPORT quantity

PRODID          QUANTITY
-------------- ----------
PROD01             3.00
PROD02             3.00
PROD03             3.00

他のOLAP DML文(REPORT、ROWおよびFORなど)も、実行時に、ディメンション化されたオブジェクトの要素のうち、ステータスにあるすべての要素をループ処理します。

文のデフォルトのループ動作の変更

文は、デフォルトでは、オブジェクトのディメンションがオブジェクトの定義にリストされている順番に従って、ディメンション化されたオブジェクトの値をループ処理します。さらに、変数がコンポジットによってディメンション化されている場合、ほとんどのループ文は、変数がコンポジットによってディメンション化されているのではなく、コンポジットのベース・ディメンションによってディメンション化されているものとして変数をループ処理します。

OLAP DMLには、デフォルトのループ処理の動作を変更する、あるいはループ処理を明示的に要求する次のような方法があります。

- ACROSS句: 一部のループ・コマンド(値の代入に使用する代入文など)には、デフォルト以外のループ処理の動作を指定できるACROSS句があります。ACROSS句の詳細は、SET(=)コマンドを参照してください。

- ACROSSコマンド: OLAP DML文がループ文ではない場合、あるいはACROSS句を含まない場合、ACROSSコマンドの引数としてDML文をコーディングすることによりループ処理の動作を要求できます。

OLAP DML処理対象のデータ・セットの指定方法

定義された各ディメンションに対して、Oracle OLAPでステータス・リストというリストを使用して、ユーザーがアクセスできるディメンション値を追跡します。

ステータス・リストの概要

Oracle OLAPではデフォルトのステータス・リストと現行のステータス・リストの2種類を使用します。アナリティック・ワークスペース内のディメンションにおける現行のステータス・リストの値によって、常時、OLAP DMLで使用できるデータ・セットが決定されます。

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

ディメンションのデフォルトのステータス・リストとは、アナリティック・ワークスペースの最初のアタッチ時に、値が格納されている順序で読取り権限を持つディメンションのすべての値のリストです。次の方法でディメンションのデフォルトのステータス・リストを変更できます。

- MAINTAINコマンドを使用するか、他の方法(たとえば、SQL FETCH文を使用)でディメンション値を追加して、ディメンションの値の追加、削除、移動、マージおよび名前の変更ができます。

- PERMITまたはPERMITRESET文を使用して、ディメンションに関連付けられた値の読取り権限を変更できます。

現行のステータス・リスト

ディメンションの現行のステータス・リストとは、そのディメンションで現在アクセス可能な値を順序付けしたリストです。ディメンションの現行のステータス・リストに存在する値は、「ステータスにある」と言われます。アナリティック・ワークスペースの最初のアタッチ時は、各ディメンションのデフォルトおよび現行のステータス・リストは同じになります。

ディメンションの現行のステータス・リストによって、アナリティック・ワークスペース内のデータのアクセス可能性が決定されます。

- ディメンションの場合、現行のステータス・リストにあるディメンション値のみが表示され、OLAP DML式でアクセスできます。

- 変数のようなディメンション化されたオブジェクトの場合、現行のステータス・リストにあるディメンション値によって索引付けされるデータ値のみが表示され、OLAP DML式でアクセスできます。ディメンション化されたオブジェクトのループ処理が実行されるとき、現行のステータス・リスト内のディメンション値の順序により、アクセスされるオブジェクトの値の順序が決定されます。

ディメンションとその任意のディメンション・サロゲートは、同じステータスを共有します。ディメンション・サロゲートのステータスの設定により、そのディメンションのステータスが設定され、ディメンションのステータスの設定により、そのディメンションに対するすべてのディメンション・サロゲートのステータスが設定されます。このマニュアルを通して、ディメンションに関するリファレンスの内容は、特に記載がないかぎりはディメンション・サロゲートにも同様に適用されます。また、コンポジットはディメンションではないため、独自のステータスがありません。ステータスにあるコンポジットの値は、コンポジットのベース・ディメンションのステータスによって決定されます。

注意:
ディメンション値がステータスにあるかどうかは、特定のセッション中にOLAP DMLで値を参照できるかどうかにのみ影響します。アナリティック・ワークスペースに格納されている値に永続的に影響することはありません。

データのサブセットを処理するための現行のディメンション・ステータスの変更

ディメンションの現行のステータス・リストがアナリティック・ワークスペース内のデータのアクセス可能性を決定するため、アナリティック・ワークスペース内のデータのサブセットを処理するには、1つ以上のディメンションの現行のステータス・リストを変更する必要があります。

LIMITコマンドを使用して、ディメンションの現行のステータス・リスト内で値および値の順序を変更します。LIMITコマンドは、非常に複雑なOLAP DMLコマンドで、このコマンドを使用して、リレーションを使用して明示的または暗黙的に値を指定することによって、現行のステータス・リスト内の値を指定できます。最も単純な例として、例10-20「LIMITによる変数の部分的な移入」に、LIMITコマンドを使用してディメンションの現行のステータス・リストを変更する方法を示しますが、この方法でデータのサブセットを操作できます。

現行のディメンション・ステータスの保存およびリストア

ディメンションの現行のステータスを保存するには、いくつかの方法があります。ただし方法ごとに、保存の対象となるステータスは異なります。

- 任意のセッション: 任意のセッションで使用するために現行のステータスを保存する場合は、そのステータスを持つ名前付き値セットを作成します。値セットを定義するには、DEFINE VALUESETコマンドを使用します。値セットに値を割り当てるには、LIMITコマンドを使用します。

- 現行のセッション: 現行のセッションで使用するために現行のステータスの保存、アクセスまたは更新を行う場合は、名前付きコンテキストを使用します。コンテキストを定義するには、CONTEXTコマンドを使用します。

- 現行のプログラム: 現行のプログラムで使用するために現行のステータスを保存する場合は、PUSHLEVELコマンドおよびPUSHコマンドを使用します。POPLEVELコマンドおよびPOPコマンドを使用すると、現行のステータス値をリストアできます。

ステータスを変更せずにデータのサブセットを使用する方法

場合によっては、ディメンションの現行のステータス・リストを実際には変更することなく、データのサブセットに対して個々のOLAP DML文またはOLAP DML式を実行する必要があります。このため、ディメンションの名前を指定するかわりに定義済の値セット・オブジェクトを指定できるOLAP DML文が用意されています。また次のいずれかを使用すると、ディメンションの現行のステータス・リストを変更することなく、データのサブセットを指定できます。

- CHGDIMSファンクション。式の評価時に、式のディメンション性やディメンション・ステータスを変更します。

- LIMITファンクション。指定したLIMITコマンドや指定したディメンション・ステータス・スタックの結果として得られたディメンションまたはディメンション・サロゲートの値を、式の評価時に返します。

- 修飾データ参照(QDR)。現行のステータスを変更せずにデータ・オブジェクトの単一の値を指定する場合に、式の1つ以上のディメンションを単一の値に制限できます。

多次元階層データ・オブジェクトの移入

通常、まず変数のベース値をリレーショナル表またはフラット・ファイルから移入します。次に、OLAP DML計算オブジェクトを使用してこれらのベース値からその他の値を計算します。たとえば、集計オブジェクトを定義して、上位の階層にある値を集計することもできます。

また、代入文を使用して、変数、リレーションおよびディメンション・サロゲートに値を代入することも(SETおよびSET1を参照)、MAINTAIN文を使用してディメンションに値を追加することもできます。

ヒント:
第3章「計算式、モデル、集計および割当て」

2 データ型、演算子および式

この章では、次の項目について説明します。

- OLAP DMLのデータ型

- OLAP DML演算子

- OLAP DML式

OLAP DMLのデータ型

他の言語と同様、OLAP DMLのデータ型は、値や値に対して1つ以上の演算を定義したものの種類です。

Oracle OLAP DMLでは、表2-1「OLAP DMLのデータ型の一覧」に示すデータ型をサポートしています。

表2-1 OLAP DMLのデータ型の一覧

データ型

略称

説明

BOOLEAN

BOOL

TRUEおよびFALSEの論理値を表します。

DATE

なし

同じ名前のSQLのデータ型には対応しません。OLAP DML固有の古いデータ型です。

A.D.1000年1月1日からA.D.9999年12月31日までの範囲の日、月および年のデータ(時と分のデータは含みません)。

DATETIME

なし

SQLのDATEデータ型に対応します。

B.C.4712年1月1日からA.D.9999年12月31日までの日付を指定します。デフォルトの書式は、NLS_DATE_FORMATパラメータを使用すると明示的に、NLS_TERRITORYパラメータを使用すると暗黙的に決定されます。サイズは7バイトに固定されています。このデータ型には、YEAR、MONTH、DAY、HOUR、MINUTEおよびSECONDの日時フィールドが含まれます。小数部の秒数およびタイムゾーンは含まれません。

TIMESTAMP

なし

SQLのTIMESTAMPデータ型に対応します。

日付値(年、月および日)と時刻値(時、分および秒)で、SECOND日時フィールドの小数部で最大精度9まで指定できます。デフォルトの書式は、NLS_DATE_FORMATパラメータを使用すると明示的に、NLS_TERRITORYパラメータを使用すると暗黙的に決定されます。サイズは11バイトです。このデータ型には、YEAR、MONTH、DAY、HOUR、MINUTEおよびSECONDの日時フィールドが含まれます。小数部の秒数は含まれますが、タイムゾーンは含まれません。

TIMESTAMP_TZ

なし

SQLのTIMESTAMP WITH TIME ZONEデータ型に対応します。

TIMESTAMPのすべての値とタイムゾーンの時差値で、SECOND日時フィールドの小数部で最大精度9まで指定できます。デフォルトの書式は、NLS_DATE_FORMATパラメータを使用すると明示的に、NLS_TERRITORYパラメータを使用すると暗黙的に決定されます。サイズは13バイトに固定されています。このデータ型には、YEAR、MONTH、DAY、HOUR、MINUTE、SECOND、TIMEZONE_HOURおよびTIMEZONE_MINUTEの日時フィールドが含まれます。小数部の秒数および明示的なタイムゾーンが含まれます。

TIMESTAMP_LTZ

SQLのTIMESTAMP WITH LOCAL TIME ZONEデータ型に対応します。

TIMESTAMP_TZのすべての値。ただし、次の例外を含みます。

- データベースへの格納時、データがデータベースのタイムゾーンに正規化されている場合。

- データは取得時、セッションのタイムゾーンで表示されます。

デフォルトの書式は、NLS_DATE_FORMATパラメータを使用すると明示的に、NLS_TERRITORYパラメータを使用すると暗黙的に決定されます。サイズは11バイトです。

DSINTERVAL

なし

SQLのINTERVAL DAY TO SECONDデータ型に対応します。

日、時、分および秒で期間を格納します。

YMINTERVAL

なし

SQLのINTERVAL YEAR TO MONTHデータ型に対応します。

年と月で期間を格納します。

INTEGER

INT

(-2**31)から(2**31)-1の整数。

SHORTINTEGER

SHORTINT

(-2**15)から(2**15)-1の整数。

LONGINTEGER

LONGINT

(-2**63)から(2**63)-1の整数。

DECIMAL

DEC

-(10**308)から+(10**308)の小数(最大有効桁数15桁)。

SHORTDECIMAL

SHORT

-(10**38)から+(10**38)の小数(最大有効桁数7桁)。

NUMBER [(p,[s])]

なし

-(10**125)から+(10**125)の小数(最大有効桁数38桁)。

TEXT

なし

データベース・キャラクタ・セットで1行に最大32,767バイト。このデータ型は、データベースのCHARデータ型およびVARCHAR2データ型と等価。ただし、このデータ型の変数を定義する際は、変数値に対する最大文字数を2**32から2**64に増加させるため、DEFINE VARIABLE文にRANSPACE64キーワードを指定します。

NTEXT

なし

UTF-8文字コードで1行に最大32,767バイト。このデータ型は、データベースのNCHARデータ型およびNVARCHAR2データ型と等価。ただし、このデータ型の変数を定義する際は、変数値に対する最大文字数を2**32から2**64に増加させるため、DEFINE VARIABLE文にRANSPACE64キーワードを指定します。

ID

なし

データベース・キャラクタ・セットで1行にシングルバイト文字で最大8文字。(IDは、単純なディメンションの値にのみ有効(DEFINE DIMENSION(単純)を参照)。)

RAW (size)

なし

長さがsizeバイトのRAWバイナリ・データ。最大サイズは2000バイト。RAW値に対してサイズの指定が必須です。ただし、このデータ型の変数を定義する際は、変数値に対する最大文字数を2**32から2**64に増加させるため、DEFINE VARIABLE文にRANSPACE64キーワードを指定します。

ROWID

なし。

表の行のアドレスを一意に表すBASE64文字列。主に、ROWID疑似列によって返される値のためのデータ型です。

UROWID

なし

索引編成表の行の論理アドレスを表すBASE64文字列。オプションのsizeは、UROWID型の列のサイズです。最大サイズおよびデフォルトは4,000バイトです。

WORKSHEET

値を特定のデータ型に変換せずに引数を処理する場合に、OLAP DMLプログラムの引数および一時変数に指定します。WKSDATAファンクションを使用して、WORKSHEETデータ型で引数のデータ型を取得します。

データ型のカテゴリ

通常、データ型が属するカテゴリとデータ型は、次のとおりです。

- 数値データ型: INTEGER、SHORTINTEGER、LONGINTEGER、DECIMAL、SHORTDECIMALおよびNUMBER

- テキスト・データ型: TEXT、NTEXTおよびID

- 日時データ型と期間データ型: 日時データ型はDATETIME、TIMESTAMP、TIMESTAMP_TZおよびTIMESTAMP-LTZ、期間データ型はDSINTERVALおよびYMINTERVAL。

- 日付のみのデータ型: OLAP DML固有のDATEデータ型

- ブール・データ型: BOOLEAN

- 行識別子データ型: ROWIDとUROWID

各OLAP DMLデータ・オブジェクトで使用できるデータ型の種類

オブジェクトの種類により、その値で使用されるデータ型が異なります。

- 変数では、すべてのデータ型がサポートされています。

- ディメンションとサロゲートでは、INTEGER、NUMBER、TEXT、ID(単純なディメンションのみ)、NTEXT、DATETIME、TIMESTAMP、TIMESTAMP_TZ、TIMESTAMP-LTZ、DSINTERVALおよびYMINTERVALのデータ型がサポートされています。また、DEFINE DIMENSION(DWMQY)文を使用してDAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンションを定義する場合、そのディメンションの値のデータ型は、日付のみになります。

数値データ型

表2-2「OLAP DMLの数値データ型」に示す数値データ型がサポートされています。

表2-2 OLAP DMLの数値データ型

データ型

データ値

INTEGER

(-2**31)から(2**31)-1の整数。

SHORTINTEGER

(-2**15)から(2**15)-1の整数。

LONGINTEGER

(-2**63)から(2**63)-1の整数。

DECIMAL

-(10**308)から+(10**308)の小数(最大有効桁数15桁)。

SHORTDECIMAL

-(10**38)から+(10**38)の小数(最大有効桁数7桁)。

NUMBER

-(10**125)から+(10**125)の小数(最大有効桁数38桁)。

データを入力する場合、これらのデータ型のどの値も、プラス記号(+)またはマイナス記号(-)で始めることができますが、カンマを含めることはできません。ただし、他の数式に続く負の数の前にはカンマが必要で、カンマがない場合は、マイナス記号は減算演算子として解釈されることに注意してください。また、小数値には小数点を使用できます。データを表示する際、桁区切りおよび小数点は、NLS_NUMERIC_CHARACTERSオプションによって制御されます。

LONGINTEGER値の使用

ほとんどの数値データ型は、値が範囲外の場合、NAを返します。ただし、LONGINTEGERデータ型にはオーバーフロー保護機能がないため、計算結果が範囲外の数値になるような場合、不適切な値が返されます。このことが問題になる場合は、LONGINTEGERのかわりにNUMBERデータ型を使用してください。

NUMBER値の使用

NUMBER変数を定義する場合、必要以上に大きくない適切なその精度(p)およびスケール(s)を指定できます。精度とは有効桁数を指します。スケールには正または負を指定できます。正のスケールは小数点の右側の桁数を識別し、負のスケールは小数点の左側の桁数を識別しますが、この部分は四捨五入される場合があります。

NUMBERデータ型は、Oracle Databaseの標準ライブラリによってサポートされ、SQLでの動作と同様に動作します。テキスト・データ型またはINTEGERデータ型が適切でない場合に、ディメンションおよびサロゲートに使用されます。通常、計算(予測および集計など)に使用されない変数に代入され、データベースの丸め処理に一致する必要がある変数、または高い精度が要求される変数に使用されます。変数にNUMBERデータ型を割り当てるかどうかを判断する場合、パフォーマンスを最適化するために次の点に注意してください。

- NUMBER値はハードウェア(速度優先)ではなくソフトウェア(精度優先)で計算されるため、アナリティック・ワークスペースにおけるNUMBER変数の計算は、他の数値データ型より遅くなります。

- アナリティック・ワークスペースからNUMBERデータ型が含まれるリレーショナル列にデータがフェッチされる場合、アナリティック・ワークスペースでデータにNUMBERデータ型が含まれている場合には、変換手順が不要なため、パフォーマンスが最適化されます。

テキスト・データ型

Oracle OLAPでは、表2-3「OLAP DMLのテキスト・データ型」に示すテキスト・データ型がサポートされています。

表2-3 OLAP DMLのテキスト・データ型

データ型

データ値

TEXT

データベース・キャラクタ・セットで1行に最大32,767バイト。このデータ型は、データベースのCHARデータ型およびVARCHAR2データ型と等価。

NTEXT

UTF-8文字コードで1行に最大32,767バイト。このデータ型は、データベースのNCHARデータ型およびNVARCHAR2データ型と等価。

ID

データベース・キャラクタ・セットで1行にシングルバイト文字で最大8文字。(IDは、単純なディメンションの値にのみ有効(DEFINE DIMENSION(単純)を参照)。)

テキスト・リテラル

テキスト・リテラルは、一重引用符で囲む必要があります。Oracle OLAPは、引用符で囲まれていない英数字をオブジェクト名として認識し、二重引用符はコメントの開始として認識します。

引用符付き文字列内に引用符付き文字列を埋め込むことができますが、これは、コンポジットまたは結合ディメンションのベース・ディメンション値を指定する場合、または値にアポストロフィが含まれている場合に必要となる処理です。Oracle OLAPでは、テキスト文字列であることを示すために一重引用符が使用されるため、一重引用符は、テキスト文字列の中で使用される場合は特殊記号とみなされます。したがって、テキスト文字列内で一重引用符のリテラル値を指定する場合は、引用符の前にバックスラッシュを付けます。

たとえば、New YorkおよびApple Sauceがmarkprod結合ディメンションのベース・ディメンション値の有効な組合せであるかどうかを確認するとします。次の文によって、YESまたはNOの結果が返されます。

SHOW ISVALUE(markprod, '<\'New York\' \'Apple Sauce\'>')

埋込みの引用符付き文字列にさらに次のレベルの埋込みがある場合、次の文に示すように、「Joe's Deli」のアポストロフィや、その前に置く必要があるバックスラッシュなどの特殊文字の前にはそれぞれ、バックスラッシュを使用する必要があります。

SHOW ISVALUE(markprod, '<\'Joe\\\'s Deli\' \'Apple Sauce\'>')

エスケープ・シーケンス

表2-4「認識されるエスケープ・シーケンス」は、Oracle OLAPによって認識されるエスケープ・シーケンスを示しています。

表2-4 認識されるエスケープ・シーケンス

シーケンス

意味

\b

バックスペース。

\f

改ページ。

\n

ライン・フィード(改行)。

\r

キャリッジ・リターン(改行)。

\t

水平タブ。

\"

二重引用符。

\'

一重引用符。

\\

バックスラッシュ。

\dnnn

ASCIIコードnnn(10進)の文字。\dは10進のエスケープを示し、nnnは文字の10進値。

\xnn

ASCIIコードnn(16進)の文字。\xは16進のエスケープを示し、nnは文字の16進値。

\Unnnn

Unicode nnnnの文字で、\UはUnicodeのエスケープを示し、nnnnは値U+nnnnでUnicodeのコード・ポイントを表す4桁の16進のINTEGER値。Uは、大文字にする必要がある。

日付のみのデータ型

Oracle OLAP DMLのDATEデータ型は、同じ名前のSQLのデータ型に対応しません。むしろ、OLAP DML固有の古いデータ型です。OLAP DMLのDATEデータ型は、変数と、DAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンションに対して有効なデータ型です(DEFINE DIMENSION(DWMQY)コマンドの項を参照)。A.D.1000年1月1日からA.D.9999年12月31日までの日、月および年のデータ(時と分のデータは含まない)を格納するのに使用されます。OLAP DMLのDATEデータ型は時と分のデータは含まないため、通常、日付のみのデータ型と呼ばれます。

ヒント:
SQLのDATEデータ型に対応するOracle OLAP DMLのデータ型は、DATETIMEという名前です。詳細は、DATETIMEデータ型を参照してください。

関連項目:
「日付のみのデータ型オプション」

日付のみの入力値

DATE型の有効な入力リテラル値は、数値、パック数値または月名という3つのスタイルのいずれか1つに従う必要があります。これらのスタイルは、セッション全体で混在していても構いません。

ヒント:
テキスト式(TEXTデータ型またはIDデータ型を持つ式など)が有効な日付のみの値であるかどうかを確認するには、ISDATEプログラムを使用します。

数値スタイル

次のルールに基づき、日、月、年を3つのINTEGER値と1つ以上のセパレータを使用して指定します。

- 日および月の構成要素には、1桁または2桁を使用できます。

- すべての年について、年の構成要素として4桁を使用できます(1997など)。1950から2049年の範囲内の年については、年の構成要素として2桁も使用できます(50は1950を表す、など)。

- 各要素間のセパレータには、空白、ダッシュ(-)、スラッシュ(/)、コロン(:)またはカンマ(,)を使用できます。

例: '24/4/97'または'24-04-1997'

パック数値スタイル

次のルールに基づき、日、月、年を3つのINTEGER値を使用して指定します。ここではセパレータは使用しません。

- 日および月の構成要素は、2桁である必要があります。日または月が10より小さい場合は、前にゼロを付けます。

- すべての年について、年の構成要素として4桁を使用できます(1997など)。1950から2049年の範囲内の年については、年の構成要素として2桁も使用できます(50は1950を表す、など)。

- 日付の構成要素間にセパレータは使用できません。

例: '240497'または'04241997'

月名スタイル

次のルールに基づき、日および年をINTEGER値で、月をテキストで指定します。

- 月の構成要素は、MONTHNAMESオプションでリストされている名前の1つに一致する必要があります。MONTHNAMES内の名前の先頭に一意で一致するのに十分な文字数である場合に、月の名前は1文字またはそれ以上の数の文字に略すことができます。月の構成要素の大文字/小文字は、MONTHNAMESの大文字/小文字と一致している必要はありません。

- 日の構成要素には、1桁または2桁を使用できます。

- すべての年について、年の構成要素として4桁を使用できます(1997など)。1950から2049年の範囲内の年については、年の構成要素として2桁も使用できます(50は1950を表す、など)。

- 日と年の構成要素が隣接しているときは、それらの構成要素間に少なくとも1つのセパレータが必要です。セパレータには、空白、ダッシュ(-)、スラッシュ(/)、コロン(:)またはカンマ(,)を使用できます。必要に応じて、日と月の間、または年と月の間に1つ以上のセパレータを配置できます。

例: '24APR97'、'24 ap 97'または'April 24, 1997'

日付のみのディメンション値

DAY型、WEEK型、MONTH型、QUARTER型またはYEAR型のディメンションについて、日付のみの値の書式は、オブジェクトに関連付けられたVNF(値名書式)によって決定されます。VNFは、日付のみの値の入力書式および表示書式を制御するテンプレートです。テンプレートには、期間を特定する構成要素(日、月、暦年、会計年度および会計年度内の期間)の書式を指定できます。VNFをオブジェクトと関連付けるには、VNF文をその定義に追加します。VNFをオブジェクトのディメンションに追加しない場合、オブジェクトではデフォルトのVNFが使用されます(表2-5「DWMQYディメンションに対するデフォルトのVNF」を参照)。

表2-5 DWMQYディメンションに対するデフォルトのVNF

ディメンションの型

デフォルトのVNF

例

DAY

<DD><MTXT><YY>

01JAN95

WEEK

W<P>.<FF>

W1.95

複数のWEEK

<NAME><P>.<FF>

MYWEEK1.95

MONTH

<MTXT><YY>

JAN95

複数のMONTH

<NAME><P>.<FF>

MYMONTH1.95

QUARTER

Q<P>.<FF>

Q1.95

YEAR

YR<YY>

YR95

日付のみの値では、入力書式と出力書式を個別に指定できます。あるスタイルで日付のみの値を入力し、別のスタイルでそれらの値をレポートできます。

日付のみの変数表示スタイル

出力で日付のみの変数値を表示する場合、書式はDATEFORMATオプションに基づきます。デフォルトの書式は、2桁の日付、3文字の月、および2桁の年です(たとえば、03MAR97)。月名のテキストは、MONTHNAMESオプションに基づきます。月、日および年の構成要素の順序を変更するには、DATEORDERオプションを参照してください。

日時および間隔のデータ型

OLAP DMLには、SQLの日時データ型と期間データ型に対応するデータ型があります。表2-6「OLAP DMLの日時データ型および期間データ型と、対応するSQLのデータ型」に示されているように、データ型の名前はOLAP DMLとSQLでは異なります。

表2-6 OLAP DMLの日時データ型および期間データ型と、対応するSQLのデータ型

OLAP DMLのデータ型

対応するSQLのデータ型

DATETIME

DATE

TIMESTAMP

TIMESTAMP

TIMESTAMP_TZ

TIMESTAMP WITH TIMEZONE

TIMESTAMP_LTZ

TIMESTAMP WITH LOCAL TIME ZONE

DSINTERVAL

INTERVAL DAY TO SECOND

YMINTERVAL

INTERVAL YEAR TO MONTH

OLAP DMLの日時データ型は、DATETIME、TIMESTAMP、TIMESTAMP_TZおよびTIMESTAMP_LTZです。期間データ型は、YMINTERVALおよびDSINTERVALです。日時と期間は両方ともフィールドで構成されています(「日時フィールドと期間フィールド」を参照)。

注意:
Oracle OLAP DMLにはDATEという名前のデータ型がありますが、これは同じ名前のSQLのデータ型に対応しません。(OLAP DMLのDATEデータ型は、SQLの日時データ型と期間データ型がOLAP DMLに実装される前に実装されました。)OLAP DMLのDATEデータ型は日付値のみ(時刻値は含まない)を格納するため、日付のみのデータ型と呼ばれることがあります。

日時フィールドと期間フィールド

日時と期間は両方ともフィールドで構成されています。これらのフィールドの値によってデータ型の値が決まります。表2-7「日時フィールドと値」に、日時フィールドと、日時および期間で使用できる値を示します。

ヒント:
日時データの操作で予期しない結果を回避するには、DBTIMEZONEとSESSIONTIMEZONEを使用してデータベースとセッションのタイムゾーンを確認できます。タイムゾーンを手動で設定しなかった場合、Oracle Databaseではデフォルトでオペレーティング・システムのタイムゾーンが使用されます。オペレーティング・システムのタイムゾーンがOracleで有効でない場合は、Oracleは、協定世界時(UTC)(以前のグリニッジ標準時)をデフォルトの値として使用します。

表2-7 日時フィールドと値

日時フィールド

日時データ型の有効な値

期間データ型の有効な値

YEAR

-4712から9999(0年を除きます)

任意の正および負の整数

MONTH

01から12

0から11

DAY

01から31(現行のNLS暦年のパラメータのルールに基づき、MONTHおよびYEARの値で制限されます)

任意の正および負の整数

HOUR

00から23

0から23

MINUTE

00から59

0から59

SECOND

00から59.9(n)(「9(n)」は秒の小数部の精度)。9(n)部分はDATETIMEでは適用されません。

0から59.9(n)。ただし、9(n)は期間の小数秒の精度。

TIMEZONE_HOUR

-12から14(この範囲は夏時間の変更を保存します)。DATETIMEやTIMESTAMPには適用されません。

適用なし

TIMEZONE_MINUTE

(表の終わりの注意を参照)

00から59。DATETIMEやTIMESTAMPには適用されません。

適用なし

TIMEZONE_REGION

V$TIMEZONE_NAMESデータ・ディクショナリ・ビューのTZNAME列を問い合せます。DATETIMEやTIMESTAMPには適用されません。

すべてのタイムゾーン地域の完全なリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

適用なし

TIMEZONE_ABBR

V$TIMEZONE_NAMESデータ・ディクショナリ・ビューのTZABBREV列を問い合せます。DATETIMEやTIMESTAMPには適用されません。

適用なし

注意: TIMEZONE_HOURとTIMEZONE_MINUTEの両方を指定すると、書式+|- hh:mmのエンティティ(値は-12:59から+14:00の範囲)として解釈されます。

関連項目:
「日時式と期間式」

日時書式テンプレート

日時書式テンプレートは、文字列に格納する日時データの書式を示すテンプレートです。書式モデルによってデータベース内に格納された値の内部表現は変更されません。文字列を日付に変換する場合、書式モデルによってOracle Databaseによる文字列の解釈方法が決定されます。OLAP DML文では、書式モデルをTO_CHARおよびTO_DATEファンクションの引数として使用して次を指定できます。

- Oracleがデータベースから値を戻す場合に使用する書式

- Oracleがデータベースに格納するために指定した値の書式

日時書式テンプレートは、次のファンクションで使用できます。

- デフォルト書式以外の書式の文字値を日時値に変換するTO_*日時ファンクション(TO_*日時ファンクションとは、TO_CHAR、TO_DATE、TO_TIMESTAMP、TO_TIMESTAMP_TZ、TO_YMINTERVALおよびTO_DSINTERVALです。)

- TO_CHARファンクション。このファンクションは、デフォルトの書式以外の書式の日時値を文字列に変換する場合(アプリケーションから日付を出力する場合など)に使用します。

デフォルトの日時書式は、NLS_DATE_FORMAT初期化パラメータを使用すると明示的に、NLS_TERRITORY初期化パラメータを使用すると暗黙的に指定されます。セッションのデフォルトの日時書式は、ALTER SESSION文で変更できます。このデフォルトを変更して、特定のOLAP DMLオブジェクトで使用する日時書式を指定するには、DATE_FORMATコマンドを使用して、オブジェクトの定義に日時書式を追加します。

文字列から日付への変換ルール

次の書式設定のルールは、文字列値を日時値に変換する場合に適用されます(ただし、書式モデルで修飾子FXまたはFXFMを使用して完全一致の書式検査を制御した場合は適用されません)。

- 先行ゼロを含む数値書式要素の桁がすべて指定されている場合は、日付文字列の書式文字列に含まれる句読点を省略できます。たとえば、MM、DD、YYなどの2桁の書式要素で、2ではなく02を指定する場合です。

- 日付文字列の書式文字列で最後にある時刻フィールドを省略できます。

- 日時書式要素と日付文字列内の対応する文字の一致に失敗した場合、かわりの書式要素が適用されます(表2-8「Oracleの書式一致」を参照)。

表2-8 Oracleの書式一致

元の書式要素

元の書式要素のかわりに使用される書式要素

'MM'

'MON'および'MONTH'

'MON

'MONTH'

'MONTH'

'MON'

'YY'

'YYYY'

'RR'

'RRRR'

DATETIMEデータ型

OLAP DMLのDATETIMEデータ型は、SQLのDATEデータ型に対応します。DATETIME値の書式および言語は、NLS_DATE_FORMATオプションおよびNLS_DATE_LANGUAGEオプションの設定によって制御されます。DATETIMEデータ型は、Oracle Databaseの標準ライブラリによってサポートされ、OLAP DMLではSQLのDATEデータ型の動作と同様に動作します。

注意:
Oracle OLAP DMLにはDATEという名前のデータ型がありますが、これは同じ名前のSQLのデータ型に対応しません。OLAP DMLのDATEデータ型は日付値のみ(時刻値は含まない)を格納するため、日付のみのデータ型と呼ばれることがあります。DATE値の書式設定を制御するDATEORDER、DATEFORMATおよびMONTHNAMESの各オプションは、DATETIME値には影響しません。ただし、DATETIME値およびDATE値は、ほとんどのDML文で区別なく使用できます。

DATETIME値は文字列リテラルとして指定できます。また、TO_DATEファンクションを使用すると、文字または数値を日付値に変換できます。

DATETIME値をリテラルとして指定するには、グレゴリオ暦を使用する必要があります。次の例のように、ANSIリテラルを指定できます。

DATETIME '1998-12-25'

ANSI日付リテラルには時刻部分がなく、'YYYY-MM-DD'書式で正確に指定する必要があります。

または、次の例に示すように、TO_DATEファンクションを使用してDATETIME値を指定することもできます。

TO_DATE('98-DEC-25 17:30','YY-MON-DD HH24:MI')

OracleのDATETIME値のデフォルトの日付書式テンプレートは、NLS_DATE_FORMAT初期化パラメータで指定されます。この例の日付書式には、日を表す2桁の数値、月名の略称、年の最後の2桁および24時間指定が含まれています。

デフォルトの日時書式の文字値が日時式に使用されている場合は、日時値に自動的に変換されます。

時刻要素を含めずに日時値を指定すると、デフォルトの時刻として午前0時(24時間制で00:00:00または12時間制で12:00:00)に設定されます。日付を含めずに日時値を指定すると、デフォルトの日付として現在の月の第1日に設定されます。

DATETIMEの値には、常に日付と時刻の両方のフィールドが含まれます。したがって、式でDATETIME値を使用する場合、問合せで時刻フィールドを指定するか、DATETIME値の時刻フィールドが午前0時に設定されていることを確認する必要があります。そうでない場合、Oracleは、正しい結果を戻さない場合があります。TRUNC(日付)ファンクションを使用して、時刻フィールドを午前0時に設定でき、または、問合せに、等価条件や非等価条件のかわりに大/小条件を含めることもできます。ただし、式に午前0時以外のDATETIME値が含まれる場合、正しい結果を得るためには、問合せで時刻フィールドを排除する必要があります。

SYSDATE日付ファンクションは、現在のシステムの日付および時刻を返します。CURRENT_DATEファンクションは、現行のセッションの日付を返します。SYSDATE、TO_*日時ファンクション、およびデフォルトの日付書式の詳細は、「日時ファンクション」およびDATE_FORMATコマンドを参照してください。

TIMESTAMPデータ型

TIMESTAMPデータ型は、DATETIMEデータ型の拡張です。DATETIMEデータ型の年、月および日に加えて、時、分および秒の値が格納されます。このデータ型は、正確な時刻値を格納する場合に有効です。

SHOW SYSDATE
26-JUL-06

DEFINE mytimestamp VARIABLE TIMESTAMP
mytimestamp = SYSDATE
COLWIDTH = 30
REPORT mytimestamp
MYTIMESTAMP
------------------------------
26-JUL-06 10.44.42 AM

TIMESTAMPデータ型には、年、月、日、時、分、秒および小数秒の値が格納されます。TIMESTAMPをリテラルとして指定する場合、小数秒の精度値は次のように最大9桁の数になります。

TIMESTAMP '1997-01-31 09:26:50.124'

TIMESTAMP_TZデータ型

TIMESTAMP_TZは、SQLのTIMESTAMP WITH TIMEZONEデータ型に対応します。値にタイムゾーン・オフセットを含むTIMESTAMPのバリアントです。タイムゾーン・オフセットは、ローカルの時刻とUTC(時および分)との差異です。このデータ型は、複数の地理的地域にまたがって日付情報を収集および評価する場合に役立ちます。

Oracleのタイムゾーン・データは、http://www.iana.org/time-zonesから入手できるパブリック・ドメイン情報に基づいています。ただし、このサイトから入手できる最新情報を反映しているとは限りません。

TIMESTAMP_TZデータ型は、タイムゾーン・オフセットを含むTIMESTAMPのバリアントです。TIMESTAMP_TZをリテラルとして指定する場合、小数秒の精度値は最大9桁の数になります。次に例を示します。

TIMESTAMP '1997-01-31 09:26:56.66 +02:00'

2つのTIMESTAMP_TZ値がUTCで同じ時刻を表している場合は、データに格納されているTIME ZONEのオフセットに関係なく同一とみなされます。たとえば、

TIMESTAMP '1999-04-15 8:00:00 -8:00'

前述の場合と次の場合は同等です。

TIMESTAMP '1999-04-15 11:00:00 -5:00'

つまり、太平洋標準時の午前8:00は、東部標準時の午前11:00と同等です。

UTCオフセットはTZR(タイムゾーン・リージョン)書式要素で置き換えることができます。たとえば、次の例は上述の例と同じ値を示しています。

TIMESTAMP '1999-04-15 8:00:00 US/Pacific'

夏時間への切替時の境界を明確にするには、TZR書式要素および対応するTZD書式要素の両方を使用します。次のように指定すると、上述の例で確実に夏時間の値が返されます。

TIMESTAMP '1999-10-29 01:30:00 US/Pacific PDT'

日時式を使用してタイムゾーン・オフセットを表現することもできます。

関連項目:
「日時式と期間式」

ERROR_ON_OVERLAP_TIMEセッション・パラメータをTRUEに設定していて、TZD書式要素を追加しない場合、日時値が不明確であると、エラーが返されます。そのパラメータがFALSEに設定されている場合、不明確な日時は、指定されている地域の標準時間として解釈されます。

TIMESTAMP_LTZデータ型

TIMESTAMP_LTZは、SQLのTIMESTAMP WITH LOCAL TIMEZONEデータ型に対応します。値にタイムゾーン・オフセットを含むTIMESTAMPのもう1つのバリアントです。これは、TIMESTAMP_LTZとは異なり、データベースに格納されるデータはデータベース・タイムゾーンに対して正規化され、タイムゾーン・オフセットは列データの一部として格納されません。ユーザーがデータを検索すると、Oracleはユーザーのローカル・セッション・タイムゾーンのデータを戻します。タイムゾーン・オフセットは、ローカルの時刻とUTC(時および分)との差異です。このデータ型は、2層アプリケーションのクライアント・システムでタイムゾーンの日付情報を表示する場合に有効です。

Oracleのタイムゾーン・データは、http://www.iana.org/time-zonesから入手できるパブリック・ドメイン情報に基づいています。ただし、このサイトから入手できる最新情報を反映しているとは限りません。

TIMESTAMP_LTZデータ型は、TIMESTAMP_TZとは異なり、データベースに格納されるデータはデータベースのタイムゾーンに対して正規化されます。タイムゾーン・オフセットは列データの一部として格納されません。TIMESTAMP_LTZ用のリテラルはありません。このデータ型の値は、その他の有効な日時リテラルを使用して表します。次の表に、TIMESTAMP_LTZ値をオブジェクトに追加する場合に使用できる書式と、SHOWコマンドなどのOLAP DML文で返される各値の対応を示します。

値の追加時に指定する値

戻り値

'19-FEB-2004'

19-FEB-2004.00.00.000000 AM

SYSTIMESTAMP

19-FEB-04 02.54.36.497659 PM

TO_TIMESTAMP('19-FEB-2004', 'DD-MON-YYYY'));

19-FEB-04 12.00.00.000000 AM

SYSDATE

19-FEB-04 02.55.29.000000 PM

TO_DATE('19-FEB-2004', 'DD-MON-YYYY'));

19-FEB-04 12.00.00.000000 AM

TIMESTAMP'2004-02-19 8:00:00 US/Pacific');

19-FEB-04 08.00.00.000000 AM

指定した値に時刻コンポーネントがない場合(明示的または暗黙的に)、デフォルトの午前0時の値が戻されます。

YMINTERVALデータ型

YMINTERVALは、SQLのINTERVAL YEAR TO MONTHデータ型に対応します。YEARおよびMONTH日時フィールドを使用して期間が格納されます。このデータ型は、年および月の値のみが重要な場合に、2つの日時の値の正確な違いを表す場合に有効です。

YMINTERVAL期間リテラルは、次の構文を使用して指定します。

INTERVAL 'integer [- integer ]' YEAR|MONTH [(precision) ] [TO YEAR | MONTH ]

ただし、

- 'integer [-integer]'には、先行および後続のフィールドにリテラルの整数値を指定します。先行のフィールドがYEARで後続のフィールドがMONTHの場合、月フィールドの整数値の範囲は0から11になります。

- precisionは、先行フィールドの最大桁数です。先行フィールドの精度の有効範囲は0から9で、デフォルト値は2です。

後続のフィールドを指定する場合、先行のフィールドよりも下位の単位を指定する必要があります。たとえば、INTERVAL '0-1' MONTH TO YEARは無効です。

次のYMINTERVALリテラルは、123年2か月の期間を示します。

INTERVAL '123-2' YEAR(3) TO MONTH

リテラルの他の書式の例を次に示します。簡略バージョンも一部含みます。

期間リテラルの書式

解釈

INTERVAL '123-2' YEAR(3) TO MONTH

123年2か月の期間。先行のフィールドの精度がデフォルトの2桁を超える場合、精度を指定する必要がある。

INTERVAL '123' YEAR(3)

123年0か月の期間。

INTERVAL '300' MONTH(3)

300か月の期間。

INTERVAL '4' YEAR

INTERVAL '4-0' YEAR TO MONTHにマップされ、4年を示す。

INTERVAL '50' MONTH

INTERVAL '4-2' YEAR TO MONTHにマップされ、50か月または4年2か月を示す。

INTERVAL '123' YEAR

エラーを返す。デフォルトの精度が2で、'123'は3桁であるため。

あるINTERVAL YEAR TO MONTHリテラルを別のリテラルに加算または減算して、新しいINTERVAL YEAR TO MONTHリテラルを作成できます。次に例を示します。

INTERVAL '5-3' YEAR TO MONTH + INTERVAL'20' MONTH =
INTERVAL '6-11' YEAR TO MONTH

DSINTERVALデータ型

DSINTERVALは、SQLのINTERVAL DAY TO SECONDデータ型に対応します。日、時、分および秒で期間が格納されます。このデータ型は、2つの日時の値の正確な違いを表す場合に有効です。

DSINTERVAL期間リテラルは、次の構文を使用して指定します。

INTERVAL 'integer|integer time_expr|time_expr

DAY|HOUR|MINUTE [(leading_precision)] | SECOND [leading_precision[, fractional_seconds_precision ])]

[ TO DAY|HOUR|MINUTE|SECOND [(fractional_seconds_precision) ]]

ただし、

- integerには日数を指定します。この値は、先行の精度で指定される数より桁数が大きいと、エラーが返されます。

- time_exprには、HH[:MI[:SS[.n]]]、MI[:SS[.n]]またはSS[.n]書式で時間を指定します(ここで、nは秒の小数部を指定します)。nの桁数が、fractional_seconds_precisionで指定した数より多い場合、nはfractional_seconds_precision値で指定した数に丸められます。先行フィールドがDAYの場合にのみ、1桁の整数および1つの空白の後にtime_exprを指定できます。

- leading_precisionは、先行フィールドの桁数です。有効範囲は0から9です。デフォルトは2です。

- fractional_seconds_precisionは、SECOND日時フィールドの小数部の桁数です。有効範囲は1から9です。デフォルトは6です。

後続のフィールドを指定する場合、先行のフィールドよりも下位の単位を指定する必要があります。たとえば、INTERVAL MINUTE TO DAYは無効です。この制限のため、SECONDが先行のフィールドの場合、期間リテラルは後続のフィールドを指定できません。

後続フィールドの値の有効範囲は、次のとおりです。

- HOUR: 0から23

- MINUTE: 0から59

- SECOND: 0から59.999999999

DSINTERVALリテラルの様々な書式の例を次に示します。簡略バージョンも一部含みます。

期間リテラルの書式

解釈

INTERVAL '4 5:12:10.222' DAY TO SECOND(3)

4日5時間12分10秒222ミリ秒。

INTERVAL '4 5:12' DAY TO MINUTE

4日5時間12分。

INTERVAL '400 5' DAY(3) TO HOUR

400日5時間。

INTERVAL '400' DAY(3)

400日。

INTERVAL '11:12:10.2222222' HOUR TO SECOND(7)

11時間12分10.2222222秒。

INTERVAL '11:20' HOUR TO MINUTE

11時間20分。

INTERVAL '10' HOUR

10時間。

INTERVAL '10:22' MINUTE TO SECOND

10分22秒。

INTERVAL '10' MINUTE

10分。

INTERVAL '4' DAY

4日。

INTERVAL '25' HOUR

25時間。

INTERVAL '40' MINUTE

40分。

INTERVAL '120' HOUR(3)

120時間。

INTERVAL '30.12345' SECOND(2,4)

30.1235秒。小数秒'12345'は精度が4であるため、'1235'に丸められる。

DAY TO SECOND期間リテラルを別のDAY TO SECOND期間リテラルに加算または減算できます。次に例を示します。

INTERVAL'20' DAY - INTERVAL'240' HOUR = INTERVAL'10-0' DAY TO SECOND

ブール・データ型

BOOLEANデータ型は、論理値を表します。コードでは、BOOLEAN値は「no」および「yes」を示す値(大文字および小文字の任意の組合せ)により表されます。Oracle OLAPの使用しているリリースで認識される実際の値は、NLS_LANGUAGEオプションによって指定される言語で決まります。読取り専用のNOSPELLおよびYESSPELLオプションを使用して、BOOLEAN値を表す値を取得できます。英語の言語コードでは、次の語を使用してBOOLEAN値を表すことができます。

- YES、TRUE、ON

- NO、FALSE、OFF

BOOLEAN式の使用については、「ブール式」を参照してください。

RAWデータ型

RAWデータ型には、Oracle Databaseにより解釈されない(つまり、異なるシステム間でデータを移動する際に明示的に変換されない)データが格納されます。RAWデータ型は、バイナリ・データまたはバイト文字列用として使用されます。

RAWデータを指定するための構文は次のとおりです。

RAW(size)

最大2000バイトまでのサイズを指定する必要があります。

RAWは可変長のデータ型ですが、Oracle Net(ユーザー・セッションをインスタンスに接続する)およびOracle Databaseユーティリティでは、RAWデータを転送する際に文字変換が実行されません。

Oracleでは、RAWデータとテキスト・データ間の変換が自動的に実行され、バイナリ・データは16進形式で表され、1つの16進文字がRAWデータの各4ビットを表しています。たとえば、ビット11001011の1バイトのRAWデータは、CBとして表示および入力されます。

関連項目:
HEXTORAWファンクションおよびRAWTOHEXファンクション

行識別子データ型

行識別子データ型は、リレーショナル表の行のアドレスを格納するために使用されます。OLAP DMLでは、リレーショナル表のデータをアナリティック・ワークスペース内のオブジェクトにコピーするのに使用できる、次の2つの異なるデータ型がサポートされています。

- ROWIDデータ型

- UROWIDデータ型

ROWIDデータ型

ROWID疑似列を問い合せることで、リレーショナル表の行のアドレスを調べることができます。この疑似列の値は、各行のアドレスを表す文字列です。これらの文字列はROWIDデータ型を持ちます。

注意:
ROWIDデータ型の実際の列を含むリレーショナル表およびクラスタを作成できます。Oracle Databaseでは、このような列の値が有効なROWIDであることは保証されません。

ユーザー列に格納された拡張ROWIDデータ型には、制限付きROWIDのデータとデータ・オブジェクト番号が含まれます。データ・オブジェクト番号は、各データベース・セグメントに割り当てられた識別番号です。データ・オブジェクト番号は、データ・ディクショナリ・ビューUSER_OBJECTS、DBA_OBJECTSおよびALL_OBJECTSから取得できます。同じセグメントを共有するオブジェクト(同じクラスタ内のクラスタ化された表など)は、同じオブジェクト番号を持ちます。

拡張ROWIDは、文字AからZ、aからz、0から9、プラス記号(+)およびスラッシュ(/)を含めることが可能なBASE64値として格納されます。拡張ROWIDは直接取得できません。拡張ROWIDの内容を解釈するには、提供されるDBMS_ROWIDパッケージを使用します。このパッケージ・ファンクションを使用すると、制限付きROWIDから直接取得できる可能性のある情報および拡張ROWID固有の情報が抽出および提供されます。

関連項目:
『Oracle Database SQL言語リファレンス』のROWID疑似列についての説明。

UROWIDデータ型

一部のリレーショナル表の列は、物理的でないアドレスや永続的でないアドレス、あるいはOracle Databaseによって生成されたものではないアドレスを持ちます。たとえば、索引編成表の行のアドレスは、移動可能な索引リーフに格納されます。外部表(ゲートウェイを介してアクセスされるDB2表など)のROWIDは、Oracle標準のROWIDではありません。

Oracleでは、索引編成表と外部表のアドレスはユニバーサルROWID(UROWID)を使用して格納されます。索引編成表は論理UROWIDを持ち、外部表は外部UROWIDを持ちます。どちらのタイプのUROWIDも、ヒープ編成表の物理ROWIDと同様にROWID疑似列に格納されます。

論理ROWIDは表の主キーに基づいて作成されます。主キーに変更がない場合、論理ROWIDは変更されません。索引編成表のROWID疑似列は、UROWIDデータ型です。この疑似列には、ヒープ編成表のROWID疑似列と同様に(SELECT ... ROWID文を使用して)アクセスできます。索引編成表のROWIDを格納するには、表に対してUROWID型の列を定義し、その列にROWID疑似列の値を取り出します。

関連項目:
『Oracle Database SQL言語リファレンス』のUROWIDについての説明。

データ型の変換

多くの場合、Oracle OLAPではデータ型の変換が自動的に実行されます(「テキスト・データ型の自動変換」および「数値データ型の自動変換」を参照)。また、OLAP DMLには値のデータ型変換に使用できるファンクションが数多くあります。

テキスト・データ型の自動変換

NTEXT値をOLAP DML文に引数として指定した場合、Oracle OLAPはそれらの値を自動的にTEXTに変換します。NTEXT値をデータベース・キャラクタ・セットで表すことができない場合、データの損失が発生します。

数値データ型の自動変換

Oracle OLAPは、SHORTINTEGER変数およびINTEGER変数(1バイト固定幅)をINTEGER(4バイト幅)に自動的に変換して計算します。SHORTINTEGER変数の合計を計算すると、32,767より大きいか-32,768より小さい結果を取得および報告できます。1バイトのINTEGER変数の合計を計算すると、127より大きいか-128より小さい結果を取得および報告できます。しかし、それらの結果をそれぞれSHORTINTEGER変数または1バイトのINTEGER変数に代入しようとすると、変数はNAに設定されます。

Oracle OLAPでは、次のルールに従って数値データ型が自動的に変換されます。

- SHORTINTEGERまたはSHORTDECIMALデータ型の値を式で使用する場合、値は使用される前に長い方に変換されます。比較式でSHORTDECIMALおよびDECIMALデータ型を混在させる場合に発生する可能性のある問題の詳細は、「ブール式」を参照してください。

- 計算の結果をSHORTINTEGERデータ型の値として保存する場合、結果がSHORTINTEGERの範囲(-32768から32767まで)外である場合はNAが格納されます。

- DECIMAL式の値をINTEGERデータ型のオブジェクトに代入する場合、格納または使用する前に値が丸められます。

注意:
DECIMAL値がINTEGER値の範囲を超える場合はNAが格納されます。

- INTEGERデータ型の値が必要な場所で小数値を使用する場合、格納または使用する前に値が丸められます。

注意:
DECIMAL値がINTEGER値の範囲を超える場合はNAが格納されます。

- 10進表現の値を、SHORTDECIMALデータ型の変数に代入すると、有効桁の最初の7桁のみが格納されます。

- NUMBER値を他の数値データ型と組み合せると、すべての値がNUMBERに変換されます。

これらの変換とは異なる変換が必要な場合、CONVERT、TO_CHAR、TO_NCHAR、TO_NUMBERまたはTO_DATEファンクションを使用して別の結果を取得できます。

OLAP DML演算子

演算子は、値を変換したり、なんらかの方法で値を別の値と組み合せるための記号です。表2-9「OLAP DML演算子」に、OLAP DML演算子のカテゴリを示します。

表2-9 OLAP DML演算子

カテゴリ

説明

算術

数式で数値データとともに使用され、数値結果を生成する演算子。一部の算術演算子は、結果を日付または数値のいずれかで返す、日付データと数値データが混在した日付式で使用可能。算術演算子のリストは、「算術演算子」を参照。数式の詳細は、「数式」を参照。

比較

基本型(数値型、テキスト型、日付型、または、ごくまれにブール型)が同じである2つの値を比較し、BOOLEAN結果を返す演算子。比較演算子のリストは、「比較演算子および論理演算子」を参照。BOOLEAN式の詳細は、「ブール式」を参照。

論理

論理演算を使用してBOOLEAN値を変換し、BOOLEAN結果を返すAND、ORおよびNOT演算子。論理演算子のリストは、「比較演算子および論理演算子」を参照。BOOLEAN式の詳細は、「ブール式」を参照。

代入

式の結果をオブジェクトに代入したり、値をOLAP DMLオプションに代入したりするための演算子。代入文の使用の詳細は、SETコマンド、SET1コマンドおよび「代入演算子」を参照。

条件

条件に基づいて値を選択するIF...THEN...ELSE、SWITCHおよびCASE演算子。詳細は、「条件式」を参照。

置換

式を評価し、結果の値を置換する&(アンパサンド)演算子。詳細は、「置換式」を参照。

算術演算子

表2-10「算術演算子」は、OLAP DMLの算術演算子、その演算内容および優先順位(演算子が評価される順序)を示します。優先順位が同じ演算子は、左から右に評価されます。数式で複数の演算子を使用する場合、式は算術の標準ルールに従って評価されます。他の数式に続く負の数の前にはカンマが必要で、カンマがない場合は、マイナス記号は減算演算子として解釈されます。たとえば、intvar,-4となります

表2-10 算術演算子

演算子

演算

優先順位

-

記号反転

1

**

指数

2

*

乗算

3

/

除算

3

*

加算

4

-

減算

4

比較演算子および論理演算子

比較演算子および論理演算子は、算術演算子とほぼ同じ方法で式を作成できます。各演算子には優先順位があり、その順位によって評価の順序が決定されます。カッコで評価の順序を変更しないかぎり、優先順位の等しい演算子は、左から右に評価されます。ただし、真の値が確定した時点で、評価は停止されます。

表2-11「比較演算子および論理演算子」は、OLAP DMLの比較演算子および論理演算子(AND、ORおよびNOT)を示しています。この表は、演算子、演算内容、例および優先順位(演算子が評価される順序)をまとめたものです。優先順位が同じ演算子は、左から右に評価されます。

表2-11 比較演算子および論理演算子

演算子

演算

例

優先順位

NOT

BOOLEAN式の反対の値を返す

NOT(YES) = NO

1

EQ

等しい

4 EQ 4 = YES

2

NE

等しくない

5 NE 2 = YES

2

GT

より大きい

5 GT 7 = NO

2

LT

より小さい

5 LT 7 = YES

2

GE

以上

8 GE 8 = YES

2

LE

以下

8 LE 9 = YES

2

IN

日付が期間に含まれているかどうか

'1Jan02' IN myDimension = YES

2

LIKE

テキスト値が指定したテキスト・パターンに一致するかどうか

'Finance' LIKE '%nan%' = YES

2

AND

どちらの式も真

8 GE 8 AND 5 LT 7 = YES

3

OR

どちらか1つの式が真

8 GE 8 OR 5 GT 7 = YES

4

代入演算子

OLAP DMLでは、他の多くのプログラミング言語と同様、代入演算子として記号=(等号)を使用します。

式では一時データが作成され、結果の値は表示できますが、セッション中にアナリティック・ワークスペースに自動的に格納されて後で参照されるということはありません。代入文を使用して、式の結果を、その式と同じデータ型およびディメンションを持つオブジェクトに格納します。オブジェクトを更新およびコミットすると、次回のセッションでその値を使用できます。

他のプログラミング言語と同様、OLAP DMLの代入文はソース式の結果と等しい値をターゲット式に設定します。ただし、OLAP DML代入文の処理は他のプログラミング言語における処理と異なる点があります。他の多くのOLAP DML文と同様、値を単一のセルに代入するのではなく、ターゲット式が多次元オブジェクトの場合、Oracle OLAPがターゲット・オブジェクトのセルをループ処理して各セルにソース式の結果を設定します。さらに、式のディメンションがターゲット・オブジェクトのディメンションと異なる場合は、UNRAVELを使用して式の値をターゲット・オブジェクトのセルにコピーできます。

OLAP DMLにおける代入文の使用に関する詳細は、SETおよびSET1を参照してください。

OLAP DML式

式は、OLAP DMLの構文に従ってデータ値を表したものです。この項では、OLAP DML式に関して次の内容を説明します。

- 「OLAP DML式の概要」

- 「式でのワークスペース・オブジェクトの使用方法」

- 「式における空のセルでの処理」

- 各種のOLAP DML式の詳細は、次のとおりです。

数式

テキスト式

日時式と期間式

日付のみの式

ブール式

条件式

置換式

OLAP DML式の概要

OLAP DML式はデータ型を持ち、ディメンションを持つ場合もあります。文の中で引数として式を使用できます。多くの場合、式は数値演算や論理演算を実行します。式は、常にワークスペースのデータ型の結果に評価されます。

式には、次のものが含まれます。

- リテラル値たとえば、10や'East'

- 複数の値を含むアナリティック・ワークスペース・オブジェクト。たとえば、変数sales

- 1つ以上の値を返すファンクション。たとえば、TOTALやJOINLINES

- リテラル値、ディメンション、変数、計算式およびファンクションを、演算子と組み合せたもう1つの式。たとえば、inflation*1.02

式は計算式として保存できます(「OLAP DML計算式」を参照)。

式のデータ型を判定する方法

式のデータ型が、結果値のデータ型になります。これは、式を構成するデータ・オブジェクトのデータ型と同じになるとは限らず、データ、および関連する演算子とファンクションによって異なります。

また、IF... THEN... ELSE演算子で示される条件式もサポートされます。条件式が返す値のデータ型は、IF句の式(必ずBOOLEANになる)ではなく、THENおよびELSE句の式によって決まります。

注意:
構文は似ていますが目的が異なるため、条件式を、プログラムのIF...THEN...ELSEコマンドと混同しないでください。IF文はデータ型を持たず、式のように評価されることはありません。

式のディメンション性を判定する方法

式のディメンション化は次のように、その式のすべての変数、ディメンション、リレーション、計算式、修飾データ参照およびファンクションのディメンションが1つに結合されることにより行われます。

- 変数、リレーションおよび計算式は、オブジェクトの定義にリストされたディメンションによってディメンション化されます。
例1: price変数がmonthおよびproductによってディメンション化されている場合、式price * 1.2もmonthおよびproductによってディメンション化されます。

例2: units変数がmonth、productおよびdistrictによってディメンション化されている場合、式units * priceはmonth、productおよびdistrictによってディメンション化されます(price変数のディメンションがmonthおよびproductのみの場合でも)。

- 修飾データ参照(QDR)は、修飾されているディメンションを除く、関連付けられているオブジェクトのすべてのディメンションによってディメンション化されます。修飾データ参照の詳細は、「ステータスを変更せずにディメンションを単一の値に制限する方法」を参照してください。

- 通常、ほとんどのOLAP DMLファンクションの戻り値は、入力引数のディメンションの結合によってディメンション化されます。ただし、一部のファンクション(集計ファンクションなど)のディメンションは入力引数より小さくなります。この場合の戻り値のディメンション性については、第7章「OLAP DMLファンクション: AからK」のファンクションの項目を参照してください。

注意:
特に記載されていないかぎり、集計ファンクションで分割ディメンションまたは分割リレーションを指定すると、式のディメンション性が変更されます。分割ディメンションとして指定した最初のディメンションは最も遅く変化し、最後に指定したディメンションは最も速く変化します。

注意:
CHGDIMSファンクションを使用して、式または副式のディメンション性を変更できます。

式のディメンションの判定

PARSE文およびINFOファンクションを発行すると、式のディメンションを調べることができます。PARSEは式のテキストを評価し、INFOは式の解析方法を示します。

この例では、INFOファンクションでDIMENSIONキーワードを使用し、PARSEによって分析された式のディメンションを取得する方法を示します。次の文を発行したとします。

PARSE 'TOTAL(sales region)'

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

SHOW INFO(PARSE DIMENSION)
REGION

ディメンション・ステータスによる式の結果(値の数)への影響

式によって生成される値の数は、式のディメンションおよびそのディメンション・ステータスによって異なります。1つの式によって、現行のステータス内にあるディメンション値の各組合せに対して、1つのデータ値が導出されます。たとえば、ステータスにあるディメンション値がmonthに3つ、productに2つ存在する場合、式price GT 100の結果は6つの値(3 X 2)になります。

そのため、目的の結果を得るには、式のディメンションを検討するデータの範囲に制限する必要があります。また、PERMIT文を使用してデータのディメンションへのアクセスを制限することを考慮する必要があります。

現行のステータスを変更せずに単一の値を指定する場合、修飾データ参照(QDR)を使用できます。QDRを使用すると、ディメンション(式に1つのディメンション値を指定可能)や、変数またはリレーションの1つ以上のディメンションを修飾できます。ディメンション・ステータスの詳細は、「OLAP DML処理対象のデータ・セットの指定方法」を、QDRの詳細は、「ステータスを変更せずにディメンションを単一の値に制限する方法」を参照してください。

式でのワークスペース・オブジェクトの使用方法

式でアナリティック・ワークスペースのデータ・オブジェクトを使用するには、その名前を指定します(「式にオブジェクトを指定する構文」を参照)。式を計算する際、Oracle OLAPは指定されたオブジェクトのデータを使用します(「式におけるOLAP DMLデータ・オブジェクトの動作」を参照)。

式におけるOLAP DMLデータ・オブジェクトの動作

表2-12では、式の中で引数として使用されるオブジェクトのデータを、Oracle OLAPがどのように使用するのかを示します。

表2-12 式のオブジェクト

オブジェクト

式での使用

変数

定義に応じて、1次元配列または多次元配列のデータとして使用。たとえば、代入文のターゲット式またはソース式として使用される。

「式における変数とリレーションの使用方法」および「代入文でのオブジェクトの使用」も参照してください。

リレーション

定義に応じて、1次元または多次元のデータとして使用。たとえば、代入文のターゲット式またはソース式として使用される(「代入文でのオブジェクトの使用」を参照)。

- テキスト式でリレーションを使用する場合、リレーション値はテキスト値として参照される。リレーションに含まれる関連ディメンションの値がテキストに変換され、これらの値を式で使用できる。テキスト・リテラルをリレーションと比較することも可能。

- 数式でリレーションを使用する場合、リレーション値はその関連ディメンションの配列における位置(INTEGER)により参照される。この数値は式で使用可能。位置番号は、ディメンションの現行のステータス・リストではなく、ディメンションのデフォルトのステータス・リストに基づく。

「式における変数とリレーションの使用方法」および「式における関連ディメンションの使用方法」も参照してください。

ディメンション

1次元配列のデータとして使用。数式でTEXTディメンション値を使用する際や、非数値のディメンション値を比較する際、Oracle OLAPは値そのものではなく、配列にある値のINTEGER位置番号(デフォルトのステータス・リストに基づく)を使用する。

「CONCATディメンションの値の指定」および「式における関連ディメンションの使用方法」も参照してください。

コンポジット

ディメンションが使用可能な場所ではコンポジットを使用できる。

「コンポジットの値の指定」も参照してください。

値セット

ディメンション値のリストとして使用。

「式における変数とリレーションの使用方法」およびDEFINE VALUESETコマンドも参照してください。

ディメンション・サロゲート

1次元配列として使用。サロゲートは、ディメンションの値の代替セットを提供する。数式でTEXTサロゲート値を使用する際や、非数値のサロゲートの値を比較する際、Oracle OLAPは値そのものではなく、配列にある値のINTEGER位置番号(デフォルトのステータス・リストに基づく)を使用する。

注意: モデル、LIMITコマンド、修飾データ参照、または文(FILEREAD、FILEVIEW、SQL FETCH、SQL IMPORTなど)でロードするデータでは、ディメンションのかわりにサロゲートを使用できる。他のオブジェクトを定義するDEFINE文の場合、引数のオブジェクトにサロゲートは指定できない。

計算式

文の副式または式として使用。

プログラム

値を返さないプログラムでは、OLAP DMLコマンドと同様にプログラム名を使用する。値を返すプログラムでは、OLAP DMLファンクションを実行するのと同じ方法(式の中でプログラム名を使用し、プログラム引数がある場合はカッコで囲む)でプログラムを実行する。

式にオブジェクトを指定する構文

次の構文を使用して、アナリティック・ワークスペース・オブジェクトを式の中に指定できます。

[[schema-name.]analytic-workspace-name!]object-name

schema-name

アナリティック・ワークスペースが作成、定義されたスキーマの名前。デフォルトでは、AW CREATE文を発行するユーザーのデータベース・ユーザーIDのスキーマ内にアナリティック・ワークスペースが作成されます。ほとんどのDML文では、アナリティック・ワークスペースのフルネーム(Scott.demoなど)を指定できます。

analytic-workspace-name

目的のオブジェクトを含むワークスペースの名前。オブジェクト名とアナリティック・ワークスペース名を指定することで、オブジェクトの修飾オブジェクト名(QON)が作成されます。「修飾オブジェクト名を使用しない場合」で説明されている状況以外では、オブジェクトの修飾オブジェクト名を使用することをお薦めします。

analytic-workspace-nameの値は、次のいずれかで指定できます。

- アナリティック・ワークスペースの名前。ワークスペース名は、アナリティック・ワークスペースをAW CREATE文で作成するときに割り当てられます。

- アナリティック・ワークスペースの別名。アナリティック・ワークスペースの別名とは、アタッチされたアナリティック・ワークスペースの代替名です。AW ALIAS LIST文を使用すると、別名の割当てまたは削除を行うことができます。別名は、その別名が割り当てられてから、ワークスペースがデタッチされるまで(または別名が削除されるまで)有効です。そのため、アタッチされていないワークスペースをアタッチするたびに、別名を再度割り当てる必要があります。
別名を割り当てる理由の1つは、他のユーザーのスキーマに含まれるアナリティック・ワークスペースを簡単に参照できるようにするためです。たとえば、そのようなアナリティック・ワークスペースを参照する修飾オブジェクト名および文に別名を使用できます。別名を割り当てるもう1つの理由は、アナリティック・ワークスペースへの参照を含むがその名前をハードコードしない汎用コードを記述するためです。一般参照を提供する別名を使用すると、別名を割り当て、異なる時点で異なるワークスペースに対してコードを実行できます。

- 集計仕様、モデルまたはプログラム内でTHIS_AWにより修飾されたオブジェクト名。Oracle OLAPがオブジェクトをコンパイルする際、THIS_AWはすべてオブジェクトがコンパイルされるワークスペースの名前として解釈されます。したがって、myprogという名前のプログラムとmyvarという名前の変数を含むmyworkspaceという名前のアナリティック・ワークスペースがある場合、Oracle OLAPは文myvar=1をmyworkspace!myvar=1として解釈します。プログラム内では、THIS_AWオプションを使用してTHIS_AWの値を取得できます。

analytic-workspace-nameの値を指定しない場合、Oracle OLAPは指定されたオブジェクトが現行のアナリティック・ワークスペースにあると判断します。現行のアナリティック・ワークスペースとは、AW LIST文を使用して表示する、アクティブ・アナリティック・ワークスペースのリストの先頭のアナリティック・ワークスペースのことです。現行のアナリティック・ワークスペースの名前は、AWファンクションにNAMEキーワードを指定することによって取得できます。

注意:
セッションには、現行のアナリティック・ワークスペースは必要ありません。アナリティック・ワークスペース名を指定せずにOracle OLAPを起動すると、EXPRESSアナリティック・ワークスペースがリストの先頭になります。ただし、この場合、EXPRESSアナリティック・ワークスペースは現行ではなく、AWコマンドで指定しないかぎり、現行のアナリティック・ワークスペースは存在しません。

object-name

名前のないコンポジット以外のオブジェクトの名前。オブジェクトが名前のないコンポジットである場合は、次の構文を使用します。

SPARSE <basedims....>

basedims引数には、名前のないコンポジットを作成する対象となるディメンションの名前を空白で区切って指定します。OLAP DML文における名前のないコンポジットの使用例は、例10-104「コンポジットによってディメンション化されたデータのレポート」を参照してください。

異なるワークスペースにある同じ名前のオブジェクトは、完全に別のオブジェクトとして扱われ、それらの間に類似点や関連性が存在するとは判断されません。異なるワークスペースのオブジェクト間に適用されるOLAP DML言語制限は、オブジェクトの名前が同じ場合にも適用されます。たとえば、両方のワークスペースに同じ名前のディメンションが存在する場合でも、一方のワークスペースのオブジェクトを、もう一方のワークスペースに存在するディメンションによってディメンション化することはできません。

修飾オブジェクト名を作成および使用する際の注意点

オブジェクトに対して修飾オブジェクト名を使用するのは一般的ですが、次のような点に注意してください。

- 修飾オブジェクト名を使用できない、または修飾オブジェクト名を使用する必要のない状況があります。詳細は、「修飾オブジェクト名を使用しない場合」を参照してください。

- 修飾オブジェクト名の作成時にアンパサンド置換を使用する場合、いつ、どのように置換が発生するのかを理解しておく必要があります。詳細は、「ワークスペースおよびオブジェクト名のアンパサンド置換の使用方法」を参照してください。

- 修飾オブジェクト名を引数としてプログラムに渡す場合は、特に注意が必要です。詳細は、「プログラムに修飾オブジェクト名を渡す場合」を参照してください。

修飾オブジェクト名を使用しない場合

通常、式では修飾オブジェクト名を使用します。しかし、場合によっては、修飾オブジェクト名を使用できない、または修飾オブジェクト名を使用する必要のないことがあります。

- 次のオブジェクトには、修飾オブジェクト名を使用できません。

- ARGUMENT文またはVARIABLE文により作成された、特定のプログラムに固有のオブジェクト。

- 任意のワークスペースのNAMEディメンション。NAMEディメンションを参照する際、Oracle OLAPは常に現行のワークスペースのNAMEディメンションを使用します。

- 次の状況では、修飾オブジェクト名を使用する必要がありません。

- 修飾データ参照(QDR)の修飾子内。修飾オブジェクト名が必要なのは、修飾されるオブジェクトのみです。修飾されていない名前は、修飾されるオブジェクトと同じワークスペースのオブジェクトに適用されるものと判断されます。

- 名前のないコンポジット内。あるベース・ディメンションを修飾オブジェクト名として指定すると、他のすべてのベース・ディメンションが同じワークスペースのものと判断されます。

- 名前付きコンポジット内。名前が修飾オブジェクト名の場合、そのベース・ディメンションが同じワークスペースのものと判断されます。

- モデル内。ソリューション変数を修飾オブジェクト名として指定すると、DIMENSION文で名前が付けられたすべてのディメンションが同じワークスペースのものと判断されます。

ワークスペースおよびオブジェクト名のアンパサンド置換の使用方法

アンパサンド置換を使用して、ワークスペース名、オブジェクト名、またはその両方を指定できます。ただし、Oracle OLAPは修飾オブジェクト名(感嘆符を含む)を解析した後にアンパサンド参照を解決するため、アンパサンド置換で修飾オブジェクト名を使用する際には注意が必要です。たとえば、&awname!objnameという式では、アンパサンド(&)はワークスペース名のみではなく修飾オブジェクト名全体に適用されます。

プログラムに修飾オブジェクト名を渡す場合

修飾オブジェクト名を引数としてプログラムに渡し、ARGUMENT文およびARG、ARGFR、ARGSの各ファンクションを使用する場合は、修飾オブジェクト名全体が単独の引数とみなされます。そのコンポーネント部分は別々には渡されません。

式におけるディメンションとコンポジットの値の指定

ほとんどの場合、データ型ごとに決められた表記方法に基づいて値を指定すれば、ディメンションの値を参照できます。例として、geogという名前を持つTEXTディメンションを考えます。このディメンションに「World」という値を追加するには、次の文を発行します。

MAINTAIN geog ADD 'World'

ただし、数式でTEXTディメンション値を使用する場合や、非数値のディメンション値を比較する場合、Oracle OLAPでは、値そのものではなく、配列にある値のINTEGER位置番号(デフォルトのステータス・リストに基づく)を使用します。

コンポジットの値および連結ディメンジョンの値の指定については、別の方法で行います。

コンポジットの値の指定

コンポジットの値を指定する方法は次のとおりです。

- 次の構文に基づいて、コンポジットのベース・ディメンションの値セットを指定します。
{composite_name | SPARSE} {<base_dimension_name base_dimension_value }, ...>

- (名前付きコンポジットの場合のみ)次の構文に基づいて、コンポジットの値のみを指定します。
composite_name <base_dimension_value ...>

ただし、base_dimension_valueには、ベース・ディメンションの値セットを、コンポジット内で定義されている順に空白で区切って指定します。

CONCATディメンションの値の指定

一意のCONCATディメンションを定義した後は、単にベース・ディメンション値を指定するのみでその値を参照できます。

ただし、非一意のCONCATディメンションの値は、ベース・ディメンションの名前とベース・ディメンション値をコロン(:)および空白で区切って連結した上で、山カッコ(<>)で囲んで指定する必要があります。式では、次のフォーマットを使用します。

<BASE_DIMENSION_NAME: base_dimension value>

たとえば、cityおよびstateというベース・ディメンションと、それらのディメンションを持つgeogという連結ディメンションを定義したとします。geogディメンションについてレポートすると、geogの値にベース・ディメンションの名前とその値が含まれます。

DEFINE city DIMENSION TEXT
DEFINE state DIMENSION TEXT
DEFINE geog DIMENSION CONCAT(city state)
MAINTAIN city ADD 'New York'
MAINTAIN state ADD 'New York'
REPORT geog

GEOG
-----------------------------------
<CITY: New York>
<STATE: New York>

式における関連ディメンションの使用方法

一部のOLAP DML文(たとえばLIMITコマンドを基にした一部の文)では、ディメンションおよび関連ディメンションとして参照される2つディメンション引数を持つ構文が使用されます。関連ディメンションついて結果のディメンション性を指定できるOLAP DML文(AVERAGE、ANY、COUNT、CUMSUM、NONE、LARGEST、SMALLEST、TOTALなど)もあります。この場合の関連ディメンションとは、あるディメンションとリレーションを共有する任意のディメンションを指します。

こうした文の引数に指定する値がディメンション名であっても、実際の計算にはディメンション間のリレーションが使用されます。2つのディメンションが共有するリレーションが1つのみである場合、処理は単純です。Oracle OLAPでは、そのリレーション内の値に基づいて計算が実行されます。

ただし、2つのディメンションが共有するリレーションが複数ある場合、処理はやや複雑になります。LIMITコマンド(LEVELRELコマンドを使用)と同様に、Oracle OLAPで使用する共有リレーションを指定できる場合もあります。構文の制約により、リレーションの名前が指定できない場合もあります。この場合、Oracle OLAPによって複数のリレーションの中から選択されます(「Oracle OLAPでの複数リレーション間の選択方法」を参照)。

式における変数とリレーションの使用方法

式における変数は、指定されたデータ型の値を含む配列として参照されます。またリレーションは、指定されたディメンションの値を含む配列として参照されます。その他の点においては、変数およびリレーション(どちらも通常は多次元オブジェクト)は基本的に同じものです。

ほとんどの場合、コンポジットで定義される変数をOLAP DML文に含めると、文はそれらの変数をベース・ディメンションで定義されたものと同様に処理します。

- ベース・ディメンション値のいずれかを要求することで、コンポジットによってディメンション化された変数にアクセスできます。

- ステータスにあるコンポジットの値は、コンポジットのベース・ディメンションのステータスによって決定されます。コンポジットはディメンションではないため、コンポジットには固有のステータスはありません。

REPORT文、またはコンポジットを使用する変数をループ処理する他の文を使用すると、デフォルトの動作として、ステータスにあるコンポジットのベース・ディメンション値の組合せがすべて評価されます。コンポジットに存在しない組合せの場合、関連付けられているデータはNAと表示されます。

たとえば、次の文を実行すると、2002年1月から3月にスポーツウェア向けに発行されたクーポン券の数を示す、East地域に関するレポートが作成されます。2002年3月にはクーポン券が発行されなかったため、レポートの該当の列にはNAと表示されます。

LIMIT month TO 'Jan02' 'Feb02' 'Mar02'
LIMIT market TO 'East'
LIMIT product TO 'Sportswear'
REPORT coupons

MARKET: EAST
------------COUPONS-------------
-------------MONTH--------------
PRODUCT          Jan02      Feb02      Mar02
-------------- ---------- ---------- ----------
Sportswear          1,000      1,000         NA

ただし、パフォーマンス上の理由から、REPORT、ROWなどの文および代入文(SET)のデフォルトのループ動作を変更し、すべてのベース・ディメンション値ではなく、コンポジットの値をループ処理するように変更できます。

ステータスを変更せずにディメンションを単一の値に制限する方法

修飾データ参照(QDR)を使用すると、データ・オブジェクトの1つ以上のディメンションを単一の値に制限できます。QDRは、現行のステータスを変更せずにデータ・オブジェクトの単一の値を指定する場合に有効です。QDRを使用すると、ディメンション(式に1つのディメンション値を指定可能)や、変数またはリレーションの1つ以上のディメンションを修飾できます。

QDRの構文があいまいであるため、誤って解釈されるか、構文エラーが発生することがあります。この場合、QUALファンクションを使用して修飾データ参照(QDR)を明示的に指定できます。

修飾データ参照の構文

修飾データ参照は、次の構文を使用して指定します。

expression(dimname1 dimexp1 [, dimname2 dimexp2. . .])

dimname引数は、式に含まれるディメンションの名前、またはディメンションのディメンション・サロゲートです。dimexp引数は、次のいずれかです。

- dimnameの値

注意:
LIMITSTRICTオプションの設定により、存在しない値がQDRで指定された場合のOracle OLAPの動作が決まります。存在しない値を指定した場合、デフォルトでは、存在しない値は無効な値として処理され、エラーが発生します。存在しない値がNA値として処理されるようにするには、LIMITSTRICTの値をNOに設定します。

- 結果がdimnameの値となるテキスト式

- 結果がdimnameの値に対する論理位置となる数式

- dimnameのリレーション

注意:
QDRの構文があいまいであるため、誤って解釈されるか、構文エラーが発生する可能性がある場合は、QUALファンクションを使用して修飾データ参照(QDR)を明示的に指定します。

変数の修飾

次のいずれかの方法で、変数の任意またはすべてのディメンションを修飾できます。

- ディメンションの指定された値を1つ選択すると、QDRにより変数のディメンションが一時的に制限されます。この値は、現行のステータスの範囲外になる可能性があります。

- 修飾子として適切なリレーションの名前を指定すると、QDRにより変数のディメンションが、より下位の集計関連ディメンションと置き換えられます。ディメンションは、リレーションのディメンションに一時的に置き換えられます。

たとえば、変数salesには、month、productおよびdistrictの3つのディメンションがあります。Bostonの売上総額を、全都市の売上総額と比較するとします。単一の文において、次のようにdistrictを2つの異なる値に制限します。

- 式の分子は、districtのステータスをBostonにします。

- 式の分母は、districtのステータスをALLにします。

次の文により、QDRを使用してこの結果を計算できます。

SHOW sales(district 'Boston')/TOTAL(sales)

変数の複数のディメンションを修飾できます。たとえば、各ディメンションの1つのディメンション値を指定してsales変数のすべてのディメンションを修飾する場合、salesを単一のセル値の範囲に制限します。

Jun02、TentsおよびSeattleの売上高をフェッチするには、次のQDRを使用します。

SHOW sales(month 'Jun02', product 'Tents', district 'Seattle')

この文は、単一の値をフェッチします。

代入(SET)文のターゲット式で修飾データ参照を使用できます。これにより、データ・オブジェクト内の特定のセルに値を代入できます。

次の例では、修飾データ参照で指定されたsalesコンポジットのデータ・セルに、値10200を代入します。salesという名前のコンポジットに、BostonおよびTentsの組合せの値が存在しない場合、この値の組合せがコンポジットに追加され、データ・セルが追加されます。

sales(market 'Boston' product 'Tents' month 'Jan99')= 10200

変数のディメンションの置換

QDRの修飾子としてリレーションを使用する場合、変数のディメンションをリレーションのディメンション(複数可)に置き換えることができます。リレーションは、修飾するディメンションに関連している必要があり、置換ディメンションによってディメンション化される必要があります。

例2-1 変数のディメンションの置換

month、productおよびdistrictによってディメンション化された2つの変数salesおよびquotaが存在するとします。3番目の変数division.mgrは、monthおよびdivisionによってディメンション化されています。divisionとproductの間には、division.productというリレーションも存在します。これらのオブジェクトは、次のように定義されています。

DEFINE sales VARIABLE DECIMAL <month product district>
LD Sales Revenue
DEFINE quota VARIABLE DECIMAL <month product district>
DEFINE division.mgr VARIABLE TEXT <month division>
DEFINE division.product RELATION division <product>
LD Division for each product

次の文により、文の下にあるようなレポートが生成されます。

REPORT division.mgr

-------------------DIVISION.MGR----------------------
----------------------MONTH--------------------------
DIVISION  JAn02    Feb02    Mar02    Apr02    May02    Jun02
--------  -------- -------- -------- -------- -------- --------
Camping   Hawley   Hawley   Jones    Jones    Jones    Jones
Sporting  Carey    Carey    Carey    Carey    Carey    Musgrave
Clothing  Musgrave Musgrave Musgrave Musgrave Musgrave Wong

売上高のノルマの達成率を、各製品を担当する事業部長名とともに表示するレポートを取得するとします。各製品の事業部長名を表示するには、修飾子として、divisionに関連付けられてproductによってディメンション化されているリレーションdivision.productを使用します。QDRは、divisionディメンションをproductに置き換えるため、レポートsales / quotaの他の式と同じディメンションを持つことになります。次の文により、文の下にあるようなレポートが生成されます。

REPORT DOWN month sales W 6 sales/quota W 8 HEADING -
'MANAGER' division.mgr(division division.product)

DISTRICT: BOSTON
-----------------------------PRODUCT------------------------------------
----TEnts---- ---canoes---- --racquets---  --sportswear-- ---footwear---
Sales/        Sales/        Sales/         Sales/         Sales/
Month   Quota Manager Quota Manager Quota Manager  Quota Manager  Quota  Manager
------  ----- ------- ----- ------- ----- -------  ----- -------- ----- --------
Jan02   1.00  Hawley  0.82  Hawley  1.02  Carey    0.91  Musgrave 0.92  Musgrave
Feb02   0.84  Hawley  0.96  Hawley  1.00  Carey    0.80  Musgrave 1.07  Musgrave
Mar02   0.87  Jones   0.95  Jones   0.87  Carey    0.88  Musgrave 0.91  Musgrave
Apr02   0.91  Jones   0.93  Jones   0.99  Carey    0.94  Musgrave 0.95  Musgrave
...

リレーションの修飾

QDRを使用して、リレーション(非常に特殊な変数)を修飾することもできます。

region.districtリレーションが、districtによってディメンション化されるとします。districtを値Seattleで修飾する場合、式の値はSeattleのリレーションの値になります。QDRはdistrictの1つの値を指定するため、式の結果は単一のセルになります。

region.districtの定義は次のようになります。

DEFINE region.district RELATION region <district>
LD The region for each district

次の文によって、値WESTが表示されます。

SHOW region.district(district 'Seattle')

ディメンションの修飾

QDRを使用して、ディメンション自身を修飾でき、それによって式に1つのディメンション値を指定できます。次の式では、districtの1つの値(単一セル変数mydistrictに含まれる値)が指定されています。

district(district mydistrict)

連結ディメンションは、連結ディメンションのベース・ディメンションから値を指定することにより、QDRを使用してディメンションを修飾できます。次の式では、ベース・ディメンションとしてregionおよびdistrictを持つ連結ディメンションreg.dist.ccdimの1つの値を指定します。コスト変数は、divisionおよびreg.dist.ccdimディメンションによってディメンション化されます。

SHOW reg.dist.ccdim(district 'Boston')

この式により次の結果が返されます。

<DISTRICT: Boston>

QDRとアンパサンド置換の使用

アンパサンド文字(&)が式の先頭にあると、文にある式自体の式の値が置換されます。QDRとともにアンパサンドを使用する場合、置換が行われる前に変数を修飾するには、式全体をカッコで囲む必要があります。

reptypeによってディメンション化され、変数名を含むmyvarという名前のテキスト変数があるとします。これは、reptypeによってディメンション化されたmyvarであり、myvarという名前の変数ではない点に注意してください。そのため、myvarを修飾して、結果の値をREPORT文で使用するためには、カッコで囲む必要があります。

REPORT &(myvar(reptype 'actual'))

カッコを使用せず、myvarで指定された変数がsalesの場合、salesがreptypeによってディメンション化されないことを示すエラー・メッセージを受け取ります。

式における空のセルでの処理

アナリティック・ワークスペースにあるデータ・オブジェクトの一部のセルが空になる場合があります。特定のデータ値がセルに代入されていないか、またはデータ値がそのセルに適していない場合、空のセルになります。オブジェクトの空のセルの値はNAです。NA値には、特定のデータ型がありません。一部のファンクション(たとえば集計ファンクションなど)は、必要な情報が使用できない、または適していない場合、NAを返します。同様に、値が適していない式の値はNAになります。

注意:
OLAP DMLのコンポジット・ディメンションでディメンション化された変数(NULLファクトを持つリレーショナル・ファクト表に対応する変数)をサポートするため、OLAPでは、NA2ビットにより制御される特殊なNA値を使用できます。NA2ビットにより制御されるNA値のOracle OLAPにおける管理方法の詳細は、「NA2ビットとNULLトラッキング」を参照してください。

NA値の指定

使用できるデータがない場合の処理を指定することがあります。たとえば、変数の特定のセル、ファンクションの戻り値、または算術演算子を含む式の値として、適切な値が存在しない場合があります。このような場合、NA(使用不可)値が自動的に指定されます。

変数またはリレーションの値をNAに設定するには、次の例に示すように代入文(SET)を使用します。

sales = NA

NA値の処理方法の制御

NA値の処理方法を制御するオプションやファンクションは複数あります。次に例を示します。

- 「カテゴリ別のオプション」にリストされているNAオプション。

- NAFILLファンクションは、指定した埋込み式で表示されるNA値とともにソース式の値を返します。このファンクションを式で使用すると、返す値の書式を制御できます。

- 第4章「OLAP DMLプロパティ」にリストされているシステム・プロパティ。

数式

数式は、いずれかの数値データ型として評価されます。数式内のデータは、次のいずれかの組合せになります。

- 数値リテラル(「数値データ型」を参照)

- 数値変数または計算式

- ディメンション

- 数値結果を生成するファンクション

- 日付リテラル、変数、計算式またはファンクション

さらに、算術演算子でこれらの式を結合して、より複雑な数式を作成できます。数値データを含む数式で算術演算子を使用すると、結果が数値で返されます。日付および数値データの両方が混在した日付式で、一部の算術演算子を使用することによって、結果を日付または数値のいずれかで取得できます。

Oracle OLAPによる数式の処理方法を決定するオプションは複数あります。

数値データ型の混在

1つの数式には、すべての数値データ型を含めることができます。

結果のデータ型は、次のルールによって決定されます。

- 式のすべてのデータがINTEGERまたはSHORTINTEGERで、演算が加算、減算および乗算のみの場合、結果はINTEGERとなります。

- データのいずれかがNUMBERの場合、結果はNUMBERとなります。

- データのいずれかがDECIMALまたはSHORTDECIMALで、NUMBERのデータがない場合、結果はDECIMALとなります。

- 除算または指数演算を実行した場合、結果はDECIMALとなります。

算術式におけるテキスト・ディメンションの使用方法

データ型がTEXTであるディメンションを数式で使用する場合、そのディメンション値は位置(INTEGER)として処理されるため、数値として使用されます。位置番号は、現行のステータスではなく、デフォルトのステータス・リストに基づきます。

浮動小数点計算の制限

小数値データは、格納および計算される際には必ず浮動小数点形式に変換されます。浮動小数点形式では、数値は仮数および指数を使用して表されます。仮数および指数は、2進数として格納されます。仮数とは、2を指数で累乗した値に乗算すると、元の小数値と等しい数値またはほぼ等しい数値が得られる2進部分のことです。

小数値の端数部分は常に正確に2進表現されるとは限らないため(小数で1/3の正確な表現がないように)、小数値の端数部分を常に2進部分として正確に表現できるわけではありません。浮動小数点数の算術演算はさらに概算になる可能性があり、誤差は演算を重ねるごとに徐々に大きくなります。概算要因に加えて、有効桁の有効数が結果の精度に影響します。

これらすべての理由から、TOTAL、AVERAGE、またはDECIMALまたはSHORTDECIMAL変数の他の集計ファンクションにより計算される結果は、最後の有効数字が示す値が手動で計算した場合の結果と異なることがあります。SHORTDECIMALデータ型の有効桁数は最大7桁であるため、SHORTDECIMALデータとの誤差がさらに大きくなります。このため、通貨額を含む変数など、計算速度よりも精度が重要な場合はNUMBERデータ型を使用してください。

2進小数部で正確に表現できない一部の小数値の端数部分については、DECIMALデータ型を使用すると、有効桁数が多いためSHORTDECIMALデータ型よりもより正確な値が得られます。そのため、SHORTDECIMALおよびDECIMALデータ型が比較式で混在している場合に、問題が発生する可能性があります。このような比較を処理する方法の詳細は、「ブール式」を参照してください。

計算中のエラーの制御

次のタイプのエラーを制御できます。

- 0(ゼロ)による除算。NA値を0で除算すると、結果はNAとなりエラーは発生しません。非NA値を0で除算すると、通常エラーが発生します。ディメンション化されたデータで計算を実行しているときに、0による除算のエラーが発生すると、不完全な結果になる可能性があります。REPORTまたは代入文(SET)を使用すると、計算されるたびに値がレポートまたは格納されるため、0で除算した場合はすべての値を処理する前にループ処理が停止されます。
0による除算のエラーを防ぐために、DIVIDEBYZEROオプションの値をYESに変更できます。その結果、0による除算の結果がすべてNAとなり、エラーが発生しなくなります。これにより、ディメンション化された式の他の値が継続して計算されます。

- 負数の根。負数の根(整数以外の数値で累乗した場合を含む)を取得しようとすると、通常はエラーが発生します。エラー・メッセージを抑止し、式の負数値以外の根を継続して計算するには、ROOTOFNEGATIVEオプションをYESに設定します。

- オーバーフロー・エラー。DECIMALOVERFLOWオプションは、DIVIDEBYZEROと同様に機能します。計算によって処理できないほど大きい小数値の結果が返される場合に、エラーを生成するかどうかを制御できます。

テキスト式

テキスト式は、TEXT、NTEXTまたはIDデータ型のデータとして評価されます。テキスト式は、次のいずれかの組合せになります。

- テキスト・リテラル。たとえば、'Boston'や'Current Sales Report'

- テキスト・ディメンション。たとえば、districtやmonth

- テキスト変数または計算式。たとえば、product.nameです

- テキスト結果を生成するファンクション。たとえば、JOINLINES('Product: ' product.name)

テキスト式の言語

Oracle OLAPでは、NLS_LANGUAGEオプションで指定可能なすべての言語を使用したテキスト式がサポートされています。また、言語ディメンションの使用によって、複数言語のプログラムおよびアプリケーションもサポートされています。

関連項目:
「言語ディメンション・ステータスの処理」

テキスト式におけるDATETIME値の処理

テキスト値(TEXT、NTEXTまたはID)が予想される場所でDATETIME値を使用するか、テキスト変数にDATETIME値を格納すると、DATETIME値は自動的にテキスト値に変換されます。

DATETIME値の書式は、NLS_DATE_FORMATオプションにより制御されます。DATETIME値をテキスト変数に格納すると、NLS_DATE_FORMAT設定は無効になります。

NTEXTデータの処理

TEXTおよびNTEXTデータは、ほとんどの場合に区別なく使用できます。ただし、NTEXT値がTEXT変数に代入された場合などに、暗黙的に変換が行われる可能性があります。TEXTがNTEXTに変換される場合、NTEXTデータ型のUTF-8文字コードには他のほとんどのデータ型が含まれるため、データの消失は発生しません。しかし、NTEXTがTEXTに変換される場合、NTEXT文字がワークスペースのキャラクタ・セットに示されていない場合はデータの消失が発生します。

TEXT値およびNTEXT値が同時に使用される場合(たとえばJOINCHARSファンクションへのコールにおいてなど)、TEXT値がNTEXTに変換され、NTEXT値が返されます。

日時式と期間式

「日時データ型と期間データ型」で説明されているように、OLAP DMLでは、SQLでサポートされているものと同じ日時データ型および内部データ型がサポートされます。この項では次の内容について説明します。

- 「日時式」

- 「期間式」

- 「日時と期間の演算」

日時式

日時式は、日時データ型の値を生成します。日時式の構文は次のとおりです。

datetime_value_expr AT LOCAL |

TIME ZONE { ' [ + | - ] hh:mm' | DBTIMEZONE | 'time_zone_name' | expr }

datetime_value_exprは、日時式、または日時値を生成する複合式になります。日時および期間は、表2-7「日時フィールドと値」での定義に従って組み合せることができます。日時値を生成する3つの組合せは、日時式で有効です。

AT LOCALを指定すると、現行のセッションのタイムゾーンが使用されます。

AT TIME ZONEの設定は、次のように解釈されます。

- 文字列'(+|-)HH:MM'はUTCのオフセットとしてタイムゾーンを指定します。

- DBTIMEZONE: Oracleは、データベースの作成中に(明示的またはデフォルトで)構築されたデータベース・タイムゾーンを使用します。

- SESSIONTIMEZONE: デフォルトまたは最新のALTER SESSION文で設定されたセッションのタイムゾーンが使用されます。

- time_zone_name: time_zone_nameで指定されたタイムゾーンのdatetime_value_exprが返されます。有効なタイムゾーン名を表示するには、V$TIMEZONE_NAMES動的パフォーマンス・ビューを問い合せます。

注意:
夏時間機能には、タイムゾーン地域名が必要です。地域名は、oracore/zoneinfo下のタイムゾーン・ファイルに格納されます。サーバーでは常に、sys.props$に記録されているリリース番号に対応した容量の大きいタイムゾーン・ファイルが使用されます。

- expr: exprが有効なタイムゾーン書式で文字列を返す場合、そのタイムゾーンで入力が返されます。そうでない場合は、エラーが返されます。

期間式

期間式は、DSNTERVALまたはMYINTERVALの値を生成します。式の構文は次のとおりです。

interval_value_expr DAY [(leading_field_precision)] TO

SECOND [(fractional_second_precision)]| YEAR [(leading_field_precision)] TO MONTH

interval_value_exprは、DSNTERVAL値またはMYINTERVAL値、またはDSNTERVAL値またはMYINTERVAL値を生成する複合式になります。日時および期間は、表2-7「日時フィールドと値」での定義に従って組み合せることができます。期間の値を戻す6つの組合せは、期間式で有効です。

leading_field_precisionおよびfractional_second_precisionは両方とも、0から9の任意の整数になります。DAYまたはYEARのいずれかでleading_field_precisionを省略すると、デフォルト値である2が使用されます。秒でfractional_second_precisionを省略すると、データベースはデフォルト値である6を使用します。問合せで返された値にデフォルトの精度を超える桁数が含まれる場合、エラーが返されます。したがって、問合せで返される値以上の精度を指定することをお薦めします。

日時と期間の演算

算術演算は、日付(DATETIME)、タイムスタンプ(TIMESTAMP、TIMESTAMP_TZおよびTIMESTAMP_LTZ)および期間(DSINTERVALおよびYMINTERVAL)のデータで実行できます。Oracleでは、次のルールに従って結果が計算されます。

- 日付値およびタイムスタンプ値(期間値は除く)の算術演算で、NUMBER定数を使用できます。Oracleでは、タイムスタンプ値が日付値に内部的に変換され、日時および期間の算術式ではNUMBER定数が日数として解釈されます。たとえば、SYSDATE + 1は、明日になります。SYSDATE - 7は、1週間前になります。SYSDATE + (10/1440)は、現時刻の10分後になります。SYSDATEからサンプル表employeesのhire_date列を減算すると、各従業員を雇用した時点からの経過日数が返されます。日付値やタイムスタンプ値の乗算および除算はできません。

- Oracleでは、オペランドBINARY_FLOATおよびBINARY_DOUBLEはNUMBERに暗黙的に変換されます。

- 各DATETIME値には時刻要素が格納され、多くの場合、日付操作の結果には小数部が含まれます。この小数部は、1日の一部分を意味します。たとえば、1.5日は36時間です。小数部は、DATETIMEデータの一般的な操作を行うOracle組込みファンクションによっても返されます。たとえば、MONTHS_BETWEENファンクションは、2つの日付間の月数を返します。結果の小数部は、月(1か月は31日)の一部分を表します。

- 1つのオペランドがDATETIME値または数値である場合(タイムゾーンおよび小数部要素のいずれも含まない場合)、次のようになります。

- Oracleでは、他方のオペランドが暗黙的にDATETIMEデータに変換されます。(ただし、数値と期間を掛けて期間を返す乗算を行う場合は除きます。)

- 他方のオペランドがタイムゾーン値を持つ場合、戻り値にはセッションのタイムゾーンが使用されます。

- 他方のオペランドが小数秒値を持つ場合、その小数秒値は失われます。

- DATETIMEデータ型専用の組込みファンクションにタイムスタンプ値、期間値または数値が渡されると、DATETIME値以外の値は暗黙的にDATETIME値に変換されます。

- 期間の計算が日時の値を戻す場合、その結果は実際の日時の値である必要があります。実際の日時の値でない場合、データベースはエラーを戻します。

- Oracleでは、すべてのタイムスタンプの演算はUTC時間で実行されます。TIMESTAMP_LTZでは、日時値がデータベースのタイムゾーンからUTCに変換され、演算を実行した後にデータベースのタイムゾーンに再変換されます。TIMESTAMP_TZでは、日時値は常にUTCであるため、変換は必要ありません。

表2-13「日時演算のマトリックス」に、日時演算操作のマトリックスを示します。ダッシュはサポートされていない操作を表します。

表2-13 日時演算のマトリックス

オペランドおよび演算子

DATETIME

TIMESTAMP

INTERVAL

数値

DATETIME

—

—

—

—

+

—

—

DATETIME

DATETIME

-

DATETIME

DATETIME

DATETIME

DATETIME

*

—

—

—

—

/

—

—

—

—

TIMESTAMP

—

—

—

—

+

—

—

TIMESTAMP

—

-

INTERVAL

INTERVAL

TIMESTAMP

TIMESTAMP

*

—

—

—

—

/

—

—

—

—

INTERVAL

—

—

—

—

+

DATETIME

TIMESTAMP

INTERVAL

—

-

—

—

INTERVAL

—

*

—

—

—

INTERVAL

/

—

—

—

INTERVAL

数値

—

—

—

—

+

DATETIME

DATETIME

—

NA

-

—

—

—

NA

*

—

—

INTERVAL

NA

/

—

—

—

NA

例: 期間値の式を開始時間に追加できます。order_date列を持つサンプル表oe.ordersについて考えます。

日付のみの式

日付のみの式は、OLAP DMLのDATEデータ型として評価される式です(「日付のみのデータ型」を参照)。この式は、日付のみの値、日付のみのリテラル、またはより複雑な式を返すファンクションのいずれかです。

関連項目:
「日付のみの入力値」、「日付のみのディメンション値」および「日付のみの変数表示スタイル」

日付のみの値の計算

DATE値に対して、数値を加算または減算できます。整数は日として計算され、小数値は一日の端数として計算されます。たとえば、SYSDATE+1.5は、現在の日付および時刻に1日と12時間を加算します。DATE値の乗算および除算はできませんし、数値からこれらの値を減算することもできません。たとえば、1-SYSDATEや1*SYSDATEはエラーになります。

算術式における日付のみの値の使用

算術式でDATE値を使用する場合、結果は数値または日付になります。日付の有効な演算と結果のデータ型の概要を、表2-14「DATE値の有効な演算」に示します。

表2-14 DATE値の有効な演算

演算

結果

日付に数値を加算または減算

未来または過去の日付

日付から日付を減算

日付間の日数

期間に数値を加算または減算

LEADファンクションまたはLAGファンクションの戻り値と同様、未来または過去における適切な間隔を持った期間。結果に対応するディメンション値が存在しない場合、結果はNAとなる。計算は、ディメンションのデフォルトのステータス・リストにおける値の位置に基づいて行われる。

ブール式

ブール式は、TRUEまたはFALSEの論理文です。ブール式では、比較する両方の式の基本データ型が同じであれば、すべての型のデータを比較できます。データをテストし、他のデータと等しい、より大きい、またはより小さいかを調べることができます。

ブール式は、次のようなブール・データで構成されます。

- BOOLEAN値(YESとNO、さらにそれらのシノニムであるONとOFF、TRUEとFALSE)

- BOOLEAN変数または計算式

- BOOLEAN結果を生成するファンクション

- 比較演算子によって計算されるBOOLEAN値

たとえば、コードに次のブール式が含まれているとします。

actual GT 20000

この式では、Oracle OLAPは変数actualの各値を定数20,000と比較します。値が20,000より大きい場合に文はTRUEとなり、値が20,000以下の場合に文はFALSEとなります。

ブール値を指定する際、真の値にはYES、ONまたはTRUEのいずれかを、偽の値にはNO、OFFまたはFALSEのいずれかを入力できます。ブール計算の結果が返される場合、デフォルトはNLS_LANGUAGEオプションで指定した言語でのYESおよびNOとなります。読取り専用のYESSPELLおよびNOSPELLオプションを指定すると、YESおよびNO値が記録されます。

比較演算子および論理演算子は、表2-11「比較演算子および論理演算子」にリストされています。各演算子には優先順位があり、その順位によって評価の順序が決定されます。カッコで評価の順序を変更しないかぎり、優先順位の等しい演算子は、左から右に評価されます。ただし、真の値が確定した時点で、評価は停止されます。たとえば、次の式では、最初の句により式全体が真であると判断されるため、TOTALファンクションは実行されません。

yes EQ yes OR TOTAL(sales) GT 20000

ブール式の作成

ブール式は、比較の対象となる2つの項と、その間にある比較演算子の3つの部分からなる句です。ANDおよびOR論理演算子を使用してこれらの3つの部分を持つ式を結合することで、より複雑なブール式を作成できます。ANDまたはORで結合した各式は、それ自体が完全なブール式である必要があるため、同じ変数を複数回指定する場合もあります。

たとえば、次の式は2番目の部分が不完全なため、有効ではありません。

sales GT 50000 AND LE 20000

次の式は、両方の部分が完全であるため、有効です。

sales GT 50000 AND sales LE 20000

複数のブール式を組み合せる場合、式の最初の部分で真の値が決定される場合でも、式全体を有効にする必要があります。式が評価される前に式全体がコンパイルされるため、ブール式の2番目の部分に未定義の変数が存在する場合は、エラーが発生します。

ブール式の意味を逆転させるには、式をカッコで囲んでNOT演算子を使用します。

次の2つの式は等価です。

district NE 'BOSTON'
NOT(district EQ 'BOSTON')

例2-2 ブール比較の使用

次の例は、Bostonにおける各製品の売上がリテラル量より大きかったかどうかを表示するレポートを示しています。

LIMIT time TO FIRST 2
LIMIT geography TO 'BOSTON'
REPORT DOWN product ACROSS time: f.sales GT 7500

このREPORT文により次のデータが返されます。

CHANNEL: TOTALCHANNEL
GEOGRAPHY: BOSTON
---F.SALES GT 7500---
--------TIME---------
PRODUCT          Jan02      Feb02
-------------- ---------- ----------
Portaudio              NO         NO
Audiocomp             YES        YES
TV                     NO         NO
VCR                    NO         NO
Camcorder             YES        YES
Audiotape              NO         NO
Videotape             YES        YES

ブール式におけるNA値の比較

ブール式で比較するデータにNA値が含まれている場合でも、それがブール式として意味を持てばYESまたはNOという結果が返されます。たとえば、NA値が非NA値と等価であるかどうかをテストすると、結果はNOとなります。ただし、結果が紛らわしい場合はNAが返されます。たとえば、NA値が非NA値より小さいか大きいかをテストすると、結果はNA値となります。

表2-15「NA値を含むブール式で結果が非NA値となる場合」に、NA値を含むブール式のうち、非NA値を生成する式の結果を示します。

表2-15 NA値を含むブール式で結果が非NA値となる場合

式

結果

NA EQ NA

YES

NA NE NA

NO

NA EQ non-NA

NO

NA NE non-NA

YES

NA AND NO

NO

NA OR YES

YES

数値データを比較する際のエラーの制御

数値データを比較する際に予期しない結果が返された場合は、その原因として次のような事柄が考えられます。

- DECIMALSオプションが設定されているため、比較している数値に、出力に表示されない小数の下位の桁が含まれている場合

- 2つの浮動小数点数を比較しており、少なくとも1つの数値が算術演算の結果生成されたものである場合

- 比較でSHORTDECIMALおよびDECIMALデータ型を混在させている場合

ABSおよびROUNDファンクションを使用して近似等価テストを行い、予期しない比較エラーを発生させる3つの原因すべてを回避することをお薦めします。ABSまたはROUNDを使用する場合、絶対誤差または四捨五入係数をアプリケーションに適した値に調整できます。計算速度を重視する場合は、ROUNDファンクションではなくABSファンクションを使用することをお薦めします。

数値精度によるエラーの制御

expenseは、計算によって値が設定される10進変数であるとします。計算の結果が100.000001で、小数点以下を2桁とすると、出力される値は100.00です。ただし、次の文の出力ではNOが返されます。

SHOW expense EQ 100.00

ABSまたはROUNDファンクションを使用すると、比較を行う際にそのようなわずかな誤差を無視できます。

浮動小数点数を比較する際のエラーの制御

コンピュータ言語で浮動小数点数を使用する際の一般的な限界として、比較する2つの浮動小数点数のどちらかが算術演算により得られた値である場合、両者が完全に一致することはほとんどありません。たとえば、一部のシステムでは、次の文によってYESではなくNOが返されます。

SHOW .1 + .2 EQ .3

小数値データを扱う場合は、それらを直接比較するコードは作成しないでください。これらのファンクションを使用すると、誤差が一定の範囲内であれば、近似する2つの値を等しいとみなすことができます。たとえば、次の2つの文はどちらもYESが返されます。

SHOW ABS((.1 + .2) - .3) LT .00001
SHOW ROUND(.1 + .2) EQ ROUND(.3, .00001)

異なる数値データ型を比較する際のエラーの制御

端数部分を含む小数値については、SHORTDECIMAL表現とDECIMAL表現またはNUMBER表現は、厳密には一致しないと考える必要があります。これは、正確に表現できない端数部分を近似する有効桁数が、SHORTDECIMALデータ型よりもDECIMALデータ型およびNUMBERデータ型の方が多いためです。

SHORTDECIMALデータ型の変数を定義して、それを端数小数値に設定した後、次のようにそのSHORTDECIMAL数値を端数小数値と比較するとします。

DEFINE sdvar SHORTDECIMAL
sdvar = 1.3
SHOW sdvar EQ 1.3

この比較では、NOが返されると考えられます。ここでは、リテラルは自動的にDECIMAL型として認識され、SHORTDECIMAL型の変数sdvarがDECIMAL型に変換され、小数部分を拡張するため0がいくつか追加されます。その後、ビット単位の比較が実行され、失敗します。DECIMALまたはNUMBERデータ型の変数を使用した同じ比較では、多くの場合YESが返されます。

このような比較エラーを回避するには、次のような方法があります。

- 比較でSHORTDECIMALデータ型と、DECIMALまたはNUMBERデータ型を混在させないでください。この2つのデータ型の混在を防ぐには、通常、小数部分を含む変数をSHORTDECIMALとして定義しないようにします。

- ABSファンクションまたはROUNDファンクションを使用して、近似する2つの値が等しいとみなされるようにします。次の文は、どちらもYESを返します。

SHOW ABS(sdvar - 1.3) LT .00001
SHOW ROUND(sdvar, .00001) EQ ROUND(.3, .00001)

ディメンション値の比較

同じディメンション内の値については、テキスト値に基づく比較は行われません。かわりに、Oracle OLAPはディメンションのデフォルト・ステータスにおける値の位置を比較します。これにより、次のような文を指定できます。

REPORT district LT 'Seattle'

文は、次のような過程で解析されます。

1. テキスト・リテラル'Seattle'は、districtディメンションのデフォルトのステータス・リストにある位置に変換されます。

2. その位置が、districtディメンションにある他のすべての値の位置と比較されます。

3. 次のレポートに示すように、districtディメンションのデフォルトのステータス・リストでSeattleより前にある地区には値YESが返され、Seattle自体にはNOが返されます。

REPORT 22 WIDTH district LT 'Seattle'

District       DISTRICT LT 'Seattle'
-------------- ----------------------
Boston                            YES
Atlanta                           YES
Chicago                           YES
Dallas                            YES
Denver                            YES
Seattle                            NO

より複雑な例では、最初の6か月に代入された初期値に基づいて、変数quotaに増分値が代入されます。比較は、monthディメンションの値の位置に基づいて行われます。このディメンションは時間ディメンションであるため、値は時系列になります。

quota = IF month LE 'Jun02' THEN 100 ELSE LAG(quota, 1, month)* 1.15

しかし、式region lt districtなど、異なるディメンションの値を比較する場合、共通分母はTEXTのみであるため、ディメンションの位置ではなくテキスト値が比較されます。

日付の比較

任意のブール比較演算子で2つの日付を比較できます。日付の場合、「より少ない」は「前」を意味し、「より大きい」は「後」を意味します。比較する式には、表2-11「比較演算子および論理演算子」に示す日付計算を含めることができます。たとえば、請求書アプリケーションでは、未払い請求書に対する督促状を送付するために、その日が請求日から60日以上経っているかどうかを判断できます。

bill.date + 60 LE SYSDATE

日付には、数値も使用できます。TO_NUMBERファンクションおよびTO_DATEファンクションを使用すれば、DATE値をINTEGER値に、あるいはINTEGER値をDATE値に変換して、両者を比較できます。

テキスト・データの比較

テキスト・データを比較する場合、記号、空白、大文字と小文字の違いなどを含め、テキストを正確に入力する必要があります。テキスト・リテラルは、一重引用符で囲む必要があります。たとえば、次の式では各従業員名の頭文字が文字「M」より後にあるかどうかをテストします。

EXTCHARS(employee.name, 1, 1) GT 'M'

TEXT値とID値を比較することは可能ですが、この2つの値が等しくなるのは長さが同じ場合のみです。テキスト値が他のテキスト値より大きいか小さいかをテストする場合、順序付けはNLS_SORTオプションの設定を基準として行われます。

最初に数値をテキストに変換することにより、数値とテキストを比較できます。順序付けは、文字の値を基準として行われます。テキストは左から右に評価されるため、予期しない結果が返されることがあります。たとえば、テキスト・リテラル1234と100,999.00を比較した場合、前者の2番目の文字2は後者の2番目の文字0よりも大きいため、1234の方がより大きいという結果になります。

name.labelは3-Personという値を持つID変数であり、name.descは3-Person Tentsという値を持つTEXT変数であるとします。

次のSHOW文の結果は、NOとなります。

SHOW name.desc EQ name.label

次の文の結果は、YESとなります。

name.desc = '3-Person'
SHOW name.desc EQ name.label

テキスト値とテキスト・パターンの比較

ブール演算子LIKEは、テキスト値とテキスト・パターンの比較用の演算子です。対応する文字が一致している場合、テキスト値は他のテキスト値またはパターンと部分一致していることになります。

リテラルな一致に加えて、LIKEでは文字列の複数の文字に一致するワイルドカード文字を使用できます。

- パターン内のアンダースコア(_)文字は、任意の1文字に一致します。

- パターン内のパーセント(%)文字は、最初の文字列の0文字または任意の数の文字に一致します。

たとえば、%AT_のパターンは、文字ATの前に0文字または任意の数の文字が含まれ、後ろに1文字が含まれるテキストに一致します。LIKEを使用してDATAおよびERRATAをパターン%AT_と比較すると、両方の場合にYESが返されます。

LIKE演算子を使用した式の結果は、LIKECASEオプションおよびLIKENLオプションの設定により異なります。

LIKEには、否定演算子が存在しません。否定演算を実行するには、式全体を否定する必要があります。たとえば、次の文の結果はNOとなります。

SHOW NOT ('Boston' LIKE 'Bo%')

テキスト・リテラルとリレーションの比較

テキスト・リテラルとリレーションを比較することもできます。リレーションには、関連ディメンションの値が含まれており、テキスト・リテラルはそのディメンションの値と比較されます。たとえば、region.districtはregionの値を含むため、次の比較を行うことができます。

region.district EQ 'West'

条件式

条件式は、条件に基づいて値を選択する際に使用します。条件式は、データ型が適切であれば、他の式の一部として使用できます。Oracle OLAPでは、次の条件式を使用できます。

- IF...THEN...ELSE式

- SWITCH式

IF...THEN...ELSE式

IF式は、ブール条件に基づいて2つの値のうちどちらか一方を選択する際に使用します。

注意:
IF式を、構文は似ていますが異なる目的の、Oracle OLAPプログラムで使用するIF...THEN...ELSEコマンドと混同しないでください。IF...THEN...ELSEコマンドはデータ型を持たず、式のように評価されることはありません。

IF式の構文は次のとおりです。

IF Boolean-expression THEN expression1 ELSE expression2

ほとんどの場合、expression1およびexpression2のデータ型は、同じ基本的なデータ型(数値、テキストまたはブール)であることが必要であり、式全体のデータ型はバイナリ演算子の場合と同じルールに従って決定されます。ただし、expression1またはexpression2のどちらかのデータ型がDATEである場合、他方の式は数値またはテキストのデータ型にできます。Oracle OLAPでは両方のデータ型がDATEである必要があるので、数値またはテキスト値はDATEに変換されます。また、一方の式の値がディメンション値であれば、もう一方の式の値もQDR用としてディメンション値に変換されます。

IF式はネストできますが、この場合、SWITCH式を使用することもできます(「SWITCH式」を参照)。

IF式では、まずブール式が評価され、その後で次のような処理が実行されます。

- ブール式の結果がTRUEの場合、expression1が評価され、その値を返します。

- ブール式の結果がFALSEの場合、expression2が評価され、その値を返します。

expression1引数およびexpression2引数には、同じ基本データ型に評価される任意の有効なOLAP DMLを指定できます。ただし、どちらかの値のデータ型がDATEの場合、もう一方の値に数値データ型またはテキスト・データ型を指定できます。両方のデータ型をDATEにする必要があるため、Oracle OLAPは数値またはテキスト値をDATEに変換します。式全体のデータ型は、2つの式と同じになります。ブール式の結果がNAの場合、NAを返します。

例2-3 IF式の使用

例として、売上ボーナスのレポートを示します。売上が予算を上回った場合、ボーナスはその上回った額の5パーセントですが、地区の売上が予算を下回った場合はボーナスが0(ゼロ)になります。

LIMIT month TO 'Jan02' TO 'Jun02'
LIMIT product TO 'Tents'
REPORT DOWN district IF sales-sales.plan LT 0 THEN 0
ELSE .05*(sales-sales.plan)

PRODUCT: TENTS
---IF SALES-SALES.PLAN LT 0 THEN 0 ELSE .05*(SALES-SALES.PLAN)---
----------------------MONTH------------------------------
DISTRICT   Jan02    Feb02    Mar02     Apr02    May02    Jun02
--------- -------- -------- -------- ------- --------- ----------
Boston      229.53     0.00     0.00    0.00    584.51     749.13
Atlanta       0.00     0.00     0.00  190.34    837.62   1,154.87
Chicago       0.00     0.00     0.00   84.06    504.95     786.81
...

SWITCH式

SWITCH式は、一連のCASE式で構成されています。SWITCH式は、1つの値に対してすべての条件と等価比較を行う場合に、複雑にネストされたIF ... THEN ... ELSE式のかわりに使用できます。

注意:
SWITCH式を、構文は似ていますが異なる目的の、Oracle OLAPプログラムで使用するSWTICHコマンドと混同しないでください。SWITCHコマンドは式のように評価されることはありません。

SWITCH式の構文は次のとおりです。

SWITCH expression DO { case-label ... exp [,] } ... DOEND

ここで、case-labelの構文は次のとおりです。

CASE exp: | DEFAULT:

SWITCH式の処理では、一致が見つかるまで各CASE式との比較が行われます。一致が見つかると、現行のCASEグループの最後のラベルの後に指定された値が返されます。一致が見つからない場合、DEFAULTラベルが指定されていると、DEFAULT部で指定されている値が返されますが、指定されていない場合は、NAが返されます。

例2-4 IF式のかわりにSWITCH式を使用した場合

ネストしたIF...THEN...ELSE文を含む次のようなOLAP DML文を作成したとします。

testprogram = IF testtype EQ 0 -
THEN 'program0' -
ELSE IF testtype EQ 1 -
THEN 'program1' -
ELSE IF testtype EQ 2 OR testtype EQ 3 -
THEN 'program2'
ELSE NA

これを次のように、SWITCH式を使用して同じ動作を行うコードに書き換えることができます。

testprogram = SWITCH testtype DO -
CASE 0: 'program0', -
CASE 1: 'program1', -
CASE 2: -
CASE 3: 'program2', -
DEFAULT: NA -
DOEND

また、カンマやDEFAULT部を省略して行数を減らしたSWITCH文を使用しても同様の書換えが可能です。一致が見つからない場合のデフォルトの戻り値は、NAです。

testprogram = SWITCH testtype DO CASE 0: 'program0' CASE 1: 'program1' -
CASE 2: CASE 3: 'program2' DOEND

置換式

置換式を作成するには、式の先頭にアンパサンド文字(&)を使用します。アンパサンド(置換演算子)を使用するので、アンパサンド置換とも呼ばれています。アンパサンドを指定すると、Oracle OLAPは置換式を含む式を次の手順で評価します。

1. 先頭にアンパサンドが付いている式(置換式)を評価します。

2. 手順1の結果(置換式の結果)を使用して、式の残りの部分を評価します。

アンパサンド置換により、式を指定するときに間接的なレベルを指定できます。たとえば、アンパサンドの後に、他の変数の名前を含む変数を指定すると、その式の値は、その変数名を持つ変数に含まれているデータになります。アンパサンド置換により、プログラムの実行時に処理するデータを選択できる、より汎用的なプログラムを記述できるようになります。ただしOracle OLAPでは、アンパサンド置換を含む行はコンパイルされず、このような行は、プログラム実行時に解釈が行われます。プログラム内でアンパサンド置換の使用を回避するには、多くの場合、かわりにIFコマンドやSWITCHコマンドを使用できます。

モデル方程式では、アンパサンド置換を使用できません。

例2-5 アンパサンド置換の使用

curnameという変数には、アナリティック・ワークスペース内のあるディメンションの名前(product)が含まれているとします。次の文を実行すると、REPORTにより、curname変数に格納されている実際の値productが1つのみ生成されます。

REPORT curname

CURNAME
----------
PRODUCT

ただし、次の文を実行した場合は、REPORTによりディメンションproductの値が生成されます。

REPORT &curname

PRODUCT
--------------
Tents
Canoes
Racquets
Sportswear
Footwear

QDRとアンパサンド置換の使用

QDRとともにアンパサンドを使用する場合、置換が行われる前に変数を修飾するには、式全体をカッコで囲む必要があります。

reptypeによってディメンション化され、変数名を含むmyvarという名前のテキスト変数があるとします。これは、reptypeによってディメンション化されたmyvarであり、myvarという名前の変数ではない点に注意してください。そのため、myvarを修飾して、結果の値をREPORT文で使用するためには、カッコで囲む必要があります。

REPORT &(myvar(reptype 'actual'))

カッコを使用せず、myvarで指定された変数がsalesの場合、salesがreptypによってディメンション化されないことを示すエラー・メッセージを受け取ります

3 計算式、モデル、集計および割当て

計算オブジェクトは、実行する分析を指定するOLAP DML文を含むOLAP DMLオブジェクトです。計算オブジェクトには、計算式、モデル、集計仕様、割当て仕様およびプログラムが含まれます。

この章では、次の項目について説明します。

- 計算オブジェクトの作成

- OLAP DML計算式

- OLAP DMLモデル・オブジェクト

- OLAP DML集計オブジェクト

- OLAP DML割当てオブジェクト

OLAP DMLプログラムの作成の詳細は、第6章「OLAP DMLプログラム」を参照してください。

計算オブジェクトの作成

計算仕様オブジェクトを作成する一般的な手順は、次の2つのステップです。

1. 適切なDEFINE文を使用して、計算オブジェクトを定義します。

2. オブジェクト定義に計算仕様を追加します。計算仕様は、次の方法で計算オブジェクトの定義に追加できます。

- 入力ファイル内であれば、OLAP Worksheetのコマンドライン・レベルまたはPL/SQLファンクションの引数として追加します。この場合、オブジェクトが現行のオブジェクトであることを確認し(必要な場合はCONSIDER文を発行します)、複数行のテキスト引数として仕様を含む適切な文を発行します。仕様を複数行のテキストとしてコーディングするには、JOINLINESファンクションを使用できますが、ここでJOINLINESの各テキスト引数は必要な処理を指定する文となり、最後の文はENDになります。

- OLAP Worksheetの編集ウィンドウで追加します。この場合、OLAP Worksheetのコマンドライン・レベルで、適切なキーワードを指定してEDIT文を発行します。EDIT文を実行すると、指定したオブジェクトの編集ウィンドウが開きます。その後、編集ウィンドウで各文を個別の行として入力します。完了したら、仕様を保存して編集ウィンドウを閉じます。

表3-1は、各計算仕様を作成するための主なOLAP DML文を示したものです。

表3-1 計算オブジェクトを定義するコマンド

計算

定義文

仕様文

詳細の参照先

計算式

DEFINE FORMULA

EQ

「OLAP DML計算式」

モデル

DEFINE MODEL

MODEL

「OLAP DMLモデル・オブジェクト」

集計

DEFINE AGGMAP

AGGMAP

「OLAP DML集計オブジェクト」

割当て

DEFINE AGGMAP

ALLOCMAP

「OLAP DML割当てオブジェクト」

プログラム

DEFINE PROGRAM

PROGRAM

第6章「OLAP DMLプログラム」

OLAP DML計算式

式は計算式として保存できます。多くの場合、式の使いやすさと記憶領域の節約のために計算式を定義します。式の計算式を定義すると、式を示す計算式の名前を使用できます。Oracle OLAPでは、計算式のデータは変数に保存せず、要求されるたびに、実行時にデータを計算します。

計算式を作成する前に、最初に計算式オブジェクトを定義する際に式を指定するか、または計算式オブジェクトを定義した後に計算式の式を指定するかを次のように決定します。

- 最初に計算式オブジェクトを定義する際に式を指定するには:

1. DEFINE FORMULA文を発行して、計算式オブジェクトを定義します。定義に式を含めます。datatypeまたはdimensions引数の値は指定しないでください。

2. (オプション)COMPILE文を発行して、計算式をコンパイルします。

3. 計算式をアナリティック・ワークスペースの中で永続化する場合は、UPDATE文およびCOMMIT文を順に実行して、計算式を保存します。

- 計算式オブジェクトを定義した後に計算式の式を指定するには:

1. DEFINE FORMULA文を発行して、計算式オブジェクトを定義します。datatypeまたはdimensions引数の値を指定し、式自体の値は指定しないでください。

2. CONSIDER文を発行して計算式を現行の定義にし、さらにEQ文を発行して計算式の式を指定します。

3. (オプション)COMPILE文を発行して、計算式をコンパイルします。

4. 計算式をアナリティック・ワークスペースの中で永続化する場合は、UPDATE文およびCOMMIT文を順に実行して、計算式を保存します。

たとえば、次のような計算式を定義してドルの売上高を計算できます。

DEFINE dollar.sales FORMULA units * price

TRACEを使用すると、計算式をデバッグできます。

OLAP DMLモデル・オブジェクト

この項では、OLAP DMLモデルの作成および実行について説明します。内容は次のとおりです。

- OLAP DMLモデルの概要

- モデルの作成

- モデルのコンパイル

- モデルの実行

- モデルのデバッグ

OLAP DMLモデルの概要

OLAP DMLモデルは、変数またはディメンション値に結果を割当て可能な、相互に関連する一連の方程式です。たとえば、財務モデルでは、gross.marginまたはnet.incomeなどの特定の明細項目に値を割り当てることができます。

gross.margin = revenue - cogs

代入文がデータをディメンション値に割り当てるか、またはその計算でディメンション値を参照する場合、ディメンションベースの方程式と呼ばれます。ディメンションベースの方程式は、ディメンション自体は参照せず、ディメンションの値のみを参照します。そのため、モデルにディメンションベースの方程式が含まれている場合、モデルの先頭でDIMENSION文を使用し、それらの各ディメンションの名前を指定する必要があります。

モデルにディメンションベースの方程式が含まれている場合、モデルを実行する際にソリューション変数の名前を指定する必要があります。ソリューション変数は、データのソースであるとともにモデルの方程式の代入ターゲットでもあります。この変数により、ディメンションベースの方程式で使用される入力データが保持され、計算された結果はソリューション変数の指定された値に格納されます。たとえば、lineディメンションに基づく財務モデルを実行する場合、ソリューション変数としてactualを指定できます。

ディメンションベースの方程式により、財務モデリングに柔軟性が提供されます。モデルを解決するまでモデリング変数を指定する必要がないため、actual変数、budget変数、またはlineによってディメンション化された任意の変数で同じモデルを実行できます。

モデルは非常に複雑になる場合があります。次のことができます。

- 1つのモデルを別のモデルに含めます(「モデルのネスト」を参照)。

- 異なる時間間隔からのデータを使用します(「過去および将来の時間間隔からのデータの使用」を参照)。

- 連立方程式を解決します(「連立方程式の解決」を参照)。

- 異なるシナリオのモデルを作成します(「複数のシナリオのモデリング」を参照)。

モデルの作成

OLAP DMLモデルを作成するには、次の手順を実行します。

1. DEFINE MODELコマンドを発行して、プログラム・オブジェクトを定義します。

2. モデルに仕様を追加するMODELコマンドを発行して、実行する処理を指定します。

3. モデルをコンパイルします(「モデルのコンパイル」を参照)。

4. (オプション)必要な場合は、モデル・オプションの設定を変更します(「モデル・オプション」のリストを参照)。

5. モデルを実行します(「モデルの実行」を参照)。

6. モデルをデバッグします(「モデルのデバッグ」を参照)。

7. モデルをアナリティック・ワークスペースの中で永続化する場合は、UPDATEコマンドおよびCOMMITコマンドを順に実行して、モデルを保存します。

モデルの作成の例は、例10-57「モデルの作成」を参照してください。

モデルのネスト

MODELコマンド内でINCLUDE文を使用して、1つのモデルを別のモデルに含めることができます。INCLUDE文を含むMODELコマンドは、親モデルと呼ばれます。含められているモデルは、ベース・モデルと呼ばれます。INCLUDE文をベース・モデルで使用することにより、モデルをネストできます。たとえば、モデルmyModel1がモデルmyModel2を含み、モデルmyModel2がモデルmyModel3を含むことが可能です。ネストしたモデルは階層形式になります。この例では、myModel1が一番上の階層になり、myModel3がルートになります。

モデルにINCLUDE文が含まれる場合、DIMENSION文を含めることはできません。親モデルは、含まれる階層のルート・モデルのDIMENSION文からそのディメンションを継承します(存在する場合)。前述の例では、モデルmyModel1およびmyModel2は、どちらもモデルmyModel3のDIMENSION文からそのディメンションを継承します。

INCLUDE文により、モジュール・モデルの作成が可能になります。特定の方程式が複数のモデルで共通している場合、それらの方程式を独立したモデルに配置して、必要に応じてそのモデルの他のモデルに含めることができます。

さらに、INCLUDE文によりwhat-if分析が容易になります。実験的なモデルでは、ベース・モデルから方程式を流用し、それを選択的に新しい方程式に置き換えることが可能です。what-if分析をサポートするには、モデルで方程式を使用して以前の方程式をマスクします。以前の方程式は、同じモデルまたはそれに含まれているモデルにあります。マスクされた方程式は実行されず、モデルのMODEL.COMPRPTレポートにも表示されません。

ディメンション・ステータスおよびモデル方程式

ディメンション値にデータを割り当てる代入文がモデルに含まれている場合、ディメンションは一時的にその値に制限され、計算を実行してディメンションの初期ステータスをリストアします。

たとえば、モデルには次の文が含まれる場合があります。

DIMENSION line
gross.margin = revenue - cogs

モデルを実行する際にソリューション変数としてactualを指定すると、次のコードが構成され、実行されます。

PUSH line
LIMIT line TO gross.margin
actual = actual(line revenue) - actual(line cogs)
POP line

モデルでソリューション変数を使用することにより、このような自動的なコード構成が行われるため、単純なモデル方程式で複雑な計算を実行できます。たとえば、明細項目データは、lineによってディメンション化されたactual変数に格納されます。ただし、明細項目の詳細データは、detail.lineという名前のディメンションを持つdetail.dataという変数に格納される場合があります。

各詳細項目に関連する明細項目を指定するlineとdetail.line間のリレーションが、アナリティック・ワークスペースに含まれる場合、次のようなモデル方程式を記述できます。

revenue = total(detail.data line)
expenses = total(detail.data line)

detail.lineとline間のリレーションは、詳細データを適切な明細項目に集計するために自動的に使用されます。モデルの実行時に構成されるコードにより、適切な合計が確実にlineディメンションの各値に割り当てられます。たとえば、revenue項目の方程式が計算される際、lineは一時的にrevenueに制限され、TOTALファンクションはlineのrevenue値に対する詳細項目の合計を返します。

過去および将来の時間間隔からのデータの使用

いくつかのOLAP DMLファンクションにより、過去または将来の時間間隔のデータを使用することが容易になります。たとえば、LAGファンクションは指定した過去の時間間隔のデータを返し、LEADファンクションは指定した将来の時間間隔のデータを返します。

その計算で過去または将来のデータを使用するモデルを実行する場合、ソリューション変数に必要な過去または将来のデータが含まれていることを確認する必要があります。たとえば、モデルには、先月のrevenue明細項目に基づいて今月のrevenue明細項目の推定値を求める代入文が含まれていることがあります。

DIMENSION line month
...
revenue = LAG(revenue, 1, month) * 1.05

モデルを実行するときにmonthディメンションがApr2004からJun2004に制限されている場合、ソリューション変数にMar96のrevenueデータが含まれていることを確認する必要があります。

モデルにLEADファンクションが含まれている場合、ソリューション変数には必要な将来のデータが含まれている必要があります。たとえば、2004年4月から6月までのデータを計算するときに、モデルが1か月先からデータを取得する場合、モデルの実行時にはソリューション変数に2004年7月のデータが含まれている必要があります。

モデルにおけるNA値の処理

Oracle OLAPは、モデルの方程式を評価する際にNASKIP2オプションに従います。NASKIP2は、+(加算)および-(減算)演算が実行される際のNA値の処理方法を制御します。ソリューション変数にNA値が含まれている場合、NASKIP2の設定は重要です。

計算の結果は、ソリューション変数に入力として使用されるNA値が含まれている場合のみではなく、連立方程式のターゲットがNAの場合もNAになる可能性があります。ソリューション変数の値は、連立ブロックでの最初の反復におけるターゲットの初期値として使用されます。そのため、ソリューション変数にターゲットの初期値としてNAが含まれる場合、最初の反復の結果としてNAが生成され、そのNAの結果が続いて起こる反復の間、保持されることがあります。

結果がNAになるのを回避するには、ソリューション変数にNA値が含まれていないことを確認するか、NASKIP2をYESに設定してからモデルを実行します。

連立方程式の解決

連立方程式を解くには、反復解法を使用します。各反復では、値が各方程式で計算されます。新しい値が前回の反復の値と比較されます。比較が指定された許容範囲内になると、方程式は収束したと判断されます。比較が指定された限界を超える場合、方程式は発散したと判断されます。

ブロック内のすべての方程式が収束する場合、そのブロックは解決したと判断されます。方程式が発散した場合、または指定された反復の回数で収束しなかった場合、ブロック(およびモデル)の解決は失敗し、エラーが発生します。

連立方程式の解を制御するには、OLAP DMLオプションを使用できます(「モデル・オプション」を参照)。たとえば、これらのオプションを使用して、使用する解決の方法、収束および発散のテストで使用する要素、実行する反復の最大回数、および代入文が発散した場合や収束に失敗した場合に行う処理を指定できます。

複数のシナリオのモデリング

月および部門について単一の数値セットを計算するかわりに、それぞれ異なる条件に基づいた複数の数値セットを計算する場合があります。

異なる入力値セットに基づいて予測または予算額を計算および格納する、シナリオ・モデルを定義できます。たとえば、楽観値、悲観値および最良予測値に基づいて利益を計算できます。

シナリオ・モデルを作成するには:

1. シナリオ・ディメンションを定義します。

2. シナリオ・ディメンションによってディメンション化されるソリューション変数を定義します。

3. ソリューション変数に入力データを入力します。

4. 入力データに基づいて結果を計算するモデルを作成します。

シナリオ・モデルの作成の例は、例10-58「シナリオ・モデルの作成」を参照してください。

モデルのコンパイル

モデルの文を記述した後、COMPILEコマンドを使用してモデルをコンパイルします。コンパイル中、COMPILEはフォーマット・エラーをチェックするため、COMPILEを使用してコードをデバッグしてからモデルを実行できます。モデルを実行する前にCOMPILEを使用しない場合、モデルは自動的にコンパイルされてから解決されます。ISCOMPILEDを選択してOBJファンクションを使用することで、モデルがコンパイルされているかどうかをテストできます。

SHOW OBJ(ISCOMPILED 'myModel')

COMPILE文の使用またはモデルの実行によりモデルをコンパイルすると、モデル・コンパイラではモデル特有の問題のチェックが行われます。次のいずれかの場合、エラー・メッセージが表示されます。

- モデルが、DIMENSION文、INCLUDE文および代入(SET)文以外の文を含んでいる。

- モデルがDIMENSION文とINCLUDE文の両方を含んでいる。

- モデル内の最初の方程式の後にDIMENSION文またはINCLUDE文が置かれている。

- 単一のディメンションベースの方程式内のディメンション値が、2つ以上の異なるディメンションを参照している。

- 方程式が参照している名前を、コンパイラが、アタッチされたアナリティック・ワークスペースのオブジェクトとして識別できない。このエラーが発生した場合、方程式でディメンションの値が参照されているにもかかわらず、DIMENSION文にそのディメンションが含まれていない可能性があります。さらに、別のモデルを含むモデルをコンパイルしている際、もう一方のモデルのコンパイルが失敗すると、DIMENSION文が見つからないとされる可能性があります。ルート・モデル(含まれるモデルの階層内で最も深くに位置するモデル)のコンパイルが失敗すると、親モデルはルート・モデルからのDIMENSIONコマンドをまったく継承できません。この場合、エラーの実際の発生箇所がルート・モデルであっても、コンパイラでは親モデルにおけるエラーとしてレポートすることがあります。詳細は、INCLUDEを参照してください。

方程式内の名前の解決

モデル・コンパイラでは、方程式内の各名前を調査して、名前が参照するアナリティック・ワークスペース・オブジェクトを判断します。計算や結果の代入など、モデルの方程式でも変数およびディメンション値を同じ方法で使用できるため、名前は、変数の名前であることもあれば、DIMENSION文にリストされているディメンションの値であることもあります。

各名前参照を解決する際、コンパイラは、明示的または継承されたDIMENSION文にリストされているすべてのディメンションをリスト順で検索し、リストされたディメンションのディメンション値に名前が一致するかどうかを確認します。検索は、一致する値が検出された時点で終了します。

したがって、リストされているディメンションのうち2つ以上のディメンションが同じ名前のディメンション値を持っている場合、コンパイラでは、その値を、DIMENSION文内で最も早く名前が付けられているディメンションに属するものとみなします。

同様に、モデル・コンパイラは、リテラルなINTEGER値が属するディメンションを誤って解釈することがあります。たとえば、モデル・コンパイラでは、リテラル値'200'を、200の位置の値またはリテラルなディメンション値200のいずれかを含む最初のディメンションに属するものとみなします。

識別の誤りを回避するため、必要なディメンションを指定して値をカッコおよび一重引用符で囲むことができます。「あいまいなディメンション値の書式設定」を参照してください。

コンパイラでは、ある名前がDIMENSION文で指定されているどのディメンションの値でもないことを検出すると、その名前をアナリティック・ワークスペース変数の名前であるとみなします。アタッチされているどのアナリティック・ワークスペースにもその名前の変数が定義されていない場合、エラーが発生します。

ディメンションをループ処理するためのコード

モデル・コンパイラは、文がループ処理するディメンションを決定します。方程式によって結果が変数へ代入されると、コンパイラでは変数のディメンション(またはコンポジットのベース)をループ処理するコードを作成します。

ディメンションベースの方程式を含むモデルを実行する場合、指定するソリューション変数を、DIMENSION文にリストされているディメンションよりも多いディメンションによってディメンション化できます。

プログラム引数の評価

ユーザー定義のプログラムに対する引数としてモデル・ディメンションの値を指定する場合、コンパイラは、この引数によって持ち込まれる依存性を認識します。

たとえば、ある方程式で、一定の条件をテストした後でその条件に基づくTaxes明細項目を重み付けして返すweightというプログラムを使用するとします。この例の場合、モデル方程式は次のようなものになります。

Net.Income = Opr.Income - weight(Taxes)

コンパイラでは、Net.IncomeがOpr.IncomeおよびTaxesに依存することを正しく認識します。ただし、weightプログラムがプログラム引数として指定されていないディメンション値または変数を参照する場合には、コンパイラは、それらの計算によって持ち込まれる隠れた依存性は認識しません。

方程式間の依存性

モデル・コンパイラでは、モデル内の方程式間の依存性を分析します。1つの方程式内で等号の右側にある式が別の方程式の代入ターゲットを参照する場合に、依存関係が存在します。ある方程式が、方程式間の依存性の結果として、それ自体に間接的に依存している場合は、それらの方程式間には循環依存が存在します。

モデル・コンパイラでは、モデルを複数のブロックに編成し、依存性を反映するようにブロック内の方程式およびブロック自体を順序付けます。モデルが実行されると、モデルは一度に1ブロックずつ解決されます。モデル・コンパイラでは、次に示す3つのタイプのソリューション・ブロックを生成できます。

- 単純ソリューション・ブロック: 単純ブロックには、互いに独立している方程式および相互に非循環的な依存のある方程式が含まれます。
たとえば、ブロックに値A、BおよびCについて解く方程式が含まれる場合、非循環的な依存はA>B>Cのように表されます。矢印は、AがBに依存し、BがCに依存していることを示しています。

- ステップ・ソリューション・ブロック: ステップ・ブロックには、一方向のディメンションの依存である循環依存を持つ方程式が含まれます。ディメンションの依存関係は、現在のディメンション値のデータが以前または以後のディメンション値からのデータに依存する場合に発生します。ディメンションの依存関係は、データが以前の値のみまたは以後の値のみに依存し、その両方には依存しない場合に一方向となります。一方向のディメンション依存の詳細は、「一方向のディメンション依存の保証」を参照してください。

ディメンションの依存関係は、通常、時間ディメンションで発生します。たとえば、普通、明細項目値は、以前の時間間隔の同じ明細項目または異なる明細項目の値に依存します。ブロックに値AおよびBについて解く方程式が含まれる場合、一方向のディメンション依存はA>B>LAG(A)のように表されます。矢印は、AがBに依存し、Bが前の時間間隔のAの値に依存していることを示しています。

- 連立ソリューション・ブロック: 連立ブロックには、一方向のディメンション依存以外の循環依存がある方程式が含まれます。循環依存は、ディメンション修飾子がまったく関与しない場合もあれば、双方向のディメンション依存である場合もあります。双方向のディメンション依存の詳細は、「モデル・コンパイラで双方向のディメンション依存が想定される構造」を参照してください。

モデルに連立方程式のブロックが含まれる場合、COMPILEにより警告メッセージが表示されます。この場合、モデルを実行する前に、連立ソリューションを制御するオプションの設定を確認することもできます。これらのオプションは、「モデル・オプション」にリストされています。

ディメンション修飾子に依存しない循環依存の例は、A>B>C>Aとして表すことができます。矢印は、AがBに依存し、BがCに依存し、CがAに依存していることを示しています。

双方向のディメンション依存である循環依存の例は、A>LEAD(B)>LAG(A)として表すことができます。矢印は、Aが将来の期間におけるBの値に依存し、一方、Bは以前の期間におけるAの値に依存していることを示しています。

連立方程式の順序 方程式の連立ブロックの解決は、方程式の順序が影響します。通常は、モデル・コンパイラが決定する最適な方程式の順序をそのまま受け入れます。ただし、場合によっては、方程式を特定の順序に配置することによって収束を促進できることもあります。

各ブロック内の連立方程式を、指定した順序のままコンパイラによって変更されないようにするには、モデルをコンパイルする前にMODINPUTORDERオプションをYESに設定します。(MODINPUTORDERは、単純ブロックまたはステップ・ブロック内の方程式の順序には影響しません。)

モデル・コンパイラで双方向のディメンション依存が想定される構造

依存が次のいずれかの構造を介して持ち込まれる場合、モデル・コンパイラでは、双方向のディメンション依存が存在するものとみなします。

- AVERAGE、TOTAL、ANYまたはCOUNTなどの集計ファンクションを使用する場合、双方向のディメンション依存が発生する可能性があります。

Opr.Income = Gross.Margin -
(TOTAL(Marketing + Selling + R.D))
Marketing = LAG(Opr.Income, 1, month)

- CUMSUM、LAGまたはLEADなどのtime-period引数を必要とする時系列のファンクションを使用する場合(「一方向のディメンション依存の保証」に記述されている特定のファンクションおよび条件を除く)、双方向のディメンション依存が発生する可能性があります。

- 双方向のディメンション依存は、DEPRSLまたはNPVなどの財務ファンクションを使用している場合にも、発生する可能性があります。
融資または減価償却のファンクションを介して持ち込まれた時間ディメンションでの循環依存は、予期しない結果に繋がる場合があります。融資のファンクションには、FINTSCHED、FPMTSCHED、VINTSCHEDおよびVPMTSCHEDがあります。減価償却のファンクションには、DEPRDECL、DEPRDECLSW、DEPRSLおよびDEPRSOYDがあります。

一方向のディメンション依存の保証

方程式間の依存が次のいずれかの構造を介して持ち込まれる場合、一方向のディメンション依存が発生します。

- LAGまたはLEADファンクションを使用し、時間間隔の番号に対する引数が明示的な数(値または定数)またはABSの結果として表されている場合、一方向のディメンション依存が発生します。(そうでない場合、以前のディメンション値および将来のディメンション値の両方が関与する双方向の依存がある可能性があり、コンパイラによって、連立ソリューションが必要であるとみなされます。)LAGのこの使用例は次のとおりです。

Opr.Income = Gross.Margin - (Marketing + Selling + R.D)
Marketing = LAG(Opr.Income, 1, month)

- 一方向のディメンション依存は、MOVINGAVERAGE、MOVINGMAX、MOVINGMINまたはMOVINGTOTALファンクションを使用する場合、start引数とstop引数がゼロ以外の数の場合、およびstart引数とstop引数が両方とも正の数か負の数である場合、発生します。そうでない場合は、双方向のディメンション依存とみなされます。

Opr.Income = Gross.Margin - (Marketing + Selling + R.D)
Marketing = MOVINGAVERAGE(Opr.Income, -4, -1, 1, month)

解析結果の取得

モデルのコンパイル後、次のツールを使用して、コンパイラによる解析の結果についての情報を取得できます。

- MODEL.COMPRPTプログラムは、モデルの方程式がどのようにブロックにグループ化されたかを示すレポートを生成するプログラムです。このレポートでは、ディメンション間の依存があるステップ・ブロックおよび連立ブロックについて、依存に関与するディメンションがリストされます。

- MODEL.DEPRTプログラムは、各モデル方程式が依存する変数およびディメンション値がリストされるレポートを生成するプログラムです。ディメンションに依存している場合、レポートにはディメンションの名前が示されます。

- INFOファンクションでは、モデルの構造に関する情報の特定の項目を取得できます。

その他の問題の確認

コンパイラは、モデル方程式で使用されるプログラムまたは計算式の内容は分析しません。そのため、プログラムおよび計算式をユーザー自身が調べ、次のような処理が行われていないことを確認する必要があります。

- モデルで使用している変数値への参照

- ソリューション変数への参照

- モデルで使用している任意のディメンションの制限

- 他のモデルの実行

モデルまたはプログラムがこれらの制限のいずれかに違反する場合、モデルの結果は不適切なものになります。

関連項目:
MODTRACE、TRACE

モデルの実行

モデルを実行する際は、次の点に注意してください。

- モデルを実行する前に、ソリューション変数で入力データが使用可能である必要があります。

- 連立方程式のブロックを含むモデルを実行する前に、連立ブロックの解決を制御する一部のOLAP DMLオプションの値を確認または変更できます。これらのオプションは、「モデル・オプション」に簡単な解説があります。

- モデルにディメンションベースの方程式が含まれる場合、データのソースおよび方程式の結果の割当てターゲットの両方として機能する数値ソリューション変数を指定する必要があります。ソリューション変数は、通常モデル方程式の基となるすべてのディメンションによってディメンション化されますが、方程式の基にしないソリューション変数の他のディメンションによってもディメンション化されます。

- モデルを実行すると、方程式の基にしないソリューション変数の各ディメンションの現行のステータス・リストにある値が自動的にループ処理されます。

- モデル方程式が以前の時間間隔からのデータを基に計算を行っている場合、ソリューション変数にはそれらの以前の時間間隔のデータが含まれている必要があります。データが含まれていない場合、またはDAY、WEEK、MONTH、QUARTER、YEAR型のディメンションの最初の値がステータスにある場合、計算の結果はNAとなります。

モデル実行用の構文

モデルを実行または解決するには、次の構文を使用します。

model-name [solution-variable] [NOWARN]

ここで、

- model-nameはモデルの名前です。

- solution-variableは、ディメンションベースの方程式を含むモデルで、データのソースおよびターゲットの両方として機能する数値変数の名前です。ソリューション変数は、通常、モデル方程式の基となるすべてのディメンションによってディメンション化されます(明示的に指定するか、DIMENSIONコマンドに含めます)。solution-variable引数は、モデルにディメンションベースの方程式が含まれる場合に必要です。すべてのモデル方程式が変数にのみ基づく場合、ソリューション変数は必要ないため、この引数を指定するとエラーが発生します。ソリューション変数のディメンションの詳細は、「ソリューション変数のディメンション」を参照してください。

- NOWARNは、モデルに連立方程式のブロックが含まれる際の警告が不要であることを指定するオプション引数です。

ソリューション変数のディメンション

ディメンションベースの方程式を含むモデルでは、通常、ソリューション変数は、モデル方程式の基となるディメンションによってディメンション化されます。また、ソリューション変数がコンポジットによってディメンション化される場合、モデル方程式はコンポジットのベース・ディメンションに基づきます。モデル方程式が基とするディメンションは、明示的あるいは継承されたDIMENSION文にリストされます。

ソリューション変数の特別な状況

ソリューション変数のディメンションに関する特別な状況として、次のようなことが発生する場合があります。

- ソリューション変数が、DIMENSIONコマンドでリストされていないディメンションを持つ可能性があります。Oracle OLAPは、それらのディメンションのステータスにある値を自動的にループ処理します。たとえば、モデルにlineおよびmonthディメンションをリストするDIMENSION文が含まれている場合に、line、monthおよびdivisionによってディメンション化されるソリューション変数を指定するとします。Oracle OLAPは、モデルを実行する際にdivisionディメンションを自動的にループ処理します。ソリューション変数は、DIMENSIONコマンドでリストされない1つ以上のベース・ディメンションを含むコンポジットによってディメンション化される場合もあります。「コンポジットによってディメンション化されるソリューション変数」を参照してください。

- ソリューション変数が、DIMENSIONコマンドでリストされていないディメンションを持ち、かつ、それらのディメンションがステップ・ブロックまたは連立ブロックのディメンションの場合、エラーが発生します。

- Oracle OLAPは、ソリューション変数がそれらのディメンションによってディメンション化されているかどうかにかかわらず、DIMENSIONコマンドでリストされるすべてのディメンションのステータスにある値をループ処理します。そのため、ソリューション変数が、リストされたすべてのディメンションによってディメンション化されない場合、Oracle OLAPは不要な処理を行います。Oracle OLAPはモデルの解決を開始する前に、この状況を警告します。

- DAY、WEEK、MONTH、QUARTERまたはYEAR型の不要なディメンションをDIMENSION文に含めると、モデル方程式で融資、減価償却および集計ファンクションを使用する場合に不適切な結果が返されます。このように不適切な結果が返されるのは、モデル・ディメンションの値を参照するモデル方程式のコンポーネントが、そのコンポーネントにモデルのすべてのディメンションが含まれているかのように動作するためです。

コンポジットによってディメンション化されるソリューション変数

ソリューション変数にディメンション・リストのコンポジットが含まれる場合、Oracle OLAPは、可能な場合、常にコンポジットのスパース性を監視します。モデルを解決する際、Oracle OLAPは、コンポジットのループ処理をそのコンポジットに存在する値に制限します。ループ処理中は、コンポジットのベース・ディメンションの現行のステータスを監視します。

ただし、モデルを適切に解決するため、Oracle OLAPはコンポジットの次のようなベース・ディメンションを通常のディメンションとして処理する必要があります。

- DIMENSION文でリストされているベース・ディメンション

- SETを使用して作成されるモデル方程式(たとえば、ベース・ディメンションによってディメンション化される変数にデータを代入する方程式など)に関係するベース・ディメンション

- 方程式のACROSS句で指定される別のコンポジットのベース・ディメンションでもあるベース・ディメンション。(代入文およびACROSS句の使用の詳細は、SETを参照してください。)

ソリューション変数のコンポジットのベース・ディメンションが、前述の3つのどれかに該当する場合、Oracle OLAPはそのディメンションを通常のディメンションとして処理し、現行のステータスにあるすべての値をループ処理します。

ソリューション変数のコンポジットに、前述の3つのどれにも該当しない他のベース・ディメンションが含まれる場合、Oracle OLAPはそれらのベース・ディメンションの一時コンポジットを作成します。一時コンポジットの値は、基となったコンポジットに存在していた値の組合せになります。Oracle OLAPは、モデルを解決する際に一時コンポジットをループ処理します。

モデルのデバッグ

モデルのデバッグには、次のツールが使用できます。

- モデルの方程式が解決される順序を確認するには、MODTRACEオプションをYESに設定してからモデルを実行します。MODTRACEをYESに設定すると、DBGOUTFILE文を使用してデバッグ情報をファイルに送信できます。DBGOUTFILEによって生成されるファイルでは、モデルの各行とそれに対応する出力が併記されています。

- MODEL.COMPRPT、MODEL.DEPRT、MODEL.XEQRPTプログラムとINFOファンクションを使用して、コンパイルされたモデルの構造、および実行したモデルの解決ステータスに関する情報を取得できます。

OLAP DML集計オブジェクト

この項では、OLAP DMLを使用したデータの集計について説明します。内容は次のとおりです。

- OLAP DML集計の概要

- OLAP DMLを使用したデータの集計

- 集計仕様のコンパイル

- 集計の実行

- カスタム集計の作成

OLAP DML集計の概要

これまでは、データの集計といえば、小計や総計を算出するために詳細データを合計することを指しました。しかし、OLAP DML aggmapオブジェクトを使用すると、より複雑な集計計算を指定できます。

- 階層ディメンションによってディメンション化されたサマリー・データは、様々な方法(たとえば、最初、最後、平均または加重平均など)を使用して計算できます。このような集計の例は、例9-18「階層での集計」を参照してください。

- 非階層ディメンションによってディメンション化されたサマリー・データは、モデルを使用して計算できます。モデルを使用したサマリー・データの計算は、明細項目など、階層構造を持たないディメンションの値を計算するときに有効です。また、1つ以上の他の明細項目またはワークスペース・オブジェクトから、個々の明細項目の値を計算するモデルを作成できます。このような集計の例は、例9-17「集計におけるモデルの解決」を参照してください。

- サマリー・データの計算に使用される詳細データは、サマリー・データを含む変数または1つ以上の他の変数に格納できます。サマリー・データを含む変数のディメンションは、詳細データを含む変数と同じにする必要はありません。このような集計の例は、例9-15「異なる変数への集計」および例9-32「キャップストーン集計」を参照してください。

- データは、サマリー・データに対するユーザーの要求に応じて、データベースのメンテナンス手順として集計するか、これらの方法を組み合せることができます。詳細は、「集計の実行」を参照してください。

- ユーザーの要求に応じて集計されたデータは、要求されるたびに計算され、今後の問合せのためにアナリティック・ワークスペースに格納またはキャッシュされます。

- 集計の仕様は、永続的または一時的にできます(「カスタム集計の作成」を参照)。

OLAP DMLを使用したデータの集計

OLAP DMLを使用してデータを集計するには、次の手順を実行します。

1. AGGREGATEコマンドを使用してデータベースのメンテナンス手順としてすべてのデータを集計するか、AGGREGATEファンクションまたは$AGGMAPプロパティを使用して実行時にすべてのデータを即時集計するか、あるいはそれらの方法を組み合せて一部の値を事前計算し、他の値を実行時に計算するかどうかを決定します。様々な方法については、「集計の実行」を参照してください。

2. DEFINE AGGMAP文を発行して、aggmapオブジェクトの型をAGGMAPとして定義します。

3. 集計仕様を記述します(AGGMAPを参照)。

4. パーティション変数を集計する場合、PARTITIONCHECKを実行して、前の手順で作成された集計仕様が変数のパーティション化と互換性があることを確認します。互換性がない場合、集計仕様を再記述するか、CHGDFNを使用して変数の再パーティション化を行います。

5. データの一部またはすべてをAGGREGATEファンクションを使用して集計する場合は、次の作業を実行します。

1. aggmapオブジェクトをコンパイルします(「集計仕様のコンパイル」を参照)。

2. トリガーするプロパティ、オブジェクトまたはイベントを追加します。たとえば、AGGREGATEファンクションを式として含む計算式を追加し、さらに$NATRIGGERプロパティを変数に追加すると、データの実行時要求に応答してその計算式の実行がトリガーされます。

6. aggmapオブジェクトをアナリティック・ワークスペースの中で永続化する場合は、UPDATE文およびCOMMITを順に実行して、aggmapオブジェクトを保存します。

7. AGGREGATEコマンドを使用して計算するデータについては、次の作業を実行します。

1. (オプション)DBMS_CUBE_LOG.ENABLEプロシージャを使用して、集計操作をログに書き込みます。

2. AGGREGATEコマンドに続いてUPDATEおよびCOMMITを実行し、データを事前計算してアナリティック・ワークスペースに格納します。

集計仕様のコンパイル

実行時にAGGREGATEファンクションを使用して行われる集計では、aggmapオブジェクトのコンパイルが重要になります。コンパイル済バージョンのaggmapが保存されていない場合、aggmapはそれを使用するセッションごとに再コンパイルされます。

aggmapオブジェクトのコンパイルには、次の2つの方法があります。

- COMPILE文を発行する。
aggmapオブジェクトがAGGREGATEファンクションによって使用される場合、aggmapオブジェクトをコンパイルする方法は、COMPILE文の発行のみです。aggmapを明示的にコンパイルすると、実際に使用してデータを生成する前にaggmap内の構文エラーも見つけることができて便利です。次の文では、sales.agg aggmapがコンパイルされます。

COMPILE gpct.aggmap

- AGGREGATEコマンドを使用してデータを集計する際、文にFUNCDATA句を含める。
AGGREGATEコマンドでFUNCDATA句を使用すると、aggmapはデータを集計する前にOracle OLAPによってコンパイルされます。たとえば、この文はコンパイルを実行し、集計データを事前計算します。

AGGREGATE sales USING gpct.aggmap FUNCDATA

重要:
一部のデータが即時計算される場合は、AGGREGATEコマンドを実行した後で、aggmapをコンパイルして保存する必要があります。

集計の実行

OLAP DMLでデータを集計するには、次の2つの方法があります。

- AGGREGATEコマンドを使用し、データのメンテナンス手順としてデータを集計する。この方法でデータを集計するには、集計仕様において、PRECOMPUTE文か、RELATION文のPRECOMPUTE句を使用して、集計するデータを指定します。

- AGGREGATEファンクションを使用するか、$AGGMAPプロパティを変数に追加し、必要に応じて実行時にデータを集計する。

レベル、個々のメンバー、メンバー属性、時間範囲、データ値または他の基準により、適切な方法を選択できます。また、これらの方法を組み合せ、一部の値を事前計算し、他の値を実行時に計算することもできます。この場合、通常はAGGREGATEコマンドおよびAGGREGATEファンクションに同じaggmapを使用します。しかし、場合によっては異なるaggmapを使用します。

全体的なパフォーマンスの向上を実現する1つの方法は、集計してアナリティック・ワークスペースに格納するデータの量と、即時計算に指定するデータの量のバランスを取ることです。集計仕様の中でPRECOMPUTE文またはPRECOMPUTE句を使用すると、Oracle OLAPの集計アドバイザという特殊機能を介して、AGGREGATEコマンドでデータのメンテナンス手順として集計する値や、手動で明示的に指定する値を自動的に決定できます。

カスタム集計の作成

あるセッションで使用された大部分の集計の定義は、別のセッションでも使用されます。ただし、予測またはwhat-if分析を行う場合、あるいは想定外の方法でデータを参照する場合、実行時にそのセッション限定の集計を作成する必要があります。セッション限定の集計の追加は、カスタム集計の作成と呼ばれます。次の方法で、集計の仕様を永続的に変更する必要のない非永続型の集計データを作成できます。

- MAINTAIN ADD SESSION文を使用して、一時ディメンション・メンバーを定義し、それらのメンバーの定義の一部として集計仕様を含めます。集計仕様は、モデルまたはaggmapのどちらかです。この方法を使用して一時集計を作成する例は、例10-42「集計値を使用した計算ディメンション・メンバーの作成」を参照してください。

- 集計を指定するモデルを作成します。AGGMAP ADD文を使用して、実行時にモデルをaggmapに追加します。セッション後、この方法でaggmapに追加したすべてのモデルは、Oracle OLAPが自動的に削除します。詳細は、AGGMAP ADDまたはREMOVEモデルを参照してください。

OLAP DML割当てオブジェクト

データの割当てには、サマリー・データから下位レベル・データを作成する必要があります。この項では、OLAP DML文を使用したデータの割当て方法の概要を説明します。内容は次のとおりです。

- OLAP DMLを使用したデータの割当ての概要

- Oracle OLAPの割当ての機能

- データの割当て

- データ割当て時のNA値の処理

OLAP DMLを使用したデータの割当ての概要

データ割当てをALLOCMAP型のaggmapオブジェクトで指定できます。割当てを実装するには、ALLOCMAP aggmapでALLOCATEコマンドを実行します。ターゲットは、1つ以上の階層ディメンションによってディメンション化された変数です。ソース・データは、ターゲット・セルを指定する値より上位レベルの階層ディメンションにあるディメンション値により指定されます。

ALLOCATEは、aggmapを使用して、割当てで使用する階層のディメンションおよび値、ディメンションに使用する処理の方法、および割当ての他の側面を指定します。

割当て処理の一部は、既存のデータに基づきます。そのデータを含むオブジェクトは、割当ての基礎オブジェクトとなります。このような処理では、ALLOCATEは基礎オブジェクトの値に基づいて、ソースからデータを配分します。

ALLOCATEは、AGGREGATEコマンドの処理の逆の処理を実行します。割当て処理の方法は、ソース・データをターゲット変数のセルへコピーすることといった単純な割当てから、他の計算式に基づいて配分された量、ターゲットとしての複数の変数、および異なるディメンションに異なる割当ての方法を指定するaggmapを使用して、計算式であるソースからデータを比例配分することといった非常に複雑な割当てにまで及びます。

Oracle OLAPの割当ての機能

Oracle OLAPの割当てシステムは非常に柔軟性があり、次のような多くの機能があります。

- ソース・オブジェクト、基礎オブジェクトおよびターゲット・オブジェクトは、同じ変数または異なるオブジェクトにすることができます。

- ソース・オブジェクトおよび基礎オブジェクトは、計算式にすることが可能なため、既存のデータで計算を実行し、その結果を割当てのソースまたは基礎として使用できます。

- ディメンションに対する割当ての処理方法を指定できます。この処理は、単純なものから非常に複雑なものまであります。

- 割り当てられた値を、ターゲット・セルの既存の値に追加するかまたは置換するかを指定できます。

- 結果をターゲット・セルに割り当てる前に、割り当てられた値を加算または乗算する量を指定できます。

- ディメンション階層の個々の値をロックして、それらのディメンション値のターゲット・セルのデータが割当てにより変更されないようにすることが可能です。ディメンション値をロックすると、割当てシステムはソース・データを正規化し、ロックされたデータを割当て前にソースから除外します。ソース・データを正規化しないように選択できます。

- 特定の処理に最小値、最大値、下限値または上限値を指定できます。

- 割り当てられたデータを2番目の変数にコピーして、複数の割当てのターゲットであるセルへの各割当てを記録できます。

- 基礎がNULL値の場合の割当ての処理方法を指定できます。

- 異なるALLOCATEコマンドで同じaggmapを使用して、異なるソース・オブジェクト、基礎オブジェクトまたはターゲット・オブジェクトで、同じディメンション階層値、処理および引数のセットを使用できます。

データの割当て

aggmapオブジェクトを使用してデータを割り当てるには、次のようなOLAP DML文を、示されている順序で使用します。

1. DEFINE AGGMAP文を発行して、aggmapオブジェクトを定義します。

注意:
DEFINE AGGMAP文の直後にOLAP Worksheetをコマンドライン・レベルで使用する場合は、ALLOCMAP文をコーディングして、空の割当て仕様を入力します。次に例を示します。

DEFINE myaggmap AGGMAP
ALLOCMAP 'END'

2. 実行する割当てを指定するaggmapオブジェクトに仕様を追加します。詳細は、ALLOCMAPを参照してください。

3. aggmapオブジェクトをアナリティック・ワークスペースの中で永続化する場合は、UPDATE文およびCOMMITを順に実行して、aggmapオブジェクトを保存します。

4. (オプション)DBMS_CUBE_LOG.ENABLEプロシージャを使用して、割当て操作をログに書き込みます。

5. (オプション)ALLOCERRLOGFORMATおよびALLOCERRLOGHEADERオプションを非デフォルト値に設定し、割当てのエラー・ログを再設計します。

6. (オプション)1つ以上の変数に$ALLOCMAPプロパティを設定して、aggmapがその変数のデフォルトの割当て仕様であることを指定します。

7. (推奨されるオプション)変数をターゲット・セル(データを割り当てるセル)に制限します。

8. ALLOCATE文を発行して、データを割り当てます。

データ割当て時のNA値の処理

値をターゲット変数に割り当てる際に既存のデータを上書きする場合や、割当て前にNA基礎を持つターゲット・セルに、割り当てられた値を書き込む場合があります。たとえば、製品ディメンションに製品を作成する場合、budget変数の新しい製品には基礎が存在しません。この場合でも、新しい製品を含む製品種目全体に広告費を割り当てることができます。

NA値は、次のようにRELATION文で計算式および階層演算子を使用して処理できます。

- 計算式を使用したNAデータの処理: NA値の処理には、必要なターゲット・セルのみを示している基礎を構成する方法をお薦めします。計算式から基礎を取得することにより、基礎値の選択内容を絞り込むことができます。次の文では、新しい製品の値を既存製品の値の2倍と等しくなるようにする計算式を定義しています。このような計算式を、新しい製品に広告費を割り当てる基礎として使用できます。

DEFINE formula_basis FORMULA DECIMAL <product>
EQ IF product EQ 'NEWPRODUCT' -
THEN 2 * product.budget(product 'EXISTINGPRODUCT') -
ELSE product.budget

- 階層演算子を使用したNAデータの処理: 現在NA値を持つターゲット・セルにデータを割り当てるには、割当て仕様でRELATION文に階層演算子を使用します。階層演算子は、割当ての基礎として、既存のデータではなくディメンションの階層を使用します。階層演算子を使用する際の注意点として、詳細レベルのデータが稠密に移入される可能性があるため、アナリティック・ワークスペースが非常に大きくなり、データの集計に多くの時間が必要になる可能性があります。
この例の続きでは、新しい製品に広告費を割り当てるために、階層の最後の演算子HLASTを使用して、製品ディメンション階層の新しい(おそらく最新の)製品にコストを割り当てるように指定します。

4 OLAP DMLプロパティ

この章では、次の項目について説明します。

- OLAP DMLプロパティの概要

- システム・プロパティ: アルファベット順

- カテゴリ別のシステム・プロパティ

- 各OLAP DMLシステム・プロパティにつき1つの項目(アルファベット順に$AGGMAPから説明)

その他のOLAP DMLリファレンス項目については、第5章「OLAP DMLオプション」、第7章「OLAP DMLファンクション: AからK」、第7章「OLAP DMLファンクション: AからK」、第9章「OLAP DMLコマンド: AからG」および第10章「OLAP DMLコマンド: HからZ」を参照してください。

OLAP DMLプロパティの概要

プロパティは、アナリティック・ワークスペース・オブジェクトの定義に関連付けられた名前付きの値です。OLAP DMLのPROPERTYコマンドを使用すると、プロパティの名前付け、作成およびオブジェクトへの割当てができます。

$(ドル記号)で始まるプロパティは、Oracle OLAPによりシステム・プロパティとして認識されます。システム・プロパティは、作成はできませんが、オブジェクトへの割当ては可能な場合があります。具体的には、OLAP DMLと相互に関連するシステム・プロパティは割り当てることができます。

システム・プロパティ: アルファベット順

$AGGMAP
$AGGREGATE_FORCECALC
$AGGREGATE_FORCEORDER
$AGGREGATE_FROM
$AGGREGATE_FROMVAR
$ALLOCMAP
$COUNTVAR
$DEFAULT_LANGUAGE
$GID_DEPTH
$GID_LIST
$GID_TYPE
$LOOP_AGGMAP
$LOOP_DENSE
$LOOP_TYPE
$LOOP_VAR
$NATRIGGER
$STORETRIGGERVAL
$VARCACHE

カテゴリ別のシステム・プロパティ

OLAP DMLには、様々なシステム・プロパティが用意されています。これらのシステム・プロパティを使用すると、次のような各処理の実行方法を指定するための値を設定または取得できます。

集計プロパティ

割当てプロパティ

グルーピングIDプロパティ

計算式プロパティ

言語プロパティ

NA値プロパティ

集計プロパティ

$AGGMAP
$AGGREGATE_FORCECALC
$AGGREGATE_FORCEORDER
$AGGREGATE_FROM
$AGGREGATE_FROMVAR
$COUNTVAR
$VARCACHE
割当てプロパティ

$ALLOCMAP
グルーピングIDプロパティ

$GID_DEPTH
$GID_LIST
$GID_TYPE
計算式プロパティ

$LOOP_AGGMAP
$LOOP_DENSE
$LOOP_TYPE
$LOOP_VAR
言語プロパティ

$DEFAULT_LANGUAGE
NA値プロパティ

$NATRIGGER
$STORETRIGGERVAL
$VARCACHE

$AGGMAP

$AGGMAPプロパティは、ディメンション化された変数にあって変数のセッション・キャッシュ(存在する場合)にはないNA値の代替値として、指定のaggmapを使用して事前計算されていないデータを自動集計するよう指定するプロパティです。$AGGMAPプロパティを変数で使用すると、その変数に含まれる事前計算されていないデータを集計するためにAGGREGATEファンクションを明示的に使用する必要がなくなります。

変数が、USING句を含まないAGGREGATEコマンドのターゲットになる場合、Oracle OLAPでは、その変数の$AGGMAPプロパティで指定されたaggmapが使用されます。

構文

次のPROPERTY文を使用して、直近に定義または検討されたオブジェクト(DEFINEコマンドおよびCONSIDERコマンドを参照)に対し、$AGGMAPプロパティの追加または削除を行います。

- プロパティを追加する場合は、次の文を発行します。
PROPERTY '$AGGMAP' agggmap-name

- プロパティを削除する場合は、次の文を発行します。
PROPERTY DELETE '$AGGMAP'

パラメータ

aggmap-name

以前に定義されたaggmapオブジェクトの名前であるTEXT式。

例

例4-1 $AGGMAPを使用したデータの動的な集計

geogという階層ディメンションとyearという単純なディメンションがあり、これらによってディメンション化されているsalesという変数があるとします。この変数は詳細レベルのデータのみを保持しています。

2005年のConnecticutのsalesセルに対して明示的に値8000を指定するとします。これを行うには、次の代入文を発行すると、salesのレポートに値が表示されます。

sales (geog 'Connecticut' year '2005') = 8000
REPORT sales;

-----------SALES-----------
-----------YEAR------------
GEOG            2004   2005   2006   2007
-------------- ------ ------ ------ ------
Toronto         1,000  1,333  1,954  1,260
Norfolk         1,131  1,867  1,843  1,767
Montreal        1,571  1,754  1,316  1,905
Quebec City     1,914  1,728  1,386  1,847
Hartford        1,870  1,943  1,085  1,335
New Haven       1,684  1,330  1,458  1,402
Springfield     1,630  1,116  1,897  1,690
Boston          1,780  1,310  1,368  1,581
Ontario            NA     NA     NA     NA
Quebec             NA     NA     NA     NA
Connecticut        NA  8,000     NA     NA
Massachusetts      NA     NA     NA     NA
Canada             NA     NA     NA     NA
USA                NA     NA     NA     NA
All Geog           NA     NA     NA     NA

今度は、salesにaggmapを定義します。このaggmap定義では、次のように、Canadaの上位レベルのデータと最上位レベル(All Geog)のデータのみをAGGREGATEコマンドで集計するように指定しています。

DEFINE MYAGGMAP AGGMAP
AGGMAP
RELATION geogParentrel PRECOMPUTE ('Quebec' 'Ontario' 'Canada' 'All Geog')
END

次の文を発行するとします。

CONSIDER sales
PROPERTY '$AGGMAP' 'Myaggmap'

$AGGMAPプロパティを使用してmyaggmapをsalesのデフォルトaggmapにした結果、salesに対する簡単なREPORT文でUSAのすべてのデータを集計できるようになります。(PRECOMPUTEとして指定していない値、および以前はNA値だった値のみが計算されている点に注意してください。明確に代入した2005年のConnecticutの値8,000は再計算されていません。)

REPORT sales

-----------SALES-----------
-----------YEAR------------
GEOG            2004   2005   2006   2007
-------------- ------ ------ ------ ------
Toronto         1,000  1,333  1,954  1,260
Norfolk         1,131  1,867  1,843  1,767
Montreal        1,571  1,754  1,316  1,905
Quebec City     1,914  1,728  1,386  1,847
Hartford        1,870  1,943  1,085  1,335
New Haven       1,684  1,330  1,458  1,402
Springfield     1,630  1,116  1,897  1,690
Boston          1,780  1,310  1,368  1,581
Ontario            NA     NA     NA     NA
Quebec             NA     NA     NA     NA
Connecticut     3,554  8,000  2,543  2,737
Massachusetts   3,410  2,426  3,265  3,271
Canada             NA     NA     NA     NA
USA             6,964  5,699  5,808  6,008
All Geog           NA     NA     NA     NA

AGGREGATEコマンドを使用してsalesを集計すると、salesのすべてのPRECOMPUTEセルの値が集計されます。

REPORT sales

-----------SALES-----------
-----------YEAR------------
GEOG            2004   2005   2006   2007
-------------- ------ ------ ------ ------
Toronto         1,000  1,333  1,954  1,260
Norfolk         1,131  1,867  1,843  1,767
Montreal        1,571  1,754  1,316  1,905
Quebec City     1,914  1,728  1,386  1,847
Hartford        1,870  1,943  1,085  1,335
New Haven       1,684  1,330  1,458  1,402
Springfield     1,630  1,116  1,897  1,690
Boston          1,780  1,310  1,368  1,581
Ontario         2,131  3,200  3,797  3,027
Quebec          3,485  3,482  2,702  3,752
Connecticut     3,554  8,000  2,543  2,737
Massachusetts   3,410  2,426  3,265  3,271
Canada          5,616  6,682  6,499  6,779
USA             6,964  5,699  5,808  6,008
All Geog       12,580 12,381 12,307 12,787

例4-2 AGGREGATEコマンドに対する$AGGMAPプロパティの影響

例4-3「$AGGREGATE_FROMプロパティの使用」では、例9-13「集計仕様におけるCACHE文の使用」に示されているAGGREGATEコマンドを次の文に簡略化する方法を説明します。

AGGREGATE sales_by_revenue USING revenue_aggmap

$AGGMAPプロパティをsales_by_revenue変数に定義すると、AGGREGATEコマンドをさらに簡略化できます。$AGGMAPプロパティをsales_by_revenue変数に定義するには、次の文を発行します。

CONSIDER sales_by_revenue
PROPERTY '$AGGMAP' 'revenue_aggmap'

これで、USING句を含まない次のAGGREGATEコマンドを発行することにより、データを集計できるようになります。

AGGREGATE sales_by_revenue

$AGGREGATE_FORCECALC

$AGGREGATE_FORCECALCプロパティには、AGGREGATEファンクションのFORCECALCキーワードで指定されるのと同じ動作が指定されます。変数に$AGGREGATE_FORCECALCプロパティを追加することにより、変数の集計が行われる際、そこで使用されるAGGREGATEファンクションにFORCECALCキーワードが含まれていない場合でも、この動作を確実に実行できます。

$AGGREGATE_FORCECALCプロパティおよびFORCECALCキーワードの両方により指定される動作とは、AGGREGATEファンクションにより変数の集計が行われる際、該当するセルに値が格納されている場合でも、変数のaggmapに含まれるRELATION(集計用)文のPRECOMPUTE句に指定されていない任意の値がOracle OLAPにより再計算されるというものです。PRECOMPUTE句で指定されていない値の再計算は、ユーザーが詳細データ・セルを変更し、動的計算集計セルに反映された変更値を参照できるようにする場合に必要な動作です。

構文

次のPROPERTY文を発行して、直近に定義または検討されたオブジェクト(DEFINEコマンドおよびCONSIDERコマンドを参照)に対し、$AGGREGATE_FORCECALCプロパティの追加または削除を行います。

- プロパティを追加する場合は、次の文を発行します。
PROPERTY '$AGGREGATE_FORCECALC'

- プロパティを削除する場合は、次の文を発行します。
PROPERTY DELETE '$AGGREGATE_FORCECALC'

$AGGREGATE_FORCEORDER

$AGGREGATE_FORCEORDERプロパティには、AGGREGATEコマンドまたはAGGREGATEファンクションのFORCEORDERキーワードで指定されるのと同じ動作が指定されます。変数に$AGGREGATE_FORCEORDERプロパティを追加することにより、変数の集計が行われる際、そこで使用されるAGGREGATE文にFORCEORDERキーワードが含まれていない場合でも、この動作を確実に実行できます。

$AGGREGATE_ORDERプロパティおよびFORCEORDERキーワードに指定される動作とは、集計に使用されるaggmapにRELATION(集計用)文がリストされているのと同じ順序で計算が行われるというものです。通常この動作は、集計を通して計算される一部の値が変更された場合に必要となります。この動作が指定されていない場合、変更された値は、AGGREGATEによる最適化の処理によって無視されます。(ただし、実行順序を強制すると、パフォーマンスが低下する場合があります。)

構文

次のPROPERTY文を発行して、直近に定義または検討されたオブジェクト(DEFINEコマンドおよびCONSIDERコマンドを参照)に対し、$AGGREGATE_FORCEORDERプロパティの追加または削除を行います。

- プロパティを追加する場合は、次の文を発行します。
PROPERTY '$AGGREGATE_FORCEORDER'

- プロパティを削除する場合は、次の文を発行します。
PROPERTY DELETE '$AGGREGATE_FORCEORDER'

$AGGREGATE_FROM

$AGGREGATE_FROMプロパティには、AGGREGATEコマンドまたはAGGREGATEファンクションのFROM句で指定されるのと同じ動作が指定されます。変数に$AGGREGATE_FROMプロパティを追加することにより、変数の集計が行われる際、そこで使用されるAGGREGATE文にFROM句が含まれていない場合でも、この動作を確実に実行できます。

$AGGREGATE_FROMプロパティおよびFROM句には、集計時に詳細データの取得元となるオブジェクトが指定されます。

関連項目:
「集計の詳細データの取得元を指定する方法」

構文

次のPROPERTY文を発行して、直近に定義または検討されたオブジェクト(DEFINEコマンドおよびCONSIDERコマンドを参照)に対し、$AGGREGATE_FROMプロパティの追加または削除を行います。

- プロパティを追加する場合は、次の文を発行します。
PROPERTY '$AGGREGATE_FROM' fromspec

- プロパティを削除する場合は、次の文を発行します。
PROPERTY DELETE '$AGGREGATE_FROM'

パラメータ

fromspec

集計の詳細データの取得元である任意にディメンション化された変数、計算式またはリレーション。

例

例4-3 $AGGREGATE_FROMプロパティの使用

例9-15「異なる変数への集計」では次のAGGREGATEコマンドを使用して、sales変数から計算された集計値がtotal_sales_exclud_north変数に移入されます。

AGGREGATE total_sales_exclud_north USING agg_sales_exclud_north FROM sales

次の文を発行することにより、$AGGREGATE_FROMプロパティをtotal_sales_exclud_north変数に定義できます。

CONSIDER total_sales_exclud_north
PROPERTY '$AGGREGATE_FROM' 'sales'

これで、FROM句を含まない次のAGGREGATEコマンドを発行することにより、データを集計できるようになります。

AGGREGATE total_sales_exclud_north USING agg_sales_exclud_north

$AGGREGATE_FROMVAR

$AGGREGATE_FROMVARプロパティには、AGGREGATEコマンドまたはAGGREGATEファンクションのFROMVAR句で指定されるのと同じ動作が指定されます。変数に$AGGREGATE_FROMVARプロパティを追加することにより、変数の集計が行われる際、そこで使用されるAGGREGATE文にFROMVAR句が含まれていない場合でも、この動作を確実に実行できます。

$AGGREGATE_FROMVARプロパティおよびFROMVAR句には、集計時に詳細データの取得元となる複数のオブジェクトが指定されます。

参照:
「集計の詳細データの取得元を指定する方法」

構文

次のPROPERTY文を発行して、直近に定義または検討されたオブジェクト(DEFINEコマンドおよびCONSIDERコマンドを参照)に対し、$AGGREGATE_FROMVARプロパティの追加または削除を行います。

- プロパティを追加する場合は、次の文を発行します。
PROPERTY '$AGGREGATE_FROMVAR' textvar ACROSS dimname

- プロパティを削除する場合は、次の文を発行します。
PROPERTY DELETE '$AGGREGATE_FROMVAR'

パラメータ

textvar

キャップストーン集計時に詳細データを取得する対象になるオブジェクト名を指定する、任意のディメンション化された変数または計算式を指定するTEXT式。値を計算するときにノードが詳細データを必要としない場合は、NAを指定します。

ACROSS dimname

textvarにより指定されるオブジェクトにあるセルを検出するため、集計がループ処理するディメンションまたは名前付きコンポジットを指定します。textvarにより指定されるオブジェクトは計算式になるため、ループするディメンションを使用してスパース性を排除することにより、大きなパフォーマンス効果を実現できます。

例

例4-4 $AGGREGATE_FROMVARプロパティを使用したキャップストーン集計

例9-32「キャップストーン集計」では、次のAGGREGATEコマンドを使用して、最終キャップストーン集計が実行されています。

AGGREGATE sales_capstone76 USING capstone_aggmap FROMVAR capstone_source

次に示す文のように、sales-capstone76変数上に適切なFROMVARプロパティを作成する場合はFROMVAR句を省略できます。

CONSIDER sales_capstone76
PROPERTY '$AGGREGATE_FROMVAR'  'capstone_source'
AGGREGATE sales_capstone76 USING capstone_aggmap

$ALLOCMAP

$ALLOCMAPプロパティは、変数割当て用のデフォルトaggmapを指定するプロパティです。変数が、USING句を含まないALLOCATE文のターゲット変数になる場合、Oracle OLAPでは、このプロパティで指定されたaggmapが使用されます。

構文

次のPROPERTY文を使用して、直近に定義または検討されたオブジェクト(DEFINEコマンドおよびCONSIDERコマンドを参照)に対し、$ALLOCMAPプロパティの追加または削除を行います。

- プロパティを追加する場合は、次の文を発行します。
PROPERTY '$ALLOCMAP' aggmap-name

- プロパティを削除する場合は、次の文を発行します。
PROPERTY DELETE '$AALLOCMAP'

パラメータ

aggmap-name

以前に定義されたALLOCMAP型のaggmapオブジェクトの名前を指定するTEXT式。

例

例4-5 $ALLOCMAPを使用したデフォルト割当て仕様の指定

例9-35「ロックを伴う再帰的均等割当て」では、次の文を使用して、projbudgmap割当て仕様によりprojbudget変数にデータを割り当てています。

ALLOCATE projbudget USING projbudgmap

次の文を発行することにより、projbudgmapをprojbudget変数のデフォルト割当て仕様に指定できます。

CONSIDER projbudget
PROPERTY '$ALLOCMAP' "projbugmap'

これで、次の文を発行することにより、projbudgmap割当て仕様を使用してprojbudget変数にデータを割り当てることができます。

ALLOCATE projbudget

$COUNTVAR

$COUNTVARプロパティには、AGGREGATEコマンドまたはAGGREGATEファンクションのCOUNTVAR句で指定されるのと同じ動作が指定されます。変数に$COUNTVARプロパティを追加することにより、変数の集計が行われる際、そこで使用されるAGGREGATE文にCOUNTVAR句が含まれていない場合でも、この動作を確実に実行できます。

$COUNTVARプロパティおよびCOUNTVAR句に指定される動作とは、AVERAGE、HAVERAGE、HWAVERAGEまたはWAVERAGE演算子を持つRELATION(集計用)文について計算された集計値に加えられたリーフ・ノード数の非NAカウント数を格納する際、定義済の変数(Countvar変数とも呼ばれる)を使用するというものです。

注意:
平均集計値の格納には通常、ユーザー定義のCountvar変数ではなく、Oracle OLAPで生成されたAggcount変数が使用されます。圧縮コンポジットに対する平均演算子を持つRELATION(集計用)文が集計仕様に含まれる場合、Countvar変数は使用できません。詳細は、「Aggcount変数」を参照してください。

構文

次のPROPERTY文を使用して、直近に定義または検討されたオブジェクト(DEFINEコマンドおよびCONSIDERコマンドを参照)に対し、$COUNTVARプロパティの追加または削除を行います。

- プロパティを追加する場合は、次の文を発行します。
PROPERTY '$COUNTVAR' countvar

- プロパティを削除する場合は、次の文を発行します。
PROPERTY DELETE '$COUNTVAR'

パラメータ

countvar

以前に定義されたCountvar変数の名前を指定するTEXT式。Countvar変数は、$COUNTVARプロパティを追加した変数と同一のディメンションが同じ順序で含まれているINTEGER変数である必要があります。

例

例4-6 $COUNTVARの使用

v1という名前の変数について、次の文を使用するとAGGREGATEファンクションによるmyaggmap aggmapオブジェクトの実行結果の集計値に加えられたリーフ・ノードの数がOracle OLAPによりカウントされます。

CONSIDER v1
PROPERTY '$COUNTVAR' 'mycountvar'

$DEFAULT_LANGUAGE

$DEFAULT_LANGUAGEプロパティは、ディメンションがその定義先のアナリティック・ワークスペースの言語ディメンションであることを示し、その言語ディメンションのデフォルトの言語を指定するプロパティです。

注意:
各アナリティック・ワークスペースには言語ディメンションが1つしか存在せず、$DEFAULT_LANGUAGEプロパティを指定できるのはその言語ディメンションのみです。

関連項目:
LOCK_LANGUAGE_DIMS、SESSION_NLS_LANGUAGEおよびSTATIC_SESSION_LANGUAGEオプション

構文

言語ディメンションに対して$DEFAULT_LANGUAGEプロパティの追加または削除を行う場合は、そのディメンションを、直近に定義または検討されたオブジェクト(DEFINEおよびCONSIDERコマンドを参照)にする必要があります。$DEFAULT_LANGUAGEプロパティは、次のPROPERTY文を使用して追加します。

- プロパティを追加する場合は、次の文を発行します。
PROPERTY '$DEFAULT_LANGUAGE' language

- プロパティを削除する場合は、次の文を発行します。
PROPERTY DELETE '$DEFAULT_LANGUAGE'

パラメータ

language

言語ディメンションに含まれる値または空の文字列を表すTEXT式。

使用上の注意

言語ディメンションに関連する処理

言語ディメンションは、$DEFAULT_LANGUAGEプロパティが定義されているディメンションです。各アナリティック・ワークスペースには言語ディメンションが1つしか存在しません。言語ディメンションに関連する処理は次のとおりです。

- 言語ディメンションの作成

- 言語ディメンションによりディメンション化された複数言語変数の定義

- 言語ディメンション・ステータスの処理

言語ディメンションの作成 言語ディメンションは次の手順に従って作成します。

1. DEFINE DIMENSIONを使用してTEXTディメンションを定義します。

2. サポートする言語名を言語ディメンションに移入します。言語名には、NLS_LANGUAGEに対して有効な値を使用する必要があります。

3. $DEFAULT_LANGUAGEプロパティをディメンションに追加します。これにより、このディメンションは、Oracle OLAPにおいてアナリティック・ワークスペースの言語ディメンションとして認識されます。

言語ディメンションによりディメンション化された複数言語変数の定義 複数言語変数を作成するには、言語ディメンションを変数のディメンションに加えます(例4-8「言語ディメンションのアタッチ」を参照)。

言語ディメンション・ステータスの処理 言語ディメンションを持つアナリティック・ワークスペースがアタッチされると、Oracle OLAPでは次のように、言語ディメンションのステータスが初期化されます。

1. 言語ディメンションにSESSION_NLS_LANGUAGEオプションの値が含まれている場合は、言語ディメンションがその値に制限されます。

2. SESSION_NLS_LANGUAGEオプションに設定されている値が言語ディメンションに含まれていない場合、$DEFAULT_LANGUAGEプロパティに言語ディメンションの値が設定されていれば、言語ディメンションは、そのディメンションの$DEFAULT_LANGUAGEプロパティに指定されている言語に制限されます。

3. SESSION_NLS_LANGUAGEオプションに設定されている値が言語ディメンションに含まれていないのに加え、言語ディメンションの$DEFAULT_LANGUAGEプロパティに値が設定されていない、もしくは存在しない値が指定されている場合、言語ディメンションは、ディメンションのデフォルトの順序における先頭の値に制限されます。

デフォルトでは、初期化後に言語ディメンション・ステータスは変更できません。ただし、LOCK_LANGUAGE_DIMSオプションの値をTRUEからFALSEに変更すれば、言語ディメンションのステータスはALLに変更され、ディメンションに対してLIMIT文を発行できるようになるため、言語ディメンション・ステータスの変更は可能になります。

言語ディメンションのエクスポート

EXPORT(EIF)を使用してアナリティック・ワークスペースをエクスポートする場合、Oracle OLAPでは、エクスポートする言語ディメンションの値が次の手順に従って決定されます。

- EXPORT文が実行される際にLOCK_LANGUAGE_DIMSオプションの値がFALSEであれば、Oracle OLAPでは、現行の言語ディメンション・ステータスに従ってエクスポートが実行されます。

- EXPORT文が実行される際にLOCK_LANGUAGE_DIMSオプションの値がTRUEの場合は、Oracle OLAPにより次の処理が行われます。

1. EXPORT文が実行される前に、LOCK_LANGUAGE_DIMSオプションの値がFALSEに変更(したがってステータスはALLに設定)されます。

2. EXPORT文が実行されます。言語ディメンションのすべての値がエクスポートされます。

3. LOCK_LANGUAGE_DIMSオプションの値がTRUEに変更され、SESSION_NLS_LANGUAGEオプションの値に基づいて言語ディメンション・ステータスがリセットされます。

例

例4-7 言語ディメンションの作成

ここでは例として、mylangsという言語ディメンションを作成します。この言語ディメンションはデフォルト言語が英語で、フランス語と英語をサポートします。

NLS_LANGUAGE = 'AMERICAN'
DEFINE mylangs DIMENSION TEXT
MAINTAIN mylangs ADD 'FRENCH' 'AMERICAN'
CONSIDER mylangs
PROPERTY '$DEFAULT_LANGUAGE' 'AMERICAN'

SHOW OBJ(PROPERTY '$DEFAULT_LANGUAGE' 'mylangs')
AMERICAN

REPORT mylangs
MYLANGS
--------------
FRENCH
AMERICAN

例4-8 言語ディメンションのアタッチ

ここでは、myawというアナリティック・ワークスペースで、言語ディメンションmylangsを作成(例4-7「言語ディメンションの作成」を参照)したとします。また、次のような定義と値を持つproductsディメンションおよびprod-desc変数を作成したとします。

DEFINE MYLANGS DIMENSION TEXT
SHOW OBJ(PROPERTY '$DEFAULT_LANGUAGE' 'mylangs')
AMERICAN

DEFINE PRODUCTS DIMENSION TEXT
DEFINE PROD_DESC VARIABLE TEXT <PRODUCTS MYLANGS>

MYLANGS
--------------
FRENCH
AMERICAN

PRODUCTS
--------------
PROD01
PROD02

------PROD_DESC------
------PRODUCTS-------
MYLANGS          PROD01     PROD02
-------------- ---------- ----------
FRENCH         Pantalons  JupesAMERICAN       Trousers   Skirts

アナリティック・ワークスペースをアタッチするとします。アナリティック・ワークスペースのオプションを表示し、mylangsおよびprod_descのレポートを要求すると、mylangsディメンションが、SESSION_NLS_LANGUAGEオプションの値であるAMERICAN(英語)に制限されていることがわかります。

SHOW NLS_LANGUAGE
AMERICAN
AW ATTACH myaw RW
" Get the default language in our language dimension
SHOW OBJ(PROPERTY '$DEFAULT_LANGUAGE' 'mylangs')
AMERICAN
SHOW SESSION_NLS_LANGUAGE
AMERICAN
SHOW LOCK_LANGUAGE_DIMS
yes
SHOW STATIC_SESSION_LANGUAGE
no

REPORT mylangs

MYLANGS
--------------
AMERICAN

REPORT prod_desc
------PROD_DESC------
------PRODUCTS-------
MYLANGS          PROD01     PROD02
-------------- ---------- ----------
AMERICAN       Trousers   Skirts

例4-9 NLS_LANGUAGEの変更

例4-8「言語ディメンションのアタッチ」で説明したアナリティック・ワークスペースmyawをアタッチしたとします。NLS_LANGUAGEの値をFRENCH(フランス語)に変更します。STATIC_SESSION_LANGUAGEの値がNOに設定されているため、NLS_LANGUAGEの値の変更によって、SESSION_NLS_LANGUAGEオプションの値がFRENCHに変更されます。mylangsおよびprod_descのレポートに表示されているとおり、SESSION_NLS_LANGUAGEオプションの値がFRENCHになれば、mylangsディメンションはフランス語に制限されます。

SET NLS_LANGUAGE= 'FRENCH'
SHOW OBJ(PROPERTY '$DEFAULT_LANGUAGE' 'mylangs')
AMERICAN
SHOW NLS_LANGUAGE
FRENCH
SHOW SESSION_NLS_LANGUAGE
FRENCH
SHOW LOCK_LANGUAGE_DIMS
oui
SHOW STATIC_SESSION_LANGUAGE
non

REPORT mylangs
MYLANGS
--------------
FRENCH

REPORT prod_desc
------PROD_DESC------
------PRODUCTS-------
MYLANGS          PROD01     PROD02
-------------- ---------- ----------
FRENCH         Pantalons  Jupes

例4-10 NLS_LANGUAGEを言語ディメンションに指定されていない値に設定する

アナリティック・ワークスペースmyaw(例4-9「NLS_LANGUAGEの変更」を参照)において、NLS_LANGUAGEの値をまずAMERICANに設定し、続いてSPANISH(スペイン語)に設定します。次のコードに示されているとおり、言語ディメンションmylangsにはSPANISHという値は指定されていないため、mylangsディメンションは$DEFAULT_LANGUAGEプロパティの値(ここではAMERICAN)に制限されます。

"Change the value of NLS_LANGUAGE to AMERICAN
SET NLS_LANGUAGE= 'AMERICAN'
"Change the value of NLS_LANGUAGE to SPANISH
SET NLS_LANGUAGE= 'SPANISH'

SHOW OBJ(PROPERTY '$DEFAULT_LANGUAGE' 'mylangs')
AMERICAN

SHOW NLS_LANGUAGE
SPANISH

SHOW SESSION_NLS_LANGUAGE
SPANISH

SHOW LOCK_LANGUAGE_DIMS
sí

SHOW STATIC_SESSION_LANGUAGE
no

REPORT mylangs
MYLANGS
--------------
AMERICAN

REPORT prod_desc
------PROD_DESC------
------PRODUCTS-------
MYLANGS          PROD01     PROD02
-------------- ---------- ----------
AMERICAN       Trousers   Skirts

次のコードを使用し、デフォルトの言語を指定しないで言語ディメンションmylangsを定義したとします。

DEFINE mylangs DIMENSION TEXT
MAINTAIN mylangs ADD 'FRENCH' 'AMERICAN'
CONSIDER mylangs
PROPERTY '$DEFAULT_LANGUAGE' ''

この場合、NLS_LANGUAGEの値をSPANISHに設定すると、言語ディメンションmylangsには$DEFAULT_LANGUAGEプロパティに指定された値が含まれていないため、mylangsディメンションは、その先頭の値(ここではFRENCH)に制限されます。

NLS_LANGUAGE = 'SPANISH'
SHOW OBJ(PROPERTY '$DEFAULT_LANGUAGE' 'mylangs')

SHOW NLS_LANGUAGE
SPANISH
SHOW SESSION_NLS_LANGUAGE
SPANISH
SHOW LOCK_LANGUAGE_DIMS
sí
SHOW STATIC_SESSION_LANGUAGE
no

REPORT mylangs
MYLANGS
--------------
FRENCH

REPORT prod_desc
------PROD_DESC------
------PRODUCTS-------
MYLANGS          PROD01     PROD02
-------------- ---------- ----------
FRENCH         Pantalons  Jupes

$GID_DEPTH

$GID_DEPTHプロパティは、GROUPINGIDコマンドでグルーピングIDリレーションが移入されると自動的に作成および設定されます。このプロパティには、追加先グルーピングIDリレーション内のグルーピングIDのレベル数が指定されます。

構文

$GID_DEPTHプロパティは明示的には定義できません。グルーピングIDリレーションの$GID_DEPTHプロパティは、GROUPIONGIDコマンドの実行でそのリレーションが作成されたときに自動的に作成されます。

$GID_DEPTH = intlevels

パラメータ

intlevels

グルーピングIDのレベル数を指定するINTEGER値。

例

例9-145「リレーションにグルーピングIDを移入するGROUPINGIDコマンドの使用方法」を参照してください。

$GID_LIST

$GID_LISTプロパティには、リレーション内にグルーピングIDを作成する際に使用するレベルの名前が格納されます。このリレーションは、GROUPINGIDコマンドがROLLUPまたはGROUPSETキーワードを伴って実行されたときに作成されます。

構文

$GID_LISTプロパティは明示的には定義できません。グルーピングIDリレーションの$GID_LISTプロパティは、ROLLUPまたはGROUPSETキーワードを伴うGROUPIONGIDコマンドの実行によってそのリレーションが作成されたときに、自動的に作成されます。

$GID_LIST = levels

パラメータ

levels

グルーピングIDの作成対象となるディメンション階層のハイフン(-)で区切られたレベルを表すTEXT式。

$GID_TYPE

$GID_TYPEプロパティは、GROUPINGIDコマンドをROLLUPまたはGROUPSETキーワードとともに実行してグルーピングIDリレーションが移入されたときに、自動的に作成および設定されます。このプロパティには、グルーピングIDのグループ化のタイプが指定されます。

構文

$GID_TYPEプロパティは明示的には定義できません。グルーピングIDリレーションの$GID_TYPEプロパティは、ROLLUPまたはGROUPSETキーワードを伴うGROUPIONGIDコマンドの実行によってそのリレーションが作成されたときに、自動的に作成されます。

$GID_TYPE = ROLLUP | GROUPSET

パラメータ

ROLLUP

グルーピングIDがロールアップ・タイプであることを指定します。

このタイプのグループ化の詳細は、『Oracle Database SQL言語リファレンス』でSQL SELECT文のROLLUP CUBE句におけるROLLUPの説明を参照してください。

GROUPSET

グルーピングIDがグループ化設定タイプであることを指定します。

このタイプのグループ化の詳細は、『Oracle Database SQL言語リファレンス』でSQL SELECT文のGROUPING SETS句におけるグルーピング・セットの説明を参照してください。

$LOOP_AGGMAP

$LOOP_AGGMAPプロパティは、SQL OLAP_TABLEファンクションがLOOP OPTIMIZED句を伴って実行されたときに代入された、その計算式のループ処理方法の決定に使用されます。Oracle OLAPが計算式を含むUNION副次句を生成するときに使用するaggmapオブジェクトの名前を、このプロパティに指定します。変数に関連付けられているその他のすべてのaggmap(変数に$AGGMAPプロパティが指定されたaggmapなど)は、このプロパティに指定する値で上書きされ、計算式の基礎となる変数が別のaggmapと関連付けられている場合に、Oracle OLAPが使用するaggmapを明確にするためにこの値を使用できます。

参照:
OLAP_TABLEでのループ処理の詳細は、LOOP句に関する説明を参照してください。

構文

次のPROPERTY文を使用して、直近に定義または検討された計算式(DEFINEコマンドおよびCONSIDERコマンドを参照)に対し、$LOOP_AGGMAPプロパティの追加または削除を行います。

- プロパティを追加する場合は、次の文を発行します。
PROPERTY '$LOOP_AGGMAP' agggmap-name

- プロパティを削除する場合は、次の文を発行します。
PROPERTY DELETE '$LOOP_AGGMAP'

パラメータ

aggmap_name

aggmapオブジェクトの名前。

$LOOP_DENSE

$LOOP_DENSEプロパティは、OLAP_TABLE SQLファンクションがLOOP OPTIMIZED句を伴って実行されたときに代入された、その計算式のループ処理方法の決定に使用されます。このプロパティは、計算式に対して稠密なループ処理を行うことを指定します(つまり、値のないメンバー・セルも含め、すべての計算式のタプルに対してループ処理が行われます)。

関連項目:

- OLAP_TABLEでのループ処理の詳細は、「LOOP句」を参照してください。

- SET_PROPERTY

構文

次のPROPERTY文を使用して、直近に定義または検討された計算式(DEFINEコマンドおよびCONSIDERコマンドを参照)に対し、$LOOP_DENSEプロパティの追加または削除を行います。

- プロパティを追加する場合は、次の文を発行します。
PROPERTY '$LOOP_DENSE' dimension_list

- プロパティを削除する場合は、次の文を発行します。
PROPERTY DELETE '$LOOP_DENSE'

パラメータ

dimension_list

計算式の1つ以上のディメンション名(カンマ区切り)。

$LOOP_TYPE

$LOOP_TYPEプロパティは、複数の変数を含む計算式が、LOOP OPTIMIZED句を持つOLAP_TABLE SQLファンクションで使用されたときに、その計算式のループ処理方法を指定します。ループ処理のタイプは、計算式にNVLなどのNA対応ファンクションが含まれるとき、またはNULL TRACKINGが無効な場合に返される数値行およびパフォーマンスに影響を与える可能性があります。NULLトラッキングについては、「NA2ビットとNULLトラッキング」を参照してください。

構文

次のPROPERTY文を使用して、直近に定義または検討された計算式(DEFINEコマンドおよびCONSIDERコマンドを参照)に対し、$LOOP_TYPEプロパティの追加または削除を行います。

- プロパティを追加する場合は、次の文を発行します。
PROPERTY '$LOOP_TYPE' {'DENSE' | 'INNER' | 'OUTER'}

- プロパティを削除する場合は、次の文を発行します。
PROPERTY DELETE '$LOOP_TYPE'

パラメータ

DENSE

タプルの可能なすべての組合せに対する変数値を返します。コンポジットに対してNULLトラッキングが指定されていない場合は、存在しないデータおよび意図的にNULLにした値に対してNA値を受け取ります。

DENSEは、SQL SELECT文のcross結合に似ています。結果的に、変数のすべてのベース・ディメンションのデカルト積になります。

INNER

(デフォルト) タプルがすべての変数にデータを持っている場合にのみ、変数値を返します。NVL値を含みません。

INNERは、SQLの内部結合に似ています。

OUTER

タプルが変数のいずれかにデータを持っている場合に、変数値を返します。NVL値を含みます。

OUTERは、SQLの外部結合に似ています。

$LOOP_VAR

$LOOP_VARプロパティは、OLAP_TABLE SQLファンクションがLOOP OPTIMIZED句を伴って実行されたときに、代入先の計算式を当該プロパティに指定された変数またはQDRと同様にループ処理することを指定するプロパティです。

関連項目:

- OLAP_TABLEでのループ処理の詳細は、「LOOP句」を参照してください。

- SET_PROPERTY

構文

次のPROPERTY文を使用して、直近に定義または検討された計算式(DEFINEコマンドおよびCONSIDERコマンドを参照)に対し、$LOOP_VARプロパティの追加または削除を行います。

- プロパティを追加する場合は、次の文を発行します。
PROPERTY '$LOOP_VAR' qdr | variable

- プロパティを削除する場合は、次の文を発行します。
PROPERTY DELETE '$LOOP_VAR'

パラメータ

qdr

計算式のディメンションに対するQDR。

variable

計算式と同じディメンションの変数。

$NATRIGGER

$NATRIGGERプロパティには、ディメンション化された変数にあって変数のセッション・キャッシュ(存在する場合)にはないNA値に対するOracle OLAP用の代替値が指定されます。値を計算するため、Oracle OLAPは「Oracle OLAPがNA値を持つ変数のデータを計算する方法」で説明されている手順を実行します。計算の結果は、「$NATRIGGERの結果を格納またはキャッシュするかどうかのOracle OLAPによる決定方法」で説明されているように、変数に格納されるか、変数のセッション・キャッシュにキャッシュされるかのどちらかです。

注意:
変数の集計を実行する場合は、$NATRIGGERプロパティではなく、$AGGMAPプロパティを使用します。

構文

次のPROPERTY文を使用して、直近に定義または検討されたオブジェクト(DEFINEコマンドおよびCONSIDERコマンドを参照)に対し、$NATRIGGERプロパティの追加または削除を行います。

- プロパティを追加する場合は、次の文を発行します。
PROPERTY '$NATRIGGER' value

- プロパティを削除する場合は、次の文を発行します。
PROPERTY DELETE '$NATRIGGER'

パラメータ

value

プロパティの値であるTEXT式。テキストは、計算式の定義に有効なものであればどのような式でもかまいません。

使用上の注意

Oracle OLAPがNA値を持つ変数のデータを計算する方法

ディメンション化された変数のデータを計算する際、Oracle OLAPは変数の各セルについて次の手順を使用します。

1. 変数にセッション・キャッシュがあるか。

- あり。手順2に進みます。

- ない場合は、手順3に進みます。

2. 変数のセッション・キャッシュ内のセルにNA値があるか。

- あり。手順3に進みます。

- ない場合は、手順7に進みます。

3. 変数の格納内のセルにNA値があるか。

- あり。手順4に進みます。

- ない場合は、手順7に進みます。

4. 変数に$AGGMAPプロパティが設定されているか。

- あり。$AGGMAPプロパティに指定されているaggmapを使用して変数を集計してから、手順5に進みます。

- 設定されていない場合は、手順6に進みます。

5. 変数を集計した後のセルの値は何か。

- NAの場合は、手順6に進みます。

- 非NAの場合は、手順7に進みます。

6. 変数に$NATRIGGERプロパティが設定されているか。

- あり。$NATRIGGERプロパティに指定されている式を実行してから、手順7に進みます。

- ない場合は、手順7に進みます。

7. データを計算します。

8. 必要に応じて、NAFILLファンクション、またはNASKIP、NASKIP2、NASPELLのいずれかのオプションを適用します。

再帰的または相互に再帰的に設定するNAトリガー

トリガー・オブジェクトを値式に含めることにより、NAトリガーを再帰的または相互に再帰的にできます。計算式、プログラムまたは他の$NATRIGGER式の実行中に再びトリガー式が実行されるようにするには、RECURSIVEオプションをYESに設定する必要があります。同時に実行可能なトリガーの数を制限するには、TRIGGERMAXDEPTHオプションを参照してください。

コンポジットを持つ$NATRIGGERの使用

コンポジットによりディメンション化される変数に$NATRIGGER式を設定できますが、Oracle OLAPはコンポジット内に存在するディメンション値の組合せに対してのみ$NATRIGGER式を評価します。

EXPORTおよびAGGREGATEにより無視される$NATRIGGER

AGGREGATEコマンドおよびAGGREGATEファンクションは、集計処理中、変数の$NATRIGGERプロパティ設定を無視します。格納された値のみが文によりフェッチされ、$NATRIGGER式は実行されません。$NATRIGGERプロパティは、他の操作に対しては引き続き有効です。

Oracle OLAPでは、EXPORT(EIF)文が実行される際、エクスポートの対象が変数のみの場合は、変数の$NATRIGGERプロパティ式は評価されません。ただし、変数が、エクスポート操作時にOracle OLAPにより計算される式の一部である場合、Oracle OLAPは$NATRIGGERプロパティ式を評価します。

例

例4-11 $NATRIGGERプロパティの変数への追加

次の文は、3つの値を持つディメンションを定義し、そのディメンションによりディメンション化される変数を定義します。次に、$NATRIGGERプロパティを変数に追加して、値を変数の1つのセルに含め、他のセルを空のままにしてそれらの値をNAにします。最後に、変数のセルの値をレポートします。

DEFINE d1 INTEGER DIMENSION
MAINTAIN d1 ADD 3
DEFINE v1 DECIMAL <d1>
PROPERTY '$NATRIGGER' '500.0'
v1(d1 1) = 333.3
REPORT v1

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

D1            V1
--------- ----------
1     333.3
2     500.0
3     500.0

$STORETRIGGERVAL

$STORETRIGGERVALプロパティは、$NATRIGGER式が実行される際、Oracle OLAPが変数のNA値を式の結果で置き換えるかどうかを指定するためのプロパティです。

注意:
$STORETRIGGERVALプロパティの持つ機能は$VARCACHEプロパティに含まれているため、アプリケーションでは通常、$STORETRIGGERVALプロパティではなく$VARCACHEプロパティが使用されます。

関連項目:
「$NATRIGGERの結果を格納またはキャッシュするかどうかのOracle OLAPによる決定方法」

構文

次のPROPERTY文を使用して、直近に定義または検討されたオブジェクト(DEFINEコマンドおよびCONSIDERコマンドを参照)に対し、$STORETRIGGERVALプロパティの追加または削除を行います。

- プロパティを追加する場合は、次の文を発行します。
PROPERTY '$STORETRIGGERVAL' value

- プロパティを削除する場合は、次の文を発行します。
PROPERTY DELETE '$ASTORETRIGGERVAL'

パラメータ

value

プロパティの値を含むブール式。

例

例4-12 $NATRIGGERプロパティ値の格納

次の文を実行するとOracle OLAPでは、式の評価の際に$NATRIGGER式の値がv1変数のNAセルに格納されます。

TRIGGERSTOREOK = yes
CONSIDER v1
PROPERTY '$STORETRIGGERVAL' yes

$VARCACHE

$VARCACHEプロパティは、AGGREGATEファンクションまたは$NATRIGGER式の実行結果である変数データを、Oracle OLAPが格納またはキャッシュするかどうかを指定するプロパティです。

関連項目:
AGGREGATEファンクションで計算されるNA値のキャッシュの詳細は、「集計データを格納またはキャッシュするかどうかのOracle OLAPによる決定方法」、「$NATRIGGERの結果を格納またはキャッシュするかどうかのOracle OLAPによる決定方法」、「Oracle OLAPセッション・キャッシュの概要」、「CACHE」文のNAキーワードに関する説明を参照してください。

構文

次のPROPERTY文を使用して、直近に定義または検討されたオブジェクト(DEFINEコマンドおよびCONSIDERコマンドを参照)に対し、$VARCACHEプロパティの追加または削除を行います。

- プロパティを追加する場合は、次の文を発行します。
PROPERTY '$VARCACHE' value

- プロパティを削除する場合は、次の文を発行します。
PROPERTY DELETE '$VARCACHE'

パラメータ

value

AGGREGATEファンクションまたは$NATRIGGER値の実行時に実行される計算の結果である変数データを、Oracle OLAPが配置する場所を示す次のいずれかのTEXT式。

- VARIABLEは、AGGREGATEファンクションまたは$NATRIGGERプロパティの実行結果であるデータを変数に移入するように指定します。このオプションを指定した場合、集計結果のデータは、アナリティック・ワークスペースを更新またはコミットしたとき、永続的に変数に格納されます。

- SESSIONは、AGGREGATEファンクションまたは$NATRIGGERプロパティの実行結果であるデータをセッション・キャッシュにキャッシュするように指定します(「Oracle OLAPセッション・キャッシュの概要」を参照)。このオプションを指定した場合、AGGREGATEファンクションまたは$NATRIGGERプロパティの実行結果であるデータは、更新時やコミット時には無視され、セッション後に廃棄されます。

重要:
SESSCACHEがNOに設定されている場合、SESSIONを指定してもOracle OLAPはデータをキャッシュしません。この場合、SESSIONの指定は、NONEの指定と同じことになります。

- NONEは、AGGREGATEファンクションまたは$NATRIGGER値が実行されるたびに新しい変数データを計算するように指定します。データは格納もキャッシュもされません。

- DEFAULTは、AGGREGATEファンクションによって計算されたデータの処理方法を決定する際に、Oracle OLAPが$VARCACHEプロパティを使用しないように指定します。(「集計データを格納またはキャッシュするかどうかのOracle OLAPによる決定方法」を参照してください。)

使用上の注意

$NATRIGGERの結果を格納またはキャッシュするかどうかのOracle OLAPによる決定方法

$NATRIGGER式が実行される際、式の実行結果である変数データをOracle OLAPが処理する方法は、$NATRIGGERプロパティを含む変数に$STORETRIGGERVALプロパティも含まれるかどうかに基づいて決定され、含まれない場合は$NATRIGGERプロパティの値がAGGREGATEファンクションであるかどうかに基づいて決定されます。

$NATRIGGER式が実行されると、Oracle OLAPでは次のプロセスに沿って処理方法が決定されます。

1. $NATRIGGERプロパティを含む変数に、$STORETRIGGERVALプロパティも含まれているか。含まれている場合は、Oracle OLAPは手順1aに進みます。含まれていない場合は、Oracle OLAPは手順2に進みます。

1. TRIGGERSTOREOKオプションの値は、YESか、それともNOか。YESの場合は、Oracle OLAPは手順1bに進みます。NOの場合は、Oracle OLAPは手順2に進みます。

2. $STORETRIGGERVALプロパティの値は、YESか、それともNOか。YESの場合は、Oracle OLAPは$NATRIGGER式の結果を格納し、決定のプロセスを終了します。NOの場合は、Oracle OLAPは$NATRIGGER式の結果を格納せず、決定のプロセスを終了します。

2. $NATRIGGER式はAGGREGATEファンクションか。当てはまる場合、Oracle OLAPは「集計データを格納またはキャッシュするかどうかのOracle OLAPによる決定方法」で説明されている手順に従って、$NATRIGGER式の実行結果の処理方法を決定します。当てはまらない場合、Oracle OLAPは手順3に進みます。

3. $NATRIGGERプロパティを含む変数には$VARCACHEプロパティも含まれるか。含まれている場合は、Oracle OLAPは手順4に進みます。含まれていない場合は、Oracle OLAPは手順5に進みます。

4. $VARCACHEプロパティに、DEFAULTの値が含まれるか。含まれている場合は、手順5に進みます。含まれない場合、Oracle OLAPは$VARCACHEプロパティの値(つまりSTORE、CACHEまたはNONE)を使用して、$NATRIGGER式の実行結果である変数データ値の処理方法を決定し、決定のプロセスを終了します。

5. VARCACHEオプションの現行設定を使用して、$NATRIGGER式の実行結果である変数データ値の処理方法を決定し、決定のプロセスを終了します。

集計データを格納またはキャッシュするかどうかのOracle OLAPによる決定方法

AGGREGATEコマンドを実行すると、Oracle OLAPは代入文の結果を格納する場合と同様の方法で、常に計算結果を変数に直接格納します。ただし、AGGREGATEファンクションが実行される際、Oracle OLAPは、計算結果を直接変数に格納する場合と、セッション・キャッシュにキャッシュする場合があります。(セッション・キャッシュの詳細は、「Oracle OLAPセッション・キャッシュの概要」を参照してください。)

AGGREGATEファンクションの実行結果であるデータを格納する場所を決定するため、Oracle OLAPでは次のプロセスに沿って、集計された変数データを格納またはキャッシュするかどうかが判断されます。

1. 現行のAGGREGATEファンクションにより使用されているaggmapの仕様に、CACHE文が含まれているか。含まれている場合は、Oracle OLAPは手順2に進みます。含まれていない場合、Oracle OLAPは手順3に進みます。

2. CACHE文は、CACHE DEFAULT文か。当てはまる場合、Oracle OLAPは手順3に進みます。当てはまらない場合、Oracle OLAPは集計仕様のCACHE文を使用して、計算結果である変数データの処理方法を決定し、決定のプロセスを終了します。

3. 集計される変数には$VARCACHEプロパティが含まれるか。含まれている場合は、Oracle OLAPは手順4に進みます。含まれていない場合は、Oracle OLAPは手順5に進みます。

4. $VARCACHEプロパティに、DEFAULTの値が含まれるか。含まれている場合は、Oracle OLAPは手順5に進みます。含まれていない場合、Oracle OLAPは$VARCACHEプロパティの値を使用して、AGGREGATEファンクションによって計算される変数データの処理方法を決定し、決定のプロセスを終了します。

5. VARCACHEオプションの現行設定を使用して、AGGREGATEファンクションによって計算される変数データの処理方法を決定します。決定のプロセスが終了します。

例

例4-13 $VARCACHEプロパティの設定

v1という名前の変数について、次の文を使用すると、Oracle OLAPはAGGREGATEファンクションまたは$NATRIGGER式の実行結果である変数データをキャッシュします。

CONSIDER v1
PROPERTY '$SVARCACHE' 'v1'

5 OLAP DMLオプション

この章では、次の項目について説明します。

- オプションの概要

- オプション: アルファベット順

- カテゴリ別のオプション

- 各OLAP DMLオプションにつき1つの項目(アルファベット順にALLOCERRLOGFORMATから説明)

その他のOLAP DMLリファレンス項目については、第4章「OLAP DMLプロパティ」、第7章「OLAP DMLファンクション: AからK」、第8章「OLAP DMLファンクション: LからZ」、第9章「OLAP DMLコマンド: AからG」および第10章「OLAP DMLコマンド: HからZ」を参照してください。

オプションの概要

OLAP DMLオプションは、特殊なタイプのアナリティック・ワークスペース・オブジェクトで、Oracle OLAPによってデータがどのように計算またはフォーマットされるのか、あるいはどのOracle OLAP演算がアクティブ化されるのかなど、いくつかの特性を指定します。オプションには、読取り専用オプションと、値を指定できる読取り/書込みオプションがあります。読取り/書込みオプションには、デフォルト値があります。

SET(=)コマンドを使用すると、オプションの値を事前定義された変数に取得したり、読取りオプションや書込みオプションに新しい値を指定したりできます。SHOWコマンドを使用すると、オプションの値を表示できます。

オプション: アルファベット順

A B C D E I L M N O P R S T U V W Y Z

A

ALLOCERRLOGFORMAT
ALLOCERRLOGHEADER
AWWAITTIME
B

BADLINE
BMARGIN
C

CALENDARWEEK
COLWIDTH
COMMAS
COMPILEMESSAGE
COMPILEWARN
D

DATEFORMAT
DATEORDER
DAYABBRLEN
DAYNAMES
DECIMALCHAR
DECIMALOVERFLOW
DECIMALS
DEFAULTAWSEGSIZE
DIVIDEBYZERO
DSECONDS
E

ECHOPROMPT
EIFBYTES
EIFEXTENSIONPATH
EIFNAMES
EIFSHORTNAMES
EIFTYPES
EIFUPDBYTES
EIFVERSION
ERRNAMES
ERRORNAME
ERRORTEXT
ESCAPEBASE
EXPTRACE
I

INF_STOP_ON_ERROR
L

LCOLWIDTH
LIKECASE
LIKEESCAPE
LIKENL
LIMIT.SORTREL
LIMITSTRICT
LINENUM
LINESLEFT
LOCK_LANGUAGE_DIMS
LSIZE
M

MAXFETCH
MODDAMP
MODERROR
MODGAMMA
MODINPUTORDER
MODMAXITERS
MODOVERFLOW
MODSIMULTYPE
MODTOLERANCE
MODTRACE
MONTHABBRLEN
MONTHNAMES
MULTIPATHHIER
N

NASKIP
NASKIP2
NASPELL
NLS_CALENDAR
NLS_CURRENCY
NLS_DATE_FORMAT
NLS_DATE_LANGUAGE
NLS_DUAL_CURRENCY
NLS_ISO_CURRENCY
NLS_LANG
NLS_LANGUAGE
NLS_NUMERIC_CHARACTERS
NLS_SORT
NLS_TERRITORY
NOSPELL
O

OKFORLIMIT
OKNULLSTATUS
OUTFILEUNIT
P

PAGENUM
PAGEPRG
PAGESIZE
PAGING
PARENS
PERMITERROR
PERMITREADERROR
PRGTRACE
R

RANDOM.SEED.1 and RANDOM.SEED.2
RECURSIVE
ROLE
ROOTOFNEGATIVE
S

SECONDS
SESSCACHE
SESSION_NLS_LANGUAGE
SPARSEINDEX
SQLBLOCKMAX
SQLCODE
SQLERRM
SQLMESSAGES
STATIC_SESSION_LANGUAGE
T

THIS_AW
THOUSANDSCHAR
TMARGIN
TRACEFILEUNIT
TRIGGERMAXDEPTH
TRIGGERSTOREOK
U

USERID
USETRIGGERS
V

VARCACHE
W

WEEKDAYSNEWYEAR
WRAPERRORS
Y

YESSPELL
YRABSTART
Z

ZEROROW
ZSPELL

カテゴリ別のオプション

アナリティック・ワークスペースのオプション
グローバリゼーション・サポート
複数言語サポート・オプション
集計オプション
割当てオプション
モデル・オプション
コンパイル・オプション
エラー・オプション
デバッグ・オプション
SQLの埋込みオプション
ファイルの読取りと書込みのオプション
EIFオプション
レポートのオプション
NA値オプション
日付のみのデータ型オプション
日時オプション
数値オプション
RANKファンクションの監視オプション
アナリティック・ワークスペースのオプション

AWWAITTIME
DEFAULTAWSEGSIZE
グローバリゼーション・サポート

NLS_CALENDAR
NLS_CURRENCY
NLS_DATE_FORMAT
NLS_DATE_LANGUAGE
NLS_DUAL_CURRENCY
NLS_ISO_CURRENCY
NLS_LANG
NLS_LANGUAGE
NLS_NUMERIC_CHARACTERS
NLS_SORT
NLS_TERRITORY
複数言語サポート・オプション

LOCK_LANGUAGE_DIMS
NLS_DATE_LANGUAGE
NLS_LANG
NLS_LANGUAGE
SESSION_NLS_LANGUAGE
STATIC_SESSION_LANGUAGE
集計オプション

MULTIPATHHIER
SESSCACHE
VARCACHE
割当てオプション

ALLOCERRLOGFORMAT
ALLOCERRLOGHEADER
モデル・オプション

MODDAMP
MODERROR
MODGAMMA
MODINPUTORDER
MODMAXITERS
MODOVERFLOW
MODSIMULTYPE
MODTOLERANCE
MODTRACE
コンパイル・オプション

COMPILEMESSAGE
COMPILEWARN
THIS_AW
エラー・オプション

BADLINE
ERRNAMES
ERRORNAME
ERRORTEXT
INF_STOP_ON_ERROR
MODERROR
PERMITERROR
PERMITREADERROR
SQLERRM
SQLMESSAGES
WRAPERRORS
デバッグ・オプション

EXPTRACE
MODTRACE
PRGTRACE
SQLの埋込みオプション

SQLBLOCKMAX
SQLCODE
SQLERRM
SQLMESSAGES
ファイルの読取りと書込みのオプション

ECHOPROMPT
ESCAPEBASE
INF_STOP_ON_ERROR
OUTFILEUNIT
EIFオプション

EIFBYTES
EIFEXTENSIONPATH
EIFNAMES
EIFSHORTNAMES
EIFTYPES
EIFUPDBYTES
EIFVERSION
レポートのオプション

BMARGIN
COLWIDTH
COMMAS
DECIMALCHAR
DECIMALS
LCOLWIDTH
LINENUM
LINESLEFT
LSIZE
NASPELL
NOSPELL
PAGENUM
PAGEPRG
PAGESIZE
PAGING
PARENS
THOUSANDSCHAR
TMARGIN
YESSPELL
ZEROROW
ZSPELL
NA値オプション

LIMITSTRICT
NASKIP
NASKIP2
NASPELL
RECURSIVE
TRIGGERMAXDEPTH
TRIGGERSTOREOK
日付のみのデータ型オプション

CALENDARWEEK
DATEFORMAT
DATEORDER
DAYABBRLEN
DAYNAMES
DSECONDS
MONTHABBRLEN
MONTHNAMES
WEEKDAYSNEWYEAR
YRABSTART
日時オプション

CALENDARWEEK
DSECONDS
SECONDS
数値オプション

DECIMALOVERFLOW
DIVIDEBYZERO
RANDOM.SEED.1 and RANDOM.SEED.2
ROOTOFNEGATIVE
RANKファンクションの監視オプション

RANK_CALLS
RANK_CELLS
RANK_SORTS

ALLOCERRLOGFORMAT

ALLOCERRLOGFORMATオプションは、ALLOCATEコマンドにERRORLOG引数で指定するエラー・ログの内容および書式を設定するオプションです。

構文

ALLOCERRLOGFORMAT = text

パラメータ

text

ALLOCMAPコマンドのERRORLOG文で指定するエラー・ログの内容および書式を決定する文字。書式設定文字の前にINTEGER値を指定することで、エラー・ログに含まれるオブジェクトの文字数を指定できます。書式設定文字としてエスケープ・シーケンスを指定できます。有効なエスケープ・シーケンスについては、「エスケープ・シーケンス」を参照してください。表5-1「ALLOCATEのエラー・ログの内容を指定する文字」に、エラー・ログの内容を指定する文字を示します。ALLOCERRLOGFORMATのデフォルト値は次のとおりです。

'%8p %8y %8z %e (%n)'

表5-1 ALLOCATEのエラー・ログの内容を指定する文字

文字

指定される出力

b

処理中の基礎オブジェクト

c

処理中のディメンションの子ノード

d

処理中のディメンションの名前

e

検出したエラーの説明

n

検出したエラーのエラー・コード

p

処理中のディメンションの親ノード

r

上位から下位へ順に割り当てられるリレーションの名前

s

処理中のソース・オブジェクト

t

処理中のターゲット・オブジェクト

n

割当てを受け取る子セルの基礎値

y

割り当てられる親セルのソース値

z

割り当てられる親セルの基礎値

例

例5-1 ALLOCERRLOGFORMATオプションの設定

この例では、ALLOCERRLOGFORMATオプションを設定し、生成された結果が最後の行に表示されています。

ALLOCERRLOGFORMAT = '%8p %8y %8z %e (%n)'
SHOW ALLOCERRLOGFORMAT
%8p %8y %8z %e (%n)

ALLOCERRLOGHEADER

ALLOCERRLOGHEADERオプションは、ALLOCATEコマンドにERRORLOG引数で指定するエラー・ログの列ヘッダーを設定するオプションです。エラー・ログの他の書式を指定するには、ALLOCERRLOGFORMATオプションを使用します。

構文

ALLOCERRLOGHEADER = text

パラメータ

text

ALLOCATEコマンドで指定するエラー・ログの1行目である列ヘッダーの内容および書式を決定する文字。(使用できる文字のリストは、ALLOCERRLOGFORMATを参照してください。)

このオプションの値としてNAを指定すると、ALLOCATEはエラー・ログにヘッダーを書き込みません。ALLOCERRLOGHEADERのデフォルト値は次のとおりです。

'Dim      Source   Basis\n%-8d %-8v %-8b Description\n
-------- -------- -------- -----------'

例

例5-2 ALLOCERRLOGHEADERオプションの設定

次の文は、ALLOCATE文によって指定されるエラー・ログのヘッダーを定義し、ALLOCERRLOGHEADERオプションの値を表示します。

ALLOCERRLOGHEADER = 'Dim      Source   Basis\n %-8d %-8v %-8b Description \n
-------- -------- -------- -----------'
SHOW ALLOCERRLOGHEADER

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

Dim      Source   Basis
%-8d %-8s %-8b Description
-------- -------- -------- -----------

ソース・オブジェクトと基礎オブジェクトの両方にbudgetという名前の変数がある割当て演算で、divisionディメンションの上位から下位へ順に割当てを行う際にデッドロックが検出されると、エラー・ログに次のようなエントリが生成されます。

Dim      Source   Basis
Division Budget   Budget  Description
-------- -------- -------- -----------
Accdiv   650000    NA      A deadlock occurred allocating data (5)

AWWAITTIME

AWWAITTIMEオプションは、AW ATTACHコマンドでWAITキーワードを使用した場合、アナリティック・ワークスペースにアクセスできるようになるまでの待機秒数を指定するオプションです。AWWAITTIMEのデフォルト値は20秒です。

データ型

INTEGER

構文

AWWAITTIME = seconds

パラメータ

seconds

アナリティック・ワークスペースが使用可能になるまでの待機秒数。デフォルト値は20秒です。

使用上の注意

ワークスペースの共有

使用しているユーザーIDに適切なアクセス権があり、かつ読取り/書込み排他アクセス権を持つユーザーが存在しない場合は、他のユーザーが使用している場合でも、アナリティック・ワークスペースに対する読取り専用アクセス権を取得できます。他のユーザーに読取り/書込みアクセス権があり、ワークスペースをコミットした場合、ワークスペース・ビューは変更されないため、変更内容を参照する場合は、ワークスペースをデタッチし、再アタッチする必要があります。

例

例5-3 待機秒数を60秒に指定する

アナリティック・ワークスペースをアタッチする際、60秒の待機時間が必要だとします。この場合、次の文を発行して、AWWAITTIMEオプションの値を再設定します。

AWWAITTIME = 60

BADLINE

BADLINEオプションは、プログラム、モデルまたは入力ファイルの実行時に、Oracle OLAPがエラーの原因となる行を現行の出力ファイルに記録するかどうかを制御するオプションです。

関連項目:
PROGRAM、MODELおよびINFILE

データ型

BOOLEAN

構文

BADLINE = {YES|NO}

パラメータ

YES

プログラム、モデルまたは入力ファイルの実行時にエラーが発生すると、Oracle OLAPは、エラーが発生したプログラム、モデルまたはファイルの名前とエラーが発生した行を現行の出力ファイルに記録します。エラー・メッセージが出力ファイルに記録されると、BADLINE情報がエラー・メッセージの直後に表示されます。

NO

(デフォルト)プログラム、モデルまたは入力ファイルにエラーが発生した場合、Oracle OLAPはエラーを現行の出力ファイルに記録しません。

例

例5-4 BADLINEオプションの使用

testという簡単なプログラムで、変数myint1を0(ゼロ)で除算します。

DEFINE test PROGRAM
PROGRAM
VARIABLE myint1 INTEGER
VARIABLE myint2 INTEGER
myint1 = 0
myint2 = 250/myint1
END

DIVIDEBYZEROオプションをNOに設定してプログラムを実行すると、ゼロでは除算ができないため、エラーが発生します。BADLINEをYESに設定すると、現行の出力ファイルに次のメッセージが記録されます。

ERROR: (MXXEQ01) A division by zero was attempted. Set DIVIDEBYZERO to
YES if you want NA to be returned as the result of division by zero.
In DEMO!TEST PROGRAM:
myint2 = 250/myint1

例5-5 プログラム行のエラー検出

testという簡単なプログラムで、変数myint1を0(ゼロ)で除算します。

DEFINE test PROGRAM
PROGRAM
VARIABLE myint1 INTEGER
VARIABLE myint2 INTEGER
myint1 = 0
myint2 = 250/myint1
END

このプログラムを実行すると、ゼロでは除算できない(DIVIDEBYZEROがNOに設定されている)ため、エラーが発生します。

BADLINEをNOに設定すると、現行の出力ファイルにはエラーのみが記録されます。

ERROR: (MXXEQ01) A division by zero was attempted.  (If you want NA to
be returned as the result of a division by zero, set the DIVIDEBYZERO
option to YES.)

BADLINEをYESに設定すると、エラーが発生する行と、エラーが発生するプログラムの名前が現行の出力ファイルに記録されます。

ERROR: (MXXEQ01) A division by zero was attempted.  (If you want NA to
be returned as the result of a division by zero, set the DIVIDEBYZERO
option to YES.)
In TESTBAD PROGRAM:
myint2 = 250/myint1
In EDDE.RUNCMD PROGRAM:

BMARGIN

BMARGINオプションは、出力ページの下余白を作成するための空白の行数を定義するオプションです。BMARGINは、PAGINGがYESに設定されている場合にのみ有効で、REPORTやDESCRIBEなどの文の出力に対してのみ適用されます。BMARGINオプションは、通常、レポート・プログラムの初期化部分で設定されます。

データ型

INTEGER

構文

BMARGIN = n

パラメータ

n

レポートの下余白に割り当てる行数を指定するINTEGER式。デフォルト値は1です。

使用上の注意

ファイルへのBMARGINの設定

あるファイルに対してBMARGINを設定するには、最初にOUTFILE文で現行の出力ファイルの名前を指定して対象のファイルを現行の出力ファイルにしてから、BMARGINを目的の値に設定します。新しい値は、リセットするまで、またはOUTFILE文を使用して、出力を送信する出力ファイルを別のファイルに変更するまで有効です。出力先を別の出力ファイルに変更すると、BMARGINによって、そのファイルのデフォルト値である1が返されます。

BMARGINをデフォルトの出力ファイルに対して設定すると、出力をファイルに送信するOUTFILE文が介在している場合でも、新しい値はリセットするまで有効です。つまり、BMARGINの値はデフォルトの出力ファイルに対して自動的に保存されます。

例

例5-6 レポート・ページの下余白の設定

レポート・ページの下部に注釈を付けるとします。5行分の広めの下余白を設定します。レポート・プログラムの初期化セクションに次の文を含めます。

BMARGIN = 5

CALENDARWEEK

CALENDARWEEKオプションは、週の番号を実際の暦年と整合させるかどうかを決定するオプションです。

注意:
このファンクションは、WEEK型のディメンションでのみ使用できます。

データ型

BOOLEAN

構文

CALENDARWEEK = {YES|NO}

パラメータ

YES

(デフォルト)週の番号を暦年と整合させるよう指定します。たとえば、WEEK型のディメンションを定義した場合、Oracle OLAPでは、暦年の最初の週が週1、暦年の2番目の週が週2となるように、WEEKディメンションの値に番号が付けられます。週の番号は、WEEKディメンションの定義で指定されている開始日または終了日にかかわらず、暦年の週と整合します。

NO

週の番号を暦年と整合させないよう指定します。そのかわりに、週の番号は、WEEKディメンションの定義で指定されている日付と整合するように付けられます。たとえば、WEEK型のディメンションを開始日と終了日を指定して定義すると、このディメンションの値には、ディメンション定義の日付に対応する週が週1、次の週が週2となるように番号が付けられます。

使用上の注意

会計年度

CALENDARWEEKをNOに設定すると、週の番号1は、DEFINE DIMENSION文で指定した日付で始まる週または終わる週に割り当てられます。次に、この週の番号は、最初の週の開始日が暦年の1月1日以降の会計年度に割り当てられます。たとえば、開始日が02Jan1996(終了日が08Jan1996)のWEEK型のディメンションを定義すると、開始日が02Jan1996の週が会計年度1997の週1とみなされます。これとは対照的に、ディメンションの開始日を02Jan1995から01Jan1996の間と指定した場合、この日に始まる週は、会計年度1996の週1になります。

例

例5-7 週の番号と暦年との整合

次の文によって、WEEK型のディメンションとその終了日が定義され、そのディメンションに値が追加されてレポートが生成されます。

DEFINE week dimension WEEK ENDING '18Jan97'
MAINTAIN week ADD '21Dec96' '25Jan97'
REPORT W 22 CONVERT(week DATE)

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

WEEK             CONVERT(WEEK DATE)
-------------- --------------------
w51.96         21Dec96
w52.96         28Dec96
w1.97          04Jan97
w2.97          11Jan97
w3.97          18Jan97
w4.97          25Jan97

例5-8 週の番号と指定した終了日との整合

次の文によって、CALENDARWEEKオプションがNOに設定され、週の番号は、「週の番号と暦年との整合」でのweekディメンションの定義で指定されている終了日と整合します。

CALENDARWEEK = NO
REPORT W 22 CONVERT(week date)

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

WEEK             CONVERT(WEEK DATE)
-------------- --------------------
w50.97         21Dec96
w51.97         28Dec96
w52.97         04Jan97
w53.97         11Jan97
w1.98          18Jan97
w2.98          25Jan97

COLWIDTH

COLWIDTHオプションは、レポート出力におけるデフォルトのデータ列幅を制御するオプションです。ROWコマンドおよびHEADINGコマンドからの出力では、COLWIDTHは最初の列以外のすべての列に影響します。REPORTコマンドからの出力では、COLWIDTHは、すべてのデータ列、およびコンポジットまたは結合ディメンションのラベル列に影響します。

注意:
個々の列では、COLWIDTHの値は常に、HEADING、REPORTまたはROWコマンドのWIDTH属性に優先されます。

データ型

INTEGER

構文

COLWIDTH = n

パラメータ

n

必要な列幅を文字数で指定するINTEGER式。COLWIDTHには1から4,000までの値を設定できます。デフォルト値は10です。

注意:
レポートにおける行の最大幅は4,000文字です。したがって、レポート内のすべての列の合計幅が4,000文字以内である必要があります。

例

例5-9 レポートのデフォルト列幅の設定

6か月間の売上数量を参照するとします。データ値は大きくないため、データ列の幅には10文字も必要ありません。そこで、COLWIDTHを設定して、デフォルトの列幅を狭めます。

LIMIT district TO 'Atlanta'
LIMIT month TO 'Oct95' TO 'Mar96'
COLWIDTH = 6
REPORT ACROSS month: units

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

DISTRICT: ATLANTA
------------------UNITS------------------
------------------MONTH------------------
PRODUCT        Oct95  Nov95  Dec95  Jan96  Feb96  Mar96
-------------- ------ ------ ------ ------ ------ ------
Tents             503    345    259    279    305    356
Canoes            317    282    267    281    309    386
Racquets        1,365  1,270  1,357  1,125  1,304  1,263
Sportswear      3,065  2,327  1,955  2,591  2,829  3,137
Footwear        3,445  3,247  2,831  3,089  3,282  3,475

COMMAS

COMMASオプションは、数値の出力における3桁区切り(千桁および百万桁など)の使用を制御するオプションです。区切り文字は通常カンマですが、NLS_TERRITORYの設定によっては異なる場合があります。3桁区切りに使用されている現行の文字を記録するには、THOUSANDSCHARオプションを使用します。COMMASオプションは、数値の出力に3桁区切りを表示するかどうかを制御するものです。

COMMASは、ROW、HEADING、REPORT、SHOWなど、出力を生成するすべてのコマンドに影響します。

注意:
HEADING、REPORTまたはROWコマンドのCOMMA属性およびNOCOMMA属性を使用することで、COMMAの設定を無効にできます。

データ型

BOOLEAN

構文

COMMAS = {NO|YES}

パラメータ

NO

数値の出力に3桁区切りは使用されません。

YES

(デフォルト)数値の出力に3桁区切りが使用されます。

例

例5-10 カンマを使用しない数値データの表示

販売された商品の原価を、データ値にカンマを使用せずに参照するとします。この場合、レポートを生成する前に、COMMASをNOに設定します。

COMMAS = NO
LIMIT line TO 'Cogs'
LIMIT month TO 'Jan96' 'Feb96'
REPORT DOWN division ACROSS month: DECIMAL 0 actual

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

LINE: COGS
-----ACTUAL------
------MONTH------
DIVISION       Jan96      Feb96
-------------- -------- ----------
Camping          368044     385120
Sporting         287558     315299
Clothing         567767     610727

COMPILEMESSAGE

COMPILEMESSAGEオプションは、COMPILEコマンドの実行中、Oracle OLAPによって現行の出力ファイルにnon-irrecoverableエラー・メッセージを送信するかどうかを指定するオプションです。non-irrecoverableエラー・メッセージとは、プログラムによるコンパイルを妨げないエラーを通知するメッセージを指します。

関連項目:
オブジェクトのコンパイルの詳細は、COMPILEを参照してください。

データ型

BOOLEAN

構文

COMPILEMESSAGE = {YES|NO}

パラメータ

YES

(デフォルト)COMPILEコマンドの実行中、Oracle OLAPによりnon-irrecoverableエラー・メッセージを記録します。

NO

COMPILEコマンドの実行中、Oracle OLAPによりnon-irrecoverableエラー・メッセージを送信しません。

例

例5-11 コンパイル中のエラー・メッセージの抑止

次の文で、COMPILEコマンドの実行中、Oracle OLAPによりnon-irrecoverableエラー・メッセージを送信しないように指定します。

COMPILEMESSAGE = NO

COMPILEWARN

COMPILEWARNオプションは、プログラムまたはモデルなどのコンパイル可能なオブジェクトを自動コンパイル中に、Oracle OLAPによって現行の出力ファイル内に警告メッセージを記録するかどうかを制御するオプションです。(COMPILEコマンドを使用してオブジェクトを明示的にコンパイルする場合は、COMPILEWARNメッセージは表示されません。)

次の場合、コンパイル可能なオブジェクトが自動でコンパイルされます。

- 編集後、最初に実行するとき。

- アナリティック・ワークスペースを更新およびコミットした後、前のセッションでオブジェクトがコンパイルされている場合、そのオブジェクトをセッション内で最初に実行するとき。

- コードで参照しているアナリティック・ワークスペース・オブジェクトが削除されるか、名前が変更された後。コード内でオブジェクト名が再定義されていないと、エラー・メッセージが表示されます。

- コードが別のアナリティック・ワークスペースのオブジェクトを参照している場合で、現在アタッチされているアナリティック・ワークスペース内のオブジェクトが、コードが前回コンパイルされた際に使用可能だったオブジェクトと同じオブジェクト型(変数、リレーションなど)、データ型(INTEGER、TEXTなど)またはディメンションではないとき。

データ型

BOOLEAN

構文

COMPILEWARN = {YES|NO}

パラメータ

YES

コンパイル可能なオブジェクトを自動コンパイル中であることを警告するメッセージを記録します。メッセージには、コンパイルが必要な理由が示されます。

NO

(デフォルト)オブジェクトを自動コンパイル中であることを警告するメッセージを記録しません。

例

例5-12 コンパイル警告の表示を指定した場合

COMPILEWARNをYESに指定した場合、do_reportプログラムを編集したすぐ後に実行すると、現行の出力ファイル内のdo_report出力の前に次のメッセージが記録されます。

DO_REPORT is being automatically compiled.

DATEFORMAT

DATEFORMATオプションは、日付のみのデータ型の値の表示や、日付のみの値からテキスト値への変換に使用するテンプレートを保持します。テンプレートには、日付の4つの構成要素(日、月、年、曜日)についての書式指定を含めることができます。また、追加のテキストを含めることもできます。

関連項目:
「日付のみのデータ型オプション」

データ型

TEXT

構文

DATEFORMAT = template

パラメータ

template

日付を表示するためのテンプレートを指定するTEXT式。テンプレート内の各構成要素は、左の山カッコと右の山カッコで囲む必要があります。構成要素の前後または構成要素間には、別のテキストを入れることが可能です。デフォルトのテンプレートは、'<DD><MTXT><YY>'です。

表5-2「日にち用のDATEFORMATテンプレート」、表5-3「曜日用のDATEFORMATテンプレート」、表5-4「月用のDATEFORMATテンプレート」および表5-5「年用のDATEFORMATテンプレート」に、各構成要素の有効な書式を記載します。表には、1990年3月1日および2051年11月12日の2つの表示例が示されています。

表5-2 日にち用のDATEFORMATテンプレート

フォーマット

意味

1990年3月1日

2051年11月12日

<D>

1桁または2桁

1

12

<DD>

2桁

01

12

<DS>

空白詰め、2桁

1

12

<DT>

序数、大文字

1ST

12TH

<DTL>

序数、小文字

1st

12th

表5-3「曜日用のDATEFORMATテンプレート」に、曜日についての有効な書式を記載します。表には、1990年3月1日および2051年11月12日の2つの表示例が示されています。

表5-3 曜日用のDATEFORMATテンプレート

フォーマット

意味

1990年3月1日

2051年11月12日

<W>

数値

4

1

<WT>

頭文字、大文字

W

S

<WTXT>

先頭の3文字、大文字

WED

SUN

<WTXTL>

先頭の3文字、小文字

Wed

Sun

<WTEXT>

完全名、大文字

WEDNESDAY

SUNDAY

<WTEXTL>

完全名、小文字

Wednesday

Sunday

<WTXT>、<WTXTL>、<WTEXT>または<WTEXTL>の書式を指定する場合、DAYNAMESに値が設定されていると、表示される値が次のような影響を受けることに注意してください。

- DAYNAMESに名前がすべて小文字で入力されている場合、名前全体が大文字に変換されます。そうでない場合は、最初の文字が大文字に変換され、2番目以降の文字は元のままです。

- DAYNAMESに名前がすべて大文字で入力されている場合、2番目以降の文字が小文字に変換されます。そうでない場合は、名前全体がDAYNAMESの指定のまま維持されます。

表5-4「月用のDATEFORMATテンプレート」に、月についての有効な書式を記載します。表には、1990年3月1日および2051年11月12日の2つの表示例が示されています。

表5-4 月用のDATEFORMATテンプレート

フォーマット

意味

1990年3月1日

2051年11月12日

<M>

1桁または2桁

1

11

<MM>

2桁

03

11

<MS>

空白詰め、2桁

3

11

<MT>

頭文字、大文字

M

N

<MTXT>

先頭の3文字、大文字

MAR

NOV

<MTXTL>

先頭の3文字、小文字

Mar

Nov

<MTXT>または<MTXTL>の書式を指定する場合、MONTHNAMESに値が指定されていると、表示される値が次のような影響を受けることに注意してください。

- MONTHNAMESに名前がすべて小文字で入力されている場合、名前全体が大文字に変換されます。そうでない場合は、最初の文字が大文字に変換され、2番目以降の文字は元のままです。

- MONTHNAMESに名前がすべて大文字で入力されている場合、2番目以降の文字が小文字に変換されます。そうでない場合は、名前全体がMONTHNAMESの指定のまま維持されます。

表5-5「年用のDATEFORMATテンプレート」に、年についての有効な書式を記載します。表には、1990年3月1日および2051年11月12日の2つの表示例が示されています。

表5-5 年用のDATEFORMATテンプレート

フォーマット

意味

1990年3月1日

2051年11月12日

<YY>

2桁または4桁

90

2051

<YYYY>

4桁

1990

2051

使用上の注意

DATEFORMATテンプレートで山カッコをテキストとして指定する方法

テンプレート内に追加テキストとして山カッコを含めるには、テキストとして含める各山カッコに対し2つの山カッコを指定してください(たとえば、日付全体を山カッコで囲んで表示するには、'<<<D><M><YY>>>'と指定します)。

月名と曜日名

MT、MTXT、MTXTL、MTEXTおよびMTEXTL書式の月の構成要素に使用される名前は、MONTHNAMESオプションの現行の設定から読み取ります。WT、WTXT、WTXTL、WTEXTおよびWTEXTL書式で曜日の構成要素に使用される名前は、DAYNAMESオプションの現行の設定からのものです。

日にちと月の略称の指定

DAYABBRLENおよびMONTHABBRLENオプションを設定することで、曜日名および月名について、様々な長さの略称を使用できます。

DATEFORMATの有効範囲外の年

YY書式を指定した場合、1950から2049年の範囲を超える年は4桁で表示されます。

日付のみの値からテキスト値への自動変換

テキスト・データ型が予期されるときに日付のみのデータ型を使用した場合。Oracle OLAPではDATEFORMATオプションの日付テンプレートも使用して、自動的に日付をテキスト値に変換します。現行のDATEFORMATテンプレートを上書きする場合は、date-format引数を指定したCONVERTファンクションを使用することによって、日付の結果をテキストに変換できます。

いったん日付のみの値がテキスト変数に保存されると、DATEFORMATテンプレートはその値の表示書式として使用されなくなり、それ以降、DATEFORMATが変更されてもその値には適用されません。

日付のみのディメンション値

DATEFORMATオプションでは、DAY、WEEK、MONTH、QUARTERおよびYEARディメンションの日付のみの値を表示する方法は指定されません。これらの値の表示方法は、ディメンション定義に付加されているVNF(値名書式)によって、またはDAY、WEEK、MONTH、QUARTER、YEARディメンションのデフォルトの規則によって制御されます(表2-5「DWMQYディメンションに対するデフォルトのVNF」を参照)。

例

例5-13 日付の書式の変更

次の文により、日付のみの変数を定義して、値を1997年3月24日に設定し、日付書式を日、月、年の順序でそれぞれ2桁で表示するように設定して、結果を現行の出力ファイルに送信します。

DEFINE datevar VARIABLE DATE
datevar = '24Mar97'
DATEFORMAT = '<DD>/<MM>/<YY>'
SHOW datevar

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

24/03/97

次の文で、日付の書式を月(テキスト)、日(2桁)、年(4桁)に変更し、結果を現行の出力ファイルに送信します。

DATEFORMAT = '<MTEXTL> <D>, <YYYY>'
SHOW DATEVAR

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

March 24, 1997

次の文で、日付の書式を曜日(テキスト)、月(テキスト)、日(1または2桁)、年(4桁)に変更し、結果を現行の出力ファイルに送信します。

DATEFORMAT = '<WTEXTL> <MTEXTL> <D>, <YYYY>'
SHOW DATEVAR

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

Monday March 24, 1997

例5-14 日付の書式にテキストを含める

次の文では、アナリティック・ワークスペースのスタートアップ・メッセージに追加のテキストを含めるために、DATEFORMATオプションを保存してから変更します。

PUSH DATEFORMAT
DATEFORMAT = 'Hello.  Today is <wtextl>, the <dtl> -
OF <MTEXTL>.'
SHOW TODAY
POP DATEFORMAT

今日の日付が1997年5月30日の場合、プログラムが起動された際に次の出力が現行の出力ファイルに送信されます。

Hello.  Today is Friday, the 30th of May.

DATEORDER

DATEORDERオプションは、アナリティック・ワークスペース内の日付のみの値の構成要素の解釈があいまいな場合に使用される、月、日、年の順序を示す3文字を保存するオプションです。解釈があいまいな日付のみの値が入力されたり、TEXT値から日付のみの値への変換が行われる場合は常に、このDATEORDERが自動で参照されます。日付の値については、「日付のみのデータ型」を参照してください。

データ型

ID

構文

DATEORDER = order

パラメータ

order

'MDY'、'DMY'、'YMD'、'YDM'、'MYD'、'DYM'のいずれかのテキスト式。各文字は、それぞれ日付の構成要素を表します。Mは月を、Dは日を、Yは年を表す文字です。デフォルトの日付順序は'MDY'です。

使用上の注意

あいまいな日付

明確な日付のみの値が入力される場合、または日付として1つの解釈しかあり得ないテキスト値を変換する場合は、DATEORDERオプションの関与なしに処理が行われます。たとえば、03-24-97では、97は年としてしか引用できません。残りの値については、24は月としては引用できないため日と解釈されます。残されたのは03のみですが、これは月のはずです。しかし、値3-5-97のように解釈があいまいな場合は、各構成要素の意味を解釈するためにDATEORDERの現行の値が使用されます。

DATEORDERとテキストから日付のみへの変換

日付のみの値が予期される箇所にテキスト値を使用するか、日付のみの変数にテキスト値を保存する際は、テキスト値は「日付のみの入力値」で説明されているスタイルに従っている必要があります。Oracle OLAPでは、テキスト値を日付のみの値に自動で変換します。テキスト値の意味があいまいな場合は、値の解釈にはDATEORDERの現行の設定が使用されます。

テキスト値から日付のみの値への変換に際し、現行のDATEORDER設定を上書きするには、CONVERTファンクションをdate-order引数とともに使用します。

必須の日付構成要素

ある日付値を、MAINTAIN文を使用してDAY、WEEK、MONTH、QUARTERまたはYEARディメンションに、あるいはLIMITコマンドを使用して値セットに、割り当てる必要があるとします。値を日付のみの式またはテキスト・リテラルの形式で指定した場合、Oracle OLAPではDATEORDERオプションを使用して値を解釈します。テキスト・リテラルを指定する際は、日付の有効な入力スタイルを使用できます。ただし、指定する必要があるのは、特定の型のディメンションまたは使用する値セット内の時間間隔を識別するために必要な日付構成要素のみです。たとえば、MONTHディメンションまたはその値セットでは、30jun97などの完全な日付を指定することもできますが、jun97または0697などの必須の構成要素のみを指定することもできます。

DWMQYディメンションのフェーズ

DATEORDERオプションは、DAY、WEEK、MONTH、QUARTERおよびYEARディメンションに対するDEFINE DIMENSION文へのphase引数の解釈に使用されます。

例

例5-15 日付の順序の変更

次の文では、ある値を定義して日付のみの変数に割り当て、日付の書式と順序を指定して、結果を現行の出力ファイルへ送信します。

DEFINE datevar VARIABLE DATE
dATEFORMAT = '<MTXT> <D>, <YYYY>'
DATEORDER = 'MDY'
DATEVAR = '3 5 1997'
SHOW DATEVAR

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

MAR 5, 1997

次の文では、日付の順序を変更し、それにより、日付のみの変数の同じ値の解釈方法も変更されます。

DATEORDER = 'DMY'
SHOW DATEVAR

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

MAY 3, 1997

DAYABBRLEN

DAYABBRLENオプションは、DAYNAMESオプションに保存されている曜日名の略称に使用する文字数を指定するオプションです。DATEFORMATテキスト・オプションで<WT>、<WTXT>および<WTXTL>書式を指定する場合は、特定の曜日名の略称として使用する文字数を指定できます。

データ型

TEXT

構文

DAYABBRLEN = specification [;|, specification]...

ここで、specificationは次の形式のテキスト式です。

startpos [- endpos] : length

それぞれ略称の長さが違う、様々な曜日グループを定義できます。これを行うには、構文で示すように各グループをカンマまたはセミコロンで区切ります。

パラメータ

startpos [- endpos]

lengthによって略称の長さを定義する、最初と最後の曜日を示す数字。これらの数字で表される位置は、DAYNAMESオプションの対応するテキスト行に適用されます。これらの範囲の値は、必要に応じてendpos [-startpos]のように逆の順序でも指定できます。

DAYNAMESオプションには7行より多くの行がある可能性があるため、DAYABBRLENの設定では、startposおよびendposに7より大きい数を指定できます。startposまたはendposのどちらもDAYNAMESオプション内に対応するテキスト値がないような範囲を指定した場合は、Oracle OLAPにはその範囲に対する略称のテキスト値はありません。その後、曜日名のリストを変更してstartposが有効になった場合は、指定された略称が適用されます。

length

曜日名の略称の文字数(バイトではなく)による長さを指定する数値。DAYNAMESオプションの特定の位置に略称の長さを指定しないか、特定の位置に明示的にゼロを設定すると、<WT>の場合は1文字のデフォルトの略称、<WTXT>および<WTXTL>の場合は3文字のデフォルトの略称が使用されます。フルネーム指定の<WTEXT>および<WTEXTL>が指定されている場合は、略称は使用されません。

使用上の注意

あいまいな曜日名

'T'がTuesday(火曜日)またはThursday(木曜日)を意味するなど、あいまいな名前を解釈するには、DAYABBRLENを使用できます。TuesdayのDAYABBRLENの設定が1で、ThursdayのDAYABBRLENの設定が2であった場合、'T'は常にTuesdayに一致し、Thursdayと一致させるには少なくとも'Th'が必要です。この解釈は週内のTuesdayとThursdayの順序には関係がなく、2つの曜日の順序が反対でも同じように機能します。一方、どちらのDAYABBRLENも2であった場合には、'T'はどちらの曜日にも一致せず、一致させるには少なくとも'Tu'または'Th'を入力する必要があります。

例

例5-16 曜日の略称の指定

次のDAYABBRLEN設定では、最初の5つの曜日には1文字の略称が、最後の2つの曜日には2文字の略称が使用されます。

DAYABBRLEN = '1-5:1, 6-7:2'
DATEFORMAT = '<WTXT> <MTXT> <D>, <YYYY>'
SHOW CONVERT ('2 august 2005' DATE)

これらの文により、次の結果が返されます。ここでは、Tuesdayが1文字に略されています。

T AUGUST 2, 2005

DAYNAMES

DAYNAMESオプションは、有効な曜日名のリストを保存するオプションです。これらの曜日名は、日付のみの型の値を表示する際または日付のみの値をテキストに変換する際に使用されます。

<WT>、<WTXT>、<WTXTL>、<WTEXT>、<WTEXTL>のいずれかの書式を使用して日付を表示または変換する際に、DAYNAMESリストが参照されます。これらの書式は、DATEFORMATオプションで指定します。曜日名のセットが複数ある場合、Oracle OLAPでは、文字数および大文字の使用パターンがDATEFORMATの指定と最も近いシノニムを選択します。

データ型

TEXT

構文

DAYNAMES = name-list

パラメータ

name-list

7つの曜日名がリストされた複数行のテキスト式。名前はそれぞれ別の行に格納されます。どの曜日を最初の曜日とするかにかかわらず、リストは日曜日の名前から始める必要があります。デフォルト値は、英語の曜日名(大文字)のリストです。リストには複数の名前のセット(7つの曜日名で1セット)を含めることができます。8番目の名前は1番目の名前のシノニムであり、9番目の名前は2番目の名前のシノニムであるというように続きます。

例

例5-17 曜日名の指定

次の文では、DAYNAMESをフランス語の曜日名に設定し、出力を現行の出力ファイルに送信します。

DAYNAMES = 'dimanche\nlundi\n-
mardi\nmercredi\njeudi\nvendredi\nsamedi'
SHOW DAYNAMES

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

dimanche
lundi
mardi
mercredi
jeudi
vendredi
samedi

DECIMALCHAR

(読取り専用)DECIMALCHARオプションは、NLS_NUMERIC_CHARACTERSオプションに指定された値になります。

DECIMALCHARは、Oracle OLAPによる出力での数値書式にのみ影響します。入力する数値の書式には、小数点としてピリオド(.)が使用されます。別の小数点を使用するには、値を一重引用符で囲み、TO_NUMBERファンクションでテキストから有効な数値に変換します。

データ型

ID

構文

DECIMALCHAR

例

例5-18 小数点と3桁区切りの確認

この例内の文で、DECIMALCHARおよびTHOUSANDSCHARの値を確認できます。

- 次の文では、出力としてカンマなどが示されます。

SHOW THOUSANDSCHAR

- 次の文では、出力としてピリオドなどが示されます。

SHOW DECIMALCHAR

- これらの値を使用した場合、次の文によって、文の下にあるような出力が生成されます。

SHOW TOTAL(sales)
63,181,743.50

DECIMALOVERFLOW

DECIMALOVERFLOWオプションは、算術演算の結果が有効範囲外となる場合に、その結果を制御するオプションです。10進数は、仮数および指数として格納されます。計算の結果が非常に大きく、10進表現の指数部分では表しきれない場合、10進オーバーフローが発生します。

データ型

BOOLEAN

構文

DECIMALOVERFLOW = YES|NO

パラメータ

YES

オーバーフローを許可します。オーバーフローを生成する計算がエラーなしで実行され、計算の結果はNAになります。

NO

(デフォルト)オーバーフローを許可しません。オーバーフローが発生する計算は実行が停止され、エラー・メッセージが表示されます。

例

例5-19 DECIMALOVERFLOWの影響

この例では、DECIMALOVERFLOWオプションの値を変更した場合の影響を示します。

DECIMALOVERFLOWをデフォルト値のNOに設定したままで、次のようなSHOW文を実行すると、エラーが発生します。

SHOW 1000000.0 ** 133

DECIMALOVERFLOWの値をYESに変更して同じ文を実行すると、エラーは起こらず、演算の結果としてNAが返されます。次の文

DECIMALOVERFLOW = YES
SHOW 1000000.0 ** 133

によって、次の結果が生成されます。

NA

DECIMALS

DECIMALSオプションは、数値出力に表示する小数点以下の桁数を制御します。値は、指定された小数桁数に収まるように丸められます。(ただし、DECIMALSの設定は、出力のINTEGER値の書式には影響しません。HEADING、REPORTまたはROWコマンドで明示的にDECIMAL属性を適用しないかぎり、INTEGER値には小数桁は表示されません。)

データ型

INTEGER

構文

DECIMALS = n

パラメータ

n

DECIMAL値およびSHORTDECIMAL値のすべての出力における小数点以下の桁数を指定するINTEGER式で、nには、0から40までの任意の数字または255になります。(DECIMALSを255に設定すると、SHORTDECIMALとDECIMALの両方のデータ型について値の書式を指定できます。「最適表示書式と小数2桁表示との比較」を参照してください。)デフォルトは2です。

例

例5-20 小数桁なしでのデータの表示

数値の出力に小数桁を表示しないようにするには、レポートを生成する前に、DECIMALSオプションを0(ゼロ)に設定します。

DECIMALS = 0
LIMIT line TO 'COGS'
LIMIT month TO 'Jan96' 'Feb96'
REPORT DOWN division ACROSS month: budget

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

LINE: COGS
-------BUDGET--------
--------MONTH--------
DIVISION         Jan96      Feb96
-------------- ---------- ----------
Camping           355,933    385,308
Sporting          279,773    323,982
Clothing          528,370    546,468

例5-21 最適表示書式と小数2桁表示との比較

この例では、DECIMALSを2に設定した場合とDECIMALSを255(最適表示書式)に設定した場合の結果を比較します。

OLAP DML文

DECIMALS = 2
SHOW JOINCHARS(1.1 'A')

によって、次の出力が生成されます。

1.10A

OLAP DML文

DECIMALS = 255
SHOW JOINCHARS(1.1 'A')

によって、次の出力が生成されます。

1.1A

DEFAULTAWSEGSIZE

DEFAULTAWSEGSIZEオプションは、データベース・セッションで作成されるアナリティック・ワークスペースの、デフォルトの最大セグメント・サイズを保存するオプションです。この設定は、そのセッションでのみ有効です。新しいセッションごとに、DEFAULTAWSEGSIZEはデフォルト値に戻ります。

ヒント:
既存のワークスペースで、新規セグメントの最大サイズを変更するには、AWコマンドをSEGMENTSIZEキーワードとともに使用します。新規セグメントについての現行の最大サイズを確認するには、AWファンクションをSEGMENTSIZEキーワードとともに使用します。

構文

DEFAULTAWSEGSIZE = n

パラメータ

n

バイト数。

例

例5-22 セッションの最大セグメント・サイズの表示

次の文により、ワークスペースの現行の最大セグメント・サイズが表示されます。

SHOW DEFAULTAWSIZE

例5-23 セッションの最大セグメント・サイズの設定

次の文により、最大セグメント・サイズが約1/2GBに設定されます。

DEFAULTAWSIZE = 536870910

DIVIDEBYZERO

DIVIDEBYZEROオプションは、ゼロで除算した結果を制御します。(ゼロによる除算には、0 ** -2など、ゼロの負の累乗も含まれます。)

データ型

BOOLEAN

構文

DIVIDEBYZERO = YES|NO

パラメータ

YES

ゼロによる除算を許可します。ゼロによる除算を含む文がエラーなしで実行されますが、ゼロによる除算の実行結果はNAです。ディメンション化された変数または式で除算する場合、DIVIDEBYZEROをYESに設定すると、いくつかの計算にゼロによる除算が含まれている場合は、大半の式の値について結果を求めることができます。

NO

(デフォルト)ゼロによる除算を禁止します。ゼロによる除算を含む文を実行すると、実行が停止してエラー・メッセージが生成されます。

例

例5-24 DIVIDEBYZEROの影響

この例では、DIVIDEBYZEROオプションの値を変更した場合の影響を示します。

次のようなSHOW文を、DIVIDEBYZEROオプションのデフォルト値であるNOを変更しないで実行すると、Oracle OLAPでは100が0で除算され、エラー・メッセージが生成されます。

SHOW 100 / 0

DIVIDEBYZEROの設定をYESに変更すると、同じ文がエラーなしで実行され、除算の結果としてNAが出力されます。次の文

DIVIDEBYZERO = YES
SHOW 100 / 0

によって、次の結果が生成されます。

NA

DSECONDS

(読取り専用)DSECONDSオプションは、経過時間をDECIMAL値として返すオプションです。OracleがインストールされているのがUNIXである場合、DSECONDSオプションが返すのは、Oracleが開始されてからの経過時間(秒)になります。OracleがインストールされているのがWindowsである場合、DSECONDSオプションが返すのは、Oracleがインストールされているコンピュータが起動してからの経過時間(秒)になります。プログラムの動作速度向上に役立てるため、DSECONDSは、プログラムの実行中に経過する時間を調べる目的で使用できます。

参照:
経過時間をINTEGER値として取得する方法は、SECONDSオプションを参照してください。

データ型

DECIMAL

構文

DSECONDS

例

例5-25 DSECONDSによるプログラムの時間測定

次のプログラムを実行すると、プログラム開始時のDSECONDSの値がt1という変数に書き込まれ、次にt1とプログラム実行後のDSECONDSの値との差が表示されます。

DEFINE prodsummary PROGRAM
PROGRAM
VARIABLE t1 DECIMAL
t1 = dseconds
LIMIT product TO ALL
BLANK
FOR product
DO
ROW WIDTH 16 name.product ACROSS month Jun96: DECIMAL 0 LSET -
'$'WIDTH 18 <RSET ' (Actual)' sales rset ' (Plan)' sales.plan>
DOEND
BLANK
ROW WIDTH 35 LSET 'The program took ' rset ' seconds.' -
(dseconds - t1)
END

このプログラムを実行すると、次の結果が生成されます。

3-Person Tents     $95,121 (actual)     $80,138 (plan)
Aluminum Canoes   $157,762 (actual)    $132,931 (plan)
Tennis Racquets    $97,174 (actual)     $84,758 (plan)
Warm-up Suits      $79,630 (actual)     $73,569 (plan)
Running Shoes     $153,688 (actual)    $109,219 (plan)

The program took .20 seconds.

ECHOPROMPT

ECHOPROMPTオプションは、入力行とエラー・メッセージを現行の出力ファイルにエコー出力するかどうかを指定するオプションです。ECHOPROMPTをYESに設定し、DBGOUTFILEでデバッグ・ファイルを指定すると、入力行とエラー・メッセージのエコー出力先は、現行の出力ファイルではなくデバッグ・ファイルになります。

データ型

BOOLEAN

構文

ECHOPROMPT = {YES|NO}

パラメータ

YES

入力行とエラー・メッセージは、現行の出力ファイルまたはDBGOUTFILEで指定されたデバッグ・ファイルにエコー出力されます。

NO

(デフォルト)入力行とエラー・メッセージは、現行の出力ファイルとデバッグ・ファイルのいずれにも表示されません。

例

例5-26 ECHOPROMPTの使用

出力の格納先にするディスク・ファイルに、すべての入力行およびエラー・メッセージを格納するとします。まずECHOPROMPTをYESに設定してから、OUTFILE文を発行し、出力をディスク・ファイルに送ります。次の文では、ディスク・ファイルの格納先がカレント・ディレクトリ・オブジェクトになります。

ECHOPROMPT = YES
OUTFILE 'newcalc.dat'

EIFBYTES

(読取り専用)EIFBYTESオプションは、最後に実行されたIMPORT(EIF)コマンドによって読み取られたか、最後に実行されたEXPORT(EIF)コマンドによって書き込まれたバイトの数を保持するオプションです。

データ型

INTEGER

構文

EIFBYTES

例

例5-27 バイト数の確認

demoワークスペースのディメンションをエクスポートしたときにEIFファイルにエクスポートされた情報のバイト数を確認するには、次の文を使用します。

LIMIT name TO OBJ(TYPE) EQ 'DIMENSION'
EXPORT ALL TO EIF FILE 'myfile.eif'
SHOW EIFBYTES

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

2,038

EIFEXTENSIONPATH

EIFEXTENSIONPATHオプションは、EIF拡張ファイルの作成場所を指定するディレクトリ・オブジェクトのリストを格納するオプションです。

データ型

TEXT

構文

EIFEXTENSIONPATH = path-expression

パラメータ

path-expression

1つ以上のディレクトリ・オブジェクト名が格納されているテキスト式。複数の別名を指定する場合は、それぞれを別の行に入力する必要があります。複数の別名は、EIF拡張ファイルの格納に使用する順に指定します。

使用上の注意

拡張ファイルが作成される条件

EIFファイルのサイズが、EXPORT(EIF)コマンドに対してFILESIZE引数で指定したEIFファイルのサイズを超えるか、現行のディスクまたは場所に空き領域がなくなると、EIF拡張ファイルが作成されます。

EIFEXTENSIONPATHで指定された場所は、新しい拡張ファイルの作成前に、十分なディスク領域があるかどうかが確認されます。必要なディスク領域のサイズは、EXPORT(EIF)のFILESIZEに指定されているサイズです。FILESIZEに値が指定されていない場合は、80K以上のディスク領域(FILESIZEによって許容される最小サイズ)の有無が確認されます。ディスク領域が不十分な場合は、十分なディスク領域が確保されている場所が見つかるまでリストの確認が続行されます。

EIFEXTENSIONPATHにおける複数のパス

EIFEXTENSIONPATHに複数のディレクトリ・オブジェクトが含まれる場合、最初の拡張ファイルは、リストの最初の別名に作成されます。2番目の拡張ファイルは、リストの2番目の別名に作成されます(以降同様)。リストの末尾に到達すると、この処理はもう一度先頭から開始されます。EIFEXTENSIONPATHに含まれるディレクトリ・オブジェクトが1つの場合は、すべての拡張ファイルがこの場所に作成されます。

例

例5-28 拡張ファイルの場所の設定

次の文を実行すると、EIF拡張ファイルの作成先としてeifextディレクトリ・オブジェクトが設定されます。

EIFEXTENSIONPATH = 'eifext'

EIFNAMES

EIFNAMESオプションは、最後に実行されたIMPORT(EIF)コマンドによってインポートされたすべてのオブジェクトの名前のリストを保持するオプションです。

データ型

TEXT

構文

EIFNAMES

例

インポートした内容の確認

units変数とproductset値セットを、demoアナリティック・ワークスペースからmyfile.eifというファイルにエクスポートしたとします。ファイルの内容を新しいワークスペースにインポートしたら、EIFNAMESオプションを使用して、インポートしたばかりのオブジェクトの名前を参照できます。

次の文

AW CREATE mytest
IMPORT ALL FROM EIF FILE 'myfile.eif'
SHOW EIFNAMES

によって、次の出力が生成されます。

DISTRICT
PRODUCT
MONTH
UNITS
PRODUCTSET

EIFSHORTNAMES

EIFSHORTNAMESオプションは、EIFオーバーフロー(拡張)ファイル名の拡張子の構造を制御するオプションです。

データ型

BOOLEAN

構文

EIFSHORTNAMES = YES|NO

パラメータ

YES

EIFオーバーフロー(拡張)ファイル名の拡張子をxxに設定します。それぞれxには、aからzまでの小文字が自動的に割り当てられます。

NO

(デフォルト)EIFオーバーフロー(拡張)ファイル名の拡張子をfilename.ennnに設定しますが、ここでnnnは、001から始まる3桁の数字で、ワークスペース拡張ファイル名と区別するために付けられます。たとえば、EIFファイルの名前がexport.eifの場合、拡張ファイルの名前は、export.e001やexport.e002などになります。

例

例5-29 ファイル名の拡張子の3文字への制限

次の文を実行すると、EIF拡張ファイル名のファイル拡張子が、xxの書式に指定されます。

EIFSHORTNAMES = YES

EIFTYPES

EIFTYPESオプションは、EIFNAMESオプションによって生成されるリストに含まれるオブジェクト型のリストを保持するオプションです。各型の列記順序は、これに対応するオブジェクト名がEIFNAMESリスト内で列記されている順序と同じです。

データ型

TEXT

構文

EIFTYPES

例

例5-30 インポートした内容の確認

units変数とproductset値セットを、demoというアナリティック・ワークスペースからmyfile.eifというファイルにエクスポートしたとします。ファイルの内容を新しいワークスペースにインポートしたら、EIFNAMESオプションとEIFTYPESオプションを使用して、インポートしたばかりのオブジェクトの名前とオブジェクト型を参照できます。

次の文により、ワークスペースの作成とオブジェクトのインポートを実行します。

AW CREATE mytest
IMPORT ALL FROM EIF FILE 'myfile.eif'

次の文により、インポートしたオブジェクトの名前を現行の出力ファイルに送ります。

SHOW EIFNAMES

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

DISTRICT
PRODUCT
MONTH
UNITS
PRODUCTSET

次の文により、インポートしたオブジェクト型を現行の出力ファイルに送ります。

SHOW EIFTYPES

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

DIMENSION
DIMENSION
DIMENSION
VARIABLE
VALUESET

EIFUPDBYTES

EIFUPDBYTESオプションは、IMPORT(EIF)コマンドをそのUPDATEキーワードとともに使用するときに、更新の頻度を制御するオプションです。EIFUPDBYTESの値が有効なのは、このコマンドでUPDATEキーワードが指定されている場合に限られます。

データ型

INTEGER

構文

EIFUPDBYTES = n

パラメータ

n

1回のインポート時に、更新と更新の間に読み取るデータの最小バイト数を指定するINTEGER式。EIFUPDBYTESの値として0を指定すると、アナリティック・ワークスペース・オブジェクトがインポートされるたびに更新が実行されます。EIFUPDBYTESの値として0より大きい値を指定すると、指定したバイト数のデータがインポートされるたびに更新が実行されます。デフォルトは0(ゼロ)です。

例

例5-31 更新頻度の削減

次の例では、IMPORT(EIF)コマンドのUPDATEキーワードにより、更新の実行頻度は定期的になります。EIFUPDBYTESを設定することにより、更新頻度を抑えることができます。

EIFUPDBYTES = 500000
IMPORT ALL FROM EIF FILE 'finance.eif' UPDATE

EIFVERSION

EIFVERSIONオプションは、OLAP ServerまたはOracle OLAPの異なるリリース間でデータをコピーするときに、EXPORT(EIF)コマンドおよびIMPORT(EIF)コマンドとともに使用します。データのエクスポート元となるリリースのことをソースと呼びます。データのインポート先となるリリースのことをターゲットと呼びます。

EXPORTコマンドを使用してデータをEIFファイルにエクスポートする前に、EIFVERSIONオプションを使用してターゲットの内部リリースまたはビルド番号を指定します。その後、EXPORTを使用してデータをソースからEIFファイルにコピーすると、データのフォーマットはターゲットがインポート可能なフォーマットになります。通常、EIFファイルからデータをインポートする場合、EIFVERSIONで指定したEIFファイルのリリース番号より後のリリース番号を持つターゲットにインポートできます。ただし、EIFVERSIONの値をデフォルト(現行のプロセスのリリース番号)より低い値に設定し、以前のリリースでは処理できないデータをエクスポートしようとすると、エラーが発生します。たとえば、aggmapを以前のリリースのOLAP Server 6.2にエクスポートしようとすると、OLAP Server 6.2ではaggmapを処理できないため、エラーが発生します。

EVERSIONファンクションを使用すると、ターゲットの内部リリースやビルド番号を判別できます。

構文

EIFVERSION = n

パラメータ

n

OLAP ServerまたはOracle OLAPプロセスの内部リリースまたはビルド番号。これは、データのインポート先にするターゲットのことです。

デフォルトでは、EIFVERSIONは現行のプロセスの内部リリースやビルド番号に設定されます。

例

例5-32 異なるリリース間でのエクスポートおよびインポート

この例では、Oracle OLAPからEIFファイルにデータをエクスポートし、次にOLAP Server 6.2でこのデータをインポートする場合のEIFVERSIONの使用方法を示します。

次の文(ターゲットのOLAP Server 6.2から発行)を実行すると、

SHOW EVERSION

次のリリース情報およびビルド情報が返されます。

Module Mgr, Version: 6.2.0.0.0, Build: 60232
OES Kernel, Version: 6.2.0.0.0, Build: 60232

次の文を実行すると、(60232より後のビルド番号を持つ)Oracle OLAPから、OLAP Server 6.2で読取り可能なEIFファイルにデータがエクスポートされます。

EIFVERSION = 60232
EXPORT ALL TO EIF FILE 'myeif.eif'

ERRNAMES

ERRNAMESオプションは、ERRORTEXTオプションの値にエラーの名前(つまり、ERRORNAMEオプションの値)およびエラー・メッセージのテキストを格納するかどうかを制御するオプションです。

データ型

BOOLEAN

構文

ERRNAMES = {NO|YES}

パラメータ

NO

ERRORTEXTにはエラー・メッセージのテキストのみが格納されます。

YES

(デフォルト)ERRORTEXTにはエラー・メッセージの名前とテキストが格納されます。

例

例5-33 ERRNAMESの設定に応じたERRORTEXTの値

次のプログラムを実行するとします。

VARIABLE myint INTEGER
myint = 35/0
SHOW ERRORTEXT

ERRNAMESの値をYESに設定すると、プログラムからはERRORTEXTの値として次の内容が返されます。

ERROR: (MXXEQ01) A division by zero was attempted.  (If you want NA to
be returned as the result of a division by zero, set the DIVIDEBYZERO
option to YES.)

ERRNAMESの値をNOに設定すると、プログラムからはERRORTEXTの値として次の内容が返されます。

ERROR: A division by zero was attempted.  (If you want NA to be
returned as the result of a division by zero, set the DIVIDEBYZERO
option to YES.)

ERRORNAME

ERRORNAMEオプションは、プログラムまたはOLAP DML文を実行したときに発生した最初のエラーの名前を保持するオプションです。

データ型

TEXT

構文

ERRORNAME

使用上の注意

ERRORNAMEとSIGNAL

独自のエラー条件をプログラム内に作成するには、SIGNALコマンドを使用します。SIGNALを使用すると、ERRORNAMEおよびERRORTEXTは、指定した値に設定されます。

特別な名前PRGERRをSIGNALコマンドとともに使用すると、エラーが発生したコール側プログラムと通信できます。SIGNAL PRGERRコマンドは、ERRORNAMEを空白値に設定し、別のエラー・メッセージを表示することなく、エラー条件をコール側プログラムに渡します。SIGNALを使用して、ネストしたプログラムの連鎖を経由してOracle OLAPエラーを渡す方法については、TRAPコマンドを参照してください。

例

例5-34 TRAPでのERRORNAMEの使用

TRAPコマンドを使用してエラーを処理するレポート・プログラムでは、SIGNALコマンドを使用することにより、現行の出力ファイルに適切なエラー名を送ることができます。

DEFINE myreport PROGRAM
LD Monthly Report
PROGRAM
TRAP ON CLEANUP NOPRINT
PUSH month DECIMALS LSIZE PAGESIZE
LIMIT month TO LAST 1
...
POP month DECIMALS LSIZE PAGESIZE
RETURN
CLEANUP:
POP month DECIMALS LSIZE PAGESIZE
SIGNAL ERRORNAME ERRORTEXT
END

ERRORTEXT

ERRORTEXTオプションは、プログラムまたは文を実行したときに表示された最初のエラー・メッセージのテキストを保持するオプションです。メッセージがERRORTEXTに置かれているエラーの名前は、ERRORNAMEオプションに格納されています。

関連項目:
ERRORNAMEオプション、ERRNAMESオプション、TRAPコマンド

データ型

TEXT

構文

ERRORTEXT

例

例5-35 SIGNALコマンドでのERRORTEXT

TRAPコマンドを使用してエラーを処理するレポート・プログラムでは、SIGNALコマンドを使用することにより、現行の出力ファイルに適切なエラーメッセージを送ることができます。

DEFINE myreport PROGRAM
LD Monthly Report
PROGRAM
TRAP ON CLEANUP NOPRINT
PUSH month DECIMALS LSIZE PAGESIZE
LIMIT month TO LAST 1
...
POP month DECIMALS LSIZE PAGESIZE
RETURN
CLEANUP:
POP month DECIMALS LSIZE PAGESIZE
SIGNAL ERRORNAME ERRORTEXT
END

ESCAPEBASE

ESCAPEBASEオプションは、CONVERTファンクションのINFILEキーワードによって生成されるエスケープ文字のタイプを指定するオプションです。

構文

ESCAPEBASE = 'escape-type'

パラメータ

escape-type

10進数のエスケープ文字の場合は'd'を指定し、16進数のエスケープ文字の場合は'x'を指定します。

デフォルトのエスケープ・タイプは10進です。このタイプでは、文字のINTEGER値が次の形式で生成されます。

'\dnnn'

16進のエスケープは、文字のINTEGER値を次の形式にしたものです。

'\xnn'

例

ESCAPEBASEをCONVERTとともに使用し、テキスト値をエスケープ・シーケンスに変換する例は、例7-50「テキスト値のエスケープ・シーケンスへの変換」を参照してください。

EXPTRACE

EXPTRACEオプションは、PRGTRACEオプションがYESに設定されている場合に、EXPRESSというアナリティック・ワークスペース内のOLAP DMLプログラムをトレースするかどうかを制御するためのオプションです。EXPRESSアナリティック・ワークスペースは常にアタッチされており、主に、OLAP DML文として記述されるOLAP DMLプログラムとその他の「補助的な」OLAP DMLプログラムで構成されています。

データ型

BOOLEAN

構文

EXPTRACE = {YES|NO}

パラメータ

YES

OLAP DML文として記述されたOLAP DMLプログラムを含むすべてのプログラムがトレースされます。

NO

(デフォルト)OLAP DML文として記述されたOLAP DMLプログラムはトレースされません。それ以外のプログラムについてはトレースされます。

使用上の注意

OLAP DML文として記述されたOLAP DMLプログラムを識別する方法

一部のOLAP DML文は、OLAP DMLプログラムとして実装されています。これらのプログラムには、EXPTRACEを使用できます。これらのプログラムのリストを現行の出力ファイルに出力するには、次の文を発行します。

SHOW AW(PROGRAM 'express')

例

例5-36 システムDMLプログラムのトレース

次の文を発行すると、ユーザー定義のプログラムの他にLISTNAMESやALLSTATなどのシステムDMLプログラムがトレースされます。

PRGTRACE = YES
EXPTRACE = YES

INF_STOP_ON_ERROR

INF_STOP_ON_ERRORオプションでは、INFILE文の実行中にエラーが発生した場合のOracle OLAPの動作を指定します。

構文

INF_STOP_ON_ERROR = {YES|NO}

パラメータ

YES

エラーが発生した場合、エラーをレポートし、ファイルからの読取りを停止します。

NO

エラーが発生した場合、エラーをレポートし、ファイルからの読取りを続行します。

例

例5-37 DBMS_EXECUTEでのINF_STOP_ON_ERRORの使用方法

myawという名前のアナリティック・ワークスペースをデタッチする次のOLAP DML文を含むattachmyaw.infというファイルがあるとします。

AW DETACH myaw

SQLアプリケーションにより、attachmyaw.infinfileファイルを読み取るためのINFILE文を含むDBMS_AW.EXECUTE文が発行される際、myawワークスペースがアタッチされていないとします。

INF_STOP_ON_ERRオプションがNOに設定されている場合は、「Analytic workspace MYAW is not attached」というエラーがレポートされても、Oracle OLAPではそのままファイルの読取りが続行され、DBMS_AW.EXECUTEプロシージャは完了するまで正常に実行されます。

DBMS_AW.EXECUTE('INF_STOP_ON_ERR = NO ');
DBMS_AW.EXECUTE('INFILE attachmyaw.inf');

The current directory is MYDIR.
ERROR: (ORA-34344) Analytic workspace MYAW is not attached.
ERROR: (ORA-34344) Analytic workspace MYAW is not attached.

PL/SQL procedure successfully completed.

INF_STOP_ON_ERRオプションがYESに設定されている場合は、「Analytic workspace MYAW is not attached」というエラーがレポートされると、Oracle OLAPではファイルの読取りが中止され、DBMS_AW.EXECUTEプロシージャは中断されます。

DBMS_AW.EXECUTE('INF_STOP_ON_ERR = YES ');
DBMS_AW.EXECUTE('INFILE attachmyaw.inf');

The current directory is MYSPL.
DECLARE
*
ERROR at line 1:
ORA-35166: (ORA-34344) Analytic workspace MYAW is not attached.
ORA-06512: at "SYS.DBMS_AW", line 27
ORA-06512: at "SYS.DBMS_AW", line 115
ORA-06512: at line 8

LCOLWIDTH

LCOLWIDTHオプションは、レポートのラベル列のデフォルト幅を制御します。ROWコマンドおよびHEADINGコマンドからの出力に対して、LCOLWIDTHは最初の列に影響します。REPORTコマンドからの出力に対して、最初の列がコンポジットまたは結合ディメンションのベース・ディメンションを表すデータ列または列のセットの一部である場合を除き、LCOLWIDTHは最初の列に影響します。

注意:
個々の列では、LCOLWIDTHの値は常にHEADING、REPORTまたはROWコマンドのWIDTH属性によって変更されます。

関連項目:
COLWIDTH

データ型

INTEGER

構文

LCOLWIDTH = n

パラメータ

n

必要な列幅を文字数で指定するINTEGER式。LCOLWIDTHは、1から4000までの任意の値を設定できます。デフォルト値は14です。

注意:
レポートにおける行の最大幅は4,000文字です。したがって、レポートのすべての列を合せた幅は4,000文字を超えることができません。

例

例5-38 デフォルト列幅の設定

6か月間の売上数量を参照するとします。最も長い製品名は10文字なので、ラベル列にデフォルト幅の14文字は必要ありません。また、販売数量も多くないので、データ列に10文字の幅は必要ありません。LCOLWIDTHおよびCOLWIDTHを設定して、デフォルト列幅を小さくします。

LIMIT district TO 'Atlanta'
LIMIT month TO 'Oct95' TO 'Mar96'
LCOLWIDTH = 10
COLWIDTH = 6
REPORT ACROSS month: units

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

DISTRICT: ATLANTA
------------------UNITS------------------
------------------MONTH------------------
PRODUCT     Oct95  Nov95  Dec95  Jan96  Feb96  Mar96
---------- ------ ------ ------ ------ ------ ------
Tents         503    345    259    279    305    356
Canoes        317    282    267    281    309    386
Racquets    1,365  1,270  1,357  1,125  1,304  1,263
Sportswear  3,065  2,327  1,955  2,591  2,829  3,137
Footwear    3,445  3,247  2,831  3,089  3,282  3,475

LIKECASE

LIKECASEオプションは、LIKE演算子で大文字と小文字を区別するかどうかを制御します。

ヒント:
LIKENLオプションは、LIKE演算子が改行文字を認識するかどうかを制御します。

データ型

BOOLEAN

構文

LIKECASE = {YES|NO}

パラメータ

YES

(デフォルト)LIKE演算子で大文字と小文字を区別することを指定します。

NO

LIKE演算子で大文字と小文字を区別しないことを指定します。

例

例5-39 LIKECASEの影響

次の文は、LIKECASEオプションの使用方法を示します。

LIKECASE = YES
SHOW 'oracle' LIKE 'Oracle%'

このSHOW文の出力は次のとおりです。

NO

SHOW文

SHOW 'ORACLE' LIKE '%orc%'

によって、次の出力が生成されます。

NO

次の文

LIKECASE = NO
SHOW 'ORACLE' like 'orc%'

によって、次の出力が生成されます。

YES

LIKEESCAPE

LIKEESCAPEオプションによって、LIKE演算子にエスケープ文字を指定できます。

データ型

ID

構文

LIKEESCAPE = char

パラメータ

char

LIKEのテキスト比較でエスケープ文字として使用する文字を指定するテキスト式。デフォルトのエスケープ文字はありません。

LIKEのエスケープ文字は、LIKEのテキスト比較で使用されるLIKEの引数を受け入れるLISTNAMESプログラムに影響します。

使用上の注意

エスケープ文字の使用

LIKEのエスケープ文字によって、LIKE演算子のワイルドカード文字を含むテキスト式を検索できます。LIKE演算子のワイルドカード文字には、1文字と一致するアンダースコア(_)と、ゼロ文字以上の文字列と一致するパーセント文字(%)があります。

テキスト比較にアンダースコアまたはパーセント文字を含めるには、最初にLIKEESCAPEオプションによってエスケープ文字を指定します。その後に、LIKEの式で、指定したLIKEESCAPE文字をアンダースコアまたはパーセント文字の前に付けます。

バックスラッシュ(\)はOLAP DMLの標準のエスケープ文字なので、LIKEのエスケープ文字としてバックスラッシュを使用しない場合があります。そのため、2つのバックスラッシュによって、LIKEESCAPEが2番目のバックスラッシュをリテラル文字として扱うように示す必要があります。

例

例5-40 LIKE演算子でのエスケープ文字の使用

この例は、エスケープ文字を指定する方法、およびそれをLIKE演算子で使用する方法を示します。

次のテキスト値を含むprodstatという名前の変数があるとします。

DEFINE prodstat TEXT <product>
prodstat(product 'Tents') = -
'What are the results of the fabric testing?'
prodstat(product 'Canoes') = -
'How has the flooding affected distribution?'
prodstat(product 'Racquets') = -
'The best-selling model is Whack_it!'
prodstat(product 'Sportswear') = -
'90% of the stock is ready to ship.'
prodstat(product 'Footwear') = -
'When are the new styles going to be ready?'

prodstat変数のセルに含まれるテキストで特定の文字を検索するfindescharという名前の次のプログラムがあります。このプログラムはLIKE演算子を使用します。

ARGUMENT findstring TEXT
FOR product
IF prodstat LIKE findstring
THEN SHOW JOINCHARS(product ' - ' prodstat)

パーセント文字(%)またはアンダースコア(_)を含むテキスト値をプログラムで検索できるようにするために、LIKEESCAPEオプションを使用してエスケープ文字を指定する必要があります。エスケープ文字に疑問符(?)を使用するとします。エスケープ文字を疑問符に設定する前は、次の文によって、疑問符を含むテキストが検索されます。

CALL findeschar('%?%') "Find any text that contains a question mark.

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

Tents - What are the results of the fabric testing?
Canoes - How has the flooding affected distribution?
Footwear - When are the new styles going to be ready?

次の文は、エスケープ文字として疑問符(?)を指定し、FINDESCHARプログラムをコールします。

LIKEESCAPE = '?'
CALL findeschar('%?%') "Find any text that ends with a percent character.

パーセント文字で終わるテキスト値がprodstatにないため、この文によって検索されるテキストはありません。パーセント文字を含むテキストを検索するには、次の文のように、ワイルドカード文字をもう1つ追加します。LIKEESCAPEは、最初のパーセント文字をゼロ文字以上と一致するワイルドカードとして解釈し、2番目のパーセント文字をリテラルのパーセント文字(%)として解釈し(前に疑問符のエスケープ文字があるため)、3番目のパーセント文字をもう1つのワイルドカード文字として解釈します。この結果、LIKEESCAPEは、前後にゼロ文字以上あるパーセント文字を検索します。

CALL findeschar('%?%%') "Find any text that contains a percent character.

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

Sportswear - 90% of the stock is ready to ship.

次の文は、アンダースコアを含むテキストを検索します。

CALL findeschar('%?%') "Find any text that contains an underscore.

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

Racquets - The best-selling model is Whack_it!

次の文は、エスケープ文字を二重にして、エスケープ文字を含むテキストを検索します。

CALL findeschar('%??%') "Find any text that contains a question mark.

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

Tents - What are the results of the fabric testing?
Canoes - How has the flooding affected distribution?
Footwear - When are the new styles going to be ready?

例5-41 LISTNAMESプログラムでのエスケープ文字の使用

この例は、LIKE引数のワイルドカード文字を含むオブジェクトの名前を検索する方法を示します。次の文は、LIKEESCAPEオプションを使用してエスケープ文字を指定し、アンダースコアを含む2つのオブジェクト名を定義し、名前にアンダースコアが含まれるディメンションをリスト表示します。

LIKEESCAPE = '?'
DEFINE my_textdim DIMENSION TEXT
DEFINE my_intdim DIMENSION INTEGER
LISTNAMES DIMENSION LIKE '%?%'

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

3 DIMENSIONs
----------------
MY_INTDIM
MY_TEXTDIM
_DE_LANGDIM

LIKENL

LIKENLオプションは、テキスト値がテキスト・パターンと似ているかどうかを判定する際に、LIKE演算子がテキスト式の各行の間にある改行文字を認識するかどうかを制御します。(OLAP DMLの改行文字の表記は\nです。)

LIKENLオプションは、LIKE演算子で比較する両方のテキスト式に適用されます。

データ型

BOOLEAN

構文

LIKENL = {YES|NO}

パラメータ

YES

(デフォルト)LIKE演算子でテキスト式の行の最後にある改行文字を認識するように指定します。

NO

LIKE演算子でテキスト式の行の最後にある改行文字を無視するように指定します。比較する両方の式で、改行文字が無視されます。

例

例5-42 LIKENLの影響

次の文は、LIKENLオプションの使用方法を示しています。

- 次の文

SHOW textvar

によって、次の出力が生成されます。

Hello
world

- 次の文

LIKENL = YES
SHOW textvar LIKE '%low%'

によって、次の出力が生成されます。

NO

- 次の文

SHOW '   Hello\nworld' LIKE '%\n%'

によって、次の出力が生成されます。

YES

- 次の文

SHOW 'Hello\nworld' LIKE '%low%'

によって、次の出力が生成されます。

NO

- 次の文

LIKENL = NO
SHOW textvar LIKE '%low%'

によって、次の出力が生成されます。

YES

- 次の文

SHOW 'Hello\nworld' LIKE '%\n%'

によって、次の出力が生成されます。

YES

- 次の文

SHOW 'Hello\nworld' LIKE '%low%'

によって、次の出力が生成されます。

YES

LIMIT.SORTREL

LIMIT.SORTRELオプションは、ディメンションを関連ディメンションに制限する際に、ソートを行うかどうかを制御するオプションです。

データ型

BOOLEAN

構文

LIMIT.SORTREL = {YES|NO}

パラメータ

YES

(デフォルト)ディメンションを関連ディメンションに制限する際に、Oracle OLAPによってソートが実行されます。

NO

ディメンションを関連ディメンションに制限する際に、Oracle OLAPによってソートは実行されません。

使用上の注意

ソートの説明

通常、ディメンションを関連ディメンションに制限すると、制限されるディメンションの値は、関連ディメンションの順序に従って配置されます。関連ディメンションの値に関連する最初のディメンションの値が複数の場合、値は、最初のディメンションのデフォルト・ステータスの順序でソートされます。LIMIT.SORTRELで抑制するのはこのソートです。

LIMIT.SORTRELがNOの場合の出力リスト

LIMIT.SORTRELをNOに設定すると、指定した任意のディメンションの値に対するリストが論理的な順序で出力されない場合があります。

例

例5-43 効率的な処理

productという大きなディメンションでディメンション化されている変数で計算を実行するとします。productディメンションには、カテゴリ、ベンダー、ブランドなど、製品階層のすべてのレベルが組み込まれています。productとproductlevelの間の関係を使用して、一度に1レベルずつ計算を実行するとします。この計算では、ディメンション値の順序は重要でなく、さらにproductを関連ディメンションで制限しているため、処理の効率がより向上するLIMIT.SORTRELを使用して不要なソートを抑制します。

LIMIT.SORTREL = NO

LIMITSTRICT

LIMITSTRICTオプションはBOOLEANオプションです。存在しない値が、LIMITコマンド、LIMITファンクションまたはQDRの値のリストに含まれている際のOracle OLAPの動作がこのオプションにより決まります。

構文

LIMITSTRICT = YES | NO

パラメータ

YES

(デフォルト)存在しない値が、LIMITコマンド、LIMITファンクションまたはQDRの値のリストに含まれている場合、Oracle OLAPでは制限の実行が停止され、エラーが発生します。

NO

存在しない値が、LIMITコマンド、LIMITファンクションまたはQDRの値のリストに含まれている場合、Oracle OLAPは、指定した値をNA値として処理しながら制限を実行します。

例

例5-44 LIMITSTRICTをYESに設定することによる制限

次のような定義と値を持つ2つのディメンション(prodとyear)および1つの変数(sales)があるとします。

DEFINE prod DIMENSION TEXT
DEFINE year DIMENSION TEXT
DEFINE sales VARIABLE INTEGER <prod year>

PROD
--------------
Radios
TVs

YEAR
--------------
2003
2004

--------SALES--------
--------PROD---------
YEAR             Radios      TVs
-------------- ---------- ----------
2003                2,459      3,534
2004                3,366      3,018

LIMITSTRICTをYESに設定すると、'IDontExist'の存在しないprod値による制限の要求は、無効な値による制限の要求として処理されます。

- prodを存在しない値に制限すると、ORA-34706エラー・メッセージが表示され、prodのステータスにある値は変更されません。

->LIMIT prod to 'Idontexist'
ORA-34706: Idontexist is not a valid TESTLIMITSTRICT!PROD.

->REPORT prod

PROD
--------------
Radios
TVs

- prodを、存在しない値が含まれる値のリストに制限すると、ORA-34706エラー・メッセージが表示され、prodのステータスにある値は変更されません

->LIMIT prod to 'Idontexist' 'Radios'
ORA-34706: Idontexist is not a valid TESTLIMITSTRICT!PROD.

->REPORT prod

PROD
--------------
Radios
TVs

- salesに対して、QDR内の存在しないprod値を指定した場合も、ORA-34706エラー・メッセージが表示されます。

->REPORT sales (year '2004'prod 'IDontExist')
ORA-34706: IDontExist is not a valid TESTLIMITSTRICT!PROD.

例5-45 LIMITSTRICTをNOに設定することによる制限

例5-44「LIMITSTRICTをYESに設定することによる制限」で説明した2つのディメンション(prodとyear)および1つの変数(sales)があるとします。

LIMITSTRICTをNOに設定すると、'IDontExist'の存在しないprod値による制限の要求は、NA値による制限の要求として処理されます。

- prodを存在しない値に制限すると、ORA-35654エラー・メッセージが表示され、prodのステータスにある値は変更されません。

->LIMIT prod to 'Idontexist'
ORA-35654: The status of the TESTLIMITSTRICT!PROD dimension cannot be set to null.

->REPORT prod
PROD
--------------
Radios
TVs

- prodを、存在しない値を含む値のリストに制限すると、エラー・メッセージは表示されません。この場合、prodは、既存の値に制限されます。

->LIMIT prod to 'Idontexist' 'Radios'

->REPORT prod

PROD
--------------
Radios

- salesに対して、QDR内の存在しないprod値を指定すると、エラー・メッセージは表示されません。この場合、salesのレポートにNA値が表示されます。

->REPORT sales (year '2004'prod 'IDontExist')
----------        NA

LINENUM

LINENUMオプションは、出力の現行の行数を示すオプションです。出力行が生成されるごとに、値が自動的に増加します。LINENUMオプションは、PAGINGの設定がYESの場合にのみ有効であり、REPORTやLISTNAMESなどのコマンドからの出力に対してのみ適用されます。

関連項目:
RECNO

データ型

INTEGER

構文

LINENUM = n

パラメータ

n

INTEGER式。通常は、LINENUMを明示的に設定する必要はありませんが、現行の値を確認する必要のある場合のみ設定します。

使用上の注意

新しいページの開始

PAGINGをYESに設定すると、出力に各行が生成されるたびにLINENUMが1ずつ増加します。LINENUMがPAGESIZEからBMARGINを引いた値と等しくなると、新しいページが自動的に作成されます。

新しいページの最初の行で、LINENUMは自動的に1にリセットされます。

LINENUMとPAGESIZEの比較

PAGESIZEにはページ下の余白の行も含まれるため、BMARGINに0(ゼロ)よりも大きい数字が設定されている場合は、LINENUMがPAGESIZEに到達することはありません。

LINENUMでのPAGINGの効果

PAGINGをNO(デフォルト)に設定すると、LINENUMオプションの値は出力行の生成数に応じて増加します。PAGINGをYESに設定すると、LINENUMは1に設定され、現行ページの行数のカウントが開始されます。

LINENUMでのOUTFILEの効果

OUTFILE文を使用して出力をファイルに送信すると、LINENUMはそのファイルに対して1に設定されます。OUTFILEでEOFキーワードを使用して出力をデフォルトの出力ファイルにリダイレクトすると、LINENUMの値は、デフォルトの出力ファイルに対して最後に保持していた値になります。

出力のLINENUMの送信

LINENUMの値を含む出力を生成し、この出力によって新しいページが作成されると、出力が単一行から構成されている場合、LINENUMの値は1として記録されます。ただし、出力が複数行の値で構成されている場合は、LINENUMの値がPAGESIZEより大きい値として記録されることもあります。

例

例5-46 一定したヘッダー・サイズの保持

ページごとにヘッダーが1行になる場合と2行になる場合があるとします。この違いにかかわらず、ヘッダー下の定位置にページの左端から右端まで線を引くとします。レポート・プログラムで使用するページ・ヘッダー・プログラムに、次の文を含めます。

WHILE LINENUM LT 5
BLANK
ROW W LSIZE ROW CENTER '--------------------------------'

LINESLEFT

(読取り専用)LINESLEFTオプションは、現行ページの残りの行数を保持するオプションです。LINESLEFTオプションは、PAGINGの設定がYESの場合にのみ有効であり、REPORTやLISTNAMESなどのコマンドからの出力に対してのみ適用されます。

データ型

INTEGER

構文

LINESLEFT

使用上の注意

改ページの制御

LINESLEFTは、主にレポート・プログラムで、特定のページ上の残りの行数を確認するために使用されます。レポートが1ページの途中で終わり、改ページで区切る必要がない場合、PAGE文を使用して新しいページをスキップできます。

LINESLEFTでのPAGESIZEの効果

PAGESIZEの値を変更すると、それに合せてLINESLEFTの値も調整されます。まず、PAGESIZEの古い値からLINESLEFTの値が差し引かれ、すでに使用されている行数が得られます。その後、この結果の値がPAGESIZEの新しい値から差し引かれ、LINESLEFTの新しい値が得られます。LINESLEFTが1よりも小さくなる場合は、次の出力行で新しいページが作成されます。

LINESLEFTでのPAGINGの効果

PAGINGをNOに設定すると、LINESLEFTはPAGESIZEの値に設定され、PAGINGがYESに設定されるまでこの値が保持されます。PAGINGをYESに設定すると、LINESLEFTによって現行ページの行数のカウントが開始されます。

LINESLEFTでのOUTFILEの効果

OUTFILE文を使用して出力をファイルに送信すると、LINESLEFTはそのファイルに対して66に設定され、PAGESIZEのデフォルト値と一致します。PAGESIZEを現行の出力ファイルの新しい値に設定すると、それに合せてLINESLEFTも調整されます。たとえば、出力をファイルに送信し、PAGESIZEを40に設定するとします。この場合、Oracle OLAPによって、そのファイルのLINESLEFTが40に設定され、これによって、PAGINGがYESに設定されている場合は、ファイルへの出力の最初の行で新しいページが作成されます。

OUTFILE文でEOFキーワードを使用して出力をデフォルトの出力ファイルにリダイレクトすると、LINESLEFTの値は、デフォルトの出力ファイルに対して最後に保持していた値になります。

出力のLINESLEFTの送信

LINESLEFTの値を含む出力を生成した場合、この値を含む行はLINESLEFTを記録する値には含まれません。

例

例5-47 脚注を含める場合

レポートのページの一番下に、空白の2行に続いて1行の脚注を含めるとします。次の文を使用して、ページ内の残りの行が3行になったら脚注を生成するように指定します。

IF LINESLEFT EQ 3
THEN DO
BLANK 2
ROW W 50 'Subject To Change Without Notice.'
DOEND

LOCK_LANGUAGE_DIMS

LOCK_LANGUAGE_DIMSオプションでは、言語ディメンションのステータスを変更可能にするかどうかを指定します。

関連項目:
「言語ディメンション・ステータスの処理」、$DEFAULT_LANGUAGEプロパティ、SESSION_NLS_LANGUAGEオプションおよびSTATIC_SESSION_LANGUAGEオプション

データ型

BOOLEAN

構文

LOCK_LANGUAGE_DIMS= TRUE | FALSE

パラメータ

TRUE

LIMIT文が言語ディメンションのステータスの制限を試行するとエラーを返すように指定します。

LOCK_LANGUAGE_DIMSオプションの値がプログラムによってFALSEからTRUEに変更されると、Oracle OLAPは、SESSION_NLS_LANGUAGEオプションの値に従って、アタッチされたすべてのアナリティック・ワークスペースの言語ディメンションのステータスをリセットします。

FALSE

言語ディメンションのステータスをALLに設定し、LIMITを使用してプログラムで言語ディメンションのステータスを変更できるように指定します。

LOCK_LANGUAGE_DIMSオプションの値がプログラムによってTRUEからFALSEに変更されると、Oracle OLAPは、アタッチされたすべてのアナリティック・ワークスペースの言語ディメンションのステータスをALLにリセットします。

例

例5-48 言語ディメンションの明示的な制限

アナリティック・ワークスペースに、次の定義および値を持つmylangsという名前の言語ディメンションがあるとします。

DEFINE MYLANGS DIMENSION TEXT
PROPERTY '$DEFAULT_LANGUAGE' -
'AMERICAN'

MYLANGS
--------------
FRENCH
AMERICAN

また、次のレポートに示すように、アナリティック・ワークスペースをアタッチする際にmylangsのステータスがAmericanである場合を考えます。

REPORT mylangs

MYLANGS
--------------
AMERICAN

次のコードに示すように、LOCK_LANGUAGE_DIMSの値を最初にFALSEに設定してLIMITを使用するとmylangsのステータスをFrenchに明示的に変更できます。LOCK_LANGUAGE_DIMSの値がデフォルト値のTRUEの場合、言語ディメンションに対してLIMITは使用できません。

" Try to LIMIT mylangs

LIMIT  mylangs to 'FRENCH'
ORA-33558: The status or contents of the MYAW3!MYLANGS dimension cannot be changed while the LOCK_LANGUAGE_DIMS option is set to yes.

" Got an error
SHOW LOCK_LANGUAGE_DIMS
TRUE

" Got the error because LOCK_LANGUAGE_DIMS was TRUE
"Change LOCK_LANGUAGE_DIMS to FALSE
LOCK_LANGUAGE_DIMS = FALSE

" Try to LIMIT mylangs again

LIMIT mylangs TO 'FRENCH'

" Verify if the LIMIT worked. It did
REPORT mylangs
MYLANGS
--------------
FRENCH

" Then relock the language
LOCK_LANGUAGE_DIMS = TRUE

LSIZE

LSIZEオプションは、STDHDRプログラムが標準ヘッダーを中央揃えする行サイズを定義するオプションです。LSIZEは、レポート・プログラムの初期化セクションで設定できます。

データ型

INTEGER

構文

LSIZE = n

パラメータ

n

STDHDRプログラムで標準ヘッダーを中央揃えする際の基準となる行サイズ、またはHEADING文で生成される出力の最大行サイズを指定するINTEGER式。デフォルトは、1行80文字です。

ヘッダー行を含めて、レポートの各行の最大幅は4,000文字です。したがって、通常は、LSIZEには4000以下の値を設定します。

使用上の注意

レポート・セグメントの中央揃え

STDHDRは、実行中のページのヘッダーをLSIZEの幅で中央揃えするため、LSIZEを使用してレポートの一部分を中央揃えできます。(最初に、LSIZEをレポート内の最も長い行の幅に設定します。)

中央揃えしたヘッダーの作成

LSIZEを使用して、ユーザー自身が作成した各ページやセクションの最初にあるヘッダーを中央揃えできます。まず、LSIZEをユーザーが作成した行の幅に設定します。その後、ユーザー自身のヘッダーのテキストの前で、LSIZEの幅およびキーワードCENTERを指定してHEADING文を使用します。例5-49「ヘッダーの中央揃え」を参照してください。

ファイルに対するLSIZEの設定

ファイルに対してLSIZEを設定するには、最初にOUTFILE文でファイルの名前を指定して現行の出力ファイルにしてから、LSIZEを目的の値に設定します。新しい値は、リセットするまで、またはOUTFILE文を使用して、出力を送信する出力ファイルを別のファイルに変更するまで有効です。出力先を別の出力ファイルに変更すると、そのファイルに対してLSIZEは80のデフォルト値に戻ります。

LSIZEをデフォルトの出力ファイルに対して設定すると、出力をファイルに送信するOUTFILEコマンドが介在しているかどうかにかかわらず、新しい値はリセットするまで有効です。つまり、LSIZEの値はデフォルトの出力ファイルに対して自動的に保存されます。

例

例5-49 ヘッダーの中央揃え

読者がメモを記入できる余白を十分に取るため、四半期ごとの売上レポートを50文字という短い行幅で作成するとします。ヘッダーを中央揃えにするには、レポート・プログラムの先頭近くに次の行を含めます。

PAGEPRG = 'stdhdr'
LSIZE = 50
PAGING = YES
PAGE
HEADING WIDTH LSIZE CENTER 'Quarterly Sales'

レポートの最初に、次の出力が生成されます。

96/05/13 15:05:16                            PAGE 1

Quarterly Sales

MAXFETCH

MAXFETCHオプションは、OLAP_TABLEファンクションのOLAP_commandパラメータに指定したFETCH文によって生成されるデータ・ブロックの上限サイズを設定するオプションです。

関連項目:
FETCH文の使用方法の詳細は、FETCHコマンドを参照してください。OLAP_TABLEファンクションの詳細は、付録A「OLAP_TABLE SQLファンクション」を参照してください。

戻り値

INTEGER

構文

MAXFETCH = integer-expression

パラメータ

integer-expression

FETCHによって生成されるデータ・ブロックの上限サイズをバイト単位で表すINTEGER式。MAXFETCHの最小値は1K(約1,000バイト)、最大値は2GB(約2,000,000,000バイト)です。MAXFETCHのデフォルト値は256Kです。

使用上の注意

OLAP_TABLEを使用した問合せのパフォーマンスの改善

MAXFETCHの設定は、OLAP_TABLEファンクションを使用した問合せのパフォーマンスに影響します。高い値に設定すると、OLAP_TABLEファンクションの結合を使用したサイズの大きい問合せを迅速に実行できます。ただし、設定値が高ければ高いほどメモリーが多く使用されるため、複数のユーザーがいる環境下ではパフォーマンスが低下する可能性があります。MAXFETCHの設定は、使用するOLAP_TABLEファンクションが1つしかないSELECTには影響しません。

MAXFETCHが原因となるFETCHエラー

FETCHを実行した際に、MAXFETCHで設定した制限サイズ内でデータ・ブロックをパッケージできないと、エラーが生成され、クライアントにデータが返されません。大量のデータをフェッチした場合、MAXFETCHを設定することによって、メモリー不足ではなくエラーを生成させることができます。

例

データ・ブロックを4Kに制限する場合

次の文を使用して、データ・ブロックのサイズを4Kに制限します。

MAXFETCH = 4096

MODDAMP

MODDAMPオプションは、モデルの連立方程式の解法としてGauss-Seidel法を使用する際、反復間の振動を減衰させる加重係数を指定するオプションです。MODDAMPによって、方程式間の振動が安定しているために収束しないモデルを解決することが可能となります。振動が安定すると、制動しないかぎり振動は減衰しません。

Oracle OLAPでGauss-Seidel法を使用すると、連立方程式のブロックでの各反復ごとに、各モデル方程式の収束または発散が判定されます。判定は、現行の反復の結果と前回の反復の結果を比較することによって行われます。MODDAMPにゼロより大きい加重係数を指定すると、各反復後に判定および格納される値は、現行の結果と前回の結果の加重平均になります。したがって、反復間で振動する方程式にMODDAMPを使用すると、振動を抑制でき、方程式の発散を回避して収束を速めることができます。

データ型

DECIMAL

構文

MODDAMP = {n|0.00}

パラメータ

n

加重係数を指定するゼロ以上で1より小さい小数値。MODDAMPが0.00に近いほど、現行の反復の値により大きな加重が設定されます。デフォルト値は0.00で、現行の反復に最大の加重が設定されます。

Oracle OLAPでは、MODDAMPがゼロより大きい場合、現行の反復の加重平均は次のように計算されます。

calcvalue * (1 - MODDAMP) + weightavg

ここで、

- calcvalueは、現行の反復でモデル方程式から計算される値です。

- weightavgは、前回の反復で計算された加重平均です。

「格納される加重平均」を参照してください。

使用上の注意

解法の指定

MODDAMPオプションは、Gauss-Seidel法で連立方程式を解決する場合にのみ使用します。使用する解法は、MODSIMULTYPEオプションで決定します。MODSIMULTYPEで設定可能な値は、Gauss-Seidel法を示すGAUSSと、Aitkensデルタ2乗法を示すAITKENSです。

収束速度に対するMODDAMPの影響

MODDAMPは、反復間で振動するかどうかにかかわらず、各連立ブロックにあるすべてのモデル方程式の結果を計算するときに使用します。振動しない方程式では、MODDAMPの値がゼロより大きいと、収束が遅くなります。したがって、モデルに振動する方程式と振動しない方程式が混在している場合は、MODDAMPを0.20などゼロ以外の小さな値に設定することで、全体の収束速度を上げることができます。ゼロ以外の小さな値を設定すると、振動しない方程式の収束速度は多少下がりますが、振動する方程式の収束速度は上がります。

格納される加重平均

モデル方程式が現行の反復で収束または発散しない場合は、現行の反復で計算された加重平均が格納されます。Oracle OLAPでは、この格納された平均値がweightavg(前回の反復で計算された加重平均)として次の反復での加重平均の計算式で使用されます。

ブロックの最初の反復では、ターゲット変数(またはディメンション値)の開始値がweightavg(前回の反復で計算された加重平均)として使用されます。

反復結果の比較

各反復における収束および発散を判定する場合、Oracle OLAPでは、現行の反復の結果と前回の反復の結果を比較します。MODDAMPがゼロより大きい場合、Oracle OLAPは、次のように計算した比較値を判定します。

(weightavg - weightavg) / (weightavg PLUS MODGAMMA)

ここで、weightavgは、前回の反復で計算された加重平均です。

収束判定の説明は、MODTOLERANCEオプションを参照してください。発散判定の説明は、MODOVERFLOWオプションを参照してください。

連立ブロックの解決を制御するオプション

MODDAMPの値の変更は、連立ブロックの収束の加速や達成のために試行する手段の1つです。MODELには、連立ブロックの解決を制御するために使用できる他のオプションがリストされており、モデルの実行およびデバッグに関する情報も掲載されています。

例

例5-50 MODDAMPのデフォルト値の使用

次の文では、income.budというモデルをトレースし、連立ブロックの解法としてGauss-Seidel法を指定して、ディメンションを制限し、income.budモデルを実行します。

MODTRACE = YES
MODSIMULTYPE = 'GAUSS'
LIMIT division TO 'Camping'
income.bud budget

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

(MOD= INCOME.BUD) BLOCK 1: SIMULTANEOUS
(MOD= INCOME.BUD) ITERATION 1: EVALUATION
(MOD= INCOME.BUD) revenue = marketing * 300 - cogs
...
(MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 35) =  368.650399101
...
(MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 36) =  369.209604252
...
(MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 37) =  368.718556135
...
(MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 38) =  369.149674626
...
(MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 39) =  368.771110244
...
(MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 40) =  369.103479583
(MOD= INCOME.BUD) END BLOCK 1

MODDAMPオプションは、デフォルト値の0.00に設定されています。Revenue明細項目の方程式は、連立方程式のブロックでの40回目の反復で収束しました。トレース行で、最後の6回の反復でRevenue明細項目に対して計算された結果を確認できます。

例5-51 モデルの収束速度を上げるためのMODDAMPの設定

次の文で、MODDAMPの値を変更し、income.budを実行します。

MODDAMP = 0.2
income.bud budget

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

(MOD= INCOME.BUD) BLOCK 1: SIMULTANEOUS
(MOD= INCOME.BUD) ITERATION 1: EVALUATION
(MOD= INCOME.BUD) revenue = marketing * 300 - cogs
(MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 1) =  276.200000000
...
(MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 2) =  416.187139753
...
(MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 3) =  368.021098186
...
(MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 4) =  367.209906847
...
(MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 5) =  369.271224267
...
(MOD= INCOME.BUD) BUDGET (LINE REVENUE MONTH 'JAN97' ITER 6) =  368.965397407
(MOD= INCOME.BUD) END BLOCK 1

「MODDAMPのデフォルト値の使用」では、Revenue明細項目の方程式は40回目の反復で収束しました。この例では、MODDAMPを0.2に設定しているため、同じ方程式が6回目の反復で収束しています。

MODERROR

MODERRORオプションは、指定した反復回数内でモデルの連立方程式のブロックが解決しない場合にOracle OLAPが実行するアクションを決定するオプションです。

参照:
連立ブロックの解決を制御するオプションの説明は、「モデル・オプション」を参照してください。

データ型

ID

構文

MODERROR = {'STOP'|'CONTINUE'}

パラメータ

'STOP'

(デフォルト)現行の出力ファイルにエラー・メッセージを送信し、モデルの実行を停止します。

'CONTINUE'

現行の出力ファイルに警告メッセージを送信し、現行のブロックの実行を停止して、モデル内の次のブロックで実行が再開されます。

使用上の注意

ブロックの解決の失敗

連立ブロックのすべての方程式が収束したと判定されると、ブロックは解決されたとみなされます。いずれかの方程式が、指定した反復回数内に発散するかまたは収束に失敗すると、ブロックの解決は失敗し、エラーが発生します。MODERRORでは、エラーが発生したときにOracle OLAPが実行するアクションを制御します。

モデルにおける連立ブロックの収束の達成

エラーが発生した際に、連立ブロックの解決を制御する1つ以上のオプションの値を変更することで、ブロックの収束を達成できる場合があります。たとえば、試行する反復の回数を増やすことによって、収束および発散を判定する際に使用する基準を変更できます。

「STOP」の使用

MODERRORがSTOPに設定されており、エラーが原因でモデルの実行が停止した場合、MODEL.XEQRPTプログラムを実行すると、モデルの実行についてのレポートを生成できます。レポートには、解決に失敗したブロックが示され、連立ブロックの解決に使用されたモデル・オプションの値が表示されます。

「CONTINUE」の使用

MODERRORがCONTINUEに設定されており、モデルの1つのブロックが連立ブロックで、そのブロックが発散するかまたは収束に失敗した場合、Oracle OLAPによって、モデルの残りのブロックが実行されます。

さらに、モデルのディメンションではないソリューション変数の追加のディメンションのステータスにある残りの値に対しても、Oracle OLAPによってモデルが実行されます。この場合、モデルの実行の終了後にMODEL.XEQRPTプログラムを実行すると、この追加のディメンションの最後の値の解決に関するレポートが生成されます。

モデルが追加のディメンションの最後の値に対して実行されたときに、モデルの連立ブロックが収束した場合は、それ以前に別のディメンション値に対するモデルの実行が失敗していても、MODEL.XEQRPTは、ブロックが解決されたとしてレポートします。エラーが発生したディメンション値についてのMODEL.XEQRPTを参照するには、MODERRORをSTOPに設定し、モデルを再実行します。

例

例5-52 モデルのデバッグ

この例では、OLAP Worksheet経由で接続し、コマンド入力ウィンドウに次の文を入力するとします。連立ブロックが収束に失敗したときにmyModelモデル(連立方程式のブロックを含むモデル)をデバッグできるように、文ではMODERRORをDEBUGに設定しています。

MODERROR = 'DEBUG'
myModel actual

連立ブロックが収束に失敗した場合は、OLAP Worksheetのコマンド入力ウィンドウにOracle OLAPコマンドまたはデバッガ・コマンドを入力します。ここでは、ソリューション変数actualがdivisionによってディメンション化されているため、divisionの現行の値を表示します。

SHOW division
Camping

MODGAMMA

MODGAMMAオプションは、モデルの連立ブロックの方程式が反復間でどれだけ変化するかを判定する際に使用する値を指定するオプションです。MODGAMMAは、判定において、反復間の変化の絶対量と比例変化との比較の程度を制御します。MODGAMMAは、結果として非常に小さい値を算出する方程式を判定する際に特に重要です。

参照:
連立ブロックの解決を制御するオプションの説明は、「モデル・オプション」を参照してください。

データ型

INTEGER

構文

MODGAMMA = {n|1}

パラメータ

n

収束および発散の判定に使用するINTEGER値。Oracle OLAPでは、連立ブロック内の各方程式を計算する際、現行の反復と前回の反復における方程式の結果に基づく比較値を作成します。比較値が許容誤差として判定されると、方程式は収束したとみなされます。比較値がオーバーフローとして判定されると、方程式は発散したとみなされます。

比較値は、次のように判定されます。

(thisResult - prevResult) DIVIDED BY (prevResult PLUS MODGAMMA)

ここで、thisResultは現行の反復の結果で、prevResultは前回の反復の結果です。

Oracle OLAPによって、カッコで囲まれた式の絶対値が計算されます。MODGAMMAのデフォルト値は1です。

使用上の注意

収束の判定

収束判定では、MODTOLERANCEオプションによって、連続する反復間で一致する方程式の結果の近似の程度が決まります。MODTOLERANCEのデフォルト値である3では、比較値が0.001より小さい場合に、方程式が収束したとみなされます。

発散の判定

発散判定では、MODOVERFLOWオプションによって、連続する反復間で一致する方程式の結果の離散の程度が決まります。MODOVERFLOWのデフォルト値である3では、比較値が1000より大きい場合に、方程式が発散したとみなされます。

比較値

Oracle OLAPによる収束および発散の判定で評価される比較値は、基本的に比例値です。反復間の変化を、前回の結果の比率として表します。収束判定では、反復間の変化は前回の結果に比例して小さい必要があります。発散判定では、反復間の変化は前回の結果に比例して大きい必要があります。変化の絶対量ではなく比例値を判定することによって、Oracle OLAPでは、方程式の結果の大きさに関係なく、同一の判定基準をすべての方程式に適用できます。

ただし、判定される比較値は、厳密には比率ではありません。方程式の結果がゼロに近い場合、厳密な比率での比較値の分母はかぎりなくゼロに近くなり、そのため、全体として比較値自体が大きくなります。したがって、収束判定を満たすのは難しくなりますが、発散判定は満たしやすくなります。この問題を解決するために、Oracle OLAPでは、MODGAMMAの値を比較値の分母に加算します。MODGAMMAにデフォルト値の1が使用されている場合、MODGAMMAの影響は次のようになります。

- 方程式の結果がゼロに近い場合は、分母は1に近くなり、実際には、反復間の絶対変化を判定することになります。

- 方程式の結果が非常に大きい場合は、MODGAMMAを分母に加えることによる影響は無視できる程度であり、厳密な比率の判定に近くなります。

判定の感度の制御

方程式の値がゼロに近い場合は、MODGAMMAの値を変更することで、収束と発散の判定の感度を制御できます。方程式の結果の値が非常に小さい場合、MODGAMMAの値を変更して、実質的にモデル値の反復間の変化を小さくします。たとえば、MODGAMMAを1から2に変更すると、比較値は実質的に半分まで落ちます。結果として、発散が起こる可能性が減少します。

モデル方程式の収束速度を上げる方法

ほとんどの場合、MODGAMMAのデフォルト値は適切な値です。MODGAMMAの値を増やすと、モデル方程式はより速く収束しますが、結果の精度は低下します。方程式の値が小さいほど、MODGAMMAを増やす場合の影響はより顕著になり、つまり、小さなモデル値では収束は比較的より迅速に達成されるようになりますが、一方で精度の低下がより大きくなります。

また、MODTOLERANCEの値を減らして、収束の判定を緩めることで、モデルの連立ブロックの収束を速めることもできます。ただし、これを行うと、小さい値の方程式の結果のみでなく、すべての結果の精度を犠牲にすることになります。

したがって、モデルに大きな値の方程式と非常に小さい値の方程式が混在している場合は、MODTOLERANCEを減らすよりも、MODGAMMAを増やすほうが有効な場合があります。MODGAMMAを増やすことで、大きい値の方程式の精度を維持したまま小さい値の方程式をより迅速に収束させることができます。

例

例5-53 MODGAMMAのデフォルト値の使用

次の文では、income.budというモデルのトレースを指定し、連立ブロックの解法としてGauss-Seidel法の使用を指定して、ディメンションを制限し、モデルを実行します。

MODTRACE = YES
MODSIMULTYPE = 'GAUSS'
LIMIT division TO 'Camping'
income.bud budget

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

(MOD= INCOME.BUD) BLOCK 1: SIMULTANEOUS
...
(MOD= INCOME.BUD) BUDGET (LINE NET.INCOME MONTH 'JAN97' ITER 16) = 0.026243533
...
(MOD= INCOME.BUD) BUDGET (LINE NET.INCOME MONTH 'JAN97' ITER 17) = 0.024054312
...
(MOD= INCOME.BUD) BUDGET (LINE NET.INCOME MONTH 'JAN97' ITER 18) = 0.025788293
...
(MOD= INCOME.BUD) BUDGET (LINE NET.INCOME MONTH 'JAN97' ITER 19) = 0.024390642
...
(MOD= INCOME.BUD) BUDGET (LINE NET.INCOME MONTH 'JAN97' ITER 20) = 0.025501664
...
(MOD= INCOME.BUD) BUDGET (LINE NET.INCOME MONTH 'JAN97' ITER 21) = 0.024608562

トレースで、連立方程式のブロックの最後の6回の反復でNET.INCOME明細項目に対し計算された結果を確認できます。

MODTOLERANCEの値は、デフォルト値の3です。したがって、方程式を収束したと判定するには、その比較値が.001より小さい必要があります。

MODGAMMAは、デフォルト値の1に設定されています。NET.INCOME明細項目の方程式は、21回目の反復で収束したと判定されています。21回目の反復におけるNet.Incomeの比較値は、次のように計算されました。

(0.024608562967 - 0.025501664970 = 0.00087) / (0.025501664970 + 1)

例5-54 モデルの収束速度を上げるためのMODGAMMAの設定

次の文で、MODGAMMAの設定を変更し、income.budモデルを実行します。

MODGAMMA = 2
income.bud budget

MODGAMMAが2に設定されているため、Net.Incomeの方程式は18回目の反復で収束します。18回目の反復におけるNet.Incomeの比較値は、次のように計算されます。

(0.025788293304 - 0.024054312748 = 0.00086) / (0.024054312748 + 2)

MODINPUTORDER

MODINPUTORDERオプションは、モデルの連立ブロック内の方程式を、指定した順序で実行するか、またはモデル・コンパイラで決定される順序で実行するかを制御します。MODINPUTORDERは、単純ブロックおよびステップ・ブロック内の方程式の順序には影響しません。

参照:
連立ブロックの解決を制御するオプションの説明は、「モデル・オプション」を参照してください。

データ型

BOOLEAN

構文

MODINPUTORDER = {YES|NO}

パラメータ

YES

モデルの連立ブロック内の方程式は、モデルに指定された順序で実行されます。

NO

(デフォルト)連立ブロック内の方程式は、モデル・コンパイラで決定される順序で実行されます。

例

例5-55 デフォルトの順序の使用

次の文は、income.calcモデルを定義する文です。

DEFINE income.calc MODEL
MODEL
DIMENSION line month
Net.Income = Opr.Income - Taxes
Opr.Income = Gross.Margin - TOTAL(Marketing + Selling + R.D)
Marketing = LAG(Opr.Income, 1, month)
Gross.Margin = Revenue - Cogs
END

次の文で、モデルをコンパイルし、MODEL.COMPRPTプログラムを使用してコンパイル・レポートを生成します。

COMPILE income.calc
MODEL.COMPRPT income.calc

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

MODEL INCOME.CALC <LINE MONTH>
BLOCK 1 (SIMPLE)
INCOME.CALC 5: gross.margin = revenue - cogs
BLOCK 2 (SIMULTANEOUS <MONTH>)
INCOME.CALC 4: marketing = lag(opr.income, 1, month)
INCOME.CALC 3: opr.income = gross.margin - total(marketing + selling + r.d)
END BLOCK 2
INCOME.CALC 2: net.income = opr.income - taxes
END BLOCK 1

MODINPUTORDERをデフォルト値のNOに設定してincome.calcをコンパイルすると、コンパイラによって連立ブロック内の方程式の順序が置き換えられているのが確認できます。

例5-56 MODINPUT値の変更

次の文では、MODINPUTORDERの値をYESに設定してモデルをコンパイルし、コンパイル・レポートを生成します。

MODINPUTORDER = YES
COMPILE income.calc
MODEL.COMPRPT income.calc

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

MODEL INCOME.CALC <LINE MONTH>
BLOCK 1 (SIMPLE)
INCOME.CALC 5: gross.margin = revenue - cogs
BLOCK 2 (SIMULTANEOUS <MONTH>)
INCOME.CALC 3:  opr.income = gross.margin - total(marketing + selling + r.d)
INCOME.CALC 4:  marketing = lag(opr.income, 1, month)
END BLOCK 2
INCOME.CALC 2: net.income = opr.income - taxes
END BLOCK 1

連立方程式の順序が指定した順序のまま、コンパイラによって変更されていないことが確認できます。

MODMAXITERS

MODMAXITERSオプションは、モデルの連立方程式のブロックを解決するために実行される反復の最大回数を決定するオプションです。

関連項目:
連立ブロックの解決を制御するオプションの説明は、「モデル・オプション」を参照してください。

データ型

INTEGER

構文

MODMAXITERS = {n|50}

パラメータ

n

連立ブロックを解決するために実行される反復の最大回数を示す正のINTEGER値。デフォルトは50です。

使用上の注意

モデルの実行結果のレポート

連立ブロックのいずれかの方程式が、MODMAXITERSで指定した反復回数内に発散するかまたは収束に失敗すると、ブロックの解決は失敗し、エラーが発生します。MODEL.XEQRPTプログラムを使用して、モデルの実行結果に関するレポートを生成できます。レポートには、連立ブロックが発散したのか、収束に失敗したのかが示されます。ブロックが収束に失敗した場合は、MODMAXITERSの値を増やして試行すると、収束に至るかどうかを確認できます。

例

例5-57 MODMAXITERSとモデル

MYMODELというモデルに、50回の反復で収束できなかった連立方程式のブロックが含まれているとします。次の文で、MODMAXITERSの値を増やし、モデルを再実行します。

MODMAXITERS = 100
myModel actual

MODOVERFLOW

MODOVERFLOWオプションは、モデルの連立ブロックにある方程式が発散したかどうかを判定する際に使用するオプションです。MODOVERFLOWは、方程式が発散したとみなす基準になる、連続する反復における方程式の結果の離散の程度を決定します。

参照:
連立ブロックの解決を制御するオプションのリストは、「モデル・オプション」を参照してください。

データ型

INTEGER

構文

MODOVERFLOW = {n|3}

パラメータ

n

発散の判定に使用するINTEGER値。Oracle OLAPでは、連立ブロック内の各方程式を計算する際、現行の反復と前回の反復における方程式の結果に基づく比較値を作成します。比較値が発散として判定されると、方程式は発散したとみなされます。

比較値は、次のように判定されます。

(thisResult - prevResult) / (prevResult + MODGAMMA)

ここで、thisResultは現行の反復の結果で、prevResultは前回の反復の結果です。

前述の計算において、MODGAMMAは、比較値が反復間の変化の絶対量と比例的変化との比較の程度を制御するINTEGERオプションです。MODGAMMAのデフォルト値は1です。

発散判定では、比較値が、10のMODOVERFLOW乗より大きいかどうかがOracle OLAPによって判定されます。この判定の計算は次のとおりです。

Comparison value  >  10**MODOVERFLOW

方程式が発散したとみなされるには、比較値が前述の判定を満たす必要があります。MODOVERFLOWのデフォルト値は3です。このデフォルト値では、比較値が1000より大きい場合に、比較値が判定を満たします。

使用上の注意

方程式の発散

方程式が発散すると、エラーが発生します。エラーが発生したときにOracle OLAPが実行するアクションは、MODERRORオプションで制御します。

開発時における迅速な発散

モデルの開発中、MODOVERFLOWに小さい値を使用することで時間を節約できます。特定の連立ブロックで多数の反復を実行する場合、MODOVERFLOWに、より小さな値を指定することで、そのブロックを迅速に発散させることができます。MODOVERFLOWオプションをCONTINUEに設定すると、発散が発生してもモデルの実行は継続され、モデルの他のブロックのデバッグに専念できます。モデルのデバッグ後、MODOVERFLOWに、より大きな値を使用します。

例

例5-58 MODOVERFLOWのデフォルト値の使用

次の文で、income.estというモデルのトレースを指定し、ディメンションを制限してモデルを実行します。

MODTRACE = YES
LIMIT division TO 'Camping'
income.est budget

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

(MOD= INCOME.EST) BLOCK 1: SIMULTANEOUS
(MOD= INCOME.EST) ITERATION 1: EVALUATION
(MOD= INCOME.EST) selling = marketing * 3
(MOD= INCOME.EST) BUDGET (LINE SELLING MONTH 'JAN97' ITER 1) = 3
...
(MOD= INCOME.EST) BUDGET (LINE SELLING MONTH 'JAN97' ITER 2) = -997
...
(MOD= INCOME.EST) BUDGET (LINE SELLING MONTH 'JAN97' ITER 3) = 6.00902708124
...
(MOD= INCOME.EST) BUDGET (LINE SELLING MONTH 'JAN97' ITER 49) = 34.2715693388
...
(MOD= INCOME.EST) BUDGET (LINE SELLING MONTH 'JAN97' ITER 50) = -7.22300601861

トレースで、連立方程式のブロックの最初の3回の反復および49回目と50回目の反復でSelling明細項目に対し計算された結果を確認できます。50回の反復後、ブロックは収束に失敗しています。

MODOVERFLOWの値は、デフォルト値の3です。したがって、方程式が発散したと判定するには、その比較値が 1000より大きい必要があります。

例5-59 発散の加速

次の文で、MODOVERFLOWの設定を変更し、income.estモデルを実行します。

MODOVERFLOW = 2
income.est budget

MODOVERFLOWが2に設定されているため、比較値が100より大きい場合、発散の判定を満たします。この例では、Sellingの方程式は2回目の反復で判定を満たします。2回目の反復で、Sellingの比較値は次のように計算されます。

(-997 - 3) / (3 + 1) = 250

この比較値は100より大きいため、Sellingの方程式は2回目の反復で発散します。

MODSIMULTYPE

MODSIMULTYPEオプションは、モデルの連立ブロックを解決するために使用する解法を指定するオプションです。

参照:
連立ブロックの解決を制御するオプションのリストは、「モデル・オプション」を参照してください。

データ型

ID

構文

MODSIMULTYPE = {'AITKENS'|'GAUSS'}

パラメータ

'AITKENS'

(デフォルト)Aitkensデルタ2乗法を使用します。連立方程式のブロックで、3回の反復のうち最初の2回の反復では、方程式は前回の反復の値を使用して解決され、結果の収束および発散が判定されます。3回目の反復ごとに、方程式の解決によってではなく、次の推測(next-guess)の計算を行うことで、結果が取得されます。この計算には、先行する3つの反復の結果を使用します。推測の結果では、収束および発散の判定は行われず、常に次の反復へ解決が続行されます。

'GAUSS'

Gauss-Seidel解法を使用します。連立ブロックの方程式は、ブロックの各反復で解決されます。各反復において、結果の収束および発散判定が行われます。

使用上の注意

連立ブロックの解決

Oracle OLAPでは、連立ブロックの方程式の解決に反復法を使用します。Aitkens解法での次の推測(next-guess)反復を除き、各反復において、現行の反復の結果と前回の反復の結果から比較値が計算されます。比較値が指定した許容範囲内の場合(MODTOLERANCEオプションを参照)、方程式は収束したとみなされます。比較値が大きすぎる場合(MODOVERFLOWオプションを参照)、方程式は発散したとみなされ、ブロックの解決は終了します。

ブロックのすべての方程式が収束すると、そのブロックは解決したとみなされます。いずれかの方程式が発散するか、指定した反復回数内での収束に失敗すると(MODMAXITERSオプションを参照)、ブロック(およびモデル)の解決は失敗し、Oracle OLAPによってエラー・メッセージが表示されます。

次の推測(next-guess)計算

Aitkens法では、次の推測(next-guess)計算を実行するために3つの値が必要です。したがって、連立ブロックにおける最初の3回の反復で、Oracle OLAPによって方程式が解決されます。4番目の反復は、最初の3回の反復の計算の結果を使用する次の推測(next-guess)反復です。

以後、毎回3番目に当たる反復が、前回の推測と中間にはさまる2回の反復の方程式の結果を使用して結果を計算する、次の推測(next-guess)反復となります。たとえば、7番目の反復は、4番目の反復からの推測と5番目および6番目の反復の方程式の結果に基づいた、次の推測(next-guess)計算です。

必要なメモリー容量

通常、Aitkens法は収束が迅速であり、一般にGauss-Seidel法よりも正確な結果を算出します。ただし、先行する3回分の反復の結果を格納するため、Aitkens法のほうが多くのメモリーを必要とします。

通常は、Aitkens法を使用します。Gauss-Seidel法は、システムのメモリー不足が問題となる場合にのみ使用することをお薦めします。

モデルの連立ブロックを解決する際のNA値の処理

方程式の結果を計算し、次の推測(next-guess)計算を行う際、Oracle OLAPではNASKIP2オプションの設定を参照します。NASKIP2は、+(加算)および-(減算)演算が実行される際のNA値の処理方法を制御します。NA値を含むソリューション変数を指定している場合、NASKIP2の設定が重要になります。ソリューション変数の値は、連立ブロックにおける最初の反復で初期値として使用されるため、ソリューション変数にNA値があると、方程式の結果がNAになる場合があります。最初の反復での結果がNAの場合、その後の反復でも結果がNAになる可能性があります。そのため、結果がNAになるのを回避するには、ソリューション変数にNA値が含まれていないことを確認するか、NASKIP2をYESに設定してからモデルを実行します。

データ型の問題

INTEGERデータ型の変数にデータを代入した場合、またはディメンションベースのモデルにINTEGERデータ型のソリューション変数を指定した場合に、連立方程式の収束に失敗することがあります。Oracle OLAPでは方程式を計算するたびにデータを10進値に変換しますが、反復と反復の間にその結果をINTEGER変数に格納するために値が四捨五入されることによって、収束が失敗します。

ファンクションの問題

連立方程式に、端数処理された値を生成するファンクション(INSTRB、ROUNDなど)またはデータが不連続になるファンクション(MAX、MINなど)が含まれている場合、連立方程式の収束に失敗することがあります。

開始値の問題

連立ブロックの解決は、開始値に影響されます。たとえば、モデルの2つのモデル値間に比例関係がある場合、開始値がゼロに近いと、収束が阻止されます。したがって、解決する方程式に対して妥当な開始値を使用する必要があります。

方程式の順序

連立ブロックの解決は、方程式の順序にも影響されます。モデルをコンパイルする際、モデル・コンパイラによって、方程式の依存関係に基づいた最適な方程式の順序が決定されます。

連立ブロック内の方程式を特定の順序で解決するには、必要な順序で方程式を記述し、モデルをコンパイルする前にMODINPUTORDERオプションをYESに設定します。MODINPUTORDERをYESに設定すると、モデル・コンパイラは、連立ブロック内の方程式をモデルに出現する順序で維持します。

連立方程式を特定の順序で配置し、モデルのコンパイル前にMODINPUTORDERをYESに設定すると、一部のモデルで収束を促進できる場合があります。ただし、通常は、モデル・コンパイラによって方程式の順序を決定することをお薦めします。

実行レポートの生成

モデルを実行した後、MODEL.XEQRPTプログラムを使用すると、モデルの実行に関するレポートを生成できます。

例

例5-60 メモリー使用量の節約

budget98というモデルが、連立ブロック内で大量のディメンション値に対して反復を行う複雑なモデルであるとします。この場合、Gauss-Seidel法を使用して、モデルの解決に必要なメモリーを節約できます。

次の文で、Gauss-Seidel法を指定して、モデルを実行します。

MODSIMULTYPE = 'GAUSS'
budget98 budget

MODTOLERANCE

MODTOLERANCEオプションは、モデルの連立ブロックにある方程式が収束したかどうかを判定する際に使用するオプションです。MODTOLERANCEは、方程式が収束したとみなす基準になる、連続する反復における方程式の結果の近似の程度を決定します。

データ型

INTEGER

構文

MODTOLERANCE = {n|3}

パラメータ

n

収束の判定に使用するINTEGER値。Oracle OLAPでは、連立ブロック内の各方程式を計算する際、現行の反復と前回の反復における方程式の結果に基づく比較値を作成します。比較値が許容誤差として判定されると、方程式は収束したとみなされます。

比較値は、次のように判定されます。

(thisResult - prevResult) / (prevResult+ MODGAMMA)

ここで、thisResultは現行の反復の結果で、prevResultは前回の反復の結果です。

前述の計算において、MODGAMMAは、比較値が反復間の変化の絶対量と比例的変化との比較の程度を制御するINTEGERオプションです。MODGAMMAのデフォルト値は1です。

許容誤差判定では、比較値が、10の負のMODTOLERANCE乗より小さいかどうかがOracle OLAPによって判定されます。この判定の計算は次のとおりです。

Comparison value  <  10**-MODTOLERANCE

この計算を記述するもう1つの方法は、次のとおりです。

Comparison value  < (1 / (10**MODTOLERANCE))

方程式が収束したとみなされるには、比較値が前述の判定を満たす必要があります。MODTOLERANCEのデフォルト値は3です。このデフォルト値では、比較値が0.001より小さい場合に、比較値が判定を満たします。

使用上の注意

収束の失敗

指定した反復回数内で方程式が収束に失敗すると、エラーが発生します。試行する反復の最大回数は、MODMAXITERSオプションで制御します。エラーが発生したときにOracle OLAPが実行するアクションは、MODERRORオプションで制御します。

結果の精度

MODTOLERANCEは、反復間の方程式の結果が近似する程度を制御するため、結果の解の精度も制御します。MODTOLERANCEの値が小さいと結果の精度は低くなり、値が大きいと精度は高くなります。

大きな値と小さな値

モデルに大きな値の方程式と非常に小さな値の方程式が混在している場合、MODTOLERANCEオプションの値を減らすよりも、MODGAMMAオプションの値を増やすほうが有効な場合があります。MODGAMMAを増やすことで、大きい値の方程式の精度を維持したまま小さい値の方程式をより迅速に収束させることができます。

開発時における迅速な収束

モデルの開発中、MODTOLERANCEに小さな値の使用が必要となることがあります。これによって結果の精度は落ちますが、モデル方程式はより迅速に収束します。モデルのデバッグ後、MODTOLERANCEの値を増やし、最終的に結果の精度を上げます。

連立ブロックの解決を制御するオプション

連立ブロックの解決を制御する際に使用可能なすべてのオプションのリストは、「モデル・オプション」を参照してください。

例

例5-61 MODTOLERANCEのデフォルト値の使用

次の文では、income.planというモデルのトレースを指定し、連立ブロックの解法としてGauss-Seidel法の使用を指定して、ディメンションを制限し、モデルを実行します。

MODTRACE = YES
MODSIMULTYPE = 'GAUSS'
LIMIT division TO 'Camping'
income.plan budget

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

(MOD= INCOME.PLAN) BLOCK 1: SIMULTANEOUS
(MOD= INCOME.PLAN) ITERATION 1: EVALUATION
(MOD= INCOME.PLAN) marketing = .15 * net.income
(MOD= INCOME.PLAN) BUDGET(LINE MARKETING MONTH 'JAN97' ITER 1) = 11887.403671736
...
(MOD= INCOME.PLAN) BUDGET(LINE MARKETING MONTH 'JAN97' ITER 6) = 73379.713232251
...
(MOD= INCOME.PLAN) BUDGET(LINE MARKETING MONTH 'JAN97' ITER 7) = 73474.784648631
...
(MOD= INCOME.PLAN) BUDGET(LINE MARKETING MONTH 'JAN97' ITER 8) = 73446.025848156
(MOD= INCOME.PLAN) END BLOCK 1

トレースで、連立方程式のブロックの最後の3回の反復でMarketing明細項目に対し計算された結果を確認できます。

MODTOLERANCEは、デフォルト値の3に設定されています。したがって、方程式を収束したと判定するには、その比較値が0.001より小さい必要があります。7回目の反復で、Marketingの比較値は次のように計算されます。

(73474.784648631100 - 73379.713232251300) / (73379.713232251300 + 1) = 0.0013

この比較値は0.001より大きいため、収束したと判定されません。

8回目の反復で、比較値は次のように計算されます。

(73446.025848156700 - 73474.784648631100) /(73474.784648631100 + 1) = 0.0004

この比較値は0.001より小さいため、収束したと判定されます。

例5-62 モデルの収束速度を上げるためのMODTOLERANCEの設定

次の文で、MODTOLERANCEの値を変更し、income.budモデルを実行します。

MODTOLERANCE = 2
income.plan budget

MODTOLERANCEが2に設定されているため、比較値が0.01より小さい場合、収束したと判定されます。この例では、Marketingの方程式は7回目の反復で収束したと判定されます。

MODTRACE

MODTRACEオプションは、モデルの実行中に、モデルの各方程式をファイルに記録するかどうかを制御するオプションです。MODTRACEは、モデルの実行をトレースすることによって問題を検出するためのデバッグ・ツールとして主に使用されます。

ヒント:
INFOファンクションを使用して、コンパイルしたモデルの構成と実行したモデルの解決ステータスに関する情報の特定の項目を取得できます。INFO(MODEL)を参照してください。

データ型

BOOLEAN

構文

MODTRACE = {YES|NO}

パラメータ

YES

各方程式の計算前にそれぞれのモデル方程式のテキストが現行の出力ファイルに送信され、その後、計算の結果が現行の出力ファイルに送信されます。

DBGOUTFILE文を使用してデバッグ・ファイルを指定した場合、MODTRACEの出力は、現行の出力ファイルではなくデバッグ・ファイルに送信されます。

NO

(デフォルト)モデルの実行中、モデル方程式のテキストと結果はファイルに送信されません。

使用上の注意

解決順序のプレビュー

MODTRACEでは、モデルの方程式は解決される順序で現行の出力ファイルに送信されます。モデルの実行前に、MODEL.COMPRPTプログラムを使用して、解決順序のプレビューを取得できます。モデルが大きく複雑な場合、プレビューは特に有用です。モデルのコンパイル後に実行できるMODEL.COMPRPTプログラムで、コンパイラがブロックにモデル方程式をどのように編成したか、およびブロックと方程式が解決される順序を示すレポートを生成できます。

トレース情報の理解

MODTRACEでは、トレースの各行に現行のモデルの名前が表示されます。トレースには次の種類の行が含まれます。

- ブロック。ブロック行には、実行するブロックのブロック番号とブロック・タイプが表示されます。ブロックのタイプには、単純、ステップフォワード、ステップバックワードおよび連立があります。ステップフォワードまたはステップバックワードのブロックでは、ブロック行に、処理されるディメンションが表示されます。ディメンション間の依存がある連立ブロックのブロック行には、依存関係にあるディメンションが表示されます。モデルのブロックの詳細は、MODELコマンドを参照してください。

- 反復。これらの行は連立ブロックの場合に出力され、現行のブロックで実行される反復の回数が指定されます。Aitkens解法を使用する場合は、次の予測反復が識別されます。(使用する解法は、MODSIMULTYPEオプションで決定します。)

- 方程式。計算される方程式です。

- 結果。結果行は各方程式行の後にあり、方程式によって代入される結果が表示されます。結果が代入された変数および各モデル・ディメンションの現行の値が表示されます。連立ブロックでは、現行の反復の回数も表示されます。たとえば、actualがソリューション変数で、モデル・ディメンションがlineおよびmonthの場合、連立ブロックの結果行は次のようなものになります。

(MOD= INCOME.CALC) ACTUAL (LINE OPR.INCOME MONTH 'JAN96'
ITER 1) = 108.9600000

ディメンションベースの方程式を指定したMODTRACEの使用

ディメンションベースの方程式を含むモデルを実行すると、ソリューション変数のすべてのディメンションがOracle OLAPによって自動的にループ処理されます。トレースでは、結果行にDIMENSION文にリストされている各ディメンションの現行値が表示されますが、DIMENSION文にリストされていない追加のディメンションの現行値は表示されません。DIMENSION文の使用の詳細は、DIMENSION(モデル内)を参照してください。

つまり、モデル・ディメンションがlineおよびmonthで、ソリューション変数がline、monthおよびdivisionによってディメンション化されている場合、divisionの現行値は結果行には表示されません。divisionのステータスにある最初の値に対しモデルが実行され、その後、ステータスにある2番目の値に対しモデルが実行されます(以降同様)。

変数に値を代入するモデルを実行すると、それらの変数のディメンション(またはコンポジットのベース)すべてが自動的にループ処理されます。この場合、変数の各ディメンションの現行の値がトレースに表示されます。

例

例5-63 MODTRACEを使用したモデルのデバッグ

次の文で、income.budgetという名前のモデルを定義します。

DEFINE income.budget MODEL
LD Model for estimating budget items
MODEL
DIMENSION line month
Opr.Income = Gross.Margin - Marketing
Gross.Margin = Revenue - Cogs
Revenue = LAG(Revenue, 1, month) * 1.02
Cogs = LAG(Cogs, 1, month) * 1.01
Marketing = LAG(Opr.Income, 1, month) * 0.20
END

このモデルは、損益計算書の予算明細項目についての予測を行います。モデル方程式は、lineディメンションを基礎としています。次の文で、モデルをコンパイルし、MODEL.COMPRPTプログラムを実行します。

COMPILE income.budget
MODEL.COMPRPT income.budget

MODEL.COMPRPT文によって生成されるコンパイル・レポートは次のとおりです。

MODEL INCOME.BUDGET <LINE MONTH>
BLOCK 1 (SIMPLE)
INCOME.BUDGET  4:  revenue = lag(revenue, 1, month) * 1.02
INCOME.BUDGET  5:  cogs = lag(cogs, 1, month) * 1.01
INCOME.BUDGET  3:  gross.margin = revenue - cogs
BLOCK 2 (STEP-FORWARD <MONTH>)
INCOME.BUDGET  6:   marketing = lag(opr.income, 1, month) * 0.20
INCOME.BUDGET  2:   opr.income = gross.margin - marketing
END BLOCK 2
END BLOCK 1

このモデルをデバッグする場合、モデルを実行する前にMODTRACEをオンにすることで、実行状況を行ごとにトレースできます。

次の文で、ディメンションを制限し、トレースを指定して、モデルを実行します。

LIMIT month TO 'Jan97' TO 'Mar97'
LIMIT division TO 'Camping'
MODTRACE = YES
income.budget budget

これらの文によって、次のような行ごとの結果が生成されます。

(MOD= INCOME.BUDGET) BLOCK 1: SIMPLE
(MOD= INCOME.BUDGET) revenue = lag(revenue, 1, month) * 1.02
(MOD= INCOME.BUDGET) BUDGET (LINE REVENUE MONTH 'JAN97') = 744491.1966
(MOD= INCOME.BUDGET) BUDGET (LINE REVENUE MONTH 'FEB97') = 759381.020532
(MOD= INCOME.BUDGET) BUDGET (LINE REVENUE MONTH 'MAR97') = 774568.64094264
(MOD= INCOME.BUDGET) cogs = lag(cogs, 1, month) * 1.01
(MOD= INCOME.BUDGET) BUDGET (LINE COGS MONTH 'JAN97') = 382386.2323
(MOD= INCOME.BUDGET) BUDGET (LINE COGS MONTH 'FEB97') = 386210.094623
(MOD= INCOME.BUDGET) BUDGET (LINE COGS MONTH 'MAR97') = 390072.19556923
(MOD= INCOME.BUDGET) gross.margin = revenue - cogs
(MOD= INCOME.BUDGET) BUDGET (LINE GROSS.MARGIN MONTH 'JAN97') = 362104.9643
(MOD= INCOME.BUDGET) BUDGET (LINE GROSS.MARGIN MONTH 'FEB97') = 373170.925909
(MOD= INCOME.BUDGET) BUDGET (LINE GROSS.MARGIN MONTH 'MAR97') = 384496.44537341
(MOD= INCOME.BUDGET) BLOCK 2 STEP-FORWARD <MONTH>
(MOD= INCOME.BUDGET) marketing = lag(opr.income, 1, month) * 0.20
(MOD= INCOME.BUDGET) BUDGET (LINE MARKETING MONTH 'JAN97') = 39938.192
(MOD= INCOME.BUDGET) opr.income = gross.margin - marketing
(MOD= INCOME.BUDGET) BUDGET (LINE OPR.INCOME MONTH 'JAN97') = 322166.7723
(MOD= INCOME.BUDGET) marketing = lag(opr.income, 1, month) * 0.20
(MOD= INCOME.BUDGET) BUDGET (LINE MARKETING MONTH 'FEB97') = 64433.35446
(MOD= INCOME.BUDGET) opr.income = gross.margin - marketing
(MOD= INCOME.BUDGET) BUDGET (LINE OPR.INCOME MONTH 'FEB97') = 308737.571449
(MOD= INCOME.BUDGET) marketing = lag(opr.income, 1, month) * 0.20
(MOD= INCOME.BUDGET) BUDGET (LINE MARKETING MONTH 'MAR97') = 61747.5142898
(MOD= INCOME.BUDGET) opr.income = gross.margin - marketing
(MOD= INCOME.BUDGET) BUDGET (LINE OPR.INCOME MONTH 'MAR97') = 322748.93108361
(MOD= INCOME.BUDGET) END BLOCK 2
(MOD= INCOME.BUDGET) END BLOCK 1

単純ブロックであるBlock 1では、方程式は一度に1つずつ解決され、各方程式が解決されるごとにmonthのステータスにある3つの値がループ処理されます。monthディメンションにおけるステップフォワード・ブロックであるBlock 2では、monthのステータスにある値全体が段階的に処理され、各月についてのブロックにあるすべての方程式が順番に解決されます。

MONTHABBRLEN

MONTHABBRLENオプションは、MONTHNAMESオプションに格納されている月の名前の略称に使用する文字の数を指定します。DATEFORMATオプションで<MT>、<MTXT>および<MTXTL>の書式を指定するか、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンション用にVNF(値名書式)を指定すると、特定の月の名前の略称に使用する文字数を指定できます。

データ型

TEXT

構文

MONTHABBRLEN = specification [;|, specification]...

ここで、specificationは次の形式のテキスト式です。

startpos [ - endpos] : length

パラメータ

startpos [-endpos]

月の略称の長さがlengthによって定義される、最初と最後の月を表す数。この数値の位置は、MONTHNAMESオプションのテキストの対応する行に該当します。この一連の値は、必要に応じて逆の順序(endpos [-startpos])に指定できます。

MONTHNAMESオプションには12行を超える行を指定できるので、MONTHABBRLENの設定でstartposおよびendposの数に12より大きい値を指定できます。MONTHNAMESオプションのテキスト値に対応する範囲の値をstartposおよびendposに指定しなかった場合、MONTHABBRLENにはその範囲に対する略称のテキスト値はありません。startposが有効になるように月の名前リストを後で変更した場合、指定した略称が適用されます。

length

月の名前の略称について文字の長さを指定する数(バイト数ではない)。MONTHNAMESオプションの特定の位置に対して略称の長さを指定しなかった場合、または特定の位置を明示的にゼロに設定した場合、デフォルトの略称が使用されます。デフォルトの略称は、<MT>の場合は1文字、<MTXT>および<MTXTL>の場合は3文字です。フルネーム指定である<MTEXT>および<MTEXTL>を指定した場合、略称は使用されません。

使用上の注意

あいまいな月の名前

MONTHABBRLENを使用すると、AがAprilとAugustのどちらを表すかなどの、あいまいな名前を解釈できます。MONTHABBRLENでAprilは1、Augustは2である場合、Aは常にAprilに一致し、Augustに一致するには少なくともAuまで必要です。この解釈は暦のAprilとAugustの順序とは関係がなく、2つの月の順序が逆であった場合でも、このコマンドは同じように動作します。一方、どちらのMONTHABBRLENも2であった場合、Aはどちらにも一致せず、一致させるには少なくともApまたはAuを入力する必要があります。

例

例5-64 月の略称の指定

次のMONTHABBRLEN設定では、年頭から10か月までの月を1文字の略称で表し、最後の2か月を2文字の略称で表すことを指定します。

MONTHABBRLEN = '1-10:1, 11-12:2'
SHOW CONVERT ('2 August 2005' DATE)

この文によって、Augustの略称が文字Aである次の結果が生成されます。

02A05

MONTHNAMES

MONTHNAMESオプションは、日付のみのデータ型の値、およびDAY、WEEK、MONTH、QUARTER、YEAR型のディメンションの値を処理するときに使用される有効な月の名前のリストを保持します。名前のリストは、入力された日付を解釈する場合、および表示する日付またはテキスト値に変換する日付を書式化する場合に使用されます。

月の名前またはその略称が含まれる日付を入力する場合に、MONTHNAMESのリストが使用されます。日付のみの値を入力する方法の説明は、DATEFORMATオプションを参照してください。MONTHNAMESのリストは、<MT>、<MTXT>、<MTXTL>、<MTEXT>、<MTEXTL>のいずれかの書式を使用して日付を表示または変換するときにも使用されます。これらの書式は、DATEFORMATオプションで指定します。月名のセットが複数ある場合、Oracle OLAPでは、文字数および大文字の使用パターンがDATEFORMATの指定と最も近いシノニムを選択します。

関連項目:
MONTHABBRLENオプション

データ型

TEXT

構文

MONTHNAMES = name-list

パラメータ

name-list

12か月の名前をリスト表示する複数行のテキスト式。各月の名前はそれぞれ別の行です。年度の最初の月がどの月であるかにかかわらず、このリストは1月から始める必要があります。デフォルト値は、英語ですべての文字が大文字の月名のリストです。

リストには、12の名前を1セットとして複数のセットを含めることができます。リストにある名前は、入力で有効な名前とみなされます。13番目の名前は最初の名前のシノニム、14番目の名前は2番目の名前のシノニムです(以降同様)。

例

例5-65 2セットの月名の指定

次の文は、英語の大文字表記とフランス語の小文字表記の2セットの月名を作成します。

MONTHNAMES = -
'JANUARY -
...
DECEMBER -
janvier -
...
decembre'

例5-66 英語の月名の指定

次の文は、日付のみの変数を定義してその変数に値を割り当て、DATEFORMATに設定を割り当てて、現行の出力ファイルに出力を送信します。DATEFORMAT値には大文字を指定する<MTEXT>が含まれ、英語の月名が使用されます。

DEFINE datevar DATE
datevar = '27feb98'
DATEFORMAT = '<MTEXT> <D>, <YYYY>'
SHOW datevar

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

FEBRUARY 27, 1998

例5-67 フランス語の月名の指定

次の文は、DATEFORMATに新しい設定を割り当て、現行の出力ファイルに出力を送信します。DATEFORMAT値には小文字を指定する<MTEXTL>が含まれ、フランス語の月名が使用されます。

DATEFORMAT = 'le <D> <MTEXTL> <YYYY>'
SHOW datevar

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

le 27 fevrier 1998

MULTIPATHHIER

MULTIPATHHIERオプションは、詳細データが含まれる特定のセルに、集計データが含まれるセルへの複数のパスを設定できることを指定するオプションです。計算によって、このような複数パスの集計が必要です。

データ型

BOOLEAN

構文

MULTIPATHHIER = {YES|NO}

パラメータ

YES

詳細データ・セルで、同じ祖先セルへの複数パスによる集計ができます。

NO

(デフォルト)詳細データ・セルで、同じ祖先セルへの複数パスによる集計ができません。

使用上の注意

MULTIPATHHIERを使用する場合

MULTIPATHHIERオプションは、複数パスを必要とする計算の場合にのみYESに設定します。

XSHIERCK01エラー・メッセージの解釈

AGGREGATEコマンドを使用すると、ディメンション階層に循環性がないかどうかが自動的に確認されます。MULTIPATHHIERをNOに設定した場合、またはデフォルトのNOを変更していない場合、詳細データ・セルが同一の集計データ・セルへの複数パスを使用すると、次のエラー・メッセージが表示されます。

ERROR: (XSHIERCK01) One or more loops have been detected
in your hierarchy n over N. The loops include 2 items
(UNDIRECTED: X and Y).

このエラー・メッセージのXは詳細データ・セルの名前であり、Yは詳細データ・セルが集計で複数パスを使用する祖先セルの名前です。詳細は、例5-68「階層内の複数パスの定義」を参照してください。

詳細データ・セルによって使用される複数パスが循環階層とみなされるために、このエラー・メッセージが表示されます。循環階層がなく、複数パスを作成する意図がない場合は、階層を変更します。複数パスを作成する場合は、MULTIPATHHIERオプションをYESに設定します。

例

例5-68 階層内の複数パスの定義

この例は、階層に複数パスを定義する方法、データ集計時に表示されるエラー・メッセージ、そのメッセージの解釈、および問題の解決方法を示します。

次の文は、詳細データ・セルから集計データが含まれる祖先セルまでの2つのパスを作成します。

DEFINE geog TEXT DIMENSION
DEFINE path INTEGER DIMENSION
DEFINE geog.geog RELATION geog <geog path>
MAINTAIN geog ADD 'A1' 'b1' 'b2' 'Top'
MAINTAIN path ADD 2
geog.geog(geog 'A1' path 1) = 'B1'
geog.geog(geog 'A1' path 2) = 'B2'
geog.geog(geog 'B1' path 1) = 'Top'
geog.geog(geog 'B2' path 1) = 'Top'

最初に、geogという名前の地理ディメンションと、pathという2番目のディメンションが定義されます。

地理ディメンションがそれ自身とpathディメンションによってディメンション化される、geog.geogという名前のリレーションが定義されます。

A1、B1、B2およびTopという名前のディメンション値がgeogディメンションに追加されます。

2つのディメンション値がpathディメンションに追加されます。pathはINTEGERデータ型で定義されたので、これに自動的に割り当てられるディメンション値はINTEGER値の1および2です。

最後に、geogディメンションの階層が作成されます。A1ディメンション値は詳細データです。B1およびB2のディメンション値は、階層の2番目のレベルです。TOPディメンション値は階層の最上位です。

A1には2つの集計パスがあります。最初のパスでは、A1がB1に集計され、その結果がTopに集計されます。2番目のパスでは、A1がB2に集計され、その結果がTopに集計されます。

次の文は、myvarという名前の変数を定義し、データ値1をその詳細データ・レベル(A1)に割り当て、その変数のaggmapを定義します。

DEFINE myvar INTEGER VARIABLE <geog>
myvar(geog 'A1') = 1
DEFINE myvar.aggmap <geog>
AGGMAP 'RELATION geog.geog'

myvarを集計すると、次のエラー・メッセージが表示されます。

AGGREGATE myvar USING myvar.aggmap
ERROR: (XSHIERCK01) One or more loops have been detected
in your hierarchy GEOG.GEOG over GEOG. The loops include 2
items (UNDIRECTED: A1 and TOP).

A1に対して作成された集計の複数パスが循環階層とみなされました。現在、MULTIPATHHIERオプションがNOに設定されているためです。

誤ってこのような複数パスを作成してしまった場合、その階層で問題を解決します。

ただし、この場合は複数パスが計算上必要なために作成しています。したがって、これを解決するためには、MULTIPATHHIERをYESに設定します。これにより、エラーが発生することなくAGGREGATEコマンドを実行できます。

NASKIP

NASKIPオプションは、NA値が集計ファンクションの入力とみなされるかどうかを制御します。

関連項目:
$NATRIGGERプロパティ、+(プラス)演算子や-(マイナス)演算子を使用したNA値の処理方法を制御するNASKIP2オプション、およびNASPELLオプション

データ型

BOOLEAN

構文

NASKIP = NO|YES

パラメータ

NO

(デフォルト)NA値は集計ファンクションによって評価されます。評価される値のいずれかがNAである場合、集計ファンクションはその値に対してNAを返します。

YES

NA値は集計ファンクションによって無視されます。実際の値を持つ式のみが計算に使用されます。

使用上の注意

NASKIPによって影響を受ける文

次のOLAP DML文はNASKIPの影響を受けます。

AGGREGATEコマンド

AGGREGATEファンクション

ANY

AVERAGE

COUNT

CUMSUM

DEPRDECL

DEPRDECLSW

DEPRSL

DEPRSOYD

EVERY

FINTSCHED

FPMTSCHED

IRR

LARGEST

MEDIAN

MOVINGAVERAGE

MOVINGMAX

MOVINGMIN

MOVINGTOTAL

NONE

NPV

SMALLEST

STDDEV

TCONVERT

TOTAL

VINTSCHED

VPMTSCHED

その他の文はNASKIPの設定による影響を受けないため、NA値は常に無視されます。

例

例5-69 TOTALファンクションでのNASKIPの効果

demoワークスペースの1997年の販売実績(sales)はNAです。TOTALファンクションは、NASKIPの設定に応じて異なる結果を返します。

次の文

ALLSTAT
NASKIP = YES
SHOW TOTAL(sales)

によって、次の結果が生成されます。

63,181,743.50

これに対し、OLAP DML文

NASKIP = NO
SHOW TOTAL(sales)

によって、次の結果が生成されます。

NA

例5-70 MOVINGMINファンクションでのNASKIPの効果

この例は、3か月間(当月とその前の2か月)の値を集計します。SALESの最初のレポートでは、1997年の月にNA値が表示されます。NASKIPがYESである場合、この月に関して評価されたすべての値がNAであったため、MOVINGMINファンクションは1997年3月に対してのみNAを返します。NASKIPがNOである場合、MOVINGMINによって評価されたこれらの月のうち少なくとも1つの値がNAであったため、3番目の文(REPORT DOWN month sales)は、1997年の1月から3月までNA値を表示します。

LIMIT district TO 'Seattle'
LIMIT month TO 'Jul96' TO 'Mar97'
REPORT DOWN month sales

この文によって生成されるSALESデータのレポートは、次のとおりです。

DISTRICT: SEATTLE
------------------------SALES-------------------------
-----------------------PRODUCT------------------------
MONTH   Tents      Canoes    Racquets  Sportswear  Footwear
----- ---------- ---------- ---------- ----------  ---------
Jul96 123,700.17 157,274.03  60,198.52  78,305.97  78,019.87
Aug96 120,650.72 128,660.89  45,046.71  66,853.26  83,347.55
Sep96  97,188.43 122,702.13  42,257.14  63,777.36  99,464.05
Oct96  91,578.77  79,925.93  39,729.25  55,021.85  83,537.58
Nov96  56,044.34  77,357.10  39,024.93  44,004.12  65,216.94
Dec96  41,576.26  67,609.36  36,156.10  40,575.34  62,113.72
Jan97         NA         NA         NA         NA         NA
Feb97         NA         NA         NA         NA         NA
Mar97         NA         NA         NA         NA         NA

次の文

NASKIP = YES
REPORT DOWN month MOVINGMIN(sales -2, 0, 1, month)

によって、次のレポートが生成されます(このレポートでは、1997年3月の値がNA値です)。

DISTRICT: SEATTLE
-----------MOVINGMIN(SALES -2, 0, 1, MONTH)-----------
---------------------PRODUCT--------------------------
MONTH   Tents      Canoes    Racquets  Sportswear  Footwear
----- ---------- ---------- ---------- ----------  ---------
Jul96 108,663.59 125,823.37 57,666.37  57,713.27   73,085.88
Aug96 119,066.18 128,660.89 45,046.71  60,322.88   78,019.87
Sep96  97,188.43 122,702.13 42,257.14  63,777.36   78,019.87
Oct96  91,578.77  79,925.93 39,729.25  55,021.85   83,347.55
Nov96  56,044.34  77,357.10 39,024.93  44,004.12   65,216.94
Dec96  41,576.26  67,609.36 36,156.10  40,575.34   62,113.72
Jan97  41,576.26  67,609.36 36,156.10  40,575.34   62,113.72
Feb97  41,576.26  67,609.36 36,156.10  40,575.34   62,113.72
Mar97         NA         NA         NA         NA         NA

次の文

NASKIP = NO
REPORT DOWN month MOVINGMIN(sales -2, 0, 1, month)

によって、次のレポートが生成されます(このレポートでは、1997年1月から3月までの値がNA値です)。

DISTRICT: SEATTLE
----------MOVINGMIN(SALES -2, 0, 1, MONTH)-------------
------------------------PRODUCT------------------------
MONTH   Tents      Canoes    Racquets  Sportswear  Footwear
----- ---------- ---------- ---------- ----------  ----------
Jul96 108,663.59 125,823.37  57,666.37  57,713.27   73,085.88
Aug96 119,066.18 128,660.89  45,046.71  60,322.88   78,019.87
Sep96  97,188.43 122,702.13  42,257.14  63,777.36   78,019.87
Oct96  91,578.77  79,925.93  39,729.25  55,021.85   83,347.55
Nov96  56,044.34  77,357.10  39,024.93  44,004.12   65,216.94
Dec96  41,576.26  67,609.36  36,156.10  40,575.34   62,113.72
Jan97         NA         NA         NA         NA          NA
Feb97         NA         NA         NA         NA          NA
Mar97         NA         NA         NA         NA          NA

NASKIP2

NASKIP2オプションは、+(プラス)演算子および-(マイナス)演算子を使用した算術演算でのNA値の処理方法を制御します。NAのオペランドがある場合、NASKIP2がYESに設定されていないかぎり、結果はNAです。

関連項目:
$NATRIGGERプロパティ、NASKIPオプションおよびNASPELLオプション

データ型

BOOLEAN

構文

NASKIP2 = YES|NO

パラメータ

YES

+(プラス)演算子および-(マイナス)演算子を使用する算術演算のNA値にゼロが代入されます。NA + NAおよびNA - NAの2つの特別な場合の結果は、どちらもNAです。

NO

(デフォルト)NA値は、+(プラス)演算子および-(マイナス)演算子を使用する算術演算でNA値として処理されます。評価されるオペランドのいずれかがNAである場合、算術演算はNAに評価されます。

使用上の注意

ファンクションの引数における演算子

NASKIP2は、NASKIPから独立しています。NASKIP2は、+(プラス)演算子および-(マイナス)演算子を使用する算術演算にのみ適用されます。NASKIPは、集計ファンクションにのみ適用されます。ただし、集計ファンクションに対するexpression引数に+(プラス)演算子や-(マイナス)演算子が含まれる場合、計算結果はNASKIPとNASKIP2の両方に依存します。例5-71「集計ファンクションの式に負の値が含まれる際のNASKIPとNASKIP2の効果」を参照してください。

NASKIP2の動作

次の4行は、NASKIP2の設定がYESである場合の、NAを含む複雑な式の評価の4段階を示します。

3 * (NA + NA) - 5 * (NA + 3)
3 * NA     -    5 *  3
NA       -      15
-15

例

例5-71 集計ファンクションの式に負の値が含まれる際のNASKIPとNASKIP2の効果

次の例では、INTEGERディメンションINTDIMによってディメンション化されるINTEGER変数XおよびZに、レポートの2列目と3列目に示す値が格納されています。NASKIPとNASKIP2の設定の組合せ(最初の組合せはデフォルトの設定)ごとに、和X + Zが計算されます。この例は、TOTALファンクションに対するexpression引数に+(プラス)演算子が使用される場合、TOTALファンクションから返される結果がNASKIPとNASKIP2の両方に依存することも示します。

- NASKIPをYES、NASKIP2をNOに設定
この例では、NASKIPがYESに設定されるので、TOTALファンクションでNA値が無視されます。NASKIP2がNOに設定されるので、いずれかのオペランドがNAの場合、+(プラス)演算の結果はNAです。

NASKIP = YES
NASKIP2 = NO
COLWIDTH = 5
REPORT LEFT W 6 DOWN intdim x, z, x + z

これらの文によって生成される出力は次のとおりです。NASKIP2の設定がNOなので、XとZのいずれかがNAの場合、式X + Zの結果はNAです。

INTDIM   X     Z   x + z
------ ----- ----- -----
1         NA     2    NA
2          3    NA    NA
3          7     6    13

次の文は、TOTALファンクションに対するexpression引数に+(プラス)演算子を使用します。

SHOW TOTAL(x + z)

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

13

次の文は、+(プラス)演算子を使用して、2つのTOTALファンクションから返される結果を加算します。

SHOW TOTAL(x) + TOTAL(z)

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

18

- NASKIPをYES、NASKIP2をYESに設定
この例では、NASKIPがYESに設定されるので、TOTALファンクションでNA値が無視されます。NASKIP2がYESに設定されるので、NA値は+(プラス)演算子によって無視されます。

NASKIP = YES
NASKIP2 = YES
REPORT LEFT W 6 DOWN intdim x, z, x + z

これらの文によって生成される出力は次のとおりです。NASKIP2の設定がYESなので、式X + Zが計算される場合、NA値は無視されます。

INTDIM   X     Z   X + Z
------ ----- ----- -----
1         NA     2     2
2          3    NA     3
3          7     6    13

次の文は、TOTALファンクションに対するexpression引数に+(プラス)演算子を使用します。

SHOW TOTAL(x + z)

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

18

次の文は、+(プラス)演算子を使用して、2つのTOTALファンクションから返される結果を加算します。

SHOW TOTAL(x) + TOTAL(z)

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

18

- NASKIPをNO、NASKIP2をYESに設定
この例では、NASKIPがNOに設定されるので、TOTALファンクションで評価された値がNAの場合、TOTALからはNAが返されます。NASKIP2がYESに設定されるので、NA値は+(プラス)演算子によって無視されます。

NASKIP = NO
NASKIP2 = YES
REPORT LEFT W 6 DOWN intdim x, z, x + z

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

INTDIM   X     Z   X + Z
------ ----- ----- -----
1         NA     2     2
2          3    NA     3
3          7     6    13

次の文は、TOTALファンクションに対するexpression引数に+(プラス)演算子を使用します。

SHOW TOTAL(x + z)

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

18

次の文は、+(プラス)演算子を使用して、2つのTOTALファンクションから返される結果を加算します。

SHOW TOTAL(x) + TOTAL(z)

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

NA

- NASKIPをNO、NASKIPをNOに設定
この例では、NASKIPが再びNOに設定されるので、TOTALファンクションで評価された値がNAの場合、TOTALからはNAが返されます。NASKIP2もNOに設定されるので、いずれかのオペランドがNAの場合、+(プラス)演算の結果はNAです。

NASKIP = NO
NASKIP2 = NO
REPORT LEFT W 6 DOWN intdim x, z, x + z

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

INTDIM   X     Z   X + Z
------ ----- ----- -----
1         NA     2    NA
2          3    NA    NA
3          7     6    13

次の文は、TOTALファンクションに対するexpression引数に+(プラス)演算子を使用します。

SHOW TOTAL(x + z)

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

NA

次の文は、+(プラス)演算子を使用して、2つのTOTALファンクションから返される結果を加算します。

SHOW TOTAL(x) + TOTAL(z)

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

NA

NASPELL

NASPELLオプションは、出力のNA値に使用されるスペルを制御します。

データ型

TEXT

構文

NASPELL = {'text'|'NA'}

パラメータ

text

出力のNA値に使用するスペル。テキスト・リテラルではなく式を指定する場合は、一重引用符を省略できます。デフォルトはNAです。

使用上の注意

NASPELLを「0」に設定

NASPELLをテキスト文字の0(ゼロ)に設定すると、NA値は0と表示されます。ただし、計算ではNAとして処理されます。

NA値の割当て

NASPELLは、Oracle OLAP出力にのみ影響し、NA値の割当て方法には影響しません。たとえば、NASPELLをNONEに設定した場合でも、NA値を次のように割り当てます。

var1 = NA

NASPELLより優先順位の高い$NATRIGGER

Oracle OLAPは、NASPELLオプションを適用する前に$NATRIGGERプロパティ式を評価します。$NATRIGGER式がNAである場合、NASPELLオプションは有効です。

例

例5-72 NA値を「NONE」として表示

現行の月が指定されない場合は常にNA値にされるcurrent.monthという名前の変数があるとします。この場合、値をNAではなくNoneと表示されるようにできます。

NASPELLの設定がデフォルト値のNAである場合に、次のOLAP DML文

SHOW current.month

によって、次の出力が生成されます。

NA

これに対し、OLAP DML文

NASPELL = 'None'
SHOW current.month

によって、次の出力が生成されます。

None

NLS_CALENDAR

NLS_CALENDARオプションは、セッションのカレンダを指定するオプションです。

このオプションの値はセッション内で動的に変更できます。これには、次に示すOLAP DML構文を使用するか、ALTER SESSION SET option = valueというSQL文を使用します。

データ型

TEXT

構文

NLS_CALENDAR = option-value

パラメータ

有効な値などのNLSパラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

例

例5-73 暦法の変更

次の文は、NLS_CALENDARをタイ仏暦に設定します。

NLS_CALENDAR = 'THAI BUDDHA'

NLS_CURRENCY

NLS_CURRENCYオプションは、セッションのL数値書式要素に対応するローカル通貨記号を指定するオプションです。数値書式要素の詳細は、TO_NUMBERファンクションを参照してください。

このオプションの値はセッション内で動的に変更できます。これには、次に示すOLAP DML構文を使用するか、ALTER SESSION SET option = valueというSQL文を使用します。

データ型

TEXT

構文

NLS_CURRENCY = option-value

パラメータ

有効な値などのNLSパラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

NLS_DATE_FORMAT

NLS_DATE_FORMATオプションは、日時値のデフォルトの書式を指定するオプションです。

このオプションの値はセッション内で動的に変更できます。これには、次に示すOLAP DML構文を使用するか、ALTER SESSION SET option = valueというSQL文を使用します。

データ型

TEXT

構文

NLS_DATE_FORMAT = option-value

パラメータ

有効な値などのNLSパラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

例

例5-74「日付の言語の設定」を参照してください。

NLS_DATE_LANGUAGE

NLS_DATE_LANGUAGEオプションは、日、月、および言語に依存する同様な日時書式要素の言語を指定するオプションです。

このオプションの値はセッション内で動的に変更できます。これには、次に示すOLAP DML構文を使用するか、ALTER SESSION SET option = valueというSQL文を使用します。

データ型

TEXT

構文

NLS_DATE_LANGUAGE = option-value

パラメータ

有効な値などのNLSパラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

例

例5-74 日付の言語の設定

次の文は、日付の言語をスペイン語に設定し、デフォルトの日付書式を変更します。

NLS_DATE_LANGUAGE = 'SPANISH'
NLS_DATE_FORMAT = 'Month DD, YYYY'

これにより、SHOW SYSDATE文を実行するとスペイン語の日付が表示されます。

Septiembre 08, 2000

NLS_DUAL_CURRENCY

NLS_DUAL_CURRENCYオプションは、数値書式モードの文字Uの位置に入り、主にユーロ記号を指定するときに使用される、2つ目の通貨記号を指定します。(ユーロ記号をNLS_DUAL_CURRENCYの値に指定する場合は、インスタンスのキャラクタ・セットがユーロ記号をサポートしている必要があります。)

このオプションの値はセッション内で動的に変更できます。これには、次に示すOLAP DML構文を使用するか、ALTER SESSION SET option = valueというSQL文を使用します。

データ型

TEXT

構文

NLS_DUAL_CURRENCY= option-value

パラメータ

有効な値などのNLSパラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

NLS_ISO_CURRENCY

NLS_ISO_CURRENCYオプションは、C数値書式要素に対応する国際通貨記号を指定するオプションです。

このオプションの値はセッション内で動的に変更できます。これには、次に示すOLAP DML構文を使用するか、ALTER SESSION SET option = valueというSQL文を使用します。

データ型

TEXT

構文

NLS_ISO_CURRENCY = option-value

パラメータ

有効な値などのNLSパラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

NLS_LANG

(読取り専用)NLS_LANGオプションは、現行の言語、地域およびデータベース・キャラクタ・セットを指定するオプションです。セッション全体のグローバリゼーション・パラメータで決定します。

データ型

TEXT

構文

NLS_LANG

パラメータ

NLSデータベース・パラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

例

例5-75 NLS_LANGの現行値の確認

SHOW NLS_LANG文により、たとえば、次のような結果が生成されます。

AMERICAN_AMERICA.WE8ISO8859P1

NLS_LANGUAGE

NLS_LANGUAGEオプションは、セッションの現行の言語を指定するオプションです。このオプションの設定でSESSION_NLS_LANGUAGEオプションの値が決定されます。

このオプションの値はセッション内で動的に変更できます。これには、次に示すOLAP DML構文を使用するか、ALTER SESSION SET option = valueというSQL文を使用します。

データ型

TEXT

構文

NLS_LANGUAGE = option-value

パラメータ

NLSデータベース・パラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

例

例5-76 NLS_LANGUAGEの変更による影響

この例では、NLS_LANGオプションが次のように初期設定されています。

AMERICAN_AMERICA.WE8ISO8859P1

YESSPELLの値はyesです。

言語設定を次のように変更すると、

NLS_LANGUAGE = 'FRENCH'

NLS_LANGの値が次のように変更されます。

FRENCH_AMERICAN.WE8ISO8859P1

これにより、YESSPELLの値はouiになります。

NLS_NUMERIC_CHARACTERS

NLS_NUMERIC_CHARACTERSオプションは、セッション用に小数点および3桁を区切る文字を指定するオプションです。NLS_NUMERIC_CHARACTERSは、THOUSANDSCHARおよびDECIMALCHARオプションのいずれか、または両方の設定、および数値データの表示に影響を与えます。

このオプションの値はセッション内で動的に変更できます。これには、次に示すOLAP DML構文を使用するか、ALTER SESSION SET option = valueというSQL文を使用します。

データ型

TEXT

構文

NLS_NUMERIC_CHARACTERS = option-value

パラメータ

NLSデータベース・パラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

例

例5-77 小数点記号のカンマへの変更

次の文は、小数点記号をカンマに変更し、3桁区切り文字を空白に変更します。

NLS_NUMERIC_CHARACTERS = ', '

次の文の結果

show 1234.56

は、次のようになります。

1 234,56

NLS_SORT

NLS_SORTオプションは、テキストのソートまたは比較時に使用される文字値のシーケンスを指定するオプションです。NLS_SORTの値は、GT、GE、LTおよびLE演算子、SORTコマンドおよびSORTLINESファンクションに影響します。

このオプションの値はセッション内で動的に変更できます。これには、次に示すOLAP DML構文を使用するか、ALTER SESSION SET option = valueというSQL文を使用します。

データ型

TEXT

構文

NLS_SORT = option-value

パラメータ

NLS_SORTパラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

例

例5-78 バイナリ・ソートと言語ソート

wordsという名前のディメンション値は、次のとおりです。

cerveza, Colorado, cheremoya, llama, luna, lago

次の例は、バイナリ・ソートの結果を示します。

NLS_SORT = 'BINARY'
SORT words A words
STATUS words
The current status of WORDS is:
Colorado, cerveza, cheremoya, lago, llama, luna

スペイン語の言語ソートの結果は、次の順序になります。

NLS_SORT = 'SPANISH'
SORT words A words
STATUS words
The current status of WORDS is:
cerveza, cheremoya, Colorado, lago, llama, luna

スペイン語の拡張言語ソートの結果は、次の順序になります。

NLS_SORT = 'XSPANISH'
SORT words A words
STATUS words
The current status of WORDS is:
cerveza TO cheremoya, lago TO llama

NLS_TERRITORY

NLS_TERRITORYオプションは、セッションの現行の領域を指定するオプションです。

このオプションの値はセッション内で動的に変更できます。これには、次に示すOLAP DML構文を使用するか、ALTER SESSION SET option = valueというSQL文を使用します。

データ型

TEXT

構文

NLS_TERITORRY = option-value

パラメータ

NLSデータベース・パラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

例

例5-79 NLS_TERRITORYの変更による影響

この例では、NLS_LANGオプションが次のように初期設定されています。

AMERICAN_AMERICA.WE8ISO8859P1

3桁区切り文字はカンマ(,)で、小数点記号はピリオド(.)です。

SHOW TO_NUMBER('12345')
12,345.00

地域設定を次のように変更すると、

NLS_TERRITORY = 'FRANCE'

NLS_LANGの値が次のように変更されます。

AMERICAN_FRANCE.WE8ISO8859P1

これにより、3桁区切り文字はピリオド(.)に、小数点記号はカンマ(,)になります。

SHOW TO_NUMBER('12345')
12.345,00

NOSPELL

(読取り専用)NOSPELLオプションは、OLAP DML文の出力に存在するFALSEブール値に使用されるテキストを保持します。

NOSPELLオプションの値は、NLS_LANGUAGEオプションで指定される現行の言語で「no」に対応する語です。たとえば、NLS_LANGUAGEの設定が「American」である場合、NOSPELLのデフォルト値はNOです。

データ型

TEXT

構文

NOSPELL

例

例5-80 NOSPELLオプションの効果の確認

現在の値がNOであるBOOLVARという変数があるとします。NLS_LANGUAGEオプションで指定した言語で「no」に対応する語が「non」である場合、

SHOW boolvar

によって、次の出力が生成されます。

non

OKFORLIMIT

OKFORLIMITオプションは、明示的なFORループの内側でループしているディメンションを制限できるかどうかを制御します。

ヒント:
REPORT文で生成されるループでループしているディメンションのステータスを設定するには、TEMPSTAT文を使用してください。

データ型

BOOLEAN

構文

OKFORLIMIT = {NO|YES}

パラメータ

NO

(デフォルト)明示的なFORループの内側でループしているディメンションを制限できません。

YES

明示的なFORループの内側でループしているディメンションを制限できます。

例

例5-81 ループ内部での制限の許可

次のプログラムの抜粋はOKFORLIMITをYESに設定するので、ユーザーはFORループの内部でmarketを制限できます。

...
OKFORLIMIT = YES
FOR market
DO
LIMIT market TO CHILDREN USING market.market
REPORT market
DOEND
...

OKNULLSTATUS

OKNULLSTATUSオプションは、Oracle OLAPでディメンション・ステータス・リストのNULLの設定を許可するかどうかを決定します。デフォルトでは、空のステータス・リストは許可されません。NULLステータス・リストが許可されない場合、結果がNULLステータス・リストになるLIMITコマンドを実行すると、Oracle OLAPはエラー・メッセージを生成します。

データ型

BOOLEAN

構文

OKNULLSTATUS = {YES|NO}

パラメータ

YES

NULLステータス・リストが許可されることを示します。この設定では、ディメンション・ステータス・リストの結果がNULLになるLIMITコマンドを(IFNONE引数を指定せずに)実行すると、ステータス・リストはNULLに設定され、エラー・メッセージは生成されません。

NO

(デフォルト)NULLステータス・リストが許可されないことを示します。この設定では、ディメンション・ステータス・リストの結果がNULLになるLIMITコマンドを(IFNONE引数とNULLキーワードを指定せずに)実行すると、ステータス・リストは変更されず、エラー・メッセージが生成されます。

使用上の注意

OKNULLSTATUSに効果がない場合

次の状況では、OKNULLSTATUSの値に効果はありません。

- LIMITコマンドにIFNONE引数が指定されている場合。

- LIMITコマンドにNULLキーワードが指定され、ディメンション・ステータス・リストがNULLに設定される場合。

- LIMITコマンドによって値セットがNULLに設定される場合(ただし、IFNONE引数を使用していないとき)。OKNULLSTATUSがNOの場合でも、値セットはNULLに設定され、エラー・メッセージは生成されません。

- NULLのディメンション・ステータス・リストを返すようにLIMITファンクションが指定されている場合。OKNULLSTATUSがNOの場合でも、返される値はNAであり、エラー・メッセージは生成されません。

ディメンションおよび値セットでのNULLステータスの使用の詳細は、LIMITコマンドを参照してください。

例

例5-82 OKNULLSTATUSの使用

次の文は、ディメンションのNULLステータスに関するエラー・メッセージを表示せずにディメンション・ステータス・リストをNULLに設定できるようにします。

OKNULLSTATUS = YES

OUTFILEUNIT

(読取り専用)OUTFILEUNITオプションは、最後のOUTFILE文によって設定された現在のOUTFILE出力先のファイル・ユニット番号を保持します。出力を指定のファイルに最初にリダイレクトしたとき、OUTFILEはそのファイルにファイル・ユニット番号として任意のINTEGERを割り当てます。

データ型

INTEGER

構文

OUTFILEUNIT

使用上の注意

OUTFILEとOUTFILEUNIT

OUTFILE文に対して異なるファイルを指定するたびに、OUTFILEUNITの設定は自動的に変更されます。たとえば、OUTFILE myfilenameという文を実行すると、OUTFILEUNITの値はmyfilenameに割り当てられたファイル・ユニット番号になります。

例

例5-83 FILEQUERYでのOUTFILEUNITの使用

ファイルのファイル・ユニット番号をfilenumという名前の変数に保存しているとします。現行の出力ファイルは別のディスク・ファイルです。最初のファイルのPAGEPRGの値を現行の出力ファイルのPAGEPRGの値に設定することにします。現行の出力ファイルのファイル・ユニット番号はOUTFILEUNITオプションに含まれるので、FILEQUERYとOUTFILEUNIT番号を組み合せて指定すると、現行の出力ファイルのPAGEPRG設定を取得できます。

FILESET filenum PAGEPRG FILEQUERY(OUTFILEUNIT PAGEPRG)

PAGENUM

PAGENUMオプションは、出力の現行ページ数を保持します。PAGENUMとPAGEPRGを組み合せて使用すると、レポートの各ページにページ番号を付けることができます。PAGENUMオプションは、PAGINGの設定がYESの場合にのみ有効であり、REPORTやLISTNAMESなどの文からの出力に対してのみ適用されます。

データ型

INTEGER

構文

PAGENUM = n

パラメータ

n

出力の次のページに使用するページ番号を指定するINTEGER式。デフォルトは1です。

使用上の注意

1ページからの開始

出力をデフォルトの出力ファイルに送信する場合、レポートの生成を1ページから開始するには、必ずPAGENUMとLINENUMの両方を1に設定します。これらのオプションは、レポート・プログラムの初期化セクションで設定できます。OUTFILE文を使用して出力をファイルに送信すると、PAGENUMは自動的に1に設定されます。

ページ途中でのPAGENUMの設定

PAGENUMの値は、出力の最後の行がページ上に生成されると自動的に増分されます。出力ページの表示がページの途中で終了する場合にPAGENUMを設定すると、次のページが生成される前にPAGENUMの値が1つ増分されます。したがって、通常、次のページに表示するページ番号より1少ない値にPAGENUMの値を設定する必要があります。

PAGENUMでのPAGINGの効果

PAGINGをNOに設定すると、PAGENUMによるカウントは停止し、最後の値が保持されます。PAGINGをYESに再設定すると、中断した箇所のページ番号からPAGENUMによるカウントが再開されます。

PAGENUMでのOUTFILEの効果

OUTFILE文を使用して出力をファイルに送信すると、PAGENUMはそのファイルに対して1に設定されます。OUTFILE文とEOFキーワードを組み合せて使用して出力をデフォルトの出力ファイルにリダイレクトすると、PAGENUMに入るページ番号は、デフォルトの出力ファイルに最後に保持された番号です。

例

例5-84 2ページ目のヘッダーの変更

レポートの各ページに、標準的に表示されるページ・ヘッダーとカスタムのタイトルを設定し、2ページ目以降には「(Continued)」というヘッダーも追加することにします。PAGENUM値を使用して「(Continued)」ヘッダーを追加する条件を判別する、report.headという名前のページ・ヘッダー・プログラムを定義できます。

DEFINE report.head PROGRAM
PROGRAM
STDHDR
BLANK
PAGING = YES
HEADING WIDTH LSIZE CENTER 'Annual Sales Report'
BLANK
IF PAGENUM GT 1
THEN HEADING WIDTH LSIZE CENTER '(Continued)'
BLANK
END

レポート・プログラムで、PAGEPRGオプションを設定してreport.headプログラムを使用します。

PAGEPRG = 'report.head'

レポート・プログラムを実行すると、2ページ目以降の各ページに次のようなヘッダーが先頭に表示されます。

15JAN95 15:05:16                                      Page  2
Annual Sales Report

(Continued)

PAGEPRG

PAGEPRGオプションは、出力の各ページの先頭で実行されるプログラムの名前または文のテキストを保持します。そのプログラムまたは文を使用して、レポートの複数ページでタイトルおよび列ヘッダーを作成できます。プログラムには、各ページの先頭で実行するのに適した他の文も含めることができます。通常、PAGEPRGの値は、レポート・プログラムの初期化セクションで設定します。

PAGEPRGオプションは、PAGINGの設定がYESの場合にのみ有効であり、REPORTやLISTNAMESなどの文からの出力に対してのみ適用されます。

データ型

TEXT

構文

PAGEPRG = {'program'|'statement'|'NONE'|'STDHDR'}

パラメータ

program

改ページの後に毎回実行されるプログラムの名前。プログラム名をテキスト式として指定する場合、一重引用符を省略できます。

statement

改ページの後に毎回実行される文のテキスト。文をテキスト式として指定する場合、一重引用符を省略できます。

NONE

改ページ後に自動的に実行される文またはプログラムがないことを指定します。

STDHDR

(デフォルト)PAGEPRGによって格納されるプログラムの名前をSTDHDRにします。PAGEPRGの設定を'DEFAULT'にしても、PAGEPRGによって格納されるプログラムの名前をSTDHDRにできます。STDHDRを指定すると、左に日付および時刻、右にページ番号のヘッダーが作成されます。

使用上の注意

PAGPRGプログラムでのSTDHDRプログラムの使用

PAGEPRGプログラムを作成する場合、STDHDRプログラムをPAGEPRGプログラムの1行として含めることができます。通常、STDHDRを置く位置は、カスタム・ヘッダーを生成する他の文の前にします。例5-85「カスタム・ヘッダーの作成」を参照してください。

ヘッダー情報を最新状態に保持

TODAY、TODおよびPAGENUMなどのOracle OLAP機能は、PAGEPRGオプションで指定したプログラム内で使用できます。特定のレポートのタイトルなどの引数を受け入れるヘッダー・プログラムを用意することもできます。この場合、引数が設定されたレポート・ヘッダー・プログラムを起動するテキスト式にPAGEPRGオプションを設定します。例5-86「プログラム引数の使用」を参照してください。

ファイルに対するPAGEPRGの設定

ファイルに対してPAGEPRGを設定するには、最初にOUTFILE文でファイルの名前を指定して現行の出力ファイルにしてから、PAGEPRGを目的の値に設定します。新しい値は、リセットするまで、またはOUTFILE文を使用して、出力を送信する出力ファイルを別のファイルに変更するまで有効です。出力先を別の出力ファイルに変更すると、そのファイルに対してPAGEPRGは'STDHDR'のデフォルト値に戻ります。

PAGEPRGをデフォルトの出力ファイルに対して設定すると、出力をファイルに送信するOUTFILEコマンドが介在しているかどうかにかかわらず、新しい値はリセットするまで有効です。つまり、PAGEPRGの値はデフォルトの出力ファイルに対して自動的に保存されます。

例

例5-85 カスタム・ヘッダーの作成

レポートの各ページに、標準的に表示されるページ・ヘッダーおよびタイトル「Annual Sales Report」を含めることにします。このために、report.headという名前のプログラムを作成します。

DEFINE report.head PROGRAM
PROGRAM
STDHDR
BLANK
HEADING WIDTH LSIZE CENTER 'Annual Sales Report'
BLANK
IF PAGENUM GT 1
THEN HEADING WIDTH LSIZE CENTER '(Continued)'
BLANK
END

レポート・プログラムにPAGEPRGオプションを設定することにより、改ページの後に毎回このプログラムを実行することを指定します。PUSHコマンドとPOPコマンドを含めることにより、アクティブなPAGEPRG設定を保存できます。

PUSH PAGEPRG PAGING
PAGEPRG = 'report.head'
PAGING = YES
... (body of report program)
POP PAGEPRG PAGING

レポート・プログラムを実行すると、各ページに次のヘッダーが挿入されます。

15JAN98  15:05:16                                      Page 1

Annual Sales Report

2ページ目以降には、サブヘッダー「(Continued)」も挿入されます。これはIF文にPAGENUMテストがあるためです。

例5-86 プログラム引数の使用

report.headプログラムにレポート名を指定する別の方法として、レポート名をレポート・プログラムからreport.headプログラムに渡すことができます。これを行うには、引数としてレポート名を指定したreport.headプログラムを起動するテキスト式にPAGEPRGオプションを設定します。レポート・プログラムには次の文が含まれているとします。

PAGEPRG = 'CALL report.head(\'Annual Sales Report\')'

この場合、report.headプログラムの最初の数行を次のように変更できます。

ARGUMENT titlevar TEXT
STDHDR
BLANK
HEADING WIDTH LSIZE CENTER titlevar

PAGESIZE

PAGESIZEオプションは、出力の1ページのサイズを指定します。PAGESIZEの値は、各ページに生成される出力の行数です。PAGESIZEは、通常、レポート・プログラムの初期化セクションで使用します。PAGESIZEオプションは、PAGINGの設定がYESの場合にのみ有効であり、REPORTやLISTNAMESなどの文からの出力に対してのみ適用されます。PAGESIZEではLINELEFTオプションも制御されます。PAGESIZEを変更すると、それに応じてLINELEFTも調整されます。

関連項目:
PAGEコマンド、PAGINGオプションおよびLINESLEFTオプション

データ型

INTEGER

構文

PAGESIZE = n

パラメータ

n

1ページの出力行の数を指定するINTEGER式で、nには、上下マージン(TMARGINオプションおよびBMARGINオプションで制御)が含まれます。デフォルト値は66行で、この値は、8.5インチ×11インチの紙にレポート出力を印刷するのに適しています。

使用上の注意

標準のヘッダーおよびデフォルト設定を使用した使用可能な出力行

標準のヘッダー、およびPAGESIZE、TMARGIN、BMARGINの各オプションのデフォルト設定を使用した場合、使用可能な出力行の数の合計は61行です。

Output Lines
Lines from PAGESIZE                     66
Lines for TMARGIN                      - 2
Lines for the standard heading         - 2
Lines for BMARGIN                      - 1
Lines available for output              61

ヘッダーと改ページの削除

ヘッダーのないページを出力するには、文PAGEPRG='NONE'を使用します。改ページを完全に抑制するには、文PAGING = NOを使用します。

ファイルに対するPAGESIZEの設定

ファイルに対してPAGESIZEを設定するには、最初にOUTFILE文でファイルの名前を指定して現行の出力ファイルにしてから、PAGESIZEを目的の値に設定します。新しい値は、リセットするまで、またはOUTFILE文を使用して、出力を送信する出力ファイルを別のファイルに変更するまで有効です。出力先を別の出力ファイルに変更すると、そのファイルに対してPAGESIZEは66のデフォルト値に戻ります。

PAGESIZEをデフォルトの出力ファイルに対して設定すると、出力をファイルに送信するOUTFILEコマンドが介在しているかどうかにかかわらず、新しい値はリセットするまで有効です。つまり、PAGESIZEの値はデフォルトの出力ファイルに対して自動的に保存されます。

例

例5-87 リーガル・サイズ用紙への印刷

この例では、リーガル・サイズ用紙(14×8.5インチ)にレポートを生成します。レポート・プログラムの初期化セクションに次の文を含めます。

PAGESIZE = 84

PAGING

PAGINGオプションは、Oracle OLAPにおけるページ化される出力の生成を制御します。PAGINGをYESに設定すると、DESCRIBE、REPORT、ROWコマンド、HEADING、SHOW、LISTNAMESなどの文からの出力がページ向け書式で生成されます。出力は、標準の上下マージンおよびヘッダーとともにページサイズに分けられて生成されます。様々なページング関連オプションを使用すると、各ページのサイズ、マージンのサイズおよびヘッダーを変更できます。

特に、ファイルに送信する出力を印刷する場合、ページングによってより見やすくできます。また、ページ化された出力をデフォルトの出力ファイルに送信することもできます。通常は、PAGINGオプションをレポート・プログラムの初期化セクションで設定し、レポートのページングをオンにします。

データ型

BOOLEAN

構文

PAGING = {YES|NO}

パラメータ

YES

改ページ、上下マージンおよびページ・ヘッダー付きの出力を生成します。

NO

(デフォルト)改ページ、上下マージンおよびページ・ヘッダーを含まない出力を生成します。各行が切れ目なく出力されます。

使用上の注意

ファイルに対するPAGINGの設定

ファイルに対してPAGINGを設定するには、最初にOUTFILE文でファイルの名前を指定して現行の出力ファイルにしてから、PAGINGを目的の値に設定します。新しい値は、リセットするまで、またはOUTFILE文を使用して、出力を送信する出力ファイルを別のファイルに変更するまで有効です。出力先を別の出力ファイルに変更すると、そのファイルに対してPAGINGはNOのデフォルト値に戻ります。

PAGINGをデフォルトの出力ファイルに対して設定すると、出力をファイルに送信するOUTFILEコマンドが介在しているかどうかにかかわらず、新しい値はリセットするまで有効です。つまり、PAGINGの値はデフォルトの出力ファイルに対して自動的に保存されます。

ページング関連オプション

Oracle OLAPは、ページ長、ページ・ヘッダーおよび上下マージンに対してデフォルト値を使用します。これらの値を変更するには、PAGESIZE、PAGEPRG、TMARGIN、BMARGINの各オプションを設定します。PAGINGをYESに設定したときに有効になるこの他のページング・オプションには、LINENUM、LINELEFTおよびPAGENUMがあります。

現行の出力ファイルのPAGINGの値は、ページング関連オプションを使用するかどうかを決定します。ページング・オプションを有効にするには、現行の出力ファイルに対してPAGINGをYESに設定する必要があります。

PAGINGのオン/オフの切替え

PAGINGのオン/オフを切り替えると、ページング・オプションに次の効果があります。

- PAGINGをオン(YES)からオフ(NO)に切り替える場合

- LINENUMオプションの値は出力行の生成数に応じて増加します。

- LINELEFTオプションはPAGESIZEに設定されます。

- PAGENUMオプションによるカウントは停止し、現行値が保持されます。

- PAGINGをオフ(NO)からオン(YES)に切り替える場合

- LINENUMが1に設定され、現行ページの行数のカウントが開始されます。

- LINELEFTによって、現行ページの残り行数のカウントが開始されます。

- 中断した箇所のページ番号からPAGENUMによるカウントが再開されます。

出力ファイルの変更

OUTFILE文を使用して出力をファイルに送信すると、ファイルに対するすべてのページング関連オプションがデフォルト値に設定されます。OUTFILE文とEOFキーワードを組み合せて使用して出力をデフォルトの出力ファイルにリダイレクトすると、ページング関連オプションの値は、デフォルトの出力ファイルに最後に保持された値になります。

例

例5-88 ページング・オプションの設定

レポート・プログラムの作成時に改ページおよび上部余白を制御するとします。プログラムの初期化セクションに次の数行を含めます。これらの行は、出力をrepfile.txtという名前のファイルに送信し、PAGINGオプションをオンにし、ページ・サイズおよび上部余白を変更します。

OUTFILE 'repfile.txt'
PAGING = YES
PAGESIZE = 84
TMARGIN = 6

PARENS

PARENSオプションは、負数を出力で表示する場合、カッコまたはマイナス記号を付けるかどうかを制御します。

データ型

BOOLEAN

構文

PARENS = {YES|NO}

パラメータ

YES

負数をカッコで囲み、マイナス記号を使用しません。

NO

(デフォルト)マイナス記号を使用して負数を表示します。

使用上の注意

PARENSの変更

PARENSオプションの設定は、HEADING、REPORTまたはROWコマンドのPAREN属性またはNOPAREN属性によって変更されます。PAREN属性はカッコの使用を指定し、NOPAREN属性はマイナス記号の使用を指定します。

カッコのための領域の確保

レポート内で負数をカッコを使用して表現する場合、Oracle OLAPは正数および負数の列を揃えます。このため、各数値列の右端の文字が閉じカッコのために予約されます。出力に負数がない場合でも、この列が常に予約されます。その結果、マイナス記号を使用する場合より各値に必要な領域が増加するため、データが収まるように列幅を増やす必要があることがあります。

例

例5-89 カッコによる負数の表示

レポートで負数をカッコで表示するため、最初にPARENSをYESに設定します。

LIMIT line TO 'Cogs'
LIMIT division TO 'Sporting'
LIMIT month TO 'Jan96' TO 'Jun96'
PARENS = YES
DECIMALS = 0
REPORT DOWN month budget actual budget-actual

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

DIVISION: SPORTING
--------------LINE--------------
--------------COGS--------------
BUDGET-ACT
MONTH            BUDGET     ACTUAL      UAL
-------------- ---------- ---------- ----------
Jan96            279,773    287,558     (7,785)
Feb96            323,982    315,299      8,683
Mar96            302,178    326,185    (24,007)
Apr96            386,101    394,544     (8,443)
May96            433,998    449,862    (15,864)
Jun96            448,042    457,348     (9,305)

PERMITERROR

PERMITERRORオプションは、PERMIT文によって読取り権限や書込み権限が拒否されている変数がアクセスされたときに、エラーを通知するかどうかを制御します。

関連項目:
「起動プログラム」、PERMITREADERRORオプション、PERMITコマンドおよびPERMITRESETコマンド

データ型

BOOLEAN

構文

PERMITERROR = NO | YES

パラメータ

NO

PERMITERRORをNOに設定すると、PERMIT文によって読取り権限や書込み権限が拒否されている変数がアクセスされたときにエラー条件は発生しません。読取り権限のない値は、NAと表示されます。書込み権限のない値を変更しようとすると、その要求は無視されます。

YES

(デフォルト)PERMITERRORがYESである場合、PERMIT文によって読取り権限や書込み権限が拒否されている変数がアクセスされるとエラーが通知されます。このエラーはトラップできますが、このエラーにより、無効なアクセスを開始したOracle OLAP操作は終了します。

使用上の注意

非データ・オブジェクトに対するPERMITERROR

プログラム、モデル、値セットなど、非データ・オブジェクトに対する権限の違反については、PERMITERRORの設定は無視されます。権限がある変数およびリレーションにディメンション性があるかどうかにかかわらず、これらにアクセスしようとした場合、常にPERMITERRORの設定の影響を受けます。

ディメンションのメンテナンス

PERMITERRORの設定は、メンテナンス権限や許可権限の違反については無視されます。ディメンションをメンテナンスする権限および権限を変更する権限に違反しようとすると、常にエラーとして処理されます。同様に、ディメンションに対する読取り権限または書込み権限に違反しようとした場合も、常にエラーとして処理されます。

完全な権限のないデータの取得

PERMITERRORの設定がYESであり、読取り権限のない値が含まれるディメンション化された変数をフェッチしようとした場合、これらの値のうち最初の値が検出されたときにエラー条件が発生します。レポートを作成する前に、許容される値のみがステータスにあるように前もってディメンションを制限するか、PERMITERRORをNOに設定することによって、エラー条件の発生を防止できます。

例

例5-90 完全な権限のないレポート

次の例では、price変数の読取り権限に制約があるために、Tents以外のproductの値については価格データを参照できません。ただし、PERMITERRORをNOに設定すると、エラー条件を発生させることなく、1996年12月のprice変数のレポートを生成できます。

PERMITERROR = no
DESCRIBE price

この文の出力は次のとおりです。

DEFINE PRICE VARIABLE DECIMAL <MONTH PRODUCT>
LD Wholesale Unit Selling Price
PERMIT READ WHEN product eq 'Tents'

次の文

LIMIT month TO 'Dec96'
REPORT price

によって、次の出力が生成されます。

----PRICE----
----MONTH----
PRODUCT               DEC96
----------------  -------------
Tents                  165.64
Canoes                     NA
Racquets                   NA
Sportswear                 NA
Footwear                   NA

次の文

PERMITERROR = yes
REPORT price

によって、次のエラーが生成されます。

ERROR: You do not have permission to read this value of PRICE

さらに、次の出力が生成されます。

---PRICE---
---MONTH---
PRODUCT             DEC96
---------------  -----------
Tents                165.64

PERMITREADERROR

PERMITREADERRORオプションは、PERMIT文によって読取り権限や書込み権限が拒否されている変数、値セット、式またはリレーションの読取りが行われたときに、エラーを通知するかどうかを制御します。

関連項目:
「起動プログラム」、PERMITERRORオプション、PERMITコマンドおよびPERMITRESETコマンド

データ型

BOOLEAN

構文

PERMITREADERROR = NO | YES

パラメータ

NO

(デフォルト)PERMITREADERRORの値がYESである場合、PERMIT文によって読取り権限や書込み権限が拒否されている変数、値セット、式またはリレーションがアクセスされたときにエラー条件は発生しません。読取り権限のない値は、NAと表示されます。書込み権限のない値を変更しようとすると、その要求は無視されます。

YES

PERMITERRORがYESである場合、PERMIT文によって読取り権限や書込み権限が拒否されている変数、値セット、式またはリレーションの読取りが行われるとエラーが通知されます。このエラーはトラップできますが、このエラーにより、無効なアクセスを開始したOracle OLAP操作は終了します。

PRGTRACE

PRGTRACEオプションは、プログラムの実行時に、プログラムの各行が現行の出力ファイルまたはデバッグ・ファイルに記録されるかどうかを制御します。PRGTRACEは、プログラムの実行をトレースすることによって問題を検出するためのデバッグ・ツールとして主に使用されます。

OLAP DML文として提供されるOLAP DMLプログラムは、EXPTRACEの設定がYESでないかぎり、トレースされません。

DBGOUTFILE文を使用してデバッグ・ファイルを指定した場合、PRGTRACEの出力は現行の出力ファイルではなくデバッグ・ファイルに送信されます。

データ型

BOOLEAN

構文

PRGTRACE = {YES|NO}

パラメータ

YES

プログラムの各行は、実行される前に記録されます。

NO

(デフォルト)プログラムの各行は記録されません。

使用上の注意

PRGTRACEの出力

PRGTRACEでは、現行プログラムの名前が各プログラム行の先頭に記録されます。コンパイル済の行を示すには、等号が挿入されます。

(PRG= SALESREP) . . .

未コンパイルの行を示すには、コロンが挿入されます。

(PRG: SALESREP) . . .

コンパイル済の行は、効率的な内部形式に変換された行であるのに対して、未コンパイルの行は変換されていません。Oracle OLAPでは、プログラム(特にループが含まれるプログラム)がより効率的に動作するように、通常はコンパイル済の形式で行を格納します。

未コンパイルのプログラム行

Oracle OLAPは、プログラムをコンパイルしてから実行します。したがって、PRGTRACEの出力で未コンパイルとマークされる行は、アンパサンド置換が記述された行などのコンパイルできない行に限定されます。

例

例5-91 プログラム実行のトレース

単純な予算レポートを生成するsalesrepという名前のプログラムがあるとします。

DEFINE salesrep PROGRAM
PROGRAM
PUSH month division line
TRAP ON cleanup
LIMIT month TO &ARGS
LIMIT division TO ALL
LIMIT line TO FIRST 1
REPORT DOWN division across month: dec 0 budget

cleanup:
POP month division line
END

このプログラムをデバッグする場合、PRGTRACEをオンにしてからプログラムを実行し、プログラムの各行の実行をトレースします。

PRGTRACE = yes
salesrep FIRST 3

PRGTRACEにより、現行の出力ファイルまたはデバッグ・ファイルに次の出力が生成されます。

(PRG= SALESREP) push month division line
(PRG= SALESREP) trap on cleanup
(PRG: SALESREP) limit month to &args
(PRG= SALESREP) limit division to all
(PRG= SALESREP) limit line to first 1
(PRG= SALESREP) report down division across month: dec0 budget
LINE: REVENUE
-------------BUDGET-------------
-------------MONTH--------------
DIVISION         JAN95      FEB95      MAR95
-------------- ---------- ---------- ----------
CAMPING          679,149    707,945    780,994
SPORTING         482,771    517,387    525,368
CLOTHING         983,888  1,016,528    992,331
(PRG= SALESREP) cleanup:
(PRG= SALESREP) pop month division line

RANDOM.SEED.1およびRANDOM.SEED.2

RANDOM.SEED.1オプションおよびRANDOM.SEED.2オプションは、乱数の計算時にRANDOMによって使用される値を指定します。RANDOMは、数値を計算するためにオプションRANDOM.SEED.1およびRANDOM.SEED.2を使用し、その後で次回の値を変更します。

アプリケーション・プログラムの開発およびデバッグ時に同じ乱数列を再生成する場合、RANDOMを使用する前にRANDOM.SEED.1およびRANDOM.SEED.2を特定の値に設定します。

データ型

INTEGER

構文

RANDOM.SEED.1|RANDOM.SEED.2 = n

パラメータ

n

乱数を生成するときに使用する値を指定するINTEGER式。RANDOM.SEED.1のデフォルト値は12345、RANDOM.SEED.2のデフォルト値は1073です。

使用上の注意

同じ乱数列の再生成

例8-64「乱数の生成」に示されているように、アプリケーション・プログラムの開発およびデバッグ時に同じ乱数列を再生成する場合、RANDOMを使用する直前にRANDOM.SEED.1およびRANDOM.SEED.2を特定の値に設定します。その数列を繰り返し生成するには、RANDOMを再び使用する直前にこれらのオプションを同じ値に設定します。これにより、作成したプログラムの動作が異なる場合、乱数列の相違ではなくプログラムの相違が原因であることがわかります。

例

例5-92 テストのためのRANDOMの明示的なシード指定

アナリティック・ワークスペースに次のディメンションおよび変数があるとします。

DEFINE id DIMENSION TEXT
DEFINE myvar VARIABLE INTEGER <id>

次のコードに示すとおり、最初にシード指定せずにRANDOMを使用してmyvarを移入します。RANDOMが実行されるたびに異なる値がOracle OLAPによってmyvarに移入されます。

myvar = 0
myvar = RANDOM (10, 20)
REPORT myvar

ID               MYVAR
-------------- ----------
a1                     11
a2                     19
a3                     14

myvar = 0
myvar = RANDOM (10, 20)
REPORT myvar

ID               MYVAR
-------------- ----------
a1                     16
a2                     13
a3                     12

次に、myvarに対して予測可能な値を作成するRANDOMを使用するテストを記述します。次のコードに示すように、RANDOMの結果がその時々で同じになるようにするには、RANDOM.SEED.1およびRANDOM.SEED.2の値をRANDOMの実行直前に設定する必要があります。

myvar = 0
RANDOM.SEED.1 = 5
RANDOM.SEED.2 = 3
myvar = RANDOM (10, 20)
REPORT myvar

ID               MYVAR
-------------- ----------
a1                     10
a2                     16
a3                     13

myvar = 0
RANDOM.SEED.1 = 5
RANDOM.SEED.2 = 3
myvar = RANDOM (10, 20)
REPORT myvar

ID               MYVAR
-------------- ----------
a1                     10
a2                     16
a3                     13

RANDOM.SEED.1およびRANDOM.SEED.2に対して設定した値は、セッション全体を通して同じ値に保たれるわけではありません。次のコードに示すように、実行直前に毎回同じ値をシード指定しなかった場合、RANDOMによって生成される値は同じにはなりません。

myvar = 0RANDOM.SEED.1 = 5
RANDOM.SEED.2 = 3
myvar = RANDOM (10, 20)
REPORT myvar

ID               MYVAR
-------------- ----------
a1                     10
a2                     16
a3                     13

myvar = 0
myvar = RANDOM (10, 20)
REPORT myvar

ID               MYVAR
-------------- ----------
a1                     11
a2                     16
a3                     20

RECURSIVE

RECURSIVEオプションは、計算式または$NATRIGGER式がそれ自身をコールする機能を制御します。

構文

RECURSIVE = {YES|NO}

パラメータ

YES

YESを指定すると、計算式または$NATRIGGER式がそれ自身をコールできます。計算の再帰法を使用する計算式または$NATRIGGERプロパティの式を定義する場合に、このオプションをYESに設定します。

NO

(デフォルト)NOを指定すると、計算式または$NATRIGGER式がそれ自身をコールできません。再帰的計算式または$NATRIGGER式を評価しようとすると、RECURSIVEオプションが現在NOに設定されていることを示すエラー・メッセージが表示されます。ワークスペースに再帰的計算式または$NATRIGGER式が格納されるまで、無限ループ動作を引き起こす可能性のあるエラーを検出するために、このオプションはNOに設定したままにしてください。

使用上の注意

計算式および$NATRIGGER式のみが対象

RECURSIVEをYESに設定した場合、計算式および$NATRIGGERプロパティ式のみが影響を受けます。このオプションはプログラムには影響せず、つまり、プログラムが$NATRIGGER式でないかぎり、RECURSIVEオプションの設定にかかわらず、プログラムは再帰的に実行できます。$NATRIGGER式は、RECURSIVEオプションがYESでないかぎり、それ自身をコールできません。

$NATRIGGERの再帰の制限

TRIGGERMAXDEPTHオプションを設定すると、$NATRIGGERプロパティ式の再帰の深さを制限でき、このオプションでは、同時に実行される$NATRIGGER式の最大数が設定されます。

ROLE

(読取り専用)ROLEオプションは、Oracle OLAPセッションを実行中のユーザーIDに関連付けられているOracle Databaseロールのリストを保持します。

データ型

TEXT

構文

ROLE

例

例5-93 グループまたはロールのリスト表示

次の文は、現行セッションのユーザーIDに関連付けられているロールのリストを表示します。

SHOW ROLE

ROOTOFNEGATIVE

ROOTOFNEGATIVEオプションは、負数の根を取得しようとした場合の結果を決定します。

データ型

BOOLEAN

構文

ROOTOFNEGATIVE = YES|NO

パラメータ

YES

負数の根の取得が許可されます。したがって、負数の根を取得しようとする文は、エラーにならずに実行されますが、その結果はNAになります。ディメンション化された変数または式を使用する場合、ROOTOFNEGATIVEをYESに設定すると、負数の値が少ないときには式のほとんどの値の根を取得できます。

NO

(デフォルト)負数の根の取得が許可されません。負数の根を取得しようとする文は実行が停止し、エラー・メッセージが生成されます。

使用上の注意

非整数での累乗

数値を非整数で累乗すると(たとえば、5 ** 0.3や14 ** 2.7)、根が取得されます。

例

例5-94 ROOTOFNEGATIVEの影響

次の例は、ROOTOFNEGATIVEオプションの値を変更したことによる影響を示します。変数TESTNUMBERは値-56を持ちます。次のように、ROOTOFNEGATIVEオプションをデフォルト値NOのままSHOW文を実行すると、平方根を取得しようとした結果、エラー・メッセージが生成されます。

SHOW SQRT(testnumber)

ROOTOFNEGATIVEをYESに変更すると、同じ文がエラーにならずに実行されます。

ROOTOFNEGATIVE = YES
SHOW SQRT(testnumber)

次の結果が生成されます。

NA

SECONDS

(読取り専用)SECONDSオプションは、1970年1月1日以降の秒数を保持します。プログラムの高速化を目指す場合に、SECONDSを使用することにより、プログラムが実行されている間の実際の経過秒数がわかります。

データ型

INTEGER

構文

SECONDS

例

例5-95 SECONDSを使用したプログラムの時間測定

次のプログラムを実行すると、プログラム開始時のSECONDSの値がt1という変数に書き込まれ、次にt1とプログラム実行後のSECONDSの値との差が表示されます。

DEFINE prodsummary PROGRAM
PROGRAM
VARIABLE t1 INTEGER
t1 = seconds
LIMIT product TO ALL
BLANK
FOR product
DO
ROW WIDTH 16 name.product ACROSS month Jun96: DECIMAL 0 LSET -
'$'WIDTH 18 <RSET ' (actual)' sales RSET ' (plan)' sales.plan>
DOEND
BLANK
ROW WIDTH 35 LSET 'the program took ' RSET ' SECOND(s).' -
(SECONDS-t1)
END

このプログラムを実行すると、次の結果が生成されます。

3-Person Tents     $95,121 (actual)     $80,138 (plan)
Aluminum Canoes   $157,762 (actual)    $132,931 (plan)
Tennis Racquets    $97,174 (actual)     $84,758 (plan)
Warm-up Suits      $79,630 (actual)     $73,569 (plan)
Running Shoes     $153,688 (actual)    $109,219 (plan)

The program took 2 second(s).

SESSCACHE

SESSCACHEオプションは、通常デバッグ時のみ使用し、「Oracle OLAPセッション・キャッシュの概要」で説明するOracle OLAPセッション・キャッシュをOracle OLAPが作成するかどうかを制御します。

データ型

BOOLEAN

構文

SESSCACHE = {YES|NO}

パラメータ

YES

「Oracle OLAPセッション・キャッシュの概要」で説明されているデータを保持するために、セッション・キャッシュが作成されます。

NO

Oracle OLAPは、セッション・キャッシュの読取りおよび書込みを実行しません。NOを指定した場合、1つ以上のaggmapオブジェクトの仕様にCACHE SESSION文をコーディングすること、1つ以上の$VARCACHEプロパティをSESSIONに設定すること、またはVARCACHEオプションをSESSIONに設定することによってキャッシュを指定しても、キャッシュは実行されません。

使用上の注意

Oracle OLAPセッション・キャッシュの概要

Oracle OLAPセッション・キャッシュとは、次の情報を保持するために使用されるメモリー内の特別な場所です。

- 次の状況でAGGREGATEファンクションが実行されたときに即時計算されたすべてのデータ

- 集計の仕様にCACHE SESSIONが含まれる

- 集計の仕様にCACHE SESSION文は含まれていないが、集計される変数にSESSIONの値を持つ$VARCACHEプロパティがある

- 集計の仕様にCACHE SESSION文が含まれておらず、集計される変数にも$VARCACHEプロパティがないが、VARCACHEオプションがSESSIONに設定されている

- AGGREGATEファンクションが実行され、集計の仕様にCACHE NA文が含まれていたときに計算されたNA値(のみ)

- 次の状況で$NATRIGGER式が実行されたときに計算されたすべてのデータ

- $NATRIGGERプロパティを持つ変数にSESSION値の$VARCACHEプロパティも設定されている

- $NATRIGGERプロパティを持つ変数に$VARCACHEプロパティはないが、VARCACHEオプションがSESSIONに設定されている

1つのセッションに1つの内部キャッシュがあります。UPDATE文とCOMMIT文は、キャッシュされたデータを無視します。ただし、データがいったんキャッシュされると、FORCECALCキーワードを持つAGGREGATEファンクションを実行する場合を除いて、Oracle OLAPはキャッシュの値を使用してすべての計算を実行します。この場合、FORCECALCキーワードは、Oracle OLAPに値を再計算するように指定します。

セッションが終了すると、キャッシュは消去されます。セッションを終了せずにセッション・キャッシュを消去するには、CLEAR文を発行します。

セッション・キャッシュの効果は、V$AW_CALC動的パフォーマンス・ビューで追跡されます。

SESSION_NLS_LANGUAGE

(読取り専用)SESSION_NLS_LANGUAGEオプションは、OLAPセッション全体で有効なオプションです。このオプションは、STATIC_SESSION_LANGUAGEの値がNOの場合はNLS_LANGUAGEの値を保持し、STATIC_SESSION_LANGUAGEの値がYESの場合は、STATIC_SESSION_LANGUAGEの値が最後にNOだったときのNLS_LANGUAGEの値を保持します。

関連項目:
「言語ディメンション・ステータスの処理」

データ型

TEXT

構文

SESSION_NLS_LANGUAGE

例

NLS_LANGUAGEおよびSTATIC_SESSION_LANGUAGEの値の変化によって、SESSION_NLS_LANGUAGEの値にどのような影響があるかについては、例4-9「NLS_LANGUAGEの変更」および例5-102「OLAPセッションの言語を変更せずにNLS_LANGUAGEを変更する方法」を参照してください。

例5-96 SESSION_NLS_LANGUAGEがセッション全体のオプションであることの確認

myaw3とmyaw4という2つのアナリティック・ワークスペースがあるとします。また、次のコードに示すとおり、どちらにもmylangsという言語ディメンションがあると仮定し、myaw3のmylangsの言語はAmericanとFrench、myaw4のmylangsの言語はAmericanとGermanです。

REPORT myaw3!mylangs
MYLANGS
--------------
AMERICAN
FRENCH

REPORT myaw4!mylangs
MYLANGS
--------------
AMERICAN
GERMAN

ここで、NLS_LANGUAGEとSESSION_NLS_LANGUAGEがAmericanに設定された状態で2つのアナリティック・ワークスペースをアタッチするとします。この場合、次に示されているように、2つのアナリティック・ワークスペースのmylangsはAmericanのみに制限されます。

REPORT myaw3!mylangs
MYLANGS
--------------
AMERICAN

REPORT myaw4!mylangs
MYLANGS
--------------
AMERICAN

SPARSEINDEX

SPARSEINDEXオプションは、コンポジットが値のロードおよびアクセスで使用する索引アルゴリズムのタイプを制御します。名前付きコンポジットを定義するとき、または名前のないコンポジットを作成するときのSPARSEINDEXの値であり、そのコンポジットがデフォルトで使用するアルゴリズムのタイプが決まります。DEFINE COMPOSITE文で索引アルゴリズムを指定すると、SPARSEINDEXオプションで指定されているデフォルトのアルゴリズムが上書きされます。

索引アルゴリズムの選択が重要になるのは、パフォーマンスの問題に留意する場合のみです。いずれの推奨事項も、このマニュアルが対応しているOracle OLAPのリリースに関するものです。CHGDFN文を使用してコンポジットのアルゴリズムを変更すると、アルゴリズムごとにパフォーマンスにどのような影響を及ぼすのかをテストできます(たとえば、データをロードする前など)。

データ型

TEXT

構文

SPARSEINDEX = {'BTREE'|'HASH'}

パラメータ

BTREE

コンポジットに対して推奨される標準的な索引付けメソッド。上級ユーザー以外はBTREEを使用してください。BTREEは類似する値をグループ化するため、アクセスの局所性に優れています。BTREEがデフォルトのアルゴリズムです。

HASH

コンポジットが持つベース・ディメンションが2つまたは3つのみである場合にかぎり使用できる標準の索引付けメソッド。一般的に、HASHを使用すると巨大な索引表が作成され、メモリーに読め込めない場合があるため、HASHをコンポジットに対して使用することは推奨されません。

例

例5-97 HASHアルゴリズムの使用

次の例は、SPARSEINDEXをHASHに設定しているため、次に定義または作成するコンポジットはデフォルトでHASH索引アルゴリズムを使用して作成されます。

SPARSEINDEX = 'HASH'

SQLBLOCKMAX

SQLBLOCKMAXオプションは、Oracle Databaseインスタンスから一度に取得するレコードの最大数を制御します。このオプションによって、データ・フェッチのパフォーマンスをきめ細かくチューニングできます。

データ型

INTEGER

構文

SQLBLOCKMAX = records

パラメータ

records

一度にフェッチするレコード数を示すINTEGER。SQLBLOCKMAXは任意のINTEGERに設定できますが、100以上に設定すると、パフォーマンス上の明らかな変化は見られなくなります。デフォルトは10レコードです。

使用上の注意

カーソルのオープン

新しいブロック・サイズを使用するカーソルは、SQLBLOCKMAXのリセット後にオープンされたカーソルです。

レコード数

プログラムの通常の操作が、カーソルをオープンして1レコードを読み取ってからクローズする場合、SQLBLOCKMAXを1に設定します。このように設定しないと、SQL FETCH文は10レコードを取得してそのうちの9レコードを破棄します。同じことが、10レコード未満をフェッチする他のルーチンにも当てはまります。

ブロック・サイズ

プログラムで小さなレコードをフェッチする場合、SQLBLOCKMAXを増やしてフェッチに必要なブロック数を減らすことができます。Oracle OLAPは、データを64KBのバッファにフェッチします。ブロック・サイズは、レコード数にレコードのサイズを掛けたもので、バイトで示します。ブロック・サイズがバッファの制限である64KBを超える場合、Oracle OLAPはフェッチするレコード数を自動的に減らします。例5-98「SQLBLOCKMAXによるカーソルの定義」を参照してください。

例

例5-98 SQLBLOCKMAXによるカーソルの定義

次のプログラムの抜粋は、データベースから50バイトのレコードをフェッチするカーソルを定義します。新しいブロック・サイズは、Oracle OLAPの64KBのバッファに十分収まります(50バイト*100=50KBのブロック・サイズ)。

SQLBLOCKMAX = 100
SQL DECLARE CURSOR c1 FOR SELECT * FROM mydata
SQL OPEN c1

SQLCODE

(読取り専用)SQLCODEオプションは、最後に実行されたSQL操作後に、Oracle RDBMSによって返される値を保持します。

戻り値

INTEGER。操作が成功した場合は0、エラーの場合は-1、要求されたすべての行がフェッチされた場合は100です。

構文

SQLCODE

使用上の注意

SQLエラーの処理

Oracle OLAPは、SQLCODEがゼロ以外の場合でもエラーを通知しません。このため、プログラムでSQLCODEの値をテストし、適切な処理を実行する必要があります。各SQL操作でSQLCODEが設定されるため、操作ごとにエラーをテストしてエラー条件を見逃さないようにする必要があります。

ヒント:
エラーが発生すると、通常はSQLERRMオプションにエラー・メッセージが含まれます。

特定のエラー・コードを確認するプログラムを記述できます。たとえば、最も一般的な警告コードは100で、これはカーソルが選択する表の終わりにまで到達し、FETCH文が完了していることを示します。

例

例5-99 SQLCODEによるデータのフェッチ

次のプログラムの抜粋には、SQLCODEの値をテストするWHILEループが含まれて、カーソルのアクティブなセットの最後に達するとデータのフェッチを停止します。

WHILE SQLCODE EQ 0
SQL FETCH cursor1 INTO :employee, :title

SQLERRM

(読取り専用)SQLERRMオプションは、データベースがエラーをレポートしてSQLCODEがゼロ以外の値の場合、通常はその問題を説明するテキストを含みます。

データ型

TEXT

構文

SQLERRM

使用上の注意

Oracleリレーショナル・マネージャ

SQLMESSAGESオプションをYESに設定すれば、SQLERRMの値を自動的に現行の出力ファイルに送信できます。

例

例5-100 エラー・メッセージの表示

次の文は、表を作成してからエラー・メッセージを確認します。

SQL CREATE TABLE Products -
(Prod_ID CHAR(8) -
Prod_Name VARCHAR(30) -
Suggested_Price DECIMAL(10,2))
IF SQLCODE NE 0
SHOW SQLERRM

例5-101 エラー・メッセージのサンプル

次の文は不完全であり、十分な情報が指定されていないので表を作成できません。

SQL CREATE TABLE Products

Oracle RDBMSは次のようなエラー・メッセージを返します。

ORA-00906: Missing left parenthesis.

SQLMESSAGES

SQLMESSAGESオプションは、エラー・メッセージを現行の出力ファイルに送信するかどうかを制御します。

データ型

BOOLEAN

構文

SQLMESSAGES = {YES|NO}

パラメータ

YES

エラー・メッセージは現行の出力ファイルに送信されます。

NO

(デフォルト)エラー・メッセージは、SQLERRMの値としてのみ格納されます。

使用上の注意

一般的な使用法

アプリケーションの開発時にSQLMESSAGESをYESに設定すると、エラーを迅速に診断できます。実行中のアプリケーションで、エラーを別の方法で発見して処理する場合は、SQLMESSAGESをNOに設定します。

STATIC_SESSION_LANGUAGE

STATIC_SESSION_LANGUAGEオプションは読取り/書込みオプションで、SESSION_NLS_LANGUAGEオプションの値をNLS_LANGUAGEオプションの値と常に同期させるかどうかを制御します。

関連項目:
「言語ディメンション・ステータスの処理」

データ型

BOOLEAN

構文

STATIC_SESSION_LANGUAGE = NO | YES

パラメータ

NO

NLS_LANGUAGEオプションの値が変更されるたびに、SESSION_NLS_LANGUAGEもNLS_LANGUAGEオプションと同じ値に変更されます。(デフォルト)

YES

NLS_LANGUAGEの値が変更されても、SESSION_NLS_LANGUAGEの値は変更されません。

例

例5-102 OLAPセッションの言語を変更せずにNLS_LANGUAGEを変更する方法

例4-9「NLS_LANGUAGEの変更」では、NLS_LANGUAGEの値を変更することによりOLAPセッションの言語を変更する方法について説明しています。ここでは、NLS_LANGUAGEオプションの値を変更した場合でも、OLAPセッションの言語を変更しない方法について説明します。

アナリティック・ワークスペースが、NLS_LANGUAGEがAmericanに設定された状態でアタッチされているものとします。次のコード例では、STATIC_SESSION_LANGUAGEの値をYesに設定することで、NLS_LANGUAGEオプションの値をFrenchに変更しても、SESSION_NLS_LANGUAGEの値をAmericanに維持できており、これは、Oracle OLAPによって言語ディメンション(mylangs)がAmericanに制限されているということを意味します。

SHOW NLS_LANGUAGEFRENCH
AMERICAN

" Make the session language static
STATIC_SESSION_LANGUAGE = yes

"Change the value of NLS_LANGUAGE to FRENCH
SET NLS_LANGUAGE= 'FRENCH'

SHOW OBJ(PROPERTY '$DEFAULT_LANGUAGE' 'mylangs')
AMERICAN
SHOW NLS_LANGUAGE
FRENCH
SHOW SESSION_NLS_LANGUAGE
AMERICAN
SHOW LOCK_LANGUAGE_DIMS
oui
SHOW STATIC_SESSION_LANGUAGE
oui

REPORT mylangs
MYLANGS
--------------
AMERICAN

REPORT prod_desc
------PROD_DESC------
------PRODUCTS-------
MYLANGS          PROD01     PROD02
-------------- ---------- ----------
AMERICAN       Trousers   Skirts

THIS_AW

(読取り専用)THIS_AWオプションは、修飾オブジェクト名を作成するためにOracle OLAPがTHIS_AWキーワードの一致文字列を置換する際に使用する、ワークスペース名の値です。

データ型

TEXT

構文

THIS_AW

THOUSANDSCHAR

(読取り専用)THOUSANDSCHARオプションは、NLSオプションで説明されているNLS_NUMERIC_CHARACTERSオプションに指定された値になります。

注意:
THOUSANDSCHARの値は、出力でのOracle OLAPによる数値書式にのみ影響します。入力される数値の書式には影響を与えません。

データ型

ID

構文

THOUSANDSCHAR

例

例5-103 小数点と3桁区切りの表示

次の文では、DECIMALCHARおよびTHOUSANDSCHARの値が表示されます。次の文を発行するとします。

SHOW THOUSANDSCHAR
SHOW DECIMALCHAR

THOUSANDSCHARの記号としてカンマが表示され、DECIMALCHARの記号としてピリオドが表示されるとします。この設定でSHOW TOTAL(sales)文を実行すると、出力は次のようになります。

63,181,743.50

TMARGIN

TMARGINオプションは、現行のページのヘッダーの上にある、出力ページの上部余白の空白行の数を定義するオプションです。すなわち、上部余白の行は、PAGEPRG(存在する場合)によって定義されるプログラムが実行される前に生成されます。

TMARGINは、PAGINGがYESに設定されている場合にのみ有効で、REPORTやDESCRIBEなどの文の出力に対してのみ適用されます。TMARGINオプションは通常、レポート・プログラムの初期化セクションで設定されます。

データ型

INTEGER

構文

TMARGIN = n

パラメータ

n

レポートの上部余白に割り当てる行数を指定するINTEGER式。デフォルト値は2です。

使用上の注意

ファイルに対するTMARGINの設定

あるファイルに対してTMARGINを設定するには、最初にOUTFILE文で現行の出力ファイルの名前を指定して対象のファイルを現行の出力ファイルにしてから、TMARGINを目的の値に設定します。新しい値は、リセットするまで、またはOUTFILE文を使用して、出力を送信する出力ファイルを別のファイルに変更するまで有効です。出力を別の出力ファイルに送信すると、TMARGINはそのファイルのデフォルト値2を返します。

TMARGINをデフォルトの出力ファイルに対して設定すると、出力をファイルに送信するOUTFILEコマンドが介在しているかどうかにかかわらず、新しい値はリセットするまで有効です。つまり、デフォルトの出力ファイルに対してTMARGINの値が自動的に保存されます。

例

例5-104 レポートの上部余白の設定

この例では、長いレポートを生成する際に空白を省いて、狭い上部余白(1行)を設定します。レポート・プログラムの初期化セクションに次の文を含めます。

TMARGIN = 1

TRACEFILEUNIT

(読取り専用)TRACEFILEUNITオプションは、Oracleのトレース・ファイルのユニット番号を記録するオプションです。これは、Oracleセッションでのアクティビティに関する情報を収集する書込み可能な出力ファイルです。

構文

TRACEFILEUNIT

使用上の注意

TRACEFILEUNIT値の使用

OUTFILEやDBGOUTFILEのコマンドで、TRACEFILEUNITオプションに格納されたユニット番号を指定して、出力をOracleトレース・ファイルに送信できます。

例

例5-105 DBGOUTFILEによるOracleトレース・ファイルの指定

次のコードでは、DBGOUTFILEコマンドによりTRACEFILEUNITオプションの値を指定します。

DBGOUTFILE TRACEFILEUNIT

TRIGGERMAXDEPTH

TRIGGERMAXDEPTHオプションは、Oracle OLAPが同時に実行可能な$NATRIGGERプロパティ式の最大数を指定するオプションです。

データ型

INTEGER

構文

TRIGGERMAXDEPTH = n

パラメータ

n

同時に実行可能な$NATRIGGERプロパティ式の最大数を指定するINTEGERの式。デフォルト値は50です。

使用上の注意

$NATRIGGERプロパティについて

TRIGGERMAXDEPTHオプションは、変数の$NATRIGGERプロパティとともに動作します。

再帰的トリガー

RECURSIVEオプションがYESに設定されていないかぎり、$NATRIGGER式の実行中にこの式で実行される計算式、プログラムまたはその他の$NATRIGGER式で、再帰的な$NATRIGGER式の実行はできません。TRIGGERMAXDEPTHオプションは、$NATRIGGER式の再帰の深さを制御し、Oracle OLAPが誤動作する可能性のある無限の再帰や過剰に深い再帰を防止します。

例

例5-106 トリガーの深さの最大値の設定

この例では、トリガーの深さの最大値を設定し、その最大値を超えた後、深さをより大きい値に設定します。通常、TRIGGERMAXDEPTHの値は、この例で使用する2よりもずっと大きい値です。デフォルト値は50です。

DEFINE d1 INTEGER DIMENSION
MAINTAIN d1 ADD 2
DEFINE v1 DECIMAL <d1>
PROPERTY '$NATRIGGER' 'v2 + 1'
DEFINE v2 DECIMAL <d1>
PROPERTY '$NATRIGGER' 'v3 + 1'
DEFINE v3 DECIMAL <d1>
PROPERTY '$NATRIGGER' 'v4 + 1'
DEFINE v4 DECIMAL <d1>
v4(d1 1) = 333.3
RECURSIVE = YES
TRIGGERMAXDEPTH = 2
SHOW v1

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

ERROR: Depth of NA trigger calls exceeds allowable (maximum depth 2)

次の文を実行すると、トリガーの深さの最大値がより大きい値に設定され、変数の値が表示されます。

TRIGGERMAXDEPTH = 3
SHOW v1

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

336.3

TRIGGERSTOREOK

TRIGGERSTOREOKオプションは、オブジェクト内のNA値を$NATRIGGERプロパティで指定した値と永続的に置き換えることを指定するために、$STORETRIGGERVALプロパティを使用できるかどうかを制御するオプションです。

重要:
TRIGGERSTOREOKオプションの値は、Oracle OLAPが$NATRIGGER式の実行結果である変数データの処理方法を決定するために使用する複数の要素の1つにすぎません。その他の要素やそれらの相互関係の詳細は、「$NATRIGGERの結果を格納またはキャッシュするかどうかのOracle OLAPによる決定方法」を参照してください。

データ型

BOOLEAN

構文

TRIGGERSTOREOK = {NO|YES}

パラメータ

NO

(デフォルト)NA値を、変数に対して設定された$NATRIGGERプロパティ式と永続的に置き換えません。

YES

NA値を、変数に対して設定された$NATRIGGERプロパティ式と永続的に置き換えます。デフォルト値はNOです。

Oracle OLAPの場合、変数のNA値を、この変数に対して設定された有効な$NATRIGGERプロパティ式と永続的に置き換えるには、TRIGGERSTOREOKオプションと、この変数に対して設定された$STORETRIGGERVALプロパティの両方をYESに設定する必要があります。

使用上の注意

$NATRIGGERプロパティとSTORETRIGGERVALプロパティについて

TRIGGERSTOREOKオプションは、変数の$NATRIGGERプロパティおよび$STORETRIGGERVALプロパティとともに動作します。

例

例5-107 NA値の一時的な置換え

この例では、変数のセルに格納されたNA値を一時的に置き換えます。次の文では、3つの値を持つディメンションを定義し、このディメンションによってディメンション化される変数を定義します。次に、$NATRIGGERプロパティを変数に追加して、値を変数の1つのセルに含め、他のセルを空のままにしてそれらの値をNAにします。最後に、変数のセルの値をレポートします。

DEFINE d1 INTEGER DIMENSION
MAINTAIN d1 ADD 3
DEFINE v1 DECIMAL <d1>
PROPERTY '$NATRIGGER' '500.0'
v1(d1 1) = 333.3

REPORT v1

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

D1            V1
--------- ----------
1     333.30
2     500.00
3     500.00

この文では、v1変数から$NATRIGGERプロパティを削除します。

CONSIDER v1
PROPERTY DELETE '$NATRIGGER'
REPORT v1

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

D1            V1
--------- ----------
1     333.30
2         NA
3         NA

例5-108 NA値の永続的な置換え

次の文では、$NATRIGGERプロパティを、前の例で定義したv1変数に追加し、TRIGGERSTOREOKオプションと$STORETRIGGERVALプロパティをYESに設定します。次に、変数のセルの値をレポートします。

CONSIDER v1
PROPERTY '$NATRIGGER' '800.0'
TRIGGERSTOREOK = YES
PROPERTY 'STORETRIGGERVAL' YES
REPORT v1

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

D1                 V1
-------------- ----------
1     333.30
2     800.00
3     800.00

次の文では、v1変数から$NATRIGGERプロパティを削除し、この変数のセルの値をレポートします。

CONSIDER v1
PROPERTY DELETE '$NATRIGGER'
REPORT v1

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

D1                 V1
-------------- ----------
1     333.30
2     800.00
3     800.00

USERID

(読取り専用)USERIDオプションは、現行のOracle DatabaseセッションのユーザーIDを保持するオプションです。この値は、SYSINFO(USER)で返される値と同じです。

データ型

TEXT

構文

USERID

例

例5-109 セッション・ユーザーIDの表示

次の文を発行すると、現行のセッションに関連付けられているOracleユーザーIDが表示されます。

SHOW USERID

USETRIGGERS

USETRIGGERSオプションは、トリガー・プログラムをトリガーとして実行するかどうかを指定するオプションです。

ヒント:
Oracle OLAPは再帰的トリガーをサポートしません。USETRIGGERSオプションをNOに設定してから、トリガー・プログラム自体をトリガーするトリガー・プログラムの内部で同じDML文を発行してください。たとえば、TRIGGER_DEFINEプログラムを作成したとします。TRIGGER_DEFINEプログラムの内部で、USETRIGGERSオプションをNOに設定してからDEFINE文を発行する必要があります。

関連項目:
「トリガー・プログラム」

データ型

BOOLEAN

構文

USETRIGGERS = {NO|YES}

パラメータ

YES

(デフォルト)トリガー・プログラムが実行されます。

NO

トリガー・プログラムは実行されません。

例

例5-110 USETRIGGERSのNOへの変更

新しいアナリティック・ワークスペースを作成した直後であるとします。次の文に示すように、USETRIGGERSオプションのデフォルト値はYESですが、このオプションはいつでもNOに設定できます。

SHOW USETRIGGERS
yes

USETRIGGERS = NO
SHOW USETRIGGERS
no

VARCACHE

VARCACHEオプションは、AGGREGATEファンクションまたは$NATRIGGERプロパティ式の実行結果である変数データを、Oracle OLAPがすべて格納またはキャッシュするかどうかを指定するオプションです。

重要:
VARCACHEオプションの値は、AGGREGATEファンクションまたは$NATRIGGERプロパティの実行時に計算された変数データを格納またはキャッシュするかどうかをOracle OLAPが判断するために使用する要素の1つにすぎません。その他の要素やそれらの相互関係の詳細は、「$NATRIGGERの結果を格納またはキャッシュするかどうかのOracle OLAPによる決定方法」および「集計データを格納またはキャッシュするかどうかのOracle OLAPによる決定方法」を参照してください。

構文

VARCACHE = {VARIABLE | SESSION | NONE}

パラメータ

VARIABLE

Oracle OLAPがデータベースの変数にデータを格納することを指定します。このオプションを指定した場合は、アナリティック・ワークスペースを更新してコミットすると、計算結果が変数に永続的に格納されます。

SESSION

Oracle OLAPが計算済のデータをセッション・キャッシュにキャッシュすることを指定します(「Oracle OLAPセッション・キャッシュの概要」を参照)。このオプションを指定すると、計算結果が更新およびコミット中に無視され、セッション後に廃棄されます。

重要:
SESSCACHEがNOに設定されている場合、SESSIONを指定してもOracle OLAPはデータをキャッシュしません。この場合、SESSIONの指定は、NONEの指定と同じことになります。

NONE

AGGREGATEファンクションを使用して即時計算されたデータについては、AGGREGATEファンクションが実行されるたびにOracle OLAPがデータを計算するように指定します。Oracle OLAPは、AGGREGATEファンクションによって計算されたデータを格納またはキャッシュしません。

使用上の注意

すべての変数に影響するVARCACHEオプション

VARCACHEオプションを設定すると、その設定はすべての変数に影響します。変数に$VARCACHEプロパティを設定しておらず、データを即時計算するためにAGGREGATEファンクションとともに使用するaggmapにCACHE文が存在しない場合、データの格納方法や格納するかどうかを指定するオプションはVARCACHEオプションになります。

WEEKDAYSNEWYEAR

WEEKDAYSNEWYEARオプションは、WEEK型のディメンションの場合に、新しい年の日数が何日含まれていれば、新しい年の第1週として識別されるかを指定するオプションです。

デフォルトでは、ある特定の年の第1週は、新しい年が1日以上含まれる最初の週になります。たとえば、2000年1月1日は土曜日です。デフォルトを使用すると、この年の最初の週(W1.00)は、1999年12月26日の日曜日から2000年1月1日の土曜日までの期間になります。

WEEKDAYSNEWYEARを使用すると、特定の年の第1週に必要な日数を指定できます。WEEKDAYSNEWYEARを使用して、ある年の最初の週に含まれる必要がある日数を2日以上と指定すると、1999年12月26日の日曜日から2000年1月1日の土曜日までの週は1999年の最後の週(W53.99)になり、1月2日から8日までの週が2000年の最初の週(W1.00)になります。

データ型

INTEGER

構文

WEEKDAYSNEWYEAR = days

パラメータ

days

特定の年の第1週に必要な日数を示す範囲が1から7までのINTEGER式。daysのデフォルト値は1です。

例

WEEKDAYSNEWYEARの影響

次の文を実行すると、複数の週と週ごとに関連付けられている最終日のリストが現行の出力ファイルに送られます。

DEFINE week DIMENSION WEEK
MAINTAIN week ADD '12 18 99' '1 15 00'
weekdaysnewyear = 2
REPORT W 22 CONVERT(week date)

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

WEEK             CONVERT(WEEK DATE)
-------------- --------------------
W51.99         18DEC99
W52.99         25DEC99
W53.99         01JAN00
W1.00          08JAN00
W2.00          15JAN00

2000年1月1日は土曜日のため、WEEKDAYSNEWYEARを2に設定すると、1月2日から8日までの週がW1.00と表示されます。

WRAPERRORS

WRAPERRORSオプションは、Oracle OLAPが長いエラー・メッセージを表示する際、1行の長さを72文字にして複数行で表示するかどうかを指定するオプションです。

データ型

BOOLEAN

構文

WRAPERRORS = NO | YES

パラメータ

NO

エラー・メッセージを折り返しません。(デフォルト)

YES

エラー・メッセージを折り返します。72文字ごとに改行が挿入されます。

使用上の注意

Oracle OLAP 10.2でのデフォルトの動作の変更

Oracle OLAPの10.2より前のリリースでは、長いエラー・メッセージは常に折り返されます。

YESSPELL

(読取り専用)YESSPELLオプションは、OLAP DML文の出力に存在するTRUEブール値に使用されるテキストを保持するオプションです。

YESSPELLオプションの値は、NLS_LANGUAGEオプションで指定した現行の言語で「yes」に対応する語です。たとえば、NLS_LANGUAGEをAmericanに設定すると、YESSPELLの値はYESになります。NLS_LANGUAGEをSpanishに設定すると、YESSPELLの値はSIになります。

データ型

TEXT

構文

YESSPELL

例

例5-111 YESSPELL値の影響の確認

現行の値がYESであるBOOLVARという変数があるとします。NLS_LANGUAGEオプションで指定した言語で「yes」に対応する語が「si」の場合、

SHOW boolvar

によって、次の出力が生成されます。

si

YRABSTART

YRABSTARTオプションは、2桁の略称を使用して読取りや表示が実行される年に関連付けられた特定の100年の期間を指定するオプションです。

データ型

INTEGER

構文

YRABSTART = year

パラメータ

year

100年の期間の開始年を示す4桁のINTEGER式。範囲が1000から9999までの任意の値を指定できます。ただし、yearに9900を超える値を指定した場合、9999より後の年に対応する2桁の年の値の読取りまたは表示を要求すると、戻り値はNAになります。デフォルト値は1950のため、YRABSTARTを使用して別の範囲を設定しないかぎり、2桁の年の略称は1950から2049までの範囲として解釈されます。

例

例5-112 デフォルト値の使用

次の文を実行すると日付書式が指定され、出力が現行の出力ファイルに送られます。

DATEFORMAT = '<Mtextl> <d>, <yyyy>'
SHOW MAKEDATE(96 9 13)

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

September 13, 1996

例5-113 日付に対する100年の期間の設定

次の文を実行すると2000年から2099年までの100年の期間が設定され、出力が現行の出力ファイルに送られます。

YRABSTART = 2000
SHOW MAKEDATE(96 9 13)

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

September 13, 2096

ZEROROW

ZEROROWオプションは、REPORTおよびROWコマンドによって生成される出力に関して、数値がすべてNAまたはゼロであるか、ゼロと表示されるレポート行を非表示にするオプションです。レポートに0.004などの小さい値がある場合、表示される小数点以下の桁数は、ZEROROWが該当の数値をゼロとして処理するかどうかに影響します。合計欄のあるレポートを生成する場合は、数値が非表示の場合でも、合計を計算するために実際の数値が使用されます。

データ型

BOOLEAN

構文

ZEROROW = {YES|NO}

パラメータ

YES

すべての数値がゼロまたはNAと表示される場合、数値を格納しているレポート行を非表示にします。

NO

(デフォルト)レポート行に格納されている値にかかわらず、すべてのレポート行を表示します。

使用上の注意

数値以外のデータ

TEXT、ID、BOOLEAN値などの数値以外のデータが数値とともにレポート行に格納されている場合でも、ZEROROWの設定がYESで、すべての数値がゼロまたはNAと表示される場合、このレポート行は非表示になります。

NASPELLおよびZSPELLの影響

NASPELLの値は、ZEROROWによるNA値の処理方法には影響しません。ZSPELLの値はZEROROWの機能には影響せず、数値としてのゼロ値は、出力での表記にかかわらずゼロとして処理されます。

例

例5-114 データがすべてゼロのレポート行の非表示

売上を予測するために計算結果を格納するworstcaseという変数があり、この変数は、division、monthおよびlineによってディメンション化されているとします。結果のレポートを生成するときに、ステータスにおけるすべての月で最悪の場合の予測値がゼロになる行を非表示にします。次の文に示すとおり、ZEROROWをYESに設定します。

ZEROROW = YES
LIMIT line TO 'Revenue'
LIMIT month TO 'Nov95' TO 'Feb96'
REPORT WIDTH 8 DOWN division ACROSS month: worstcase

この文によって生成されるレポートは次のとおりです。

LINE: REVENUE
-----------------WORSTCASE-----------------
-------------------MONTH-------------------
DIVISION   Nov95      Dec95      Jan96      Feb96
-------- ---------- ---------- ---------- ----------
Camping        0.00       0.00  45,500.00  47,400.00
Sporting       0.00       0.00  29,200.00  28,400.00
Clothing       0.00       0.00  15,200.00  14,900.00

このレポートでは、各部門ともいくつかの月に売上予測の数値が存在するため、非表示になっている行はありません。ただし、このレポートを縦方向がmonthで横方向がdivisionというレイアウトにすると、Nov95とDec95の売上予測がないため、これらの月の行は非表示になります。

REPORT DOWN month ACROSS division: worstcase

この文によって生成されるレポートは、次のとおりです。

LINE: REVENUE
-----------WORSTCASE------------
------------DIVISION------------
MONTH           Camping    Sporting   Clothing
-------------- ---------- ---------- ----------
Jan96           45,500.00  29,200.00  15,200.00
Feb96           47,400.00  28,400.00  14,900.00

ZSPELL

ZSPELLオプションは、HEADING、REPORTおよびROWコマンドによって生成された出力で、数値としてのゼロを表示するために使用するデフォルトのテキストを保持するオプションです。

データ型

TEXT

構文

ZSPELL = {'text'|'OFF'}

パラメータ

text

数値としてのゼロ値のデフォルトの表記。テキスト・リテラルではなく式を指定する場合は、一重引用符を省略できます。

OFF

(デフォルト)数値としてのゼロ値ごとに、適切な小数点以下の桁数(DECIMAL属性で指定)を持つゼロ(0)の値を表示します。

使用上の注意

ゼロ値の代入

ZSPELLは出力にのみ影響し、ゼロ値の代入方法には影響しません。たとえば、ZSPELLをNONEに設定した場合でも、次のとおり、ゼロ値を代入します。

var1 = 0

小数点以下の表示

デフォルトのOFFの意味は、DECIMAL属性によって示される小数点以下の桁数を持つ0(ゼロ)としてゼロ値を表示するということです(たとえば、0.00)。ZSPELLをテキスト文字の0に設定すると、DECIMALの指定内容にかかわらず、ゼロ値は小数点以下のない0として表示されます。

ゼロに近い値に対するZSPELLの影響

出力に0.004などの小さい値がある場合、表示される小数点以下の桁数は、ZSPELLが数値をゼロとして処理するかどうかに影響します。例5-116「非常に小さい数の表示」を参照してください。

例

例5-115 ゼロ値のNONE表示

この例では、DECIMALの変数testvarのゼロ値がレポート出力でNONEと表示されるように、ZSPELLの値を変更します。ZSPELLをデフォルト値のOFFに設定して、Oracle OLAP文

testvar = 0.00
ROW testvar

によって、次の出力が生成されます。

0.00

これに対し、次のOLAP DML文

ZSPELL = 'NONE'
ROW testvar

によって、次の出力が生成されます。

NONE

例5-116 非常に小さい数の表示

この例は、出力における小数点以下の桁数の表示方法が、ZSPELLが非常に小さい数をゼロとして処理するかどうかに影響することを示します。ZSPELLをデフォルト値のOFFに設定した場合、次のOLAP DML文

ZSPELL = 'OFF'
testvar = 0.004
ROW DECIMAL 3 testvar

によって、次の出力が生成されます。

0.004

次の文では、ZSPELLをNONEに設定し、出力の小数点以下を2桁に指定します。

ZSPELL = 'NONE'
ROW DECIMAL 2 testvar

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

NONE

ZSPELLをNONEに設定したままの状態で、次の文を発行すると、出力の小数点以下が3桁に指定されます。

ROW DECIMAL 3 testvar

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

0.004

6 OLAP DMLプログラム

この章では、OLAP DMLプログラムの作成方法について説明します。内容は次のとおりです。

- OLAP DMLから提供されるプログラム
OLAP DMLプログラムの作成

- プログラム内容の指定

- プログラムのコンパイル

- プログラムのテストとデバッグ

- プログラムの実行

- OLAP DMLプログラムの代表的なタイプ

- Oracle OLAPによって検索されるユーザー作成のプログラム

OLAP DMLから提供されるプログラム

OLAP DMLでは、Oracleデータ・ディクショナリで事前に定義されたOLAPのキューブとキューブ・ディメンションの処理に使用できるプログラムが多数用意されています。これらのプログラムは、「キューブ対応のOLAP DML文」に記載されています。

また、アナリティック・ワークスペースを直接処理する次のプログラムも用意されています。

- ALLCOMPILE。現行のアナリティック・ワークスペースにあるコンパイル可能なすべてのオブジェクトを1つずつコンパイルします。

- ALLSTAT。現行のアナリティック・ワークスペースにあるすべてのディメンションのステータスを、ディメンションのデフォルトのステータス・リストに設定します。

- AWDESCRIBEは、現行のアナリティック・ワークスペースに関する情報を、現行の出力ファイルに送信します。サマリー・ページの後にレポートが生成され、名前、型および説明を示すアナリティック・ワークスペース・オブジェクトのアルファベット順のリストと、オブジェクト型別に各オブジェクトのDESCRIBEの2つの部分が示されます。

- COPYDFN。現行のワークスペースまたはアタッチされているワークスペース内の事前定義されたオブジェクトから定義をコピーして、アナリティック・ワークスペース内に新しいオブジェクトを定義します。

- FORECAST.REPORTは、FORECASTコマンドを使用して作成される予測の標準レポートを生成します。レポートには、予測の計算式および平均絶対誤差率を含む予測のパラメータに続いて、予測値が示されます。

- FULLDSC。1つ以上のワークスペース・オブジェクトに関して、そのプロパティおよびトリガーを含む定義を表示するレポートを生成します。

- ISDATEは、テキスト式をDATE値に変換可能かどうかを判定します。テキスト式が有効な日付を表す場合はYESを返し、それ以外はNOを返します。(ISDATEは、実際には変換を実行しません。変換を実行するには、CONVERTを使用する必要があります。)

- LISTBYは、指定した1つ以上のディメンションまたはコンポジットによってディメンション化されているか、それらに関連付けられている、アナリティック・ワークスペース内のすべてのオブジェクトの名前のレポートを生成します。LISTBYは、アタッチした任意のワークスペースのディメンションまたはコンポジットで使用できます。

- LISTNAMESは、アナリティック・ワークスペース内のオブジェクトの名前をリストするレポートを生成します。リストの対象を特定の型のオブジェクトに制限し、各オブジェクト型の名前をアルファベット順にリストできます。

- MODEL.COMPRPTは、モデルの方程式がどのようにブロックにグループ化されたかを示すレポートを生成します。このレポートでは、ディメンション間の依存があるステップ・ブロックおよび連立ブロックについて、依存に関与するディメンションがリストされます。

- MODEL.DEPRTは、各モデル方程式が依存する変数およびディメンション値がリストされるレポートを生成します。ディメンションに依存している場合、レポートにはディメンションの名前が示されます。

- MODEL.XEQRPTは、モデルの実行に関するレポートを生成します。レポートには、解決に失敗したブロックが示され、連立ブロックの解決に使用されたモデル・オプションの値が表示されます。

- PAGEは通常、レポート・プログラム内で使用するか、またはLISTNAMESを指定して使用し、PAGINGの設定がYESである場合に、出力に改ページを挿入します。PAGEに対するオプションの引数は、ページの残りの行数を条件とする改ページを指定します。

- REGRESS.REPORT。REGRESSコマンドを使用して実行した回帰の標準レポートを生成します。

- STATUS。1つ以上のディメンション、ディメンション・サロゲートまたは値セットのステータス、あるいはアナリティック・ワークスペース内にあるすべてのディメンションのステータスを現行の出力ファイルに送信します。

- STDHDR。レポート出力の各ページの上部にOracle OLAP標準ヘッダーを生成します。

- VALSPERPAGEは、1ページに収める幅を指定する変数の値の最大数を計算します。ページとは、ワークスペース内の格納単位です。

ISDATEプログラムおよびVALSPERPAGEプログラムは単純なファンクションと同様なため、第7章「OLAP DMLファンクション: AからK」および第8章「OLAP DMLファンクション: LからZ」(アルファベット順)でOLAP DMLファンクションとともに説明しています。OLAP DMLから提供されるその他のプログラムについては、第9章「OLAP DMLコマンド: AからG」および第10章「OLAP DMLコマンド: HからZ」(アルファベット順)でOLAP DMLコマンドとともに説明しています。

OLAP DMLプログラムの作成

OLAP DMLプログラムは、OLAP DMLで記述します。プログラムはアナリティック・ワークスペースのデータ上で実行され、一部のワークスペース管理または分析タスクを行うときに有効です。OLAP DMLプログラムを作成し、アナリティック・ワークスペースで繰り返し行う必要のあるタスクを実行でき、開発中のアプリケーションの一部として作成することもできます。

OLAP DMLプログラムを作成するには、次の手順を実行します。

1. DEFINE PROGRAM文を発行して、プログラム・オブジェクトを定義します。定義したプログラムがファンクションで使用される場合は、datatypeおよびdimension引数を含めます。

2. 実行する処理を指定するための内容をプログラムに追加します(「プログラム内容の指定」を参照)。

3. プログラムをコンパイルします(「プログラムのコンパイル」を参照)。

4. プログラムをテストおよびデバッグします(「プログラムのテストとデバッグ」を参照)。

5. プログラムを実行します(「プログラムの実行」を参照)。

プログラム内容の指定

プログラムの内容は、次のOLAP DML文で構成されます。

1. プログラム内容の始まりを示すPROGRAM文。(OLAP Worksheetの編集ウィンドウで仕様をコーディングする場合は不要です。)

2. (オプション)ローカル変数を定義するVARIABLE文。

3. (オプション)引数を宣言するARGUMENT文。(詳細は、「引数の受渡し」を参照してください。)

4. 実行する処理を指定する付加的なOLAP DML文。プログラムでは、ほとんどすべてのOLAP DML文を使用できます。また、フロー制御文など、プログラムでのみ使用されるOLAP DML文もあります。
プログラムに行を追加する際は、次の書式設定ガイドラインを使用してください。

- コードの各行は、最大4,000バイトです。

- 1つの文を次の行に続けるには、行の終わりにハイフン(-)を入力して改行します。ハイフンは、継続文字といいます。

- テキスト・リテラルの途中では継続文字は使用できません。

- 1行に複数の文を記述するには、文をセミコロン(;)で区切ります。

- リテラル・テキストは、一重引用符(')で囲みます。リテラル・テキスト内に一重引用符を含めるには、引用符の前にバックスラッシュ(\)を付けます。エスケープ・シーケンスの指定は、「エスケープ・シーケンス」を参照してください。

- コメントの前には二重引用符(")を付けます。行の先頭または末尾に、二重引用符を付けた文に関するコメントを付けることができます。

5. プログラムの内容の終わりを示す最後のEND文。(OLAP Worksheetの編集ウィンドウで仕様をコーディングする場合は不要です。)

ユーザー定義ファンクションの作成

一般に記述されるプログラムの1つのタイプとして、ユーザー定義ファンクションがあり、OLAP DMLファンクションを使用するのと同じ方法でOLAP DML文で使用できます。ユーザー定義ファンクションとは、単純に値を返すOLAP DMLプログラムのことです。ユーザー定義ファンクションの例は、例9-44「ユーザー定義ファンクションへの引数の受渡し」を参照してください。

ユーザー定義ファンクションを作成する場合、datatypeおよびdimension引数を含むDEFINE PROGRAM文を使用します。プログラム内には、値を返すRETURN文があります。プログラムにおける戻り式は、その定義で指定されたデータ型と一致する必要があります。戻り値のデータ型が、その定義で指定されたデータ型と一致しない場合、その値は定義で指定されたデータ型に変換されます。

ユーザー定義ファンクションでは、引数を使用できます。ユーザー定義ファンクションは、単一の値のみを返します。しかし、ディメンションをループ処理するコンテキストでユーザー定義ファンクションに引数を指定する場合(たとえばREPORT文)、ファンクションはその引数と同じディメンションを持つ結果を返します。

プログラム内でARGUMENT文を使用して引数を宣言し、プログラムの名前の後にカッコで囲んだ引数を指定する必要があります。

関連項目:
プログラムにおける引数の使用の詳細は、「引数の受渡し」を参照してください。

引数の受渡し

ARGUMENT文を使用して、単純な引数と複雑な引数(式など)の両方を宣言できます。また、ARGUMENT文を使用すると、任意のデータ型、ディメンションまたは値セットの引数を宣言できるため、プログラムから別のプログラムに引数を渡したり、独自のユーザー定義ファンクションを作成することが容易になります。ARGUMENT文はすべて、プログラムの実行可能な最初の行の前に置く必要があります。プログラムを実行する際、それらの宣言された引数は、引数としてプログラムに指定した値で初期化されます。その後、プログラムはローカル変数を使用するのと同様にそれらの引数を使用できます。

複数の引数の使用

プログラムは、必要な数の引数を宣言できます。引数を指定してプログラムを実行する場合、その引数の順序はプログラムで宣言された引数の順序と一致します。プログラムを実行する際、カンマや他の記号ではなく空白で引数を区切る必要があります。記号は、引数の一部として扱われます。複数の引数を渡す例は、例9-45「複数の引数の受渡し」を参照してください。

特定のデータ型への値の変換を行わない引数の処理

OLAP DMLプログラムが、値を特定のデータ型に変換せずに引数を処理するように指定することもできます。この場合、プログラムに引数および一時変数を定義するARGUMENT文とVARIABLE文に、WORKSHEETのデータ型を指定できます。WKSDATAを使用すると、引数または変数の実際のデータ型を調べることができます。

アンパサンド置換によるテキスト引数の受渡し

ほとんどの場合は、単純なテキスト引数をプログラムに渡します。しかし、より汎用的なプログラムを作成したり、アナリティック・ワークスペース・オブジェクトの全データや式の結果など、より複雑なテキスト引数を渡したりする場合があります。このような場合、置換式を使用して引数を渡すことができます。このように引数を渡す方法を、アンパサンド置換といいます。

次のような引数では、常にアンパサンドを使用して適切な置換を行う必要があります。

- ワークスペース・オブジェクトの名前(unitsやproductなど)

- 文のキーワード(REPORT文におけるCOMMAやNOCOMMA、SORTコマンドにおけるAやDなど)

アンパサンド置換を使用して、ワークスペース・オブジェクトの値でなく名前をプログラムに渡すと、プログラムではオブジェクト自体にアクセスできます。プログラムでオブジェクトを複数の操作において操作する必要がある場合、この機能は便利です。

注意:
アンパサンドを含むプログラム行のコンパイルおよび保存はできません。そのかわりに、その行は実行時に評価されますが、プログラムの実行速度が低下する場合があります。このため、パフォーマンスを最適化できるように、他の方法を使用できる場合はアンパサンド置換を使用しないでください。

アンパサンド置換を使用して複数のディメンション値を渡す例は、例10-18「LIMITでのアンパサンド置換の使用」を参照してください。アンパサンド置換を使用して式のテキストを渡す例は、例9-47「式のテキストの受渡し」を参照してください。アンパサンド置換を使用してオブジェクト名およびキーワードを渡す例は、例9-48「ワークスペース・オブジェクト名とキーワードの受渡し」を参照してください。

関連項目:
アンパサンド置換の詳細は、「置換式」を参照してください。

プログラムのフロー制御

ほとんどのプログラミング言語と同様、OLAP DMLにはプログラム内におけるフロー制御の決定に使用可能な文が複数あります。ただし、多くのOLAP DML文が本来持っているループ特性のため、OLAP DMLプログラムでは明示的なループはできるだけコーディングしないでください。

表6-1「フロー制御を決定する文」に、OLAP DMLのフロー制御文を示します。OLAP DML文のループ特性の詳細は、「すべてのデータ・オブジェクトの値に対するOLAP DML文の適用」を参照してください。

OLAP DMLには、一般のプログラミング言語の場合と同様のフロー制御文が含まれています。表6-1「フロー制御を決定する文」に、これらの文を示します。

表6-1 フロー制御を決定する文

文

説明

BREAK

SWITCH、FORまたはWHILE文から、SWITCH、FORまたはWHILEに関連付けられたDOENDの直後の文にプログラム制御を移動する。

CONTINUE

FORまたはWHILEループ処理の終わり(DO/DOEND文の直前)にプログラム制御を移動し、ループの繰返しを可能にする。CONTINUEは、プログラム内でのみ、またFORまたはWHILEと組み合せた場合にのみ使用可能。

DO ... DOEND

1つ以上の文のグループをまとめる。DOおよびDOENDは通常、IF文によって指定される条件下で実行される文のグループ、FORまたはWHILEによって繰り返されるループ内の文のグループ、またはSWITCH文のCASEラベルをまとめるために使用される。

FOR

そのステータスが1つ以上の文の繰返しを制御する、1つ以上のディメンションを指定する。

GOTO

実行する次のプログラム文を示すことにより、プログラム内の文の実行順序を変更する。

IF...THEN...ELSEコマンド

指定した条件に一致する場合に、プログラムの1つ以上の文を実行する。オプションで、条件に一致しない場合に、かわりになる文または文のグループを実行することも可能。

OKFORLIMIT

明示的なFORループでループ処理されるディメンションを制限するかどうかを決定するオプション。

RETURN

最後の行に到達する前に、プログラムの実行を終了する。オプションで、プログラムが返す値を指定可能。

SIGNAL

エラー・メッセージを生成し、プログラムの正常な実行を停止する。プログラムにアクティブなトラップ・ラベルがある場合、プログラムの実行はそのラベルに分岐する。トラップ・ラベルがない場合、プログラムの実行は終了し、そのプログラムが他のプログラムによりコールされていた場合は、コール側プログラムに実行制御が戻る。

SWITCHコマンド

プログラムに複数のパスを持つブランチを設定する。プログラムの実行中に使用される特定のパスは、SWITCHにより指定される制御式の値によって決まる。

TEMPSTAT

FORループ内、またはREPORT文によって生成されるループ内で、ループ処理するディメンションを制限する。ステータスはTEMPSTATに続く文の実行後にリストアされる。DO ... DOEND句がTEMPSTATの後に続く場合、ステータスは、一致するDOENDか、BREAK文またはGOTO文が検出された時点でリストアされる。

TRAP

プログラムでエラーが発生した場合、またはユーザーがプログラムを中断した場合に、プログラムの実行がラベルに分岐するようにする。実行がトラップ・ラベルに分岐した場合、そのトラップ・ラベルは非アクティブ化される。

WHILE

ブール式の値がTRUEの間、文を繰り返し実行する。

環境設定の保存

次の2種類の環境があります。

- セッション環境。セッション環境は、プログラムが実行される前の実際のディメンション・ステータス、オプション値および出力先で構成されています。

- プログラム環境。プログラム環境は、プログラムで使用するディメンション・ステータス、オプション値および出力先で構成されています。

プログラム環境の変更

プログラム内でタスクを実行するには、多くの場合、出力先または一部のディメンション値やオプション値を変更する必要があります。たとえば、常に最新の6か月の売上データを示す月間売上レポートを実行するとします。このとき、小数桁のないデータを表示して、売上高がゼロの場合はテキスト「No Sales」を表示し、レポートをファイルに送信します。このようなプログラム環境を設定するには、プログラムで次の文を使用します。

LIMIT month TO LAST 6
DECIMALS = 0
ZSPELL = 'No Sales'
OUTFILE monsales.txt

セッション環境の混乱を避けるため、プログラムの初期化セクションで、プログラムに設定されるディメンションの値およびオプションの値を保存する必要があります。プログラム実行後に保存した環境をリストアできるため、他のプログラムの実行では、変更された値があるかどうかを確認する必要はありません。さらに、出力をファイルに送信した場合、終了セクションでは出力先をデフォルトの出力ファイルに戻す必要があります。

環境を保存およびリストアする方法

次の方法により、プログラムまたはセッションの環境を保存できます。

- 現行のプログラムで変更される現行のステータス、あるいはディメンション、値セット、オプションまたは単一セル変数の値を保存する場合は、PUSHLEVEL文およびPUSH文を使用します。POPLEVEL文およびPOP文を使用すると、現行のステータス値をリストアできます。

- 現行のセッションで使用する現行のステータス、あるいはディメンション、値セット、オプション、単一セル変数または単一セルのリレーションの値を保存、アクセスまたは更新する場合、名前付きコンテキストを使用します。コンテキストを定義するには、CONTEXTコマンドを使用します。

コンテキストは、セッション中に使用するオブジェクト値を保存するための最も高度な方法です。コンテキストを使用すると、保存したオブジェクト値にアクセス、更新およびコミットできます。一方、PUSHとPOPは、値の保存およびリストアのみを実行できます。プログラムの実行中にのみ適用される変更を加える場合は、通常、プログラム内でPUSH文およびPOP文を使用します。

ディメンションのステータスまたはオプションの値の保存

PUSH文は、ディメンションの現行のステータス、オプションの値または単一セル変数の値を保存します。たとえば、プログラムの継続期間中にDECIMALSオプションの値に別の値を設定できるように、オプションの現行の値を保存するには、初期化セクションで次の文を使用します。

PUSH DECIMALS

オプションの値を保存またはその後でリストアするために、元の値を知っている必要はありません。保存した値は、POP文でリストアできます。

POP DECIMALS

プログラムが正常に終了した場合だけではなく、エラーの発生により異常終了した場合にも、POP文が実行されるようにする必要があります。そのために、POP文をプログラムの正常終了セクションと異常終了セクションに配置します。

複数の値の同時保存

次の例で示すように、1つ以上のディメンションのステータスおよびいくつかのオプションや変数の値を1つのPUSH文で保存し、それらの値を1つのPOP文でリストアできます。

PUSH month DECIMALS ZSPELL
...
POP month DECIMALS ZSPELL

レベル・マーカーの使用

複数のディメンションやオプションの値を保存する場合、セッション環境の保存およびリストアにはPUSHLEVEL文とPOPLEVEL文が有効です。

最初にPUSHLEVEL文を使用して、レベル・マーカーを設定します。レベル・マーカーを設定すると、PUSH文を使用することで、ディメンションのステータス、およびオプションまたは単一セル変数の値が保存されます。

PUSHLEVEL文とPOPLEVEL文の間に複数のPUSH文を配置する場合、それらのPUSH文で指定されたオブジェクトはすべて、1つのPOPLEVEL文でリストアされます。

PUSHLEVELおよびPOPLEVELを使用すると、オブジェクトのリストの入力が一度で済むので、プログラムを記述するときの入力を少なくすることができます。さらに、リストからオブジェクトが欠落したり、オブジェクトの名前のスペルを間違えるリスクを減らすこともできます。

レベル・マーカーの作成の例は、例10-85「レベル・マーカーの作成」を参照してください。例10-86「PUSHLEVELおよびPOPLEVELコマンドのネスト」では、PUSHLEVEL文およびPOPLEVEL文のネストについて解説します。

CONTEXTを使用した複数の値の同時保存

PUSHLEVELおよびPOPLEVELを使用するかわりに、CONTEXTコマンドを使用できます。コンテキストを作成した後、ディメンションの現行のステータスの他、オプション、単一セル変数、値セットおよび単一セル・リレーションの値をそのコンテキストに保存できます。その後、オブジェクト値の一部またはすべてをコンテキストからリストアできます。CONTEXTファンクションは、コンテキスト内のオブジェクトに関する情報を返します。

エラーの処理

プログラムのいずれかの場所でエラーが発生した場合、Oracle OLAPは次のアクションを実行します。

1. エラーの名前をERRORNAMEオプションに格納し、エラー・メッセージのテキストをERRORTEXTオプションに格納します。

注意:
ERRNAMESオプションがデフォルト値のYESに設定されている場合、ERRORTEXTオプションにはエラーの名前(ERRORNAMEオプションの値)およびエラー・メッセージのテキストが含まれます。

2. ECHOPROMPTがYESの場合、Oracle OLAPは入力行、エラー・メッセージおよび出力行を現行の出力ファイルにエコー出力します。OUTFILE文またはDBGOUTFILE文を使用すると、エラー・メッセージをファイルに記録できます。ファイルに出力を送信する例は、例10-69「出力のファイルへの送信」を参照してください。

3. エラー・トラップがオフの場合は、プログラムの実行は停止されます。エラー・トラップがオンの場合、エラーはトラップされます。

エラー・トラップ

プログラムを正常に実行するには、エラーが発生することを予想して、エラーを処理するためのシステムを設定します。TRAP文を使用すると、プログラムでエラー・トラップ・メカニズムをオンにできます。エラー・トラップがオンになっていれば、エラーが通知された場合でもプログラムの実行は停止されません。そのかわりに、エラー・トラップにより次の処理が実行されます。

1. エラー・トラップ・メカニズムをオフにし、エラー処理の過程で別のエラーが発生した場合の無限ループを回避します。

2. TRAP文で指定したラベルに分岐します。

3. ラベルの後に続く文を実行します。

コール側プログラムへのエラーの受渡し

コール側のプログラムにエラーを渡すには、次に示す2つの方法のいずれかを使用できます。使用する方法は、エラー・メッセージを生成するタイミングによって異なります。最初の方法を使用した場合、エラー・メッセージはただちに生成され、その後エラー状態がプログラムの連鎖を経由して渡されます。2番目の方法を使用した場合は、エラーがプログラムの連鎖を経由して渡されてから、エラー・メッセージが生成されます。詳細は、「エラーの受渡し: 方法1」および「エラーの受渡し: 方法2」を参照してください。

どちらの方法の場合も、プログラムの連鎖内の各プログラムにおいて適切なエラー処理が実行され、ある時点でOracle OLAPから現行の出力ファイルへエラー・メッセージが送られます。

エラーの受渡し: 方法1

この方法を使用した場合、エラー・メッセージはただちに生成され、その後エラー状態がプログラムの連鎖を経由して渡されます。

TRAP文は、(デフォルトの)PRINTオプションと組み合せて使用します。エラーが発生すると、エラー・メッセージが生成され、実行はトラップ・ラベルに分岐します。トラップ・ラベル後は、内容を問わず必要なクリーンアップを実行し、次の文を実行します。

SIGNAL PRGERR

この文の使用によって、エラー条件が作成され、現行のプログラムの実行元であったプログラムにこのエラー条件が渡されます。ただし、PRGERRからはエラー・メッセージは生成されません。PRGERRでは、ERRORNAMEオプションが空白値に設定されます。

コール側のプログラムにトラップ・ラベルがある場合、プログラムの実行はそのラベルに分岐します。ネストしたプログラムの連鎖内の各プログラムがTRAPおよびSIGNALをこのように使用する場合は、プログラムの連鎖全体を経由してエラー状態を渡すことができます。

エラーの受渡し: 方法2

この方法を使用した場合は、エラーがプログラムの連鎖を経由して渡されてから、エラー・メッセージが生成されます。

TRAP文は、NOPRINTオプションと組み合せて使用します。エラーが発生すると、実行はトラップ・ラベルに分岐しますが、エラー・メッセージは表示されません。トラップ・ラベル後は、内容を問わず必要なクリーンアップを実行し、次の文を実行します。

SIGNAL ERRORNAME ERRORTEXT

オプションERRORNAMEおよびERRORTEXTには、元のエラーの名前とメッセージが記録されているので、このSIGNAL文を実行すると、元のエラーが再現されます。その後、このエラーは、現行のプログラムの実行元であったプログラムに渡されます。

コール側のプログラムにもトラップ・ラベルがある場合、プログラムの実行はそのラベルに分岐します。ネストしたプログラムの連鎖内の各プログラムがTRAP...NOPRINTおよびSIGNAL ERRORNAME ERRORTEXTをこのように使用する場合は、プログラムの連鎖全体を経由してエラー状態を渡すことができます。Oracle OLAPでは、プログラムの連鎖の最後にエラー・メッセージを生成します。

エラー処理を実行するレベルに到達したときにアプリケーションを続行する場合は、SIGNAL文を省略します。独自のメッセージを表示するには、SHOW文を使用します。

エラー・メッセージの抑止

特定のエラーに対し、本来であれば生成されるエラー・メッセージが生成されないようにするには、次のようにTRAP文にNOPRINTキーワードを使用します。

TRAP ON error NOPRINT

TRAPコマンドでNOPRINTキーワードを使用すると、制御はerrorラベルに分岐し、エラーが発生した場合、エラー・メッセージは生成されません。その後、errorラベルの後に続く文が実行されます。

エラー・メッセージを抑止する場合、異常終了セクションで独自のメッセージを生成できます。SHOW文を使用すると、指定したテキストが生成されますが、エラーは通知されません。

TRAP ON error NOPRINT
...
error:
...
SHOW 'The report will not be produced.'

メッセージを生成した後、プログラムでは次の文が実行されます。

独自のエラー・メッセージの作成

文または文のシーケンスがその要件を満たしていない場合に発生するエラーはすべて、自動的に通知されます。作成するプログラムには、アプリケーション固有の要件を追加できます。要件を満たさない場合、SIGNAL文を実行してエラーを通知できます。

エラーには任意の名前を付けることができます。SIGNAL文を実行すると、OLAP DMLのエラー名が自動的に格納されるのと同様に、指定したエラー名がERRORNAMEオプションに格納されます。SIGNAL文で独自のエラー・メッセージを指定すると、OLAP DMLのエラー・メッセージが生成されるのと同じように、独自のメッセージが生成されます。TRAP文を使用してエラーをトラップする場合、エラー・メッセージが生成された後に、SIGNAL文がTRAPラベルに分岐します。

エラーの通知の例は、例10-123「エラーの通知」を参照してください。

エラー・ラベルに分岐せずに警告メッセージを生成する場合、SHOW文を使用できます(例10-121「SHOWによるエラー・メッセージの作成」を参照)。

ネストしたプログラムでのエラーの処理

ネストしたプログラムでエラーを処理する場合、各プログラムのエラー処理セクションで環境をリストアする必要があります。さらに、そのプログラムに特有の特別なエラー状態も処理できます。たとえば、プログラムが固有のエラーを通知する場合、そのエラーをテストする文を含めることができます。

ネストしたプログラムで発生したその他のエラーは、プログラムの連鎖を経由して渡され、各プログラムで処理されます。ネストしたプログラムの連鎖を経由してエラーを渡すには、エラー・メッセージを生成するタイミングに応じて、次に示す2つの方法のいずれかを使用できます。

- エラー・メッセージがただちに生成され、その後にエラー状態がプログラムの連鎖を経由して渡されます(例10-157「プログラム・エラー・メッセージの即時の表示」を参照)。

- 最初にエラーがプログラムの連鎖を経由して渡され、連鎖の最後にエラー・メッセージが生成されます(例10-158「連鎖の最後でのプログラム・エラー・メッセージの生成」を参照)。

どちらの方法でもSIGNAL文を使用します。

セッション環境の保存中のエラーの処理

セッション環境の保存中に発生するエラーを適切に処理するには、TRAP文の前にPUSHLEVEL文を、TRAP文の後にPUSH文を配置します。

PUSHLEVEL 'firstlevel'
TRAP ON error
PUSH
...

プログラムの異常終了セクションに、エラー・ラベル(後ろにコロンを入力)、およびセッション環境をリストアしてエラーを処理する文を配置します。異常終了セクションは、次のようになります。

error:
POPLEVEL 'firstlevel'
OUTFILE EOF

これらの文により、保存されたディメンション・ステータスおよびオプション値がリストアされ、出力をデフォルトの出力ファイルに再転送します。

プログラムのコンパイル

COMPILE文を使用して、プログラムを明示的にコンパイルできます。プログラムを明示的にコンパイルしない場合、プログラムを最初に実行するときにコンパイルされます。

プログラムのコンパイル時、プログラム文は、効率的に処理されるコードに変換され、そのプログラムの元のテキストよりもはるかに高速に実行されます。プログラム内にエラーが検出された場合、コンパイルは完了せず、プログラムはコンパイルされていないと判断されます。

プログラムがコンパイルされると、現行のセッションでプログラムを実行するたびにコンパイルされたコードが使用されます。プログラムのコンパイル後にアナリティック・ワークスペースを更新およびコミットすると、コンパイルされたコードはアナリティック・ワークスペースに保存され、今後のセッションでプログラムを実行するために使用されます。このため、プログラムのコンパイル後に更新およびコミットを確実に行ってください。プログラムのコンパイル後に更新およびコミットを発行することは、そのプログラムが、多くのユーザーが実行しているアプリケーションの一部である場合は特に重要です。コンパイルされたプログラムがアナリティック・ワークスペースに保存されていない場合、プログラムは各ユーザー・セッションで個別に再コンパイルされます。

例9-69「プログラムのコンパイル」では、COMPILEを使用したプログラムのコンパイルについて解説します。

プログラムがコンパイルされたかどうかの確認

OBJファンクションでISCOMPILEDオプションを使用すると、アナリティック・ワークスペース内の特定のプログラムが、最後に変更されてからコンパイルされたかどうかを判断できます。このファンクションは、ブール値を返します。

SHOW OBJ(ISCOMPILED 'myprogram')

コンパイルを回避するプログラミング方法

アンパサンド置換を含むプログラム行は、コンパイルされません。すべての構文エラーは、プログラムが実行されるまで検出されません。他の行が正常にコンパイルされたプログラムは、コンパイルされたプログラムと判断されます。

プログラムがオブジェクトを定義し、プログラム内でそのオブジェクトを使用する場合、プログラムはコンパイルされません。そのオブジェクトがまだアナリティック・ワークスペースに存在しないため、COMPILEはオブジェクトへの参照をスペル間違いとして処理します。

プログラムのテストとデバッグ

作成したプログラムが正しくコンパイルされた場合でも、そのプログラムを実行してテストする必要があります。プログラムの実行は、アンパサンド置換を使用する文のエラー、ロジックのエラー、およびネストしたプログラムのエラーを検出するのに役立ちます。

プログラムを実行してテストするには、プログラムが処理する典型的なデータのフルセットをテスト・データとして使用します。エラー処理メカニズムを含むプログラムのすべての機能をテストしたことを確認するには、異なるデータおよび応答を使用し、プログラムを複数回実行します。次のようなテスト・データを使用します。

- 予想される範囲内のデータ

- 予想される範囲外のデータ

- プログラムの各セクションを実行するデータ

診断メッセージの生成

プログラムを実行するたびに、プログラムがその文を正しい順序で実行し、出力が正しいことを確認する必要があります。作成したプログラムの実行を分析する手段として、プログラムにSHOW文またはTRACE文を記述し、診断メッセージまたはステータス・メッセージを生成できます。テストの完了後に、これらの文を削除します。

プログラムやネストしたプログラムでエラーを検出した場合、またはエラーが発生する可能性がある場合は、この後に説明するデバッグ方法を使用して、エラーが発生する場所を特定できます。

不適切なコード行の識別

BADLINEオプションをYESに設定すると、不適切なコード行が検出された場合、エラー・メッセージとともに追加情報が生成されます。エラーが発生すると、エラー・メッセージ、プログラムの名前、およびエラーを発生させたプログラム行が、現行の出力ファイルに送信されます。特定されたプログラムを編集してエラーを修正し、元のプログラムを実行できます。BADLINEの使用例は、例5-4「BADLINEオプションの使用」を参照してください。

デバッグ・ファイルへの出力の送信

作成したプログラムにロジックのエラーがあっても、エラー・メッセージが表示されることなくそのプログラムが実行されることがありますが、実行される文または生成される結果は適切ではありません。たとえば、IF文に不適切なブール式を記述する(EQのかわりにNEを使用するなど)とします。プログラムは指定した文を実行しますが、不適切な条件で実行されます。

プログラム・ロジックのエラーを検出するには、多くの場合、文が実行される順序を調べる必要があります。その方法の1つとして、次に示すようにDML文を発行し、デバッグ・ファイルを作成してそのファイルを調べることにより、作成したプログラムの問題を診断します。

1. デバッグ・ファイルを作成するには、DBGOUTFILE文を使用します。

2. 各プログラム行を実行する際、デバッグ・ファイルに送信するよう指定するには、PRGTRACEオプションをYESに設定します。

3. (オプション)デバッグ・ファイルに、プログラム入力およびエラー・メッセージの両方を併記しながらプログラム行を出力するには、ECHOPROMPTオプションをYESに設定します。

関連項目:
次のデバッグ・ファイルの使用例を参照してください。

- 例9-76「デバッグ・ファイルを使用したデバッグ」

- 例9-77「デバッグ情報のファイルへの送信」

プログラムの実行

CALL文を使用すると、値を返さないプログラムを実行できます。引数はカッコで囲み、値により渡されます。たとえば、2つのINTEGER値の和を計算する簡単なプログラムを作成し、additという名前を付けます。アプリケーションのメイン・プログラムでCALL文を使用し、そのプログラムを実行できます。

OLAP DML文を発行するのと同じ方法でプログラムを実行することもできます。ユーザー定義ファンクションは、組込みファンクションを使用するときと同じ方法で実行します。式でプログラム名を使用し、プログラム引数がある場合はカッコで囲みます。値を返さないプログラム(ユーザー定義コマンド)では、OLAP DMLコマンドと同じようにプログラム名を使用します。ユーザー定義プログラムをファンクションとして実行すると、そのプログラムの戻り値はNAとなります。

次のアクションがOracle OLAPで発生した場合に自動的に実行されるプログラムを作成することもできます。

- AW ATTACHを実行する。AW CREATE、AW DELETE、AW DETACH、DEFINE、MAINTAIN、PROPERTY、UPDATEまたはSET文(「トリガー・プログラム」を参照)。

- NA値が検出される($NATRIGGERを参照)。

OLAP DMLプログラムの代表的なタイプ

この項では、次の種類のプログラムについて概説します。

- 起動プログラム

- データのインポートおよびエクスポート・プログラム

- トリガー・プログラム

- 集計、割当て、およびモデリングのプログラム

- 予測プログラム

- ワークスペース・オブジェクトをエクスポートおよびインポートするプログラム

起動プログラム

起動プログラムは、ユーザー自身が作成するプログラムで、AW ATTACH文の実行時、Oracle OLAPによってその名前がチェックされます。起動プログラムは、定義および作成しないかぎりアナリティック・ワークスペースには存在しません。起動プログラムでは、任意のOLAP DML文を実行でき、独自のプログラムも実行可能です。たとえば、起動プログラムにより、オプションをアプリケーションに適した値に設定できます。

最初にアナリティック・ワークスペースをアタッチするときに、Oracle OLAPでは、次の順序でOracle OLAP起動プログラムが検索され、実行されます(存在する場合)。

1. 権限プログラム。権限プログラムの実行は、AW ATTACH文に指定したアタッチ・モード、およびアタッチしているアナリティック・ワークスペースに関連する権限プログラムが存在するかどうかによって決まります。詳細は、「権限プログラム」を参照してください。

2. ONATTACHプログラム。ONATTACHプログラムの実行は、AW ATTACH文のONATTACH句およびNOONATTACH句のコーディング方法、およびアタッチしているアナリティック・ワークスペースにONATTACHという名前のプログラムが存在するかどうかによって決まります。詳細は、「ONATTACHプログラム」を参照してください。

3. AUTOGOプログラム。AUTOGOプログラムの実行は、AW ATTACH文のAUTOGO句およびNOAUTOGO句のコーディング方法、およびアタッチしているアナリティック・ワークスペースにAUTOGOという名前のプログラムが存在するかどうかによって決まります。詳細は、「AUTOGOプログラム」を参照してください。

4. トリガー・プログラム。トリガー・プログラムの実行は、すでにアタッチしているアナリティック・ワークスペースにTRIGGER_AWという名前のプログラムが存在するかどうかによって決まります。アタッチしたアナリティック・ワークスペースの1つにTRIGGER_AWプログラムが存在する場合は、別のアナリティック・ワークスペースを作成、アタッチ、デタッチまたは削除すると、このプログラムが実行されます。詳細は、「トリガー・プログラム」およびTRIGGER_AWを参照してください。

注意:
セッション内では、次の点に注意します。

- アタッチ済ワークスペースを再アタッチする場合、Oracle OLAPでは、権限プログラムおよびONATTACHプログラムの検索と実行を行いません。

- すでにデタッチされているワークスペースを再アタッチする場合、そのワークスペースをNOCACHEキーワードを指定したAW DETACH文を使用してデタッチしている場合を除き、Oracle OLAPでは、権限プログラム、ONATTACHプログラムまたはAUTOGOプログラムの実行を行いません。

権限プログラム

権限プログラムは、管理者が作成するプログラムで、ワークスペースのデータにアクセスするアクセス権をユーザーに付与します。ユーザーが最初にアナリティック・ワークスペースをアタッチするときに、Oracle OLAPでは、アタッチ・モードに適した権限プログラムが存在するかどうかを確認します。

注意:
アタッチ済ワークスペースを再アタッチする場合、Oracle OLAPでは、権限プログラムの検索と実行を行いません。

アタッチ・モードごとの権限プログラムには、表6-2「様々なアタッチ・モードに対応する権限プログラムの名前」に示されている特定の名前が必要です。

表6-2 様々なアタッチ・モードに対応する権限プログラムの名前

アタッチ・モード

プログラムの名前

読取り専用

PERMIT_READ

マルチライタ、読取り/書込み

PERMIT_WRITE

該当する権限プログラムが存在する場合は、Oracle OLAPによってそのプログラムが実行されます。アナリティック・ワークスペースをアタッチするときにユーザーがパスワードを指定すると、このパスワードは権限プログラムの処理に引数として渡されます。

注意:
ディメンション・サロゲートには、そのディメンションのアクセス権があります。そのディメンションのディメンション・サロゲートの値にアクセスするためにアクセス権を付与または拒否するには、そのディメンションに対してPERMITを使用します。

権限プログラムにより、プログラムが常駐するアナリティック・ワークスペースに対して2つのレベルのアクセス権が制御可能です。

- アナリティック・ワークスペース・レベルでのアクセス: 権限プログラムの戻り値に応じて、アナリティック・ワークスペース全体へのアクセスがユーザーに許可されるかどうかが決定されます。この戻り値を使用すると、ユーザーがワークスペースをアタッチする権限を持っているかどうかをOracle OLAPに示すことができます。

- オブジェクト・レベルでのアクセス: 読取り専用、または読取り/書込みアタッチの権限プログラム内でPERMIT文を指定すると、個々のワークスペース・オブジェクトへのアクセス権を許可または制限できます。PERMITプログラムは、PERMIT文の発行対象となるオブジェクトと同じワークスペースに存在する必要があります。

注意:
特定の権限プログラム内で参照されているすべてのオブジェクトは、同じアナリティック・ワークスペースに存在している必要があります。

権限プログラムを作成するには、認識可能な名前でユーザー定義ファンクション(「ユーザー定義ファンクションの作成」を参照)を定義し、プログラムの内容を定義します(「プログラム内容の指定」を参照)。

ONATTACHプログラム

ONATTACHプログラムには、名前を自由に付けることも、または明示的にONATTACHという名前を付けることもできます。

注意:
アナリティック・ワークスペースがOLAP APIを使用してOLAPキューブとして作成されている場合、OLAP APIによってONATTACHという名前のプログラムも作成されている場合があります。このように自動的に作成されたONATTACHプログラムは変更できません。また、ONATTACHの実行を無効にすることはお薦めしません。
したがって、アナリティック・ワークスペースにこのタイプのONATTACHプログラムが存在する場合は、別のタイプの起動プログラムを作成して、アナリティック・ワークスペースがアタッチされているときに実行する動作を指定してください。

ONATTACHプログラムの実行を指定する方法は、その名前に応じて次のように異なります。

- アナリティック・ワークスペースにONATTACHという名前のプログラムが存在するときは、AW ATTACH文にNOOTTACHキーワードを指定した場合または別のプログラム名を指定するONATTACH句を記述した場合を除き、ワークスペースをアタッチするたびに、そのプログラムが自動的に実行されます。

- ONATTACHという名前の付いていないONATTACHプログラムを実行するには、AW ATTACH文のONATTACH句内にプログラムの名前を指定します。

注意:
キャッシュされたアタッチ済ワークスペースを再アタッチする場合、Oracle OLAPでは、ONATTACHプログラムの検索と実行を行いません。ワークスペースを再アタッチしたときにOracle OLAPでONATTACHプログラムの検索と実行が行われるように、強制的にアナリティック・ワークスペースを完全にデタッチするには、アナリティック・ワークスペースをデタッチするDETACH文でNOCACHEキーワードを指定します。

AUTOGOプログラム

AUTOGOプログラムには、名前を自由に付けることも、または明示的にAUTOGOという名前を付けることもできます。

AUTOGOプログラムの実行を指定する方法は、その名前に応じて次のように異なります。

- アナリティック・ワークスペースにAUTOGOという名前のプログラムが存在するときは、AW ATTACH文にNOAUTOGOキーワードを指定した場合または別のプログラム名を指定するAUTOGO句を記述した場合を除き、ワークスペースをアタッチするたびに、そのプログラムが自動的に実行されます。

- AUTOGOという名前の付いていないAUTOGOプログラムを実行するには、AW ATTACH文のAUTOGO句内にプログラムの名前を指定します。

データのインポートおよびエクスポート・プログラム

OLAP DMLでは、リレーショナル表、フラット・ファイルおよびスプレッドシートとアナリティック・ワークスペース・オブジェクトとの間で、データのインポートやエクスポートが可能です。

リレーショナル表に対するデータのインポートおよびエクスポート

OLAP DMLのSQL文を使用して、SQL文をOLAP DMLプログラムに埋め込むことができます。OLAP DMLのSQL文を使用すると、リレーショナル表からアナリティック・ワークスペース・オブジェクトにデータをインポートしたり、アナリティック・ワークスペース・オブジェクトからリレーショナル表にデータをエクスポートしたりできます。

リレーショナル表からワークスペース・オブジェクトへのデータのインポート

OLAP DMLプログラム内でOLAP DML SQL文を使用すると、暗黙カーソルまたは明示カーソルのどちらかを使用してアナリティック・ワークスペース・オブジェクトにリレーショナル・データをコピーできます。

- 暗黙カーソルを使用して、リレーショナル表からアナリティック・ワークスペース・オブジェクトにデータをコピーするには、SQL SELECT文を使用します。このOLAP DML文は、OLAP Worksheetで対話的に使用できる他、OLAP DMLプログラム内で使用することもできます。

- 明示カーソルを使用して、リレーショナル表からアナリティック・ワークスペース・オブジェクトにデータをコピーするには、次に示す文を順序のとおりに使用します。これらの文は、OLAP DMLプログラム内でのみ使用できます。OLAP Worksheetで対話的に使用することはできません。

1. SQL DECLARE CURSORを使用して、SQLカーソルをSELECT文またはプロシージャに関連付けて定義します。

2. SQL OPENを使用して、SQLカーソルをアクティブ化します。

3. SQL FETCHおよびSQL IMPORTを使用して、カーソルで指定されたデータを取得および処理します。

4. SQL CLOSEを使用して、SQLカーソルをクローズします。

5. SQL CLEANUPを使用して、SQLカーソルの宣言を取り消し、SQLカーソルのメモリー・リソースを解放します。

ワークスペース・オブジェクトに表データをコピーするプログラムの例は、SQL FETCHおよびSQL IMPORTを参照してください。

OLAP DMLオブジェクトからリレーショナル表へのデータのエクスポート

プログラム内でOLAP DML SQL文をINSERTキーワードとともに使用すると、アナリティック・ワークスペース・オブジェクトからリレーショナル表にデータをコピーできます。通常、これを行うには、OLAP DMLプログラムで次の文を発行します。

1. SQL PREPARE文。INSERT文およびUPDATE文をプリコンパイルするのに使用します。

2. SQL EXECUTE文。手順1でプリコンパイルした文を実行するのに使用します。

フラット・ファイルに対するデータのインポートおよびエクスポート

Oracle OLAPには、フラット・ファイルに対してデータの読取りや書込みを行うための文が複数用意されています。これらの文は、通常、特別なプログラムの中で組み合せて使用されます。

スプレッドシートに対するデータのインポートおよびエクスポート

OLAP DMLプログラムでは、IMPORT文を使用して、スプレッドシートからアナリティック・ワークスペース・オブジェクトにデータをインポートできます。また、EXPORT文を使用して、アナリティック・ワークスペース・オブジェクトからスプレッドシートにデータをエクスポートできます。

トリガー・プログラム

DEFINE、MAINTAIN、PROPERTY、SET(=)、UPDATEおよびAWコマンドは、Oracle OLAPではOLAP DMLプログラムの実行をトリガーするイベントとして認識されます。

- DEFINE、MAINTAIN、PROPERTY、UPDATE、SETの各コマンドによりトリガーされるプログラムをオブジェクト・トリガー・プログラムといいます(この項およびTRIGGERコマンドの項を参照)。

- TRIGGER_AWという名前のプログラムは、アナリティック・ワークスペース内で定義され、別のアナリティック・ワークスペースが作成、アタッチ、デタッチまたは削除された場合にトリガーされます。詳細は、「TRIGGER_AW」の説明を参照してください。

トリガー・プログラムは、アプリケーション固有のメタデータをメンテナンスするために頻繁に作成されます。トリガー・プログラムには、それらをトリガーする文に応じていくつかの特長があります。トリガー・プログラムには、トリガーする文が実行される前に実行されるものと、後に実行されるものがあります。Oracle OLAPがプログラムに引数を渡すかどうかは、プログラムをトリガーする文によって決まります。Oracle OLAPは、ほとんどのトリガー・プログラムが実行されるまでディメンション・ステータスを変更しませんが、一部のMAINTAIN文がプログラムの実行をトリガーする前にディメンション・ステータスを変更します。ほとんどの場合、トリガー・プログラムには選択した任意の名前を付けることができますが、一部のイベントには特定の名前のプログラムが必要です。「オブジェクト・トリガー・プログラムの特長」では、これらの特性について解説します。

関連項目:
次の説明を参照してください。

- トリガーに関する情報を取得するTRIGGERファンクション、DESCRIBEコマンドおよびOBJファンクション

- すべてのトリガーを無効にするときに使用可能なUSETRIGGERSオプション

オブジェクト・トリガー・プログラムの作成

オブジェクトがアナリティック・ワークスペースで定義されると、次の手順に従ってオブジェクトのトリガー・プログラムを作成できます。

1. プログラムを定義します(DEFINE PROGRAMを参照)。

2. プログラムに付ける名前と、プログラムをユーザー定義プログラムにするかどうかを決定します。(表6-3「オブジェクト・トリガー・プログラムの特長」を参照。)プログラムをユーザー定義プログラムにする場合は、トリガー・プログラムをユーザー定義ファンクションとして定義するかどうかを決定します。

3. プログラムを実際にコーディングします(「プログラム内容の指定」を参照)。

4. トリガー・プログラムをコーディングする際は、次の点に注意してください。

- 表6-3「オブジェクト・トリガー・プログラムの特長」に基づいて、Oracle OLAPが値をプログラムに渡すかどうかを判断します。渡す場合は、ARGUMENT文を使用してそれらの引数をプログラム内で宣言し、VARIABLE文を使用して値のプログラム変数を定義します。(引数の詳細は、表6-4「トリガー・プログラムに渡される引数」を参照してください。)

- Assignイベントによってトリガーされるプログラムは、イベントが定義されたオブジェクトにOracle OLAPが値を割り当てるたびに実行されます。このため、Assignイベントでトリガーされるプログラムは通常、代入文がオブジェクトをループ処理して値を代入するときに繰り返し実行されます。TRIGGERASSIGNを使用して、プログラムの実行をトリガーした代入文により指定される値とは異なる値を割り当てることができます。

- 場合によっては、Oracle OLAPは、Maintainイベントがプログラムの実行をトリガーする際にメンテナンスされるディメンションのステータスを変更します。詳細は、表6-5「Maintainイベントによりトリガーされたプログラムがディメンション・ステータスに与える影響」を参照してください。

- プログラム内でCALLTYPEファンクションを使用して、プログラムがトリガーとして実行されたことを識別します。

5. トリガー・プログラムがTRIGGER_AFTER_UPDATE、TRIGGER_BEFORE_UPDATEまたはTRIGGER_DEFINEプログラムではない場合、TRIGGERコマンドを使用してプログラムを適切なオブジェクトおよびイベントに関連付けます。

6. 再帰的トリガーはサポートされていません。USETRIGGERSオプションをNOに設定してから、トリガー・プログラム自体をトリガーするトリガー・プログラムの内部で同じDML文を発行する必要があります。たとえば、MAINTAIN ADD文によってトリガーされる、TRIGGER_MAINTAIN_ADDというプログラムを作成したとします。TRIGGER_MAINTAIN_ADDプログラムの内部で、USETRIGGERSオプションをNOに設定してからMAINTAIN文を発行する必要があります。

オブジェクト・トリガー・プログラムの特長

オブジェクト・トリガー・プログラムには、それらをトリガーする文に応じていくつかの特長があります。トリガー・プログラムには、トリガーする文が実行される前に実行されるものと、後に実行されるものがあります。Oracle OLAPがプログラムに引数を渡すかどうかは、プログラムをトリガーする文によって決まります。Oracle OLAPは、ほとんどのトリガー・プログラムが実行されるまでディメンション・ステータスを変更しませんが、一部のMAINTAIN文がプログラムの実行をトリガーする前にディメンション・ステータスを変更します。ほとんどの場合、トリガー・プログラムには選択した任意の名前を付けることができますが、一部のイベントには特定の名前のプログラムが必要です。

表6-3「オブジェクト・トリガー・プログラムの特長」には、プログラムをトリガーするOLAP DML文、プログラムの必須名(存在する場合)、Oracle OLAPがプログラムによる戻り値を使用するかどうか、Oracle OLAPがプログラムに引数を渡すかどうかが記載されています。

トリガー・プログラムの設計時には、次の点に注意してください。

- DML文の前に実行されるトリガー・プログラム: トリガー側のOLAP DML文が実行される前に実行されるトリガー・プログラムの場合は、BOOLEAN値を返すユーザー定義ファンクションとしてトリガー・プログラムを定義できます。このプログラムによる戻り値は、トリガー・プログラムの実行をトリガーした文をOracle OLAPが実行するかどうかを決定します。プログラムの戻り値がFALSEの場合、Oracle OLAPはトリガー側の文を実行しませんが、戻り値がTRUEまたはNAの場合は、トリガー側の文が実行されます。

- トリガー・プログラムに渡される引数: Oracle OLAPは、一部のトリガー・プログラムに引数を渡します。これらのプログラムは、表6-3「オブジェクト・トリガー・プログラムの特長」に記載されています。また、引数の説明は、表6-4「トリガー・プログラムに渡される引数」に記載されています。これらの引数をプログラム内で宣言するには、ARGUMENT文を使用します。値に対してプログラム変数を定義するには、VARIABLEを使用します。WKSDATAファンクションを使用して、WORKSHEETデータ型で引数のデータ型を取得します。

- Assignトリガー・プログラム: Oracle OLAPは、イベントが定義されたオブジェクトに値を代入するたびに、Assignイベントによってトリガーされるプログラムを実行します。このため、Assignイベントでトリガーされるプログラムは通常、代入文がオブジェクトをループ処理して値を代入するときに繰り返し実行されます。これが実行されるたびに、代入される値は、引数1としてAssignトリガー・プログラムに渡されます。(詳細は、表6-4「トリガー・プログラムに渡される引数」を、例については例10-163「変数のASSIGNトリガー」を参照。)Assignトリガー・プログラムの中でTRIGGER ASSIGN文を使用して、Assignトリガー・プログラムの実行をトリガーした代入文によって指定される値とは別の値を代入できます。
計算式に値を代入できるのは、その計算式にAssignトリガーが定義されている場合のみです。Assignイベントを持つ計算式に値を代入すると、Oracle OLAPは、代入された値のイベントに対してトリガー・プログラムを実行し、代入された値をトリガー・プログラムに渡します。Assignトリガーは、計算式自体の定義は変更しません。計算式に関するAssignトリガーの例は、例10-165「計算式に関するASSIGNトリガー」を参照してください。

- Maintainトリガー・プログラムとディメンション・ステータス: Maintainイベントがプログラムの実行をトリガーすると、Oracle OLAPは、メンテナンスの対象になっているディメンションのステータスを変更する場合があります。詳細は、表6-5「Maintainイベントによりトリガーされたプログラムがディメンション・ステータスに与える影響」を参照してください。

- Maintainトリガーとディメンション・サロゲート: ディメンション・サロゲートのMaintainトリガーは、その他のオブジェクトのMaintainトリガーとは異なります。ディメンション・サロゲートに対してMAINTAIN文を正常に発行できるのは、ディメンション・サロゲートにMaintainトリガーが存在する場合のみです。Maintainトリガーのないサロゲート・ディメンションに対してMAINTAIN文を発行すると、エラーが返されます。さらに、Maintain AddトリガーやMaintain Mergeトリガーの場合も、引数がプログラムに渡されるかどうかは、次のようにトリガーが定義されるオブジェクトによって決まります。

- Maintainトリガーを持つディメンション・サロゲートの場合、Oracle OLAPは、値が追加またはマージされるたびにトリガー・プログラムを1回実行し、値をプログラムに渡します。

- Maintainトリガーを持つその他のオブジェクトの場合、Oracle OLAPが実行するトリガー・プログラムはMAINTAIN文の実行後1回のみであり、プログラムに値は渡されません。

表6-3 オブジェクト・トリガー・プログラムの特長

トリガー側の文(イベント)

プログラム名

戻り値

渡される引数

=(代入)文(SET)

必須名なし

なし

あり

DEFINE

TRIGGER_DEFINE

なし

なし

MAINTAIN ADD

必須名なし

なし

なし

MAINTAIN DELETE(ALL以外)

必須名なし

あり

なし

MAINTAIN DELETE ALL

必須名なし

あり

なし

MAINTAIN MERGE

必須名なし

なし

なし

MAINTAIN MOVE

必須名なし

あり

あり

MAINTAIN RENAME

必須名なし

あり

あり

PROPERTY

必須名なし

あり

あり

UPDATE (Update AW)

TRIGGER_AFTER_UPDATE

なし

なし

UPDATE (Update AW)

TRIGGER_BEFORE_UPDATE

あり

なし

UPDATE (Update Multi)

必須名なし

なし

なし

表6-4 トリガー・プログラムに渡される引数

イベント

引数1

引数2

Property

PROPERTY文によってプロパティがオブジェクトに割り当てられている場合は、プロパティの名前。PROPERTY文によって1つ以上のプロパティが削除される場合は、リテラルDELETE。(TEXTデータ型)

引数1の値がDELETEの場合は、プロパティの名前またはリテラルALL。これ以外の場合は、プロパティの名前。(WORKSHEETデータ型)

Assignment

代入する値。値の代入先となるオブジェクトのデータ型がわかったら、そのデータ型を引数に指定する。実際のデータ型がわからない場合は、引数のデータ型としてWORKSHEETを指定する。

なし。Oracle OLAPからプログラムに渡される引数は1つのみ。

Maintain Add

(ディメンション・サロゲート専用)追加された値。(WORKSHEETデータ型)

Maintain Rename

名前変更の対象となるディメンション値。(TEXTデータ型)

ディメンション・メンバーの新しい名前。(WORKSHEETデータ型)

Maintain Merge

(ディメンション・サロゲート専用)マージされた値。(WORKSHEETデータ型)

Maintain Move

移動するディメンション値の位置。(TEXTデータ型)

リテラルBEFOREまたはAFTER。(WORKSHEETデータ型)

表6-5 Maintainイベントによりトリガーされたプログラムがディメンション・ステータスに与える影響

イベントとサブイベント

プログラム実行前のディメンション・ステータス

Maintain Add

ステータスは追加直後のディメンション値に設定される。

Maintain Delete

ステータスは削除直前のディメンション値に設定される。

Maintain Delete All

現行のステータスは変更されない。

Maintain Merge

ステータスはマージ直後のディメンション値に設定される。

Maintain Move

ステータスは移動直前のディメンション値に設定される。

Maintain Rename

現行のステータスは変更されない。

集計、割当て、およびモデリングのプログラム

OLAP DMLを使用してデータの集計、割当て、またはモデリングを実行するには、まず計算仕様の定義(「計算オブジェクトの作成」を参照)を行って、実行する計算の種類を指定します。後でデータベースのメンテナンス手順として集計、割当て、またはモデリングされた値を変数に移入するには、計算オブジェクトを実行するプログラムを作成します。これらのプログラムで使用するOLAP DML文の詳細は、「モデルの実行」、「集計の実行」および「データの割当て」を参照してください。

予測プログラム

OLAP DMLには、Geneva Forecastingエンジンを使用したデータの予測に関連する文がいくつか用意されています。Geneva Forecastingエンジンは、Roadmap Technologies社の統計予測エンジンであり、需要計画で広く利用されています。

Geneva Forecastingエンジンを使用して予測を行うには、次の手順を実行します。

1. 将来の時間値を時間ディメンションに追加します。

2. 予測の結果を保持するための変数を作成します。

3. 予測プログラムを作成します。プログラムには、次の文を記載されているとおりの順に記述します。

1. FCOPENファンクション: 予測コンテキストを作成します。

2. FCSETコマンド: 予測の特性を指定します。

3. FCEXECコマンド: 予測を実行し、Oracle OLAP変数に予測データを移入します。

4. FCQUERYファンクション: 予測の特性または予測の試行に関する情報を取得します。

5. FCCLOSEコマンド: 予測コンテキストを閉じます。

これらの文を使用したデータ予測の実行例は、例9-119「予測プログラム」を参照してください。

ワークスペース・オブジェクトをエクスポートおよびインポートするプログラム

ワークスペース全体、複数のワークスペース・オブジェクト、単一のワークスペース・オブジェクト、またはアナリティック・ワークスペース・オブジェクトの一部分を、特別な形式のEIFファイルにエクスポートできます。その後、同じスキーマまたは別のスキーマ内にある別のワークスペースに情報をインポートできます。

エクスポートおよびインポートを行う目的の1つは、データを新しい場所に移動することです。もう1つの目的は、多数のオブジェクトまたはディメンション値の追加と削除によって発生した不要な領域をアナリティック・ワークスペースから削除することです。これを行うには、EXPORT文を発行してすべてのデータをEIFファイルに出力し、別のワークスペースを異なる名前で作成した後、IMPORT文を使用してEIFファイルを新しいワークスペースにインポートします。同じデータベースにインポートした場合、古いワークスペースを削除して、古いワークスペースで使用していたのと同じワークスペース別名で新しいワークスペースを参照できます。

次の文は、現行のアナリティック・ワークスペースからmydirというディレクトリ・オブジェクトにあるreorg.eifというEIFファイルに、すべてのデータおよび定義をコピーします。

EXPORT ALL TO EIF FILE 'mydir/reorg.eif'

Oracle OLAPによって検索されるユーザー作成のプログラム

Oracle OLAPでは、次の名前を持つOracle OLAPプログラムが検索され、各プログラムに関する項で説明されているとおりに実行されます。

AUTOGO
ONATTACH
ONDETACH
PERMIT_READ
PERMIT_WRITE
TRIGGER_AFTER_UPDATE
TRIGGER_AW
TRIGGER_BEFORE_UPDATE
TRIGGER_DEFINE

AUTOGO

AUTOGOプログラムは、ユーザーが作成できるプログラムであり、AW ATTACHコマンドの実行時には、Oracle OLAPによってその名前の確認が行われます。

AUTOGOというプログラムを含むアナリティック・ワークスペースをアタッチすると、AW ATTACH文にNOAUTOGO句を指定した場合または別の名前のプログラムを指定するAUTOGO句を記述した場合を除き、Oracle OLAPによってONATTACHプログラムが実行されます。

注意:
ユーザーがアナリティック・ワークスペースをアタッチすると、Oracle OLAPではこのプログラムとその他のプログラムの有無が確認されます。詳細は、「起動プログラム」を参照してください。

戻り値

BOOLEAN

Oracle OLAPがアナリティック・ワークスペースを正常に設定してアタッチした場合はTRUE、そうでない場合およびAUTOGOプログラムに例外が発生した場合はFALSEです。

注意:
戻り値としてFALSEを発生させるために例外に依存せずに、正常な戻り値を使用することをお薦めします。

構文

AUTOGOという名前のプログラムを定義するには、DEFINE PROGRAMに示す構文を使用します。実際のプログラムは、次の引数を持つユーザー定義ファンクションとしてコーディングします。

AUTOGO (password)

パラメータ

passwordの詳細は、AW ATTACHを参照してください。

例

アタッチ・プログラムの動作例は、例9-50「起動プログラム」を参照してください。

ONATTACH

ONATTACHプログラムは、ユーザーが作成できるプログラムであり、AW ATTACHコマンドの実行時には、Oracle OLAPによってその名前の確認が行われます。

ONATTACHというプログラムを含むアナリティック・ワークスペースをアタッチすると、AW ATTACH文にNOONATTACH句を指定した場合または別の名前のプログラムを指定するONATTACH句を記述した場合を除き、Oracle OLAPによってONATTACHプログラムが実行されます。

onattachプログラム内の文に応じて、特定のオブジェクトまたはオブジェクト値のセットに対するユーザーのアクセスが許可される場合と拒否される場合とがあります。マルチライタ・モードでのアタッチでは、ACQUIREコマンドを使用して個々のワークスペース・オブジェクトにアクセスできます。読取り専用モードおよび読取り/書込みモードでのアタッチでは、個々のワークスペース・オブジェクトへのアクセスを許可または制限するPERMITコマンドを使用できます。特定のonattachプログラム内で参照されるすべてのオブジェクトは、同じアナリティック・ワークスペース内に存在する必要があります。

注意:
ユーザーがアナリティック・ワークスペースをアタッチすると、Oracle OLAPではこのプログラムとその他のプログラムの有無が確認されます。詳細は、「起動プログラム」を参照してください。

戻り値

BOOLEAN

Oracle OLAPがアナリティック・ワークスペースを正常に設定してアタッチした場合はTRUE、そうでない場合およびonattachプログラムに例外が発生した場合はFALSEです。

注意:
戻り値としてFALSEを発生させるために例外に依存せずに、正常な戻り値を使用することをお薦めします。

構文

ONATTACHという名前のプログラムを定義するには、DEFINE PROGRAMに示す構文を使用します。実際のプログラムは、次の引数を持つユーザー定義ファンクションとしてコーディングします。

ONATTACH ({READ|WRITE|EXCLUSIVE|MULTI} password)

パラメータ

アタッチ・モード(READ、WRITE、EXCLUSIVE、MULTI)およびpasswordの説明は、AW ATTACHを参照してください。

使用上の注意

OLAP APIによって作成されたONATTACHプログラム

アナリティック・ワークスペースがOLAP APIを使用してOLAPキューブとして作成されている場合、OLAP APIによってONATTACHという名前のプログラムが作成されている場合もあります。このように自動的に作成されたONATTACHプログラムは変更できません。また、このONATTACHの実行を無効にすることはお薦めしません。

したがって、アナリティック・ワークスペースにこのタイプのONATTACHプログラムが存在する場合は、別のタイプの起動プログラムを作成して、アナリティック・ワークスペースがアタッチされているときに実行する動作を指定してください。

例

アタッチ・プログラムの動作例は、例9-50「起動プログラム」を参照してください。

ONDETACH

ONDETACHプログラムは、ユーザーが作成できるプログラムであり、AW DETACHコマンドの実行時には、Oracle OLAPによってその名前の確認が行われます。さらにOracle OLAPでは、プログラムからの戻り値に応じて、アナリティック・ワークスペースがデタッチされた直後にプログラム内のコードが実行されます。

注意:
ユーザーがアナリティック・ワークスペースをアタッチすると、Oracle OLAPではその他のプログラムの有無が確認されます。詳細は、「起動プログラム」を参照してください。

戻り値

BOOLEAN

Oracle OLAPにおいてアナリティック・ワークスペースのデタッチが正常に行われた場合はTRUE、そうでない場合およびdetachプログラムに例外が発生した場合はFALSEです。

注意:
戻り値としてFALSEを発生させるために例外に依存せずに、正常な戻り値を使用することをお薦めします。

構文

ONDETACHという名前のプログラムを定義するには、DEFINE PROGRAMに示す構文を使用します。

PERMIT_READ

PERMIT_READプログラムは、ユーザーが作成できるプログラムであり、AW ATTACH読取り専用コマンドの実行時には、Oracle OLAPによりその名前の確認が行われます。プログラムからの戻り値に応じて、Oracle OLAPは、アナリティック・ワークスペースのアタッチ後にプログラム内部のコードを実行します。permit_readプログラム内の文に応じて、特定のオブジェクトまたはオブジェクト値のセットに対するユーザーのアクセスが許可される場合と拒否される場合とがあります。permit_readプログラム内では、個々のワークスペース・オブジェクトへのアクセス権を付与または制限するPERMITコマンドを指定できます。特定のpermit_readプログラム内で参照されるすべてのオブジェクトは、同じアナリティック・ワークスペース内に存在する必要があります。

注意:
ユーザーがアナリティック・ワークスペースをアタッチすると、Oracle OLAPではこのプログラムとその他のプログラムの有無が確認されます。詳細は、「起動プログラム」を参照してください。

関連項目:
PERMITERRORオプション、PERMITREADERRORオプションおよびPERMIT_WRITEプログラム

戻り値

BOOLEAN

Oracle OLAPがアナリティック・ワークスペースを正常に設定してアタッチした場合はTRUE、そうでない場合およびpermit_readプログラムに例外が発生した場合はFALSEです。

注意:
戻り値としてFALSEを発生させるために例外に依存せずに、正常な戻り値を使用することをお薦めします。

構文

PERMIT_READという名前のプログラムを定義するには、DEFINE PROGRAMに示す構文を使用します。実際のプログラムは、次の引数を持つユーザー定義ファンクションとしてコーディングします。

PERMIT_READ (password)

パラメータ

passwordの詳細は、AW ATTACHを参照してください。アナリティック・ワークスペースのアタッチ時にユーザーがパスワードを指定すると、そのパスワードはプログラムへの引数として渡されて処理されます。

例

アナリティック・ワークスペースがアタッチされるときに権限プログラムが実行される順序については、例9-50「起動プログラム」を参照してください。

PERMIT_WRITE

PERMIT_WRITEプログラムは、ユーザーが作成できるプログラムであり、AW ATTACH読取り/書込みコマンドの実行時には、Oracle OLAPによりその名前の確認が行われます。プログラムからの戻り値に応じて、Oracle OLAPは、アナリティック・ワークスペースのアタッチ後にプログラム内部のコードを実行します。permit_writeプログラム内の文に応じて、特定のオブジェクトまたはオブジェクト値のセットに対するユーザーのアクセスが許可される場合と拒否される場合とがあります。permit_writeプログラム内では、個々のワークスペース・オブジェクトへのアクセス権を付与または制限するPERMITコマンドを指定できます。特定のpermit_writeプログラム内で参照されるすべてのオブジェクトは、同じアナリティック・ワークスペース内に存在する必要があります。

注意:
ユーザーがアナリティック・ワークスペースをアタッチすると、Oracle OLAPではこのプログラムとその他のプログラムの有無が確認されます。詳細は、「起動プログラム」を参照してください。

関連項目:
PERMITERRORオプション、PERMITREADERRORオプションおよびPERMIT_READプログラム

戻り値

BOOLEAN

Oracle OLAPがアナリティック・ワークスペースを正常に設定してアタッチした場合はTRUE、そうでない場合およびpermit_writeプログラムに例外が発生した場合はFALSEです。

注意:
戻り値としてFALSEを発生させるために例外に依存せずに、正常な戻り値を使用することをお薦めします。

構文

PERMIT_WRITEという名前のプログラムを定義するには、DEFINE PROGRAMに示す構文を使用します。実際のプログラムは、次の引数を持つユーザー定義ファンクションとしてコーディングします。

PERMIT_WRITE (password)

パラメータ

passwordの詳細は、AW ATTACHを参照してください。アナリティック・ワークスペースのアタッチ時にユーザーがパスワードを指定すると、そのパスワードはプログラムへの引数として渡されて処理されます。

例

アナリティック・ワークスペースがアタッチされるときに権限プログラムが実行される順序については、例9-50「起動プログラム」を参照してください。

TRIGGER_AFTER_UPDATE

TRIGGER_AFTER_UPDATEプログラムは、ユーザーが作成できるプログラムであり、アナリティック・ワークスペースに対するUPDATEコマンドの実行時には、Oracle OLAPによって名前の確認が行われます。このプログラムは、更新中のアナリティック・ワークスペースと同じワークスペースに存在する場合、UPDATEの実行後に実行されます。

注意:
TRIGGER_AFTER_UPDATEプログラムを実行するには、USETRIGGERSオプションをそのデフォルト値であるTRUEに設定する必要があります。

関連項目:
「トリガー・プログラム」

構文

TRIGGER_AFTER_UPDATEという名前のプログラムを作成するには、「トリガー・プログラム」で示すガイドラインに従います。

例

例6-1 TRIGGER_AFTER_UPDATEプログラム

アナリティック・ワークスペースで次のようにプログラムを定義したとします。

DEFINE TRIGGER_AFTER_UPDATE PROGRAM
PROGRAM
SHOW JOINCHARS ('calltype = ' CALLTYPE)
SHOW JOINCHARS ('triggering event = ' TRIGGER(EVENT))
SHOW JOINCHARS ('triggering subevent = ' TRIGGER(SUBEVENT))
END

UPDATE文を発行すると、このプログラムが実行され、次の出力が表示されます。

calltype = TRIGGER
triggering event = AFTER_UPDATE
triggering subevent = AW

TRIGGER_AW

TRIGGER_AWプログラムは、アナリティック・ワークスペース内でユーザーが作成できるプログラムです。そのアナリティック・ワークスペースが現行のアナリティック・ワークスペースであり、かつ別のアナリティック・ワークスペースを作成、アタッチ、デタッチまたは削除した場合には、Oracle OLAPによってその名前の確認が行われます。

注意:
ユーザーがアナリティック・ワークスペースをアタッチすると、Oracle OLAPではこのプログラムとその他のプログラムの有無が確認されます。詳細は、「起動プログラム」を参照してください。

関連項目:
「トリガー・プログラム」

戻り値

なし。

構文

TRIGGER_AWという名前のプログラムは、「TRIGGER_AWプログラムの作成方法」に示すガイドラインに従って作成します。

使用上の注意

TRIGGER_AWプログラムの作成方法

TRIGGER_AWプログラムは、次の手順に従って作成します。

1. プログラムを定義します(DEFINE PROGRAMを参照)。

2. プログラムの名前としてTRIGGER_AWを指定します。

3. プログラムを実際にコーディングします(「プログラム内容の指定」を参照)。

注意:
再帰的トリガーはサポートされていません。TRIGGER_AWプログラムの内部でAW文を発行する場合は、その前にUSETRIGGERSオプションをNOに設定しておく必要があります。

例

例6-2 TRIGGER_AWプログラム

my_awという名前のアナリティック・ワークスペースに、次の定義を持つプログラムが定義されているとします。

DEFINE TRIGGER_AW PROGRAM
PROGRAM
SHOW CALLTYPE
SHOW TRIGGER(EVENT)
SHOW TRIGGER(SUBEVENT)
SHOW TRIGGER(NAME)
END

my_awワークスペースをアタッチすると、指定された値が表示されます。

AW ATTACH MY_AW

TRIGGER
AW
ATTACH
MY_AW

TRIGGER_BEFORE_UPDATE

TRIGGER_BEFORE_UPDATEプログラムは、ユーザーが作成できるプログラムであり、UPDATEコマンドの実行時には、Oracle OLAPによって名前の確認が行われます。このプログラムは、更新中のアナリティック・ワークスペースと同じワークスペースに存在する場合にOracle OLAPによって実行され、プログラムの戻り値(存在する場合)に応じて、ワークスペースが更新される場合とされない場合があります。

注意:
TRIGGER_BEFORE_UPDATEプログラムを実行するには、USETRIGGERSオプションをそのデフォルト値であるTRUEに設定する必要があります。

関連項目:
「トリガー・プログラム」

戻り値

プログラムは、BOOLEAN値を返すファンクションとして作成できます。この場合には、プログラムからの戻り値がFALSEのとき、TRIGGER_BEFORE_UPDATEプログラムの実行をトリガーしたUPDATE文は実行されず、プログラムからの戻り値がTRUEまたはNAのときは、UPDATE文が実行されます。

構文

TRIGGER_UPDATEという名前のプログラムを作成するには、「トリガー・プログラム」で示すガイドラインに従います。

例

例6-3 TRIGGER_BEFORE_UPDATEプログラム

myawというアナリティック・ワークスペースに、次の定義を持つTRIGGER_BEFORE_UPDATEプログラムが存在するとします。

DEFINE TRIGGER_BEFORE_UPDATE PROGRAM BOOLEAN
PROGRAM
SHOW JOINCHARS ('calltype = ' CALLTYPE)
SHOW JOINCHARS ('triggering event = ' TRIGGER(EVENT))
SHOW JOINCHARS ('triggering subevent = ' TRIGGER(SUBEVENT))
RETURN TRUE
END

myvarというTEXT変数を定義して、UPDATE文を発行するとします。TRIGGER_BEFORE_UPDSATEプログラムが実行されます。

calltype = TRIGGER
triggering event = BEFORE_UPDATE
triggering subevent = AW

このプログラムからの戻り値はTRUEであるため、myvarの定義は、ワークスペースをデタッチして再アタッチした後にも存在します。

AW DETACH myaw
AW ATTACH myaw
DESCRIBE

DEFINE TRIGGER_BEFORE_UPDATE PROGRAM BOOLEAN
PROGRAM
SHOW JOINCHARS ('calltype = ' CALLTYPE)
SHOW JOINCHARS ('triggering event = ' TRIGGER(EVENT))
SHOW JOINCHARS ('triggering subevent = ' TRIGGER(SUBEVENT))
RETURN TRUE
END

DEFINE MYVAR VARIABLE TEXT

ただし、プログラムからの戻り値がFALSEになるようにプログラムを変更した場合は、ワークスペースのデタッチと再アタッチを実行すると、myvarの定義がワークスペース内に存在しなくなるだけでなく、TRIGGER_BEFORE_UPDATEプログラムの定義もワークスペース内に存在しなくなります。

TRIGGER_DEFINE

TRIGGER_DEFINEプログラムは、ユーザーが作成するプログラムであり、DEFINEコマンドの実行時には、Oracle OLAPによって名前の確認が行われます。このプログラムは、新しいオブジェクトを定義するアナリティック・ワークスペースと同じワークスペースに存在する場合に実行されます。

注意:
TRIGGER_DEFINEプログラムを実行するには、USETRIGGERSオプションをそのデフォルト値であるTRUEに設定する必要があります。

関連項目:
「トリガー・プログラム」

構文

TRIGGER_DEFINEという名前のプログラムを作成するには、「トリガー・プログラム」で示すガイドラインに従います。

例

例6-4 TRIGGER_DEFINEプログラム

次のような記述を持つTRIGGER_DEFINEプログラムをアナリティック・ワークスペースに作成したとします。

DEFINE TRIGGER_DEFINE PROGRAM
PROGRAM
SHOW JOINCHARS ('calltype = ' CALLTYPE)
SHOW JOINCHARS ('triggering event = ' TRIGGER(EVENT))
SHOW JOINCHARS ('fully qualified object name ='TRIGGER(NAME))
SHOW JOINCHARS ('type of object = 'OBJ(TYPE TRIGGER(NAME))
DESCRIBE &TRIGGER(NAME)
END

次の文に示すように、DEFINE VARIABLE文を発行して、myvarという変数を定義したとします。この文の後の出力に示すように、Oracle OLAPはこの変数を定義して、TRIGGER_DEFINEプログラムを実行します。

DEFINE myvar VARIABLE TEXT
calltype = TRIGGER
triggering event = DEFINE
fully qualified object name =MYAW!MYVAR
type of object = VARIABLE

DEFINE MYVAR VARIABLE TEXT

7 OLAP DMLファンクション: AからK

この章では、次の項目について説明します。

- OLAP DMLファンクションの概要

- ファンクション: アルファベット順

- カテゴリ別のファンクション

- 文字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 DMLファンクションの概要

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

ABS
ADD_MONTHS
AGGCOUNT
AGGMAPINFO
AGGREGATEファンクション
AGGREGATION
AGGROPS
ALLOCOPS
ANTILOG
ANTILOG10
ANY
ARCCOS
ARCSIN
ARCTAN
ARCTAN2
ARG
ARGCOUNT
ARGFR
ARGS
ASCII
ASCIISTR
AVERAGE
AWファンクション
B

BACK
BASEDIM
BASEVAL
BEGINDATE
BIN_TO_NUM
BITAND
BLANKSTRIP
C

CALLTYPE
CHARTOROWID
CATEGORIZE
CEIL
CHANGEBYTES
CHANGECHARS
CHANGEDRELATIONS
CHANGEDVALUES
CHARLIST
CHGDIMS
CHR
COALESCE
COLVAL
CONTEXTファンクション
CONVERT
CORRELATION
COS
COSH
COUNT
CUMSUM
CURRENT_DATE
CURRENT_TIMESTAMP
D

DAYOF
DBTIMEZONE
DDOF
DECODE
DEPRDECL
DEPRDECLSW
DEPRSL
DEPRSOYD
E

ENDDATE
ENDOF
EVERY
EXISTS
EXP
EVERSION
EXTBYTES
EXTCHARS
EXTCOLS
EXTLINES
EXTRACT
F

FCOPEN
FCQUERY
FILEERROR
FILEGET
FILENEXT
FILEOPEN
FILEQUERY
FILTERLINES
FINDBYTES
FINDCHARS
FINDLINES
FINTSCHED
FLOOR
FPMTSCHED
FROM_TZ
G

GET
GREATEST
GROUPINGIDファンクション
GROWRATE
H

HEXTORAW
HIERCHECK
HIERHEIGHT
HIERSHAPE
I

INFO
INITCAP
INLIST
INSBYTES
INSCHARS
INSCOLS
INSLINES
INSTAT
INSTRファンクション
INTPART
IRR
ISDATE
ISEMPTY
ISINFINITE
ISNAN
ISSESSION
ISVALUE
J

JOINBYTES
JOINCHARS
JOINCOLS
JOINLINES
K

KEY
L

LAG
LAGABSPCT
LAGDIF
LAGPCT
LARGEST
LAST_DAY
LEAD
LEAST
LIMITファンクション
LIMITMAPINFO
LNNVL
LOCALTIMESTAMP
LOGファンクション
LOG10
LOWCASE
LOWER
LPAD
LTRIM
M

MAKEDATE
MAX
MAXBYTES
MAXCHARS
MEDIAN
MIN
MMOF
MODE
MODULO
MONTHS_BETWEEN
MOVINGAVERAGE
MOVINGMAX
MOVINGMIN
MOVINGTOTAL
N

NA2
NAFILL
NAFLAG
NEW_TIME
NEXT_DAY
NLS_CHARSET_ID
NLS_CHARSET_NAME
NLSSORT
NONE
NORMAL
NPV
NULLIF
NUMBYTES
NUMCHARS
NUMLINES
NUMTODSINTERVAL
NUMTOYMINTERVAL
NVL
NVL2
O

OBJ
OBJLIST
OBJORG
OBSCURE
ORA_HASH
P

PARTITION
PARTITIONCHECK
PERCENTAGE
Q

QUAL
R

RANDOM
RANK
RAWTOHEX
RECNO
REGEXP_COUNT
REGEXP_INSTR
REGEXP_REPLACE
REGEXP_SUBSTR
REM
REMAINDER
REMBYTES
REMCHARS
REMCOLS
REMLINES
REPLACE
REPLBYTES
REPLCHARS
REPLCOLS
REPLLINES
RESERVED
ROUND
ROWファンクション
ROWIDTOCHAR
ROWIDTONCHAR
RPAD
RTRIM
RUNTOTAL
S

SESSIONTIMEZONE
SIGN
SIN
SINH
SMALLEST
SMOOTH
SORTファンクション
SORTLINES
SOUNDEX
SQLFETCH
SQRT
STARTOF
STATALL
STATDEPTH
STATEQUAL
STATFIRST
STATLAST
STATLEN
STATLIST
STATMAX
STATMIN
STATRANK
STATVAL
STDDEV
SUBSTRファンクション
SUBTOTAL
SYS_CONTEXT
SYSDATE
SYSINFO
SYSTEM
SYSTIMESTAMP
T

TALLY
TAN
TANH
TCONVERT
TEXTFILL
TO_BINARY_DOUBLE
TO_BINARY_FLOAT
TO_CHAR
TO_DATE
TO_DSINTERVAL
TO_NCHAR
TO_NUMBER
TO_TIMESTAMP
TO_TIMESTAMP_TZ
TO_YMINTERVAL
TOD
TODAY
TOTAL
TRANSLATE
TRIGGERファンクション
TRIM
TRUNCATE
TZ_OFFSET
U

UNIQUELINES
UNRAVEL
UPPER
UPPER
V

VALSPERPAGE
VALUES
VINTSCHED
VPMTSCHED
VSIZE
W

WEEKOF
WIDTH_BUCKET
WKSDATA
WRITABLE
Y

YYOF

カテゴリ別のファンクション

OLAP DMLの代表的な数値ファンクションやテキスト・ファンクションには次のようなものがあります。

変換ファンクション

日時ファンクション

日付のみのファンクション

財務ファンクション

ファイル管理ファンクション

NAファンクション

数値(一般)ファンクション

数値集計ファンクション

プログラム引数およびコンテキストのファンクション

レポート・ファンクション

統計ファンクションおよび予測ファンクション

テキスト・ファンクション

データ・モデルに特有の次のようなファンクションもあります。

アナリティック・ワークスペースおよびオブジェクト情報のファンクション

集計、割当ておよびモデル仕様のファンクション

システムおよびデータベース情報のファンクション

時系列ファンクション

オブジェクトの値取得ファンクション

ステータス操作ファンクション

アナリティック・ワークスペースおよびオブジェクト情報のファンクション

AWファンクション
CHANGEDRELATIONS
CHANGEDVALUES
BASEDIM
EXISTS
ISEMPTY
ISSESSION
ISVALUE
LIMITMAPINFO
OBJ
OBJLIST
OBJORG
PARTITION
RESERVED
TALLY
TRIGGERファンクション
VALSPERPAGE
VSIZE
WRITABLE
集計、割当ておよびモデル仕様のファンクション

AGGCOUNT
AGGMAPINFO
AGGREGATEファンクション
AGGREGATION
AGGROPS
ALLOCOPS
HIERCHECK
INFO
CHANGEDRELATIONS
CHANGEDVALUES
ISEMPTY
PARTITIONCHECK
変換ファンクション

ASCII
ASCIISTR
BIN_TO_NUM
CHR
CONVERT
FROM_TZ
HEXTORAW
RAWTOHEX
TCONVERT
TO_BINARY_DOUBLE
TO_BINARY_FLOAT
TO_CHAR
TO_DATE
TO_NCHAR
TO_NUMBER
TO_TIMESTAMP
TO_TIMESTAMP_TZ
システムおよびデータベース情報のファンクション

CURRENT_DATE
CURRENT_TIMESTAMP
DBTIMEZONE
LOCALTIMESTAMP
SESSIONTIMEZONE
SYS_CONTEXT
SYSDATE
SYSINFO
SYSTEM
日時ファンクション

ADD_MONTHS
CURRENT_DATE
CURRENT_TIMESTAMP
DBTIMEZONE
EXTRACT
FROM_TZ
LAST_DAY
LOCALTIMESTAMP
MONTHS_BETWEEN
NEW_TIME
ROUND(日時)
NEW_TIME
NUMTODSINTERVAL
NUMTOYMINTERVAL
SESSIONTIMEZONE
SYSDATE
SYSTIMESTAMP
TO_DSINTERVAL
TO_TIMESTAMP
TO_TIMESTAMP_TZ
TO_YMINTERVAL
TOD
TRIM
TRUNCATE(日時)
TZ_OFFSET
日付のみのファンクション

BEGINDATE
DAYOF
DDOF
ENDDATE
ENDOF
ISDATE
MAKEDATE
MMOF
STARTOF
TODAY
WEEKOF
YYOF
財務ファンクション

DEPRDECL
DEPRDECLSW
DEPRSL
DEPRSOYD
FINTSCHED
FPMTSCHED
GROWRATE
IRR
NPV
VINTSCHED
VPMTSCHED
ファイル管理ファンクション

FILEERROR
FILEGET
FILENEXT
FILEOPEN
FILEQUERY
GET
RECNO
NAファンクション

COALESCE
NA2
NAFILL
NAFLAG
NULLIF
NVL
NVL2
数値(一般)ファンクション

ABS
ANTILOG
ANTILOG10
ARCCOS
ARCSIN
ARCTAN
ARCTAN2
BIN_TO_NUM
BITAND
CEIL
COS
COSH
DECODE
EXP
FLOOR
GREATEST
INTPART
ISINFINITE
ISNAN
LEAST
LOGファンクション
LOG10
MAX
MIN
MODULO
NULLIF
ORA_HASH
RANDOM
RANK
REM
REMAINDER
ROUND(数値)
SIGN
SIN
SINH
SMOOTH
SORTファンクション
SQRT
TAN
TANH
TRUNCATE(数値)
VSIZE
WIDTH_BUCKET
数値集計ファンクション

ANY
AVERAGE
COUNT
EVERY
LARGEST
MEDIAN
MODE
NONE
PERCENTAGE
SMALLEST
TCONVERT
TOTAL
オブジェクトの値取得ファンクション

BASEVAL
CHGDIMS
HIERHEIGHT
KEY
QUAL
ROWファンクション
SORTファンクション
UNRAVEL
VALUES
WKSDATA
プログラム引数およびコンテキストのファンクション

ARG
ARGCOUNT
ARGFR
ARGS
BACK
CALLTYPE
CONTEXTファンクション
レポート・ファンクション

COLVAL
RUNTOTAL
SUBTOTAL
統計ファンクションおよび予測ファンクション

CATEGORIZE
CORRELATION
FCOPEN
FCQUERY
INFO
NORMAL
ORA_HASH
RANDOM
STDDEV
ステータス操作ファンクション

CHGDIMS
INSTAT
LIMITファンクション
STATALL
STATDEPTH
STATEQUAL
STATFIRST
STATLAST
STATLEN
STATLIST
STATMAX
STATMIN
STATRANK
STATVAL
VALUES
テキスト・ファンクション

ASCII
ASCIISTR
BLANKSTRIP
CHANGEBYTES
CHANGECHARS
CHARLIST
EXTBYTES
EXTCHARS
EXTCOLS
EXTLINES
FILTERLINES
FINDBYTES
FINDCHARS
FINDLINES
INITCAP
INLIST
INSBYTES
INSCHARS
INSCOLS
INSLINES
INSTRファンクション
JOINBYTES
JOINCHARS
JOINCOLS
JOINLINES
LEAST
LENGTHファンクション
LOWCASE
LOWER
LPAD
LTRIM
MAXBYTES
MAXCHARS
NLS_CHARSET_ID
NLS_CHARSET_NAME
NLSSORT
NULLIF
NUMBYTES
NUMCHARS
NUMLINES
OBSCURE
REGEXP_COUNT
REGEXP_INSTR
REGEXP_REPLACE
REGEXP_SUBSTR
REMBYTES
REMCHARS
REMCOLS
REMLINES
REPLACE
REPLBYTES
REPLCHARS
REPLCOLS
REPLLINES
RPAD
RTRIM
SORTファンクション
SORTLINES
SOUNDEX
SUBSTRファンクション
TEXTFILL
TRANSLATE
TRIM
UNIQUELINES
UPPER
UPPER
VSIZE
時系列ファンクション

CUMSUM
LAG
LAGABSPCT
LAGDIF
LAGPCT
LEAD
MOVINGAVERAGE
MOVINGMAX
MOVINGMIN
MOVINGTOTAL

ABS

ABSファンクションは、式の絶対値を計算するファンクションです。実数の絶対値は、符号に関係なくその数値そのものであるため、このファンクションが返す値は常に正の値になります。たとえば、3は3と-3の両方の絶対値です。

戻り値

DECIMAL。

結果のディメンション性は、指定された式と同じになります。

構文

ABS(expression)

パラメータ

expression

絶対値を計算する対象の式。

例

例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

ADD_MONTHSファンクションは、指定した日付からnか月後の日付を返すファンクションです。

戻り値

DATETIME

構文

ADD_MONTHS(start_datetime, n)

パラメータ

start_datetime

開始日を識別するDATETIME式。start_datetimeの日の構成要素が月の最後の日である場合や、返される月の日数が少ない場合は、返される日の構成要素が月末の最後の日になります。それ以外は、返される日付の日の構成要素はstart_datetimeの日の構成要素と同じになります。例7-2「月末の計算」を参照してください。

n

start_datetimeに追加される月数を表すINTEGER。

例

例7-2 月末の計算

次の文を使用すると、2000年1月30日の1か月後の日付が表示されます。

SHOW ADD_MONTHS('30Jan00', 1)

2月29日は2000年2月の最後の日であるため、ADD_MONTHSにより2000年2月29日が返されます。

29-Feb-00

AGGCOUNT

AGGCOUNTファンクションは、指定した変数に関連付けられたAggcount変数の値を取得します。Aggcount変数はINTEGER変数で、Oracle OLAPは、USING AGGOUNT句を含むDEFINE VARIABLE文を実行する際に、Aggcount変数を自動的に作成します。

関連項目:
「Aggcount変数」

戻り値

INTEGER

AVERAGE、HAVERAGE、WAVERAGEまたはHWAVERAGEを持つRELATION(集計用)文の実行時に、集計値の計算に加えられるリーフ・ノード数の非NAカウント数であるAggcount変数の値。

構文

AGGCOUNT(variable-name)

パラメータ

variable-name

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

AGGMAPINFOファンクションは、アナリティック・ワークスペース内のaggmapオブジェクトの仕様に関する情報を返すファンクションです。

集計仕様(AGGMAP型のaggmapオブジェクト)に関する情報は、コンパイル後にのみ取得できます。集計仕様をコンパイルするには、COMPILE文を使用するか、またはFUNCDATAキーワードを指定してAGGREGATEコマンドを実行します。AGGMAPINFOファンクションで使用する前に集計仕様がコンパイルされていない場合は、AGGMAPINFOでコンパイルされます。ALLOCATEで使用するaggmapはコンパイルする必要がありません。

戻り値

要求する情報の種類によって異なります。詳細は、表7-1「AGGMAPINFOファンクションのchoiceパラメータのキーワード」を参照してください。

構文

AGGMAPINFO (name {choice | {choice-at-position rel-pos} })

パラメータ

name

aggmapオブジェクトの名前。

choice

返される情報の種類を指定します。詳細は、表7-1「AGGMAPINFOファンクションのchoiceパラメータのキーワード」を参照してください。

表7-1 AGGMAPINFOファンクションのchoiceパラメータのキーワード

キーワード

データ型

説明

ADDED_MODELS

TEXT

AGGMAP ADDまたはREMOVEモデル文を使用して現在aggmapに追加されているモデル。モデルの名前を複数行のテキスト文字列で返す。

AGGINDEX

BOOLEAN

aggmapにあるAGGINDEX文の設定を示す。YESに設定すると、aggmapが再コンパイルされるたびにすべての使用可能な索引(コンポジット・タプル)が作成されることを示す。(AGGMAP型のaggmapにのみ適用。)

CHILDREN member-name

TEXT

MAINTAIN ADD SESSION文を使用して追加されるディメンション・メンバーで、一時計算メンバーを計算するために使用する方程式の右側に使用。メンバーの名前を複数行のテキスト文字列で返す。

CUSTOMMEMBERS

TEXT

MAINTAIN ADD SESSION文で追加されるメンバー。メンバーの名前を複数行のテキスト文字列で返す。

DIMENSION

TEXT

aggmapで使用されるモデルまたはリレーションのディメンションの名前。メンバーの名前を複数行のテキスト文字列で返す。

FCACHE

BOOLEAN

AGGREGATEファンクションのキャッシュがOracle OLAPにあるかどうかを示す。(AGGMAP型のaggmapにのみ適用。)

MAPTYPE

TEXT

aggmapの型。

- AGGMAP文で仕様が入力されている場合、集計仕様の型としてAGGMAPを返す。この型のaggmapは、AGGREGATEコマンドまたはAGGREGATEファンクションでのみ使用可能。

- ALLOCMAP文で仕様が入力されている場合、割当て仕様の型としてALLOCMAPを返す。この型のaggmapは、ALLOCATEでのみ使用可能。

- aggmapは定義されているがAGGMAPまたはALLOCMAP文で仕様が入力されていない場合、NAを返す。

MODELS

TEXT

aggmapのモデル。モデルの名前を複数行のテキスト文字列で返す。

NUMRELS

INTEGER

aggmap仕様にあるRELATION文の合計数。

RELATIONS

TEXT

aggmap仕様のRELATION文で指定されているリレーションの名前。各文を別々の行で表示。

STORE

BOOLEAN

aggmapのCACHE文がSTOREに設定されているかどうかを示す。YESに設定すると、即時計算されるデータがキャッシュに格納されることを示す。(AGGMAP型のaggmapにのみ適用。)

VARIABLES

TEXT

AGGMAP ADDまたはREMOVEモデル文または$AGGMAPプロパティを使用してデフォルトのaggmapとして指定されているaggmapオブジェクトの変数。変数の名前を複数行のテキスト文字列で返す。

choice-at-position

返される情報を具体的に指定します。

PRECOMPUTEを指定すると、RELATION文のPRECOMPUTEキーワードの後にある制限句のテキストを返します。単一のRELATION文を指定するには、rel-pos引数を使用する必要があります。RELATION文にPRECOMPUTEキーワードがない場合はNAを返します。(AGGMAP型のaggmapにのみ適用。)

RELATIONを指定すると、rel-pos引数で指定したRELATION文の後にあるリレーションの名前を返します。

STATUSを指定すると、rel-pos引数で指定したRELATION文のPRECOMPUTE句をコンパイルした結果のステータス・リストを返します。(AGGMAP型のaggmapにのみ適用。)

rel-pos

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ファンクション

AGGREGATEファンクションは、指定されたaggmapでPRECOMPUTEと指定されていない変数のデータを計算します。 (事前計算するデータを指定する方法は、PRECOMPUTE文およびRELATION(集計用)文のPRECOMPUTE句を参照してください。)集計の対象になるのは、現在ステータスにある値に限られます。

関連項目:
AGGREGATEコマンド

注意:
集計対象の変数に$AGGMAPプロパティが指定されている場合は、事前計算の対象でないデータを集計するためにAGGREGATEファンクションを使用する必要はありません。

戻り値

集計された変数と同じデータ型

構文

AGGREGATE (var ... [USING aggmap] -

[FROM fromspec|FROMVAR textvar] [FORCECALC FORCEORDER] [COUNTVAR countvar])

パラメータ

var

(必要な場合は)計算されてから返されるデータの変数の名前。

USING

このキーワードは、指定したaggmapを使用して集計が実行されることを示します。

aggmap

データの集計方法を指定する事前定義されたaggmapの名前。aggmapの詳細は、DEFINE AGGMAPを参照してください。

FROM

このキーワードは、異なるオブジェクトから詳細データが取得されることを示します。FROM句は、集計の実行時における詳細データの取得元の変数を指定する唯一の方法です。「集計の詳細データの取得元を指定する方法」を参照してください。

fromspec

集計の詳細データの取得元である任意にディメンション化された変数、計算式またはリレーション。

FROMVAR

このキーワードは、キャップストーン集計を実行するために異なるオブジェクトから詳細データが取得されることを示します。FROMVAR句は、集計の実行時における詳細データの取得元の変数を指定する唯一の方法です。「集計の詳細データの取得元を指定する方法」を参照してください。

textvar

リーフ・ノードを解決するために使用される任意にディメンション化された変数。値を計算するときにノードが詳細データを必要としない場合は、NAを指定します。

FORCECALC

該当するセルに値が格納されている場合でも、aggmap内にあるRELATION文のPRECOMPUTE句で指定されていない値は再計算するように指定します。ユーザーが詳細データ・セルを変更し、動的計算集計セルに反映された変更値を参照できるようにする場合に、FORCECALCキーワードを使用します。

注意:
変数に$AGGREGATE_FORCECALCプロパティを設定すると、この動作を集計時のデフォルトの動作にすることができます。この場合、FORCECALCキーワードをAGGREGATEファンクションで指定する必要はありません。

FORCEORDER

aggmapにリストされているRELATION文と同じ順序で計算を実行するよう指定します。AGGREGATEコマンドで計算された値の一部を変更した場合に、このオプションを使用します。このオプションを指定しないと、AGGREGATEファンクションで使用する最適化方法において、変更された値が無視されることがあります。FORCEORDERを使用するとパフォーマンスが低下します。

注意:
変数に$AGGREGATE_FORCEORDERプロパティを設定すると、この動作を集計時のデフォルトの動作にすることができます。この場合、FORCEORDERキーワードをAGGREGATEファンクションで指定する必要はありません。

COUNTVAR countvar

AVERAGE、HAVERAGE、HWAVERAGEまたはWAVERAGE演算子を含むRELATION(集計用)文について計算された集計値に加えられたリーフ・ノードの数の非NAカウント数を格納する場合、countvarで指定されたユーザー定義の変数を使用するよう指定します。

注意:
通常、平均集計値の格納にユーザー定義のCountvar変数は使用しません。かわりに、Oracle OLAPが作成したAggcount変数を使用します。圧縮コンポジット用の平均演算子を持つRELATION(集計用)文が集計仕様に含まれる場合は、Aggcount変数を使用する必要があります。
Aggcount変数の詳細は、「Aggcount変数」を参照してください。

countvar変数は、varで指定された変数と同一のディメンションが同一の順序で定められているINTEGER変数である必要があります。複数の変数を同時に集計する場合、個別に結果を記録するためにINTEGER変数をそれぞれ定義する必要があります。

使用上の注意

実行時計算をサポートする手順

事前集計と実行時集計を組み合せる手順は次のとおりです。

1. 事前計算されるデータの量を制限するaggmapを作成します。

2. AGGREGATEコマンドをFUNCDATA引数で実行します。

3. AGGREGATEコマンドの実行後に変更を加えた場合(「aggmapのコンパイル」を参照)、COMPILE文でaggmapを再コンパイルします。

4. $AGGREGATE_FROMプロパティをデータ変数に追加します(「実行時計算をトリガーするためのNA値の使用」を参照)。

5. アナリティック・ワークスペースに対して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ファンクションを使用して残りを計算します。各段階で次のように実行します。

1. 新しいデータが集計されるように、aggmapにあるRELATION文のPRECOMPUTE句を変更します。

2. AGGREGATEコマンドをFUNCDATAキーワードで実行します。

3. AGGREGATEファンクションが残りのデータを計算するように、$NATRIGGERプロパティが変数に設定されていることを確認します。

複数のaggmapの使用

変数をロールアップする際に使用するaggmapは、可能なかぎり1つにしてください。ただし、場合によっては、希望する方法でデータをロールアップするために複数のaggmapが必要となる変数もあります。データをロールアップするために複数のaggmapが必要となる変数がある場合、最後のaggmapが、AGGREGATEファンクション用として確保されるメタデータに相当するため、一部のデータを即時計算すると問題が発生します。AGGREGATEファンクションでは、AGGREGATEコマンドで使用するすべてのaggmapを結合したメタデータが必要です。この問題を解決するには、NA値を正しく識別する別のaggmapを作成し、AGGREGATEファンクションで使用します。このaggmapは必ずコンパイルしてください。

次の質問に対する答えが確実ではない場合、AGGREGATEファンクションで複数のaggmapを使用しないでください。

AGGREGATEファンクションで使用するaggmapをコンパイルしたときに、各PRECOMPUTE句から得られたステータスが、データを事前計算したディメンション内のノードを正しく定義しているか。

この質問に対して「定義している」と確実に答えられない場合は、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

AGGREGATIONファンクションをモデル内で使用すると、カスタム集計を表すモデルの作成が可能です。このようなaggmapは、AGGREGATEファンクションの動的集計で使用できます。

注意:
AGGREGATIONファンクションは動的集計でのみ使用されるため、このようなファンクションを含むモデルはAGGREGATEコマンドでは使用できません。

構文

AGGREGATION(dimval-list)

パラメータ

dimval-list

カスタム集計に含まれる1つ以上のディメンション値のリスト。指定する値は、ターゲット・ディメンション値が属しているディメンションと同じディメンションに属している必要があります。各ディメンション値はテキスト・リテラルとして指定する必要があります。変数のようにテキスト式によって表すことはできません。

例

例7-9 カスタム集計を作成するためのAGGREGATIONファンクションの使用

それぞれのステップで、次のような各コード行をプログラムで実行します。

1. 新しいディメンション値my_timeをtimeディメンションに追加します。

MAINTAIN time ADD 'My_Time'

2. モデルmytime_custaggを定義し、AGGREGATIONファンクションを使用してこのモデルの仕様を設定します。

DEFINE mytime_custagg MODEL
MODEL JOINLINES('DIMENSION time' 'My_Time = AGGREGATION(\'23\' \'24\')')

(引用符付き文字列に引用符を使用する場合は、バックスラッシュのエスケープ文字が必要です。)

3. 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

4. モデルmytime_custaggをsales_aggmapに追加します。

AGGMAP ADD mytime_custagg TO sales_aggmap

5. 対象とする値に各ディメンションを制限し、レポートを作成します。

" 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

AGGROPS

AGGROPSファンクションは、RELATION(集計用)文で指定できるすべての集計演算子のキーワードを、各行に1つずつ表示される複数行のテキスト値として返します。

戻り値

TEXT

構文

AGGROPS

例

例7-10 集計演算子のリスト表示

AGGROPS文を発行すると、Oracle OLAPによりすべての集計演算子のリストが返されます。

SHOW AGGROPS

SUM
WSUM
SSUM
AND
OR
FIRST
LAST
HFIRST
HLAST
AVERAGE
WAVERAGE
HAVERAGE
HWAVERAGE
MIN
MAX
WFIRST
WLAST
HWFIRST
HWLAST
WMIN
WMAX
NOAGG

ALLOCOPS

ALLOCOPSファンクションは、RELATION(割当て用)文で指定できるすべての割当て演算子のキーワードを、各行に1つずつ表示される複数行のテキスト値として返します。

戻り値

TEXT

構文

ALLOCOPS

例

例7-11 割当て演算子のリスト表示

ALLOCOPS文を発行すると、Oracle OLAPによりすべての割当て演算子のリストが返されます。

SHOW ALLOCOPS

FIRST
LAST
HFIRST
HLAST
MIN
MAX
EVEN
HEVEN
COPY
HCOPY
PROPORTIONAL

ANTILOG

ANTILOGファンクションは、指定した指数で累乗したe(自然対数の底)の値を計算するファンクションです。

戻り値

DECIMAL

構文

ANTILOG(n)

パラメータ

n

ANTILOGファンクションによって返されるeの累乗指数。

例

例7-12 eの2乗の値の計算

次のファンクションによって、eの2乗の値が計算されます。

ANTILOG(2)

このファンクションによって次の値が返されます。

7.38906

ANTILOG10

ANTILOG10ファンクションは、指定した指数で累乗した10の値を計算するファンクションです。

戻り値

DECIMAL

構文

ANTILOG10(n)

パラメータ

n

ANTILOG10ファンクションによって返される10の累乗指数。

例

例7-13 10の3乗の値の計算

次のファンクションによって10の3乗の値が計算されます。

ANTILOG10(3)

このファンクションによって次の値が返されます。

1,000.00

ANY

ANYファンクションは、ブール式のいずれかの値がTRUEの場合にYESを返し、式のいずれの値もTRUEではない場合にNOを返すファンクションです。

戻り値

BOOLEAN

構文

ANY(boolean-expression [CACHE] [dimension ...] )

パラメータ

boolean-expression

評価されるブール式。

CACHE

内部動作が若干変更されます。このキーワードは、元のパフォーマンスが非常に遅い場合にのみ指定してください。

dimension

結果のディメンションの名前。または、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

例7-15 TRUE値の有無の調査(地域別)

スポーツウェアの売上が$150,000を超える地区が最低1つある月が最低1回あった地域も探すことができます。regionディメンションはdistrictディメンションと関連があるので、ANYの結果のディメンションとして、districtではなくregionを指定できます。

report heading 'High Sales' any(sales gt 150000, region)

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

REGION         High Sales
-------------- ----------
East                  YES
Central               YES
west                   NO

ARCCOS

ARCCOSファンクションは、指定した余弦の角度値をラジアン単位で計算するファンクションです。

戻り値

NUMBER

構文

ARCCOS(expression)

パラメータ

expression

余弦の10進値を含む式。

使用上の注意

無効な余弦値

余弦の式に対して不適当な値(1より大きい値または-1より小さい値)を指定すると、ARCCOSはNAの値を返します。

例

例7-16 逆余弦の計算

この例では、値0.54030の逆余弦を計算します。次の文

SHOW ARCCOS(.54030)

によって、次の結果が生成されます。

1.00

ARCSIN

ARCSINファンクションは、指定した正弦の角度値をラジアン単位で計算するファンクションです。

戻り値

NUMBER

構文

ARCSIN(expression)

パラメータ

expression

正弦の10進値を含む式。

使用上の注意

無効な正弦値

正弦式に対して不適切な値(1より大きい値または-1より小さい値)を指定すると、ARCSINはNAの値を返します。

例

例7-17 逆正弦の計算

この例では、値0.84147の逆正弦を計算します。次の文

SHOW ARCSIN(.84147)

によって、次の結果が生成されます。

1.00

ARCTAN

ARCTANファンクションは、指定した正接の角度値をラジアン単位で計算するファンクションです。

特定の比の逆正接を示す全範囲(0から2π)の数値を取得するには、ARCTAN2を使用します。

戻り値

NUMBER

構文

ARCTAN(expression)

パラメータ

expression

正接の10進値を含む式。

例

例7-18 逆正接の計算

この例では、値1.56の逆正接を計算します。次の文

SHOW ARCTAN(1.56)

によって、次の結果が生成されます。

1.00

ARCTAN2

ARCTAN2ファンクションは、特定の比の逆正接を示す全範囲(0から2π)の数値を返すファンクションです。このファンクションは、引数の符号に応じて-πからπまでの範囲で値を返します。値はラジアン単位で表されます。

指定した正接の角度値(比以外)をラジアン単位で計算するには、ARCTANを使用します。

戻り値

NUMBER

構文

ARCTAN2 (n / m)

パラメータ

n

比の一方のコンポーネントを指定する数式。引数nの範囲は無制限です。

m

比のもう一方のコンポーネントを指定する数式。

例

例7-19 逆正接の取得

次の例では、.3と.2の逆正接が返されます。

SHOW ARCTAN2(.3/.2)

.982793723

ARG

OLAP DMLプログラムの内部でARGファンクションを使用すると、プログラムに渡される引数を参照できます。このファンクションは、1つの引数をテキスト値として返します。

注意:
通常は、プログラムに渡される引数の参照にARGファンクションを使用しなくても済むよう、ARGUMENT文を使用して、プログラム内で引数を定義します。プログラムに渡される引数をARGUMENTを使用して定義する方法の詳細は、「プログラムに渡される引数の宣言」を参照してください。

戻り値

TEXT

構文

ARG(n)

パラメータ

n

参照する引数の位置に応じた数値。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
========== ========== ==========

ARGCOUNT

OLAP DMLプログラムの内部でARGCOUNTファンクションを使用すると、現行のプログラムが起動したときに指定されていた引数の数が返されます。

戻り値

INTEGER

構文

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
...

ARGFR

OLAP DMLプログラムの内部でARGFRファンクションを使用すると、プログラムに渡される引数を参照できます。このファンクションは、1つ以上の引数のグループを、指定した引数の番号を先頭に単一のテキスト値として返します。ARGFRは、コマンドとして起動したプログラムの内部でのみ使用でき、プログラムをユーザー定義ファンクションとして起動したりCALL文で起動した場合は使用できません。

注意:
通常は、プログラムに渡される引数の参照にARGFRファンクションを使用しなくても済むよう、ARGUMENT文を使用して、プログラム内で引数を定義します。プログラムに渡される引数をARGUMENTを使用して定義する方法の詳細は、「プログラムに渡される引数の宣言」を参照してください。

戻り値

TEXT

構文

ARGFR(n)

パラメータ

n

参照する引数のグループにある最初の引数の位置に応じた数値。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
========== ========== ==========

ARGS

OLAP DMLプログラムの内部でARGSファンクションを使用すると、プログラムに渡される引数を参照できます。このファンクションは、すべての引数を1つのテキスト値として返します。ARGSは、コマンドとして起動したプログラムの内部でのみ使用でき、プログラムをユーザー定義ファンクションとして起動したりCALL文で起動した場合は使用できません。

注意:
通常は、プログラムに渡される引数の参照にARGSファンクションを使用しなくても済むよう、ARGUMENT文を使用して、プログラム内で引数を定義します。プログラムに渡される引数をARGUMENTを使用して定義する方法の詳細は、「プログラムに渡される引数の宣言」を参照してください。

戻り値

TEXT

プログラムに引数を指定しなかった場合、ARGSはNULL値を返します。

構文

ARGS

例

例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
========== ========== ==

ASCII

ASCIIファンクションは、ある式の最初の文字の10進表現を返すファンクションです。

戻り値

INTEGER

構文

ASCII (text-exp)

パラメータ

text-exp

テキスト式。

使用上の注意

EBCDIC値の戻り値

データベースのキャラクタ・セットが7ビットのASCIIの場合、このファンクションはASCII値を返します。データベースのキャラクタ・セットがEBCDICコードの場合、このファンクションはEBCDIC値を返します。EBCDIC文字用のファンクションはありません。

例

例7-24 文字と等価のASCII 10進数の検索

次の例では、文字Qと等価のASCII 10進数を返します。

SHOW ASCII('Q')
81

ASCIISTR

ASCIISTRファンクションは、任意のキャラクタ・セットの文字列を受け取り、その文字列のASCIIバージョンを返します。

戻り値

NTEXT

構文

ASCIISTR(text-exp)

パラメータ

text-exp

テキスト式。

使用上の注意

ASCIISTRによる非ASCII文字の変換

ASCIISTRファンクションは、非ASCII文字を\xxxxに変換します。ここで、xxxxはUTF-16コード・ユニットです。

参照:
Unicodeキャラクタ・セットおよびキャラクタ・セマンティクスの情報については、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

AVERAGE

AVERAGEファンクションは、式の値の平均値を計算するファンクションです。

戻り値

DECIMAL

構文

AVERAGE(expression [CACHE] [dimension ...] )

パラメータ

expression

平均を計算する値の式。

CACHE

内部動作が若干変更されます。このキーワードは、元のパフォーマンスが非常に遅い場合にのみ指定してください。

dimension

結果のディメンションの名前。または、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ファンクションのキーワード」で説明されているように、指定するキーワードによって異なります。

構文

AW(keyword [workspace])

パラメータ

keyword

必要な特定の情報を示します。AWファンクションで使用できるキーワードと、それぞれの戻り値のデータ型および意味について、表7-2「AWファンクションのキーワード」で説明します。

表7-2 AWファンクションのキーワード

キーワード

データ型

返される情報

ACQUIRED

TEXT

アナリティック・ワークスペースにマルチライタ・モードでアタッチしている場合、アナリティック・ワークスペースで取得された変数、リレーション、値セット、ディメンション名またはパーティションの名前が返される。

AGGMAP

TEXT

ワークスペースに存在するすべてのaggmapオブジェクトのリスト。複数のオブジェクトが存在する場合は、各オブジェクト名が個別の行に配置された複数行のテキスト値が返される。

ALIASLIST

TEXT

ワークスペースに現在割り当てられている別名のリスト。複数の別名が存在する場合は、各別名が個別の行に配置された複数行のテキスト値が返される。

ATTACHED

BOOLEAN

指定したワークスペースがアタッチされているかどうかを示す。引数としてワークスペース名が必要。

CHANGED

BOOLEAN

ワークスペースへの読取り/書込みアクセス権を持っている場合、ワークスペースの前回の更新以降に変更を行ったかどうかを示す。ワークスペースに対するアクセス権が読取り専用の場合は、ワークスペースのアタッチ後、このワークスペースを他のユーザーが更新し、変更をコミットしたかどうかを示す。

COMPOSITE

TEXT

指定したワークスペースに存在するすべての名前付きコンポジット・オブジェクトのリスト。

DATE

DATE

現行のセッションにおける最新の更新日。現行のセッションで更新されていない場合は、ワークスペースにアタッチする前の最新のコミット日が返される。共有ワークスペースに読取り専用でアタッチした場合、ワークスペースへのアタッチ後に実行された更新またはコミットはDATEの対象にならない。

DIMENSION

TEXT

ワークスペースに定義されているすべてのディメンションのリスト。複数のディメンションが存在する場合は、各ディメンション名が個別の行に配置された複数行のテキスト値が返される。

EXISTS

BOOLEAN

指定したアナリティック・ワークスペースがOracle Databaseインスタンスで定義されているかどうかを示す。

FORMULA

TEXT

ワークスペースに定義されているすべての計算式のリスト。複数の計算式が存在する場合は、各計算式の名前が個別の行に配置された複数行のテキスト値が返される。

FROZEN

ブール

指定されたアナリティック・ワークスペースが現在固定されている場合はTRUE、固定されていない場合はFALSE。

FULLNAME

TEXT

指定したワークスペースのフルネーム。このフルネームは、ワークスペースを含むスキーマを示す。

ISUPDATED

TEXT

指定したアナリティック・ワークスペースがマルチライタ・モードでアタッチされていない場合、ワークスペースを更新し、コミットしていないときに、TRUEが返される。指定したアナリティック・ワークスペースがマルチライタ・モードでアタッチされている場合、ワークスペースに属している少なくとも1つの変数またはディメンションを更新し、コミットしていないときに、TRUEが返される。

LIST

TEXT

現在アタッチされているすべてのワークスペースのリスト。複数行のテキスト値の各行に個々のアナリティック・ワークスペースの名前が含まれている。

LISTNAMES

TEXT

ワークスペースに定義されているすべてのオブジェクトのリスト。複数行のテキスト値の各行に個々のアナリティック・ワークスペース・オブジェクトの名前が含まれている。

MODEL

TEXT

ワークスペースに定義されているすべてのモデルのリスト。複数のモデルが存在する場合は、各モデル名が個別の行に配置された複数行のテキスト値が返される。

MULTI

TEXT

アナリティック・ワークスペースへのマルチライタ・アクセス権が付与されているかどうかを示す。

NAME

TEXT

現行のワークスペースの名前。

OPTION

TEXT

EXPRESSワークスペースに定義されているすべてのOracle OLAPオプションのリスト。ワークスペースがEXPRESSではない場合、オプションはEXPRESSワークスペースでのみ定義されるため、AW(OPTION)はNAを返す。EXPRESSワークスペースの場合、AW(OPTION)は各オプション名が個別の行に配置された複数行のテキスト値を返す。

PAGESIZE

INTEGER

ページのサイズ(バイト単位)。

PROGRAM

TEXT

ワークスペースに定義されているすべてのプログラムのリスト。複数のプログラムが存在する場合は、各プログラム名が個別の行に配置された複数行のテキスト値が返される。

READERS

INTEGER

現在データベースに対して読取り専用アクセス権を持つユーザーの総数。

RELATION

TEXT

ワークスペースに定義されているすべてのリレーションのリスト。複数のリレーションが存在する場合は、各リレーション名が個別の行に配置された複数行のテキスト値が返される。

RO

TEXT

ワークスペースへの読取り専用アクセス権が付与されているかどうかを示す。

RW

TEXT

ワークスペースへの読取り/書込みアクセス権が付与されているかどうかを示す。

SEGMENTSIZE

DECIMAL

ワークスペースの現行の最大セグメント・サイズ。AW SEGMENTSIZE文を使用して指定した最新の値。

SHARED

BOOLEAN

ワークスペースが他のユーザーによって共有されているかどうかを示す。

TIME

ID

現行のセッションにおける最新の更新時刻。現行のセッションで更新されていない場合は、ワークスペースにアタッチする前の最新のコミット時刻が返される。共有ワークスペースに読取り専用でアタッチした場合、ワークスペースのアタッチ後に実行された更新またはコミットはTIMEの対象にならない。

VALUSET

TEXT

ワークスペースに定義されているすべての値セットのリスト。複数の値セットが存在する場合は、各値セット名が個別の行に配置された複数行のテキスト値が返される。

VARIABLE

TEXT

ワークスペースに定義されているすべての変数のリスト。複数の変数が存在する場合は、各変数名が個別の行に配置された複数行のテキスト値が返される。

WRITERS

INTEGER

現在データベースに対して書込みアクセス権を持つユーザーの数。

workspace

情報を取得するワークスペースの名前を示すテキスト式。この引数を指定しなかった場合、現行のワークスペースに関する情報がAWファンクションによって返されます。ATTACHED、LIST、NAMEの各キーワードは、このルールの例外です。

使用上の注意

アナリティック・ワークスペースのステータス情報

SHARED、CHANGED、RO、RWの各キーワードを使用すると、共有ワークスペースの現行のステータスに関する情報を取得できます。アナリティック・ワークスペースにアタッチした後に別のユーザーがそのアナリティック・ワークスペースを更新したかどうかを調べるには、SHARED、ROおよびCHANGEDがTRUEかどうかを確認します。

例

例7-26 アクティブ・ワークスペースの確認

次のプログラム行は、現在アクティブなワークスペースを確認して、プログラムがレポート対象の適切なデータを選択できるようにします。この方法によって、異なるデータが含まれている複数のワークスペースに同じレポート・プログラムを使用できます。

REPORT IF AW(NAME) EQ 'mysales' THEN mysales ELSE gensales

BACK

BACKファンクションは、現在実行しているすべてのプログラムの名前を、それぞれ1行で表示する複数行のテキスト値として返すファンクションです。複数のプログラムを実行している場合、あるプログラムが、ネストしたプログラムの一連の実行として他のプログラムをコールしています。

戻り値の中の最初の名前は、BACKのコールが記述されているプログラムの名前です。最後の名前は、他のプログラムのコールを最初に実行したプログラムの名前です。

BACKは、プログラム内でのみ使用可能です。

戻り値

TEXT

構文

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

BASEDIMファンクションは、連結ディメンションのループ処理を行い、連結ディメンションの現行値の基になるディメンションの名前を返します。

戻り値

TEXT

構文

BASEDIM(concatdim [LEAF])

パラメータ

concatdim

ベース・ディメンションまたはコンポーネントのディメンションの名前を必要とする連結ディメンションを指定します。戻り値のデータ型はTEXTです。

LEAF

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

例7-29 コンポーネントのディメンション名の戻り値

この例では、前の例と同じオブジェクトを使用します。ここでは、連結ディメンションのコンポーネント・ディメンションの名前を取得します。

REPORT BASEDIM(product.region.district LEAF)

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

PRODUCT
PRODUCT
REGION
REGION
REGION
DISTRICT
DISTRICT
DISTRICT

BASEVAL

BASEVALファンクションは、連結ディメンションのループ処理を行い、連結ディメンションのベース・ディメンションの値を返します。ベース・ディメンションが連結ディメンションの場合は、そのベース・ディメンションの値も返します。

戻り値

BASEVALの戻り値のデータ型は次のルールに従って決まります。

- concatdimの任意のコンポーネント・ディメンションのデータ型がNTEXTの場合、または任意のコンポーネント・ディメンションがNTEXT型の単純なディメンションを使用する結合ディメンションの場合、戻り値のデータ型はNTEXTになります。

- すべてのコンポーネント・ディメンションのデータ型が同じで、コンポーネント・ディメンションの中に結合ディメンションが存在しない場合、戻り値のデータ型はコンポーネント・ディメンションのデータ型になります。

- これ以外の場合、戻り値のデータ型はTEXTになります。

構文

BASEVAL(concatdim)

パラメータ

concatdim

ベース値を必要とする連結ディメンションを指定します。戻り値のデータ型は、連結ディメンションのベース・ディメンションのデータ型によって異なります。

例

例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

BEGINDATE

DAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンションの場合、BEGINDATEファンクションは、式が非NA値になるディメンション・ステータスの最初の期間の開始日を返します。たとえば、式がmonthでディメンション化され、式が非NA値になる最初のディメンション値がJan97であるとします。この場合、BEGINDATEによって返される日付はJanuary 1, 1997です。

注意:
データ型がTEXTの階層ディメンションとして実装されている時間ディメンションでこのファンクションは使用できません。

戻り値

日付のみまたはテキスト

式のすべての値がNA値の場合、BEGINDATEファンクションの戻り値はNAになります。

構文

BEGINDATE(expression)

パラメータ

expression

式(expression)には、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションを1つのみ含める必要があります。

例

例7-32 開始日の検索

次の文では、month、product、districtの各ディメンションの値が制限され、Chicago地区におけるテントの売上数量のunits変数が非NA値になった最初の日付を現行の出力ファイルに送信します。

LIMIT month TO ALL
LIMIT product TO 'TENTS'
LIMIT district TO 'CHICAGO'
SHOW BEGINDATE(units)

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

01JAN95

BIN_TO_NUM

BIN_TO_NUMファンクションは、ビット・ベクトルを等価の数値に変換するファンクションです。

BIN_TO_NUMは、データ・ウェアハウス・アプリケーションでグルーピング・セットを使用して目的のグループを選択するために役立ちます。

戻り値

NUMBER

構文

BIN_TO_NUM(expression [, expression ]... )

パラメータ

expression

ビット・ベクトル内のビットの値である0(ゼロ)または1のいずれかに評価される式。

例

例7-33 ビット・ベクトルの数値への変換

SHOW BIN_TO_NUM(1,0,1,0)
10.00

BITAND

BITANDファンクションは、2つの負でない値のビットに対して論理演算ANDを実行します。このファンクションは、通常、DECODEファンクションと組み合せて使用します。

AND演算は2つのビット値を比較します。値が同じ場合には、演算子から1が返されます。値が異なる場合には0(ゼロ)が返されます。重要なビットのみが比較対象とされます。たとえば、整数5(バイナリ101)と整数1(バイナリ001または1)をAND演算で比較すると、右端のビットのみが比較対象とされ、結果の値は1(バイナリ1)となります。

戻り値

INTEGER

構文

BITAND (argument1 , argument2)

パラメータ

argument1

負の数以外のINTEGER式。

argument2

負の数以外のINTEGER式。

例

例7-65「BITANDを使用したDECODE」を参照してください。

BLANKSTRIP

BLANKSTRIPファンクションは、テキスト値の先行または後続の空白を削除するファンクションです。BLANKSTRIPは、インポートした固定長フィールドから不要な空白を削除するときなどに有効です。

戻り値

TEXTまたはNTEXT

構文

BLANKSTRIP(text-expression [TRAILING|LEADING|BOTH])

パラメータ

text-expression

空白を削除するテキスト式。TEXT式を指定すると、戻り値はTEXTです。NTEXT式を指定すると、戻り値はNTEXTです。

TRAILING

テキストの後続の空白を削除します。

LEADING

テキストの先行の空白を削除します。

BOTH

先行の空白と後続の空白を両方削除します。

例

例7-34 先行および後続の空白の削除

この例では、インポートしたワークシートのフィールドprodlabelから先行の空白と後続の空白を削除し、productという変数に結果を格納します。

product = BLANKSTRIP(prodlabel, BOTH)

CALLTYPE

OLAP DMLプログラムの内部でCALLTYPEファンクションを使用すると、プログラムがファンクションまたはコマンドとして起動されたか、CALL文コマンドを使用して起動されたか、あるいはOLAP DML文の実行によってトリガーされたかどうかが示されます。

戻り値

TEXT

CALLTYPEの戻り値は次のとおりです。

- FUNCTION。値を返すファンクションとしてプログラムが起動された場合。

- COMMAND。コマンドとしてプログラムが起動された場合。

- CALL。CALL文を使用してプログラムが起動された場合。

- TRIGGER。プログラムがOLAP DML文に応答して起動したトリガー・プログラム(TRIGGERコマンドによってプログラムとオブジェクト・イベントが関連付けられている)の場合。

構文

CALLTYPE

例

例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ファンクションは、数式の値をカテゴリ別にグループ化します。カテゴリは、一連の増加する数値を指定することによって定義します。CATEGORIZEから返された結果は、expressionのすべてのディメンションによってディメンション化されます。expressionのセルごとに、CATEGORIZEによって、数値がカテゴリの範囲内の場合はそのカテゴリ、最初のカテゴリの範囲より小さい値の場合は0、最後のカテゴリの範囲を超える値の場合は-1、NA値の場合はNA、のいずれかが返されます。

戻り値

DECIMAL

構文

CATEGORIZE(expression {values|group-expression})

ただし、valuesの構文は次のとおりです。

bottom-value [next-lowest-break-value] top-value

パラメータ

expression

分類対象となる値を持つ数式。

bottom-value

一連の数値のうちの最低値を表し、かつカテゴリ1の下限となる数値。

next-lowest-break-value

次のカテゴリの範囲の先頭を表す数値。

top-value

一連の数値のうちの最高値を表し、かつ最上位のカテゴリの上限となる数値。

group-expression

カテゴリのブレーク値を定義する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)

この文の実行結果は、「カテゴリ範囲の値の指定」に記載されている文の実行結果と同じです。

CEIL

CEILファンクションは、指定した数値以上の整数のうち最も小さい値を返すファンクションです。

戻り値

NUMBER

構文

CEIL(n)

パラメータ

n

指定する数字(NUMBERデータ型)。

例

例7-38 ある数値以上の最小の整数の表示

次の文は、CEILによって返される結果を表示します。

- 次の文

SHOW CEIL(15.7)

生成される結果は次のとおりです。

16

- 次の文

SHOW CEIL(-6.457)

によって、次の結果が生成されます。

-6

CHANGEBYTES

CHANGEBYTESファンクションは、指定した文字列がテキスト式に1つ以上存在する場合、この文字列を別の文字列に変更するファンクションです。

戻り値

TEXT

構文

CHANGEBYTES(text-expression oldtext newtext [number])

パラメータ

text-expression

変更されるバイト・データが含まれているTEXT式。text-expressionが複数行のTEXT式の場合、改行はCHANGEBYTESの戻り値でも維持されます。

oldtext

変更される1つ以上のバイト・データが含まれているTEXT式。

newtext

oldtextを置換する1つ以上のバイト・データが含まれているTEXT式。

number

text-expressionにoldtextが複数回出現する場合、oldtextをnewtextに置換する回数を表すINTEGER。デフォルトでは、出現するすべてのoldtextを変更します。

例

例7-39 バイト・データを使用したテキスト値の変更

この例では、テキスト値の一部を変更する方法の一例を示します。

次の文

SHOW CHANGEBYTES('Hello there, Joe\nHello there, Jane',
'there', - 'to you', 1)

によって、次の出力が生成されます。

Hello to you, Joe
Hello there, Jane

CHANGECHARS

CHANGECHARSファンクションは、指定した文字列がテキスト式に1つ以上存在する場合、この文字列を別の文字列に変更するファンクションです。

戻り値

すべての引数がTEXT値である場合、戻り値はTEXTです。すべての引数がNTEXT値である場合、戻り値はNTEXTです。引数にTEXTとNTEXTの両方の値が存在する場合は、すべてのTEXT値がNTEXT値に変換されてからファンクションの演算が実行され、戻り値はNTEXTになります。

構文

CHANGECHARS(text-expression oldtext newtext [number] [UPCASE])

パラメータ

text-expression

変更される文字が含まれているTEXT式またはNTEXT式。text-expressionが複数行のテキスト値の場合、改行はCHANGECHARSの戻り値でも維持されます。

oldtext

変更される1つ以上の文字が含まれているTEXT式またはNTEXT式。

newtext

oldtextが置換される1つ以上の文字が含まれているTEXT式またはNTEXT式。

number

text-expressionにoldtextが複数回出現する場合、oldtextをnewtextに置換する回数を表すINTEGER。デフォルトでは、出現するすべてのoldtextを変更します。

UPCASE

CHANGECHARSに対して、text-expressionとoldtextの文字を大文字に変更してから一致検索を実行することを指定します。CHANGECHARSの戻り値は大文字になりません。

例

例7-40 テキスト文字の値の変更

この例では、テキスト値の一部を変更する方法の一例を示します。

次の文

SHOW CHANGECHARS('Hello there, Joe\nHello there, Jane',
'there', - 'to you', 1)

によって、次の出力が生成されます。

Hello to you, Joe
Hello there, Jane

CHANGEDRELATIONS

CHANGEDRELATIONSファンクションは、特定の変数およびaggmapオブジェクトについて、その変数が最後に集計されたとき以降にaggmap内およびaggmap内のリレーションに変更があったかどうかを識別するファンクションです。

戻り値

BOOLEAN

変更があった場合はTRUE、なかった場合はFALSE、変更の有無をファンクションで識別できない場合はNA。

構文

CHANGEDRELATIONS( variable [ [(PARTITION partition [,PARTITION partition]...) ] aggmap] )

パラメータ

variable

変更を確認するaggmapオブジェクトがある変数の名前。

partition

変更を確認するaggmapがある、変数の1つ以上のパーティションの名前(カンマ区切りで指定)。

aggmap

変更を確認するaggmapオブジェクトの名前。aggmapに値を指定しない場合は、variableの$AGGMAPプロパティに指定されたaggmapが使用されます(存在する場合)。

CHANGEDVALUES

CHANGEDVALUESファンクションは、変数が最後に集計されたとき以降に、変数の値が変更されたかどうかを識別する(または変更された値の数を返す)ファンクションです。

戻り値

returntypeにNUMBERを指定した場合以外はBOOLEAN。

このファンクションからBOOLEAN値が返される場合、変数が最後に集計されたとき以降に値の変更があればTRUE、値の変更がなければFALSE、値の変更の有無をファンクションで判別できない場合はNA。

このファンクションからNUMBER値が返される場合、その値は変数が最後に集計されたとき以降に変更された値の数を表します。

構文

CHANGEDVALUES ( variable [(PARTITION partition [,PARTITION partition]...)] [returntype] )

パラメータ

variable

変更された値を確認する変数の名前。

partition

変更された値を確認する、変数の1つ以上のパーティションの名前(カンマ区切りで指定)。

returntype

変更された値の数を示す数値がファンクションによって返されるようにする場合は、NUMBER。最後の集計以降に変更された値の有無がファンクションによって返されるようにする場合は、BOOLEANを指定するか、またはこの引数を空のままにします(BOOLEANがreturntypeのデフォルト値であるため)。

CHARLIST

CHARLISTファンクションは、1つの式をその値ごとに別の行にして、複数行のテキスト値に変換するファンクションです。

戻り値

NTEXT式の場合はNTEXT、それ以外の場合はTEXT。

構文

CHARLIST(expression [dimensions])

パラメータ

expression

複数行のテキスト値に変換する式。式のデータ型がTEXTまたはNTEXT以外である場合、その式はCHARLISTにより自動的にTEXTに変換されます。

dimensions

戻り値のディメンション。ディメンションを指定しないと、CHARLISTの戻り値は単一の値になります。戻り値に1つ以上のディメンションを指定すると、CHARLISTによって、指定したディメンションの現行のステータス・リストにある値ごとに複数行のテキスト値が返されます。各ディメンションは、式の実際のディメンションである必要があり、関連ディメンションやベース・ディメンションは指定できません。

例

例7-41 ワークスペース・オブジェクトの削除

NAMEディメンションを指定してCHARLISTを使用すると、ワークスペース・オブジェクトのリストを作成できます。ワークスペース内にあるすべてのワークシートなど、特定の種類のオブジェクトをすべて削除するとします。この場合、CHARLISTとアンパサンド(&)を使用します。

LIMIT NAME TO OBJ(TYPE) EQ 'WORKSHEET'
DELETE &CHARLIST(NAME)

例7-42 営業成績最優秀者リストの作成

製品ごとの営業成績最優秀者の名前を、productというディメンションを指定したテキスト変数であるproduct.memoに格納してあるとします。次に、営業成績最優秀者のリストを製品別に作成します。これを行うには、productでディメンション化された変数を作成し、次にCHARLISTとproductを組み合せて使用して、すべての営業成績最優秀者のリストを製品ごとに作成します。

DEFINE topsales VARIABLE TEXT <product>
topsales = CHARLIST(product.memo product)

CHARTOROWID

CHARTOROWIDファンクションは、テキスト・データ型からROWIDデータ型に値を変換するファンクションです。

戻り値

ROWID

構文

CHARTOROWID(char)

パラメータ

char

変換するテキスト式。

例

例7-43 テキストからROWIDへの値の変換

アナリティック・ワークスペースに次の定義を持つerowidディメンションが含まれているとします。

DEFINE erowid DIMENSION ROWID

次のコードに示すように、CHARTOROWIDファンクションを使用してこのディメンションにテキスト値を追加できます。

MAINTAIN erowid ADD CHARTOROWID('AAAFd1AAFAAAABSAA/')
REPORT erowid

EROWID
------------------------------
AAAFd1AAFAAAABSAA/

CHGDIMS

CHGDIMSファンクションは、式のディメンション性を変更したり、式の評価時にディメンション・ステータスを変更するファンクションです。

戻り値

元の式のデータ型

構文

CHGDIMS (expression, limit-type)

ここで、limit-typeは次のいずれかです。

[CACHE] LIMITSAVE valueset-list

[CACHE] LIMIT valueset-list

TO dimension-list

ADD dimension-list

パラメータ

expression

変更する対象の式。

CACHE

制限の結果をキャッシュするように指定し、CHGDIMSをコールしたOLAP DML文の実行が終了するまでCHGDIMSの後続の実行で使用できるように、その結果を保存します。

LIMITSAVE

式のディメンション・ステータスの値が位置に設定されてから、CHGDIMSコマンドが実行されます(つまり、LIMITSAVEを指定した場合、現行のディメンション・ステータスの値は変更されません)。たとえば、式がLAGファンクションの場合に相対位置変更が現在の値から計算されるようにしたり、SQL SELECT文のような外部ループ内にCHGDIMSをコーディングする場合に、外部ループで設定されるディメンション・ステータスの値を保持したいときに、CHGDIMSにLIMITSAVEを指定します。

LIMIT

expressionのディメンション・ステータスの値が新しいステータスの最初の位置に設定されてからexpressionが評価されます。これは、expressionが評価される直前に発行されたLIMIT TOコマンドとほぼ同じ方法で行われます。

valueset-list

値セットの名前またはLIMITファンクション。

TO dimension-list

expressionのディメンションをdimension-listで指定されたディメンションとして、expressionの評価が行われるように指定します。

ADD dimension-list

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

CHRファンクションは、整数値(または暗黙的に整数値に変換可能な値)を文字に変換するファンクションです。

注意:
このファンクションを含むコードを、ASCIIベースのマシン・アーキテクチャとEBCDICベースのアーキテクチャ間で共有することはできません。

戻り値

テキスト値。シングルバイト・キャラクタ・セットでは、number > 256の場合、number MOD 256に相当するバイナリ値が返されます。マルチバイト・キャラクタ・セットでは、numberは1つの完全なコード・ポイントに解決可能でなければなりません。無効なコード・ポイントは検証されず、無効なコード・ポイントを指定した場合の結果はそのコード・ポイントによって異なります。

構文

CHR(number [ USING NCHAR_CS ])

パラメータ

number

整数値、または暗黙的に整数値に変換可能な値。

関連項目:
「数値データ型の自動変換」

USING NCHAR_CS

値を各国語キャラクタ・セットで返すように指定します。この句を指定しない場合、値はデータベース・キャラクタ・セットで返されます。

例

例7-44 整数値の文字への変換

WE8ISO8859P1データベース・キャラクタ・セットを使用するASCIIベースのシステムがあるとします。この場合、次の文は文字Cを返します。

SHOW CHR(67)
C

COALESCE

COALESCEファンクションは、式のリストの最初の非NA式を返します。すべての式がNAと評価された場合は、NAを返します。

戻り値

最初の引数のデータ型

構文

COALESCE (expr [, expr]...)

パラメータ

expr

式。

例

例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ファンクションは、ある列の数値を、レポート内の同じ行内で現行の列の左に返すファンクションです。COLVALは、ROWコマンドおよびREPORTコマンドでのみ使用できます。

戻り値

選択した列に数値データまたはブール・データが含まれる場合はDECIMAL、列(n)に含まれる値がTEXTまたはIDのみの場合はNA、現行の列、現行の列の右側の列または存在しない列を指定した場合はエラー。

構文

COLVAL(n)

パラメータ

n

値を取得する対象の、現行の行内の列の番号。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 ([context-name [UPDATE|name]])

パラメータ

context-name

コンテキストの名前を含むテキスト式。CONTEXTファンクションの引数としてcontext-nameしか指定しない場合は、コンテキストに保存されているすべてのオブジェクトの名前を含む複数行のテキスト値が返されます。

UPDATE

CONTEXTファンクションでUPDATEを指定すると、値がコンテキストに保存または削除された回数が返されます。

name

コンテキスト内に値が保存されているオブジェクトの名前。CONTEXTファンクションでnameを指定すると、そのオブジェクトの保存済のステータスまたは値が返されます。

例

例7-47 コンテキスト名のリスト

次の文では、CONTEXTファンクションは現行セッションのコンテキスト名のみを返します。これは、例9-72「ディメンション・ステータスの保存」で使用されているのと同じコンテキストです。

SHOW CONTEXT

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

democontext1

例7-48 保存値のリスト

次の文では、CONTEXTファンクションはdemocontext1という名前のコンテキストに保存されているproductディメンションの値を返します。

SHOW CONTEXT('democontext1' product)

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

Tents
Canoes

CONVERT

CONVERTファンクションは、値をあるデータ型から別のデータ型へ変換するファンクションです。

戻り値

戻り値は、type引数の値によって異なります。

構文

CONVERT(expression, type [argument...])

パラメータ

expression

変換する対象の式または変数。

type

expressionの変換後のデータ型。データ型を表すキーワードについては、表7-3「CONVERTファンクションのtypeパラメータのキーワード」で説明します。

表7-3 CONVERTファンクションのtypeパラメータのキーワード

キーワード

説明

BINARY

Oracle標準データ型への変換を示すものではないが、付加的な変換機能を提供。BINARYは変換を行わない。データ型にかかわりなく、すべての値の内部表現はテキスト値として返される。

- TEXTデータ型では、結果は値それ自体となるため可変長。

- IDおよびDECIMALデータ型では、結果は8バイト長。ID値は必要に応じて空白で埋められる。

- BOOLEANまたはINTEGERデータ型では、デフォルトの結果はそれぞれ2または4バイト長(幅をわずかに変更するための追加引数については、argumentの説明を参照)。

- それ以外のデータ型では、結果は4バイト長。

「PACKEDおよびBINARY変換」を参照。

BOOLEAN

Oracle OLAP BOOLEANデータ型への変換。

BYTE

単一文字を0から255の範囲のASCIIのINTEGER値に変換する。または、この範囲のINTEGERを文字に変換する。この範囲外のINTEGERはmodulo 256とみなされて変換され、つまり、残りが256より小さくなるまでINTEGERから256が減算され、範囲内に収まった残余分が文字に変換される。

DATE

Oracle OLAP DATEデータ型への変換。

DATETIME

Oracle OLAP DATETIMEデータ型への変換。

DECIMAL

Oracle OLAP DECIMALデータ型への変換。

DSINTERVAL

Oracle OLAP DML DSINTERVALデータ型への変換。

ID

Oracle OLAP IDデータ型への変換。

INFILE

ID、TEXT、DATEまたはRELATIONの値を一重引用符で囲み、INFILE文で読み取れるようにする。したがって、expressionには、ID、TEXT、DATEまたはRELATIONのいずれかの値が必要。英数字で等価なものがないTEXT値の場合、それらの値は正しいエスケープ・シーケンスに変換される。

INTEGER

Oracle OLAP INTEGERデータ型への変換。

LONGINTEGER

Oracle OLAP LONGINTEGERデータ型への変換。

NTEXT

Oracle OLAP標準データ型への変換。NCHARおよびNVARCHAR2 SQLデータ型に対応。NTEXT文字はUTF8 Unicodeでエンコードされる。この文字コードは、データベースのNCHARキャラクタ・セットの場合(UTF16など)とは異なる可能性あり。NTEXTからTEXTへの変換では、NTEXT値がデータベース・キャラクタ・セットで表せない場合、データの損失をまねくことがあります。

NUMBER [(p,[s])]

Oracle OLAP NUMBERデータ型への変換。

PACKED

数値を10進値に変換してから、パック形式(15桁およびプラス記号またはマイナス記号を含む8バイト長のテキスト値)に変換。小数部はパック形式の数字には表せないため、変換処理により小数は直近のINTEGERに丸められる。「PACKEDおよびBINARY変換」を参照。

ROWID

テキスト値からROWID値への変換。

SHORTDECIMAL

Oracle OLAP SHORTDECIMALデータ型への変換。

SHORTINTEGER

Oracle OLAP SHORTINTEGERデータ型への変換。

TEXT

Oracle OLAP標準データ型への変換。SQLのCHARおよびVARCHAR2データ型に相当。TEXT文字はデータベース・キャラクタ・セットでエンコードされる。

TIMESTAMP

Oracle OLAP DML TIMESTAMPデータ型への変換。

TIMESTAMP_LTZ

Oracle OLAP DML TIMESTAMP_LTZデータ型への変換。

TIMESTAMP_TZ

Oracle OLAP DML TIMESTAMP_TZデータ型への変換。

UROWID

テキスト値からUROWID値への変換。

YMINTERVAL

Oracle OLAP DML YMINTERVALデータ型への変換。

argument

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]]

BOOLEANまたはINTEGERを持つBINARY

BINARY [width-exp]

decimal-int

数値データをTEXTまたはID値に変換する際に使用される小数点以下の桁数を制御するINTEGER式。この引数を指定しない場合、CONVERTではDECIMALSオプションの現行の値(デフォルトは2)を使用します。

comma-bool

数値データのテキスト表現でカンマを使用して3桁を区切るかどうかを決定するブール式。式の値をYESに設定すると、カンマが使用されます。この引数を指定しない場合、CONVERTではCOMMASオプションの現行の値(デフォルトはYES)を使用します。

paren-bool

数値データのテキスト表現で負の値をカッコで囲むかどうかを決定するブール式。式の値をYESに設定すると、カッコが使用され、NOに設定すると、負の値の前にマイナス記号が付きます。この引数を指定しない場合、CONVERTではPARENSオプションの現行の値(デフォルトはNO)を使用します。

date_format

日時式をテキストに変換する際に使用するテンプレートを指定するテキスト式。各データ・フィールドの有効な書式は、DATE_FORMATコマンドを使用して指定できる書式と同じです。

date_format引数を含めない場合、結果の書式はセッションのデフォルトの日付書式によって決まります。詳細は、「デフォルトの日時書式テンプレート」を参照してください。

dateformat

日付のみの式をテキストに変換する際に使用するテンプレートを指定するテキスト式。テンプレートには、日付の4つの構成要素(日、月、年、曜日)についての書式指定を含めることができます。テンプレート内の各構成要素は、左の山カッコ(<)と右の山カッコ(>)で囲む必要があります。構成要素の前後または構成要素間には、別のテキストを入れることが可能です。

日付の各構成要素についての有効な書式は、DATEFORMATオプションで許可されている書式と同じです。

次の文では、CONVERTは今日の日付をdateformat引数で指定されている書式でのテキスト値として返します。

SHOW CONVERT(TODAY TEXT '<MM>-<DD>-<YY>')

この例では、今日の日付は1998年3月31日です。SHOW文は、この日付を次のように表示します。

03-31-98

dateformat引数を含めない場合、結果の書式はDATEFORMATオプションの現行の設定により決定されます。

dwmqy-dimension

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

vnf

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に基づく書式が使用されます。

date-order

テキスト値の構成要素(月、日、年)の順序があいまいな場合に、指定されたテキスト値を日付のみの値として解釈する方法を指定するテキスト式。式は、'MDY'、'DMY'、'YMD'、'YDM'、'MYD'、'DYM'のいずれかです。各文字は、日付の構成要素(Mは月、Dは日、Yは年)を表します。

date-orderまたはdwmqy-dimname引数を含めない場合には、テキスト式内の解釈のあいまいな点は、DATEORDERオプションの現行の設定によって解決されます。日付のみの値の完全な説明とその解釈方法については、DATEORDERオプションを参照してください。

dwmqy-dimname

テキスト値の構成要素の順序があいまいな場合に、指定されたテキスト値を日付のみの値として解釈する方法の決定に使用するVNFまたはデフォルト日付順序を持つ、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションの名前。

date-orderまたはdwmqy-dimname引数を含めない場合には、テキスト式内の解釈のあいまいな点は、DATEORDERオプションの現行の設定によって解決されます。日付のみの値の完全な説明とその解釈方法については、DATEORDERオプションを参照してください。

width-exp

CONVERTからの出力の幅を指定するINTEGER式。最小幅は7です。デフォルトの幅は、LSIZEオプションの現行の値です。escape-int引数を指定している場合、この引数は必須です。

escape-int

出力にエスケープ・シーケンスを使用するかどうかを指定します。この引数には、表7-5「CONVERTのescape-intパラメータの値」に示されている値を指定できます。

表7-5 CONVERTのescape-intパラメータの値

値

説明

-1

エスケープを使用しない。先行するWIDTH引数から1が減算されないように、-1の前にカンマが付く(,-1)。

0

(デフォルト)印刷不可の文字にエスケープを使用する。

1

すべての文字にエスケープを使用する。

OLAP DMLにおけるエスケープ・シーケンスの詳細は、「エスケープ・シーケンス」を参照してください。

width-exp

変換後の結果の幅を制御するINTEGER式。1、2または4バイトを評価できます。デフォルトの幅は、BOOLEANでは2、INTEGERでは4です。INTEGER値が大きすぎて指定された幅に収まらない場合は、NAが返されます。幅が無効または他のデータ型について指定されている場合は、エラーが発生します。

NOXLATE

キャラクタ・セット変換の実行を禁止することを示すキーワード。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'

'MON'および'MONTH'

'MON

'MONTH'

'MONTH'

'MON'

'YY'

'YYYY'

'RR'

'RRRR'

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

CORRELATIONファンクションは、2つの式のデータ値のペアについて相関係数を返すファンクションです。相関係数は、データ値間の関係の強度を示します。相関係数が正の1または負の1に近いほど、式内のデータ値間の関係は強くなります。相関係数0(ゼロ)は相関がないことを意味し、+1(プラス1)または-1(マイナス1)は完全な相関を意味します。正の相関係数は、一方の式のデータ値が増加(または減少)すると、もう一方の式のデータ値も増加(または減少)することを示します。負の相関係数は、一方の式のデータ値が増加すると、もう一方の式のデータ値は減少することを示します。

戻り値

DECIMAL

構文

CORRELATION(expression1 expression2 [PEARSON|SPEARMAN|KENDALL] -

[BASEDON dimension-list])

パラメータ

expression1

少なくとも1つのディメンションがexpression2と共通している、ディメンション化された数式。

expression2

少なくとも1つのディメンションがexpression1と共通している、ディメンション化された数式。

PEARSON

Pearsonの積率相関係数(Pearson product-moment)を計算します。たとえば販売個数と単価などのように、データ水準が間隔尺度または比例尺度で、式のデータ値が線形関係を持ち、正規分布する場合、このメソッドを使用します。

SPEARMAN

Spearmanの順位相関係数(Spearman's rho)を計算します。式が線形関係を持たないか、正規分布しない場合に、このノンパラメトリック・メソッドを使用します。相関係数の計算時に、このメソッドではexpression1およびexpression2のデータ値に順位を付け、expression1の各要素の順位をexpression2の対応する要素と比較します。このメソッドは、式のほとんどの値が一意であることを前提としています。

KENDALL

Kendallの順位相関係数(Kendall's tau)を計算します。このノンパラメトリック・メソッドでは、SPEARMANメソッドと同様に、まずexpression1およびexpression2のデータ値を順位付けます。ただし、KENDALLメソッドでは、各ペアの順位を次に続くペアと比較します。このメソッドは、expression1およびexpression2のデータ値のほとんどが一意でない場合に使用します。

BASEDON dimension-list

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

COS

COSファンクションは、三角式の余弦を計算するファンクションです。

戻り値

NUMBER

COSで返される結果は、指定した式と同じディメンションを持つ値です。

構文

COS(angle-expression)

パラメータ

angle-expression

ラジアン単位で指定された角度値を含む数式。

例

例7-52 ラジアン単位の角度の余弦計算

この例では、1ラジアンの角度の余弦を計算します。次の文

DECIMALS = 5
SHOW COS(1)

によって、次の結果が生成されます。

0.54030

例7-53 度数による角度の余弦計算

この例では、60度の角度の余弦を計算します。1度は2 * (pi) / 360ラジアンなので、60度は約60 * 2 * 3.14159 / 360ラジアンです。次の文

SHOW COS(60 * 2 * 3.14159 / 360)

によって、次の結果が生成されます。

0.50000

COSH

COSHファンクションは、三角式の双曲線余弦を計算するファンクションです。

戻り値

NUMBER

構文

COSH(expression)

パラメータ

expression

ラジアン単位で指定された角度値を含む数式。

例

例7-54 角度の双曲線余弦の計算

この例では、1ラジアンの角度の双曲線余弦を計算します。次の文

DECIMALS = 5
SHOW COSH(1)

によって、次の結果が生成されます。

1.54030

COUNT

COUNTファンクションは、ブール式のTRUE値の件数をカウントします。式にTRUE値がない場合は、0(ゼロ)が返されます。

戻り値

INTEGER

構文

COUNT(boolean-expression [CACHE] [dimension...])

パラメータ

boolean-expression

TRUE値をカウントする対象のブール式。

CACHE

内部動作が若干変更されます。このキーワードは、元のパフォーマンスが非常に遅い場合にのみ指定してください。

dimension

結果のディメンションの名前。または、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

CUMSUMファンクションは、時間ディメンション全体または別のディメンション全体の累積合計を計算するファンクションです。合計されるデータが1次元である場合、CUMSUMでは、一連の累積合計を1回(該当ディメンションのすべての値に対し1回)行います。データに、合計する対象のディメンション以外のディメンションがある場合、CUMSUMは、他のディメンションにあるステータス中の値の各組合せに対し別個に、一連の累積合計を行います。

戻り値

DECIMAL

構文

CUMSUM(cum-expression [STATUS] total-dim [reset-dim] [INSTAT])

パラメータ

cum-expression

値を合計する対象の数値変数または演算。たとえば、UNITSなど。

STATUS

cum-expressionが多次元の場合、CUMSUMによりファンクションの処理中に使用する一時変数が作成されます。STATUSキーワードを指定すると、一時変数のサイズの計算時に、ディメンションのデフォルト・ステータスのかわりに現行のステータスが使用されます。式のディメンションがいくつかの値に制限されており、物理的に断片化されている場合は、STATUSを指定することで、CUMSUMのパフォーマンスを向上させることができます。

結果がステータス外になる式(たとえば、LEADまたはLAGファンクションを使用した場合、または修飾データ参照を使用した場合)でCUMSUMをSTATUSキーワードとともに使用した場合、ステータス外の結果はNAとして返されます。

注意:
合計されるデータが1次元の場合にSTATUSキーワードを指定すると、エラーが発生します。

total-dim

合計の対象とする、cum-expressionのディメンション。

reset-dim

各新年の開始時など、新しいリセット・ディメンション値ごとに一連の累積合計をやり直すかどうかを指定します。リセット・ディメンションは、次のいずれかです。

- 明示的に定義されたリレーションを介してtotal-dimに関連付けられている任意のディメンション。

- total-dimがDAY、WEEK、MONTH、QUARTER、YEAR型のいずれかである場合、DAY、WEEK、MONTH、QUARTERまたはYEAR型の任意のディメンション。CUMSUMでは2つのディメンション間の暗黙的なリレーションを使用するため、それらは明示的なリレーションで関連付けられている必要はありません。「暗黙的なリレーションの変更」を参照してください。

- total-dimによってディメンション化されたリレーション。CUMSUMでは、関連ディメンションをリセット・ディメンションとして使用しますが、これによって、リレーションが複数ある際にどのリレーションを使用するかを選択できます。

INSTAT

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_DATE」

CURRENT_DATEファンクションは、セッションのタイムゾーンでの現在の日付をグレゴリオ暦の値として返します。

戻り値

DATETIME

構文

CURRENT_DATE

例

例7-58 現在の日付の取得

2007年2月13日の時点で日付を取得するとします。

SHOW NLS_DATE_FORMAT
DD-MON-RR
SHOW CURRENT_DATE
13-FEB-07

「CURRENT_TIMESTAMP」

CURRENT_TIMESTAMPファンクションは、セッションのタイムゾーンでの現在の日時をTIMESTAMP_TZデータ型の値として返します。タイムゾーン・オフセットがセッションの現在のローカル時間を示します。

セッションのタイムゾーンにおける現在の日時をTIMESTAMP値として取得する場合は、LOCALTIMESTAMPファンクションを使用してください。

戻り値

TIMESTAMP_TZ

構文

CURRENT_TIMESTAMP [ (precision) ]

パラメータ

precision

返される時間値の秒の小数精度。この引数を省略した場合、このファンクションではデフォルト値の6が使用されます。

例

例7-59 現在のタイムスタンプの取得

現在のタイムスタンプを取得するとします。

SHOW CURRENT_TIMESTAMP
13-FEB-07 09.11.33.454685 AM -08:00

DAYOF

DAYOFファンクションは、指定した日付の曜日を示す、1から7までの範囲のINTEGERを返すファンクションです。結果の1は日曜日を表します。結果は、指定したDATE式と同じディメンションを持ちます。

戻り値

INTEGER

構文

DAYOF(date-expression)

パラメータ

date-expression

DATEデータ型の式、または日付を指定するテキスト式。DATE式のかわりに、有効な日付入力スタイルに従った値を持つテキスト式を指定できます。DAYOFでは、テキスト式の値が自動的にDATE値に変換され、DATEORDERオプションの現行の設定を使用して、解釈のあいまいな点が解決されます。

例

例7-60 今日の曜日の検索

次の文で、今日の日付に当たる曜日を現行の出力ファイルに送信します。

SHOW DAYOF(TODAY)

たとえば、今日の日付が1997年1月15日の水曜日の場合、この文によって生成される出力は次のとおりです。

4

例7-61 特定の日付の曜日の検索

次の文で、1996年の7月4日に当たる曜日を現行の出力ファイルに送信します。

SHOW DAYOF('04jul96')

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

5

DBTIMEZONE

DBTIMEZONEファンクションは、データベースのタイムゾーンの値を返します。

戻り値

タイムゾーン・オフセット('[+|-]TZH:TZM'という書式の文字型)またはタイムゾーン・リージョン名。ユーザーが直近のCREATE DATABASEまたはALTER DATABASE文で指定したデータベース・タイムゾーン値によって異なります。

構文

DBTIMEZONE

例

例7-62 データベースのタイムゾーンの取得

SHOW DBTIMEZONE
-08:00

DDOF

DDOFファンクションは、指定した日付の日にちを示す、1から31までの範囲のINTEGERを返すファンクションです。DDOFにより返される結果は、指定したDATE式と同じディメンションを持ちます。

戻り値

INTEGER

構文

DDOF(date-expression)

パラメータ

date-expression

DATEデータ型の式、または日付を指定するテキスト式。テキスト式の有効な形式については、「日付のみの入力値」を参照してください。

例

例7-63 今日の日にちの検索

次の文では、今日の日付の日にちが返されます。

SHOW DDOF(TODAY)

たとえば、今日の日付が2000年9月8日の場合、この文によって生成される出力は次のとおりです。

8

DECODE

DECODEファンクションは、ある式を1つ以上の他の式と比較し、基準の式が検索式と等しい場合に呼応する結果式を返します。一致する式がまったくない場合にはデフォルトの式(デフォルトが指定されている場合)またはNA(デフォルトが指定されていない場合)を返すファンクションです。

戻り値

最初のresult引数のデータ型

構文

DECODE (expr , search, result [, search , result]... [, default])

パラメータ

expr

(比較の基準とする)検索される式。このファンクションでは、比較の前に、exprを1番目のsearch値のデータ型に自動変換します。

search

(比較する対象の)検索する式。このファンクションでは、比較の前に、各search値を1番目のsearch値のデータ型に自動変換します。

result

expressionがsearchと等しいときに返される式。

default

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で使用される計算方法」を参照)。期首価額と期末価額は、各期間に取得した資産に対して指定します。

ヒント:
DEPRDECLに使用されている減価償却の純粋な定率法は、最も一般的な形式の定率法とは異なります。より一般的な形式の定率法については、定率法と定額法を組み合せて使用しているDEPRDECLSWファンクションの項を参照してください。

戻り値

DECIMAL

戻り値は、start-expのすべてのディメンションによってディメンション化されます。

構文

DEPRDECL(start-exp end-exp n [STATUS] [decline-factor [ {FULL|HALF|portion-exp}[time-dimension] ] ])

パラメータ

start-exp

資産の期首価額が格納された数式。start-exp式は、時間ディメンションによってディメンション化する必要があります。start-expには、時間ディメンションの値ごとに、その期間に取得した資産の初期価額が格納されます。start-expには、時間ディメンションに加えて、非時間ディメンションもあります。

end-exp

資産の期末価額が格納された数式。end-exp式は、start-expと同じディメンションでディメンション化する必要があります。end-expには、時間ディメンションの値ごとに、その期間に取得した資産の最終(または残存)価額が格納されます。start-expのそれぞれの値には、これに対応するend-exp値が必要です。たとえば、1996年に取得した資産の残存価額が$200であった場合、1996年のend-expの値は$200になります。

n

資産の減価償却期間の期間数が格納されるINTEGER式。n式には、start-expの任意の非時間ディメンションを格納できますが、時間ディメンションは格納できません。

STATUS

DEPRDECLが減価償却費を計算する際に、現行のステータス・リスト(つまり現在ステータスにあり、現行のステータスの順序に並んでいるディメンション値のみ)を使用することを指定します。デフォルトでは、デフォルトのステータス・リストが使用されます。

decline-factor

減価償却費の計算に使用するために定率を指定する数式。decline-factor式には、start-expの任意の非時間ディメンションを格納できますが、時間ディメンションは格納できません。

係数が2の場合は、定率が2倍であることを示します。デフォルト値は2です。

FULL

(デフォルト)ある期間の減価償却費全額を、資産の取得期間に計上することを指定します。一連の全資産に対する全額を計上します。

HALF

ある期間の減価償却費の半額を、資産の取得期間に計上することを指定します。一連の全資産に対する半額を計上します。取得した期間に計上される減価償却費の一部としてHALFを指定すると、各期間にHALF係数が適用されます。各期間の全減価償却の半分は次の期間にロールされ、後半の減価償却は期間n + 1に実施されます。HALFは、ある期間の下半期に資産を取得した場合などに使用します。

portion-exp

一定の資産については全額を計上し、それ以外の資産については半額を計上する場合は、start-expの任意の非時間ディメンションによってディメンション化されるportion-exp式を指定できます。portion-exp式は、FULLまたはHALFの値を指定したテキスト式にする必要があります。

time-dimension

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で使用される計算方法」を参照)。DEPRDECLSWでは、最初は定率法が使用され、時系列における次のいずれかの時点で定額法に切り替わります。

- 残りの期間全体にわたる減価償却を定額法にした場合、同じ期間の減価償却を定率法にした場合より減価償却額が上回る最初の期間(デフォルト)

- switch-period引数で指定した期間

このバリエーションの定率法は、最も一般的に使用されている形式の減価償却の定率法です。

戻り値

DECIMAL。start-expのすべてのディメンションによってディメンション化されます。

構文

DEPRDECLSW(start-exp end-exp n [STATUS]

[decline-factor [{FULL|HALF| portion-exp}  [switch-period [time-dimension]]]])

パラメータ

start-exp

資産の期首価額が格納された数式。start-exp式は、時間ディメンションによってディメンション化する必要があります。start-expには、時間ディメンションの値ごとに、その期間に取得した資産の初期価額が格納されます。start-expには、時間ディメンションに加えて、非時間ディメンションもあります。

end-exp

資産の期末価額が格納された数式。end-exp式は、start-expと同じディメンションでディメンション化する必要があります。end-expには、時間ディメンションの値ごとに、その期間に取得した資産の最終(または残存)価額が格納されます。start-expのそれぞれの値には、これに対応するend-exp値が必要です。たとえば、1990年に取得した資産の残存価額が$200であった場合、1990年のend-expの値は$200になります。

n

資産の減価償却期間の期間数が格納されるINTEGER式。n式には、start-expの任意の非時間ディメンションを格納できますが、時間ディメンションは格納できません。

STATUS

DEPRDECLSWが減価償却費を計算する際に、現行のステータス・リスト(つまり現在ステータスにあり、現行のステータスの順序に並んでいるディメンション値のみ)を使用することを指定します。デフォルトでは、デフォルトのステータス・リストが使用されます。

decline-factor

減価償却費の計算に使用するために定率を指定する数式。decline-factor式には、start-expの任意の非時間ディメンションを格納できますが、時間ディメンションは格納できません。

係数が2の場合は、定率が2倍であることを示します。デフォルトは2です。

FULL

(デフォルト)ある期間の減価償却費全額を、資産の取得期間に計上することを指定します。一連の全資産に対する全額を計上します。この引数はオプションですが、この引数を指定するときは、先行するオプション引数も指定する必要があります。

HALF

ある期間の減価償却費の半額を、資産の取得期間に計上することを指定します。一連の全資産に対する半額を計上します。HALFは、ある期間の下半期に資産を取得した場合などに使用します。取得した期間に計上される減価償却費の一部としてHALFを指定すると、各期間にHALF係数が適用されます。各期間の全減価償却の半分は次の期間にロールされ、後半の減価償却は期間n + 1に実施されます。この引数はオプションですが、この引数を指定するときは、先行するオプション引数も指定する必要があります。

portion-exp

一定の資産については全額を計上し、それ以外の資産については半額を計上する場合は、start-expの任意の非時間ディメンションによってディメンション化されるportion-exp式を指定できます。portion-exp式は、FULLまたはHALFの値を指定したテキスト式にする必要があります。この引数はオプションですが、この引数を指定するときは、先行するオプション引数も指定する必要があります。

switch-period

計算を定額法に切り替える期間を示すINTEGER式。この引数はオプションですが、この引数を指定するときは、先行するオプション引数も指定する必要があります。

一般的な会計慣行では、残りの期間全体にわたる減価償却を定額法にした場合、同じ期間の減価償却を定率法にした場合より減価償却額が上回る最初の期間中に定額法に切り替えます。この動作は、switch-period引数を指定しないことで指定できます。

switch-period引数を指定しなかったとき、あるいはこの引数の値がNAまたは0のときは、残りの期間全体にわたる減価償却を定額法にした場合、同じ期間の減価償却を定率法にした場合より減価償却額が上回る最初の期間中に、計算方法が定率法から定額法に切り替わります。この場合、DEPRDECLSWファンクションの動作はDEPRDECLファンクションの動作と変わりません。

様々な資産に対して異なる切替え期間を指定する場合は、start-expの任意の非時間ディメンションでディメンション化される式を指定できます。

time-dimension

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は、指定した資産の耐用年数に基づいて資産を定額法で減価償却します(「DEPRSLの計算方法」を参照)。期首価額と期末価額は、各期間に取得した資産に対して指定します。

戻り値

DECIMAL。start-expのすべてのディメンションによってディメンション化されます。

構文

DEPRSL(start-exp end-exp n [STATUS] [{FULL|HALF| portion-exp}  [time-dimension]])

パラメータ

start-exp

資産の期首価額が格納された数式。start-exp式は、時間ディメンションによってディメンション化する必要があります。start-expには、時間ディメンションの値ごとに、その期間に取得した資産の初期価額が格納されます。start-expには、時間ディメンションに加えて、非時間ディメンションもあります。

end-exp

資産の期末価額が格納された数式。end-exp式は、start-expと同じディメンションでディメンション化する必要があります。end-expには、時間ディメンションの値ごとに、その期間に取得した資産の最終(または残存)価額が格納されます。start-expのそれぞれの値には、これに対応するend-exp値が必要です。たとえば、1995年に取得した資産の残存価額が$200であった場合、1995年のend-expの値は$200になります。

n

資産の減価償却の有効期間が格納されたINTEGER式。n式には、start-expの任意の非時間ディメンションを格納できますが、時間ディメンションは格納できません。

STATUS

DEPRSLが減価償却費を計算する際に、現行のステータス・リスト(つまり現在ステータスにあり、現行のステータスの順序に並んでいるディメンション値のみ)を使用することを指定します。デフォルトでは、デフォルトのステータス・リストが使用されます。

FULL

(デフォルト)ある期間の減価償却費全額を、資産の取得期間に計上することを指定します。一連の全資産に対する全額を計上します。

HALF

ある期間の減価償却費の半額を、資産の取得期間に計上することを指定します。一連の全資産に対する半額を計上します。取得した期間に計上される減価償却費の一部としてHALFを指定すると、各期間にHALF係数が適用されます。各期間の減価償却費総額の半分は次の期間にロールされ、後半の減価償却は期間n + 1に実施されます。HALFは、ある期間の下半期に資産を取得した場合などに使用します。

portion-exp

一定の資産については全額を計上し、それ以外の資産については半額を計上する場合は、start-expの任意の非時間ディメンションによってディメンション化されるportion-exp式を指定できます。portion-exp式は、FULLまたはHALFの値を指定したテキスト式にする必要があります。

time-dimension

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は、指定した資産の耐用年数に基づいて資産を級数法で減価償却します(「DEPRSOYDで使用される計算方法」を参照)。期首価額と期末価額は、各期間に取得した資産に対して指定します。

戻り値

DECIMAL。start-expのすべてのディメンションによってディメンション化されます。

構文

DEPRSOYD(start-exp end-exp n [STATUS] [{FULL|HALF| portion-exp} [time-dimension]])

パラメータ

start-exp

資産の期首価額が格納された数式。start-exp式は、時間ディメンションによってディメンション化する必要があります。start-expには、時間ディメンションの値ごとに、その期間に取得した資産の初期価額が格納されます。start-expには、時間ディメンションに加えて、非時間ディメンションもあります。

end-exp

資産の期末価額が格納された数式。end-exp式は、start-expと同じディメンションでディメンション化する必要があります。end-expには、時間ディメンションの値ごとに、その期間に取得した資産の最終(または残存)価額が格納されます。start-expのそれぞれの値には、これに対応するend-exp値が必要です。たとえば、1995年に取得した資産の残存価額が$200であった場合、1995年のend-expの値は$200になります。

n

資産の減価償却の有効期間が格納されたINTEGER式。n式には、start-expの任意の非時間ディメンションを格納できますが、時間ディメンションは格納できません。

STATUS

DEPRSOYDが減価償却費を計算する際に、現行のステータス・リスト(つまり現在ステータスにあり、現行のステータスの順序に並んでいるディメンション値のみ)を使用することを指定します。デフォルトでは、デフォルトのステータス・リストが使用されます。

FULL

(デフォルト)ある期間の減価償却費全額を、資産の取得期間に計上することを指定します。一連の全資産に対する全額を計上します。

HALF

ある期間の減価償却費の半額を、資産の取得期間に計上することを指定します。一連の全資産に対する半額を計上します。取得した期間に計上される減価償却費の一部としてHALFを指定すると、各期間にHALF係数が適用されます。各期間の減価償却費総額の半分は次の期間にロールされ、後半の減価償却費は期間n + 1に償却されます。HALFは、ある期間の下半期に資産を取得した場合などに使用します。

portion-exp

一定の資産については全額を計上し、それ以外の資産については半額を計上する場合は、start-expの任意の非時間ディメンションによってディメンション化されるportion-exp式を指定できます。portion-exp式は、FULLまたはHALFの値を指定したテキスト式にする必要があります。

time-dimension

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

ENDDATEファンクションは、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションでディメンション化された式に対し、式が非NA値を持つディメンション・ステータスの最後の期間の最終日を返します。たとえば、式がMONTH型のディメンションでディメンション化され、式が非NA値を持つ最後のディメンション値がDEC98である場合、ENDDATEを実行すると、日付December 31, 1998が返されます。

戻り値

日付のみまたはテキスト

構文

ENDDATE(expression)

パラメータ

expression

式(expression)には、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションを1つのみ含める必要があります。式のすべての値がNA値の場合、ENDDATEファンクションの戻り値はNAになります。

例

例7-75 最終日の検索

次の文を実行すると、units変数のディメンションの値が制限され、次に非NA値と関連付けられている最終日が現行の出力ファイルに送られます。

LIMIT month TO ALL
LIMIT product TO 'Tents'
LIMIT district TO 'Chicago'
SHOW ENDDATE(units)

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

31DEC96

ENDOF

ENDOFファンクションは、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションでディメンション化された式に対し、そのディメンションの現行のステータス・リストでの先頭の期間の最終日を返します。

ENDOFが特に有用なのは、ディメンションにデフォルトとは異なるフェーズがある場合や、期間が数週間または数年間で構成されている場合です。たとえば、ディメンションの期間が4週間である場合、ENDOFファンクションを使用すると、特定の4週間という期間の最終日を特定できます。

戻り値

日付のみまたはテキスト

構文

ENDOF(dwmqy-dimension)

パラメータ

dwmqy-dimension

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

EVERYファンクションは、ブール式のすべての値がTRUEの場合にYESを返し、ブール式のいずれかの値がFALSEの場合にNOを返すファンクションです。

戻り値

BOOLEAN

構文

EVERY(boolean-expression [CACHE] [dimension...])

パラメータ

boolean-expression

評価の対象となる値を持つブール式。

CACHE

内部動作が若干変更されます。このキーワードは、元のパフォーマンスが非常に遅い場合にのみ指定してください。

dimension

結果のディメンションの名前。または、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ファンクションは、アタッチされたワークスペース内でオブジェクトが定義されているかどうかを判別するファンクションです。EXISTSファンクションは、オブジェクトを使用する前にその定義が存在するかどうかをプログラムの内部で調べるときに役立ちます。

戻り値

BOOLEAN

構文

EXISTS(name-expression)

パラメータ

name-expression

調べる名前を表すテキスト式。

使用上の注意

複数の名前の指定

name-expressionに複数のオブジェクト名を含めると、name-expressionで指定したすべてのオブジェクトがアタッチされたワークスペースに存在する場合でも、EXISTSからはNOが返されます。

例

例7-79 EXISTSの使用方法

この例は、変数actualがいずれかのアタッチされたワークスペース内で定義されているかどうかを調べます。次の文

SHOW EXISTS('actual')

によって、次の結果が生成されます。

YES

EXP

EXPファンクションは、eのn乗(eは2.71828183...に等しい)を返すファンクションです。

戻り値

NUMBER

構文

EXP (n)

パラメータ

n

eの累乗。

例

例7-80 式の累乗

次の例では、eの4乗が返されます。

SHOW EXP(4)

54.59815

EVERSION

EVERSIONファンクションは、Oracle OLAPの内部ビルド番号を表すテキスト値を返すファンクションです。

戻り値

TEXT

構文

EVERSION

使用上の注意

EVERSIONとメジャー・リリース

EVERSIONファンクションの出力に示されるビルド番号は、Oracle Databaseのリリース番号ではありません。EVERSIONの値がデータベースのメジャー・リリースに伴って変わることはありません。

例

例7-81 リリース番号の取得

次の文を実行すると、Oracle OLAPのビルド番号を示すテキスト出力が生成されます。

SHOW EVERSION

この文によって生成される出力は次のようになります。

Oracle OLAP Build 80020

EXTBYTES

EXTBYTESファンクションは、テキスト式の一部を抽出します。

戻り値

TEXT

構文

EXTBYTES(text-expression [start [length]])

パラメータ

text-expression

一部が抽出されるTEXT式。text-expressionが複数行のTEXT値である場合、改行はEXTBYTESの戻り値でも維持されます。

start

抽出を開始するバイト位置を表すINTEGER。text-expressionの最初のバイト位置は1です。この引数を省略した場合、EXTBYTESは最初のバイトから開始します。

length

抽出するバイト数を表すINTEGER。lengthを指定しない場合、またはtext-expressionのstartから最後までのバイト数を超える場合、text-expressionのstartから最後までが抽出されます。

例

例7-82 バイトによるテキスト文字の抽出

この例は、TEXT値'hellotherejoe'からテキストの一部を抽出する方法を示します。

- 次の文

SHOW EXTBYTES('hellotherejoe', 6, 5)

によって、次の出力が生成されます。

there

- 次の文

SHOW EXTBYTES('hellotherejoe', 11)

によって、次の出力が生成されます。

joe

EXTCHARS

EXTCHARSファンクションは、テキスト式の一部を抽出します。

ヒント:
マルチバイト・キャラクタ・セットを使用している場合、EXTCHARSファンクションのかわりにEXTBYTESファンクションを使用できます。

戻り値

TEXTまたはNTEXT

構文

EXTCHARS(text-expression [start [length]])

パラメータ

text-expression

一部が抽出されるTEXTまたはNTEXT式。text-expressionが複数行のテキスト値である場合、改行はEXTCHARSの戻り値でも維持されます。

start

抽出を開始する文字位置を表すINTEGER。text-expressionの最初の文字位置は1です。この引数を省略した場合、EXTCHARSは最初の文字から開始します。

length

抽出する文字数を表すINTEGER。lengthを指定しない場合、またはtext-expressionのstartから最後までの文字数を超える場合、text-expressionのstartから最後までが抽出されます。

例

例7-83 テキスト文字の抽出

この例は、TEXT値'hellotherejoe'からテキストの一部を抽出する方法を示します。

- 次の文

SHOW EXTCHARS('hellotherejoe', 6, 5)

によって、次の出力が生成されます。

there

- 次の文

SHOW EXTCHARS('hellotherejoe', 11)

によって、次の出力が生成されます。

joe

EXTCOLS

EXTCOLSファンクションは、複数行のテキスト値の各行から指定した列を抽出します。このファンクションは、抽出された列のみを含む複数行のテキスト値を返します。列は、複数行のテキスト値の各行における文字位置を示します。各行の最初の文字は列1であり、2番目の文字は列2です(以降同様)。

戻り値

TEXTまたはNTEXT

空の行がある場合でも、EXTCOLSは常にtext-expressionと同じ行数のテキスト値を返します。

構文

EXTCOLS(text-expression [start [numcols]])

パラメータ

text-expression

指定した列の抽出元のTEXTまたはNTEXT式。text-expressionが複数行のテキスト値である場合、その各行から指定した列の文字が抽出されます。

start

抽出を開始する列位置を表すINTEGER(1から32767)。text-expressionの各行における最初の文字の列位置は1です。text expressionの特定の行にある最後の文字よりも右側にくる開始列を指定した場合、戻り値の対応する行は空です。

numcols

抽出する列数を表すINTEGER。numcolsを指定しない場合、EXTCOLSは各行の最初の列から最後までのすべての文字を抽出します。text expressionの特定の行における開始位置に続く文字数を超える長さを指定した場合、戻り値の対応する行には存在する文字のみが含まれます。EXTCOLSは、欠落した列を埋めるための空白をその行の最後に返しません。

例

例7-84 テキスト列の抽出

この例では、citylistの各行から2番目の列から始まる4列を抽出します。

DEFINE citylist VARIABLE TEXT
citylist = 'Boston\nHouston\nChicago'

- 次の文

SHOW citylist

によって、次の出力が生成されます。

Boston
Houston
Chicago

- 次の文

SHOW EXTCOLS(citylist 2 4)

によって、次の出力が生成されます。

osto
oust
hica

EXTLINES

EXTLINESファンクションは、複数行のテキスト式から行を抽出します。

戻り値

TEXTまたはNTEXT

構文

EXTLINES(text-expression [start [numlines]])

パラメータ

text-expression

1行以上の行の値の抽出元である複数行のTEXTまたはNTEXT式。

start

抽出を開始する行番号を表すINTEGER。text-expressionの最初の行の位置は1です。この引数を省略した場合、EXTLINESは行1から開始します。

numlines

抽出する行数を表すINTEGER。numlinesを指定しない場合、またはtext-expressionのstartから最後までの行数を超える数を指定した場合、text-expressionのstartから最後までのすべての行がコピーされます。

例

例7-85 1つのテキスト行の抽出

この例は、mktglistという変数の複数行のテキスト値から2行目を抽出する方法を示します。mktglist変数の値は、次のとおりです。

Salespeople
Products
Services

次の文

SHOW EXTLINES(mktglist 2 1)

によって、次の出力が生成されます。

Products

EXTRACT

EXTRACTファンクションは、日時値または期間値の式から、指定した日時の値を抽出して返します。このファンクションは、非常に大きな変数内の日時値を操作するときに利用すると便利です。

戻り値

戻り値は次のように場合によって異なります。

- タイムゾーン値を持つ日時から抽出する場合は、UTC形式の値が返されます。

- TIMEZONE_REGIONまたはTIMEZONE_ABBR(省略形)を抽出する場合は、適切なタイムゾーン名または省略形であるテキスト文字列が返されます。

- その他の値を抽出する場合は、グレゴリオ暦の値が返されます。

- 指定した値にあいまいさがある場合は、NAが返されます。

構文

EXTRACT(time |timezone_hour_or_nimute |timezone_regn_or_abbr FROM datetime_exp| interval_exp )

パラメータ

time

YEAR、MONTH、DAY、HOUR、MINUTEまたはSECONDのいずれかのキーワードを使用して、ファンクションによって返される時刻要素を指定します。

timezone_hour_or_minute

TIMEZONE_HOURまたはTIMEZONE_MINUTEのいずれかのキーワードを使用して、TIMESTAMP_TZ式の時間または分の部分が返されるように指定します。

timezone_regn_or_abbr

TIMEZONE_REGIONまたはTIMEZONE_ABBRのいずれかのキーワードを使用して、地域名またはその省略形のいずれかの文字列が返されるように指定します。

datetime_exp

DATETIME、TIMESTAMP、TIMESTAMP_TZまたはTIMESTAMP_LTZ式。これらの式の指定方法は、「日時式」を参照してください。

interval_exp

DSINTERVALまたはYMINTERVAL式。これらの式の指定方法は、「期間式」を参照してください。

使用上の注意

抽出する値は、適切なdatetime_expまたはinterval_expの値である必要があります。たとえば、DATETIME値からは、YEAR、MONTHおよびDAYのみを抽出できます。同様に、TIMESTAMP_TZデータ型からは、TIMEZONE_HOURおよびTIMEZONE_MINUTEのみを抽出できます。

例

例7-86 タイムスタンプからの時間の抽出

DEFINE mytimestamptz VARIABLE TIMESTAMP_TZ
REPORT mytimestamptz

MYTIMESTAMPTZ
------------------------------
26-MAR-06 12.00.00 AM -04:00

SHOW EXTRACT (TIMEZONE_HOUR FROM mytimestamptz)
-4.00

FCOPEN

FCOPENファンクションは、予測コンテキストを作成してそのコンテキストへのハンドルを返します。

FCOPENファンクションは、「予測プログラム」に示すように他のOLAP DML文と組み合せて使用する必要があります。

戻り値

INTEGER

構文

FCOPEN(text-expression [prototype-handle])

パラメータ

text-expression

予測コンテキストの名前。

prototype-handle

FCOPENファンクションを使用して前に作成した異なる予測コンテキストへのハンドルであるINTEGER式。Oracle OLAPは、このパラメータで指定される予測コンテキストと同じオプションで新しい予測コンテキストを初期化します。(予測コンテキストの特性を指定するオプションの説明は、FCSETコマンドを参照してください。)

例

予測プログラムの例は、例9-119「予測プログラム」を参照してください。

FCQUERY

FCQUERYファンクションは、FCEXECコマンドの実行によって作成された予測の結果を問い合せます。

FCQUERYファンクションは、「予測プログラム」に示すように他のOLAP DML文と組み合せて使用する必要があります。

戻り値

戻り値は、このページの表に示すように、使用するオプションによって異なります。

構文

FCQUERY(HANDLELIST|handle-expression option -

[TRIAL trial-num] [CYCLE cycle-num])

パラメータ

HANDLELIST

HANDLELISTキーワードを指定すると、FCQUERYファンクションは、現在開かれている予測コンテキストへのハンドルのリストである複数行のテキスト式を返します。

handle-expression

これから問い合せる予測コンテキスト、およびFCOPENファンクションを使用して前に開いた予測コンテキストへのハンドルであるINTEGER式。

option

取得する次のような特定の情報。

- 予測全体に指定されているオプションに関する情報を取得する場合、TRIALキーワードは使用しません。この場合のoptionは、FCSETコマンドを使用して指定可能なオプション、および表7-7「予測全体に指定可能なオプション」に示すオプションです。

表7-7 予測全体に指定可能なオプション

キーワード

戻り値

説明

HANDLEID

TEXT

FCOPENコマンドを使用して予測コンテキストが開かれたときに値が指定された場合の予測コンテキストの名前。または、そのときに名前が指定されなかった場合はNA。

TRIALSRUN

INTEGER

データを使用できる試行の数。または、試行が実行されていない場合はNA。

- 特定の試行に関する情報を取得する場合、TRIAL trial-num句を使用します。この場合のoptionは、表7-8「個別の試行に指定可能なオプション」に示すオプションです。

表7-8 個別の試行に指定可能なオプション

オプション

戻り値

説明

ALLOCLAST

BOOLEAN

過調整の可能性を最後のサイクルの予測ではなく割当てによって削減するかどうかを示す。

ALPHA

DOUBLE

予測の試行に対するアルファの値。アルファは、単純指数平滑法、二重指数平滑法およびHolt-Winters予測法に使用されるレベルまたはベースラインのパラメータ。

BETA

DOUBLE

予測の試行に対するベータの値。ベータは傾向の予測を制御する傾向パラメータ。ベータは二重指数平滑法およびHolt-Winters予測法に使用される。

COMPSMOOTH

BOOLEAN

中央値平滑データ系列に対して最適化を行うかどうかを示す。

CYCDECAY

DOUBLE

予測の試行に対する周期減衰パラメータの値。周期減衰は、Oracle OLAPが線形回帰および非線形回帰を行う際にベースライン・アクティビティからのずれをどこまで考慮するかに関係する。

GAMMA

DOUBLE

予測の試行に対するガンマの値。ガンマはHolt-Winters予測法に使用される季節パラメータ。

HISTUSED

INTEGER

先行するすべてのNA値を省いた後で実際に使用される履歴期間の数。

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がNOの場合、PERIODICITYはすべてのサイクル長の積を返す。

CYCLE引数を指定せず、FCSET ALLOCLASTがYESの場合、PERIODICITYは、最後の(最小集計)サイクルの長さを省いたすべてのサイクル長の積を返す。

RMSE

DOUBLE

予測の試行に対するルート平均2乗誤差(RMSE)。

SMOOTHING

BOOLEAN

予測の試行に対してOracle OLAPがデータを平滑化したかどうかを示す。YESはデータが平滑化されたことを示し、NOはデータが平滑化されなかったことを示す。

TRANSFORM

TEXT

予測の試行に対してOracle OLAPが使用したデータ・フィルタ。各種のフィルタの説明は、FCSETコマンドのTRANSFORMオプションを参照。

TRENDHOLD

DOUBLE

予測の試行に対する傾向保持パラメータの値。傾向保持パラメータは、二重指数平滑法およびHolt-Winters予測法における傾向の信頼性を示す。

trial-num

情報を取得する試行の番号であるINTEGER式。

cycle-num

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

FILEERRORファンクションは、データ読取り文FILEREADおよびFILEVIEWを使用した入力ファイルからのレコードの処理時に発生した最初のエラーに関する情報を返します。これによって、発生したエラーのタイプとOracle OLAPが読み取ろうとしていたレコードの位置がわかります。引数として指定するキーワードによって、返される情報の種類が決まります。

FILEERRORをコールしてエラーのタイプを確認します。次に、再びFILEERRORをコールしてエラーの原因に関する詳細を取得します。エラーのタイプに関する戻り値は、FILEERRORのキーワードでもあります。FILEERRORがNA以外の値を返した場合、2回目はその戻り値を引数としてFILEERRORをコールします。

FILEERRORの省略形はFILEERRです。

戻り値

指定したキーワードによって異なります。

構文

FILEERROR (TYPE|POSITION|WIDTH|VALUE|DIMENSION)

パラメータ

TYPE

発生したエラーのタイプを指定するテキスト式を返します。エラーのタイプとその意味を、表7-9「FILEERRORによって返されるエラーのタイプ」に示します。

表7-9 FILEERRORによって返されるエラーのタイプ

戻り値

意味

DIMENSION

データ読取り文がディメンションのステータスを設定(暗黙的または明示的なMATCH属性による)しようとしましたが、指定された位置または値が存在しませんでした。

NA

現行レコードの処理でエラーは発生しませんでした。

POSITION

データ読取りプログラムがレコードの無効な位置から読み取ろうとしました。フィールドまたは列がレコードの先頭より前にある場合、またはフィールドがレコードの末尾を超えて拡張される場合、POSITIONエラーが発生することがあります。レコードの末尾を超えるエラーは、バイナリ・データまたはパック・データの場合にのみ発生し、シンボリック(テキスト)データの場合、データ読取り文によって短いレコードが空白文字で埋められます。

VALUE

値を、要求されたデータ型に変換できませんでした。パック・データの場合、レコードに無効な16進数がありました。

WIDTH

データ読取り文が無効なフィールド幅を指定しました。無効な幅は、次のようにデータの形式(シンボリック、パックまたはバイナリ)によって異なります。

- シンボリック形式の場合、1より小さい幅またはNAである幅が無効です。ただし、NAはIDデータに対しては許容されます。

- パック形式の場合、1より小さい幅、8より大きい幅またはNAである幅が無効です。

バイナリ形式の場合、幅に関する要件はデータがINTEGERであるかDECIMAL(浮動小数点)であるかによって異なります。整数データは1、2または4の幅が必要です。小数データは4または8の幅が必要です。

POSITION

エラーが発生したときの列番号(ルール化レコード)またはフィールド番号(構造化レコード)であるINTEGERを返します。

WIDTH

現行フィールド幅であるINTEGERを返します。幅としてNAが指定されていた場合、またはエラーがPOSITIONエラーだった場合、NAが返されます。POSITIONエラーでは、幅が評価される前に処理が停止されます。

VALUE

エラー・タイプがVALUEである場合、変換されなかった値であるテキスト式を返します。パック・データの場合、無効な値が16進エスケープとして示されます。エラー・タイプがDIMENSIONである場合、既存のディメンション値と一致しなかった値を返します。他のエラー・タイプの場合、NAを返します。

DIMENSION

エラー・タイプが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ファンクションは、読取り用に開かれているバイナリ以外のファイルのテキストを返します。FILEGETがそのファイルの末尾に達すると、NAを返します。FILEGETで読み取られるすべてのテキストは、データベース・キャラクタ・セットに変換されます。FILEGETは、データベース・キャラクタ・セットで表せないデータを読み取ることはできません。

戻り値

TEXT

構文

FILEGET(fileunit [LENGTH int-expression])

パラメータ

fileunit

FILEOPENファンクションを事前にコールすることによって読取り用に開かれたファイルに割り当てられるINTEGER値。

LENGTH int-expression

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

FILENEXTファンクションは、レコードをFILEVIEWコマンドによって処理できるようにします。レコードを読み取れた場合にYESを返し、ファイルの末尾に達した場合にNOを返します。

戻り値

BOOLEAN

構文

FILENEXT(fileunit)

パラメータ

fileunit

FILEOPENファンクションを事前にコールすることによって、またはOUTFILEコマンドによって読取り用に開かれたファイルに割り当てられるINTEGER値。

使用上の注意

ファイルの開閉

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

FILEOPENファンクションは、ファイルを開き、それにファイル・ユニット番号(不定のINTEGER)を割り当て、その番号を返します。その後でそのファイルを参照する場合、ファイル名ではなくこのファイル・ユニット番号を使用します。Oracle OLAPがファイルを開くことができない場合、エラーが発生します。

関連項目:
OUTFILE

戻り値

INTEGER

構文

FILEOPEN(file-name {READ|WRITE|APPEND} [BINARY]) [NLS_CHARSET charset-exp]

パラメータ

file-name

開くファイルの名前を指定するテキスト式。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。

注意:
ディレクトリ・オブジェクトはデータベースで定義され、ディレクトリおよびディレクトリ内のファイルへのアクセスを制御します。CDA文を使用して、カレント・ディレクトリ・オブジェクトを特定および指定できます。使用するデータベース・ユーザー名で読取りおよび書込み可能なファイルがあるディレクトリ・オブジェクトへのアクセス権については、Oracle DBAに問い合せてください。

READ

(省略形はR)読取り用としてファイルを開きます。

WRITE

(省略形はW)書込み用としてファイルを開きます。ファイル・アクセスはファイルの先頭から開始されます。したがって、既存のファイルをWRITEモードで開くと、ファイルにデータが書き込まれる前にそのすべての内容が消去されます。

APPEND

書込み用としてファイルを開きます。ファイル・アクセスはファイルの末尾から開始され、既存の内容にデータが追加されます。

BINARY

バイナリ形式のファイル(パック・データまたはバイナリ・データのファイル)を開きます。BINARYを指定すると、Oracle OLAPはファイル内のすべての文字をデータとして認識します。レコードの終端の指定に改行文字を使用しない場合、固定長のレコードとみなされ、レコード長はFILESET(...LSIZE)で設定できます。デフォルトのレコード長は80です。

NLS_CHARSET charset-exp

file-nameによって指定されるファイルからデータを読み取る際にOracle OLAPが使用するキャラクタ・セットを指定します。この引数を省略すると、Oracle OLAPでは、ファイルのデータは、NLS_LANGオプションに記録されているデータベース・キャラクタ・セットを持つものとして処理されます。

使用上の注意

ファイル・ユニットの数

同時に開くことができるファイルの数は、オペレーティング・システムの設定と同じです。

アクセス・モード

アクセス・モード(READ、WRITEまたはAPPEND)は、ファイルに適したものを指定する必要があります。

例

例7-91 プログラムに渡される引数があるFILEOPEN

次のプログラムの行は、プログラム引数として指定された名前のファイルを開き、ファイル・ユニット番号を変数fil.unitに保存します。

fil.unit = FILEOPEN(ARG(1), READ)

例7-92 バイナリ・ファイルのFILEOPEN

次の文は、バイナリ・ファイルを開き、レコード長を設定します。

VARIABLE filenum INTEGER
filenum = FILEOPEN('mydata' READ BINARY)
FILESET filenum LSIZE 132

FILEQUERY

FILEQUERYファンクションは、ファイルに関する情報を返します。FILEQUERYファンクション・コールに指定する属性引数によって、返される情報の種類が決まります。

戻り値

戻り値のデータ型は指定する属性によって異なります。詳細は、表7-10「FILEQUERYによって返されるファイル属性」を参照してください。

構文

FILEQUERY(file-id attrib-arg)

パラメータ

file-id

ファイル・ユニット番号またはファイル名。

- ファイル・ユニット番号は、FILEOPENファンクションを事前にコールすることによって開かれたファイル、またはOUTFILEコマンドによって開かれたファイルに割り当てられる番号です。FILEOPENファンクションの戻り値またはOUTFILEUNITオプションの値を使用できます。

- ファイル名は、移動または名前を変更するファイルの名前を指定するテキスト式です。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。

注意:
ディレクトリ・オブジェクトはデータベースで定義され、ディレクトリおよびディレクトリ内のファイルへのアクセスを制御します。CDA文を使用して、カレント・ディレクトリ・オブジェクトを特定および指定できます。使用するデータベース・ユーザー名で読取りおよび書込み可能なファイルがあるディレクトリ・オブジェクトへのアクセス権については、Oracle DBAに問い合せてください。

ファイル・ユニット番号を指定する必要がある属性と、ファイル名が必要な属性があります。どちらを指定しても構わない属性もあります。詳細は、表7-10「FILEQUERYによって返されるファイル属性」を参照してください。

attrib-arg

ファイルに関して取得する情報の種類を指定します。FILEQUERYの戻り値のデータ型は、指定する属性によって異なります。指定する属性はファイルに対応する必要があり、対応しない場合はエラーが発生します。表7-10「FILEQUERYによって返されるファイル属性」に、attrib-argに有効なキーワードをリストし、各キーワードを説明し、file-id引数にファイル名のファイル・ユニット番号を指定するかどうかを示します。

表7-10 FILEQUERYによって返されるファイル属性

キーワード

戻り値

戻り値のデータ型

file-idパラメータ

APPEND

ファイルが最後に書込み用で開かれている場合はTRUE(つまり、APPENDおよびWRITEの場合はTRUE)。それ以外の場合はFALSE。

BOOLEAN

ファイル・ユニット番号

BMARGIN

下マージンになる空白行の数。

INTEGER

ファイル・ユニット番号

CHANGED

ファイルのアーカイブ・ビットが設定されている場合はTRUE。設定されていない場合はFALSE。

BOOLEAN

ファイル・ユニット番号またはファイル名

EOF

ファイルの末尾に達した場合はTRUE。達していない場合はFALSE。

BOOLEAN

ファイル・ユニット番号

EXISTS

ファイルが存在する場合はTRUE。存在しない場合はFALSE。

BOOLEAN

ファイル・ユニット番号またはファイル名

FILENAME

ファイル・ユニットに関連付けられたファイル名。

TEXT

ファイル・ユニット番号

LINENUM

現行の行数。PAGINGがオンの場合は改ページのたびにリセットされ、PAGINGがオフの場合は増え続ける。ファイルが現在READモードで開かれている場合、現行レコード数を返す。

INTEGER

ファイル・ユニット番号

LINESLEFT

ページの残りの行数。

INTEGER

ファイル・ユニット番号

LSIZE

書込み用に開かれているファイルの場合、標準のOracle OLAPページ・ヘッダーの行の長さ。(STDHDRプログラムを参照。)読取り用に開かれているファイル・ユニットの場合、バイナリ入力ファイルのレコード長を示す。

INTEGER

ファイル・ユニット番号

NLS_CHARSET

ファイル・ユニットに使用されているキャラクタ・セット。詳細は、FILEOPENファンクションを参照。

TEXT

ファイル・ユニット番号

NUMBYTES

ファイルのサイズ(バイト単位)。

INTEGER

ファイル・ユニット番号またはファイル名

ORIGIN

作成されたファイルがあるコンピュータのタイプ。ORIGIN属性が関連するのは読取り用に開かれたファイルのみで、FILESET文を発行するときに設定される。

TEXT

ファイル・ユニット番号

PAGENUM

現行のページ数。「ページング属性」を参照。

INTEGER

ファイル・ユニット番号

PAGEPRG

出力がページングされる際にヘッダーを生成するOracle OLAPプログラムまたは文。「ページング属性」を参照。

TEXT

ファイル・ユニット番号

PAGESIZE

各ページの行数。「ページング属性」を参照。

INTEGER

ファイル・ユニット番号

PAGING

出力がページで書式化される場合はTRUE、書式化されない場合はFALSE。「ページング属性」を参照。

BOOLEAN

ファイル・ユニット番号

PAUSEATPAGEEND

各ページの終わりでOracle OLAPが一時停止する場合はTRUE、一時停止しない場合はFALSE。「ページング属性」を参照。

BOOLEAN

ファイル・ユニット番号

R[EAD]

読取り用にファイルが開かれている場合はTRUE。それ以外の場合はFALSE。

BOOLEAN

ファイル・ユニット番号

RO

ファイルの読取り専用属性が設定されている場合はTRUE。設定されていない場合はFALSE。

BOOLEAN

ファイル・ユニット番号またはファイル名

TABEXPAND

ファイルがFILEGETまたはFILEREADによって読み取られるときにタブ文字が拡張される場合はTRUE、拡張されない場合はFALSE。「タブの処理」を参照。

BOOLEAN

ファイル・ユニット番号またはファイル名

TMARGIN

上部余白になる空白行の数。

INTEGER

ファイル・ユニット番号

UNIT

指定されたファイル名のファイル・ユニット。

INTEGER

ファイル名

W[RITE]

書込み用にファイルが開かれている場合はTRUE。それ以外の場合はFALSE。

BOOLEAN

ファイル・ユニット番号

使用上の注意

タブの処理

ソース・ファイルのタブ文字が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

FILTERLINESファンクションは、作成したフィルタ式を複数行のテキスト式の各行に適用します。

戻り値

TEXTまたはNTEXT

このファンクションでは、TEXT値とNTEXT値を引数として使用できます。戻り値のデータ型は、引数として指定する値のデータ型によって次のように異なります。

- すべての引数がTEXT値である場合、戻り値はTEXTです。

- すべての引数がNTEXT値である場合、戻り値はNTEXTです。

- 引数にTEXTとNTEXTの両方の値が存在する場合は、すべてのTEXT値がNTEXT値に変換されてからファンクションの演算が実行され、戻り値はNTEXTになります。

構文

FILTERLINES(source-expression filter-expression)

パラメータ

source-expression

filter-expressionに従って各行が変更される複数行のテキスト式。

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ファンクションは、テキスト式内のバイトにおける、指定したグループの先頭のバイト位置を返します。

ヒント:
シングルバイト・キャラクタ・セットを使用している場合、FINDBYTESファンクションのかわりにFINDCHARSファンクションを使用できます。

戻り値

INTEGER

構文

FINDBYTES(text-expression, bytes [starting-pos [LINENUM]])

パラメータ

text-expression

指定するバイトの検索元のTEXT式。text-expressionの値は複数行も可能です。その場合、FINDBYTESは指定するバイトをすべての行で検索します。大文字および小文字の区別も含めて完全一致する必要があります。

ヒント:
NTEXT値に対してこのファンクションを使用する必要がある場合、CONVERTまたはTO_CHARファンクションを使用してNTEXT値をTEXTに変換します。

bytes

検索対象のバイトのグループ。bytesが複数行の値である場合、FINDBYTESは最初の行以外をすべて無視します。

text-expressionでbytesが見つからない場合、FINDBYTESはゼロを返します。バイトのグループが複数回出現する場合、FINDBYTESは最初に出現する位置を返します。

starting-pos

text-expressionで検索を開始するバイト位置を指定するINTEGER式。デフォルトはtext-expressionの位置1(最初のバイト)です。

LINENUM

指定したテキストの先頭のバイト位置ではなく行数をFINDBYTESが返すことを指定します。

例

例7-95 バイト・グループの開始位置の検索

この例は、リテラルTEXT値hellotherejoeにおいてバイトの様々なグループの開始位置を検索する方法を示します。

次の文

SHOW FINDBYTES('hellotherejoe', 'joe')

によって、次の出力が生成されます。

11

次の文

SHOW FINDBYTES('hellotherejoe', 'al')

によって、次の出力が生成されます。

0

FINDCHARS

FINDCHARSファンクションは、テキスト式内の文字における、指定したグループの先頭の文字位置を返します。

ヒント:
マルチバイト・キャラクタ・セットを使用している場合、FINDCHARSファンクションのかわりにFINDBYTESファンクションを使用できます。

戻り値

INTEGER

構文

FINDCHARS(text-expression, characters [starting-pos [LINENUM]])

パラメータ

text-expression

指定する文字の検索元のテキスト式。text-expressionは複数行の値も可能です。その場合、FINDCHARSは指定した文字をすべての行で検索します。大文字および小文字の区別も含めて完全一致する必要があります。

FINDCHARSでは、引数としてTEXT値およびNTEXT値を使用できます。1つの引数のみがNTEXTである場合、FINDCHARSはファンクション操作を実行する前に、他の引数をNTEXTに自動的に変換します。

characters

検索対象の文字のグループ。charactersが複数行の値である場合、FINDCHARSは最初の行以外をすべて無視します。

text-expressionでcharactersが見つからない場合、FINDCHARSはゼロを返します。文字のグループが複数回出現する場合、FINDCHARSは最初に出現する位置を返します。

starting-pos

text-expで検索を開始する文字位置を指定するINTEGER式。デフォルトはtext-expの位置1(最初の文字)です。

LINENUM

指定したテキストの先頭の文字位置ではなく行数をFINDCHARSが返すことを指定します。

例

例7-96 文字グループの開始位置の検索

この例は、リテラルTEXT値hellotherejoeにおいて文字の様々なグループの開始位置を検索する方法を示します。

次の文

SHOW FINDCHARS('hellotherejoe', 'joe')

によって、次の出力が生成されます。

11

次の文

SHOW FINDCHARS('hellotherejoe', 'al')

によって、次の出力が生成されます。

0

FINDLINES

FINDLINESファンクションは、複数行のテキスト式における1行以上の位置を判別します。

戻り値

INTEGER

構文

FINDLINES(text-expression, lines)

パラメータ

text-expression

テキスト式の値内で、特定の行または行のグループの位置を特定します。FINDLINESは指定する行をtext-expressionで検索します。大文字および小文字の区別も含めて完全一致する必要があります。また、複数行を指定した場合、FINDLINESでは、指定したすべての行がtext-expression内の単一の連続ブロックとして検索されます。すべての行がtext-expressionで出現するが、連続ブロックではない場合、FINDLINESは見つからないものとして0(ゼロ)を返します。

FINDLINESでは、引数としてTEXT値およびNTEXT値を使用できます。1つの引数のみがNTEXTである場合、FINDLINESはファンクション操作を実行する前に、他の引数をNTEXTに自動的に変換します。

text-expressionの値がNAである場合、FINDLINESはNAを返すことに注意してください。

lines

検索する行を指定するテキスト式。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ファンクションは、指定の期間数で完済する一連の固定金利分割払い融資に関する返済額の金利部分を計算します。期間ごとに、その期間に受けた融資額および返済期間にわたって融資に適用される単一の金利を指定します。

FINTSCHEDは、所定期間の結果を、その期間で受けた各融資または未払いの各融資に対する金利支払い額の合計として計算します。

戻り値

DECIMAL

FINTSCHEDファンクションによって返される結果は、loans, rates, nのすべてのディメンションおよびtime-dimension引数として使用されるディメンションの結合によってディメンション化されます。

構文

FINTSCHED(loans, rates, n, [time-dimension] [STATUS])

パラメータ

loans

初期融資額を含む数式。loansに時間ディメンションがない場合、またはloansが複数の時間ディメンションによってディメンション化されている場合、time-dimension引数が必要です。

rates

loansに対する金利を含む数式。ratesがディメンション化された変数の場合、この変数は、異なる時間ディメンションなどの任意のディメンションによってディメンション化できます。ratesが時間ディメンションによってディメンション化される場合、その期間に受けた融資額に適用される各期間の金利を指定します。融資を受ける期間の金利は、その融資の返済期間を通じて適用されます。金利は小数値で表し、たとえば、5%は.05として表します。

n

一連の融資の全額返済に必要な支払い回数を指定する数式。n式にはディメンション化変数を指定できますが、この式を時間ディメンション引数でディメンション化することはできません。loansがディメンション化される時間ディメンションの各期間に、またはtime-dimension引数で指定されるディメンションの各期間に、1回の支払いが行われます。たとえば、loansがMONTHによってディメンション化される場合、毎月1回支払いが行われます。

time-dimension

金利支払い額が計算される基準になるディメンションの名前。時間ディメンションがDAY、WEEK、MONTH、QUARTERまたはYEARの型である場合、loansに複数の時間ディメンションがないかぎり、time-dimension引数はオプションです。

STATUS

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の場合の結果

非NA

NA

エラー

エラー

NA

非NA

金利の値

(NAの融資の値はゼロとして処理される)

影響を受ける期間に対してNA

NA

NA

影響を受ける期間に対してNA

影響を受ける期間に対してNA

たとえば、融資額の式と対応する金利の式の両方の値が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年に受けた融資の元金の支払い残高になります。

FLOOR

FLOORファンクションは、指定する数値以下の最大整数を返します。

戻り値

NUMBER

構文

FLOOR(n)

パラメータ

n

数値。

例

例7-99 ある数値以下の最大整数の表示

次の文は、FLOORファンクションによって返される結果を示します。

- 次のSHOW FLOOR文は、次の行に示す結果を生成します。

SHOW FLOOR(15.7)

15

- 次のSHOW FLOOR文は、次の行に示す結果を生成します。

SHOW FLOOR(4)

4

- 次のSHOW FLOOR文は、次の行に示す結果を生成します。

SHOW FLOOR(-6.457)

-7

FPMTSCHED

FPMTSCHEDファンクションは、一連の固定金利分割払い融資を指定の期間数で完済するための返済スケジュール(元金と金利)を計算します。期間ごとに、その期間に受けた融資額および返済期間にわたって融資に適用される単一の金利を指定します。

FPMTSCHEDは、所定期間の支払い額を、その期間で受けた各融資または未払いの各融資に対する元金および金利支払い額の合計として計算します。

戻り値

DECIMAL

FPMTSCHEDファンクションによって返される結果は、loansとratesのすべてのディメンション、およびtime-dimension引数として使用されるディメンションの結合によってディメンション化されます。

構文

FPMTSCHED(loans, rates, n, [time-dimension] [STATUS])

パラメータ

loans

初期融資額を含む数式。loansに時間ディメンションがない場合、またはloansが複数の時間ディメンションによってディメンション化されている場合、time-dimension引数が必要です。

rates

loansに対する金利を含む数式。ratesがディメンション化された変数の場合、この変数は、異なる時間ディメンションなどの任意のディメンションによってディメンション化できます。ratesが時間ディメンションによってディメンション化される場合、その期間に受けた融資額に適用される各期間の金利を指定します。融資を受ける期間の金利は、その融資の返済期間を通じて適用されます。金利は小数値で表し、たとえば、5%は.05として表します。

n

一連の融資の全額返済に必要な支払い回数を指定する数式。n式はディメンション化できますが、時間ディメンション引数でディメンション化することはできません。loansがディメンション化される時間ディメンションの各期間に、またはtime-dimension引数で指定されるディメンションの各期間に、1回の支払いが行われます。たとえば、loansがmonthによってディメンション化される場合、毎月1回支払いが行われます。

time-dimension

金利支払い額が計算される基準になるディメンションの名前。loansの時間ディメンションがDAY、WEEK、MONTH、QUARTERまたはYEARの型である場合、loansに複数の時間ディメンションがないかぎり、time-dimension引数はオプションです。

STATUS

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年の融資に対する元金および金利の最後の支払いです。

例7-101 毎月の返済額の決定

次の文は、年利8.75%の$125,000の融資に関する毎月の返済額を決定します。

SHOW FPMTSCHED(125000, .0875/12, 360, month)

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

983.38

FROM_TZ

FROM_TZファンクションは、タイムスタンプ値およびタイムゾーンをTIMESTAMP_TZ値に変換します。

戻り値

TIMESTAMP_TZ

構文

FROM_TZ (timestamp_value , time_zone_value)

パラメータ

timestamp_value

TIMESTAMPデータ型のテキスト式。

time_zone_value

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ファンクションの最も単純な形式でも、特定のデータ型の値が必要です。

GET(datatype)

GETには、入力を確認する引数も複数あります。

GETはファンクションであるため、OLAP DMLコマンド内で使用する必要があります。また、代入文で変数に入力を格納して後で使用でき、またはLIMITコマンドで使用して、ディメンションのステータスを設定することもできます。プログラムでGETを使用することにより、プログラムの完了に必要な情報を要求できます。

戻り値

戻り値は、構文に示すように要求する入力によって異なります。

構文

GET({RAW TEXT|[NEW|VALID|POSLIST] input} -

[VERIFY condition-exp [IFNOT result-exp]])

ここで、inputは次のいずれかです。

dim-name

NAME

datatype

パラメータ

dim-name

ディメンションの名前を指定するテキスト式。dim-nameを指定した場合、GETはこのディメンションの値を入力として要求し、その入力がディメンションの有効な値であることを確認します。

RAW TEXT

GETが入力ストリームの次の項目を入力されているとおりに返すことを指定します。「RAW TEXTを指定したGET」を参照してください。

NEW dim-name

dim-name引数のあるNEWキーワードによって、GETはディメンションの新しい値を要求します。NEWを指定してディメンション値を要求すると、GETは入力が既存のディメンション値ではないことを確認します。

VALID dim-name

dim-name引数のあるVALIDキーワードによって、GETはディメンションの新しい値または既存の値を要求します。VALIDを指定してディメンション値を要求すると、GETは入力が既存のディメンション値または有効な新規ディメンション値のいずれかであることを確認します。

POSLIST dim-name

dim-name引数のあるPOSLISTキーワードによって、GETはディメンションのその位置によって識別されるディメンション値を要求します。POSLISTを指定してディメンション値を要求すると、GETは入力がディメンションの既存の位置番号であることを確認します。「POSLISTを指定したGET」を参照してください。

NAME

GETが現行アナリティック・ワークスペースのオブジェクトの名前を要求することを指定します。NAMEを指定した場合、GETは入力が現行アナリティック・ワークスペースに存在するオブジェクトであることを確認します。オブジェクト名は一重引用符で囲まず、DEFINEに示す有効なオブジェクト名のルールに従う必要があります。GETは、自動的にオブジェクト名を大文字に変換します。

NEW NAME

NEW NAMEキーワードを使用すると、新しいアナリティック・ワークスペース・オブジェクトの名前を要求できます。NEWを指定してアナリティック・ワークスペースのオブジェクト名を要求すると、GETは入力を確認して、アタッチされたアナリティック・ワークスペース(EXPRESS.DBを含む)の既存のオブジェクト名ではないことを確認します。

VALID NAME

VALID NAMEキーワードを使用すると、アナリティック・ワークスペース・オブジェクトの名前を要求できます。VALIDを指定してアナリティック・ワークスペースのオブジェクト名を要求すると、現行のアナリティック・ワークスペースがない場合や、該当の名前が存在するかどうかに関係なく、GETは、入力が有効なオブジェクト名のルールに従っていることを確認します。

POSLIST NAME

POSLIST NAMEキーワードを使用すると、NAMEディメンションでの位置によって識別されるアナリティック・ワークスペースのオブジェクト名を要求できます。POSLISTを指定してアナリティック・ワークスペースのオブジェクト名を要求すると、GETは入力がNAMEディメンションの既存の位置番号であることを確認します。

datatype

GETによって要求されるデータの型を指定しますが、これは、Oracle OLAPデータ型(INTEGER、SHORTINTEGER、DECIMAL、SHORTDECIMAL、BOOLEAN、ID、TEXTおよびDATE)のいずれも可能です。データ型を要求する場合、GETはNAの値を受け入れます。

VERIFY condition-exp [IFNOT result-exp]

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)

例

例7-103 テキスト値を取得するGETの使用方法

myconnという名前のOracle OLAPプログラムがあるとします。このプログラムには、テキスト値を要求するGETに対するコールが含まれています。

DEFINE myconn PROGRAM
PROGRAM
...
MYTEXT = GET(TEXT)
...
END

GREATEST

GREATESTファンクションは、式のリストで最大の式を返します。最初の式より後の式はすべて、比較の前に最初の式のデータ型に暗黙的に変換されます。

式のリストで最小の式を検索するには、LEASTを使用します。

戻り値

最初の式のデータ型

構文

GREATEST (expr [, expr]...)

パラメータ

expr

式。

例

例7-104 アルファベット順で最後であるテキスト式の検索

次の文では、アルファベット順で最後である文字列が選択されます。

SHOW GREATEST ('Harry', 'Harriot', 'Harold')
Harry

例7-105 最大の数式の検索

次の文は、最大の数値を選択します。

SHOW GREATEST (5, 3, 18)
18

GROUPINGIDファンクション

GROUPINGIDファンクションは、GROUPINGIDコマンドで作成済のグルーピング・リレーションを使用して、階層ディメンションの値のグルーピングIDを取得します。

戻り値

NUMBER

構文

GROUPINGID (gidrel...)

パラメータ

gidrel

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ファンクションは、時系列式の増加率をその系列の最初と最後の値を基準にして計算します。

GROWRATEは、時間ディメンションのステータスの最初と最後の値に対応するexpressionの値を基準にして計算を行います。expressionのその間の値は無視されます。GROWRATEが使用する計算は、次のとおりです。

GROWRATE = ((last/first)**(1/(n-1))-1

指数のnは、時間ディメンションのステータスの値の数です。

戻り値

DECIMAL

GROWRATEによって返される結果は、time-dimensionで指定したディメンションを除くexpressionのすべてのディメンションによってディメンション化されます。

構文

GROWRATE(expression [time-dimension])

パラメータ

expression

増加率を計算する数式。式は時間ディメンションによってディメンション化されている必要があります。expressionの最初と最後の値には、次のルールが適用されます。

- expressionの最初の値はゼロにできません。(これは、GROWRATE計算でゼロによる除算を回避するためです。)

- expressionの最初と最後の値は、両方とも正数であるか両方とも負数である必要があります。(あるいは、expressionの最後の値は、最初の値が正数であるか負数であるかにかかわらずゼロにできます。)

- expressionの最初と最後の値のいずれもNAにはできません。

time-dimension

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

HEXTORAW

HEXTORAWファンクションは、16進数の文字列をRAW値に変換します。

関連項目:
「RAWデータ型」およびRAWTOHEXファンクション。

戻り値

RAW

構文

HEXTORAW(text-exp)

パラメータ

text-exp

16進数を含むテキスト式。

HIERCHECK

HIERCHECKは、指定したaggmapの特定のリレーションまたはすべてのリレーションにおける階層に循環構造があるかどうかをチェックするためのファンクションです。階層ディメンションの親リレーションは、ディメンションのそれぞれの値の親を表します。(循環構造が現れるのは、親リレーションの中でディメンション値が誤ってそれ自身の祖先または子孫として指定された場合です。)

またHIERCHECKによるチェックを、階層に関するその他の状況について行うよう指定することもできます。

関連項目:
HIERSHAPEファンクション

戻り値

BOOLEAN

構文

コマンドとして使用する場合

HIERCHECK parent-relation [STATUS|NOSTATUS|valueset-name] [MULTIPATH] [CONSISTENT]-

[BALANCED levelrelation-name]

または

HIERCHECK aggmap-name [MULTIPATH] [CONSISTENT]levelrelation-name]

パラメータ

parent-relation

チェックする親リレーションの名前を指定するテキスト式。

aggmap-name

aggmapの名前を表すテキスト式。HIERCHECKでは、aggmapにおけるすべてのリレーションがチェックされます。

STATUS

HIERCHECKにおいて、リレーションの現行のディメンション・ステータスが使用されるよう指定します。

valueset

ステータスにおいて、HIERCHECKの実行対象となるリレーションのディメンションの値を指定します。

NOSTATUS

HIERCHECKにおいて、リレーションのデフォルトのディメンション・ステータスが使用されるよう指定します。

MULTIPATH

HIERCHECKにおいて、それぞれの子からその親へのパスが複数存在するかどうかのチェックが行われるよう指定します。

CONSISTENT

HIERCHECKにより、階層に整合性があるかどうかのチェックが行われるよう指定します。階層に整合性があるとは、異なる階層のすべてのノードが同じ子を持つことをいいます。

BALANCED levelrel-name

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ファンクションは、指定されたレベルのノードの値を、階層ディメンションの現行のステータス・リストの最初の値として返します。

指定された階層ディメンションの値を、事前定義済のリレーションにレベル別に移入するには、HIERHEIGHTコマンドを使用します。

戻り値

HIERHEIGHTから返されるデータ型は、parentrelのディメンション値のデータ型です。

構文

HIERHEIGHT(parentrel [,] level)

パラメータ

parentrel

階層ディメンションの親子のセルフ・リレーション。詳細は、「parentrelリレーション」を参照してください。

level

階層ディメンションのレベルを表す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ファンクションは、階層ディメンションが指定されたシェイプを持つかどうかを識別します。

戻り値

BOOLEAN

構文

HIERSHAPE(parent-relation[(qdr)] {LEVEL | RAGGED | SKIPLEVEL | REGULAR} USING levelrel -

[INHIERARCHY inhvalueset] LEVELORDER levelvalueset)

パラメータ

parent-relation

階層ディメンションの親子のセルフ・リレーションの名前を表すテキスト式。(「parentrelリレーション」を参照してください。)

qdr

parent-relationを修飾するQDRの名前を表すテキスト式。

LEVEL

このオプションは、すべてのメンバーが、levelrelで定義されているレベルと同じレベルの一部であるかどうかを決めます。

RAGGED

リーフ・ノードが階層内の異なるレベルに位置する階層。

SKIPLEVEL

1つ以上のリーフ・ノードが、その次の最も明らかなレベルより上位に位置する親にリンクされている階層。

REGULAR

それぞれの子が階層の次のレベルに位置する親を持つ、従来のレベルベース階層。

levelrel

階層ディメンションのレベル・リレーションの名前を表すテキスト式。(「levelrelリレーション」を参照してください。)

inhvalueset

階層ディメンションのinhier値セットの名前を表すテキスト式。(「inhier値セットまたは変数」を参照してください。)

levelvalueset

階層ディメンションの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

INFOファンクションは、FORECAST、PARSEまたはREGRESS文によって生成される情報、あるいはアナリティック・ワークスペースのモデルに関して生成される情報を取得します。

INFOファンクションの構文は、取得する情報の種類によって異なるので、次のように4つに分けて説明します。

- INFO(FORECAST)

- INFO(MODEL)

- INFO(PARSE)

- INFO(REGRESS)

INFO(FORECAST)

INFO(FORECAST)ファンクションは、FORECAST文によって生成されてOracle OLAPによって内部的に格納される情報を取得します。INFOにキーワードを使用することにより、計算した予測に関する特定の情報を抽出できます。

注意:
INFOを使用する前に、結果に関する標準的なレポートで、これによって必要な情報がすべて得られるため、FORECAST.REPORTについて理解しておいてください。INFOは、主にカスタマイズされたレポートの作成やさらに詳細な結果の分析の実行に効果的です。

予測が計算されていない情報を抽出しようとすると、INFOはエラーを生成します。キーワードAVAILABLEを使用すると、現在取得できる結果があるかどうかを判断できます。

戻り値

後述の表に示すように、戻り値は使用するキーワードによって異なります。範囲外の索引を使用した場合、または直前に使用した予測法に適用されないキーワードを選択した場合、INFOはNAを返します。たとえば、予測の計算式に2つの係数がある場合に12番目の係数を要求すると、INFOはNAを返します。

構文

INFO(FORECAST choice [index])

パラメータ

FORECAST

FORECAST文によって生成される情報を取得することを示します。

choice

取得する特定の情報。FORECASTに関して使用可能なキーワードを、表7-12「すべての方法に対するキーワード」、表7-13「TRENDおよびEXPONENTIAL予測に対するキーワード」および表7-14「WINTERS予測に対するキーワード」に示します。索引付けが必須と示されているキーワードには、index引数が必要です。

index

複数の異なる結果がありうるchoiceに関して、取得する結果を指定するINTEGER式。たとえば、傾向方程式には複数の係数がある可能性があります。indexを使用することによって、情報を取得する係数を指定できます。indexが必須のchoiceで省略すると、エラーが発生します。

表7-12 すべての方法に対するキーワード

キーワード

タイプ

索引付け

意味

AVAILABLE

BOOL

なし

情報を取得できる計算予測があるか

DEPENDENT

TEXT

なし

予測される変数または式

METHOD

TEXT

なし

予測法

MAPE

DEC

なし

平均絶対誤差率(適合度の程度)

LENGTH

INT

なし

計算される予測期間の数

TIME

TEXT

なし

予測が実行されるディメンション

FCNAME

TEXT

なし

適合値および予測値が含まれる変数の名前(予測が保存されていない場合はNA)

表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)

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つ以上指定できます。

block-num

dimension-num

element-num

model-num

qualifier-num

source-num

stmnt-num

パラメータ

MODEL

アナリティック・ワークスペースのモデルに関する情報を取得することを示します。INFOは、最も新しく定義したモデル、または現行セッションで検討したモデルに関する情報を返します(DEFINE MODELおよびCONSIDERコマンドを参照)。

choice

取得する情報を特定するキーワード。モデルに関して使用可能なキーワードを、それぞれの情報カテゴリを表す次の表に示します。

- 表7-15「モデルに関する一般情報を取得するINFO(MODEL)のキーワード」。

- 表7-16「モデルの構造に関する情報を取得するINFO(MODEL)のキーワード」。

- 表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オプションの値。

block-num

情報を取得するブロックを指定するINTEGER式。block-numは、MODEL.COMPRPTプログラムによって生成されるレポートで特定されるブロック番号に一致します。

dimension-num

情報を取得するモデル・ディメンションまたはブロック・ディメンションを指定する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プログラムを実行します。

element-num

情報を取得する要素を指定する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です。

model-num

インクルードされたモデルの階層の場合、情報を取得するモデルを指定するINTEGER式。現在検討しているモデルはmodel-num 0(ゼロ)、そのモデルがインクルードするモデルはmodel-num 1などとなります。ルート・モデルが階層で最も大きいモデル番号になります。

qualifier-num

情報を取得する修飾子を指定する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のレポートでリストされる修飾子の順序に一致します。

source-num

情報を取得するデータソースを指定するINTEGER式。計算において、変数またはディメンション値に対する各参照が代入ターゲットのデータのソースとして数えられます。定数値はソースとして数えられません。

文のデータソースを参照するには、その文を含むモデルに対してMODEL.DEPRTプログラムを実行します。モデル内の方程式ごとに、MODEL.DEPRTのレポートは、代入ターゲットを1行で示してその後にデータソースを続けます。各データソースは別の行に示されます。

stmnt-num

情報を取得する文を指定する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)

INFO(PARSE)ファンクションは、PARSE文によって生成されてOracle OLAPによって内部的に格納される情報を取得します。INFOにキーワードを使用することにより、解析した式に関する特定の情報を抽出できます。

戻り値

戻り値は、表7-19に示すように、使用するキーワードによって異なります。取得できない情報を抽出しようとした場合、または範囲外の索引を使用した場合、INFOはNAを返します。たとえば、4つの式を含む句を解析してから12番目のFORMULAを要求すると、INFOはNAを返します。

構文

INFO(PARSE choice [index])

パラメータ

PARSE

PARSE文によって生成される情報を取得することを示します。

choice

取得する特定の情報。PARSEに対して選択可能なキーワードを、表7-19「INFO PARSEのキーワード」に示します。索引付けが可能と示されているキーワードは、オプションのindex引数を取ることができます。

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)

INFO(REGRESS)ファンクションは、REGRESS文によって生成されてOracle OLAPによって内部的に格納される情報を取得します。INFOにキーワードを使用することにより、計算した回帰に関する特定の情報を抽出できます。

注意:
INFOを使用する前に、結果に関する標準的なレポートを生成するもので、これによって必要な情報がすべて得られるため、REGRESS.REPORTについて理解しておいてください。INFOは、主にカスタマイズされたレポートの作成やさらに詳細な結果の分析の実行に効果的です。

戻り値

戻り値は、表7-20「INFO REGRESSのキーワード」に示すように、使用するキーワードによって異なります。

構文

INFO(REGRESS choice [index])

パラメータ

REGRESS

REGRESS文によって生成される情報を取得することを示します。

choice

取得する特定の情報。REGRESSに対して選択可能なキーワードを、表7-20「INFO REGRESSのキーワード」に示します。索引付けが必須と示されているキーワードには、index引数が必要です。

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の元の状態をリセットしてNOに戻す場合に使用。

使用上の注意

回帰結果を取得可能かどうかの判断

回帰が実行されていない情報を抽出しようとすると、INFOはエラーを生成します。キーワードAVAILABLEを使用すると、現在取得できる結果があるかどうかを判断できます。回帰が一度正常に実行されると、その後で1回以上回帰が失敗しても前の成功した回帰の結果が取得可能なので、AVAILABLEはTRUEのままです。AVAILABLEの状態を変更するためにRESETを使用して元の値のNOに戻すまで、AVAILABLEはTRUEのままです。

索引が原因のNAの結果

範囲外の索引を使用した場合、INFOはNAを返します。たとえば、回帰において5つの独立変数がある場合に12番目の独立変数の係数を要求すると、INFOはNAを返します。

例

例7-116 回帰情報の取得

次の文は、最後に計算された回帰から3番目の係数を現行の出力ファイルに送信します。

SHOW INFO(REGRESS COEFFICIENT 3)

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

7.55

INITCAP

INITCAPファンクションは、指定されたテキスト式を返す際、各単語の先頭の英字を大文字、他のすべての英字を小文字にして返します。各単語は空白または英数字以外の文字で区切られます。

戻り値

式と同じデータ型

構文

INITCAP (text-exp)

パラメータ

text-exp

テキスト式。

例

例7-117 各単語の先頭文字の大文字化

次の例は、文字列の各単語の先頭の文字を大文字にしています。

SHOW INITCAP('the soap')
The Soap

INLIST

INLISTファンクションは、テキスト値のすべての行が別のテキスト値の行であるかどうかを判別します。通常、INLISTは、リスト(複数行のテキスト値の形式)のすべての行がマスター・リスト(別の複数行のテキスト値の形式)にあるかどうかを判断するために使用します。

INLISTでは、引数としてTEXT値およびNTEXT値を使用できます。1つの引数のみがNTEXTである場合、INLISTはファンクション操作を実行する前に、他の引数をNTEXTに自動的に変換します。

戻り値

BOOLEAN

構文

INLIST(masterlist list)

パラメータ

masterlist

listの各行の比較対象とする複数行のテキスト式。

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

INSBYTESファンクションは、テキスト式に1バイト以上を挿入します。

シングルバイト・キャラクタ・セットを使用している場合は、INSCHARSを使用します。

戻り値

TEXT

構文

INSBYTES(text-expression bytes [after])

パラメータ

text-expression

バイトを挿入するTEXT式。text-expressionが複数行のTEXT値である場合、改行はINSBYTESの戻り値でも維持されます。

bytes

text-expressionに挿入する1バイト以上のバイト。

after

指定された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

例

例7-119 テキストへのバイトの挿入

この例は、TEXT値hellojoeにバイトthereを挿入する方法を示します。

次のファンクションをコールします。

INSBYTES('hellojoe', 'there', 5)

次の値が返されます。

hellotherejoe

INSCHARS

INSCHARSファンクションは、テキスト式に1文字以上を挿入します。

マルチバイト・キャラクタ・セットを使用している場合、INSCHARSファンクションのかわりにINSBYTESファンクションを使用できます。

戻り値

TEXTまたはNTEXT

このファンクションでは、TEXT値とNTEXT値を引数として使用できます。戻り値のデータ型は、引数として指定する値のデータ型によって次のように異なります。

- すべての引数がTEXT値である場合、戻り値はTEXTです。

- すべての引数がNTEXT値である場合、戻り値はNTEXTです。

- 引数にTEXTとNTEXTの両方の値が存在する場合は、すべてのTEXT値がNTEXT値に変換されてからファンクションの演算が実行され、戻り値はNTEXTになります。

構文

INSCHARS(text-expression characters [after])

パラメータ

text-expression

文字を挿入する式。text-expressionが複数行のTEXT値である場合、改行はINSCHARSの戻り値でも維持されます。

characters

text-expressionに挿入する1文字以上の文字。

after

指定された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

例

例7-120 テキストへの文字の挿入

この例は、TEXT値hellojoeに文字thereを挿入する方法を示します。

INSCHARS('hellojoe', 'there', 5)

hellotherejoe

INSCOLS

INSCOLSファンクションは、複数行のTEXT値の列に別のTEXT値のすべての列を挿入します。挿入される列は指定した列位置の後ろに配置され、各行の元の列は右に移動します。このファンクションは、挿入された列で構成された複数行のTEXT値を返します。

戻り値

TEXTまたはNTEXT

このファンクションでは、TEXT値とNTEXT値を引数として使用できます。戻り値のデータ型は、引数として指定する値のデータ型によって次のように異なります。

- すべての引数がTEXT値である場合、戻り値はTEXTです。

- すべての引数がNTEXT値である場合、戻り値はNTEXTです。

- 引数にTEXTとNTEXTの両方の値が存在する場合は、すべてのTEXT値がNTEXT値に変換されてからファンクションの演算が実行され、戻り値はNTEXTになります。

戻り値の行数は、text-expressionの行数と常に同じです。columnsのTEXT式の行がこれより少ない場合、INSCOLSはその式の最後の行を戻り値の後続の行で繰り返します。

構文

INSCOLS(text-expression columns [after])

パラメータ

text-expression

列を挿入する式。

columns

各行に1つ以上の列を含む式。この式のすべての列がtext-expressionの対応する行に挿入されます。

after

列が挿入される前の列位置を表す0から32,767のINTEGER。各行における最初の文字の列位置は1です。afterを指定しない場合、挿入は各行の末尾から開始されます。1行の全体の長さは、シングルバイト文字では32,767列またはマルチバイト文字ではそれより少ない列を超えることができません。

text-expressionのある行における最後の文字よりも右側にくるafter列を指定した場合、戻り値の対応する行における間の列は空白で埋められます。

例

例7-121 テキスト列の挿入

次の例では、カラー・コード(複数行のTEXT値itemcolorに格納)を、itemidテキスト値に格納される項目識別子に挿入します。列は列3の後ろに挿入します。

itemcolor値は、次のとおりです。

Blu
Red
Gre
Ora

itemid値は、次のとおりです。

542-Fra
379-Eng
968-USA
369-Can

INSCOLSファンクションをコールします。

INSCOLS(itemid itemcolor 3)

次の値が返されます。

542Blu-Fra
379Red-Eng
968Gre-USA
369Ora-Can

INSLINES

INSLINESファンクションは、複数行のテキスト式に1行以上を挿入します。

戻り値

TEXTまたはNTEXT

このファンクションでは、TEXT値とNTEXT値を引数として使用できます。戻り値のデータ型は、引数として指定する値のデータ型によって次のように異なります。

- すべての引数がTEXT値である場合、戻り値はTEXTです。

- すべての引数がNTEXT値である場合、戻り値はNTEXTです。

- 引数にTEXTとNTEXTの両方の値が存在する場合は、すべてのTEXT値がNTEXT値に変換されてからファンクションの演算が実行され、戻り値はNTEXTになります。

構文

INSLINES(text-expression lines [after])

パラメータ

text-expression

1行以上を値に挿入する複数行の式。

lines

text-expressionに挿入するテキストの1行以上を表す式。

after

指定されたlinesが挿入される位置の前の行数を表すINTEGER。text-expressionの最初の行の位置は1です。最初の行の前に挿入するには、afterに0(ゼロ)を指定します。この引数を省略した場合、INSLINESはtext-expressionの最後の行の後ろに新しい行を挿入します。

例

例7-122 テキスト行の挿入

この例は、次の値を持つmktglistという変数における複数行のテキスト値に新しい行を挿入する方法を示します。

Salespeople
Products
Services

INSLINESファンクションをコールします。

INSLINES(mktglist, 'Advertising', 2)

次の値が返されます。

Salespeople
Products
Advertising
Services

INSTAT

INSTATファンクションは、ディメンション値またはディメンション・サロゲート値が現行のステータス・リストにあるか、またはディメンション値が値セットにあるかどうかをチェックします。

戻り値

BOOLEAN

値が現行のステータス・リストまたは値セットにある場合はYES、ない場合はNO。

構文

INSTAT(dimension, value)

パラメータ

dimension

ディメンション、ディメンション・サロゲートまたは値セットの名前。

value

テストするディメンション値またはディメンション・サロゲート値で、テキスト・リテラル(一重引用符で囲む)または値を指定する式のどちらかです。結合ディメンションまたは連結ディメンションの値を指定するには、値を山カッコで囲みます。結合ディメンションの場合、複数のベース・ディメンション値をカンマと空白で区切ります。連結ディメンションの場合、ベース・ディメンションとその値をコロンと空白で区切ります。

使用上の注意

無効な値のチェック

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ファンクション群(INSTR、INSTRB、およびINSTRC)は、文字を使用して文字列からサブストリングを検索し、文字列のうち指定したサブストリングに一致する部分の最初の文字の位置を返します。戻り値となるサブストリング位置の決定方法は各ファンクションで異なります。

- INSTRは、入力キャラクタ・セットの定義どおりに文字を使用して長さを計算します。

- INSTRBは、バイトを使用して長さを計算します。

- INSTRCは、Unicodeの完全文字を使用して長さを計算します。

戻り値

検索が成功した場合はゼロ以外のINTEGER、成功しなかった場合は0(ゼロ)。

構文

{INSTR | INSTRB | INSTRC} (string , substring [, position [, occurrence]])

パラメータ

string

検索元のテキスト式。

substring

検索元で検索する文字列。

position

string内でファンクションが検索を開始する位置を示すゼロ以外のINTEGER。INSTRは、入力キャラクタ・セットでの定義どおりに文字を使用してpositionを計算します。INSTRBは、バイトを使用してpositionを計算します。INSTRCは、Unicodeの完全文字を使用してpositionを計算します。

positionが負数である場合、INSTRはstringの最後から逆方向に数えて検索します。positionのデフォルト値は1なので、ファンクションはstringの最初の位置から検索を開始します。

occurrence

stringでどの一致文字列をファンクションが検索するかを示すINTEGER。occurrenceの値は正数である必要があります。occurrenceのデフォルト値は1なので、ファンクションはsubstringの最初の一致文字列を検索します。

例

例7-127 文字位置を使用したサブストリング位置の順方向検索

次の例は、文字列「Corporate Floor」で文字列「or」の検索を3番目の文字から開始します。「Corporate Floor」で「or」が2回目に出現する位置を返します。

SHOW INSTR('Corporate Floor','or', 3, 2)
14

例7-128 文字位置を使用したサブストリング位置の逆方向検索

この例では、ファンクションは、最後の文字から最後から3番目の文字まで、つまり、「Floor」の最初の「o」まで逆方向にカウントします。次に、ファンクションは2回目に現れる「or」を逆方向に検索し、2回目に現れるこの文字列が、検索文字列の2番目の文字で始まることを認識します。

SHOW INSTR('Corporate Floor','or', -3, 2)
2

例7-129 マルチバイト・キャラクタ・セットを使用したサブストリング位置の検索

この例では、マルチバイト・キャラクタ・セットを想定しています。

SHOW INSTRB('Corporate Floor','or',5,2)
27

INTPART

INTPARTファンクションは、小数の小数部を切り捨てて整数部を計算します。

戻り値

INTEGER

構文

INTPART(expression)

パラメータ

expression

整数部が返される小数式。

使用上の注意

大きな値

expressionがINTEGERに許可されている値(-2,147,483,647から2,147,483,647)より大きな値である場合、INTPARTはNA値を返します。

例

例7-130 小数の整数部の計算

次の例は、数値3.14の整数部を示します。次の文

show intpart(3.14)

によって、次の結果が生成されます。

3

IRR

IRRファンクションは、一連のキャッシュ・フロー値に関連付けられている内部収益率を計算します。結果の各値は、対応するキャッシュ・フローの正味現在価値がゼロに等しくなる各期間の割引率として計算されます。

戻り値

DECIMAL(たとえば、n 8.25パーセントの内部収益率では、.0825の結果値が生成される)

IRRファンクションによって返される結果は、時間ディメンションを除くcashflowsのすべてのディメンションによってディメンション化されます。cashflowsが時間ディメンションによってのみディメンション化される場合、IRRは単一の値を返します。

構文

IRR(cashflows, [time-dimension])

パラメータ

cashflows

キャッシュ・フロー値の系列を指定する、time-dimensionによってディメンション化される数式。

注意:
結果値の計算に使用されるすべてのキャッシュ・フローは、それらが関連付けられている期間内の同じ相対時点に発生するとみなされます。ステータス外のディメンション位置に対応するキャッシュ・フローは無視されます。

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プログラムは、テキスト式が有効な日付を表しているかどうかを決定します。ISDATEは、テキスト式が日付のみの値に変換可能かどうかを確認するテストを行うのみで、実際の変換は行いません。変換を実行するには、CONVERTを使用する必要があります。

戻り値

BOOLEAN

テキスト式が有効な日付を表す場合はYESを、有効な日付を表さない場合はNOを返します。

構文

ISDATE(test-date)

パラメータ

test-date

日付のみのデータ型による定義どおりに有効な値を表しているかどうかをテストする1行のIDまたはTEXT式。日付を入力する場合の有効なスタイルの説明は、「日付のみの入力値」を参照してください。

例

例7-132 テキスト式のテスト

次の文では、ISDATEプログラムがリテラル・テキスト式をテストして有効な日付であるかどうかを確認し、出力が現行の出力ファイルに送信されます。

SHOW ISDATE('3 5 1995')

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

YES

ISEMPTY

ISEMPTYファンクションは、変数またはその1つ以上のパーティションが値を持つかどうかを識別するファンクションです。

戻り値

BOOLEAN

指定した変数またはパーティションに値がある場合はFALSE、空の場合はTRUE。

構文

ISEMPTY( variable [(PARTITION partition [,PARTITION partition]...)])

パラメータ

variable

値を確認する変数の名前。

partition

値を確認する、変数の1つ以上のパーティションの名前(カンマ区切りで指定)。

ISINFINITE

ISINFINITEファンクションは、数式の値が無限大であるかどうかを示す値を返します。

関連項目:
このファンクションは、SQLの浮動小数点条件IS [NOT] INFINITEと同様の情報を返します(『Oracle Database SQL言語リファレンス』を参照)。

戻り値

BOOLEAN

expressionが+INF(NOTを指定していない場合は-INF)の場合、TRUEが返されます。それ以外の場合は、FALSEが返されます。

注意:
OLAP DMLは計算実行時に+INFまたは-INF値をNAに変換します。このため、このファンクションは、SQLで移入したデータベースからアナリティック・ワークスペースにインポートされた、OLAP DMLの計算にはまだ使用されていないデータに対して実行された場合にのみ、TRUEを返すことができます。

構文

ISINFINITE(expression)

パラメータ

expression

小数式。

ISNAN

ISNANファンクションは、数式の値が特殊なNaN値であるかどうかを示す値を返します。

関連項目:
このファンクションは、SQLの浮動小数点条件IS [NOT] NANと同様の情報を返します(『Oracle Database SQL言語リファレンス』を参照)。

戻り値

BOOLEAN

expressionが+NaN(NOTを指定していない場合は-NaN)の場合、TRUEが返されます。それ以外の場合は、FALSEが返されます。

注意:
OLAP DMLは計算実行時に+NaNまたは-NaN値をNAに変換します。このため、このファンクションは、SQLで移入したデータベースからアナリティック・ワークスペースにインポートされた、OLAP DMLの計算にはまだ使用されていないデータに対して実行された場合にのみ、TRUEを返すことができます。

構文

ISNAN(expression)

パラメータ

expression

小数式。

ISSESSION

ISSESSIONファンクションは、指定したディメンションの現在のメンバーが一時的なメンバー(つまり、MAINTAIN ADD SESSION文を実行して追加したメンバー)かどうかを判別します。

戻り値

BOOLEAN

メンバーが一時的なメンバーの場合はYESを、そうでない場合はNOを返します。

構文

ISSESSION( [RECURSIVE]dimension)

パラメータ

RECURSIVE

ベース・ディメンションを持つディメンションに対して、判別の際にOracle OLAPがベース・ディメンションの値をテストすることを指定します。

dimension

現在のメンバー値がOracle OLAPによってテストされるディメンションの名前。

ISVALUE

ISVALUEファンクションは、指定された値がディメンションまたはコンポジットにあるかどうかを調べます。

ヒント:
ディメンションの値がディメンションの現在のステータスにあるかどうかを判別する場合には、INSTATを使用します。

戻り値

BOOLEAN

構文

ISVALUE(name, value)

パラメータ

name

チェックされるディメンションまたはコンポジットの名前。

コンポジットに名前がない場合、そのコンポジットを指すSPARSEキーワードを使用します(たとえば、SPARSE <market product>)。

value

調べる値。IDまたはTEXTディメンションの場合はテキスト・リテラルまたはテキスト式、INTEGERディメンションの場合はINTEGER、あるいはコンポジットおよび結合ディメンションの場合は山カッコで囲んだ値の組合せ。

例

例7-133 有効な値かどうかの確認

Packsがproductディメンションの値であるかどうかを確認するとします。次の文によって生成される結果は、YESまたはNOです。

SHOW ISVALUE(product, 'Packs')

例7-134 論理位置番号の確認

結合ディメンションのベース・ディメンション値の論理位置番号を調べることができます。たとえば、marketおよびproductが結合ディメンションmarkprodのベース・ディメンションであるとします。次の文は、4番目のmarketディメンション値および3番目のproductディメンション値の組合せに割り当てられている値があるかどうかを調べます。

SHOW ISVALUE(markprod, '<4 3>')

JOINBYTES

JOINBYTESファンクションは、複数のテキスト値を単一行として結合します。

JOINBYTESは、NAの値を持つ引数を無視し、結合するテキストから改行を削除します。(複数行のテキスト式の改行を維持するには、INSCHARSファンクションを使用します。)また、結合される行の長さが32,767(結合される行の最大の長さ)を超える場合、JOINBYTESは自動的に改行して残りのバイトを次の行に移します。マルチバイト文字のバイトの間で改行が発生することもあります。この場合、JOINBYTESはいずれかのバイトの後で1行を終了し、その文字の次のバイトで次の行を開始します。

戻り値

TEXT

構文

JOINBYTES(first-expression, next-expression...)

パラメータ

first-expression

JOINBYTESがnext-expressionに結合する式。first-expressionのデータ型がTEXTまたはNTEXT以外である場合、JOINBYTESはそれをTEXTに変換します。NTEXT式をTEXTに変換するには、CONVERTまたはTO_CHARファンクションを使用します。

next-expression…

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

JOINCHARSファンクションは、複数の非NA式を単一行テキストとして結合します。JOINCHARSは、結合するテキストから改行を削除します。(改行を維持するには、INSCHARSを使用します。)

結合される行の長さが32,767バイトを超える場合、JOINCHARSは自動的に改行して残りの文字を次の行に移します。マルチバイト文字のバイトの間で改行が発生する場合、JOINCHARSはマルチバイト文字を分割せず、かわりに、マルチバイト文字のすべてのバイトを次の行に移します。

ヒント:
マルチバイト・キャラクタ・セットを使用している場合、JOINCHARSファンクションのかわりにJOINBYTESファンクションを使用できます。

戻り値

TEXTまたはNTEXT

戻り値のデータ型は、引数として指定する値のデータ型によって次のように異なります。

- すべての引数がTEXT値である場合、戻り値はTEXTです。

- すべての引数がNTEXT値である場合、戻り値はNTEXTです。

- 引数にTEXTとNTEXTの両方の値が存在する場合は、すべてのTEXT値がNTEXT値に変換されてからファンクションの演算が実行され、戻り値はNTEXTになります。

構文

JOINCHARS(first-expression, next-expression...)

パラメータ

first-expression

JOINCHARSがnext-expressionに結合する式。first-expressionのデータ型がTEXTまたはNTEXT以外である場合、JOINCHARSはそれをTEXTに変換します。

next-expression...

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

JOINCOLSファンクションは、2つ以上の複数行のテキスト値の対応する行を結合します。このファンクションは、最大32,767バイト(単一の連結行の最大長さ)までの連結された行から構成される複数行のテキスト値を返します。

戻り値の行の数は、行が最も多い引数式の行の数と常に同じです。これより行が少ない引数式に対しては、JOINCOLSはその式の最後の行を戻り値の後続の行で繰り返します。この繰返し機能は、引数式が空白、ハイフンなどの単一行セパレータである場合に便利です。例7-137「2つのテキスト式の列の結合」を参照してください。

戻り値

TEXTまたはNTEXT

すべての引数がTEXT値である場合、戻り値はTEXTです。すべての引数がNTEXT値である場合、戻り値はNTEXTです。引数にTEXTとNTEXTの両方の値が存在する場合は、すべてのTEXT値がNTEXT値に変換されてからファンクションの演算が実行され、戻り値はNTEXTになります。

構文

JOINCOLS(first-expression, next-expression...)

パラメータ

first-expression

JOINCOLSが行をnext-expressionの行に結合する式。式のデータ型がTEXTまたはNTEXT以外である場合、JOINCOLSはそれをTEXTに変換します。JOINCOLSは、値がNAである引数を無視します。

next-expression...

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

JOINLINESファンクションは、2つ以上の式の値を単一の複数行のテキスト値に結合します。複数行のテキスト値が結合される場合、先頭にくるのは最初の式のすべての行で、その後に2番目の式のすべての行と続きます。通常、JOINLINESの引数はテキスト値ですが、他のデータ型も可能です。

戻り値

TEXTまたはNTEXT

すべての引数がTEXT値である場合、戻り値はTEXTです。すべての引数がNTEXT値である場合、戻り値はNTEXTです。引数にTEXTとNTEXTの両方の値が存在する場合は、すべてのTEXT値がNTEXT値に変換されてからファンクションの演算が実行され、戻り値はNTEXTになります。

構文

JOINLINES(first-expression next-expression...)

パラメータ

first-expression

JOINLINESがnext-expressionを追加する式。式のデータ型がTEXTまたはNTEXT以外である場合、JOINLINESはそれをTEXTに変換します。JOINLINESは、値がNAである引数を無視します。

next-expression...

first-expressionと結合する1つ以上の式。連結する式のデータ型がTEXT以外である場合、JOINLINESはそれをTEXTに変換します。JOINLINESは、値がNAである引数を無視します。

例

例7-138 2つのテキスト式の行の結合

この例は、mktglistという名前の変数の最後に値Regionsを追加して新しいリストを作成する方法を示します。

mktglistの初期値は、次のとおりです。

Salespeople
Products
Services

次の文

newlist = JOINLINES(mktglist 'Regions')

newlistに次の結果が代入されます。

Salespeople
Products
Services
Regions

KEY

KEYファンクションは、結合ディメンションまたはコンポジットの値に対して指定されたベース・ディメンションの値を返します。

戻り値

戻り値は、指定されたベース・ディメンションのデータ型によって異なります。

構文

KEY(dimension-exp, base-dimension-exp)

パラメータ

dimension-exp

結合ディメンションまたはコンポジットの値を指定する式。結合ディメンションを指定した場合、KEYはステータスにある最初の値を使用します。コンポジットを指定した場合、KEYはコンポジットのすべてのベース・ディメンションについて、ステータスにある最初の値を使用します。

base-dimension-exp

ベース・ディメンション値を調べる対象である、以前に指定した結合ディメンションまたはコンポジットのベース・ディメンションの名前を表す式。

例

例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

8 OLAP DMLファンクション: LからZ

この章では、OLAP DMLファンクションのリファレンス項目の続きをアルファベット順に説明します。文字LからZで始まる各OLAP DMLファンクションにつき1つの項目があり、LAGから説明します。

OLAP DMLファンクションのアルファベット順リスト、カテゴリ別リスト、およびここで紹介する以外のOLAP DMLファンクションのリファレンス項目については、第7章「OLAP DMLファンクション: AからK」を参照してください。

その他のOLAP DMLリファレンス項目については、第4章「OLAP DMLプロパティ」、第5章「OLAP DMLオプション」、第9章「OLAP DMLコマンド: AからG」および第10章「OLAP DMLコマンド: HからZ」を参照してください。

ヒント:
OLAP DML文の多くはコーディングの際、文の名前の頭文字および2つの子音字を並べた3文字に省略して表すことができます。

LAG

LAGファンクションは、ディメンションの現行値より前の指定されたオフセットの位置にある、ディメンション化された変数または式の値を返します。通常、前の期間の値を取得するためにLAGファンクションを使用します。

戻り値

variable引数のデータ型、または時間ディメンションの最初の期間より前に相対位置変更しようとした場合はNA。

構文

LAG(variable n, dimension, [STATUS|NOSTATUS|limit-clause])

パラメータ

variable

dimensionによってディメンション化される変数または式。

n

前に相対位置変更するオフセット(つまり、ディメンション値の数)。LAGはこの値を使用して、変数の値を取得するためにLAGがディメンションを戻るべき値の数を決定します。

通常、nは、現行期間より前の期間(ディメンション値)の数を示す正のINTEGERです。nに負数の値を指定した場合、現行期間より後の期間の数を示します。つまり、nに負数の値を使用すると、LAGはLEADファンクションになります。

注意:
モデルでLAGを使用する場合は、Oracle OLAPがモデルを解決する際に連立ブロックが使用されないよう、「一方向のディメンション依存の保証」を参照して、nの値をコーディングする方法を確認してください。

dimension

前への相対位置変更が発生するディメンション。任意のディメンションを指定できますが、通常は、1つのレベル(月レベル、年レベルなど)に制限されているTEXT型の階層型時間ディメンション、またはDAY、WEEK、MONTH、QUARTER、YEARのいずれかの型のディメンションです。

variableにDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションがあり、LAGでそのディメンションを使用する場合、dimension引数は省略可能です。

STATUS

LAGが前への相対位置変更を計算する際に、現行のステータス・リスト(つまり現在ステータスにあり、現行のステータスの順序に並んでいるディメンション値のみ)を使用することを指定します。

NOSTATUS

(デフォルト)LAGが前への相対位置変更を計算する際に、デフォルト・ステータス(つまり元の順序に並んでいるすべてのディメンション値のリスト)を使用することを指定します。

limit-clause

LAGが前への相対位置変更を計算する際に、limit-clauseによって制限されるデフォルト・ステータスを使用することを指定します。

limit-clauseの構文は、各種LIMITコマンドにおけるlimit-clause引数の構文(つまり、LIMITコマンドの「TO」などのlimit-type引数の後の構文)と同じです。これらの引数の構文については、LIMITコマンド(値を使用)、LIMITコマンド(LEVELRELを使用)、LIMIT(親リレーションを使用)、LIMITコマンド(関連ディメンションを使用)、LIMITコマンド(NOCONVERTを使用)およびLIMITコマンド(POSLISTを使用)を参照してください。

LAGが前への相対位置変更を計算する際に、limit-clauseによって制限される現行のステータスを使用することを指定するには、limit-clauseにLIMITファンクションを指定します。

使用上の注意

時系列変数への結果の割当て

LAGの結果を時系列変数に割り当てて戻す場合には、注意が必要です。結果は一度に1つのセルに割り当てられるので、すべての値をnの位置の分のみ移動することなしに、返される最初の値で配列全体を上書きできるためです。ただし、LAGを使用すると、初期値に基づいて一連の値を計算できます。

例

例8-1 LAGの使用方法

アナリティック・ワークスペースに次のような定義があるとします。

DEFINE time DIMENSION TEXT
DEFINE timelevels DIMENSION TEXT
DEFINE timelevelrel RELATION timelevels <time>
DEFINE product DIMENSION TEXT
DEFINE district DIMENSION TEXT
DEFINE sales VARIABLE DECIMAL <time product district>

これらのオブジェクトが、次のレポートに表示されている値を持っているとします。

REPORT timelevelrel

TIME           TIMELEVELREL
-------------- ----------
AllYears       AllYears
2004           Years
2005           Years
2006           Years
Jan2005        Months
Feb2005        Months
Mar2005        Months
Apr2005        Months
...            ...
Oct2006        Months
Nov2006        Months
Dec2006        Months

REPORT product

PRODUCT
--------------
TVs
DVDs
Computers

REPORT district

DISTRICT
--------------
All Districts
Mass
Conn
Boston
Springfield
Hartford
New Haven

ここで、製品、地区および時間を制限する次のようなLIMIT文を発行するとします。

LIMIT product TO 'TVs'
LIMIT district TO 'Hartford'
LIMIT time TO 'Jan2006' 'Feb2006' 'Mar2006' 'Apr2006' 'May2006' 'Jun2006' 'Jul2006' 'Aug2006' 'Sep2006' 'Oct2006' 'Nov2006' 'Dec2006'

LAGを指定したREPORT文を発行すると、2006年および2005年の月間売上の値を表示できます。

REPORT DOWN time HEADING 'Sales 2006' sales HEADING 'Sales 2005' LAG(sales, 12, time, RELATION timelevelrel)

DISTRICT: Hartford
-------PRODUCT-------
---------TVs---------
TIME           Sales 2006 Sales 2005
-------------- ---------- ----------
Jan2006          1,542.91   1,627.51
Feb2006          1,786.07   1,100.13
Mar2006          1,794.43   1,667.61
Apr2006          1,942.92   1,346.66
May2006          1,530.08   1,509.51
Jun2006          1,613.60   1,242.47
Jul2006          1,666.35   1,307.17
Aug2006          1,413.79   1,033.93
Sep2006          1,526.98   1,773.96
Oct2006          1,112.85   1,103.78
Nov2006          1,193.41   1,132.39
Dec2006          1,851.19   1,543.62

LAGABSPCT

LAGABSPCTファンクションは、ディメンションの現行値より前の指定されたオフセットの位置にあるディメンション化された変数または式の値と、ディメンション化された変数または式の現行値との差の割合を返します。

結果の計算の際に常に前の期間の値の符合を使用するLAGPCTファンクションと異なり、LAGABSPCTは前の期間の値の絶対値を使用するので、差の割合の方向がわかります。

関連項目:
「LAGDIFとLAGABSPCTの使用方法」

戻り値

差の割合に対応するDECIMAL値、または時間ディメンションの最初の期間より前に相対位置変更しようとした場合はNA。

構文

LAGABSPCT(variable, n, dimension, [STATUS|NOSTATUS|limit-clause] )

パラメータ

time-series

dimensionによってディメンション化される変数または式。

n

前に相対位置変更するオフセット(つまり、ディメンション値の数)。LAGABSPCTはこの値を使用して、変数の値を取得するためにLAGABSPCTがディメンションを戻るべき値の数を決定します。

通常、nは、現行期間より前の期間(ディメンション値)の数を示す正のINTEGERです。nに負数の値を指定した場合、現行期間より後の期間の数を示します。この場合、LAGABSPCTは時系列の現行値をそれ以降の値と比較します。

dimension

前への相対位置変更が発生するディメンション。任意のディメンションを指定できますが、通常は、1つのレベル(月レベル、年レベルなど)に制限されているTEXT型の階層型時間ディメンション、またはDAY、WEEK、MONTH、QUARTER、YEARのいずれかの型のディメンションです。

variableにDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションがあり、LAGABSPCTでそのディメンションを使用する場合、dimension引数は省略可能です。

STATUS

LAGABSPCTが前への相対位置変更を計算する際に、現行のステータス・リスト(つまり現在ステータスにあり、現行のステータスの順序に並んでいるディメンション値のみ)を使用することを指定します。

NOSTATUS

(デフォルト)LAGABSPCTが前への相対位置変更を計算する際に、デフォルト・ステータス(つまり元の順序に並んでいるすべてのディメンション値のリスト)を使用することを指定します。

limit-clause

LAGABSPCTが前への相対位置変更を計算する際に、limit-clauseによって制限されるデフォルト・ステータスを使用することを指定します。

limit-clauseの構文は、各種LIMITコマンドにおけるlimit-clause引数の構文(つまり、LIMITコマンドの「TO」などのlimit-type引数の後の構文)と同じです。これらの引数の構文については、LIMITコマンド(値を使用)、LIMITコマンド(LEVELRELを使用)、LIMIT(親リレーションを使用)、LIMITコマンド(関連ディメンションを使用)、LIMITコマンド(NOCONVERTを使用)およびLIMITコマンド(POSLISTを使用)を参照してください。

LAGが前への相対位置変更を計算する際に、limit-clauseによって制限される現行のステータスを使用することを指定するには、limit-clauseにLIMITファンクションを指定します。

使用上の注意

LAGABSPCTで使用される計算式

結果を取得するために、LAGABSPCTは次の計算式を使用します。

(currentvalue - previousvalue) / ABS(previousvalue)

LAGABSPCTで使用される時系列の前の値がゼロの場合

LAGABSPCTによって使用される時系列の前の値がゼロである場合、LAGABSPCTが返す結果はDIVIDEBYZEROオプションによって決定されます。DIVIDEBYZEROの設定がNOであるときは、エラーが発生します。DIVIDEBYZEROの設定がYESであるときは、LAGABSPCTはNAを返します。

例

例8-2 LAGDIFとLAGABSPCTの使用方法

timeという名前の階層ディメンションおよびdistrict、productsという名前のディメンションによってディメンション化されるsalesという名前の変数があるとします。さらに、timeディメンションのレベルの名前(MonthおよびYear)を含むtimelevelsという名前のディメンション、およびtimeによってディメンション化されてtimelevelsの値を持つtimelevelrelという名前のリレーションがあります(つまり、timelevelrelの関連ディメンションはtimelevelsです)。

2000年1月と前年1月のダラスにおけるラケットの売上を比較するとします。LAGファンクションを使用して、前年の売上を表示します。LAGABSPCTファンクションを使用して、2つの月の差の割合を計算して変化の方向を示します。たとえば、売上が増加した場合、LAGABSPCTが返す差の割合は正の値です。売上が減少した場合、LAGABSPCTが返す差の割合は負の値です。

また、LAGPCTファンクションを使用すると、2つの年の差の割合を計算できます。LAGABSPCTによって返される値を100倍すると、パーセント・ポイントとして表示されます。

次の文

ALLSTAT
LIMIT product TO 'Racquets'
LIMIT district TO 'Dallas'
LIMIT time TO 'Jan2000'
REPORT DOWN time sales -
HEADING 'Last Jan' LAG(sales, 12, time, time LEVELREL timelevelrel)-
HEADING 'Lagdif' LAGDIF(sales, 12, time, time LEVELREL timelevelrel)-
HEADING 'Lagabspct' rset '%' d 0 LAGABSPCT(sales, 12, time, -
time LEVELREL timelevelrel) * 100

によって、次のレポートが生成されます。

DISTRICT: Dallas
------------------PRODUCT------------------
-----------------Racquets------------------
TIME           SALES      Last Jan   Lagdif     Lagabspct
-------------- ---------- ---------- ---------- ----------
Jan2000        125,879.86 118,686.75 7,193.11   6%

LAGDIF

LAGDIFファンクションは、ディメンションの現行値より前の指定されたオフセットの位置にあるディメンション化された変数または式の値と、ディメンション化された変数または式の現行値との差を返します。

関連項目:
「LAGDIFとLAGABSPCTの使用方法」

戻り値

DECIMAL、または時間ディメンションの最初の期間より前に相対位置変更しようとした場合はNA。

構文

LAGDIF(variable, n, dimension, [STATUS|NOSTATUS|limit-clause] )

パラメータ

variable

dimensionによってディメンション化される変数または式。

n

前に相対位置変更するオフセット(つまり、ディメンション値の数)。LAGDIFはこの値を使用して、変数の値を取得するためにLAGDIFがディメンションを戻るべき値の数を決定します。通常、nは、現行期間より前の期間(ディメンション値)の数を示す正のINTEGERです。nに負数の値を指定した場合、現行期間より後の期間の数を示します。この場合、LAGDIFは時系列の現行値をそれ以降の値と比較します。

dimension

前への相対位置変更が発生するディメンション。任意のディメンションを指定できますが、通常は、1つのレベル(月レベル、年レベルなど)に制限されているTEXT型の階層型時間ディメンション、またはDAY、WEEK、MONTH、QUARTER、YEARのいずれかの型のディメンションです。

variableにDAY、WEEK、MONTH、QUARTERまたはYEARの型のディメンションがあり、LAGDIFでそのディメンションを使用する場合、dimension引数は省略可能です。

STATUS

LAGDIFが前への相対位置変更を計算する際に、現行のステータス・リスト(つまり現在ステータスにあり、現行のステータスの順序に並んでいるディメンション値のみ)を使用することを指定します。

NOSTATUS

(デフォルト)LAGDIFが前への相対位置変更を計算する際に、デフォルト・ステータス(つまり元の順序に並んでいるすべてのディメンション値のリスト)を使用することを指定します。

limit-clause

LAGDIFが前への相対位置変更を計算する際に、limit-clauseによって制限されるデフォルト・ステータスを使用することを指定します。

limit-clauseの構文は、各種LIMITコマンドにおけるlimit-clause引数の構文(つまり、LIMITコマンドの「TO」などのlimit-type引数の後の構文)と同じです。これらの引数の構文については、LIMITコマンド(値を使用)、LIMITコマンド(LEVELRELを使用)、LIMIT(親リレーションを使用)、LIMITコマンド(関連ディメンションを使用)、LIMITコマンド(NOCONVERTを使用)およびLIMITコマンド(POSLISTを使用)を参照してください。

LAGが前への相対位置変更を計算する際に、limit-clauseによって制限される現行のステータスを使用することを指定するには、limit-clauseにLIMITファンクションを指定します。

例

LAGDIFの使用例は、例8-2「LAGDIFとLAGABSPCTの使用方法」を参照してください。

LAGPCT

LAGPCTファンクションは、ディメンションの現行値より前の指定されたオフセットの位置にあるディメンション化された変数または式の値と、ディメンション化された変数または式の現行値との差の割合を返します。

関連項目:
「LAGPCTの使用方法」

戻り値

DECIMAL、または時間ディメンションの最初の期間より前に相対位置変更しようとした場合はNA。

構文

LAGPCT(variable, n, [dimension], [STATUS|NOSTATUS|limit-clause] )

パラメータ

variable

dimensionによってディメンション化される変数または式。

n

前に相対位置変更するオフセット(つまり、ディメンション値の数)。LAGPCTはこの値を使用して、変数の値を取得するためにLAGPCTがディメンションを戻るべき値の数を決定します。通常、nは、現行期間より前の期間(ディメンション値)の数を示す正のINTEGERです。nに負数の値を指定した場合、現行期間より後の期間の数を示します。この場合、LAGPCTは時系列の現行値をそれ以降の値と比較します。

dimension

前への相対位置変更が発生するディメンション。いずれのディメンションも指定できますが、通常は、単一レベル(月や年のレベルなど)に制限されるTEXT型の階層時間ディメンション、あるいはDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションです。

variableにDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションがあり、LAGPCTでそのディメンションを使用する場合、dimension引数は省略可能です。

STATUS

LAGPCTが前への相対位置変更を計算する際に、現行のステータス・リスト(つまり現在ステータスにあり、現行のステータスの順序に並んでいるディメンション値のみ)を使用することを指定します。

NOSTATUS

(デフォルト)LAGPCTが前への相対位置変更を計算する際に、デフォルト・ステータス(つまり元の順序に並んでいるすべてのディメンション値のリスト)を使用することを指定します。

limit-clause

LAGPCTが前への相対位置変更を計算する際に、limit-clauseによって制限されるデフォルト・ステータスを使用することを指定します。

limit-clauseの構文は、各種LIMITコマンドにおけるlimit-clause引数の構文(つまり、LIMITコマンドの「TO」などのlimit-type引数の後の構文)と同じです。これらの引数の構文については、LIMITコマンド(値を使用)、LIMITコマンド(LEVELRELを使用)、LIMIT(親リレーションを使用)、LIMITコマンド(関連ディメンションを使用)、LIMITコマンド(NOCONVERTを使用)およびLIMITコマンド(POSLISTを使用)を参照してください。

LAGが前への相対位置変更を計算する際に、limit-clauseによって制限される現行のステータスを使用することを指定するには、limit-clauseにLIMITファンクションを指定します。

使用上の注意

LAGPCTで使用される計算式

結果を取得するために、LAGPCTは次の計算式を使用します。

(currentvalue - previousvalue) / previousvalue

LAGPCTで使用される時系列の前の値がゼロの場合

LAGPCTによって使用される時系列の以前の値がゼロである場合、LAGPCTが返す結果はDIVIDEBYZEROオプションによって決定されます。DIVIDEBYZEROの設定がNOであるときは、エラーが発生します。DIVIDEBYZEROの設定がYESであるときは、LAGPCTはNAを返します。

例

例8-3 LAGPCTの使用方法

timeという名前の階層ディメンションおよびdistrict、productsという名前のディメンションによってディメンション化されるsalesという名前の変数があるとします。さらに、timeディメンションのレベルの名前(MonthおよびYear)を含むtimelevelsという名前のディメンション、およびtimeによってディメンション化されてtimelevelsの値を持つtimelevelrelという名前のリレーションがあります(つまり、timelevelrelの関連ディメンションはtimelevelsです)。

LAGファンクションで1999年の値を表示して、ダラスにおける2000年と1999年のラケットの売上を比較できます。LAGPCTファンクションを使用して、2つの年の差の割合を計算します。LAGPCTによって返される値を100倍してパーセント記号を付け、パーセント・ポイントとして差を表示します。

ALLSTAT
LIMIT product TO 'Racquets'
LIMIT district TO 'Dallas'
LIMIT TIME TO '2000'
REPORT DOWN time sales HEADING 'Last Year' -
LAG(sales, 1, time, time LEVELREL timelevelrel)-
HEADING 'LAGPCT (Decimal Format)' -
LAGPCT(sales, 1, time LEVELREL timelevelrel) -
HEADING 'LAGPCT (Percent Format)' rset '%' -
LAGPCT(sales, 1, time LEVELREL timelevelrel) * 100

によって、次のレポートが生成されます。

DISTRICT: Dallas
------------------PRODUCT------------------
-----------------racquets------------------
LAGPCT     LAGPCT
(Decimal   (Percent
TIME           SALES      Last Year  Format)    Format)
-------------- ---------- ---------- ---------- ----------
2000           93,000,003 89,000,891 0.04       4.49%

LARGEST

LARGESTファンクションは、式の最大値を返します。このファンクションを使用して、数値または日付値を比較できます。

戻り値

式のデータ型。INTEGER、LONGINT、DECIMALまたはDATEになります。

構文

LARGEST(expression [CACHE] [dimension...])

パラメータ

expression

最大値が返される式。

CACHE

内部動作が若干変更されます。このキーワードは、元のパフォーマンスが非常に遅い場合にのみ指定してください。

dimension

結果のディメンションの名前。または、expressionの1つのディメンションと結果のディメンションとする別のディメンションとの間のリレーションの名前。

デフォルトでは、LARGESTは単一の値を返します。結果に対し1つ以上のディメンションを指定すると、LARGESTは、指定されたディメンションに対して値をテストし、値の配列を返します。各ディメンションは、expressionのディメンションであるか、そのディメンションの1つと関連している必要があります。

ヒント:
指定したディメンションがexpressionの実際のディメンションではなくexpressionのディメンションに関連付けられたディメンションであり、かつ2つのディメンション間のリレーションが2つ以上ある場合は、ディメンション間のデフォルトのリレーションを使用して計算が行われます。(デフォルトのリレーションの詳細は、RELATIONコマンドを参照してください。)Oracle OLAPでこのデフォルトのリレーションを使用しない場合は、リレーションの名前を指定して、関連付けられたディメンションを指定します。

使用上の注意

NA値とLARGEST

LARGESTは、他の集計ファンクションと同様に、NASKIPオプションの影響を受けます。NASKIPの設定がYESの場合(デフォルト)、LARGESTはNA値を無視し、最大値または非NA値を返します。NASKIPの設定がNOの場合、式のいずれかの値がNAであるときにLARGESTはNAを返します。式のすべての値がNAの場合は、NASKIPの設定にかかわらず、LARGESTはNAを返します。

DWMQYディメンションによってディメンション化された式を使用するLARGESTの使用

expressionがDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションによってディメンション化されている場合、それ以外のDAY、WEEK、MONTH、QUARTERまたはYEARディメンションを関連dimensionとして指定できます。Oracle OLAPでは、ディメンション間の暗黙的なリレーションを使用します。1つのDAY、WEEK、MONTH、QUARTERまたはYEARディメンションと別のディメンションとのマッピング(たとえば週から月)を制御するには、2つのディメンション間に明示的リレーションを定義し、そのリレーションの名前をLARGESTファンクションのdimension引数として指定します。

関連ディメンションの各期間に対して、Oracle OLAPはターゲット期間で終わるすべてのソース期間で最大のデータ値を検索します。この方法は、どのディメンションに上位の集計期間があるかに関係なく使用されます。

例

例8-4 最大月間売上の検索

この例では、LARGESTファンクションを使用して、1996年前半の各地区におけるスポーツウェアの最大月間売上を検索します。地区ごとの最大売上高を表示するために、結果のディメンションとしてdistrictを指定します。

LIMIT product TO 'Sportswear'
LIMIT month TO 'Jan96' TO 'Jun96'
REPORT HEADING 'Largest Sales' LARGEST(sales district)

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

Largest
DISTRICT         Sales
-------------- ----------
Boston          79,630.20
Atlanta        177,967.49
Chicago        112,792.78
Dallas         175,716.31
Denver          97,236.88
Seattle         60,322.88

LAST_DAY

LAST_DAYファンクションは、特定の日付が該当する月の最終日を返します。

戻り値

DATETIME

構文

LAST_DAY(datetime-expression)

パラメータ

datetime-expression

データ型がDATETIMEの式。

例

例8-5 月の残り日数の計算

次の文は、今日の日付とその月の最終日から残り日数を計算します。

SHOW JOINCHARS('Days left: ' LAST_DAY(SYSDATE) - SYSDATE)

今日の日付が2000年9月8日だとすると、この文によって返される結果は次のとおりです。

Days left: 22

LEAD

LEADファンクションは、ディメンションの現行値より後の指定されたオフセットの位置にある、ディメンション化された変数または式の値を返します。通常、将来の期間の値を取得するためにLEADファンクションを使用します。

戻り値

variable引数のデータ型、または時間ディメンションに定義されている最後の期間を超えて値を取得しようとした場合はNA。

構文

LEAD(variable, n, [time-dimension], [[STATUS|NOSTATUS|limit-clause] )

パラメータ

variable

dimensionによってディメンション化される変数または式。

n

後ろに相対位置変更するオフセット(つまり、ディメンション値の数)。LEADはこの値を使用して、変数の値を取得するためにLEADがディメンションで進むべき値の数を決定します。異なるディメンション・ステータスを指定するためにSTATUSキーワードまたはlimit-clause引数を使用していないかぎり、LEADはこの値をカウントするためにデフォルト・ステータスを使用します。

通常、nは、現行期間より後の期間(ディメンション値)の数を示す正のINTEGERです。nに負数の値を指定した場合、現行期間より前の期間の数を示します。つまり、nに負数の値を使用すると、LEADはLAGファンクションになります。

注意:
モデルでLEADを使用する場合は、Oracle OLAPがモデルを解決する際に連立ブロックが使用されないよう、「一方向のディメンション依存の保証」を参照して、nの値をコーディングする方法を確認してください。

dimension

後ろへの相対位置変更が発生するディメンション。任意のディメンションを指定できますが、通常は、1つのレベル(月レベル、年レベルなど)に制限されているTEXT型の階層型時間ディメンション、またはDAY、WEEK、MONTH、QUARTER、YEARのいずれかの型のディメンションです。

variableにDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションがあり、LEADでそのディメンションを使用する場合、dimension引数は省略可能です。

STATUS

LEADが後ろへの相対位置変更を計算する際に、現行のステータス・リスト(つまり現在ステータスにあり、現行のステータスの順序に並んでいるディメンション値のみ)を使用することを指定します。

NOSTATUS

LEADが後ろへの相対位置変更を計算する際に、デフォルト・ステータス(つまり元の順序に並んでいるすべてのディメンション値のリスト)を使用することを指定します。

limit-clause

LEADが後ろへの相対位置変更を計算する際に、limit-clauseによって制限されるデフォルト・ステータスを使用することを指定します。

limit-clauseの構文は、各種LIMITコマンドにおけるlimit-clause引数の構文(つまり、LIMITコマンドの「TO」などのlimit-type引数の後の構文)と同じです。これらの引数の構文については、LIMITコマンド(値を使用)、LIMITコマンド(LEVELRELを使用)、LIMIT(親リレーションを使用)、LIMITコマンド(関連ディメンションを使用)、LIMITコマンド(NOCONVERTを使用)およびLIMITコマンド(POSLISTを使用)を参照してください。

LAGが前への相対位置変更を計算する際に、limit-clauseによって制限される現行のステータスを使用することを指定するには、limit-clauseにLIMITファンクションを指定します。

例

例8-6 LEADの使用方法

TEXT型の3つのディメンション(product、districtおよびtime)によってディメンション化されるsales変数があるとします。timeディメンションは次の値を持つ階層ディメンションです。

1999
2000
Jan1999
Feb1999
...
Dec1999
Jan2000
Feb2000
...
Dec2000

さらに、timeディメンションのレベルの名前(MonthおよびYear)を含むtimelevelsという名前のディメンション、およびtimeによってディメンション化されてtimelevelsの値を持つtimelevelrelという名前のリレーションがあります(つまり、timelevelrelの関連ディメンションはtimelevelsです)。timelevelrelのレポートによって、次の関係が示されます。

TIME           TIMELEVELREL
-------------- ------------
1999           Year
2000           Year
Jan1999        Month
Feb1999        Month
...            ...
Dec1999        Month
Jan2000        Month
Feb2000        Month
...            ...
Dec2000        Month

1999年の最初の2か月間のダラスにおけるラケットの売上を、2000年の対応する月と比較するとします。LEADファンクションを使用して、2000年の値を1999年の値とともに同じレポートに生成します。次の文

LIMIT product TO 'Racquets'
LIMIT district TO 'Dallas'
LIMIT time TO 'JAN1999' 'FEB1999'
REPORT DOWN time sales HEADING 'Following Year' LEAD(sales, 12, time, time LEVELREL timelevelrel)

によって、次のレポートが生成されます。

DISTRICT: DALLAS
-------PRODUCT-------
------RACQUETS-------
TIME           SALES      Following Year
-------------- ---------- ---------------------
Jan2000        118,686.75 125,879.86
Feb2000        142,305.99 150,833.64

LEAST

LEASTファンクションは、式のリストで最小の式を返します。最初の式より後の式はすべて、比較の前に最初の式のデータ型に暗黙的に変換されます。

式のリストで最大の式を検索するには、GREATESTを使用します。

戻り値

最初の式のデータ型

構文

LEAST (expr [, expr]...)

パラメータ

expr

式。

例

例8-7 アルファベット順で最初であるテキスト式の検索

次の文では、アルファベット順で最初である文字列が返されます。

SHOW LEAST('Harry','Harriot','Harold')
Harold

例8-8 最小の数式の検索

次の文は、最小の数値を選択します。

SHOW LEAST (5, 3, 18)
3

LENGTHファンクション

LENGTHファンクション群は、後続の空白を含めたテキスト式の長さを返します。lengthは、入力キャラクタ・セットによって定義されたキャラクタを使用して長さを計算します。LENGTHBは、文字のかわりにバイトを使用します。LENGTHCは、完全なUnicodeキャラクタを使用します。

戻り値

NUMBER、または式が空の文字列かNAである場合はNA。

構文

{ LENGTH | LENGTHB | LENGTHC}(char)

パラメータ

char

テキスト式。

LIMITファンクション

LIMITファンクションは、指定したLIMITコマンドまたは指定したディメンション・ステータス・スタックの結果として得られたディメンションまたはディメンション・サロゲート値を返すファンクションです。ディメンションとその任意のディメンション・サロゲートは、同じステータスを共有します。LIMITファンクションによって、ディメンションまたは値セットのステータスが変更されることはありません。

関連項目:
LIMITコマンド

戻り値

戻り値は、ファンクションの使用方法とINTEGERキーワードの指定の有無によって異なります。

- 値セットを必要とするOLAP DML文(ユーザー定義コマンドまたはユーザー定義ファンクションを含む)の引数としてLIMITファンクションを使用すると、値セットが返されます。

- 空の値セットの場合、LIMITファンクションはその値セットとしてNULLステータスを返します。

- それ以外の場合、LIMITファンクションにINTEGERキーワードが指定されているかどうかによって、TEXT値またはINTEGER値が返されます。TEXT値が空のステータスの場合、NAを返します。

構文

LIMITファンクションの構文は、ディメンションまたはディメンション・サロゲートの値を、指定したLIMITコマンドから取得するか、あるいは指定したディメンション・ステータス・スタックから取得するかによって異なります。

LIMITコマンドから値を取得する場合の構文

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

[limit-clause] [IFNONE label])

ディメンション・ステータス・スタックから値を取得する場合の構文

LIMIT([INTEGER] dimension  STATDEPTH stack-position] [IFNONE label])

パラメータ

dimension

この引数の詳細は、LIMITコマンドを参照してください。

valueset

この引数の詳細は、LIMITコマンドを参照してください。

LIMIT_function

別のLIMITファンクション。

注意:
このようにLIMITファンクションの中にLIMITファンクションを入れてネストする場合、最も内側にあるLIMITファンクションの最初の引数はディメンションまたは値セットである必要があります。「LIMITファンクションのネスト」も参照してください。

concat-component

この引数の詳細は、LIMITコマンドを参照してください。

limit-type

この引数の詳細は、LIMITコマンドを参照してください。

limit-clause

制限に使用する値を指定します。制限句には、いくつかの種類があり、たとえば、値(または値セット)を使用した制限の指定に使用できる制限句や、関連ディメンションを使用した制限の指定に使用できる制限句です。これらの制限句にはそれぞれ複雑な構文があります。構文が複雑なため、各種の制限句の構文を次の各項で個別に紹介します。

LIMITコマンド(値を使用)

LIMITコマンド(LEVELRELを使用)

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

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

LIMITコマンド(NOCONVERTを使用)

LIMITコマンド(POSLISTを使用)

これらの各LIMITコマンドの構文で、limit-type引数の後に続く構文の一部がlimit-clauseです。

INTEGER
INTEGERキーワードを使用すると、デフォルトのディメンション・ステータス内の値は、名前ではなく位置番号で返されます。値セットでINTEGERを使用すると、デフォルトのディメンション・ステータス内の値は、値セットではなく位置番号で返されます。

STATDEPTH
指定したディメンションのステータス・リスト・スタックのステータス・リスト値を取得するように指定します。

stack-position
値の取得元のステータス・リスト・スタックの位置を指定するINTEGER値。値を指定する際の注意点は次のとおりです。

- 0から1-STATDEPTH(dimension)の値を指定すると、上(現行ステータス)から下(最も古いステータス)にスタック値が取得されます。

- 1からSTATDEPTH(dimension)の値を指定すると、スタックの下(最も古いステータス)からスタックの上(現行ステータス)にスタック値が取得されます。

ステータス・リスト・スタックの詳細は、STATDEPTHファンクションを参照してください。

使用上の注意

LIMITファンクションのネスト

次の構文を使用してLIMITファンクションをネストすると、同じディメンションに対する複数のLIMITコマンドの結果が返されます。

LIMIT (LIMIT (LIMIT (lim-exp1) lim-exp2) lim-exp3)

このネストされた構造を使用して、一連のLIMITコマンドのステータスが確認できます。たとえば、次にいくつかのLIMITコマンドを示します。

LIMIT product TO division 'Camping'
LIMIT product KEEP -
EVERY(sales GT 50000, product)
LIMIT product KEEP FIRST 1

先行するLIMITコマンドのステータスを表示するには、次の文を実行します。

REPORT LIMIT(LIMIT(LIMIT(product TO -
division 'Camping') KEEP EVERY -
(sales GT 50000, product))KEEP FIRST 1)

連結ディメンションのコンポーネントを使用した制限

次の文によって、連結ディメンションを、そのコンポーネントのディメンションに対する現行のステータスの1つに制限できます。

LIMIT(reg.dist.ccdim TO district)

また、次の文によって、連結ディメンションを、そのコンポーネントのディメンションの一連の値に制限できます。

LIMIT(reg.dist.ccdim TO district 'Boston' 'Chicago' 'Seattle')

多次元の結果

LIMITファンクションで多次元の式を評価すると、多次元の結果が返されます。次の例では、sales変数にproduct、districtおよびmonthという3つのディメンションがあります。

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

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

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

生成したレポートに示されているステータスで、売上が$90,000を超えている製品のリストを取得するとします。LIMITファンクションを使用して製品売上額を月と地区の各組合せで評価し、ステータスにある月と地区でディメンション化したリストを作成します。

REPORT limit (product TO sales GT 90000)文によって生成される出力は、次のとおりです。

---LIMIT (PRODUCT TO SALES GT---
-------------90000)-------------
-------------MONTH--------------
DISTRICT    Jan95      Feb95      Mar95
--------- ---------- ---------- ----------
Boston    Footwear   NA         Canoes
Footwear

例

例8-9 多次元の結果を返す場合

この例では、BostonおよびAtlantaにおいて、1995年の最初の2か月間に売上が$50,000を超えた製品のレポートを出力します。LIMITファンクションの結果は、多次元の結果になります。

次の文

LIMIT month TO 'Jan95' 'Feb95'
LIMIT district TO 'Boston' 'Atlanta'
LIMIT product TO ALL
REPORT LIMIT (product TO sales GT 50000)

によって、次のレポートが生成されます。

--LIMIT (PRODUCT TO--
---SALES GT 50000)---
--------MONTH--------
DISTRICT         JAn95      Feb95
-------------- ---------- ----------
Boston         Canoes     Canoes
Racquets   Racquets
Sportswear Sportswear
Footwear   Footwear
Atlanta        Racquets   Canoes
Sportswear Racquets
Footwear   Sportswear
Footwear

例8-10 LIMITファンクションを使用するLIMITコマンド

次の例は、LIMITファンクションをLIMITコマンドの引数として使用する例です。LIMITファンクションの結果は値セットに変換されます。

ALLSTAT
LIMIT month TO LIMIT (LIMIT (month TO LAST 10) KEEP FIRST 3)

LIMIT文を実行した後、STATUS month文によって生成される出力は、次のとおりです。

The current status of MONTH is:
MAR97 TO MAY97

LIMITMAPINFO

LIMITMAPINFOファンクションは、指定した制限マップでデータをリレーショナル表の指定列にマップする際に使用されるアナリティック・ワークスペース式を返すファンクションです。

戻り値

TEXT式

構文

LIMITMAPINFO ([aw], limit-map, column-name)

パラメータ

aw

アナリティック・ワークスペース・オブジェクトを含むアナリティック・ワークスペースの名前。

limit-map

テキスト式としての制限マップ。

column-name

limit-mapで指定されるリレーショナル表の列の名前。

例

例8-11 ディメンションの名前の取得

mylimitmapという名前のテキスト変数を含むmyawという名前のアナリティック・ワークスペースがあるとします。mylimitmapテキスト変数は、アナリティック・ワークスペース・データの一部をet_productという列でリレーショナル表にマップする制限マップです。

MEASURE sales FROM aw_f.sales
DIMENSION et_chan FROM aw_channel WITH
HIERARCHY aw_channel.parent
GID gid_chan FROM aw_channel.gid
DIMENSION et_prod FROM aw_product WITH
HIERARCHY aw_product.parent
GID gid_prod FROM aw_prod.gid
DIMENSION et_geog FROM aw_geography WITH
HIERARCHY aw_geography.parent
GID gid_geog FROM aw_geog.gid
DIMENSION et_time FROM aw_time WITH
HIERARCHY time.parent
GID gid_time FROM aw_time.gid

et_prod列のデータの抽出元となるアナリティック・ワークスペース・オブジェクトの名前を取得するには、次のOLAP DML文を発行します。

show LIMITMAPINFO ('myaw', mylimitmap, 'et_prod')

et_prod列はaw_productディメンションにマップされているため、次の値が表示されます。

aw_product

LNNVL

LNNVLファンクションは、条件のオペランドの片方または両方がNULLの可能性がある場合に、条件を簡単に評価する方法を提供します。LNNVLは、スカラー式を指定できる場所であればどこでも指定でき、有効ではないが発生する可能性があるNULLを評価するためにIS [NOT] NULL、ANDまたはOR条件が必要であるようなコンテキストでも指定できます。

戻り値

条件が偽または不明である場合はTRUE、条件が真である場合はFALSE。

構文

LNNVL(condition)

パラメータ

condition

スカラー値で構成された式。AND、ORまたはBETWEENを含む式は指定できません。

例

例8-12 LNNVLを使用した式の評価

SHOW LNNVL('apples' EQ 'oranges')
yes

SHOW LNNVL(7 LT 11)
no

SHOW LNNVL('vegetables' EQ NA)
yes

LOCALTIMESTAMP

LOCALTIMESTAMPファンクションは、セッションのタイムゾーンでの現在の日時をTIMESTAMPデータ型の値として返します。

セッションのタイムゾーンにおける現在の日時をTIMESTAMP_TZ値として取得する場合は、CURRENT_TIMESTAMPファンクションを使用してください。

戻り値

TIMESTAMP

構文

LOCALTIMESTAMP [ (timestamp-precision) ]

ARGUMENTS

timestamp-precision

返される時間値の秒の小数精度を指定します。

例

例8-13 ローカルのタイムスタンプの取得

SHOW LOCALTIMESTAMP
13-FEB-07 12.11.33.454834 PM

LOGファンクション

LOGファンクションは、式の対数を計算するファンクションです。

注意:
LOGファンクションを、ログ・ファイルを作成する同名の機能と混同しないでください。

戻り値

DECIMAL

構文

LOG([base,] expression)

パラメータ

base

対数の計算に使用する底。値を指定しない場合、このファンクションは底にeを使用して式の自然対数を計算しますが、ここで、eは2.718281828459に相当します。

expression

ゼロより大きな数式。値がゼロ以下の場合、LOGはNA値を返します。

例

例8-14 自然対数の計算

この例では、LOGファンクションを使用して、式4,000 + 6,000の自然対数を計算します。次の文

DECIMALS = 5
SHOW LOG(4000 + 6000)

によって、次の結果が生成されます。

9.21034

LOG10

LOG10ファンクションは、式の10を底とする対数を計算するファンクションです。

戻り値

DECIMAL

構文

LOG10(expression)

パラメータ

expression

expressionには、ゼロより大きい値を指定する必要があります。値が0(ゼロ)以下の場合、LOG10はNA値を返します。

例

例8-15 10を底とする対数の計算

この例では、LOG10ファンクションを使用して、1,000の10を底とする対数を計算します。次の文

SHOW LOG10(1000)

によって、次の結果が生成されます。

3.00

LOWCASE

LOWCASEファンクションは、テキスト式内のすべてのアルファベット文字を小文字に変換するファンクションです。

戻り値

TEXTまたはNTEXT

式がTEXTの場合、戻り値はTEXTになります。式がNTEXTの場合、戻り値はNTEXTになります。

構文

LOWCASE(text-expression)

パラメータ

text-expression

変換の対象となる文字が存在するテキスト式。

例

例8-16 式の一部を小文字に変換する方法

メーリング・リストに追加する新しいデータをいくつか入手したとします。既存のメーリング・リストでは、受信者の名前は先頭文字のみが大文字です。一方、新しいデータは、名前全体が大文字になっています。この場合、次のような文でLOWCASEを使用して、新しいデータを現行のデータに対応したデータにします。

lastname = JOINCHARS(EXTCHARS(lastname, 1, 1), -
LOWCASE(EXTCHARS(lastname, 2, NUMCHARS(lastname))))

LOWER

LOWERファンクションは、テキスト式内のすべてのアルファベット文字を小文字に変換するファンクションです。

戻り値

text-expressionのデータ型。

関連項目:
『Oracle Database SQL言語リファレンス』のLOWERファンクションに関する項

構文

LOWER(text-expression)

パラメータ

text-expression

変換の対象となる文字が存在するテキスト式。

LPAD

LPADファンクションは、式を返す際、指定した長さになるように指定した文字を左側に埋め込むファンクションです。また、文字が埋め込まれる式がすでに指定した長さよりも長い場合は、指定した長さまでの部分を返します。

テキスト式の右側に文字を埋め込むには、RPADを使用します。

戻り値

文字を埋め込む式(text-exp)のデータ型に応じてTEXTまたはNTEXT

構文

LPAD (text-exp , length [, pad-exp])

パラメータ

text-exp

埋め込むテキスト式。

length

画面に表示される戻り値の全長。ほとんどのキャラクタ・セットでは、戻り値の文字数です。ただし、一部のマルチバイト・キャラクタ・セットでは、文字列の表示長はその文字列の文字数と異なることがあります。

text-expの長さよりも短い値をlengthに指定すると、指定した長さの部分のみが返されます。

pad-exp

埋込み文字を指定するテキスト式。pad-expのデフォルト値は単一の空白です。

例

例8-17 文字列の左側への埋込み

次の例では、文字「*」と「.」を文字列の左に埋め込みます。

SHOW LPAD('Page 1',15,'*.')
*.*.*.*.*Page 1

LTRIM

LTRIMファンクションは、テキスト式の左側から、別のテキスト式で示す文字をすべて削除するファンクションです。このファンクションは、基準のテキスト式を最初の文字からスキャンし、トリム式にあるすべての文字をトリム式にない文字が見つかるまで削除し、その結果を返します。

後続の文字には、RTRIMを使用します。先行および後続の両方の文字をトリミングするには、TRIMを使用します。

戻り値

最初の引数のデータ型に応じてTEXTまたはNTEXT

構文

LTRIM (text-exp [, trim-exp])

パラメータ

text-exp

文字をトリミングするテキスト式。

trim-exp

削除する文字を示すテキスト式。trim-expのデフォルト値は単一の空白です。

例

例8-18 左側にある文字のトリミング

次の例は、文字列から左側にあるすべてのxおよびyをトリミングします。

SHOW LTRIM('xyxxxyLast Word','xy')
Last Word

MAKEDATE

MAKEDATEファンクションは、年、月および日の指定したINTEGER値に対応するDATE値を返すファンクションです。

戻り値

DATEまたはテキスト

構文

MAKEDATE(year month day)

パラメータ

year

テスト日付の年を表すINTEGER式。どの年についても、1000から9999までの4桁数字で指定できます。1950年から2049年までの範囲(デフォルト)またはそれ以外の範囲(YRABSTARTオプションで指定した範囲)の年については、年の下2桁を表す2桁の数字でも指定できます(たとえば、1996年は96など)。

month

通常は1から12までの範囲の任意のINTEGER式。1より小さいINTEGERまたは12より大きいINTEGERを指定すると、MAKEDATEでは、yearのINTEGER式に指定されている年を基準に1年前または1年後の日付を返します。

たとえば、MAKEDATEの引数が(97 14 21)の場合、1997年の14か月目は実際には1998年の2月なので、日付February 21, 1998が返されます。

day

1から31までの範囲のINTEGER式。

使用上の注意

MAKEDATEから返される結果の書式

MAKEDATEから返された結果を表示する場合、日付はDATEFORMATオプションの日付テンプレートに基づいて書式化されます。曜日や月の名前を日付テンプレートで使用している場合は、DAYNAMESオプションで指定した曜日の名前や、MONTHNAMESオプションで指定した月の名前が使用されます。MAKEDATEから返される結果は、DATE値を指定する場所であればどこででも使用できます。

無効な日付

MAKEDATEに対する引数が、1000年1月1日から9999年12月31日までの範囲の有効な日付を表すものではない場合、NA値が返されます。

例

例8-19 整数から日付への変換

次の文では、日付書式を指定し、出力を現行の出力ファイルに送信します。

DATEFORMAT = '<mtextl> <d>, <yyyy>'
SHOW MAKEDATE(97 11 14)

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

November 14, 1997

例8-20 YYOR、MMOFおよびDDOFファンクションを使用した日付の計算

次の文では、今日の日付から1年後の日付を計算し、出力を現行の出力ファイルに送信します。TODAYファンクションは、今日の日付を返します。INTEGERファンクションYYOF、MMOFおよびDDOFは、今日の日付に相当する年、月、日のINTEGER値を返します。

SHOW MAKEDATE(YYOF(TODAY) + 1 MMOF(TODAY) DDOF(TODAY))

今日の日付が1995年1月15日だとすると、この文によって生成される出力は次のとおりです。

January 15, 1996

MAX

MAXファンクションは、2つの式を比較して大きいほうの値を計算するファンクションです。

戻り値

DECIMAL。MAXの結果は、2つの式のディメンションの結合によってディメンション化されます。

構文

MAX(expression1, expression2)

パラメータ

expression1

比較する一方の式。

expression2

比較するもう一方の式。

例

例8-21 実績額と予算額のどちらが大きいかを比較する計算

1996年の最初の6か月それぞれについて、Sporting部門の売上原価(Cogs)明細項目でactual値とbudget値のどちらが大きいかを確認するとします。

LIMIT line TO 'Cogs'
LIMIT division TO 'Sporting'
LIMIT month TO 'Jan96' TO 'Jun96'
REPORT DOWN month actual budget MAX(actual budget)

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

DIVISION: SPORTING
--------------LINE--------------
--------------COGS--------------
MAX
(ACTUAL
MONTH            ACTUAL     BUDGET    BUDGET)
-------------- ---------- ---------- ----------
Jan96          287,557.87 279,773.01 287,557.87
Feb96          315,298.82 323,981.56 323,981.56
Mar96          326,184.87 302,177.88 326,184.87
Apr96          394,544.27 386,100.82 394,544.27
May96          449,862.25 433,997.89 449,862.25
Jun96          457,347.55 448,042.45 457,347.55

MAXBYTES

MAXBYTESファンクションは、複数行のテキスト式の最も長い行のバイト数をカウントするファンクションです。MAXBYTESによって返される結果のディメンションは、指定した式のディメンションと同じです。

戻り値

INTEGER

構文

MAXBYTES(text-expression)

パラメータ

text-expression

各行のバイト数がカウントされるTEXT式。

例

例8-22 バイト数を使用した最も長い行の長さの確認

mytextというテキスト変数の最も長い行の長さを確認するとします。次の例では、変数の値およびMAXBYTESによって返される結果が示されています。

次の文

SHOW mytext

によって、次の出力が生成されます。

This is a multiline text variable.
The longest line is this one in the middle.
The third line is short.

次の文

SHOW MAXBYTES(mytext)

によって、次の出力が生成されます。

43

MAXCHARS

MAXCHARSファンクションは、複数行のテキスト式の最も長い行の文字数をカウントするファンクションです。MAXCHARSによって返される結果のディメンションは、指定した式のディメンションと同じです。

ヒント:
マルチバイト・キャラクタ・セットを使用している場合、MAXCHARSファンクションのかわりにMAXBYTESファンクションを使用できます。

戻り値

INTEGER

構文

MAXCHARS(text-expression)

パラメータ

text-expression

各行の文字数がカウントされるテキスト式。MAXCHARSは、TEXT引数またはNTEXT引数を受け入れます。どちらのデータ型にも自動変換は行われません。指定した引数のデータ型に対応した情報が返されます。

例

例8-23 文字数を使用した最も長い行の長さの確認

mytextというテキスト変数の最も長い行の長さを確認するとします。次の例では、変数の値およびMAXCHARSによって返される結果が示されています。

次の文

SHOW mytext

によって、次の出力が生成されます。

This is a multiline text variable.
The longest line is this one in the middle.
The third line is short.

次の文

SHOW MAXCHARS(mytext)

によって、次の出力が生成されます。

43

MEDIAN

MEDIANファンクションは、式の値の中央値を計算するファンクションです。中央値とは、特定の数列で真中に位置する値のことです。

戻り値

DECIMAL

構文

MEDIAN(expression [CACHE] [dimension...])

パラメータ

expression

中央値が計算される式。

CACHE

内部動作が若干変更されます。このキーワードは、元のパフォーマンスが非常に遅い場合にのみ指定してください。

dimension

結果のディメンションの名前。または、expressionの1つのディメンションと結果のディメンションとする別のディメンションとの間のリレーションの名前。

デフォルトでは、MEDIANファンクションの戻り値は単一の値になります。結果に対し1つ以上のディメンションを指定すると、MEDIANは、指定されたディメンションに対して値を計算し、値の配列を返します。各ディメンションは、expressionのディメンションであるか、そのディメンションの1つと関連している必要があります。

ヒント:
指定したディメンションがexpressionの実際のディメンションではなくexpressionのディメンションに関連付けられたディメンションであり、かつ2つのディメンション間のリレーションが2つ以上ある場合は、ディメンション間のデフォルトのリレーションを使用して計算が行われます。(デフォルトのリレーションの詳細は、RELATIONコマンドを参照してください。)Oracle OLAPでこのデフォルトのリレーションを使用しない場合は、リレーションの名前を指定して、関連付けられたディメンションを指定します。

使用上の注意

NA値とMEDIAN

MEDIANは、他の集計ファンクションと同様に、NASKIPオプションの影響を受けます。NASKIPがYESに設定されている場合(デフォルト)、MEDIANはNA値を無視し、NA値以外の中央値を返します。NASKIPがNOに設定されている場合、MEDIANは式の値のいずれかがNAのときに、NAを返します。式のすべての値がNAの場合、NASKIPの設定にかかわらず、MEDIANはNAを返します。

例

例8-24 月別売上の中央値の計算

この例では、スポーツウェアの月間売上の中央値を販売地区別に計算する方法を示します。

LIMIT product TO 'Sportswear'
REPORT W 12 HEADING 'Median Sales' MEDIAN(sales district)

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

DISTRICT          Median Sales
----------------- ------------
Boston               67,923.05
Atlanta             152,186.52
Chicago              94,372.06
Dallas              160,854.60
Denver               86,745.40
Seattle              53,950.28

MIN

MINファンクションは、2つの式を比較して小さいほうの値を算出するファンクションです。

戻り値

DECIMAL。MINの結果は、2つの式のディメンションの結合によってディメンション化されます。

構文

MIN(expression1, expression2)

パラメータ

expression1

比較する一方の式。

expression2

比較するもう一方の式。

例

例8-25 実積額と予算額のどちらが小さいかを比較する計算

1996年の最初の6か月それぞれについて、Sporting部門の売上原価(Cogs)明細項目でactual値とbudget値のどちらが小さいかを確認するとします。

LIMIT line TO 'Cogs'
LIMIT division TO 'Sporting'
LIMIT month TO 'Jan96' TO 'Jun96'
REPORT DOWN month actual budget MIN(actual budget)

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

DIVISION: SPORTING
--------------LINE--------------
--------------COGS--------------
MIN
(ACTUAL
MONTH            ACTUAL     BUDGET    BUDGET)
-------------- ---------- ---------- ----------
Jan96          287,557.87 279,773.01 279,773.01
Feb96          315,298.82 323,981.56 315,298.82
Mar96          326,184.87 302,177.88 302,177.88
Apr96          394,544.27 386,100.82 386,100.82
May96          449,862.25 433,997.89 433,997.89
Jun96          457,347.55 448,042.45 448,042.45

MMOF

MMOFファンクションは、指定した日付に該当する月を1から12までの範囲のINTEGERで返すファンクションです。MMOFによって返される結果のディメンションは、指定したDATE式のディメンションと同じです。

戻り値

INTEGER

構文

MMOF(date-expression)

パラメータ

date-expression

DATEデータ型の式、または日付を指定するテキスト式。テキスト式の値は自動的にDATE値へ変換され、指定した値が不明瞭な場合は、DATEORDERオプションの現行の設定を使用して値が解決されます。

例

例8-26 現在の月の検索

次の文で、今日の日付が当てはまる月を確認します。

SHOW MMOF(TODAY)

たとえば、今日の日付が1996年1月15日の場合、この文によって生成される出力は次のとおりです。

1

MODE

MODEファンクションは、数式のモード(最も頻繁に発生する値)を返すファンクションです。データに重複する値がない場合、MODEはNAを返します。

戻り値

DECIMAL

構文

MODE(expression [CACHE} [dimensions])

パラメータ

expression

モードが計算される数式。

CACHE

内部動作が若干変更されます。このキーワードは、元のパフォーマンスが非常に遅い場合にのみ指定してください。

dimensions

結果のディメンション。ディメンションを指定しない場合、MODEによってexpressionのすべてのディメンションでモードが計算され、単一の値が返されます。dimension引数に1つ以上のディメンション(ただし、expressionのすべてのディメンションよりも少ない数のディメンション)を指定すると、指定したディメンションの各値についてのモードが計算され、値の配列が返されます。各ディメンションは、expressionのディメンションである必要があります。

使用上の注意

MODEでのNASKIPの影響

MODEはNASKIPオプションに影響されません。

重複値の複数のセット

式で最も頻繁に発生する値として評価された値が複数存在する場合、MODEによって値がソートされ、最も小さい値が返されます。たとえば、一連のデータ{4,5,2,3,7,4,6,2,1}の場合、2と4はどちらも2回出現していますが、このデータのモードは2になります。

例

例8-27 モードのレポート

この例では、次のように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

- 次の文を使用して、geographyディメンションで計算したモードをレポートします。

REPORT W 22 MODE(sales2, geography)

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

MODE(SALES2,
GEOGRAPHY            GEOGRAPHY)
-------------- ----------------------
g1                              30.00
g2                              20.00
g3                                 NA

- 次の文を使用して、itemsディメンションで計算したモードをレポートします。

REPORT W 18 MODE(sales2, items)

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

MODE(SALES2,
ITEMS                ITEMS)
-------------- ------------------
Item1                          NA
Item2                          NA
Item3                          NA
Item4                       25.00
ITEM5                          NA

- 次の文を使用して、sales2変数のすべてのディメンションで計算したモードをレポートします。

REPORT MODE(sales2)

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

Mode
----
15

MODULO

MODULOファンクションは、SQL MODファンクションと同様に、ある数値を別の数値で除算したときの剰余を返します。除数が0(ゼロ)の場合は、当該数値を返します。

戻り値

数値。

最も大きな数値の引数が優先され、その引数のデータ型と同じデータ型に残りの引数も暗黙的に変換されて、そのデータ型で戻り値が返されます。

構文

MOD(dividend, divisor)

パラメータ

dividend

除算の対象とする数式(またはOracle OLAPで暗黙的に数式へと変換できる式)。

divisor

除数とする数式(またはOracle OLAPで暗黙的に数式へと変換できる式)。

例

例8-28 MODULOを使用した除算後の剰余の確認

SHOW MODULO(13,7)
6.00

MONTHS_BETWEEN

MONTHS_BETWEENファンクションは、2つの日付間の月数を計算します。2つの日付の日を示す構成要素が同じ場合、または両方の日付が月末の場合、戻り値は自然数です。この他の場合、戻り値に小数が含まれ、1か月を31日として日数の差が表されます。最初の日付が2番目の日付より後の場合、戻り値は正の値になり、最初の日付が2番目の日付より前の場合、戻り値は負の値になります。

戻り値

NUMBER

構文

MONTHS_BETWEEN(datetime_expression1, datetime_expression2)

パラメータ

datetime-expression1

DATETIMEデータ型の1番目の式、または日付を指定するテキスト式。

datetime-expression2

DATETIMEデータ型の2番目の式、または日付を指定するテキスト式。

例

例8-29 日付間の月数の計算

次の文は、2004年3月26日と2001年7月6日との間の月数を計算します。

SHOW months_between('06Jul2005' '17Jul2003')
23.65

例8-30 月末日

2つの日付が両方とも月末の場合、戻り値は整数です。

SHOW months_between('29Feb2000', '30Sep2000')
-7.00

MOVINGAVERAGE

MOVINGAVERAGEファンクション(省略形はMVAVG)は、指定されたディメンションにわたってディメンション化変数または式の一連の平均を計算します。ステータスにあるディメンション値ごとに、現行ディメンション値を基準にして指定範囲内のデータの平均を計算します。

平均が計算されるデータのディメンションが1つのみの場合、MOVINGAVERAGEによって生成される一連の平均は、ステータスにあるディメンション値ごとに1つです。平均が計算されるディメンション以外のディメンションがデータに存在する場合、MOVINGAVERAGEでは、他のディメンションのステータス・リストにある値の組合せごとに、個別に一連の平均を生成します。

戻り値

expressionのデータ型がDECIMALまたはSHORTの場合はDECIMAL、それ以外の場合はNUMBERになります。

構文

MOVINGAVERAGE(expression, start, stop, step, -

[dimension [STATUS|limit-clause]])

パラメータ

expression

平均を計算する値を持つ数値変数または計算。たとえば、units、sales-expenseなど。

start

stop

平均を計算する値の範囲を指定する整数値。startの値は範囲の先頭を指定します。stopの値は範囲の終点を指定します。dimensionの現行値を基準にしてstartとstopの値を指定します。現在より前をstartまたはstopに指定するには、値の前にカンマを付けます。したがって、現行のディメンション値に対してはゼロ(0)を指定し、現行値の直前の値に対しては-1を指定します。(「Movingファンクションによる範囲外の値およびNA値の処理方法」も参照してください。)

注意:
デフォルトでは、このファンクションは平均する値の範囲を識別するときにデフォルトのステータス・リストを使用します。STATUSまたはlimit-clause句のいずれかを指定することにより、この動作を変更できます。

ヒント:
ステータスの最後に範囲指定する場合は、便宜上および目的を文書化するために、DIMMAXキーワード付きのOBJファンクションを使用してstopの値を指定します。

step

平均の計算の対象を、範囲内のすべての値、1つおきの値、2つおきの値などにするかどうかを指定する正の整数。stepの値が1の場合、すべての値の平均です。2の場合、1番目、3番目、5番目(以降同様)の値の平均です。たとえば、今月がJun96であり、startとstopの値がそれぞれ-3と3の場合、stepの値を2にすると、Mar96、May96、Jul96およびSep96の平均が計算されます。

dimension

移動平均の計算されるディメンション。dimensionのデータ型は任意のデータ型にできますが、通常は時間ディメンションになります。

expressionのディメンションがDAY、WEEK、MONTH、QUARTERまたはYEARの型であり、そのディメンションをこのファンクションに使用する場合は、dimension引数を省略できます。

STATUS

移動平均の計算時に、MOVINGAVERAGEが現行のステータス・リストを使用することを指定します(つまり、現在ステータスにあるディメンション値のみを現行のステータス順に使用)。

limit-clause

LIMITファンクションで指定された値、または各種LIMITコマンドにおけるlimit-clause引数の構文(つまり、LIMITコマンドの「TO」などのlimit-type引数の後の構文)と同じ構文で指定された値を、MOVINGAVERAGEが使用することを指定します。これらの引数の構文については、LIMITコマンド(値を使用)、LIMITコマンド(LEVELRELを使用)、LIMIT(親リレーションを使用)、LIMITコマンド(関連ディメンションを使用)、LIMITコマンド(NOCONVERTを使用)およびLIMITコマンド(POSLISTを使用)を参照してください。

使用上の注意

Movingファンクションによる範囲外の値およびNA値の処理方法

Movingファンクションは値をループするため、ループ内の各ステップにおいて、ループ内のディメンション位置がNAまたは範囲外である場合、このファンクションはexpressionをNA値とみなします。このファンクションは、NASKIPオプション設定で指定された方法でNA値を処理(デフォルトではNAとして処理)するため、通常は範囲外の値(NA値)を無視し、ループ内のそのステップの式を評価しません。

例

例8-31 移動平均の計算

salesという名前の変数があり、この変数は、timeという名前の階層ディメンション、productという名前のディメンション、timeのレベルの名前(QuarterやYearなど)を含むtimelevelnamesという名前のディメンションおよびtimeの値とtimelevelnamesの値を関連付けるtime.levelrelsという名前のリレーションによってディメンション化されているとします。さらに、次の文を使用してproductをWomens - Trousersに、timeをQ4-1999から現在までの四半期に制限するとします。

LIMIT product TO 'Womens - Trousers'
LIMIT timelevelnames TO 'Quarter'
LIMIT time TO time.levelrels
LIMIT time REMOVE 'Q1-1999' 'Q2-1999' 'Q3-1999'

productおよびsalesを制限したら、次のレポート文を発行します。

REPORT DOWN time sales -
HEADING 'Running Yearly\nTotal' MOVINGTOTAL(sales, -4, 0, 1, time, -
LEVELREL time.levelrels) -
HEADING 'Minimum\nQuarter' MOVINGMIN(sales, -4, 0, 1, time, -
LEVELREL time.levelrels) -
HEADING 'Maximum\nQuarter' MOVINGMAX(sales, -4, 0, 1, time, -
LEVELREL time.levelrels) -
HEADING 'Average\nQuarter' MOVINGAVERAGE(sales, -4, 0, 1, time, -
LEVELREL time.levelrels)

この文によって次のレポートが生成されます。

-----------------------PRODUCT------------------------
------------------Womens - Trousers-------------------
Running
Yearly     Minimum    Maximum    Average
TIME           SALES      Total      Quarter    Quarter    Quarter
-------------- ---------- ---------- ---------- ---------- ----------
Q4-1999         416            1,386        233        480     346.50
Q1-2000         465            1,851        233        480     370.20
Q2-2000         351            1,969        257        480     393.80
Q3-2000         403            2,115        351        480     423.00
Q4-2000         281            1,916        281        465     383.20
Q1-2001         419            1,919        281        465     383.80
Q2-2001         349            1,803        281        419     360.60
Q3-2001         467            1,919        281        467     383.80
Q4-2001         484            2,000        281        484     400.00
Q1-2002         362            2,081        349        484     416.20
Q2-2002         237            1,899        237        484     379.80
Q3-2002         497            2,047        237        497     409.40
Q4-2002         390            1,970        237        497     394.00

MOVINGMAX

MOVINGMAXファンクション(省略形はMVMAX)は、指定されたディメンションにわたるディメンション化変数または式の一連の最大値を返します。ステータスにあるディメンション値ごとに、現行ディメンション値を基準にして指定範囲内のデータで最大値を検索します。

変数または式に指定のディメンションしかない場合、MOVINGMAXによって生成される一連の最大値は、ステータスにある各ディメンション値につき1つです。変数または式に指定のディメンション以外のディメンションがある場合、MOVINGMAXでは、他のディメンションのステータス・リストにある値の組合せごとに、個別に一連の最大値を生成します。

戻り値

expressionのデータ型がDECIMALまたはSHORTの場合はDECIMAL、それ以外の場合はNUMBERになります。

構文

MOVINGMAX(expression, start, stop, step, [dimension [STATUS|limit-clause]])

パラメータ

expression

最大値を検索する値を持つ数値変数または計算。たとえば、units、sales-expenseなど。

start

stop

最大値を検索する値の範囲を指定する整数値。startの値は範囲の先頭を指定します。stopの値は範囲の終点を指定します。dimensionの現行値を基準にしてstartとstopの値を指定します。現在より前をstartまたはstopに指定するには、値の前にカンマを付けます。したがって、現行のディメンション値に対してはゼロ(0)を指定し、現行値の直前の値に対しては-1を指定します。(「Movingファンクションによる範囲外の値およびNA値の処理方法」も参照してください。)

注意:
デフォルトでは、このファンクションは平均する値の範囲を識別するときにデフォルトのステータス・リストを使用します。STATUSまたはlimit-clause句のいずれかを指定することにより、この動作を変更できます。

ヒント:
ステータスの最後に範囲指定する場合は、便宜上および目的を文書化するために、DIMMAXキーワード付きのOBJファンクションを使用してstopの値を指定します。

step

検索の対象を、範囲内のすべての値、1つおきの値、2つおきの値などにするかどうかを指定する正の整数。stepの値が1の場合、すべての値を検索します。値が2の場合、1番目、3番目、5番目(以降同様)の値を検索します。たとえば、今月がJun96で、startとstopの値がそれぞれ-3と3の場合、stepの値を2にすると、Mar96、May96、Jul96およびSep96が検索され、この4つの月のうち最大値が返されます。

dimension

移動最大値が計算されるディメンション。任意のディメンションを指定できますが、通常は、1つのレベル(月レベル、年レベルなど)に制限されているTEXT型の階層型時間ディメンション、またはDAY、WEEK、MONTH、QUARTER、YEARのいずれかの型のディメンションです。

expressionのディメンションがDAY、WEEK、MONTH、QUARTER、YEARのいずれかのタイプであり、そのディメンションをMOVINGMAXに使用する場合は、dimension引数を省略できます。

STATUS

LIMITファンクションで指定された値、または各種LIMITコマンドにおけるlimit-clause引数の構文(つまり、LIMITコマンドの「TO」などのlimit-type引数の後の構文)と同じ構文で指定された値を、MOVINGMAXが使用することを指定します。これらの引数の構文については、LIMITコマンド(値を使用)、LIMITコマンド(LEVELRELを使用)、LIMIT(親リレーションを使用)、LIMITコマンド(関連ディメンションを使用)、LIMITコマンド(NOCONVERTを使用)およびLIMITコマンド(POSLISTを使用)を参照してください。

例

販売実績の最大値を計算する例は、例8-31「移動平均の計算」を参照してください。

MOVINGMIN

MOVINGMINファンクション(省略形はMVMIN)は、指定されたディメンションにわたるディメンション化変数または式の値の一連の最小値を返します。ステータスにあるディメンション値ごとに、現行ディメンション値を基準にして指定範囲内のデータで最小値を検索します。

変数または式に指定のディメンションしかない場合、MOVINGMINによって生成される一連の最小値は、ステータスにある各ディメンション値につき1つです。変数または式に指定のディメンション以外のディメンションがある場合、MOVINGMINでは、他のディメンションのステータス・リストにある値の組合せごとに、個別に一連の最小値を生成します。

戻り値

expressionのデータ型がDECIMALまたはSHORTの場合はDECIMAL、それ以外の場合はNUMBERになります。

構文

MOVINGMIN(expression, start, stop, step, [dimension [STATUS|limit-clause]])

パラメータ

expression

最小値を検索する値を持つ数値変数または計算。たとえば、UNITS、SALES-EXPENSEなど。

start

stop

最小値を検索する値の範囲を指定する整数値。startの値は範囲の先頭を指定します。stopの値は範囲の終点を指定します。dimensionの現行値を基準にしてstartとstopの値を指定します。現在より前をstartまたはstopに指定するには、値の前にカンマを付けます。したがって、現行のディメンション値に対してはゼロ(0)を指定し、現行値の直前の値に対しては-1を指定します。(「Movingファンクションによる範囲外の値およびNA値の処理方法」も参照してください。)

注意:
デフォルトでは、このファンクションは平均する値の範囲を識別するときにデフォルトのステータス・リストを使用します。STATUSまたはlimit-clause句のいずれかを指定することにより、この動作を変更できます。

ヒント:
ステータスの最後に範囲指定する場合は、便宜上および目的を文書化するために、DIMMAXキーワード付きのOBJファンクションを使用してstopの値を指定します。

step

検索の対象を、範囲内のすべての値、1つおきの値、2つおきの値などにするかどうかを指定する正の整数。stepの値が1の場合、すべての値を検索します。値が2の場合、1番目、3番目、5番目(以降同様)の値を検索します。たとえば、今月がJun96で、startとstopの値がそれぞれ-3と3の場合、stepの値を2にすると、Mar96、May96、Jul96およびSep96が検索され、この4つの月のうち最小値が返されます。

dimension

移動最小値の計算対象となるディメンション。任意のディメンションを指定できますが、通常は、1つのレベル(月レベル、年レベルなど)に制限されているTEXT型の階層型時間ディメンション、またはDAY、WEEK、MONTH、QUARTER、YEARのいずれかの型のディメンションです。

expressionのディメンションがDAY、WEEK、MONTH、QUARTERまたはYEARの型であり、そのディメンションをMOVINGMINに使用する場合は、dimension引数を省略できます。

STATUS

移動最小値の計算時に、MOVINGMINが現行のステータス・リストを使用することを指定します(つまり、現行のステータスにあるディメンション値のみを現行のステータス順に使用)。

limit-clause

LIMITファンクションで指定された値、または各種LIMITコマンドにおけるlimit-clause引数の構文(つまり、LIMITコマンドの「TO」などのlimit-type引数の後の構文)と同じ構文で指定された値を、MOVINGMINが使用することを指定します。これらの引数の構文については、LIMITコマンド(値を使用)、LIMITコマンド(LEVELRELを使用)、LIMIT(親リレーションを使用)、LIMITコマンド(関連ディメンションを使用)、LIMITコマンド(NOCONVERTを使用)およびLIMITコマンド(POSLISTを使用)を参照してください。

例

販売実績の最小値を計算する例は、例8-31「移動平均の計算」を参照してください。

MOVINGTOTAL

MOVINGTOTALファンクション(省略形はMVTOT)は、指定されたディメンションにわたるディメンション化変数または式の値の一連の合計を計算します。ステータスにあるディメンション値ごとに、現行ディメンション値を基準にして指定範囲内のデータの合計を計算します。

変数または式に指定のディメンションしかない場合、MOVINGTOTALによって生成される一連の合計は、ステータスにある各ディメンション値につき1つです。変数または式に指定のディメンション以外のディメンションがある場合、MOVINGTOTALでは、他のディメンションのステータス・リストにある値の組合せごとに、個別に一連の合計を生成します。

戻り値

expressionのデータ型がDECIMALまたはSHORTの場合はDECIMAL、それ以外の場合はNUMBERになります。

構文

MOVINGTOTAL(expression, start, stop, step, [dimension [STATUS|limit-clause]])

パラメータ

expression

合計する値を持つ数値変数または計算。たとえば、UNITS、SALES-EXPENSEなど。

start

stop

合計する値の範囲を指定する整数値。startの値は範囲の先頭を指定します。stopの値は範囲の終点を指定します。dimensionの現行値を基準にしてstartとstopの値を指定します。現在より前をstartまたはstopに指定するには、値の前にカンマを付けます。したがって、現行のディメンション値に対してはゼロ(0)を指定し、現行値の直前の値に対しては-1を指定します。(「Movingファンクションによる範囲外の値およびNA値の処理方法」も参照してください。)

注意:
デフォルトでは、このファンクションは平均する値の範囲を識別するときにデフォルトのステータス・リストを使用します。STATUSまたはlimit-clause句のいずれかを指定することにより、この動作を変更できます。

ヒント:
ステータスの最後に範囲指定する場合は、便宜上および目的を文書化するために、DIMMAXキーワード付きのOBJファンクションを使用してstopの値を指定します。

step

合計の計算の対象を、範囲内のすべての値、1つおきの値、2つおきの値などにするかどうかを指定する正の整数。stepの値が1の場合、すべての値を合計します。値が2の場合、1番目、3番目、5番目(以降同様)の値を合計します。今月がJun96で、startとstopの値がそれぞれ-3と3の場合、stepの値を2にすると、Mar96、May96、Jul96およびSep96が合計されます。

dimension

移動合計が計算されるディメンション。任意のディメンションを指定できますが、通常は時間ディメンションです。

expressionのディメンションがDAY、WEEK、MONTH、QUARTERまたはYEARの型であり、そのディメンションをMOVINGTOTALに使用する場合は、dimension引数を省略できます。

STATUS

移動合計の計算時に、MOVINGTOTALが現行のステータス・リストを使用することを指定します(つまり、現行のステータスにあるディメンション値のみを現行のステータス順に使用)。

limit-clause

LIMITファンクションで指定された値、または各種LIMITコマンドにおけるlimit-clause引数の構文(つまり、LIMITコマンドの「TO」などのlimit-type引数の後の構文)と同じ構文で指定された値を、MOVINGTOTALが使用することを指定します。これらの引数の構文については、LIMITコマンド(値を使用)、LIMITコマンド(LEVELRELを使用)、LIMIT(親リレーションを使用)、LIMITコマンド(関連ディメンションを使用)、LIMITコマンド(NOCONVERTを使用)およびLIMITコマンド(POSLISTを使用)を参照してください。

例

販売実績の移動合計を計算する例は、例8-31「移動平均の計算」を参照してください。

NA2

NA2ファンクションは、NULLトラッキングを行うように定義されている変数のデバッグとテストに使用されます。このファンクションからはNA2ビットが考慮されたNA値が返されます。

関連項目:
「NA2ビットとNULLトラッキング」

戻り値

NAフラグがTRUEに設定されているNA値

構文

NA2

例

例9-104「NULLトラッキングを持つ変数の定義」を参照してください。

NAFILL

NAFILLファンクションは、NA値を指定の埋込み式に置き換えてソース式の値を返します。

戻り値

戻り値のデータ型はsource-expressionと同じです。埋込み式とソース式のデータ型が同じでない場合、Oracle OLAPは可能なかぎり埋込み式をソース式のデータ型に変換します。変換されない場合はエラーが生成されます。ソース式と埋込み式がどちらもNAである場合、NAFILLはNAを返します。

構文

NAFILL(source-expression fill-expression)

パラメータ

source-expression

評価される式。source-expressionの値がNAではない場合、NAFILLはsource-expressionの対応する値を返します。結果のディメンションおよびデータ型は、source-expressionによって決まります。

fill-expression

戻り値の置換後の式。fill-expressionのデータ型はsource-expressionと同じである必要があります。fill-expressionは、source-expressionの値がNAと等しい場合にのみ評価されます。

使用上の注意

埋込み式内のファンクション

ソース式と同じデータ型が返される場合、埋込み式には任意のファンクションを使用できます。

NAFILLより優先順位の高いNATRIGGER

Oracle OLAPは、NAFILLファンクションを適用する前に$NATRIGGERプロパティ式を評価します。$NATRIGGER式がNAである場合、NAFILLファンクションは有効です。

例

例8-32 NA値へのゼロの埋込み

変数salesにNA値があり、そのNA値をゼロとみなして平均を計算するとします。通常、NA値はAVERAGEファンクションによって無視され、平均の計算の対象となる値の数にカウントされません。NAFILLをAVERAGEファンクション内で使用すると、その値は一時的にゼロとして扱われるため、NA値が平均の計算の対象としてカウントされます。

REPORT AVERAGE(NAFILL(sales 0.0))

NAFLAG

このファンクションは、NULLトラッキングを行うように定義されている変数のデバッグとテストに使用され、値がNA2値であるかどうかや、非NA値であるかどうかを判別します。

関連項目:
「NA2ビットとNULLトラッキング」

戻り値

INTEGER

非NA値の場合は0、NA値がNA2値である場合は2、それ以外のNA値の場合はすべて1。

構文

NAFLAG (expression)

パラメータ

expression

OLAP DML式。

例

例9-104「NULLトラッキングを持つ変数の定義」を参照してください。

NEW_TIME

NEW_TIMEファンクションは、日付と時刻を別のタイムゾーンの日付と時刻に変換します。

戻り値

DATETIME

構文

NEW_TIME(datetime-exp this_zone new_zone)

パラメータ

this_zone

datetime-expの変換前のタイムゾーンを示すテキスト式。次の表に示す有効なタイムゾーンである必要があります。

new_zone

datetime-expの変換後のタイムゾーンを示すテキスト式。こちらが戻り値のタイムゾーンです。表8-1「タイムゾーン」に示す有効なタイムゾーンである必要があります。

表8-1タイムゾーン

AST

大西洋標準時

ADT

大西洋夏時間

BST

ベーリング標準時

BDT

ベーリング夏時間

CST

中部標準時

CDT

中部夏時間

EST

東部標準時

EDT

東部夏時間

GMT

グリニッジ標準時

HST

アラスカハワイ標準時

HDT

アラスカハワイ夏時間

MST

山地標準時

MDT

山地夏時間

NST

ニューファンドランド標準時

PST

太平洋標準時

PDT

太平洋夏時間

YST

ユーコン標準時

YDT

ユーコン夏時間

例

例8-33 現在の日時の使用

SYSDATEファンクションは、現在の日時をNEW_TIMEファンクションに返します。

SHOW new_time(SYSDATE 'EST' 'PST')

東部標準時の日時が2000年10月20日午前1時20分のとき、太平洋標準時(東部の3時間遅れ)の日付は2000年10月19日です。SYSDATEはNLS_DATE_FORMATによって指定される書式(デフォルトで日付のみを表示)を使用するので、時刻は表示されません。

19-OCT-00

例8-34 日時の指定

次の例では、TO_DATEファンクションがテキスト文字列を有効な日付および時刻に変換します。TO_CHARファンクションには、NLS_DATE_FORMATオプションで指定される日付書式を一時的に上書きする日付書式が含まれます。

SHOW TO_CHAR(NEW_TIME(TO_DATE('11-27-00 22:15:00', 'MM-DD-YY HH24:MI:SS'), -
'HST' 'PST') 'MM-DD-YY HH24:MI:SS')

この文は、アラスカハワイ標準時の11月27日午後10時15分(22:15:00)を太平洋標準時の11月28日午前12時15分(00:15:00)に変換します。TO_CHARファンクションで指定される日付書式によって、日付とともに時刻も表示されます。

11-28-00 00:15:00

あるいは、NLS_DATE_FORMATの値を変更することもできます。

NLS_DATE_FORMAT = 'MM-DD-YY HH24:MI:SS'

これにより、TO_CHARを使用せずに、次の文によって同じ結果が生成されます。

SHOW NEW_TIME(TO_DATE('11-27-00 22:15:00', 'MM-DD-YY HH24:MI:SS'), -
'HST' 'PST')

NEXT_DAY

NEXT_DAYファンクションは、指定した日付以降の特定の曜日の最初の日付を返します。

戻り値

DATETIME

構文

NEXT_DAY(datetime-expression, weekday)

パラメータ

datetime-expression

データ型がDATETIMEの式。

weekday

曜日(月曜日など)を指定するテキスト式。有効な名前は、NLS_DATE_LANGUAGEオプションによって制御されます。

例

例8-35 未来の日付の取得

次の文は、今日の日付以降の最初の火曜日の日付を返します。

SHOW NEXT_DAY(SYSDATE, 'Tues')

今日が2000年9月8日の金曜日の場合、次の火曜日の日付は次のとおりです。

11-SEP-00

NLS_CHARSET_ID

NLS_CHARSET_IDファンクションは、指定したキャラクタ・セット名に対応するキャラクタ・セット識別番号を返します。

関連項目:
NLS_CHARSET_NAME

戻り値

INTEGER(キャラクタ・セットの名前に対して有効な値を指定した場合)、数値、またはNA。

構文

NLS_CHARSET_ID (charset_name)

パラメータ

charset_name

有効なキャラクタ・セット名であるVARCHAR2テキスト式、または次のいずれかの値。

- CHAR_CS: サーバーのデータベース・キャラクタ・セット識別番号を返すように指定します。

- NCHAR_CS: サーバーの各国語キャラクタ・セットID番号を返すように指定します。

関連項目:
キャラクタ・セット名のリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

NLS_CHARSET_NAME

NLS_CHARSET_NAMEファンクションは、指定したキャラクタ・セット識別番号に対応するキャラクタ・セット名を返します。

関連項目:
NLS_CHARSET_ID

戻り値

VARCHAR2(番号が有効なキャラクタであると認識された場合)、またはNA。

構文

NSL_CHARSET_NAME (number-exp)

パラメータ

number-exp

キャラクタ・セットIDの番号。

関連項目:
キャラクタ・セット識別子のリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

NLSSORT

NLSSORTファンクションは、テキスト文字列のソートに使用されるバイト文字列を返します。このファンクションを使用すると、文字列のバイナリ値ではなく言語ソート順に基づいてソートや比較の操作を指定できます。

関連項目:
『Oracle Databaseグローバリゼーション・サポート・ガイド』

戻り値

RAW

構文

NLSSORT(char [, 'NLS_SORT = sort[_ai |_ci]' ])

パラメータ

char

テキスト式。

sort

NLS言語。

_ai

アクセントを区別しないソートを指定します。

_ci

大/小文字を区別しないソートを指定します。

例

例8-36 言語ソート順に基づく値のソートに使用されるバイトの判断

ドイツ語において、大文字と小文字を区別せずに単一の値をソートするバイトを調べるとします。この場合、次のSHOWコマンドを実行できます。

show  NLSSORT('Mary Ann' , 'NLS_SORT = German_ai' )
501464820114555500010101010201010100

mynameというTEXTディメンションのすべての値に対してこの同じデータがソートされることを確認するために、次の文を実行します。

REPORT NLSSORT(MYname , 'NLS_SORT = German_ci' )

MYNAME           NLSSORT(MYNAME , 'NLS_SORT = German_ci')
---------------- ----------------------------------------
Adelaid          1423284B143C23000101010101010100
Maryann          50146482145555000101010101010100
Mary Ann         501464820114555500010101010201010100
Donna            235A55551400010101010100

NONE

NONEファンクションは、ブール式の値にTRUEが存在しない場合、YESを返します。ブール式のいずれかの値がTRUEの場合は、NOを返します。

戻り値

BOOLEAN、または式のすべての値がNAの場合はNA

構文

NONE(boolean-expression [CACHE] [dimension...])

パラメータ

boolean-expression

評価されるブール式。

CACHE

内部動作が若干変更されます。このキーワードは、元のパフォーマンスが非常に遅い場合にのみ指定してください。

dimension

結果のディメンションの名前。または、boolean-expressionの1つのディメンションと結果のディメンションとする別のディメンションとの間のリレーションの名前。

デフォルトでは、NONEはYES値またはNO値のどちらか1つを返します。結果に対し1つ以上のディメンションを指定すると、NONEは、指定されたディメンションに対してTRUE値の有無をテストし、値の配列を返します。各ディメンションは、boolean-expressionのディメンションであるか、そのディメンションの1つと関連付けられている必要があります。

ヒント:
指定したディメンションがboolean-expressionの実際のディメンションではなくboolean-expressionのディメンションに関連付けられたディメンションであり、かつ2つのディメンション間のリレーションが複数ある場合は、ディメンション間のデフォルトのリレーションを使用して計算が行われます。(デフォルトのリレーションの詳細は、RELATIONコマンドを参照してください。)Oracle OLAPでこのデフォルトのリレーションを使用しない場合は、リレーションの名前を指定して、関連付けられたディメンションを指定します。

使用上の注意

NONEでのNASKIPの影響

NONEはNASKIPオプションの影響を受けます。NASKIPの設定がYES(デフォルト)で、式の値がすべてNAの場合、NONEはNAを返しますが、1つでもNAでない値があれば、NONEは式にあるすべてのNA値を無視します。NASKIPの設定がNOである場合、式の値のいずれかがNAのとき、NONEはNAを返します。

例

例8-37 TRUE値の有無の確認(地区別)

売上が$50,000を下回る月がなかった地区を探すとします。NONEファンクションを使用して、ブール式(SALES LT 50000)でTRUEとなる月がないかどうかを判定します。結果を地区によってディメンション化するには、NONEの2番目の引数としてdistrictを指定します。

LIMIT product TO 'Sportswear'
REPORT NONE(sales LT 50000, district)

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

NONE(SALES
LT 50000,
DISTRICT       DISTRICT)
-------------- ----------
Boston                 NO
Atlanta               YES
Chicago               YES
Dallas                YES
Denver                YES
Seattle                NO

例8-38 TRUE値の有無の確認(地域別)

すべての地区のスポーツウェア売上が$50,000以上であった月が存在しなかった地域を探すとします。regionディメンションはdistrictディメンションと関連があるので、ANYの結果のディメンションとして、districtではなくregionを指定できます。

REPORT NONE(sales LT 50000, region)

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

NONE(SALES
LT 50000,
REGION          REGION)
-------------- ----------
East                   NO
Central               YES
West                   NO

NORMAL

NORMALファンクションは、指定した平均値および標準偏差を持つ正規分布からランダムな値を返します。NORMALによって返される結果のディメンションは、平均および標準偏差の式のすべてのディメンションによってディメンション化されます。

戻り値

DECIMAL

構文

NORMAL(mean standard-deviation)

パラメータ

mean

正規分布の平均値を表す数式。meanがNAの場合、NORMALはNAを返します。

standard-deviation

正規分布の標準偏差を表す数式。standard-deviationがNAの場合、NORMALは平均値を返します。

例

例8-39 ランダムな値の表示

次の例では、平均値が0で標準偏差が1の正規分布から返される乱数を示します。

最初に、次の文を実行します。

SHOW NORMAL(0 1)

次のような結果が生成されます。

-0.75

ただし、同じ文を再度実行すると、次のような結果が生成される場合があります。

0.87

NPV

NPVファンクションは、一連のキャッシュ・フロー額から正味現在価値を計算します。

戻り値

DECIMAL

NPVファンクションによって返される結果は、時間ディメンションを除くcashflowsのすべてのディメンションによってディメンション化されます。cashflowsのディメンションが時間ディメンションによってのみディメンション化される場合、NPVは単一の値を返します。

構文

NPV(cashflows, discount-rate, [time-dimension])

パラメータ

cashflows

time-dimensionによってディメンション化される、一連のキャッシュ・フロー額を指定する数式。

注意:
すべてのキャッシュ・フローは、関連付けられている期間の開始時に発生するとみなされます。キャッシュ・フローは、時間ディメンションの現行のステータスにある最も早い期間の先頭までさかのぼって割り引かれます。NPVは、ステータス外のディメンション位置に対応するキャッシュ・フローを無視します。

discount-rate

キャッシュ・フロー額を割り引くために使用する期間ごとの利率を指定する数式。単一の値でも、非時間ディメンションが1つ以上ある値の配列でもかまいません。割引率は小数で表現され、たとえば、8.25パーセントは.0825です。

NPVは、任意の正の割引率を受け入れますが、割引率が-1より大きい(割引率> -1)負の割引率も受け入れます。負の割引率を指定する場合は、割引率の前にカンマを付ける必要があります。

time-dimension

時間ディメンションを指定する名前。cashflowsにDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションがある場合、NPVはそのディメンションを自動的に使用するので、time-dimension引数は省略できます。

使用上の注意

NAの割引率

結果の値を計算するために使用する割引率がNAである場合、その結果の値はNAです。

キャッシュ・フローのタイミング

期間内でのキャッシュ・フローのタイミングの前提、つまり現在価値計算の基準となる時点の前提が異なる場合、適切な正または負の値を指数とした(1+割引率)の累乗とNPVファンクションの実行結果を乗算すれば、前提の違いを吸収できます。

例

例8-40 正味現在価値の計算

次の文は、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 NPV(cflow, .08, year)

によって、8パーセントの割引率が適用され、cflowデータの正味現在価値に関して次のレポートが作成されます。

NPV(CFLOW,
PROJECT        .08, YEAR)
-------------- ----------
a                  -21.67
b                  281.82
c                   56.65
d                    8.88
e                   -5.38

NULLIF

NULLIFファンクションは、ある式を他の式と比較し、2つの式が等しい場合はNA値を返し、そうでない場合は基準の式を返します。

戻り値

2つの式が等しい場合はNA、そうでない場合は基準の式。

構文

NULLIF (expr1 , expr2)

パラメータ

expr1

式。比較の基準の式。

expr2

expr1と比較する式。

例

例8-41 NULLIFを使用した値の比較

SHOW NULLIF(1, '1')
NA

SHOW NULLIF('red', 'Red')
red

NUMBYTES

NUMBYTESファンクションは、テキスト式のバイト数をカウントします。値が複数行のテキスト値である場合、NUMBYTESはすべての行の合計バイト数を返します。NUMBYTESによって返される結果のディメンションは、指定した式のディメンションと同じです。

戻り値

INTEGER

構文

NUMBYTES(text-expression)

パラメータ

text-expression

バイト数がカウントされるTEXT式。

例

例8-42 最長の名前のバイト数のカウント

レポートのラベル列に適切な幅を指定するために、製品の名前の長さを調べるとします。NUMBYTESファンクションとLARGESTファンクションを組み合せて使用すると、最長のラベルの長さがわかります。その値を使用して列のサイズを設定します。プログラムの次の文は、最長の名前を検索し、そのバイト数を使用してレポートの書式を設定します。

firstcol = LARGEST(NUMBYTES(name.product))+1
LIMIT month TO FIRST 3
FOR product
DO
ROW WIDTH FIRSTCOL name.product WIDTH 6 ACROSS month -
FIRST 3: units
DOEND

プログラムを実行すると、次の出力が生成されます。

3-Person Tents      200    203    269
Aluminum Canoes     347    400    482
Tennis Racquets     992  1,076  1,114
Warm-up Suits     1,096  1,214  1,294
Running Shoes     2,532  2,405  2,775

NUMCHARS

NUMCHARSファンクションは、テキスト式の文字数をカウントします。値が複数行のテキスト値である場合、NUMCHARSはすべての行の合計文字数を返します。NUMCHARSによって返される結果のディメンションは、指定した式のディメンションと同じです。

ヒント:
マルチバイト・キャラクタ・セットを使用している場合、NUMCHARSファンクションのかわりにNULLIFファンクションを使用できます。

戻り値

INTEGER

構文

NUMCHARS(text-expression)

パラメータ

text-expression

文字数がカウントされるテキスト式。NUMCHARSは、TEXT引数またはNTEXT引数を受け入れます。どちらのデータ型にも自動変換は行われません。指定した引数のデータ型に対応した情報が返されます。

例

例8-43 最長の名前の文字数のカウント

レポートのラベル列に適切な幅を指定するために、製品の名前の長さを調べるとします。NUMCHARSファンクションとLARGESTファンクションを組み合せて使用すると、最長のラベルの長さがわかります。その値を使用して列のサイズを設定します。プログラムの次の文は、最長の名前を検索し、その文字数を使用してレポートの書式を設定します。

firstcol = LARGEST(NUMCHARS(name.product))+1
LIMIT month TO FIRST 3
FOR product
DO
ROW WIDTH FIRSTCOL name.product WIDTH 6 ACROSS month -
FIRST 3: units
DOEND

プログラムを実行すると、次の出力が生成されます。

3-Person Tents      200    203    269
Aluminum Canoes     347    400    482
Tennis Racquets     992  1,076  1,114
Warm-up Suits     1,096  1,214  1,294
Running Shoes     2,532  2,405  2,775

NUMLINES

NUMLINESファンクションは、テキスト式の各値の行数をカウントします。NUMLINESによって返される結果のディメンションは、指定した式のディメンションと同じです。

NUMLINESは、TEXT引数またはNTEXT引数を受け入れます。どちらのデータ型にも自動変換は行われません。

戻り値

INTEGER

構文

NUMLINES(text-expression)

パラメータ

text-expression

行数がカウントされるテキスト式。

例

例8-44 行数のカウント

この例では、複数行のテキスト変数LASTNAMESの行数を調べます。LASTNAMES変数の値は、次のとおりです。

Adamson
Jones
Smith
Taylor

次の文

SHOW NUMLINES(lastnames)

によって、次の出力が生成されます。

4

NUMTODSINTERVAL

NUMTODSINTERVALファンクションは数値をDSINTERVALリテラルに変換します。

構文

NUMTODSINTERVAL (number, interval_unit)

パラメータ

number

任意のNUMBER値、または暗黙的にNUMBER値に変換される式。

interval_unit

numberの単位を指定するテキスト値。DAY、HOUR、MINUTEまたはSECONDのいずれかの文字列値に解決できる必要があります。

interval_unitでは大文字と小文字は区別されません。カッコ内の前および後にある値は無視されます。デフォルトの場合、戻り値の精度は9です。

NUMTOYMINTERVAL

NUMTOYMINTERVALファンクションは数値をYMINTERVALリテラルに変換します。

構文

NUMTOYMINTERVAL (number, interval_unit)

パラメータ

number

任意のNUMBER値、または暗黙的にNUMBER値に変換される式。

interval_unit

numberの単位を指定するテキスト値。YEARまたはMONTHのいずれかの文字列値に解決できる必要があります。

interval_unitでは大文字と小文字は区別されません。カッコ内の前および後にある値は無視されます。デフォルトの場合、戻り値の精度は9です。

NVL

NVLファンクションは、NA値または空の文字列を特定の文字列に置換します。

指定した式を評価し、非NA値または空の文字列をある値に、NA値を別の値に置換するには、NVL2を使用します。

戻り値

基準の式の値がNAの場合は指定した置換値、または基準の式の値が非NAの場合は基準の式。戻り値のデータ型は、基準の式のデータ型と常に同じです。

構文

NVL (exp , replacement-exp)

パラメータ

expr

NA値または空の文字列がある場合に置換する式。

replacement-exp

NA値の置換後の値。

例

例8-45 NVLの使用方法

SHOW NVL('First String', 'Second String')
First String

SHOW NVL('', 'Second String')
Second String

NVL2

NVL2ファンクションは、指定した式の値がNAでも空の文字列でもない場合はある値を返し、NAまたは空の文字列の場合には別の値を返します。

NA値または空の文字列を特定の文字列に置換する場合は、NVLを使用します。

戻り値

戻り値のデータ型は、常にexpr2(expr1の値が非NAのときに返される値の式)のデータ型です。

構文

NVL2 (expr1 , expr2 , expr3)

パラメータ

expr1

このファンクションが評価する値の式。

expr2

expr1の値が空の文字列でもNAでもないときに返される値の式。

expr3

expr1の値がNAのときに返される値の式。

使用上の注意

データ型が異なる値の比較

expr2とexpr3のデータ型が異なる場合、expr3のデータ型がexpr2のデータ型に変換されてから値が比較されます。

例

例8-46 NVL2の使用方法

SHOW NVL2('Which string?', 'First String', 'Second String')
First String

SHOW NVL2('', 'First String', 'Second String')
Second String

OBJ

OBJファンクションは、アナリティック・ワークスペース・オブジェクトの情報を返します。

戻り値

戻り値は、choiceに指定した値によって異なります。また、choiceが特定の型のオブジェクトにのみ適用される場合、object-nameに別の型のオブジェクトを指定すると、特に記載がないかぎりNAを返します。

構文

OBJ(choice [object-name])

パラメータ

object-name

情報を取得するオブジェクトの名前であるTEXT式。

choice

必要な情報の型を指定するキーワードまたはキーワード句。構文、戻り値のデータ型および有効なキーワードの説明は、表8-2「OBJファンクションのchoice引数のキーワード」を参照してください。

表8-2 OBJファンクションのchoice引数のキーワード

指定可能なキーワード

データ型

戻り値の説明

ACQUIRED

BOOLEAN

指定したオブジェクトが、マルチライタ・モードで修正するために取得されているかどうか。パーティション変数については、その変数のすべてのパーティションが取得されている場合にのみ、YESを返します。

ACQUIREDPARTITIONS

TEXT (複数行)

マルチライタ・モードで修正するために取得される、object-nameで指定された変数のパーティションの名前。

AGGMAP

TEXT (複数行)

指定したaggmapの仕様。

AGGMAPLIST

TEXT (複数行)

指定した計算式にあるaggmapオブジェクトの名前。

ALIASLIST

TEXT (複数行)

指定したディメンションの別名ディメンションの名前。

ALIASOF

TEXT

指定した別名ディメンションのベース・ディメンションの名前。

AW

TEXT

指定したオブジェクトが存在するアタッチされたワークスペースの名前。指定したオブジェクトが1つのアタッチされたワークスペースのみに存在する場合、AWはそのワークスペースの名前を返します。指定したオブジェクトが複数のアタッチされたワークスペースに存在する場合でも、AWは1つのワークスペースの名前のみを返します。該当するすべてのワークスペース名が返されるようにするには、AWLISTキーワードを使用する必要があります。アタッチされたワークスペースにオブジェクトが存在しない場合、AWはNAを返します。

AWLIST

TEXT (複数行)

指定した名前を持つオブジェクトが存在するアタッチされたワークスペースの名前。オブジェクトの修飾オブジェクト名を指定すると、AWLISTは該当するワークスペース名のみを返します。指定したオブジェクトがワークスペースに含まれない場合、AWLISTはNAを返します。

BTREE

BOOLEAN

指定した結合ディメンションまたはコンポジットにBTREE索引が指定されているかどうか。

CACHEEMPTY

BOOLEAN

指定した変数のデータがセッション・キャッシュから消去されているかどうか。キャッシュは、CLEAR文をCACHEキーワードとともに使用するとを空にできます。object-nameが変数ではない場合、またはそこにセッション・キャッシュがない場合、CACHEEMPTYはNAを返します。(セッション・キャッシュの詳細は、「Oracle OLAPセッション・キャッシュの概要」を参照してください。)

CACHECOUNT

LONG INTEGER

指定した変数の、セッション・キャッシュに存在する非NAセルの数。object-nameが変数ではない場合、またはそこにセッション・キャッシュがない場合、CACHECOUNTはNAを返します。(セッション・キャッシュの詳細は、「Oracle OLAPセッション・キャッシュの概要」を参照してください。)

CHANGED

BOOLEAN

指定した変数、リレーション、ディメンションまたは値セットが、最後にUPDATEを実行した後に変更されているかどうか。

CLASS

TEXT

指定したオブジェクトの記憶域クラス。可能な戻り値は次のとおりです。

- TEMPORARY: 値がワークスペース内に保存されないオブジェクト。値セット、変数、リレーションおよびワークシートに該当します。

- 空の文字列: 値を変更するといったんワークスペースの新しい場所に格納され、更新時に保存される永続オブジェクト。すべてのオブジェクト型に該当します。

DATA

TEXT

指定したオブジェクトのデータ型。

- ディメンション、変数および計算式の場合、可能な戻り値はINTEGER、SHORTINTEGER、LONGINTEGER、DECIMAL、NUMBER、SHORT(SHORTDECIMALの場合)、BOOLEAN、ID、TEXT、NTEXT、DATEまたはDATETIMEです。

- リレーションの場合、関連ディメンションの名前を返します。

- 連結ディメンション、結合ディメンション、コンポジット、またはパーティション・テンプレートの場合、オブジェクトのベース・ディメンションの名前を複数行のテキスト値で返します。

- データ型によって定義されるプログラムの場合、データ型の名前を返します。ディメンションの値を返すために定義されたプログラムの場合、ディメンションの名前を返します。

- 値セットの場合、値セットが定義されたディメンションの名前を返します。

- その他の型のオブジェクトの場合、NAを返します。

DEFINE

TEXT (複数行)

指定したオブジェクトの説明。この値は、オブジェクトに対してDESCRIBEが表示する値から語DEFINEとオブジェクト名を省いたものと同じです。

DFNCHANGED

BOOLEAN

指定したオブジェクトの定義が、最後にUPDATEを実行した後に変更されているかどうか。

DFNDIMS

TEXT (複数行)

指定したオブジェクトの定義に使用されるディメンション・リスト内のディメンションおよびコンポジットの名前。次の点に注意してください。

- 名前のないコンポジットの場合、オブジェクト定義で使用される形式(SPARSE<dim1 dim2 ...>)を返します。

- ディメンション・サロゲートの場合、サロゲートが定義されたディメンションの名前を返します。

- 指定したオブジェクトの定義時にディメンション・リストが使用されなかった場合、NAを返します。

DIMMAX

INTEGER

指定したディメンション内の値の数。他のオブジェクト型の場合は0(ゼロ)を返します。

注意: ディメンション値へのアクセスを制限する読取り権限が設定されているディメンションに対してDIMMAXを使用すると、返される結果は、そのディメンションがロードされていたかどうかによって異なります。権限はオブジェクトがロードされるときに評価されます。通常、セッションでオブジェクトを初めて参照するときに、Oracle OLAPはオブジェクトをロードしてその権限を評価します。ただし、OBJファンクションはオブジェクトの情報を表示するのみで、オブジェクトをロードしません。ロードされていないディメンションに関してDIMMAXを使用すると、ディメンションに読取り権限があるかどうかにかかわらず、結果はディメンション内の値の数全体を反映します。権限のあるディメンションがロードされている場合、DIMMAXを選択すると、許可サイズを反映します。DIMMAXを選択して許可サイズを返すようにするには、LOAD文を実行してからOBJファンクションを使用します。

DIMS

TEXT (複数行)

指定したオブジェクトのディメンションの名前。具体的には、次のようになります。

- ディメンション(単純、連結または結合)の場合、そのディメンションの名前を返します。連結または結合ディメンションのベース・ディメンションを調べるには、DATAキーワードを使用します。

- コンポジットの場合、そのコンポジットのベース・ディメンションを返します。

- ディメンション・サロゲートの場合、サロゲートが定義されたディメンションの名前を返します。

- ディメンション化されたオブジェクトの場合、そのオブジェクトのディメンションの名前を返します。

- オブジェクトにディメンションがない場合、NAを返します。

DIMTYPE

TEXT

指定したディメンションのタイプ。具体的には、次のようになります。

- 連結ディメンションの場合、CONCATを返します。

- 結合ディメンションの場合、CONJOINTを返します。

- コンポジットの場合、COMPOSITEを返します。

- 単純なディメンションの場合、ディメンションのデータ型を返します。

- パーティション・テンプレート・オブジェクトの場合、PARTITION TEMPLATEを返します。

- それ以外のオブジェクトの場合はすべてNAを返します。

DISKSIZE

INTEGER

指定したオブジェクトの格納に使用される合計ページ数。

注意: 一時オブジェクトに関しては、OBJ(DISKSIZE)は0(ゼロ)の値を返します。一時オブジェクトの値は、データベース・ファイルではなく一時記憶域に格納されるためです。

FORMULA

TEXT

指定した計算式の定義に含まれる式。

HASAGGCOUNT

BOOLEAN

指定した変数にAggcountオブジェクトが関連付けられているかどうか。(Aggcount変数の詳細は、「Aggcount変数」を参照してください。)

HASCACHE

BOOLEAN

指定した変数のデータを格納するために、セッションに対してローカルなセッション・キャッシュが確立されたかどうか。(セッション・キャッシュの詳細は、「Oracle OLAPセッション・キャッシュの概要」を参照してください。)

HASH

BOOLEAN

指定した結合ディメンションまたはコンポジットにHASH索引が指定されているかどうか。

HASHSIZE

INTEGER

ハッシュされたディメンションのTBLSPACE(ハッシュ表のキー/値ノード・リストのアンカーを含むページ領域)に割り当てられたページ数。実際のキー/値ノードに使用されるページ数(RANSPACEのページ領域(KVPAGES)から割り当てられる)は含まれないことに注意してください。

HASPROPERTY prop-name

BOOLEAN

prop-nameによって指定されるプロパティが、指定したオブジェクトに存在するかどうか。(省略形はHASPRP)

HIDDEN

BOOLEAN

指定したプログラムまたはモデルが非表示になっているかどうか。(プログラムやモデルを非表示にする方法の詳細は、HIDEおよびUNHIDEコマンドを参照してください。)

INDEXSIZE

INTEGER

指定したリレーションまたは結合ディメンションに関連するすべてのインバージョンの合計サイズ。

INORDER

BOOLEAN

指定したオブジェクトのベース・ディメンションの値の論理順序が、アナリティック・ワークスペースでの物理順序と一致するかどうか。INORDERは、キーワードADD FIRST、ADD AFTER、ADD BEFOREまたはMOVEを指定したMAINTAINを使用してディメンション値の論理順序が指定されていない場合にTRUEを返します。

ISBY [RECURSIVE] dimname

BOOLEAN

object-nameを指定した場合は、指定したオブジェクトが、指定したディメンション(dimname)でディメンション化されているか、そのディメンションに関連しているか、またはそのディメンションのサロゲートかどうか。dimnameのみを指定した場合は、dimnameに指定したディメンションによってオブジェクトがディメンション化されているかどうか、または、このオブジェクトがaggmapの場合、指定したディメンションがaggmap内のモデルまたはリレーションのディメンションかどうか。

- RECURSIVEは、指定したオブジェクトのベース・ディメンションでdimnameをすべてのレベルで検索することを指定します。例8-49「OBJとISBYの組合せ」を参照してください。

- dimnameは、ディメンションの名前を表すテキスト式です。(Oracle OLAPは名前を自動的に大文字に変換します。)dimnameがコンポジットである場合、ISBYによって返される値は、オブジェクトがコンポジットによって定義されたかどうかを表します。

オブジェクトがディメンション・サロゲート、変数、リレーションまたは値セット名の場合は、object-nameの値を指定して、そのオブジェクトが、指定したディメンションによってディメンション化されているか、そのディメンションに関連しているか、またはそのディメンションのサロゲートであるかを調べます。ワークスペース・オブジェクトのリストをループして複数のオブジェクトの情報を取得する場合、またはOBJを使用してNAMEディメンションを制限する場合、object-nameを省略できます。

ISCOMPILED

BOOLEAN

指定したコンパイル可能なオブジェクト(プログラム、モデル、計算式など)のコンパイル・ステータス。戻り値は、オブジェクトの型、およびオブジェクトにコンパイル・エラーが検出されたかどうかによって異なります。次に例を示します。

- プログラムでは、前回の変更以降にコンパイラによって処理されている場合、YESが返されます。戻り値YESは、必ずしもプログラムのすべての行がコンパイルされたことを示しません。詳細は、COMPILEコマンドを参照してください。

- 計算式では、エラーが1つも検出されることなく計算式がコンパイルされて保存可能な場合にのみ、YESが返されます。アンパサンド置換が含まれる計算式は保存できません。計算式が空の場合、ISCOMPILEDを選択すると、NOを返します。

- モデルでは、エラーが1つも検出されることなくモデルがコンパイルされた場合、またはモデルが空の場合にのみ、YESを返します。

- プログラム、計算式およびモデルでは、プログラム、計算式またはモデルが参照するオブジェクトを削除するとNOが返されます。

ISCOMPRESSED

BOOLEAN

指定したオブジェクトが圧縮コンポジットかどうか。

ISLATEST

BOOLEAN

指定したオブジェクトが最新バージョンのオブジェクトかどうか。この構文は、OBJ(VERSION)EQ OBJ(LATESTVER)に相当します。

ISSOLVED

BOOLEAN

指定したオブジェクトが圧縮コンポジットによってディメンション化された変数の場合、この変数が集計されているかどうか。

KVSIZE

INTEGER

ハッシュ索引またはBツリー索引に現在割り当てられているページ数。

LATESTVER

INTEGER

最近コミットされたオブジェクトのバージョンに対する、指定したオブジェクトの現在の状態。戻り値は、OBJ(VERSION)で返される値と同じか、それ以上の値のいずれかです。LATESTVERの戻り値がOBJ(VERSION)によって返された値よりも大きいときは、アナリティック・ワークスペースが読取り専用モードまたは読取り/書込みモードでアタッチされた後、あるいはアナリティック・ワークスペースがマルチライタ・モードでアタッチされた場合は最後の同期化後に、別のユーザーによってこのオブジェクトが更新されています。

LD

TEXT (複数行)

指定したオブジェクトのLD(詳しい説明)。

MODEL

TEXT (複数行)

指定したモデルの仕様。

NACACHECOUNT

INTEGER

NAキャッシュされたセルの総数。

NACACHEEMPTY

BOOLEAN

NAキャッシュが空かどうか。

NAPAGES

INTEGER

NA値のみが含まれ、データベースに格納されていないページ数。

NOHASH

BOOLEAN

指定した結合ディメンションがデータのロードおよびアクセスにNOHASH索引アルゴリズムを使用しているかどうか。

NUMCELLS

INTEGER

指定した変数内の物理セルの総数。Oracle OLAPでは、この変数のディメンションに対するOBJ(DIMMAX)の値のデカルト積を求めることにより、コンポジットも考慮の上、この値を算出します。

NUMDELS

DECIMAL

指定したディメンション化オブジェクトの削除済のセルの数。

NUMDFNDIMS

INTEGER

指定したオブジェクトの定義に使用されるディメンション・リスト内のディメンションまたはコンポジットの数。このカウントでは、各コンポジットは1つとカウントされますが、コンポジットのディメンション・リスト内にあるディメンションはカウントされません。ディメンション・リストによって定義されるオブジェクトは、変数、リレーション、計算式、値セット、連結または結合ディメンション、ディメンション・サロゲート、またはコンポジットです。オブジェクト(単一セルの変数、プログラムなど)の定義時にディメンション・リストが使用されなかった場合、0(ゼロ)が返されます。

NUMDIMS

INTEGER

指定したディメンション化オブジェクトのディメンションの数、または指定したコンポジットのベース・ディメンションの数。指定したオブジェクトがディメンションまたはディメンション・サロゲートの場合は1を返し、それ以外のオブジェクトの場合はすべて0(ゼロ)を返します。

NUMSEGS

INTEGER

指定したオブジェクトが複数のディメンションを持つ場合に、そのオブジェクトに関連付けられたアナリティック・ワークスペース・セグメントの数。(Oracle OLAPはセグメントを内部的に使用して、オブジェクトの値の物理記憶域を追跡管理しています。セグメントの数が多すぎると、情報の取得に時間がかかる場合があります。)

NUMVALS

INTEGER

指定したオブジェクト内の値またはセルの数。圧縮コンポジット、または圧縮コンポジットによってディメンション化される変数の場合、オブジェクト内部の論理値(つまり、コンポジットがBツリー・コンポジットであった場合に返される値)の数を表すINTEGER値を返します。

OWNSPACE

BOOLEAN

指定したオブジェクトがBTREE索引アルゴリズムで定義された結合ディメンションまたはコンポジットの場合は、BTREEノードを格納するためにプライベート・ページ領域を使用しているかどうか。指定したオブジェクトが可変幅テキスト・ディメンション、リレーション、または可変幅テキスト変数の場合は、オブジェクトのデータがそのオブジェクトに関連付けられている1つ以上のプライベート・ページ領域に格納されているかどうか。

PARTBY

TEXT (複数行)

指定したパーティション変数またはパーティション・テンプレート・オブジェクトのパーティション・ディメンションの名前。これらの名前は、複数行のテキスト値(各ディメンションにつき1行)として返されます。

PARTDIMS partitions

TEXT (複数行)

指定したパーティション・テンプレートまたはパーティション変数のpartitionsのディメンションの名前。戻り値は、複数行のテキスト値(各ディメンションにつき1行)として返されます。

partitionsは、確認するパーティションを指定する複数行のテキスト値(パーティション名ごとに1行)です。有効なパーティションではないパーティション名をpartitionsに指定すると、エラーが発生します。

PARTITION partitions

TEXT (複数行)

パーティション変数またはパーティション・テンプレート・オブジェクトに対する、指定したパーティション・テンプレートまたはパーティション変数のpartitionsを説明するテキスト。パーティション・テンプレート上でコールした場合、返される説明はDEFINE PARTITION TEMPLATE文と同様です。パーティション変数上でコールした場合、返される説明はDEFINE VARIABLE文と同様です。

partitionsは、確認するパーティションを指定する複数行のテキスト値(パーティション名ごとに1行)です。有効なパーティションではないパーティション名をpartitionsに指定すると、エラーが発生します。

PARTMETH

TEXT

指定したパーティション・テンプレートまたはパーティション変数がパーティション化される方法(RANGEまたはLIST)。

PARTNAMES

TEXT (複数行)

指定したパーティション・テンプレートのすべての定義済パーティションの名前を含む複数行のTEXT値。nameがパーティション変数の名前である場合、変数のすべてのパーティションの名前を含む複数行のTEXT値を返します。

注意: パーティション・テンプレートによって定義されるパーティションは、そのすべてが各パーティション変数に必ずしも存在するわけではありません。パーティション変数上でOBJ(PARTNAMES)をコールした場合、変数内に実際に存在するパーティションのみが返されます。

PARTRANGE partitions

TEXT (複数行)

指定したRANGEパーティション・テンプレートまたはRANGEパーティション変数の各partitionsに対するLESS THAN句の値。

partitionsは、確認するパーティションを指定する複数行のテキスト値(パーティション名ごとに1行)です。有効なパーティションではないパーティション名をpartitionsに指定すると、エラーが発生します。

PERIOD

TEXT

指定したオブジェクトがDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションの場合、ディメンションの型に加えて、複数の時間間隔または段階があればそれを示す値。

PHYSMAX

INTEGER

指定したディメンションまたはコンポジット内の位置の最大物理値。

PMTMAINTAIN

TEXT

指定したディメンションに関連付けられているメンテナンス権限の権限条件。ディメンションのメンテナンス権限が存在しない場合、NAを返します。

PMTPERMIT

TEXT

指定したオブジェクトに関連付けられている許可権限の権限条件。オブジェクトの許可権限が存在しない場合、NAを返します。

PMTREAD

TEXT

指定したオブジェクトに関連付けられている読取り権限の権限条件。オブジェクトの読取り権限が存在しない場合、NAを返します。

PMTWRITE

TEXT

指定したオブジェクトに関連付けられている書込み権限の権限条件。オブジェクトの書込み権限が存在しない場合、NAを返します。

PRECISION

INTEGER

指定したNUMBERディメンションまたはNUMBER変数の精度。精度とは、桁数の合計のことです。精度を指定せずに変数を定義した場合、OBJはNAを返します。

PROGRAM

TEXT (複数行)

指定したプログラムのテキスト。

PROPCHANGED

BOOLEAN

指定したオブジェクトのプロパティが、最後にUPDATEを実行した後に変更されているかどうか。

PROPERTY prop-name

WORKSHEET

prop-name(プロパティの名前を指定するテキスト式)で指定した、指定したオブジェクトのプロパティの値。戻り値のデータ型は、実行時に決定されます。指定のプロパティが存在しない場合、NAを返します。(省略形はPRP)

PROPERTYLIST

TEXT (複数行)

指定したオブジェクトに関連付けられているプロパティの名前(各行に1つのプロパティ)。名前は大文字で、ASCII文字の照合順に格納されます。プロパティのないオブジェクトの場合、NAを返します。(省略形はPRPLIST)

PROPERTYTYPE prop-name

TEXT

prop-name(プロパティの名前を指定するテキスト式)で指定した、オブジェクトのプロパティのデータ型。この型は、プロパティを作成したPROPERTY文で使用される式を基に導出されます。可能な戻り値は、BOOLEAN、TEXT、ID、DATE、DATETIME、NUMBER、INTEGER、LONGINTEGER、DECIMALおよびSHORTです。指定のプロパティが存在しない場合か、またはその値がNAである場合、NAを返します。(省略形はPRPTYPE)

PUSHCOUNT

INTEGER

指定したオブジェクトに対してPUSHを実行した回数(つまり、指定したオブジェクトに現在保存されているプッシュされた値の数)。

REFERS [RECURSIVE] text-expression

TEXT (複数行)

text-expressionに指定する語に一致する、指定したコンパイル可能オブジェクト(プログラムなど)の内部にある語。指定する語が見つからない場合、指定するオブジェクトがコンパイル可能なオブジェクトではない場合、またはワークスペースにコンパイル可能なオブジェクトが存在しない場合、REFERSはNAを返します。2つの引数を指定すると、REFERSは指定された語を指定されたオブジェクトのみで検索します。object-nameを省略すると、REFERSは現行のワークスペース内にあるすべてのコンパイル可能なオブジェクトを検索します。

- text-expressionは、検索する語を表す複数行のTEXT式です。テキスト値の各行は、別の語として検索されます。text-expressionに対して、OBJLISTファンクションの結果である語のリストを指定すると、現行のワークスペース内にあるコンパイル可能なオブジェクトの相互参照を生成できます。

- RECURSIVEは、Oracle OLAPによって、すべてのレベルでtext-expressionを(コール側ツリーに沿って)検索し、text-expressionのすべての出現箇所のリストを取得することを指定します。

ヒント: この検索では大文字と小文字が区別されないため、REFERSはTEXTVARとTextvarを同じ語として処理します。REFERSは、コメントに記述したテキストおよび一重引用符で囲まれたテキストをすべて無視します。

RELATION relation-query

TEXT (複数行)

指定したオブジェクトのデフォルト・リレーション(RELATIONコマンドで指定)。戻り値は、relation-queryに指定する内容によって異なります。relation-queryの構文は次のとおりです。

DEFINELIST | DIMLIST | ACTUAL rel-dimname | SPECIFIED rel-dimname

ここで、

- DEFINELISTは、ディメンションおよび関連するデフォルト・リレーションのすべての名前をファンクションが返すように指定します。次の例に示すように、名前および関連デフォルト・リレーションが1行につき1つずつ返され、ディメンション名と関連デフォルト・リレーションが交互に表示されます。

dimname1
relname1
dimname2
relname2

- DIMLISTは、デフォルト・リレーションが指定されているディメンションのすべての名前をファンクションが返すように指定します。次の例に示すように、1行につき1つのディメンション名が返されます。

dimname1
dimname2

- ACTUAL dimnameは、object-nameとrel-dimnameで指定した関連ディメンションとの間のデフォルト・リレーションとしてOracle OLAPが使用するリレーションをファンクションが返すように指定します。

- SPECIFIED dimnameは、object-nameと、rel-dimnameで指定された関連ディメンションとの間のデフォルト・リレーションとして、RELATIONコマンドで指定されたリレーションの名前をファンクションが返すように指定します。これは、データの入力時にエラーが発生し、アナリティック・ワークスペースにそのようなリレーションが存在しない場合でもRELATIONコマンドで実際に入力した値となります。

RSSIZE

INTEGER

メイン・オブジェクトによって使用されるランダムなサブセットのページ数。

SCALE

INTEGER

NUMBERディメンションまたはNUMBER変数の位取り。正の位取りは、小数点の右側の桁数を示します。負の位取りは、小数点の左側の丸め桁数を示します。位取りを指定せずに変数を定義した場合、OBJはNAを返します。

SEGWIDTH {dim-name|ALL}

TEXT (複数行)

複数のディメンションを持ち、特定のディメンションまたはすべてのディメンションと関連付けられている変数のデフォルトまたはユーザー指定のセグメント・サイズ。各行の先頭はセグメント・サイズ(最大11桁)で、その後に関連付けられているディメンションまたはコンポジットの名前が続きます。ディメンションおよびそのディメンション化オブジェクトを指定した場合、そのディメンションの名前は行に表示されません。この場合はセグメント値のみが返されます。セグメント・サイズがゼロとレポートされたときはデフォルトのセグメント・サイズが有効ですが、CHGDFNを使用して変数のセグメントに対して適切なサイズを設定する必要がある場合があります。

- dim-nameは、ディメンションの名前を表すテキスト式です。

- ALLは、すべてのディメンションを指定します。

SESSION

BOOLEAN

指定したオブジェクトがセッション・オブジェクトかどうか。

SHAREMAP

BOOLEAN

指定したオブジェクトが複合ディメンションでディメンション化されている場合、その複合ディメンションが他のオブジェクトと共有されているかどうか。

SPARSE

TEXT (複数行)

指定したオブジェクトの定義に使用されるコンポジット。

SURROGATELIST

TEXT (複数行)

指定したサロゲートまたはディメンションに対して定義されたサロゲート。

TRIGGER [triggering-event}

TEXT (複数行)

triggering-eventキーワードを指定せずにTRIGGERを実行すると、指定したオブジェクトに関連付けられているすべてのtriggering-eventキーワードおよびトリガー・プログラム名が返され、オブジェクトに関連付けられているトリガー・プログラムが存在しない場合は、NAが返されます。triggering-eventキーワードを指定してTRIGGERを実行すると、指定したオブジェクト・イベントに関連付けられているトリガー・プログラムの名前が返されます。

次のいずれかのキーワードを使用してtriggering-eventを指定します。

MAINTAIN

DELETE

PROPERTY

ASSIGN

BEFORE_UPDATE

AFTER_UPDATE

TYPE

TEXT

指定したオブジェクトのオブジェクト型。

UNIQUE

BOOLEAN

指定した連結ディメンションが一意かどうか。その他のディメンションの場合はFALSE、パーティション・テンプレートなどその他のオブジェクト型の場合はNAを返します。

UPDATED

BOOLEAN

アナリティック・ワークスペースがマルチライタ・モードでアタッチされている場合、指定したオブジェクトが更新されているかどうか。その他のアタッチメント・モードの場合はNAを返します。

VALCOUNT

INTEGER

指定した圧縮コンポジットに含まれる圧縮されていない論理値の数。その他のディメンションの場合はすべて、DIMMAXと同じ結果になります。

VALSIZE

INTEGER

指定したオブジェクトの値の格納に使用されるページ数。WIDTHキーワードを使用せずに定義したテキスト・ディメンションおよびテキスト変数に関して、OBJ(VALSIZE)では、テキスト自身の記憶域ではなく、テキストの4バイト・ポインタを含むページのみをカウントします。一時変数に関しては、一時変数の値はアナリティック・ワークスペース内ではなく一時記憶域に格納されるため、OBJ(VALSIZE)は0(ゼロ)の値を返します。

VERSION

INTEGER

アタッチされたバージョンの指定したオブジェクトの現在の状態。(更新してコミットされた変更回数によってこの数値が大きくなります。)

VNF

TEXT

指定したオブジェクトが、ユーザーがVNF(値名書式)を定義したDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションの場合、そのディメンションのVNF。その他の型のオブジェクトの場合、NAを返します。

WIDTH

INTEGER

指定したオブジェクトの各値の記憶域の幅(バイト単位)。

- ある幅で定義したディメンション化INTEGER変数およびBOOLEAN変数の場合、1を返します。

- ある幅で定義したディメンション化テキスト変数およびテキスト・ディメンションの場合、定義した幅を表す1から4000の値を返します。

- それ以外のオブジェクトの場合はすべてNAを返します。

object-name

目的のオブジェクトの名前が含まれるテキスト式。オブジェクトの場所は、アタッチされたワークスペースのいずれかです。テキスト・リテラルとしてobject-nameを指定する場合、一重引用符で囲む必要があります。(Oracle OLAPは名前を自動的に大文字に変換します。)プログラムの名前をobject-nameに指定して引用符を省略すると、Oracle OLAPはそのプログラムを実行し、その戻り値をobject-nameに指定されるオブジェクトの名前として使用します。

LIMITコマンドなど、NAMEディメンションをループする文の一部としてOBJファンクションを使用する場合、object-nameを省略できます。この場合、戻り値のディメンションは現行のワークスペースのNAMEディメンションによってディメンション化されます。

例

関連項目:
OBJファンクションを使用してデフォルト・リレーションの情報を取得する方法の例については、例10-95「RELATIONコマンドを使用したデフォルト・リレーションの指定」を参照してください。

例8-47 ディメンションのリスト表示

アナリティック・ワークスペースのすべてのディメンションをリスト表示するとします。最初に、LIMITコマンドおよびOBJファンクションを使用して、NAMEディメンションのステータスを制限します。次に、STATUS文を使用して、ディメンションのリストを生成します。OBJ(TYPE)によって返される値は常に大文字なので、それに合せるためにLIMIT文に'dimension'ではなく'DIMENSION'を使用する必要があります。次の文

LIMIT NAME TO OBJ(TYPE) EQ 'DIMENSION'
STATUS NAME

によって、次の出力が生成されます。

The current status of NAME is:
PRODUCT, DISTRICT, DIVISION, LINE, REGION, MARKETLEVEL, MARKET,
MONTH, YEAR, QUARTER

例8-48 リレーションのリスト表示

アナリティック・ワークスペースのすべてのリレーションの定義を参照するとします。LIMITコマンドおよびOBJファンクションを使用して、その名前を選択します。次に、DESCRIBEコマンドを使用して、その定義のリストを生成します。次の文

LIMIT NAME TO OBJ(TYPE) EQ 'RELATION'
DESCRIBE

によって、次の出力が生成されます。

DEFINE REGION.DISTRICT RELATION REGION <DISTRICT>
LD REGION for each DISTRICT

DEFINE DIVISION.PRODUCT RELATION DIVISION <PRODUCT>
LD DIVISION for each PRODUCT

DEFINE MLV.MARKET RELATION MARKETLEVEL <MARKET>

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

例8-49 OBJとISBYの組合せ

たとえば、次の文は、NAMEをmonthによってディメンション化されているすべてのオブジェクトに制限します。

LIMIT NAME TO OBJ(ISBY 'month')

ISBYを使用すると、あるディメンションが連結ディメンション、結合ディメンションまたはコンポジットのベース・ディメンションであるかどうかを確認できます。たとえば、ベース・ディメンションがproductおよびdistrictであるproddistという名前の結合ディメンションがあるとします。この場合、次の文はYESを返します。

SHOW OBJ(ISBY 'district' 'proddist')

ISBYを使用すると、あるディメンションがaggmapで使用されているリレーションまたはモデルのディメンションであるかどうかを確認できます。たとえば、myaggmapという名前のaggmapがあり、mydimensionという名前のディメンションがmyaggmap内のいずれかのリレーションまたはモデルに使用されたのかを調べるとします。この場合、次の文を発行します。

SHOW OBJ(ISBY 'mydimension' 'myaggmap')

指定したディメンションがいずれかのレベルでベース・ディメンションになっているのかを調べるには、ISBYとRECURSIVEキーワードを組み合せて使用する必要があります。たとえば、ベース・ディメンションがproddistおよびmonthであるproddist.monという名前の結合ディメンション、およびproddistによってディメンション化されている変数proddist.salesがあるとします。この場合、次のそれぞれの文はNOを返します。

SHOW OBJ(ISBY 'district' 'proddist.mon')
SHOW OBJ(ISBY 'district' 'proddist.sales')

ただし、ISBYとRECURSIVEキーワードを組み合せて使用すると、次の各文はYESを返します。

SHOW OBJ(ISBY RECURSIVE 'district' 'proddist.mon')
SHOW OBJ(ISBY RECURSIVE 'district' 'proddist.sales')

例8-50 変数に関する情報の取得

この例では、OBJファンクションのいくつかのキーワードを使用して変数salesに関する情報を取得する方法について説明します。salesの定義は次のとおりです。

DEFINE sales VARIABLE DECIMAL <month product district>
LD Sales Revenue

- 次の文

SHOW OBJ(TYPE 'sales')

によって、次の出力が生成されます。

VARIABLE

- 次の文

SHOW OBJ(DATA 'sales')

によって、次の出力が生成されます。

DECIMAL

- 次の文

SHOW OBJ(DIMS 'sales')

によって、次の出力が生成されます。

MONTH
PRODUCT
DISTRICT

- 次の文

SHOW OBJ(ISBY 'product' 'sales')

によって、次の出力が生成されます。

YES

- 次の文

SHOW OBJ(LD 'sales')

によって、次の出力が生成されます。

Sales Revenue

例8-51 オブジェクトの名前または型を返す

textvarは、geogという値を持つ変数で、この値はディメンションの名前を表しているとします。語textvarを引用符で囲むかどうかによって、次のOBJファンクションから返される語がVARIABLE(オブジェクトtextvarの型)になるか、DIMENSION(オブジェクトgeogの型)になるかが決まります。

SHOW OBJ(TYPE 'textvar')
VARIABLE

SHOW OBJ(TYPE textvar)
DIMENSION

例8-52 OBJによるオブジェクトの選択

この例では、OBJおよびDESCRIBEを使用して、アナリティック・ワークスペース内のすべてのリレーションの定義を調べます。Oracle OLAP文

LIMIT NAME TO OBJ(TYPE) EQ 'RELATION'
DESCRIBE

によって、次の出力が生成されます。

DEFINE REGION.DISTRICT RELATION REGION <DISTRICT>
LD REGION for each DISTRICT

DEFINE DIVISION.PRODUCT RELATION DIVISION <PRODUCT>
LD DIVISION for each PRODUCT

DEFINE MLV.MARKET RELATION MARKETLEVEL <MARKET>

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

例8-53 コンパイル済オブジェクトのカウント

次の文は、ワークスペース内のコンパイル可能オブジェクトがコンパイルされる数とされない数をカウントします。それぞれの文は、現行のワークスペースのオブジェクトをループします。OBJファンクションは、コンパイルされた各オブジェクトに対してはYES、コンパイルされなかったコンパイル可能オブジェクトに対してはNO、コンパイル可能でないオブジェクトに対してはNAを返します。NASKIPがYES(デフォルト)である場合、最初の文のCOUNTファンクションがOBJファンクションから返されるYESの値の数をカウントし、2番目の文がOBJから返されるNOの値の数をカウントします。

SHOW COUNT(OBJ(ISCOMPILED))
SHOW COUNT(NOT OBJ(ISCOMPILED))

例8-54 OBJとREFERSの組合せ

次の文は、すべてのアタッチされたワークスペースのオブジェクトへの参照を現行のワークスペース内のコンパイル可能オブジェクトで検索します。この出力には、現行のワークスペースに存在するコンパイルできないオブジェクトも表示されますが、これに対する戻り値はNAです。

REPORT OBJ(REFERS OBJLIST(AW(LIST)))

次の例では、myprogプログラムにvar1、var2またはvar3があるかどうかがOBJ(REFERS)によってわかります。OBJ(REFERS)の戻り値は、検出される参照を含む複数行のテキスト値です。var1およびvar3のみがプログラムにある場合、戻り値には1行に1つずつ2つの名前が示されます。次の文

SHOW OBJ(REFERS 'var1\nvar2\nvar3' 'myprog')

によって、次の出力が生成されます。

VAR1
VAR3

検索するプログラムまたは計算式の名前を指定しないと、OBJ(REFERS)は現行のワークスペースのNAMEディメンションのオブジェクトごとに単一行または複数行のテキスト値を返します。プログラムまたは計算式以外のオブジェクトの場合は、NAが返されます。次の文

REPORT OBJ(REFERS 'var1\nvar2\nvar3')

によって、次の出力が生成されます。

OBJ(REFERS
'var1
var2
NAME           var3' )
-------------- ----------
PRODUCT        NA
DISTRICT       NA
DIVISION       NA
LINE           NA
QUARTER        NA
REGION         NA
YEAR           NA
MONTH          NA
...
MYPROG         VAR1
VAR3
VAR1           NA
VAR2           NA
VAR3           NA

例8-55 OBJとPROPERTYの組合せ

次の例では、OBJ(PROPERTY)はactual変数のdecplaceプロパティに関する情報を返します。(詳細は、PROPERTYコマンドを参照してください。)小数点以下の桁数を格納するプロパティを作成し、その値を取得してactual変数のレポートを作成します。

次の文

CONSIDER actual
PROPERTY 'decplace' 4
LIMIT month TO FIRST 1
LIMIT division TO 'Camping'
REPORT ACROSS month W 20 DECIMAL OBJ(PROPERTY 'decplace' -
'actual') actual

によって、次の出力が生成されます。

DIVISION: CAMPING
-------ACTUAL-------
-------MONTH--------
LINE                  JAN 95
-------------- --------------------
Revenue                533,362.8800
Cogs                   360,810.6600
Gross.Margin           172,552.2200
Marketing               37,369.5000
Selling                 89,007.3800
R.D                     24,307.5000
Opr.Income              21,867.8400
Taxes                   15,970.3900
Net.Income               5,897.4500

例8-56 OBJとSEGWIDTHの組合せ

次の文は、変数のすべてのディメンションに関するセグメント・サイズの値を変更して表示する方法を示します。

CHGDFN sales SEGWIDTH 150 5000 50
SHOW OBJ(SEGWIDTH ALL 'sales')

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

150 MONTH
5000 PRODUCT
50 DISTRICT

次の文は、特定のディメンションのセグメント・サイズの値を取得する方法を示します。

SHOW OBJ(SEGWIDTH 'product' 'sales')

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

5000

次の文は、ディメンションに関連付けられているすべての多次元変数またはすべてのリレーションに関してセグメント・サイズのリストを取得する方法を示します。

object-nameを指定しない場合、NAMEディメンションのオブジェクトごとに値を取得するために、SHOWではなく、REPORTを使用する必要があります。

REPORT OBJ(SEGWIDTH 'product')

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

NAME           OBJ(SEGWIDTH 'product')
-------------- -----------------------
SALES          5000
SALES.FORECAST 5000
SALES.PLAN     5000
SHARE          5000
UNITS          5000
UNITS.M        0
...

次の文は、現行のワークスペースにあるすべてのディメンションのセグメント・サイズのリストを生成する方法を示します。

REPORT OBJ(SEGWIDTH ALL)

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

NAME           OBJ(SEGWIDTH ALL)
-------------- -----------------
SALES          150 MONTH
5000 PRODUCT
50 DISTRICT

SALES.FORECAST 150 MONTH
5000 PRODUCT
50 DISTRICT
...

OBJLIST

OBJLISTファンクションは、指定した1つ以上のワークスペースに含まれるオブジェクトのリストを表示します。OBJLISTによって返されるワークスペース・オブジェクトのリストでは、重複項目が削除され、昇順にソートされます。このファンクションを使用するときは、指定のワークスペースがアタッチされている必要があります。

結果の複数行のTEXT値は、REFERSキーワードと組み合せたOBJファンクションの引数として使用できます。このように使用すると、現行のワークスペースにあるコンパイル可能なオブジェクト(プログラム、モデルなど)の相互参照リストを生成するときに役立ちます。

注意:
OBJLISTは、NAMEディメンションを制限している場合でも常に、指定のワークスペースに存在するすべてのオブジェクトの名前を返します。

戻り値

TEXT

構文

OBJLIST[(text-expression)]

パラメータ

text-expression

現在アタッチされているワークスペースの1つまたは複数の名前が含まれるテキスト式。各ワークスペース名は、複数行のTEXT値の1行ごとに記述する必要があります。この引数を指定しなかった場合、OBJLISTは現行のワークスペース名を使用します。text-expressionに、アタッチされていないアナリティック・ワークスペースの名前が含まれる場合、OBJLISTは値を返しません。かわりにエラーが通知されます。

例

例8-57 3つのワークスペースにあるオブジェクトのリスト表示

次の例では、OBJLISTは、指定した3つのワークスペース(mycode、mydataおよびmytools)にあるすべてのオブジェクトを含む複数行のTEXT値を返します。次の文

SHOW OBJLIST('mycode\nmydata\nmytools')

によって、次の出力が生成されます。

ACTUAL
ADDFIVE
ADVERTISING
BUDGET
CITYLIST
CITYREPINIT
CITYREPS
...
YEAR

例8-58 参照されるオブジェクトのリスト表示

次の例では、OBJ(REFERS)は、mycode、mydataおよびmytoolsのワークスペースにあるオブジェクトのうち、myprogプログラムによって参照されるすべてのオブジェクトを含む複数行のTEXT値を返します。次の文

SHOW OBJ(REFERS OBJLIST('mycode\nmydata\nmytools') 'myprog')

によって、次の出力が生成されます。

ACTUAL
BUDGET
...
YEAR

OBJORG

OBJORGファンクションは、入力として、Oracleデータ・ディクショナリで定義されているOLAPのキューブまたはキューブ・ディメンション(論理OLAPオブジェクトとも呼ばれる)の名前をとり、そのキューブまたはキューブ・ディメンションが実装される下位レベルの物理的なアナリティック・ワークスペース・オブジェクトに関する情報を返します。

このファンクションは、OLAPのキューブまたはキューブ・ディメンションの名前ではなく、アナリティック・ワークスペース・オブジェクト名を必要とするOLAP DML文で使用してください。

関連項目:
「キューブ対応のOLAP DML文」

戻り値

アナリティック・ワークスペース・オブジェクト名またはTEXT。アナリティック・ワークスペースに要求された定義情報が格納されているが、フィールドが空の場合はNA。

構文

OBJORG(keyword [OWNER owner ] top-level-object-name [ sub-object-name ] )

パラメータ

keyword

有効なキーワードは、指定されたtop-level-objectまたはsub-objectの型によって異なります。詳細は次を参照してください。

- 表8-3「top-level-objectがキューブである場合のキーワード」

- 表8-4「top-level-objectがキューブおよびsub-objectがメジャーである場合のキーワード」

- 表8-5「top-level-objectがキューブおよびsub-objectがディメンション計算モデルである場合のキーワード」

- 表8-6「top-level-objectがキューブ・ディメンションである場合のキーワード」

- 表8-7「top-level-objectがキューブ・ディメンションおよびsub-objectがベース属性である場合のキーワード」

- 表8-8「top-level-objectがキューブ・ディメンションおよびsub-objectがディメンション・レベルである場合のキーワード」

- 表8-9「top-level-objectがキューブ・ディメンションおよびsub-objectがディメンション計算モデルである場合のキーワード」

表8-3 top-level-objectがキューブである場合のキーワード

キーワード

戻り値

Aggmap

キューブのaggmap。(注意: このキーワードを指定すると、ファンクションは絶対にNAを返しません。)

Composite

キューブに対してコンポジットが使用されている場合はコンポジットの名前、キューブのスパース性タイプがDENSEである場合やキューブがパーティション化されている場合はNA。(キーワードPartitionCompositeも参照してください。)

CubeStorageType

(プロパティ。)キューブのすべてのメジャーに対して使用されているDMLデータ型で、そのような単一のデータ型が存在しない場合(つまり、メジャーごとに異なるデータ型を使用している場合)はNA。

MeasureDim

キーワードCubeStorageTypeに対して返された値がNAではない場合は、キューブのベース・メジャーの参照に使用されるアナリティック・ワークスペース・メジャー・ディメンション。キーワードCubeStorageTypeに対して返された値がNAである場合はNA。

PartitionCompositeVar

キューブのパーティションに対して使用されているコンポジットの名前を含む、PartitionDimによってディメンション化されるテキスト変数で、キューブのスパース性タイプがDENSEである場合やキューブがパーティション化されていない場合はNA。(Compositeキーワードも参照してください。)

PartitionDim

キューブのパーティションの名前を含むアナリティック・ワークスペース・ディメンション。キューブがパーティション化されていない場合はNA。

PartitionRel

各キューブ・パーティションを対応するルート・ディメンション値に関連付ける、PartitionDimによってディメンション化されるリレーション。キューブがパーティション化されていない場合はNA。

PartitionTemplate

各キューブ・パーティションを対応するアナリティック・ワークスペース・ディメンション値に関連付けるパーティション・テンプレート。キューブがパーティション化されていない場合はNA。

SharedMeasureVar

キューブに記憶域タイプが指定されている場合は、キューブのすべてのメジャーを格納する(指定されたタイプの)変数。記憶域タイプが指定されていない場合はNA。

SparseType

(プロパティ。)キューブのスパース性タイプ。有効な値は、COMPRESSED、SPARSE、DENSEまたはSPARSE_GLOBALです。USER_CUBESおよびALL_CUBESビューのSPARSE_TYPE列に対応しています。

表8-4 top-level-objectがキューブおよびsub-objectがメジャーである場合のキーワード

キーワード

戻り値

メジャー

キューブに対してCubeStorageTypeキーワードを指定した際に返された値がNAである場合は、このメジャーを格納する変数。返された値がNAでない場合は、キューブの最上位レベルの変数からこのメジャーを抽出する式。

OverrideAggMap

メジャーがaggmapを持つ場合はメジャーのaggmapで、持たない場合はNAが返されます。(メジャーがaggmapを持たない場合は、キューブのaggmapが使用されることに注意してください。)

表8-5 top-level-objectがキューブおよびsub-objectがディメンション計算モデルである場合のキーワード

キーワード

戻り値

AggFloorValueSet

キューブの一貫した解決の仕様において特定のレベルでの集計が指定されている場合は、そのレベルに属するディメンションの全メンバーを含む値セット。それ以外の場合はNA。

HierValueSet

キューブが集計されるアナリティック・ワークスペース・ディメンションの全階層の名前を含む値セット。(このキーワードを指定すると、ファンクションは絶対にNAを返さないことに注意してください。)

OperVar

キューブのメジャーのうち少なくとも1つのメジャーにOverrideAggMapが含まれている場合は、OverrideAggMapが存在する各メジャーに対して使用される集計演算子を含む、キューブのメジャー・ディメンションによってディメンション化される変数。それ以外の場合はNA。

PrecomputeValueSet

キューブ編成で事前計算の条件が指定されている場合は、その条件を満たすディメンションのメンバーすべてを含む値セットで、それ以外の場合はNA。(特に、キューブ編成で事前計算の割合が指定されている場合は、NAが返されます。)

表8-6 top-level-objectがキューブ・ディメンションである場合のキーワード

キーワード

戻り値

AggRel

(各階層内の)各ディメンション値を(その階層内の)親ディメンション値に関連付ける、DimおよびHierDimによってディメンション化されるリレーション。(このキーワードを指定すると、ディメンションに階層がない場合でも、ファンクションは絶対にNAを返さないことに注意してください。)

AttributeCubeGIDRel

各ディメンション値を___AW_GID_DIMENSIONのキューブGID(属性列を含む)に関連付ける、Dimによってディメンション化されるリレーション。AttributeCubeGIDRelは、属性列を含むこと以外はCubeGIDRelと同じです。(このキーワードを指定すると、ファンクションは絶対にNAを返さないことに注意してください。)

CubeGIDRel

各ディメンション値を___AW_GID_DIMENSIONのキューブGIDに関連付ける、Dimによってディメンション化されるリレーション。ディメンションがマテリアライズド・ビュー(MV)を持たない場合、CubeGIDRelは空になります。GIDとキューブGIDの違いは、キューブGIDがすべての階層にわたる点です。(このキーワードを指定すると、ファンクションは絶対にNAを返さないことに注意してください。)

Dim

アナリティック・ワークスペースのこの論理ディメンションに対応する物理的なディメンション。(このキーワードを指定すると、ファンクションは絶対にNAを返さないことに注意してください。)

DimOrderVar

ソートに使用される(各言語の各ディメンション値に対する)整数を含む、Dimおよび___AW_ALL_LANGUAGESによってディメンション化される変数。(このキーワードを指定すると、ファンクションは絶対にNAを返さないことに注意してください。)

FamilyRel

(各階層内の各レベルにおける)各ディメンション値を、(その階層内のそのレベルの)子孫となるディメンション値(存在する場合)に関連付ける、Dim、LevelDimおよびHierDimによってディメンション化されるリレーション。FamilyRelはParentRelに似ていますが、自動的に1つ上のレベルが選択されるのではなく、レベルを指定することができます。FamilyRelはValueFamilyRelに似ていますが、レベル階層に使用されます。(このキーワードを指定すると、ファンクションは絶対にNAを返さないことに注意してください。)

GIDRel

(各階層内の)各ディメンション値を___AW_GID_DIMENSIONのGID(存在する場合)に関連付ける、DimおよびHierDimによってディメンション化されるリレーション。(このキーワードを指定すると、ファンクションは絶対にNAを返さないことに注意してください。)

HierDim

このディメンションに対するすべての階層を含むディメンション。(このキーワードを指定すると、ファンクションは絶対にNAを返さないことに注意してください。)

HierLevelValueSet

その階層に属する(LevelDimが持つ)すべてのレベルを含む、HierDimによってディメンション化される(各階層に対する)値セット。(このキーワードを指定すると、ファンクションは絶対にNAを返さないことに注意してください。)

HierOrderVar

ソートに使用される(各言語の各階層内の各ディメンションの値に対する)整数を含む、Dim、HierDimおよび___AW_ALL_LANGUAGESによってディメンション化される変数。(このキーワードを指定すると、ファンクションは絶対にNAを返さないことに注意してください。)

InHierValueSet

(その階層に含まれる)すべてのディメンション値を含む、HierDimによってディメンション化される(各階層に対する)値セット。(このキーワードを指定すると、ディメンションに階層がない場合でも、ファンクションは絶対にNAを返さないことに注意してください。)

LevelDim

このディメンションに対するすべてのレベルを含むディメンション。(このキーワードを指定すると、ディメンションにレベルがない場合でも、ファンクションは絶対にNAを返さないことに注意してください。)

LevelRel

各ディメンション値をLevelListのレベルに関連付ける、Dimによってディメンション化されるリレーション。(このキーワードを指定すると、ファンクションは絶対にNAを返さないことに注意してください。)

MemberDepthRel

(各階層内の)各ディメンション値を___AW_DEPTH_DIMENSIONの深さ(存在する場合)に関連付ける、DimおよびHierDimによってディメンション化されるリレーション。(このキーワードを指定すると、ファンクションは絶対にNAを返さないことに注意してください。)

MemberSourceRel

各ディメンション値を___AW_MEMBER_SOURCESの要素に関連付ける、Dimによってディメンション化されるリレーション。(このキーワードを指定すると、ファンクションは絶対にNAを返さないことに注意してください。)

ParentRel

(各階層内の)各ディメンション値を(その階層内の)親ディメンション値に関連付ける、DimおよびHierDimによってディメンション化されるリレーション。(このキーワードを指定すると、ディメンションに階層がない場合でも、ファンクションは絶対にNAを返さないことに注意してください。)

ValueFamilyRel

(各階層内の各GIDに対する)各ディメンション値を(その階層内の同じGIDを持つ)子孫となるディメンション値(存在する場合)に関連付ける、Dim、___AW_GID_DIMENSIONおよびHierDimによってディメンション化されるリレーション。ValueFamilyRelはFamilyRelに似ていますが、値階層に使用されます。(このキーワードを指定すると、ファンクションは絶対にNAを返さないことに注意してください。)

表8-7 top-level-objectがキューブ・ディメンションおよびsub-objectがベース属性である場合のキーワード

キーワード

戻り値

Attribute

戻り値は、ディメンションが索引付けされているかどうかによって異なります。

- ディメンションが索引付けされていない場合は、属性のディメンションに対応するDimによってディメンション化され、この(論理)属性を保持するために使用される(物理的な)変数。

- ディメンションが索引付けされている場合は、各ディメンション値をAttributeDimからの対応する値に関連付ける、属性のディメンションに対応するDimによってディメンション化される(物理的な)リレーション。

(このキーワードを指定すると、ファンクションは絶対にNAを返さないことに注意してください。)

AttributeDim

属性が索引付けされている場合は、すべての属性値を格納するディメンション。それ以外の場合はNA。

HierUniqueKeyRel

属性が一意のキー属性である場合は、(各階層内の)各アナリティック・ワークスペース・ディメンション値をAttributeDimからの対応する値に関連付ける、属性のディメンションに対応するDimおよびHierDimによってディメンション化されるリレーション。それ以外の場合はNA。

UniqueKeyRel

属性が一意のキー属性である場合(つまり、索引付けされている場合)は、各ディメンション値をAttributeDimからの対応する値に関連付ける、属性のディメンションに対応するDimによってディメンション化されるリレーション。それ以外の場合はNA。

表8-8 top-level-objectがキューブ・ディメンションおよびsub-objectがディメンション・レベルである場合のキーワード

キーワード

戻り値

SurrogateDim

このディメンション・レベルに含まれるディメンション値のみを含む、所有するディメンションのDimのサロゲート。(このキーワードを指定すると、ファンクションは絶対にNAを返さないことに注意してください。)

表8-9 top-level-objectがキューブ・ディメンションおよびsub-objectがディメンション計算モデルである場合のキーワード

キーワード

戻り値

Model

このディメンションの計算モデルに対応するモデル。(このキーワードを指定すると、ファンクションは絶対にNAを返さないことに注意してください。)

OWNER owner

top-level-objectで識別されるキューブまたはキューブ・ディメンションの所有者。この句を含めない場合、ファンクションは現行の所有者を使用します。

top-level-object

情報を要求するキューブまたはキューブ・ディメンションの名前を指定するテキスト式。

sub-object

情報を要求する論理的なOLAPサブオブジェクト(存在する場合)の名前を指定するテキスト式。有効な値は、top-level-objectがキューブまたはキューブ・ディメンションのどちらであるかによって異なります。

- top-level-objectがキューブである場合は、メジャーまたはディメンション性の名前を指定できます。

- top-level-objectがキューブ・ディメンションである場合は、ベース属性、階層、ディメンション・レベルまたはディメンション計算モデルの名前を指定できます。

例

様々なキーワードを使用したOBJORGの使用例については、このマニュアル内に掲載されている次のOLAP DMLプログラムのサンプルで説明しています。

- Dimキーワードを指定したOBJORGの使用例は、次のOLAP DMLプログラムのサンプルを参照してください。

- 例9-5「OLAPキューブ・ディメンションへのメンバーの追加」のADD_L1_2プログラム

- 例10-98「階層からのOLAPキューブ・ディメンション・メンバーの削除」のREMOVE_L2_1プログラム

- 例10-118「OLAPキューブの静的および動的モデルの作成」のSETUP_PRE_MODELおよびSETUP_POST_MODELプログラム

- 例10-169「OLAPキューブ・ディメンションの属性の更新」のADD_L1_2_DATESプログラム

- Measureキーワードを指定したOBJORGの使用例は、例9-5「OLAPキューブ・ディメンションへのメンバーの追加」のADD_L1_2プログラムを参照してください。

- Parentrelキーワードを指定したOBJORGの使用例は、例10-98「階層からのOLAPキューブ・ディメンション・メンバーの削除」のREMOVE_L2-1プログラムを参照してください。

- Attributeキーワードを指定したOBJORGの使用例は、次のプログラムのサンプルを参照してください。

- 例10-118「OLAPキューブの静的および動的モデルの作成」のSETUP_POST_MODELプログラム

- 例10-169「OLAPキューブ・ディメンションの属性の更新」のADD_L1_2_DATESプログラム

OBSCURE

OBSCUREファンクションは、単一行のテキスト式をエンコードする2つの機能を備えています。使用する機能によっては、エンコードされた値を元の形式にリストアすることもできます。

注意:
このファンクションは、単純なエンコードを実行します。セキュアな暗号化の使用方法や、その他のOracleのセキュリティ機能については、『Oracle Databaseセキュリティ・ガイド』を参照してください。

戻り値

TEXT

注意:
OBSCUREファンクションの戻り値は常にテキスト・データ型です。ただし、TEXTキーワードを指定しないかぎり、OBSCURE(HASH)およびOBSCURE(HIDE)によって返される実際の値はバイナリです。これらのエンコードされた値をテキストとして処理できるようにする(たとえば、テキスト・ファイルに格納する)には、TEXTキーワードを指定する必要があります。例8-59「テキスト・データの生成」を参照してください。

構文

OBSCURE({HASH|HIDE|UNHIDE} [TEXT] seed-exp input-exp)

パラメータ

HASH

指定したシード式に従って入力テキスト式をエンコードすることを指定します。HASHキーワードの動作は次のとおりです。

- エンコードした値は元の形式にリストアできません。

- 同じシード式および入力テキストを使用すると、結果は常に同じです。

HIDE

指定したシード式に従って入力テキスト式をエンコードすることを指定します。HIDEキーワードの動作は次のとおりです。

- UNHIDEを指定することにより、エンコードした値を元の形式にデコードできます。

- 同じシード式および入力テキストを使用しても、結果は常に異なります。

HIDEキーワードは、エンコードされた形式で値を格納する機能を備えていますが、実際に比較するのはエンコードされていない値です。

UNHIDE

元のシード式と組み合せて指定した場合、HIDEキーワードでエンコードした値が元の形式にデコードされます。「テキストのデコード」を参照してください。

TEXT

TEXTキーワードを指定すると、バイナリ・データがテキストに変換され、これによって戻り値がテキスト・データのみで構成されるようになります。TEXTキーワードを指定しなかった場合、OBSCUREの出力はバイナリ・データになります。「テキストのデコード」および「テキスト・データの生成」を参照してください。

seed-exp

入力テキスト式をエンコードする際にシード値として使用される単一行の大/小文字が区別されるテキスト式。

input-exp

OBSCUREによってエンコードまたはデコードされる単一行の大/小文字が区別されるテキスト式。

使用上の注意

テキストのデコード

OBSCURE(HIDE)とTEXTキーワードを組み合せて使用してテキスト式をエンコードした場合、その式を元の値にデコードするときにもOBSCURE(UNHIDE)とTEXTキーワードを組み合せて指定する必要があります。

例

例8-59 テキスト・データの生成

次の文は、TEXTキーワードを使用した例です。

DEFINE encoded_text VARIABLE TEXT
DEFINE unencoded_text VARIABLE TEXT

unencoded_text = 'max'
encoded_text = OBSCURE(HIDE TEXT 'XXXX' unencoded_text)
SHOW encoded_text

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

c5WF/XfABuY

同じ文でもTEXTキーワードを指定しない場合、SHOW文からバイナリ出力が生成されます。

ORA_HASH

ORA_HASHファンクションは、特定の式のハッシュ値を計算します。このファンクションは、データのサブセットの分析やランダム・サンプルの生成などの操作に役立ちます。

戻り値

NUMBER

構文

ORA_HASH (expr [, max_bucket [, seed_value ] ])

パラメータ

expr

ハッシュ値を計算するデータ。exprによって表されるデータの型や長さに制約はありません。

max_bucket

ファンクションによって返される最大バケット値。0から4294967295の任意の値を指定できます。デフォルトは4294967295です。

seed_value

0から4294967295の値です。デフォルトは0です。同じデータのセットに異なるハッシュ値を生成する場合は、この引数に値を指定します。

PARTITION

PARTITIONファンクションは、値が格納されているパーティションの名前を返します。

戻り値

テキスト

構文

PARTITION (partition_template_values)

パラメータ

partition_template_values

パーティション・テンプレートの1つ以上の値を表す式(たとえば、パーティション・テンプレートやQDRの名前など)。

例

例8-60 パーティションの名前の取得

次のオブジェクトを定義したとします。

DEFINE time DIMENSION TEXT
DEFINE product DIMENSION TEXT
DEFINE time_parentrel RELATION time <time>
DEFINE partition_sales_by_year PARTITION TEMPLATE <time product> -
PARTITION BY LIST (time)(PARTITION time_2003 VALUES -
('2003','Dec2003', 'Jan2003','31Dec2003','01Dec2003','31Jan2003','01Jan2003')-
<time product> PARTITION time_2002 VALUES -
('2002', 'Dec2002', 'Jan2002', '31Dec2002', '01Dec2002','31Jan2002','01Jan2002')-
<time product>)
DEFINE sales DECIMAL <partition_sales_by_year<time product>>

これらのオブジェクトが、次のレポートに表示されている値を持っているとします。

REPORT DOWN PARTITION(partition_sales_by_year) time product sales

PARTITION(PART
ITION_SALES_BY
_YEAR)            TIME     PRODUCT     SALES
-------------- ---------- ---------- ----------
TIME_2003      2003       00001              NA
TIME_2003      Dec2003    00001              NA
TIME_2003      Jan2003    00001              NA
TIME_2003      31Dec2003  00001           14.78
TIME_2003      01Dec2003  00001           15.52
TIME_2003      31Jan2003  00001           13.61
TIME_2003      01Jan2003  00001           10.39
TIME_2003      2003       00002              NA
TIME_2003      Dec2003    00002              NA
TIME_2003      Jan2003    00002              NA
TIME_2003      31Dec2003  00002           16.05
TIME_2003      01Dec2003  00002           12.27
TIME_2003      31Jan2003  00002           10.83
TIME_2003      01Jan2003  00002           11.07
TIME_2002      2002       00001              NA
TIME_2002      Dec2002    00001              NA
TIME_2002      Jan2002    00001              NA
TIME_2002      31Dec2002  00001           18.80
TIME_2002      01Dec2002  00001           13.64
TIME_2002      31Jan2002  00001           12.41
TIME_2002      01Jan2002  00001           16.97
TIME_2002      2002       00002              NA
TIME_2002      Dec2002    00002              NA
TIME_2002      Jan2002    00002              NA
TIME_2002      31Dec2002  00002           17.47
TIME_2002      01Dec2002  00002           16.58
TIME_2002      31Jan2002  00002           18.94
TIME_2002      01Jan2002  00002           18.36

次のコードに示すように、PARTITIONファンクションを使用すると、値が格納されているパーティションの名前を取得できます。

SHOW partition_sales_by_year
<2003, 00001>

" Use a QDR to identify the partition of a specific time value
SHOW PARTITION(partition_sales_by_year (time '31Jan2002'))
TIME_2002

REPORT DOWN time PARTITION(partition_sales_by_year)

PARTITION(PARTITION_S
----ALES_BY_YEAR)----
-------PRODUCT-------
TIME             00001      00002
-------------- ---------- ----------
2003           TIME_2003  TIME_2003
2002           TIME_2002  TIME_2002
Dec2003        TIME_2003  TIME_2003
Jan2003        TIME_2003  TIME_2003
Dec2002        TIME_2002  TIME_2002
Jan2002        TIME_2002  TIME_2002
31Dec2003      TIME_2003  TIME_2003
01Dec2003      TIME_2003  TIME_2003
31Jan2003      TIME_2003  TIME_2003
01Jan2003      TIME_2003  TIME_2003
31Dec2002      TIME_2002  TIME_2002
01Dec2002      TIME_2002  TIME_2002
31Jan2002      TIME_2002  TIME_2002
01Jan2002      TIME_2002  TIME_2002

PARTITIONCHECK

PARTITIONCHECKファンクションは、aggmapオブジェクトがパーティション・テンプレート・オブジェクトによって指定されるパーティション化と互換性があるかどうかを確認します。

集計は複数のパーティションにまたがって実行できますが、データ・フローは常に一方向である必要があります。データは同じパーティションの内部と外部を双方向に移動できないため、この処理を実行すると、集計時にエラーが発生します。

戻り値

BOOLEAN

指定したパーティション・テンプレートを使用してパーティション化される変数を、指定したaggmapを使用して集計するときにエラーが発生しない場合はYES、エラーが発生する場合はNOです。

構文

PARTITIONCHECK (aggmap partition-template)

パラメータ

aggmap

aggmapオブジェクトの名前を表すテキスト式。

partition-template

集計との互換性を確認するパーティション・テンプレート・オブジェクトの名前を表すテキスト式。

PERCENTAGE

PERCENTAGEファンクションは、数式の値ごとに合計に占めるパーセント値を計算します。

戻り値

DECIMAL

構文

PERCENTAGE(expression [CACHE] [BASEDON dimension-list])

パラメータ

expression

パーセント値が計算される数式。

CACHE

内部動作が若干変更されます。このキーワードは、元のパフォーマンスが非常に遅い場合にのみ指定してください。

BASEDON dimension-list

値ごとのパーセント計算の基準となるexpressionの1つ以上のディメンションのオプション・リスト。ディメンションを指定しなかった場合、PERCENTAGEによるパーセント計算の基準はexpressionのすべてのディメンションのすべての値の合計です。

使用上の注意

PERCENTAGEでのNASKIPの影響

PERCENTAGEはNASKIPオプションの影響を受けます。NASKIPがYESに設定されている場合(デフォルト)、PERCENTAGEはNA値を無視します。NASKIPがNOに設定されている場合、expressionのいずれかのセルの値がNAであると、PERCENTAGEはNAを返します。

例

例8-61 パーセント値の計算

次の文は、monthおよびdistrictディメンションを制限し、units変数のデータ値および小計をレポートします。

LIMIT month TO 'Jul96' TO 'Sep96'
LIMIT district TO 'Denver'
REPORT SUBTOTALS W 8 units

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

DISTRICT: DENVER
----------UNITS-----------
----------MONTH-----------
PRODUCT         Jul96    Aug96    Sep96
-------------- -------- -------- --------
Tents               608      517      441
Canoes              467      363      411
Racquets          3,006    2,836    2,838
Sportswear        2,395    2,039    2,138
Footwear          1,581    1,532    1,667
-------------- -------- -------- --------
TOTAL DENVER      8,057    7,287    7,495

次の文は、ステータスにあるproductの値ごとに、各monthの値がmonthの合計値に占めるパーセント値をレポートします。productの値ごとにPERCENTAGEが返す値の合計は1です。

REPORT SUBTOTALS W 8 DOWN month PERCENTAGE(units BASEDON month)

DISTRICT: DENVER
-----------PERCENTAGE(UNITS BASEDON MONTH)------------
-----------------------PRODUCT------------------------
MONTH      Tents      Canoes    Racquets  Sportswear  Footwear
-------- ---------- ---------- ---------- ---------- ----------
Jul96          0.39       0.38       0.35       0.36       0.33
Aug96          0.33       0.29       0.33       0.31       0.32
Sep96          0.28       0.33       0.33       0.33       0.35
-------- ---------- ---------- ---------- ---------- ----------
TOTAL          1.00       1.00       1.00       1.00       1.00
DENVER

次の文は、ステータスにあるmonthの値ごとに、各productの値がproductの合計値に占めるパーセント値をレポートします。

REPORT SUBTOTALS W 8 PERCENTAGE(units BASEDON product)

DISTRICT: DENVER
-PERCENTAGE(UNITS BASEDON-
---------PRODUCT)---------
----------MONTH-----------
PRODUCT         Jul96    Aug96    Sep96
-------------- -------- -------- --------
Tents              0.08     0.07     0.06
Canoes             0.06     0.05     0.05
Racquets           0.37     0.39     0.38
Sportswear         0.30     0.28     0.29
Footwear           0.20     0.21     0.22
-------------- -------- -------- --------
TOTAL DENVER       1.00     1.00     1.00

次の文は、units変数のすべてのディメンションを基準とするパーセント値をレポートします。PERCENTAGEが返すすべての値の合計は1です。

REPORT SUBTOTALS W 8 PERCENTAGE(units)

DISTRICT: DENVER
----PERCENTAGE(UNITS)-----
----------MONTH-----------
PRODUCT         Jul96    Aug96    Sep96
-------------- -------- -------- --------
Tents              0.03     0.02     0.02
Canoes             0.02     0.02     0.02
Racquets           0.13     0.12     0.12
Sportswear         0.10     0.09     0.09
Footwear           0.07     0.07     0.07
-------------- -------- -------- --------
TOTAL DENVER       0.35     0.32     0.33

productおよびmonthディメンションのすべての値の合計は1.00です。

QUAL

QUALファンクションを使用すると、修飾データ参照(QDR)を明示的に指定できます。QDRの構文があいまいで、Oracle OLAPによる誤った解釈や構文エラーが発生するおそれのある場合に、QUALを使用してください。

QDRは、式の1つ以上のディメンションを単一の値に制限する機能を提供します。QDRは、現行のステータスにない値を一時的に参照する場合に役立ちます。

戻り値

戻り値のデータ型は、修飾される式と同じです。

構文

QUAL(expression, dimname1 dimexp1 [, dimnameN dimexpN])

パラメータ

expression

修飾される式。QUALは、計算、ファンクション・コールまたはアンパサンド置換が含まれる複雑な式を修飾するときに使用します。QUALは、式が単純な変数名である場合にも使用できます。ただし、QUALは単純な式の場合には必要なく、次に示す標準のQDR構文を使用できます。

expression(dimname1 dimexp1 [, dimname2 dimexp2 ...])

dimname

制限されるディメンション。式のディメンションを1つ以上指定できます。各ディメンションは、dimexpとペアになっている必要があります。ディメンションのかわりにディメンション・サロゲートを指定できます。

dimexp

ディメンションを制限する値を表す式。この式は、ディメンションの値、結果がディメンションの値となるテキスト式、結果がディメンションの値の論理位置となる数式、ディメンションのリレーションのいずれでもかまいません。

制限されるディメンションが結合ディメンションである場合、dimexpは山カッコで囲み、そのベース・ディメンションごとの値を含める必要があります。

制限されるディメンションが連結ディメンションである場合、dimnameおよびdimexpは、表8-10「連結ディメンションに関するdimnameおよびdimexpの有効な組合せ」に示す組合せの1つになります。

表8-10 連結ディメンションに関するdimnameおよびdimexpの有効な組合せ

dimname

dimexp

連結ディメンションの名前

連結ディメンションの値

連結ディメンションの名前

ベース・ディメンションの名前

連結ディメンションのベース・ディメンションの名前

ベース・ディメンションの値

連結ディメンションのベース・ディメンションの名前

連結ディメンションの名前

例

例8-62 QUALとMAXの組合せ

次の例は、最初に、データのディメンションを制限することによってデータがどのように表示されるかを示し、次に、QUALを使用した場合はどのように表示されるかを示します。

次のOLAP DML文を発行して、1996年1月から1996年6月までのスポーツ用品部門における売上原価の系列データの表示を制限し、次に毎月の実際原価または予算原価の最大値(MAX(actual,budget))、実際原価、および予算原価について月ごとのレポートを作成します。

LIMIT month TO 'Jan96' TO 'Jun96'
LIMIT line TO 'Cogs'
LIMIT division TO 'Sporting'
REPORT DOWN month W 11 MAX(actual,budget) W 11 actual W 11 budget

この文によって生成されるレポートは、次のとおりです。

DIVISION: SPORTING
---------------LINE----------------
---------------COGS----------------
MAX(ACTUAL,
MONTH            BUDGET)     ACTUAL      BUDGET
-------------- ----------- ----------- -----------
Jan96           287,557.87  287,557.87  279,773.01
Feb96           323,981.56  315,298.82  323,981.56
Mar96           326,184.87  326,184.87  302,177.88
Apr96           394,544.27  394,544.27  386,100.82
May96           449,862.25  449,862.25  433,997.89
Jun96           457,347.55  457,347.55  448,042.45

今度は、lineまたはdivisionのステータスを変更せずに、MAX(actual,budget)の同じ数値がどのように表示されるかを確認します。

ALLSTAT
LIMIT month TO 'Jan96' TO 'Jun96'
REPORT HEADING 'For Cogs in Sporting Division' DOWN month -
W 11 HEADING 'MAX(actual,budget)'-
QUAL(MAX(actual,budget), line 'Cogs', division 'Sporting')

For Cogs in
Sporting       MAX(actual,
Division         budget)
-------------- -----------
Jan96           287,557.87
Feb96           323,981.56
Mar96           326,184.87
Apr96           394,544.27
May96           449,862.25
Jun96           457,347.55

標準のQDR構文を使用して同じレポートを生成しようとすると、エラーが発生します。

REPORT HEADING 'For Cogs in Sporting Division' DOWN month -
W 11 HEADING 'MAX(actual,budget)'-
MAX(actual,budget) (line cogs, division sporting)

次のエラー・メッセージが生成されます。

ERROR: A right parenthesis or an operator is expected after LINE.

例8-63 QUALと連結ディメンションの組合せ

次の例は、QUALファンクションで連結ディメンションの値を制限する2つの方法を示します。reg.dist.ccdim連結ディメンションには、そのベース・ディメンションとしてregionおよびdistrictがあります。rdsales変数は、month、productおよびreg.dist.ccdimによってディメンション化されています。

LIMIT month TO 'Jan96' TO 'Jun96'
LIMIT product TO 'Tents' 'Canoes'

" Limit the concat by specifying one of its component dimensions
REPORT W 30 QUAL(rdsales * 2, month 'Feb96', district 'Boston')

この文によって生成されるレポートは次のとおりです。

QUAL(RDSALES * 2, MONTH
PRODUCT          'Feb96', DISTRICT 'Boston')
-------------- ------------------------------
Tents                               69,283.18
Canoes                             164,475.36

" Limit the concat by specifying one of its values
REPORT W 30 QUAL(rdsales * 2, month 'Mar96', reg.dist.ccdim  '<district: Boston>')

QUAL(RDSALES * 2, MONTH
'Mar96', REG.DIST.CCDIM
PRODUCT            '<district: Boston>')
-------------- ------------------------------
TENTS                               91,484.42
CANOES                             195,244.56

RANDOM

RANDOMファンクションは、指定した下限と上限の間に不規則に分散する数を生成します。不規則に生成される数は、アプリケーションのテストの作成および繰返しに役立ちます。特に、シミュレーションおよび予測アプリケーションに効果的です。

ヒント:
RANDOMでは、数値を計算するためにRANDOM.SEED.1およびRANDOM.SEED.2オプションの値を使用し、続いて次回のために値を変更します。独自のシードを作成する場合は、両方のオプションの値を奇数に設定します。これにより、生成される数値の不規則性が増大します。

戻り値

DECIMAL

構文

RANDOM([lowbound] [highbound])

パラメータ

lowbound

乱数列の下限を指定する数式。デフォルト値は0です。lowboundがNAである場合、RANDOMファンクションの結果はNAです。

highbound

乱数列の上限を指定する数式。デフォルト値は1です。highboundがNAである場合、RANDOMファンクションの結果はNAです

例

例8-64 乱数の生成

この例は、100から200までの間の乱数をproductによってディメンション化されたtestという名前の変数に代入します。

test = RANDOM(100 200)
REPORT test

この文によって生成されるレポートは、次のとおりです。

PRODUCT           TEST
-------------- ----------
Tents              122.93
Canoes             176.69
Racquets           168.32
Sportswear         150.92
Footwear           187.46

RANK

RANKファンクションは、数式の値のランクを計算します。

戻り値

DECIMAL

構文

RANK(expression method [attributes] [BASEDON dimension-list])

attributesは、次のいずれか1つ以上です。

RESET

NAFIRST

NALAST

LIMITSAVE (limit-expression...)

TIEBREAKERS (target-expression...)

パラメータ

expression

ランキングが計算される数式。

method

expressionの中の値のランクを計算するときに使用するメソッド。method引数は、次のキーワードのいずれかです。「メソッド値の結果」も参照してください。

表8-11 RANK計算のためのメソッド

メソッド

説明

MIN

等しい値が複数存在する場合、同一の最小ランクが付けられる。

MAX

等しい値が複数存在する場合、同一の最大ランクが付けられる。

AVERAGE

等しい値が複数存在する場合、同一の平均ランクが付けられる。

PACKED

等しい値が複数存在する場合、同一のランクが付けられるが、結果は連続INTEGER値になる。

UNIQUE

すべての値に一意のランクが付けられる。等しい値が複数存在する場合、ランクは不定。

PERCENTILE

式の中における値の出現の相対度数に応じて、1から100までのランクが付けられる。

DECILE

式の中における値の相対度数に応じて、1から10までのランクが付けられる。

QUARTILE

式の中における値の出現の相対度数に応じて、1から4までのランクが付けられる。

RESET

ループ文内(代入文など)のRANKの計算方法を変更します。

- RESETを指定しない場合、各グループのメンバーのランクが計算されるのは1回のみで、ランク付けされたこれらの値はキャッシュに格納されます。ループ文の実行が繰り返され、同じ値セットに対してRANKが実行されると、RANKの戻り値にはキャッシュされた値が使用されます。

- RESETを指定した場合、ループ文内のRANKは実行時に毎回再計算されます。その結果、RANKを含むループ文の実行にかかる時間が大幅に増加します。

ループ文の実行時にいずれかのグループ内のメンバーのランクが変わることがわかっている場合を除き、ループ文内のRANKに対してRESETは指定しません。

NAFIRST

値をランク付けする前に、すべてのNA値が正の最大小数か(10**308)に変換されます。

注意:
NAFIRSTまたはNALISTのいずれかを指定しないかぎり、NAの式値によってNAランクが生成されます。

NALAST

値をランク付けする前に、すべてのNA値が負の最大小数か-(10**308)に変換されます。

注意:
NAFIRSTまたはNALISTのいずれかを指定しないかぎり、NAの式値によってNAランクが生成されます。

LIMITSAVE

RANKの計算時に使用されるディメンションのステータスを指定します。LIMITSAVEはCHGDIMSで指定するのではなく、RANKファンクション内で指定することによって、RANKで新しい結果を計算する必要がある場合に、一度のみステータスを評価できます。

limit-expression

RANKの実行時に、ディメンション・ステータスの判別に使用されるディメンション値。limit-expression引数には、値セット、LIMITファンクションまたはSORTファンクションなど、あらゆる式を指定できます。

TIEBREAKERS

同じランクの値を順序付けする方法を指定します。

tiebreaker-expression

値セット、LIMITファンクションまたはSORTファンクションなど、あらゆる式を指定できます。Oracle OLAPは、指定された順序でtiebreaker-expressionを実行します。各tiebreaker-expressionのディメンションのステータスは、LIMITSAVE句で指定したステータス(指定した場合)か、ディメンションの現在のステータスとなります。

注意:
tiebreaker-expressionの値セットを指定すると、Oracle OLAPは、-(STATRANK)の順序でランク付けされた項目を返します。

BASEDON dimension-list

ランキングに含めるexpressionの1つ以上のディメンションのオプション・リスト。ディメンションを指定しなかった場合、expressionのすべてのディメンションがランキングの基準になります。

注意:
BASEDONディメンションの現在の値がランキング・ステータスにない場合、NAのランクが返されます。

使用上の注意

RANKの動作の監視

OLAP DMLには、RANKファンクションの動作を監視するために使用できるオプション(RANK_CALLS、RANK_CELLSおよびRANK_SORTS)があります。

RANK_CALLS: RANK_CALLSオプションはINTEGERの読取り専用のオプションです。このオプションは、Oracle OLAPがRANKファンクションに対して行ったコール数を保持します。

RANK_CELLS: RANK_CELLSオプションはINTEGERの読取り専用のオプションです。このオプションはRANKファンクションの実行時に計算された値の数を保持します。

RANK_SORTS: RANK_SORTSオプションは、RANKファンクションの実行によってトリガーされたソートの数を保持する読取り専用のオプションです。

メソッド値の結果

ここでは、値をランク付けする各種メソッドの結果について説明します。これらの結果は、次の文に示すsales2変数(「値のランク付け」を参照)およびgeographyディメンション(G2に制限)に基づいています。

LIMIT geography TO 'G2'
SORT items D sales2
REPORT DOWN geography sales2

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

------------------------SALES2------------------------
------------------------ITEMS-------------------------
GEOGRAPHY        ITEM4      ITEM2      ITEM3      ITEM1      ITEM5
-------------- ---------- ---------- ---------- ---------- ----------
G2                  25.00      20.00      20.00      15.00       7.00

表8-12「各種メソッドによるランク付けの結果」は、次の形式の文によってランクを生成する各種メソッドの結果を示しています。

REPORT DOWN geography RANK(sales2 MIN BASEDON items)

さらに、MINを他のmethodキーワードで置き換えた場合の結果も示します。

表8-12 各種メソッドによるランク付けの結果

メソッド

(ITEM4, G2) = 25

(ITEM2, G2) = 20

(ITEM3, G2) = 20

(ITEM1,G2) = 15

(ITEM5,G2) = 7

MIN

1

2

2

4

5

MAX

1

3

3

4

5

AVERAGE

1

2.5

2.5

4

5

PACKED

1

2

2

3

4

UNIQUE

1

2

3

4

5

PERCENTILE

100

62

62

25

1

DECILE

10

7

7

3

1

QUARTILE

4

3

3

1

1

Item2とItem3に関してUNIQUEメソッドから返される値は、2の場合と3の場合があります。これは、式の中に複数の等しい値が存在する場合、RANKファンクションによって一意のランクが不規則に割り当てられるためです。

例

例8-65 値のランク付け

アナリティック・ワークスペースに、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

次の文は、MINメソッドを使用してitemsディメンションを基準にsales2の値をランク付けした結果のレポートを生成します。

report rank(sales2 min basedon items)

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

-RANK(SALES2 MIN BASEDON ITEMS)-
-----------GEOGRAPHY------------
ITEMS              g1         g2         g3
-------------- ---------- ---------- ----------
Item1                1.00       4.00       5.00
Item2                4.00       2.00       4.00
Item3                3.00       2.00       2.00
Item4                1.00       1.00       1.00
Item5                  NA       5.00       3.00

次の文は、MINメソッドを使用してgeographyディメンションを基準にsales2の値をランク付けした結果のレポートを生成します。

REPORT RANK(sales2 MIN BASEDON geography)

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

----RANK(SALES2 MIN BASEDON-----
-----------GEOGRAPHY)-----------
-----------GEOGRAPHY------------
ITEMS              g1         g2         g3
-------------- ---------- ---------- ----------
Item1                1.00       2.00       3.00
Item2                3.00       1.00       2.00
Item3                3.00       2.00       1.00
Item4                1.00       2.00       2.00
Item5                  NA       2.00       1.00

次の文は、MINメソッドを使用してsales2のすべてのディメンションを基準にsales2の値をランク付けした結果のレポートを生成します。

REPORT RANK(sales2, MIN)

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

-------RANK(SALES2, MIN)--------
-----------GEOGRAPHY------------
ITEMS              g1         g2         g3
-------------- ---------- ---------- ----------
Item1                1.00      10.00      12.00
Item2               13.00       7.00       9.00
Item3               10.00       7.00       5.00
Item4                1.00       3.00       3.00
Item5                  NA      14.00       6.00

RAWTOHEX

RAWTOHEXファンクションは、RAW値を16進数の文字列に変換します。

関連項目:
「RAWデータ型」、およびHEXTORAWファンクション。

戻り値

TEXT

構文

RAWTOHEX(raw-exp)

パラメータ

raw-exp

RAW式。

RECNO

RECNOファンクションは、読取り用に開かれているファイルの現行レコード番号をレポートします。Oracle OLAPがファイルの末尾に到達した場合、NAが返されます。

戻り値

INTEGER

構文

RECNO(fileunit)

パラメータ

fileunit

FILEOPENファンクションへの前のコールで読取り用に開かれたファイルに割り当てられるファイル・ユニット番号。

使用上の注意

ファイルのオープン

RECNOファンクションを使用するには、その前に読取り用にファイルを開く必要があります。開いているファイルとファイル・ユニット番号が関連付けられていない場合、またはファイルが書込み用に開かれている場合、RECNOはエラーを返します。

RECNOとFILEGETの組合せ使用

RECNOは、通常、すべてのレコードを読み取るFILEREADまたはFILENEXTと組み合せて使用します。レコードを部分的に読み取るFILEGETファンクションを指定してファイルからデータを読み取ると、RECNOからは、実際のレコードの数ではなく、ファイルからデータを読み取った回数が返されます。

LINENUMオプション

出力の現行の行数を保持するLINENUMオプションも参照してください。

テキスト・ファイル内のレコード

ファイルがテキスト・ファイルである場合、レコードは改行文字で区切られます。ファイルがバイナリ・ファイルである場合、FILESET文を使用して、ファイルのLSIZE属性をレコード長に設定する必要があります。TEXTがデフォルトのファイル・タイプです。

例

例8-66 RECNOとFILEREADの組合せ使用

次のサンプル・コードのFILEREAD文は、filenameに関連付けられている各レコード番号を追加して、INTEGERディメンションをメンテナンスします。各レコード番号に関連付けられているテキストは、それぞれが変数textvarの値になります。

DEFINE dim1 INTEGER DIMENSION
DEFINE textvar TEXT <dim1>
x = FILEOPEN('filename' R)
FILEREAD x APPEND dim1 = RECNO(x) W 8 TEXTVAR

REGEXP_COUNT

REGEXP_COUNTファンクションは、あるパターンがソース文字列に出現した回数を返します。このファンクションでは、入力キャラクタ・セットによって定義された文字を使用して文字列を評価します。

関連項目:
REGEXP_INSTR

戻り値

一致が見つかった場合はパターンの出現回数を示すINTEGER、それ以外の場合は0。

構文

REGEXP_COUNT (source_char, pattern [, position [, match_param]])

パラメータ

source_char

ファンクションで検索するテキスト式。

pattern

ファンクションで検索するテキスト式。通常は、テキスト・リテラルであり、最大512バイトを含むことができます。patternのデータ型がsource_charのデータ型と異なる場合、このファンクションはpatternをsource_charのデータ型に変換します。

このファンクションでは、パターン内の副式のカッコは無視されます。たとえば、パターン'(123(45))'は、'12345'に相当します。また、ピリオドは任意の文字と一致するワイルドカード文字として解釈されます。

関連項目:
patternに指定できる演算子のリストについては、『Oracle Database SQL言語リファレンス』のOracleの正規表現のサポートに関する項を参照してください。

position

正のINTEGERは、source_charの検索を開始する文字を示します。デフォルトは1で、source_charの最初の文字から検索を開始します。パターンの最初の一致文字列を見つけると、最初の一致文字列の後の最初の文字から、2番目の一致文字列の検索を開始します。

match_parameter

ファンクションのデフォルトのマッチング動作を変更するテキスト式。次の表に示す値を1つ以上指定できます。

値

指定内容

c

大/小文字を区別するマッチング。

i

大/小文字を区別しないマッチング。

m

ソース文字列を複数行として処理します。^(キャレット)および$(ドル記号)はそれぞれ、ソース文字列全体の先頭および末尾だけではなく、ソース文字列の任意の位置で任意の行の先頭および末尾として解釈されます。デフォルトでは、ソース文字列を単一行として処理します。

n

ピリオド(ワイルドカード文字)と一致する文字に改行文字を含めます。デフォルトでは含まれません。

x

空白文字を無視します。

この引数に複数の矛盾する値を指定した場合、最後に指定した値が使用されます。たとえば、'ic'と指定した場合、大/小文字を区別するマッチングが使用されます。前述以外の文字を指定した場合、エラーが返されます。

このオプションの引数を省略した場合、デフォルトで大/小文字を区別するかどうかはNLS_SORTパラメータの値により決定され、ピリオド(.)は改行文字と一致せず、また、ソース文字列は単一行として処理されます。

REGEXP_INSTR

REGEXP_INSTRファンクションは、文字列から指定したパターンを持つサブストリングを検索し、そのサブストリングの位置を返します。

このファンクションでは、入力キャラクタ・セットによって定義された文字を使用して文字列を評価します。

関連項目:
REGEXP_COUNT, REGEXP_REPLACE、およびREGEXP_SUBSTR

戻り値

パターンが見つかった場合はNUMBER、それ以外の場合は0。

構文

REGEXP_INSTR (source_char, pattern[, position[, occurrence[, return_option[, match_parameter ]]]])

パラメータ

source_char

ファンクションで検索するテキスト式。

pattern

ファンクションで検索するテキスト式。通常は、テキスト・リテラルであり、最大512バイトを含むことができます。ピリオドは任意の文字と一致するワイルドカード文字として解釈されます。

position

source_charの検索を開始する文字を示す正の整数。positionのデフォルト値は1で、source_charの最初の文字から検索を開始します。

occurrence

patternのどの一致文字列を検索するかを示す正の整数。occurrenceのデフォルト値は1で、patternの最初の一致文字列を検索します。

return_option

最初に一致した文字の位置を返す場合(デフォルト)は0(ゼロ)を、一致文字列の次の文字の位置を返す場合は1を指定します。

match_parameter

ファンクションのデフォルトのマッチング動作を変更するテキスト式。次の表に示す値を1つ以上指定できます。

値

指定内容

c

大/小文字を区別するマッチング。

i

大/小文字を区別しないマッチング。

m

ソース文字列を複数行として処理します。^(キャレット)および$(ドル記号)はそれぞれ、ソース文字列全体の先頭および末尾だけではなく、ソース文字列の任意の位置で任意の行の先頭および末尾として解釈されます。デフォルトでは、ソース文字列を単一行として処理します。

n

ピリオド(ワイルドカード文字)と一致する文字に改行文字を含めます。デフォルトでは含まれません。

x

空白文字を無視します。

例

次の文

REGEXP_INSTR('Mississippi', 'i', 1, 3)

によって、文字列Mississippiから、文字iの3つ目の出現箇所を検索し、検索は最初の文字から開始されます。値8が返されます。

REGEXP_REPLACE

REGEXP_REPLACEファンクションは、文字列から指定したパターンを持つサブストリングを検索し、そのサブストリングを別のサブストリングで置き換えます。

関連項目:
REGEXP_COUNT, REGEXP_INSTR、およびREGEXP_SUBSTR

戻り値

VARCHAR2

構文

REGEXP_REPLACE(source_char, pattern[, replace_string[, position[, occurrence[, match_parameter ]]]])

パラメータ

source_char

ファンクションで検索するテキスト式。

pattern

ファンクションで検索するテキスト式。通常は、テキスト・リテラルであり、最大512バイトを含むことができます。ピリオドは任意の文字と一致するワイルドカード文字として解釈されます。

replace_string

source_charのpatternを置き換えるテキスト。

position

source_charの検索を開始する文字を示す正の整数。positionのデフォルト値は1で、source_charの最初の文字から検索を開始します。

occurrence

patternのどの一致文字列を検索するかを示す正の整数。occurrenceのデフォルト値は1で、patternの最初の一致文字列を検索します。

match_parameter

ファンクションのデフォルトのマッチング動作を変更するテキスト式。次の表に示す値を1つ以上指定できます。

値

指定内容

c

大/小文字を区別するマッチング。

i

大/小文字を区別しないマッチング。

m

ソース文字列を複数行として処理します。^(キャレット)および$(ドル記号)はそれぞれ、ソース文字列全体の先頭および末尾だけではなく、ソース文字列の任意の位置で任意の行の先頭および末尾として解釈されます。デフォルトでは、ソース文字列を単一行として処理します。

n

ピリオド(ワイルドカード文字)と一致する文字に改行文字を含めます。デフォルトでは含まれません。

x

空白文字を無視します。

例

次の文

REGEXP_REPLACE('500   Oracle     Parkway,    Redwood  Shores, CA', '( ){2,}', ' ')

によって、余分な空白を削除し、次の文字列を返します。

500 Oracle Parkway, Redwood Shores, CA

REGEXP_SUBSTR

REGEXP_SUBSTRファンクションは、文字列から指定したパターンを持つサブストリングを検索し、そのサブストリングを返します。

関連項目:
REGEXP_COUNT, REGEXP_INSTR、およびREGEXP_REPLACE

戻り値

VARCHAR2 | CLOB

構文

REGEXP_SUBSTR(source_char, pattern[, position[, occurrence[, match_parameter ]]])

パラメータ

source_char

ファンクションで検索するテキスト式。

pattern

ファンクションで検索するテキスト式。通常は、テキスト・リテラルであり、最大512バイトを含むことができます。ピリオドは任意の文字と一致するワイルドカード文字として解釈されます。

position

source_charの検索を開始する文字を示す正の整数。positionのデフォルト値は1で、source_charの最初の文字から検索を開始します。

occurrence

patternのどの一致文字列を検索するかを示す正の整数。occurrenceのデフォルト値は1で、patternの最初の一致文字列を検索します。

match_parameter

ファンクションのデフォルトのマッチング動作を変更するテキスト式。次の表に示す値を1つ以上指定できます。

値

指定内容

c

大/小文字を区別するマッチング。

i

大/小文字を区別しないマッチング。

m

ソース文字列を複数行として処理します。^(キャレット)および$(ドル記号)はそれぞれ、ソース文字列全体の先頭および末尾だけではなく、ソース文字列の任意の位置で任意の行の先頭および末尾として解釈されます。デフォルトでは、ソース文字列を単一行として処理します。

n

ピリオド(ワイルドカード文字)と一致する文字に改行文字を含めます。デフォルトでは含まれません。

x

空白文字を無視します。

例

例8-67 REGEXP_SUBSTRINGを使用した大/小文字を区別するサブストリング検索

次の文

REGEXP_SUBSTR('7 W 96th St, New York, New York', 'new york', 10, 2, 'i')

によって、10番目の文字から検索を開始し、大/小文字を区別しないで、New Yorkの2番目の出現箇所と一致します。

例8-68 REGEXP_SUBSTRINGを使用した、一重引用符で囲んだ文字列からのサブストリングの取得

次の文

REGEXP_SUBSTR('parsley, sage, rosemary, thyme', ',[^,]+,', 1)

によって、一重引用符(')で囲まれた最初のサブストリングに一致し、値「, sage」を返します。

REM

REMファンクションは、ある数式を別の数式で除算した後に剰余を返します。

戻り値

DECIMAL

構文

REM(expression1 expression2)

パラメータ

expression

REMは、expression1をexpression2で除算した剰余を返します。

例

例8-69 剰余の計算

この例は、REMを使用して、14を5で除算後の剰余を求める方法を示します。次の文

SHOW REM(14 5)

によって、次の結果が生成されます。

4.00

REMAINDER

REMAINDERファンクションは、ある数値を別の数値で除算したときの剰余を返します。

戻り値

数値。Oracle OLAPでは、最も大きな数値の引数が優先され、残りの引数はその引数と同じデータ型に暗黙的に変換されて、そのデータ型で戻り値が返されます。

構文

REMAINDER (dividend, divisor)

パラメータ

dividend

除算の対象とする数式(またはOracle OLAPで暗黙的に数式へと変換できる式)。

divisor

除数とする数式(またはOracle OLAPで暗黙的に数式へと変換できる式)。

例

例8-70 除算後の剰余の確認

SHOW REMAINDER(18,7)
-3.00

REMBYTES

REMBYTESファンクションは、テキスト式から1バイト以上を削除し、残りの値を返します。

戻り値

TEXT

構文

REMBYTES(text-expression start [length])

パラメータ

text-expression

REMBYTESがバイトを削除するTEXT式。text-expressionから削除される文字に埋込みの改行が含まれる場合、これらの改行も削除されます。その他の改行は維持されます。削除された改行の数は、削除された文字数の合計にはカウントされません。

ヒント:
NTEXT値に対してこのファンクションを使用する必要がある場合、CONVERTまたはTO_CHARファンクションを使用してNTEXT値をTEXTに変換します。

start

文字の削除を開始する文字位置を表すINTEGER。text-expressionの最初の文字の位置は1です。startの値がtext-expressionの長さより大きい場合、REMBYTESは単にtext-expressionを返します。

length

削除される文字の数を表すINTEGER。lengthを指定しなかった場合、startの位置にある文字のみが削除されます。

例

例8-71 REMBYTESを使用したサブストリングの削除

この例は、サブストリングthereをテキスト値hellotherejoeから削除する方法を示します。

次の文

SHOW REMBYTES('hellotherejoe', 6, 5)

によって、次の出力が生成されます。

hellojoe

REMCHARS

REMCHARSファンクションは、テキスト式から1文字以上を削除し、残りの値を返します。

ヒント:
マルチバイト・キャラクタ・セットを使用している場合、REMCHARSファンクションのかわりにREMBYTESファンクションを使用できます。

戻り値

TEXTまたはNTEXT

構文

REMCHARS(text-expression start [length])

パラメータ

text-expression

REMCHARSが文字を削除する式。text-expressionから削除される文字に埋込みの改行が含まれる場合、これらの改行も削除されます。その他の改行は維持されます。削除された改行の数は、削除された文字数の合計にはカウントされません。

TEXT式を指定すると、戻り値はTEXTです。NTEXT式を指定すると、戻り値はNTEXTです。

start

文字の削除を開始する文字位置を表すINTEGER。text-expressionの最初の文字の位置は1です。startの値がtext-expressionの長さより大きい場合、REMCHARSは単にtext-expressionを返します。

length

削除される文字の数を表すINTEGER。lengthを指定しなかった場合、startの位置にある文字のみが削除されます。

例

例8-72 REMCHARSを使用したサブストリングの削除

この例は、サブストリングthereをテキスト値hellotherejoeから削除する方法を示します。

SHOW REMCHARS('hellotherejoe', 6, 5)

hellojoe

例8-73 1種類の文字の削除

この例は、文字tをテキスト値hellotherejoeから削除する方法を示します。

SHOW REMCHARS('hellotherejoe', 6)

helloherejoe

REMCOLS

REMCOLSファンクションは、複数行のTEXT値の各行から指定の列を削除します。このファンクションは、残りの列のみが含まれる複数行のテキスト値を返します。

列は、複数行のTEXT値の各行における文字位置です。各行の最初の文字は列1であり、2番目の文字は列2です(以降同様)。

戻り値

TEXTまたはNTEXT

空の行がある場合でも、REMCOLSは常にtext-expressionと同じ行数のTEXT値を返します。

構文

REMCOLS(text-expression start [length])

パラメータ

text-expression

指定した列が削除されるテキスト式。text-expressionが複数行のTEXT値である場合、その各行から指定した列の文字が削除されます。

TEXT式を指定すると、戻り値はTEXTです。NTEXT式を指定すると、戻り値はNTEXTです。

start

列の削除を開始する列の位置を表す1から32,767までのINTEGER。text-expressionの各行における最初の文字の列位置は1です。text expressionの特定の行にある最後の文字よりも右側にくる開始列を指定すると、戻り値の対応する行はその行と同一です。

length

削除される列の数を表すINTEGER。lengthを指定しなかった場合、REMCOLSは先頭の列のみを削除します。text expressionの特定の行における開始位置に続く文字数を超える長さを指定すると、戻り値の対応する行には開始列より前にある文字が含まれます。

例

例8-74 テキスト列の削除

次の例では、CITYLISTの各行から2列目を先頭に4列が削除されます。

DEFINE citylist VARIABLE TEXT
CITYLIST = 'Boston\nHouston\nChicago\nDenver'

次の文

SHOW citylist

によって、次の出力が生成されます。

Boston
Houston
Chicago
Denver

次の文

SHOW REMCOLS(citylist 2 4)

によって、次の出力が生成されます。

Bn
Hon
Cgo
Dr

REMLINES

REMLINESファンクションは、複数行のTEXT式から1行以上を削除し、残りの値を返します。

戻り値

TEXTまたはNTEXT

構文

REMLINES(text-expression start [length])

パラメータ

text-expression

REMLINESが1行以上を削除する値の複数行のテキスト式。TEXT式を指定すると、戻り値はTEXTです。NTEXT式を指定すると、戻り値はNTEXTです。

start

行の削除を開始する行番号を表すINTEGER。text-expressionの最初の行の位置は 1です。

length

抽出する行数を表すINTEGER。lengthを指定しなかった場合、startの行のみが削除されます。

例

例8-75 テキスト行の削除

この例は、次の値を持つmktglistという変数の複数行のテキスト値から2番目の行を削除する方法を示します。

Salespeople
Products
Services

次の文

SHOW REMLINES(mktglist, 2)

によって、次の出力が生成されます。

Salespeople
Services

REPLACE

REPLACEファンクションは、指定した文字列が別の文字列に置き換えられるたびに指定した文字を返すか、または指定した文字列が出現するとすべてを削除します。

REPLACEでは、TRANSLATEファンクションの機能に関連した機能が提供されます。TRANSLATEは、単一の文字を1つずつ置き換える機能を備えています。REPLACEは、ある文字列を別の文字列に置き換える機能や文字列を削除する機能を備えています。

関連項目:
詳細は、『Oracle Database SQL言語リファレンス』のREPLACEファンクションについての説明を参照してください。

戻り値

charと同じデータ型

構文

REPLACE ( char, search_string [, replacement_string ])

パラメータ

char

置換時に返す文字を表すテキスト式。

search_string

置換え対象の文字列を表すテキスト式。NAを指定すると、ファンクションはcharを返します。

replacement_string

search_stringの置換後の文字列を表すテキスト式。この引数の値を指定しない場合やNAの値を指定した場合、出現したsearch_stringはすべて削除されます。

REPLBYTES

REPLBYTESファンクションは、テキスト式の1バイト以上を置換します。

ヒント:
シングルバイト・キャラクタ・セットを使用している場合、REPLBYTESファンクションではなくREPLCHARSファンクションを使用できます。また、テキスト値に指定の文字列が1つ以上存在する場合に、その文字列を別の文字列に変更するには、CHANGECHARSファンクションを使用します。

戻り値

TEXT

構文

REPLBYTES(text-expression replacement [start])

パラメータ

text-expression

REPLBYTESがバイトを置換するTEXT式。text-expressionから置換されるバイトに埋込みの改行が含まれる場合、これらの改行は削除されます。その他の改行は維持されます。削除された改行の数は、置換されたバイト数の合計にはカウントされません。置換された式の改行も、REPLBYTESの出力に保持されますが、カウントの対象にはなりません。

ヒント:
NTEXT値に対してこのファンクションを使用する必要がある場合、CONVERTまたはTO_CHARファンクションを使用してNTEXT値をTEXTに変換します。

replacement

text-expressionの既存のバイトを置換する1バイト以上が含まれるテキスト式。

start

バイトの置換を開始するバイト位置を表すINTEGER。text-expressionの最初のバイト位置は1です。この引数を省略した場合、REPLBYTESは最初のバイトから開始します。REPLBYTESは、replacementによって指定されるバイトに対して必要なバイト数のtext-expressionを置換します。startの値がtext-expressionの長さより大きい場合、REPLBYTESは単にtext-expressionを返します。

例

例8-76 バイトとしてのテキストの置換

この例は、テキスト値Hello there, Joeの一部を置換する方法を示します。

次の文

SHOW REPLBYTES('Hello there, Joe', 'Jane', 14)

によって、次の出力が生成されます。

Hello there, Jane

例8-77 REPLBYTESによる改行の処理

この例は、REPLBYTESによって改行が保持されて無視されることを示します。

var1 = JOINLINES('Hello' 'there' 'Joe')
var2 = JOINLINES('Hi' 'Jane')

次の文

SHOW REPLBYTES(var1 var2)

によって、次の出力が生成されます。

Hi
Janehere
Joe

REPLBYTESは、var1の先頭の6バイト(HellothereJoeのHellot)をvar2の6バイト(HiJane)に置換しました。var2のHiおよびvar1のthereの後の改行は保持されます。

var1の13バイトをすべて置換するには、置換後のバイトに13バイト指定する必要があります。たとえば、Janeの後に7つの空白を追加します。

var2 = JOINLINES('Hi' 'Jane       ')

次の文

SHOW REPLBYTES(var1 var2)

によって、次の出力が生成されます。

Hi
Jane

REPLCHARS

REPLCHARSファンクションは、テキスト式の1文字以上を置換します。

ヒント:
マルチバイト・キャラクタ・セットを使用している場合、REPLCHARSファンクションのかわりにREPLBYTESファンクションを使用できます。また、CHANGECHARSファンクションを使用すると、テキスト値に指定の文字列が1つ以上存在する場合、その文字列を別の文字列に変更できます。

戻り値

TEXTまたはNTEXT

このファンクションでは、TEXT値とNTEXT値を引数として使用できます。戻り値のデータ型は、引数として指定する値のデータ型によって次のように異なります。

- すべての引数がTEXT値である場合、戻り値はTEXTです。

- すべての引数がNTEXT値である場合、戻り値はNTEXTです。

- 引数にTEXTとNTEXTの両方の値が存在する場合は、すべてのTEXT値がNTEXT値に変換されてからファンクションの演算が実行され、戻り値はNTEXTになります。

構文

REPLCHARS(text-expression characters [start])

パラメータ

text-expression

置換される文字が含まれる式。text-expressionから置換される文字に埋込みの改行が含まれる場合、これらの改行は削除されます。その他の改行は維持されます。削除された改行の数は、置換された文字数の合計にはカウントされません。置換された式の改行も、REPLCHARSの出力には保持されますが、カウントの対象にはなりません。

characters

text-expressionの既存の文字を置換する1文字以上の文字が含まれるテキスト式。

start

文字の置換を開始する文字位置を表すINTEGER。text-expressionの最初の文字の位置は1です。この引数を省略した場合、REPLCHARSは最初の文字から開始します。REPLCHARSは、指定した新規のcharactersに対して必要な文字数のtext-expressionを置換します。startの値がtext-expressionの長さより大きい場合、REPLCHARSは単にtext-expressionを返します。

例

例8-78 テキスト文字の置換

この例は、テキスト値Hello there, Joeの一部を置換する方法を示します。

次の文

SHOW REPLCHARS('Hello there, Joe', 'Jane', 14)

によって、次の出力が生成されます。

Hello there, Jane

例8-79 REPLCHARSによる改行の処理

この例は、REPLCHARSによって改行が保持されて無視されることを示します。

var1 = JOINLINES('Hello' 'there' 'Joe')
var2 = JOINLINES('Hi' 'Jane')

次の文

show REPLCHARS(var1 var2)

によって、次の出力が生成されます。

Hi
Janehere
Joe

REPLCHARSは、var1の先頭の6文字(HellothereJoeのHellot)をvar2の6文字(HiJane)に置換しました。var2のHiおよびvar1のthereの後の改行は保持されます。

var1の13文字をすべて置換するには、置換後の文字を13文字に指定する必要があります。たとえば、Janeの後に7つの空白を追加します。

var2 = JOINLINES('Hi' 'Jane       ')

次の文

SHOW REPLCHARS(var1 var2)

によって、次の出力が生成されます。

Hi
Jane

REPLCOLS

REPLCOLSファンクションは、複数行のTEXT値に存在する文字列の一部またはすべてを別の文字列に置換します。このファンクションの戻り値は、結果として得られる行で構成される複数行のTEXT値です。

列は、複数行のTEXT値の各行における文字位置です。各行の最初の文字は列1であり、2番目の文字は列2です(以降同様)。

戻り値

TEXTまたはNTEXT

このファンクションでは、TEXT値とNTEXT値を引数として使用できます。戻り値のデータ型は、引数として指定する値のデータ型によって次のように異なります。

- すべての引数がTEXT値である場合、戻り値はTEXTです。

- すべての引数がNTEXT値である場合、戻り値はNTEXTです。

- 引数にTEXTとNTEXTの両方の値が存在する場合は、すべてのTEXT値がNTEXT値に変換されてからファンクションの演算が実行され、戻り値はNTEXTになります。

戻り値の行数は、text-expressionの行数と常に同じです。columnsテキスト式の行数が少ない場合、戻り値の後続の各行で式の最後の行がREPLCOLSによって繰り返されます。

構文

REPLCOLS(text-expression columns [start])

パラメータ

text-expression

置換される1列以上を含むテキスト式。

columns

1行以上を含むテキスト式。この式は、text-expressionの一部またはすべての列を置換する列を指定します。

start

置換を開始する列の位置を表す1から32,767までのINTEGER。text-expressionの各行における最初の文字の列位置は1です。startを指定しなかった場合、置換は列1から開始されます。text-expressionの特定の行にある最後の文字よりも右側にくる開始列を指定すると、戻り値の対応する行にはその間の列を埋める空白が入ります。例8-80「列の結合および位置合せ」を参照してください。

例

例8-80 列の結合および位置合せ

次の例は、citylistの各行とcityrepsの各行を結合し、両方の値の位置を合せます。置換は列11から開始します。REPLCOLSのかわりにJOINCOLSを使用した場合、cityrepsリストの位置は合いません。

次の文

SHOW citylist

によって、次の出力が生成されます。

Boston
Houston
Chicago
Denver

次の文

SHOW cityreps

によって、次の出力が生成されます。

Brady
Lopez
Alfonso
Cody

次の文

SHOW REPLCOLS(citylist cityreps 11)

によって、次の出力が生成されます。

Boston    Brady
Houston   Lopez
Chicago   Alfonso
Denver    Cody

REPLLINES

REPLLINESファンクションは、複数行のTEXT式の1行以上を置換します。

戻り値

TEXTまたはNTEXT

このファンクションでは、TEXT値とNTEXT値を引数として使用できます。戻り値のデータ型は、引数として指定する値のデータ型によって異なります。すべての引数がTEXT値である場合、戻り値はTEXTです。すべての引数がNTEXT値である場合、戻り値はNTEXTです。引数にTEXTとNTEXTの両方の値が存在する場合は、すべてのTEXT値がNTEXT値に変換されてからファンクションの演算が実行され、戻り値はNTEXTになります。

構文

REPLLINES(text-expression lines [start])

パラメータ

text-expression

置換される1行以上を含む複数行のテキスト式。

lines

text-expressionの既存の行を置換する1行以上の行を含むテキスト式。

start

置換を開始する行番号を表すINTEGER。text-expressionの最初の行の位置は1です。この引数を省略すると、REPLLINESは1行目から開始します。REPLLINESは、指定した新規のlinesに対して必要な行数のtext-expressionを置換します。

例

例8-81 テキスト行の置換

この例は、次の値を持つmktglistという名前の変数における複数行のTEXT値の2番目の行を置換する方法を示します。最初に、文SHOW mktglistが次の出力を生成するとします。

Salespeople
Products
Services

REPLLINESを使用すると、Productsに対して異なる値を表示できます。

SHOW REPLLINES(mktglist, 'advertising', 2)

Salespeople
Advertising
Services

RESERVED

RESERVEDファンクションは、OLAP DMLパーサーで定義されている予約済の語をすべて一覧表示したり、指定する語がOLAP DMLパーサーで定義済かどうかを示したりできます。「その他の予約語」で説明するように、他にも予約されている語があります。

戻り値

複数行のテキスト式またはBOOLEAN。引数を指定したかどうかによって決まります。

構文

RESERVED [(word-expression)]

パラメータ

word-expression

OLAP DMLで予約済かどうかわからない語を表すテキスト式。word-expressionを指定すると、RESERVEDファンクションは、指定した語がOLAP DMLで予約されているかどうかを示すBOOLEAN値を返します。引数を指定しない場合は、OLAP DMLのすべての予約語を表すTEXT値(各行に1語)を返します。

使用上の注意

その他の予約語

RESERVEDファンクションは、OLAP DMLパーサーに定義済の語のみを認識します。RESERVEDファンクションは、EXPRESSアナリティック・ワークスペースにあるオプション・オブジェクトやその他のオブジェクトの名前を認識しません。これらのオブジェクトの名前もOracle OLAPで予約されていますが、RESERVEDファンクションでは認識されません。これらのオブジェクトの名前を確認するには、次の文を実行します。

AW ATTACH EXPRESS
LISTNAMES

予約済のNA

引数に対してNA(該当しない語)を指定すると、RESERVEDファンクションはNOを返します。NA自体を指定すると、RESERVEDファンクションはYESを返します。

大文字と小文字の区別

RESERVEDファンクションが返す予約語のリストには、すべてが大文字の語と大文字と小文字が混在している語があります。すべてが大文字の語は、その語が1語として予約されています。大文字と小文字が混在している語は、大文字で表示されている部分まで短縮できます。その同じ大文字の部分を含む他の語も予約されています。たとえば、RESERVEDで返されるリストにCODEVERsionという語があります。この語では、codever、codeversi、codeversio、codeversionのすべてが予約されています。ただし、codeveは予約されていません。

例

例8-82 予約語かどうかの判別

次の例は、ある語がOLAP DMLで予約されているかどうかを判別するRESERVEDファンクションの使用方法を示します。

ファンクション・コール

SHOW RESERVED('update')

戻り値

YES

ROUND

ROUNDファンクションは、指定する構文に従って数値操作または日時操作を実行します。ROUNDファンクションの構文は操作のタイプごとに異なるため、次の2項目に分けて説明します。

- ROUND(日時)

- ROUND(数値)

ROUND(日時)

ROUND(日時)ファンクションは、書式モデルfmtで指定した単位に丸められた日付を返します。戻される値は、日付に異なる日時データ型を指定した場合でも、常にDATETIMEデータ型です。

戻り値

DATETIME

構文

ROUND(datetime_exp, [format ])

パラメータ

datetime-exp

日時の数値を指定する日時式。

format

次の表に示す書式モデルを指定するテキスト式。書式モデルは、日時の数字を丸める方法を示します。

この引数を省略した場合、datetime-expは最も近い日付に丸められます。

表8-13は、ROUNDおよびTRUNC日付ファンクションで使用できる書式モデルと、日付の丸めや切捨ての対象となる単位をまとめたものです。デフォルトのモデル「DD」では、時間が午前0時である日にちの形に丸められた、または切り捨てられた日付が返されます。

表8-13 ROUNDおよびTRUNC日付ファンクションの日時書式テンプレート

書式モデル

丸め/切捨て対象の単位

CC
SCC

4桁の年の最初の2桁より1大きい数

SYYYY
YYYY
YEAR
SYEAR
YYY
YY
Y

年(7月1日で切上げ)

IYYY
IY
IY
I

ISO年

Q

四半期(四半期の2番目の月の16日で切上げ)

MONTH
MON
MM
RM

月(16日で切上げ)

WW

年の最初の日と同じ曜日

IW

ISO年の最初の日と同じ曜日

W

月の最初の日と同じ曜日

DDD
DD
J

日

DAY
DY
D

週の開始日

HH
HH12
HH24

時

MI

分

書式モデルDAY、DYおよびDで使用される週の開始日は、初期化パラメータNLS_TERRITORYで暗黙的に指定されます。

例

例8-83 最も近い年への丸め

NLS_DATE_FORMATオプションの値がDD-MON-YYの場合、次の文を発行します。

SHOW ROUND (TO_DATE('27-OCT-92'),'year')

次の値が返されます。

01-JAN-93

例8-84 別の書式への丸め

アナリティック・ワークスペースに、次のような定義と値を持つmydatetimeという名前の変数があるとします。

DEFINE MYDATETIME VARIABLE DATETIME
DATE_FORMAT = 'MON-RRRR-DD-HH24'
mydatetime = CURRENT_TIMESTAMP
SHOW mydatetime
= 'AUG-2006-07-13'

次のそれぞれのSHOW文が示すように、指定する値の日付書式によって、ROUNDファンクションからmydatetime変数に返される値は異なります。

SHOW ROUND(mydatetime, 'RRRR')
01-JAN-07

SHOW ROUND(mydatetime, 'MON')
01-AUG-06

SHOW ROUND(mydatetime, 'DD')
08-AUG-06

SHOW ROUND(mydatetime)
= 'AUG-2006-08-00'

ROUND (数値)

数値を引数として指定すると、ROUNDファンクションは指定する2番目の数字に最も近い倍数に丸めた数字、または2番目の数字が示す小数桁数で丸めた数字を返します。

戻り値

DECIMAL(丸めのタイプがMULTIPLEの場合)

NUMBER(丸めのタイプがDECIMALの場合)

構文

ROUND(number_exp roundvalue) [MULTIPLE|DECIMAL]

パラメータ

number_exp

丸める数字を特定する式。

roundvalue

丸めの基礎を指定する値。

丸めのタイプがMULTIPLEの場合:

- number_expはroundvalueの最も近い倍数に丸められます。

- roundvalueはINTEGERまたは小数です。

丸めのタイプがDECIMALの場合:

- roundvalueで小数点の右側または左側の桁数を指定し、number_expを丸めます。roundvalueが正の場合、小数点の右側の数字を指定した桁数で丸めます。負の場合、小数点の左側の数字を指定した桁数で丸めます。

- roundvalueを省略すると、number_expは小数桁数0の整数に丸められます。

- roundvalueはINTEGERである必要があります。

MULTIPLE

(デフォルト)roundvalueの最も近い倍数に丸めることを指定します。

DECIMAL

roundvalueで指定した小数桁で丸めることを指定します。

使用上の注意

ROUNDを使用した式の比較

DECIMAL値は、使用する有効桁数のレベルで表示されますが、それとはわずかに異なる形式で格納される場合があります。このわずかな違いは、2つの式を比較する際に予期しない結果になることがあります。この問題は、計算の多くがINTEGER値をDECIMAL値に変換してから実行されるため、計算を伴うINTEGER式を比較する場合にも生じます。通常のレポートでは、表示される小数点以下は2桁または3桁のみであるため、この相違に気づきません。

たとえば、2つの数字をEQまたはNE演算子で比較するとき、最後の有効数字の相違を無視することが必要な場合が多くあります。expenseが100.00000001として格納されていた場合、最後の有効数字は単純な比較では無視されません。

次の文

SHOW expense EQ 100.00

によって、次の結果が生成されます。

NO

これに対し、EQまたはNEに意味のない最後の有効数字を無視させるようにROUNDを使用できます。

SHOW ROUND(expense, .01) EQ 100.00

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

YES

ABSを使用した式の比較

アプリケーションで計算の速度を重視する場合は、EQまたはNEとともにROUNDを使用するかわりに、ABSファンクションをLTとともに使用して数字を比較することもできます。

例

例8-85 異なる倍数への丸め

次の文は、式2/3を異なる倍数に丸めた結果を示します。DECIMALS設定の値は2です。

次の文

SHOW ROUND(2/3, .01)

によって、次の結果が生成されます。

0.67

次の文

SHOW ROUND(2/3, .1)

によって、次の結果が生成されます。

0.70

次の文

SHOW ROUND(2/3, .5)

によって、次の結果が生成されます。

0.50

例8-86 最も近い千の単位への丸め

次の例は、最も近い千の単位に丸めたsalesを示します。

LIMIT month TO FIRST 4
LIMIT district TO FIRST 1
REPORT ROUND(sales 1000)

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

DISTRICT: BOSTON
-------------ROUND(SALES 1000)-------------
-------------------MONTH-------------------
PRODUCT          Jan95      Feb95      Mar95      Apr95
-------------- ---------- ---------- ---------- ----------
Tents           32,000.00  33,000.00  43,000.00  58,000.00
Canoes          66,000.00  76,000.00  92,000.00 126,000.00
Racquets        52,000.00  57,000.00  59,000.00  69,000.00
Sportswear      53,000.00  59,000.00  63,000.00  68,000.00
Footwear        91,000.00  87,000.00 100,000.00 108,000.00

例8-87 最も近い12の倍数への丸め

12の最も近い倍数に丸めたunitsを表示するには、次の文を使用します。

LIMIT month TO FIRST 4
LIMIT district TO FIRST 1
REPORT DECIMAL 0 ROUND(units 12)

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

DISTRICT: BOSTON
--------------ROUND(UNITS 12)--------------
-------------------MONTH-------------------
PRODUCT          Jan95      Feb95      Mar95      Apr95
-------------- ---------- ---------- ---------- ----------
Tents                 204        204        264        360
Canoes                348        396        480        660
Racquets              996      1,080      1,116      1,308
Sportswear          1,092      1,212      1,296      1,404
Footwear            2,532      2,400      2,772      2,976

例8-88 小数桁での丸め

次の文は、15.193を異なる小数桁で丸めた結果を示します。

次の文

ROUND(15.193, 1)

生成される結果は次のとおりです。

15.2

次の文

ROUND(15.193, -1)

生成される結果は次のとおりです。

20

ROWファンクション

ROWファンクションは、単一の行のセルに一連のデータを連続して返します。このファンクションは、ROWコマンドと同じですが、現行の出力ファイルにテキストを送信するのではなく、テキスト値を返す点が異なります。

ROWファンクションは、ROWコマンドと同様に、返されるデータおよびデータの出力書式(オプション)を指定する一連の列説明で構成されます。ROWファンクションでは、SHOWまたはREPORTコマンドによって戻り値のテキスト変数への代入や現行の出力ファイルへの送信ができる他、文字操作ファンクションの引数にしてさらに処理できます。

関連項目:
ROWコマンド

戻り値

TEXT

構文

ROW([attribs] [ACROSS dimension [limit-clause]:] {exp1|SKIP} -

[[attribs] [ACROSS dimension [limit-clause]:] {expn|SKIP}])

引数の詳細は、ROWコマンドを参照してください。

引数を指定しないROWファンクションは、空白行を返します。

使用上の注意

ROWコマンドに関する注意は、ROWファンクションにも当てはまります。

例

例8-89 出力のテキスト変数への代入

次の代入文は、出力の3行をテキスト変数textvarに代入します。

textvar = ROW(OVER '-' UNDER '=' 'This is a Row.')
SHOW textvar

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

--------------
This is a Row.
==============

例8-90 複数行の出力の生成

プログラムでROWファンクションとJOINLINESを使用して、ディメンション値のグループをループ処理して複数行のデータをテキスト変数に代入できます。次のプログラムの抜粋でSHOWコマンドを使用せずに、textvarの内容を他の目的に使用することもできます。

LIMIT month TO 'Jan95' 'Feb95'
LIMIT district TO 'Boston' 'Atlanta' 'Chicago'
textvar = NA
textvar = ROW(W 8 SKIP ACROSS month: <month SKIP>)
textvar = JOINLINES(textvar ROW(W 8 SKIP ACROSS month: -
CENTER <'Sales' 'Plan'>))
FOR district
textvar = JOINLINES(textvar ROW(W 8  district ACROSS month: -
<sales sales.plan>))
SHOW textvar

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

OUTPUT:
Jan95                 Feb95
Sales       Plan      Sales       Plan
Boston   32,153.52  42,346.89  32,536.30  43,265.50
Atlanta  40,674.20  54,583.41  44,236.55  57,559.87
Chicago  29,098.94  36,834.37  29,010.20  37,667.66

ROWIDTOCHAR

ROWIDTOCHARファンクションは、ROWIDデータ型の値をTEXTデータ型の値に変換します。

戻り値

TEXT

この変換の結果は常に各国語のキャラクタ・セットで、18文字の長さになります。

構文

ROWIDTOCHAR (rowid)

パラメータ

rowid

変換するROWID型の値。

例

例8-91 ROWIDデータのTEXTまたはNTEXTデータへの変換

アナリティック・ワークスペースに次のオブジェクト定義があるとします。

DEFINE myrowid DIMENSION ROWID
DEFINE mytext VARIABLE TEXT
DEFINE myntext VARIABLE NTEXT

まず、MAINTAIN文を使用して、ROWIDデータ型を持つmyrowidにデータを移入します。続いてROWIDTOCHARファンクションを使用してTEXTデータ型を持つmytextに移入し、同じくROWIDTONCHARファンクションを使用してNTEXTデータ型を持つmyntextに移入します。すべての変数が移入されたことがレポートに示されます。

MAINTAIN myrowid ADD CHARTOROWID('AAAFd1AAFAAAABSAA/')
mytext = ROWIDTOCHAR (myrowid)
myntext = ROWIDTONCHAR (myrowid)

MYROWID
------------------------------
AAAFd1AAFAAAABSAA/

MYTEXT
------------------------------
AAAFd1AAFAAAABSAA/

MYNTEXT
------------------------------
AAAFd1AAFAAAABSAA/

ROWIDTONCHAR

ROWIDTONCHARファンクションは、ROWIDデータ型の値をNCHARデータ型の値に変換します。この変換の結果は常に各国語のキャラクタ・セットで、18文字の長さになります。

戻り値

NCHAR

この変換の結果は常に各国語のキャラクタ・セットで、18文字の長さになります。

構文

ROWIDTONCHAR (rowid)

パラメータ

rowid

変換するROWID型の値。

例

例8-91「ROWIDデータのTEXTまたはNTEXTデータへの変換」を参照してください。

RPAD

RPADファンクションは、式を返す際、指定した長さになるように指定した文字を右側に埋め込みます。また、文字が埋め込まれる式が指定した長さよりも長い場合は、指定した長さまでの部分を返します。

戻り値

文字を埋め込む式(text-exp)のデータ型に応じてTEXTまたはNTEXT

構文

RPAD (text-exp , length [, pad-exp])

パラメータ

text-exp

埋め込むテキスト式。

length

端末画面に表示される戻り値の全長。ほとんどのキャラクタ・セットでは、戻り値の文字数です。ただし、一部のマルチバイト・キャラクタ・セットでは、文字列の表示長はその文字列の文字数と異なることがあります。

text-expの長さよりも短い値をlengthに指定すると、指定したその長さに式が切り捨てられます。

pad-exp

埋込み文字を指定するテキスト式。pad-expのデフォルト値は単一の空白です。

例

例8-92 文字列の右側への埋込み

次の例は、名前の右側に文字abを埋め込んで12文字にします。

SHOW RPAD('Morrison',12,'ab')
Morrisonabab

RTRIM

RTRIMファンクションは、テキスト式の右側から、別のテキスト式で示す文字をすべて削除します。このファンクションは、基準のテキスト式を最後の文字からスキャンし、トリム式にあるすべての文字をトリム式にない文字が見つかるまで削除し、その結果を返します。

戻り値

最初の引数のデータ型に応じてTEXTまたはNTEXT

構文

RTRIM (text-exp [, trim-exp])

パラメータ

text-exp

文字をトリミングするテキスト式。

trim-exp

削除する文字を示すテキスト式。trim-expのデフォルト値は単一の空白です。

例

例8-93 右側にある文字のトリミング

次の例は、文字列から右側にあるすべてのxおよびyをトリミングします。

SHOW RTRIM('Last Wordxxyxy','xy')
Last Word

RUNTOTAL

RUNTOTALファンクションは、式の現在までの合計を返します。RUNTOTALファンクションをROWコマンド、ROWファンクションまたはREPORTコマンドで使用すると、式の値の現在までの合計を生成できます。

戻り値

DECIMAL

構文

RUNTOTAL(n)

パラメータ

n

レポートの現行の列についてOracle OLAPが累計する32の小計(1から32)のいずれか1つ。RUNTOTALは、指定された列の小計の値を返しますが、小計の値をゼロにリセットしません。

32の小計を参照する番号(1から32)には固有の意味はなく、すべての小計は参照されるまで同じです。

使用上の注意

RUNTOTALの機能

RUNTOTALは、SUBSTRファンクションと異なり、指示された小計をゼロにリセットせず、RUNTOTALで返す値を指示された小計に加えません。ただし、RUNTOTALが返す値は、現行の列に関して他の31の累計合計に加えられます。

別の列のデータへのアクセス

レポートの別の列に表示されている式でも、その式をRUNTOTALに追加することにより、現在までの合計を取得できます。COALESCEファンクションを使用すると、他の列の値を参照できます。たとえば、行の最初のデータ列にある月ごとの売上および2番目のデータ列にある売上の累計を表示するには、次の文を使用します。

ROW month sales COLVAL(-1) + RUNTOTAL(1)

小計のリセット

ROW文を使用してレポートを作成する場合、ZEROTOTAL文を使用して任意の列の小計をゼロにリセットできます。通常、ZEROTOTALはレポート・プログラムの開始時に使用し、最初にすべての合計がゼロになるようにします。REPORT文は、出力を生成する前に、自動的にすべての小計をゼロにリセットします。

NA値とRUNTOTAL

RUNTOTALは、すべての値がNAではないかぎり、NA値を無視します。すべての値がNAである場合、合計はNAになります。

例

例8-94 レポートでの現在までの合計の計算

レポートで、列1の値の現在までの合計を列2に表示するとします。

次のOLAP DML文を発行します。

ZEROTOTAL ALL
ROW W 4 R 2 RUNTOTAL(1) + COLVAL(1)
ROW W 4 R 5 RUNTOTAL(1) + COLVAL(1)
ROW W 4 R 3 RUNTOTAL(1) + COLVAL(1)

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

2     2.00
5     7.00
3    10.00

例8-95 2つの地区に関する現在までの合計の計算

この例では、2つの地区の1996年1から6月に関するテントの売上数量を示すレポートを作成します。月ごとのテントの売上数量とともに、これらの地区における売上数量の現在までの合計を表示します。この累計を生成するために、RUNTOTALファンクションを使用します。

LIMIT product TO 'Tents'
LIMIT month TO 'Jan96' TO 'Jun96'
LIMIT district TO 'Boston' 'Chicago'
REPORT ACROSS district: units -
DECIMAL 0 TOTAL(units, month)+RUNTOTAL(1)

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

PRODUCT: TENTS
--------UNITS--------
------DISTRICT-------
TOTAL(UNIT
S,
MONTH)+RUN
MONTH            Boston    Chicago    TOTAL(1)
-------------- ---------- ---------- ----------
Jan96                 307        189        496
Feb96                 209        190        895
Mar96                 277        257      1,429
Apr96                 372        318      2,119
May96                 525        433      3,077
Jun96                 576        466      4,119

SESSIONTIMEZONE

SESSIONTIMEZONEファンクションは、現在のセッションのタイムゾーンを返します。

戻り値

タイムゾーン・オフセット('[+|]TZH:TZM'という書式の文字型)またはタイムゾーン・リージョン名。ユーザーが直近のALTER SESSION文で指定したセッション・タイムゾーン値によって異なります。

構文

SESSIONTIMEZONE

例

例8-96 セッション・タイムゾーンの取得

SHOW SESSIONTIMEZONE
-05:00

SIGN

SIGNファンクションは、指定された数字が0(ゼロ)よりも小さい、等しいまたは大きいことを示す値を返します。

戻り値

INTEGER。n<0の場合は-1、n=0の場合は0(ゼロ)、n>0の場合は1が返されます。

構文

SIGN (n)

パラメータ

n

数式。

例

例8-97 数式の結果がゼロより大きいか小さいかの判断

次の例は、ファンクションの引数(-15)が0(ゼロ)よりも小さいことを示します。

SHOW SIGN(-15)
-1

SIN

SINファンクションは、三角式の正弦を計算します。

戻り値

NUMBER

SINで返される結果は、指定した式と同じディメンションを持つ値です。

構文

SIN(angle-expression)

パラメータ

angle-expression

ラジアン単位で指定された角度値を含む数式。

例

例8-98 ラジアン単位による角度の正弦の計算

この例は、1ラジアンの角度の正弦を計算します。次の文

DECIMALS = 5
SHOW SIN(1)

によって、次の結果が生成されます。

0.84147

例8-99 度数による角度の正弦の計算

この例は、30度の角度の正弦を計算します。1度 = 2*(pi)/360ラジアンであるため、30度は約30*2*3.14159/360ラジアンになります。OLAP DML文

SHOW SIN(30 * 2 * 3.14159 / 360)

によって、次の結果が生成されます。

0.50000

SINH

SINHファンクションは、数値の双曲線正弦を計算します。

戻り値

NUMBER

構文

SINH(expression)

パラメータ

expression

ラジアン単位で指定された角度値を含む数式。

例

例8-100 角度の双曲線正弦の計算

この例は、1ラジアンの角度の双曲線正弦を計算します。次の文

DECIMALS = 5
SHOW SINH(1)

によって、次の結果が生成されます。

1.17520

SMALLEST

SMALLESTファンクションは、式の最小値を返します。このファンクションを使用して、数値または日付値を比較できます。

戻り値

式のデータ型。INTEGER、LONGINT、DECIMALまたはDATEになります。

構文

SMALLEST(expression [CACHE] [dimension...])

パラメータ

expression

最小値を返す式。

CACHE

内部動作が若干変更されます。このキーワードは、元のパフォーマンスが非常に遅い場合にのみ指定してください。

dimension

結果のディメンションの名前。または、expressionの1つのディメンションと結果のディメンションとする別のディメンションとの間のリレーションの名前。

デフォルトで、SMALLESTは単一の値を返します。結果のディメンションを1つ以上指定した場合、SMALLESTは、指定されたディメンションに対して値をテストし、値の配列を返します。各ディメンションは、expressionのディメンションであるか、そのディメンションの1つと関連している必要があります。

ヒント:
指定したディメンションがexpressionの実際のディメンションではなくexpressionのディメンションに関連付けられたディメンションであり、かつ2つのディメンション間のリレーションが2つ以上ある場合は、ディメンション間のデフォルトのリレーションを使用して計算が行われます。(デフォルトのリレーションの詳細は、RELATIONコマンドを参照してください。)Oracle OLAPでこのデフォルトのリレーションを使用しない場合は、リレーションの名前を指定して、関連付けられたディメンションを指定します。

使用上の注意

NA値とSMALLEST

SMALLESTは、他の集計ファンクションと同様に、NASKIPオプションの影響を受けます。NASKIPの設定がYES(デフォルト)である場合、SMALLESTはNA値を無視して最小値またはNAではない値を返します。NASKIPの設定がNOである場合、SMALLESTは式の値がNAである場合はNAを返します。式のすべての値がNAである場合、NASKIPの設定がいずれの場合でもSMALLESTはNAを返します。

例

例8-101 スポーツウェアの売上が最小である月の検索

この例は、SMALLESTファンクションを使用し、1996年の上半期における3地区のスポーツウェアの最小の月間売上を検索します。地区ごとに最小売上金額を表示するには、結果のディメンションにdistrictを指定します。

LIMIT product TO 'Sportswear'
LIMIT district TO FIRST 3
LIMIT month TO 'Jan96' TO 'Jun96'
REPORT HEADING 'Smallest Sales' SMALLEST(sales district)

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

Smallest
DISTRICT         Sales
-------------- ----------
Boston          57,079.10
Atlanta        129,616.08
Chicago         77,489.51

SMOOTH

SMOOTHファンクションは、数式の単純指数平滑または二重指数平滑を計算します。

戻り値

DECIMAL

構文

SMOOTH(expression {SINGLE alpha|DOUBLE alpha beta m} [BASEDON dimension-list])

パラメータ

expression

平滑化する値を持つ数式。

SINGLE

DOUBLE

expressionの値の指数平滑化で使用するメソッド。SINGLEメソッドは単純指数平滑法を指定し、引数alphaを必要とします。DOUBLEメソッドは二重指数平滑法(Holtの線形指数平滑法とも言います)を指定し、引数alpha、betaおよびmを必要とします。

alpha

0から1の数字で、測定するデータの予測値と前の予測値の相違を平滑化します。この値が大きくなるほど、最近の予測が加重されるため、平滑化係数が大きくなるほど平滑化が低下します。平滑化係数が0の場合、予測値のみで平滑化が行われるため、常に最初の予測値、つまり最初のデータ測定値を返します。平滑化係数が1の場合は、平滑化がまったく行われないため、前回のデータ測定値が返されます。(「alpha値の結果」を参照してください。)

beta

0から1の数字で、前回の予測値と現在の予測値の差を平滑化します。alpha引数と同じように、平滑化係数が増加するほど平滑化が低下します。

m

1以上の正のINTEGERで、データ系列のデータ期間の合計数を最大とします。引数mで指定する期間数に基づいて、予測値が得られます。

BASEDON dimension-list

指数平滑化に含めるexpressionの1つ以上のディメンションのリスト(オプション)。ディメンションを指定しない場合、SMOOTHはexpressionのすべてのディメンションについて平滑化を行います。

使用上の注意

SMOOTHでのNASKIPの影響

SMOOTHはNASKIPオプションの影響を受けます。NASKIPがYESに設定されている場合(デフォルト)、SMOOTHはNA値を無視します。NASKIPがNOに設定されている場合、SMOOTHはNAの予測値にはすべてNAを返します。

alpha値の結果

ここでは、1つの指数平滑化で異なるalpha値を使用した場合の結果を示します。この結果は、次の文でディメンションが制限されたsales変数に基づきます。

LIMIT month TO 'Jan96' TO 'Dec96'
LIMIT product TO 'Tents'
LIMIT district TO 'Boston'
REPORT DOWN month SMOOTH(sales, SINGLE, ALPHA, BASEDON month)

次の表は、sales変数のデータ値、およびこの文にあるSMOOTHファンクションを表に示すようにalpha引数変数の値を変えて実行した結果を示します。

MONTH

ボストンのテントの売上

alpha = 0

alpha = .1

alpha = .5

alpha = .9

Jan96

50,808.96

NA

NA

NA

NA

Feb96

34,641.59

50,808.96

50,808.96

50,808.96

50,808.96

Mar96

45,742.21

50,808.96

49,192.22

42,725.28

36,258.33

Apr96

61,436.19

50,808.96

48,847.22

44,233.74

44,793.82

May96

86,699.67

50,808.96

50,106.12

52,834.97

59,771.95

Jun96

95,120.83

50,808.96

53,765.47

69,767.32

84,006.90

Jul96

93,972.49

50,808.96

57,901.01

82,444.07

94,009.44

Aug96

94,738.05

50,808.96

61,508.16

88,208.28

93,976.18

Sep96

75,407.66

50,808.96

64,831.15

91,473.17

94,661.86

Oct96

70,622.91

50,808.96

65,888.80

83,440.41

77,333.08

Nov96

46,124.99

50,808.96

66,362.21

77,031.66

71,293.93

Dec96

36,938.27

50,808.96

64,338.49

61,578.33

48,641.88

例

例8-102 値の平滑化

次の文は、sales変数のディメンションを制限し、レポートのデータ列の幅を設定してsalesのデータ値をレポートします。

LIMIT month TO 'Jan96' TO 'Dec96'
LIMIT product TO 'Tents'
LIMIT district TO 'Boston'
COLWIDTH = 14

REPORT W 6 DOWN month sales

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

DISTRICT: Boston
----SALES-----
---PRODUCT----
MONTH      Tents
------ --------------
Jan96       50,808.96
Feb96       34,641.59
Mar96       45,742.21
Apr96       61,436.19
...
Nov96       46,124.99
Dec96       36,938.27

この文は、SINGLEメソッドで、平滑化係数を.5とし、monthディメンションに基づいて、SMOOTHファンクションをsales変数に実行した結果のレポートを生成します。

REPORT W 6 DOWN month SMOOTH(sales, SINGLE, .5, BASEDON month)

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

DISTRICT: Boston
SMOOTH(SALES,-
-SINGLE, .5,--
BASEDON MONTH)
---PRODUCT----
MONTH      Tents
------ --------------
Jan96              NA
Feb96       50,808.96
Mar96       42,725.28
Apr96       44,233.74
...
Nov96       77,031.66
Dec96       61,578.33

SORTファンクション

SORTファンクションは、指定したSORTコマンドの結果として得られたディメンション値またはディメンション・サロゲート値を返すファンクションです。

関連項目:
SORTコマンド

戻り値

戻り値は、ファンクションの使用方法によって次のように異なります。

- 戻り値が値セットであるOLAP DML文(ユーザー定義コマンドまたはユーザー定義ファンクションを含む)の引数としてSORTファンクションを使用した場合は、値セットが返されます。空の値セットは、NULLステータスを含む値セットとして返されます。

- INTEGERキーワードを指定した場合は、値の位置番号がINTEGERとして返されます。

- それ以外の場合はTEXT値が返されます。空のステータスを表すTEXT値は、NA値として返されます。

構文

SORT([INTEGER]dimension [byhierarchy] [bycriterion...])

ここで、

- byhierarchyはオプションの句で、階層内のファミリ・リレーションに基づき、親リレーションを使用して、階層ディメンションまたはそのディメンション・サロゲートの現行のステータス・リストの値の順序を並べ替えたり、値セットに値を代入します。SORT文に指定できるbyhierarchy句は1つのみです。この句は、SORT文の最初の句である必要があります。
HIERARCHY parent-relation [INVERT] [DEPTH n] [SORTORPHANS]

- bycriterionは、明示的に指定された基準を使用して、ディメンションまたはそのディメンション・サロゲートの現行のステータス・リストの値の順序を並べ替えたり、値セットに値を代入したりします。SORT文に指定できるbycriterion句の数に制限はありません。
{A|D} [NAFIRST] criterion

パラメータ

INTEGER以外の引数の詳細は、SORTコマンドを参照してください。

INTEGER

INTEGERキーワードを使用すると、デフォルトのディメンション・ステータス内の値は、名前ではなく位置番号で返されます。値セットでINTEGERを使用すると、デフォルトのディメンション・ステータス内の値は、値セットではなく位置番号で返されます。

SORTLINES

SORTLINESファンクションは、複数行のTEXT値の行をソートします。

戻り値

TEXTまたはNTEXT

構文

SORTLINES(text-expression [A|D])

パラメータ

text-expression

SORTLINESでソートする行を含む複数行のテキスト式。TEXT式を指定すると、戻り値はTEXTです。NTEXT式を指定すると、戻り値はNTEXTです。

A

D

ソート順を昇順であるアルファベット順(A)にするか、降順である逆アルファベット順(D)にするかを指定します。デフォルトはA(昇順)です。ソート順は、NLS_SORTオプションで制御されます。

例

例8-103 テキスト行のソート

この例は、MKTREGIONSという変数の複数行で構成されるテキスト値の行をソートする方法を示します。

次の文

SHOW mktregions

によって、次の出力が生成されます。

New York
Boston
Atlanta
San Francisco

次の文

SHOW SORTLINES(mktregions)

によって、次の出力が生成されます。

Atlanta
Boston
New York
San Francisco

SOUNDEX

SOUNDEXファンクションは、テキスト式の発音表記を含む文字列を返します。このファンクションを使用すると、綴りが異なっても発音が類似した英単語を比較できます。

関連項目:
発音表記の構成方法の詳細は、『Oracle Database SQL言語リファレンス』のSOUNDEXファンクションに関する項を参照してください。

戻り値

text_expと同じデータ型

構文

SOUNDEX(text_exp)

パラメータ

text_exp

発音表記を取得する式。任意のテキスト・データ型を使用できます。

SQLFETCH

SQLFETCHファンクションは、リレーショナル・テキストの1つの列から1つ以上の行を取得します。

戻り値

TEXT

構文

SQLFETCH (cursorname [COLUMN column-number} {STOPAFTER number-of-rows])

パラメータ

cursorname

SQLカーソルの名前を示すTEXT式。カーソルはオープン状態であり、コール元によってクローズされる必要があります。

column-number

列の数を表すINTEGER値。デフォルトは1です。

number-of-rows

読取り対象の行の数。デフォルトは、残りのすべての行数です。

SQRT

SQRTファンクションは、式の平方根を計算します。

戻り値

DECIMAL

構文

SQRT(expression)

パラメータ

expression

平方根を計算する数式。

使用上の注意

負の式

expressionが負で、ROOTOFNEGATIVEがNOに設定されている場合、エラーが発生します。expressionが負で、ROOTOFNEGATIVEがYESに設定されている場合、SQRTは値NAを返します。

例

例8-104 平方根の計算

この例は、144の平方根を計算します。次の文

SHOW SQRT(144)

によって、次の結果が生成されます。

12.00

STARTOF

STARTOFファンクションは、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションの期間の開始日を返します。

重要:
このファンクションは、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションでのみ使用できます。TEXT型の階層ディメンションとして実装されている時間ディメンションには使用できません。

戻り値

DATEまたはテキスト

構文

STARTOF(dwmqy-dimension)

パラメータ

dwmqy-dimension

DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンション。この型のディメンション間に独自のリレーションを明示的に定義している場合、ここでその時間リレーションの名前を使用できます。

使用上の注意

STARTOFの機能

STARTOFは、ディメンションの現行のステータス・リストの最初にある期間の最初の日を返します。

フェーズ化された期間または複数の期間

STARTOFは、特にディメンションにデフォルトと異なるフェーズがある場合、または期間が複数の週や年で構成されている場合に便利です。たとえば、ディメンションに複数の4週間の期間がある場合、STARTOFファンクションは特定の4週間の開始日を特定します。

STARTOFから返される結果の書式

STARTOFが返す結果が表示されるとき、その日付はDATEFORMATオプションの日付テンプレートに従って書式化されます。曜日や月の名前を日付テンプレートで使用している場合は、DAYNAMESオプションで指定した曜日の名前や、MONTHNAMESオプションで指定した月の名前が使用されます。STARTOFから返される結果は、DATE値が予期される箇所ではどこででも使用できます。

期間の有効な最終日の取得

期間の最終日を返すファンクションはENDOFファンクションです。

例

例8-105 会計年度開始日の検索

次の文は、年ディメンション(6月で終了する会計年度で、FYEARという名前)を定義し、年の書式を指定し、1996から1998年の会計年度のディメンション値を追加し、各会計年度の開始日をレポートします。

DEFINE fyear DIMENSION YEAR ENDING June
VNF 'FY<ff>'
MAINTAIN fyear ADD '30JUN96' '30JUN98'
REPORT W 14 STARTOF(fyear)

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

FYEAR          STARTOF(FYEAR)
---------      --------------
FY96           01JUL95
FY97           01JUL96
FY98           01JUL97

STATALL

STATALLファンクションは、指定したディメンションに関してデフォルトのステータスが現在有効であるかどうかを示します。つまり、STATALLがYESを返すのは、STATLISTがALLを返す場合です。そうでない場合、STATALLはNOを返します。

戻り値

BOOLEAN

構文

STATALL(dimension)

パラメータ

dimension

値がディメンションまたはディメンション・サロゲートの名前であるテキスト式。

使用上の注意

STATALLとSTATLISTの比較

STATALLは、STATLISTプログラムを実行せずに指定されたディメンションのステータスがALLかどうかを判別する別の方法です。

例

例8-106 STATALLの使用

次の文では、MONTHディメンションのステータスがALLかどうかわかります。

SHOW STATALL(month)

戻り値は、YESまたはNOのいずれかです。

STATCURR

STATCURRファンクションは、ディメンションの指定したステータス・リストの値を返します。

戻り値

返される値のデータ型は、ディメンションのデータ型によって異なります。

構文

STATCURR (dimension, integer)

パラメータ

dimension

ステータス・リストを検索するディメンションの名前。

integer

ファンクションが返すステータス・リストのステータス・リスト・スタックの位置を指定します。

値

指定内容

0

ディメンションの現行値。

-1

ディメンションのステータス・リスト・スタック内の、前のステータス・リストのステータスの現行値を返します。

1

ディメンションのステータス・リスト・スタック内の、一番下にあるステータス・リストの現行値を返します。

STATDEPTH

STATDEPTH ファンクションは、指定したディメンションについてOracle OLAPが保存しているステータス・リストの数を返します。ディメンションの現行のステータス・リストがスタックの最上部に置かれます(現行のステータス・リストが深さ1となります)。

戻り値

INTEGER

構文

STATDEPTH (dimension)

パラメータ

dimension

情報の取得対象となるディメンションの名前。

使用上の注意

ステータス・リスト・スタックとは

ディメンションのステータス・リスト・スタックは、PUSH文およびPOP文を実行する際に、Oracle OLAPがステータスを管理するために使用するディメンション・ステータスのスタックです。このリストの深さは、Oracle OLAPが実行した文の種類によって変化します。

- アナリティック・ワークスペースの最初のアタッチ時は、各ディメンションの現行のステータスはALLとなり、各ディメンションのステータス・リスト・スタックの深さは1(つまり、スタックにあるステータス・リストは1つのみ)となります。

- ディメンションのステータス・リスト・スタックの深さは、現行のステータスが何度変更されても(つまり、ディメンションに対してLIMITコマンドが何度実行されても)、1(現行のステータス・リスト)のままとなります。ただし、次の例外があります。

- Oracle OLAPでディメンションに対してPUSH文が実行された場合。PUSH文の実行以降は、当該ディメンションに対してLIMITコマンドが実行されるたびに、そのディメンションのステータス・リスト・スタックにステータス・リストが追加されます。当該ディメンションに対してPOP文が実行されると、そのディメンションのステータス・リスト・スタックはクリアされます。そのディメンションのステータス・リスト・スタックは再び1に戻ります。

- Oracle OLAPで、ディメンションのステータスを一時的に変更する文(CHGDIMSやTEMPSTATなど)が実行された場合。この場合、その文が有効な間のみステータス・リスト・スタックにステータス・リストが追加され、その後ただちに削除されます。一時的なステータスが有効になっている間のみ、ステータス・リスト・スタックからこのステータス・リストにアクセスできます。

STATEQUAL

STATEQUALファンクションは、ディメンションのステータス・リストを比較します。

戻り値

BOOLEAN

構文

STATEQUAL (statlist1, statlist2 [INORDER])

パラメータ

statlist1

ディメンションのステータス・リスト。ディメンションの名前、ディメンションによりディメンション化された値セット、ディメンションのLIMITファンクション、またはディメンションのSORTファンクションを使用して指定します。

statlist2

statlist1で指定されたのと同じディメンションのステータス・リスト。statlist2の指定には、ディメンションの名前、ディメンションによりディメンション化された値セット、ディメンションのLIMITファンクション、またはディメンションのSORTファンクションを使用できます。

INORDER

同一の順序による値の配列を必須とすることを指定します。

STATFIRST

STATFIRSTファンクションは、ディメンションまたはディメンション・サロゲートの現行のステータス・リストの最初の値、あるいは値セットの最初の値を返します。

戻り値

STATFIRSTが返すデータ型は、ディメンション値またはディメンション・サロゲート値のデータ型、あるいはディメンションのデフォルトのステータス・リストでの位置を示すINTEGERです。STATFIRSTが返すディメンション値は、コンテキストに合せて数値またはテキスト値に変換されます。例8-107「STATFIRST値の別の型の変数への割当て」を参照してください。

構文

STATFIRST(dimension)

パラメータ

dimension

値がディメンション、ディメンション・サロゲートまたは値セットの名前であるテキスト式。

例

例8-107 STATFIRST値の別の型の変数への割当て

次の文

DEFINE textvar TEXT
textvar = STATFIRST(month)
SHOW textvar

によって、次の出力が生成されます。

Jun95

これに対し、次の文

DEFINE intvar INTEGER
intvar = STATFIRST(month)
SHOW INTVAR

によって、次の出力が生成されます。

6

例8-108 KEEPが指定されたSTATFIRST

次のプログラムの行は、STATFIRSTを使用して、onemonthという変数に先に格納されている値までのステータスにあるすべての値にmonthを制限します。キーワードKEEPは、新しいステータスが常に古いステータスのサブセットであることを意味します。

LIMIT month KEEP STATFIRST(month) TO onemonth

ここでは、特定のmonthの値ではなくSTATFIRSTが使用されているため、この制限はどのステータス・リストでも機能します。

STATLAST

STATLASTファンクションは、ディメンションまたはディメンション・サロゲートの現行のステータス・リストの最後の値、あるいは値セットの最後の値を返します。

戻り値

STATLASTが返すデータ型は、ディメンション値またはディメンション・サロゲート値のデータ型、あるいはディメンションのデフォルトのステータス・リストでの位置を示すINTEGERです。「返されるディメンション値の自動データ変換」を参照してください。

構文

STATLAST(dimension)

パラメータ

dimension

値がディメンション、ディメンション・サロゲートまたは値セットの名前であるテキスト式。

使用上の注意

返されるディメンション値の自動データ変換

STATLASTが返すディメンション値は、コンテキストに合せて数値またはテキスト値に変換されます。たとえば、jun95が6番目のmonth値であり、現行のステータス・リストの最後の値だとします。STATLAST(month)の値は、テキスト変数または数値変数に代入できます。

次の文ではテキスト出力値が生成されます。

DEFINE textvar TEXT
TEXTVAR = statlast(MONTH)
SHOW textvar

Jun95

これに対して、次の文では数値出力値が生成されます。

DEFINE intvar INTEGER
INTVAR = STATLAST(month)
SHOW INTVAR

6

例

例8-109 STATLASTによるステータスの設定

次のプログラムの行は、STATLASTを使用して、onemonthという変数に先に格納されている月で始まり、ステータスの最後の値で終わるステータスにある値にmonthを制限します。

LIMIT month KEEP onemonth TO STATLAST(month)

ここでは、特定のmonthの値ではなくSTATLASTが使用されているため、この制限はどのステータス・リストでも機能します。

STATLEN

STATLENファンクションは、ディメンションまたはディメンション・サロゲートの現行のステータス・リストの値の数、あるいは値セットの値の数を返します。

戻り値

INTEGER

構文

STATLEN(dimension)

パラメータ

dimension

値がディメンション、ディメンション・サロゲートまたは値セットの名前であるテキスト式。

例

例8-110 ステータスにある月のカウント

次の文は、monthディメンションの現行のステータス・リストにある月の数を現行の出力ファイルに送ります。

SHOW STATLEN(month)

STATLIST

STATLISTファンクションは、ディメンションまたはディメンション・サロゲートの現行のステータス・リストの全値のリスト、あるいは値セットの全値のリストを返します。リストは、指定された幅に書式設定できます。STATLISTファンクションを採用しているSTATUSコマンドでは、ディメンションのステータスがまとめて表示されます。表示する幅または位置を制御する場合は、STATUSではなくSTATLISTを使用します。

戻り値

STATLISTは、ディメンション値またはディメンション・サロゲート値自体(たとえば、Jan95)、あるいはデフォルトのステータス・リストでの値の位置を示す数値(たとえば、6)のいずれかを含むTEXT値のリストを返します。

戻り値は、Jan96 TO Jun96などのように、value TO valueという形式になります。デフォルトのステータスが有効の場合は、ALLが表示されます。現行のステータス・リストまたは値セットが空の場合は、NULLが表示されます。

構文

STATLIST(dimension [keyword] [width])

パラメータ

dimension

値がディメンション、ディメンション・サロゲートまたは値セットの名前であるテキスト式。

keyword

表8-14「STATLISTのキーワード」に示すキーワード。このキーワードによって、現行のステータス・リストの値を表示する形式を指定できます。

表8-14 STATLISTのキーワード

キーワード

説明

INTEGER

STATLISTがディメンションの現行のステータスにある値のリストを返す際、そのディメンションのデフォルトのステータス・リストでの位置を示すINTEGERとして返すように指定。

TEXT

(デフォルト)STATLISTがディメンションの現行のステータスに含まれる値のリストを返す際、その値の値名として返すように指定。

width

リストの幅を文字数で指定するINTEGER式(オプション)。幅を指定しない場合、STATLISTではLSIZEオプションの現行の値が使用されます。LSIZEのデフォルト値は80です。

例

例8-111 ROWによるステータス・リストの作成

この例は、売上総額が$3,000,000を超える月をリストします。

次の文

LIMIT month TO TOTAL(sales, month) GE 3000000
ROW W 40 'Months with total sales over $3,000,000: '-
W 40 STATLIST(month, 40)

によって、次の出力が生成されます。

Months with total sales over $3,000,000: Jun95 TO Sep95, May96 TO Sep96

例8-112 SHOWによるステータス・リストの作成

次のSTATLIST文は、ディメンション値を20文字幅に書式設定します。

LIMIT month TO 'Jan95' 'Mar95' 'May95' 'Jul96' 'Sep96' 'Nov96'
SHOW STATLIST(month 20)

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

Jan95, Mar95, May95,
Jul96, Sep96, Nov96

次の文は、ディメンションの位置をリストします。

SHOW STATLIST(month INTEGER 20)

出力は次のとおりです。

1, 3, 5, 19, 21, 23

STATMAX

STATMAXファンクションは、ディメンションまたはディメンション・サロゲートの現行のステータス・リストの最新の値、あるいは値セットの最新の値を返します。

戻り値

STATMAXが返すデータ型は、ディメンション値またはディメンション・サロゲート値のデータ型、あるいはディメンションまたはサロゲートのデフォルトのステータス・リストでの位置を示すINTEGERです。「STATMAXで返されるディメンション値の自動変換」を参照してください。

構文

STATMAX(dimension)

パラメータ

dimension

値がディメンション、ディメンション・サロゲートまたは値セットの名前であるテキスト式。

使用上の注意

STATMAXで返されるディメンション値の自動変換

STATMAXが返す値は、コンテキストに合せて数値またはテキスト値に変換されます。たとえば、monthのステータスがJun95からDec95に制限されており、Dec95がデフォルトのステータス・リストの12番目だとします。STATMAX(month)の値は、テキスト変数または数値変数に代入できます。

次の文

DEFINE textvar TEXT
textvar = STATMAX(month)
SHOW textvar

によって、次の出力が生成されます。

Dec95

これに対し、次の文

DEFINE intvar INTEGER
intvar = STATMAX(month)
SHOW intvar

によって、次の出力が生成されます。

12

例

例8-113 タイトルに使用するSTATMAX

次のプログラムの文は、STATMAXを使用して売上総額の上位10か月の中で一番最近の月を判別します。

LIMIT month TO BOTTOM 10 BASEDON TOTAL(sales, month)
SHOW JOINCHARS(STATMAX(month) ' is the latest month -
of the ten months with the lowest sales.')
SHOW JOINCHARS('the months range from ' STATMIN(month) ' to '-
STATMAX(month))

この文によって生成される売上レポートは、次のとおりです。

Dec96 is the latest month of the ten months with the lowest sales.
The months range from Jan95 to Dec96

LIMITコマンドによってmonthの値が時間順ではなく売上の昇順に並べられているため、STATMAXのかわりにSTATLASTを使用した場合は別の値が生成されます。

STATMIN

STATMINファンクションは、ディメンションまたはディメンション・サロゲートの現在のステータス・リストで最も早い値、あるいは値セットの最も早い値を返します。

戻り値

ディメンション値またはサロゲート値、あるいはディメンションまたはサロゲートのデフォルトのステータス・リストでの値の位置を示すINTEGER。戻り値は、dimension引数および戻り値を受け取るオブジェクトによって変わります。「STATMINで返される値のデータ型の自動変換」を参照してください。

構文

STATMIN(dimension)

パラメータ

dimension

値がディメンション、ディメンション・サロゲートまたは値セットの名前であるテキスト式。

使用上の注意

STATMINで返される値のデータ型の自動変換

STATMINが返すディメンション値は、必要に応じて数値またはテキスト値に変換されます。たとえば、monthのステータスがJun95からDec95に制限されており、Jun95がデフォルトのステータス・リストの6番目のmonth値だとします。STATMIN(month)の値は、テキスト変数、数値変数またはDATE変数に代入できます。

次の文

DEFINE textvar TEXT
textvar = STATMIN(month)
SHOW textvar

によって、次の出力が生成されます。

Jun95

これに対し、次の文

DEFINE intvar INTEGER
intvar = STATMIN(month)
SHOW intvar

によって、次の出力が生成されます。

6

例

例8-114 タイトルに使用するSTATMIN

次のプログラムの文は、STATMINを使用して売上総額の上位10か月の中で一番早い月を判別します。

LIMIT month TO TOP 10 BASEDON TOTAL(sales, month)
SHOW JOINCHARS(STATMIN(month) ' is the earliest of the -
ten months with the highest sales.')
SHOW JOINCHARS( 'The months range from ' statmin(month) ' TO '-
statmax(month) )

この文によって生成される売上レポートは、次のとおりです。

May95 is the earliest of the ten months with the highest sales.
The months range from May95 to Sep96

例8-115 STATFIRSTとの比較

次の例では、STATMINと、現在のステータス・リストの最初の値を返すSTATFIRSTとの相違点がわかります。

次の文を発行するとします。

LIMIT month TO TOP 10 BASEDON TOTAL(sales, month)
REPORT WIDTH 20 TOTAL(sales, month)

この文を実行すると、次のレポートが作成されます。

MONTH          TOTAL(SALES, MONTH)
-------------- --------------------
Jul96                  3,647,085.39
Jun96                  3,458,438.30
Jul95                  3,414,210.05
Aug96                  3,246,601.97
Jun95                  3,228,824.80
Sep96                  3,215,883.93
May96                  3,112,854.59
Aug95                  3,044,694.29
Sep95                  3,006,242.58
May95                  2,908,539.45

このレポートのmonthの値は、年代順ではなく降順の売上に並べられており、これが現在のステータス・リストの順序になります。

- STATMINは、次の文および出力で示すように、ステータスにある時間順で最初の値(位置では最後)を返します。

SHOW STATMIN(month)
May95

- STATFIRSTは、次の文と出力で示すように、ステータスでの位置で最初の値(時間順では8番目)を返します。

SHOW STATFIRST(month)
Jul96

STATRANK

STATRANKファンクションは、ディメンション値またはディメンション・サロゲート値の現行のステータス・リストでの位置、あるいは値セットでの位置を返します。

戻り値

INTEGER

構文

STATRANK(dimension [value])

パラメータ

dimension

値がディメンション、ディメンション・サロゲートまたは値セットの名前であるテキスト式。

value

dimensionに適切なデータ型を持つ、チェックする値。valueには、たとえば、IDまたはTEXTディメンションの場合はテキスト式、INTEGERディメンションの場合はINTEGER、時間ディメンションの場合は日付、結合または連結ディメンションの場合は山カッコで囲んだ値の組合せを指定できます。テキスト式の値は、実際のディメンション値と大文字と小文字が完全に同じである必要があります。テキスト式を使用する場合は、単一行の値である必要があります。

結合ディメンションの値を指定する場合は、必ず山カッコで値を囲み、ベース・ディメンション値はカンマとスペースで区切ります。連結ディメンションの値を指定する場合は、必ず山カッコで値を囲み、ベース・ディメンション名と値はコロンとスペースで区切ります。

valueを指定しない場合、STATRANKは現行の値の位置を返します。現行のステータス・リストまたは値セットにはない有効なディメンション値の名前を指定すると、STATRANKはNAを返します。

例

例8-116 STATRANKによる位置番号の特定

売上総額の上位5か月を番号付きリストとして表示するレポートを作成するとします。STATRANKを使用して、各月に番号を付けることができます。次の定義および内容のレポート・プログラムを記述します。

DEFINE sales.rpt PROGRAM
PROGRAM
LIMIT month TO TOP 5 BASEDON TOTAL(sales, month)
SHOW 'Top five months by total sales:'
for month
ROW WIDTH 4 JOINCHARS(STATRANK(month) '.') WIDTH 5 month
END

このレポート・プログラムによって次のレポートが生成されます。

Top five months by total sales:
1.   Jul96
2.   Jun96
3.   Jul95
4.   Aug96
5.   Jun95

sales.rptプログラムの実行後、SHOW文およびSTATRANKファンクションを使用して、売上総額の上位5か月に含まれる特定の月の位置を取得します。

次の文

SHOW STATRANK(month Jun96)

によって、次の出力が生成されます。

2

例8-117 結合ディメンションでのSTATRANKの使用

指定するdimensionが結合ディメンションの場合、value全体を一重引用符で囲む必要があります。

たとえば、アナリティック・ワークスペースにregionディメンションおよびproductディメンションがあるとします。regionディメンション値には、East、CentralおよびWestがあります。productディメンション値には、Tents、CanoesおよびRacquetsがあります。

次の文は、結合ディメンションを定義してそれに値を追加します。

DEFINE reg.prod DIMENSION <region product>
MAINTAIN reg.prod ADD <'East', 'Tents'> <'West', 'Canoes'>

ベース位置を指定するには、次のような文を使用します。regionディメンションのEastの位置は1、productディメンションのTentsの位置は1であるため、次の文は対応するreg.prod値の位置を返します。

SHOW STATRANK(reg.prod '<1, 1>')

1

ベース・テキスト値を指定するには、次のような文を使用します。

SHOW STATRANK(reg.prod '<\'East\', \'Tents\'>')

1

例8-118 連結ディメンションでのSTATRANKの使用

指定するdimensionが連結ディメンションの場合、value全体を一重引用符で囲む必要があります。次の文は、ベース・ディメンションregionおよびproductを持つreg.prod.ccdimという名前の連結ディメンションを定義します。

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>

ベース・ディメンション位置を指定するには、次のような文を使用します。productディメンションのracquetsの位置が3であるため、次の文は<product: Racquets>値のreg.prod.ccdimでの位置を返します。

SHOW STATRANK(reg.prod.ccdim '<product: 3>')

6

ベース・ディメンション・テキスト値を指定するには、次のような文を使用します。

SHOW STATRANK(reg.prod.ccdim '<product: Tents>')

4

STATVAL

STATVALファンクションは、ディメンションまたはディメンション・サロゲートの現行のステータス・リストで指定した位置、あるいは値セットで指定した位置に対応するディメンション値を返します。

戻り値

STATVALが返すデータ型は、ディメンション値またはディメンション・サロゲート値のデータ型、あるいはディメンションのデフォルトのステータス・リストでの位置を示すINTEGERです。STATVALが返すディメンション値は、コンテキストに合せて数値またはテキスト値に変換されます。STATVALが常にINTEGER値を返すようにするには、INTEGERキーワードを指定します。例8-120「常にINTEGERを返すSTATVALの設定」を参照してください。

構文

STATVAL(dimension position [INTEGER])

パラメータ

dimension

値がディメンション、ディメンション・サロゲートまたは値セットの名前であるテキスト式。

position

ディメンションまたは値セットの現行のステータス・リストでの位置を指定するINTEGER式。値を持たない位置を指定すると、STATVALはNAを返します。

INTEGER

デフォルトのステータス・リストでのディメンション値の位置を示すINTEGERをSTATVALが常に返すように指定します。

使用上の注意

FORループのSTATVAL

ディメンションに対するFORループでは、ループの反復ごとにステータスが単一のディメンション値に制限されます。このため、STATVALは位置1の値のみを返します。他の位置にはNAを返します。

例

例8-119 修飾データ参照を持つSTATVAL

売上総額の上位10か月のうち、5番目の月の売上額を確認するとします。monthをTOP 10に制限してから、修飾データ参照のSTATVALを使用して5番目の月の売上額を生成します。

LIMIT month TO TOP 10 BASEDON TOTAL(sales, month)
REPORT month

この文によって生成されるレポートは次のとおりです。

MONTH
--------------
Jul96
Jun96
Jul95
Aug96
Jun95
Sep96
May96
Aug95
Sep95
MAY95

次のようにSTATVALをREPORT文で使用すると、別のレポートが生成されます。

REPORT W 8 DOWN district HEADING -
JOINCHARS('Sales: 5th of Top Ten - ' STATVAL(month 5)) -
sales(month STATVAL(month 5))

この文によって生成されるレポートは、次のとおりです。

------------Sales: 5th of Top Ten - Jun95-------------
-----------------------PRODUCT------------------------
DISTRICT   Tents      Canoes    Racquets  Sportswear  Footwear
-------- ---------- ---------- ---------- ---------- ----------
Boston    88,996.35 147,412.44  90,840.60  75,206.30 144,162.66
Atlanta  110,765.24 106,327.17 109,695.31 155,652.78 146,364.99
Chicago   70,908.96 108,039.05 100,030.29 104,900.66 148,386.81
Dallas   128,692.56  71,899.23 176,452.58 164,823.10  32,421.25
Denver    91,717.46  99,099.20 140,961.37  99,951.60  70,149.77
Seattle  113,806.48 143,037.62  54,926.87  57,739.03  75,457.04

次の文の修飾データ参照は「monthのデフォルトのステータスにある5番目の月の売上」を意味します。

sales(month 5)

次の文の修飾データ参照は「monthの現行のステータスにある5番目の月の売上」を意味します。

sales(month STATVAL(month 5))

次の文は、monthの修飾データ参照で返される値、および引数monthを持つSTATVALで返される値を表示します。

SHOW month(month 5)
SHOW STATVAL(month 5)

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

May95
Jun95

例8-120 常にINTEGERを返すSTATVALの設定

コンテキストによって、STATVALはINTEGERキーワードを指定しなくてもINTEGER値を返す場合があります。

次の文

LIMIT month TO 'Jun95' TO 'Dec95'
SHOW STATVAL(month 3)

によって、次の出力が生成されます。

Aug95

INTEGERキーワードを付けます。

SHOW STATVAL(month 3 INTEGER)

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

8

STDDEV

STDDEVファンクションは、式の値の標準偏差を計算するファンクションです。

STDDEVは、NASKIPオプションの影響を受けます。NASKIPがYESに設定されている場合(デフォルト)、STDDEVはNA値を無視し、非NA値の標準偏差を返します。NASKIPがNOに設定されている場合、計算に含まれる値にNAが1つでもあると、STDDEVはNAを返します。計算に含まれるすべてのデータ値がNAの場合には、NASKIPの設定にかかわらず、STDDEVはNAを返します。

戻り値

DECIMAL

構文

STDDEV(expression [dimensions])

パラメータ

expression

標準偏差を計算する対象の数式。

dimensions

結果のディメンション。デフォルトでは、STDDEVは単一の値を返します。結果に対し1つ以上のディメンションを指定すると、STDDEVは、指定されたディメンションに対して標準偏差を計算し、値の配列を返します。各ディメンションは、expressionのディメンションであるか、そのディメンションの1つと関連している必要があります。関連ディメンションの場合は、ディメンション名のかわりにリレーションの名前を指定でき、これによって、ディメンション間のリレーションが複数ある場合に使用するリレーションを選択できます。

使用上の注意

DWMQYディメンションによってディメンション化された式を使用するSTDDEVの使用

expressionがDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションによりディメンション化されている場合は、関連dimensionとして、他のどのDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションでも指定できます。Oracle OLAPでは、ディメンション間の暗黙的なリレーションを使用します。DAY、WEEK、MONTH、QUARTERまたはYEAR型の一方のディメンションから他方のディメンションへのマッピング(週から月など)を制御するには、2つのディメンション間のリレーションを明示的に定義し、STDDEVファンクションへのdimension引数としてリレーションの名前を指定します。

DAY、WEEK、MONTH、QUARTERおよびYEAR型の関連ディメンションの各期間では、Oracle OLAPは、ターゲット期間に終了するソース期間のデータ値の標準偏差を計算します。この方法は、どのディメンションがより上位の集計期間を保持しているかにかかわらず、適用されます。DAY、WEEK、MONTH、QUARTERおよびYEAR型の2つのディメンションの期間の間における、データの集計または割当て方法を制御するには、TCONVERTファンクションを使用できます。

例

例8-121 月間売上の標準偏差の計算

この例では、1996年の最初の3か月間に販売したテントの平均数と同時に、その平均から標準偏差を計算します。

LIMIT district TO ALL
LIMIT month TO 'Jan96' TO 'Mar96'
LIMIT product TO 'Tents'
REPORT HEADING 'Average' AVERAGE(units month) -
HEADING 'Stddev'STDDEV(units months)

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

MONTH           Average     Stddev
-------------- ---------- ----------
Jan96              262.33      49.32
Feb96              247.83      57.37
Mar96              320.50      68.17

SUBSTRファンクション

SUBSTRファンクション群(SUBSTR、SUBSTRBおよびSUBSTRC)は、文字列内の指定した位置から始まる部分文字列を返します。

戻り値となるサブストリングの長さの計算方法は各ファンクションで異なります。

- SUBSTRは、入力キャラクタ・セットの定義どおりに文字を使用して長さを計算します。

- SUBSTRBは、バイトを使用して長さを計算します。

- SUBSTRCは、Unicodeの完全文字を使用して長さを計算します。

戻り値

戻り値は、文字列と同じデータ型です。

構文

{SUBSTR | SUBSTRB | SUBSTRC }(string, position [, substring_length ])

パラメータ

string

サブストリングが作成される基礎となる文字列のテキスト式。

position

返される文字列の最初の文字が始まる位置。

- positionが0(ゼロ)の場合、1として扱われます。

- positionが正の場合、ファンクションはstringの始めからカウントして最初の文字を見つけます。

- positionが負の場合、ファンクションはstringの終わりから逆方向にカウントします。

substring_length

戻される文字列の長さ。SUBSTRは、入力キャラクタ・セットの定義どおりに文字を使用して長さを計算します。SUBSTRBは、文字数ではなくバイト数を使用します。SUBSTRCは、完全なUnicodeキャラクタを使用します。

この引数に値を指定しない場合、ファンクションはstringの終わりまでのすべての文字を返します。1未満の値を指定したり、stringの文字数を超える値を指定すると、ファンクションはNAを返します。

例

例8-122 文字サブストリングの取得

次の例では、「abcdefg」の指定したサブストリングが返されます。

SHOW SUBSTR('abcdefg',3,4)
cdef

SHOW SUBSTR('abcdefg',-5,4)
cdef

例8-123 バイトを使用したサブストリングの取得

AL32UTF8データベース・キャラクタ・セットを使用しているとします。Fußball文字列の場合、次の文では2バイト目からの長さ4バイトのサブストリングが戻されます。

SHOW SUBSTRB('Fußball',2,4)
ußb

SUBTOTAL

SUBTOTALファンクションは、レポートで累計される小計の1つの値を返すファンクションです。通常はROWコマンド内でSUBTOTALファンクションを使用して、レポートに小計または総計を追加します。Oracle OLAPは各列に32の現在までの合計を保持するため、最大32レベルの小計を含めることができます。

注意:
REPORT文では、GRANDTOTALSおよびSUBTOTALSキーワードを使用して、総計および小計の行を含めます。

戻り値

DECIMAL

構文

SUBTOTAL(n)

パラメータ

n

レポートにおける各数値列の現在までの合計のレベルを示すINTEGER値。たとえば、「Total」をレベル1の小計に、「Grand Total」をレベル2の小計にできます。列には最大32レベルの現在までの合計を含めることができるため、nは1から32のINTEGERにする必要があります。SUBTOTALは、現行の列のこの小計の値を返し、小計nの値をゼロにリセットします。

32の小計を参照する番号(1から32)には固有の意味はなく、すべての小計は参照されるまで同じです。

使用上の注意

自動的な小計のリセット

ROWコマンドでSUBTOTALファンクションを使用して現行の列の小計を含める場合、そのレベルの小計はゼロにリセットされます。

ZEROTOTALによる小計のリセット

ROWコマンドを使用してレポートを作成する場合、ZEROTOTAL文を使用すると任意の列の小計をゼロにリセットできます。通常、ZEROTOTALはレポート・プログラムの開始時に使用し、最初にすべての合計がゼロになるようにします。

NA値とSUBTOTAL

SUBTOTALは、NA値を無視します。すべての値がNAの場合、SUBTOTALはゼロを返します。

例

例8-124 レポートにおける小計および総計の計算

売上レポートに、各地域の小計を表示するとします。レポートの終わりには、すべての売上の総計も表示するとします。SUBTOTAL(1)を使用して、各地域の小計を生成できます。この小計は、使用するたびに0にリセットされるため、各地域別の小計が計算されます。レポートの終わりには、SUBTOTAL(2)を使用して総計を生成できます。レポート内ではこれを使用していないため、すべての地域の売上高の合計が保持されます。

LIMIT month TO FIRST 3
LIMIT region TO ALL
ZEROTOTAL ALL
FOR region
DO
ROW region
LIMIT DISTRICT TO region
FOR district
DO
ROW INDENT 5 district ACROSS month: sales
DOEND
ROW INDENT 5 'Total' ACROSS month: OVER '-' SUBTOTAL(1)
BLANK
DOEND
ROW 'Grand Total' ACROSS month: OVER '=' SUBTOTAL(2)

このプログラムによって生成される出力は、次のとおりです。

East
Boston     32,153.52  32,536.30  43,062.75
Atlanta    40,674.20  44,236.55  51,227.06
---------- ---------- ----------
Total      72,827.72  76,772.85  94,289.81
Central
Chicago    29,098.94  29,010.20  39,540.89
Dallas     47,747.98  50,166.81  67,075.44
---------- ---------- ----------
Total      76,846.92  79,177.01 106,616.33
West
Denver     36,494.25  33,658.24  45,303.93
Seattle    43,568.02  41,191.28  51,547.23
---------- ---------- ----------
Total      80,062.27  74,849.52  96,851.16

========== ========== ==========
Grand Total    229,736.91 230,799.38 297,757.30

SYS_CONTEXT

SYS_CONTEXTファンクションは、コンテキスト・ネームスペースに関連付けられたパラメータの値を返します。

関連項目:
詳細は、『Oracle Database SQL言語リファレンス』のSYS_CONTEXTファンクションに関する項を参照してください。

戻り値

VARCHAR2.

構文

SYS_CONTEXT(namespace, parameter [, length ])

パラメータ

namespace

有効なSQL識別子であるネームスペースを指定するテキスト式。コンテキスト・ネームスペースが作成済で、関連付けられているパラメータとその値もDBMS_SESSION.set_contextプロシージャで設定されている必要があります。

parameter

ネームスペースに関連付けられている属性を指定するテキスト式。このパラメータとその値は、DBMS_SESSION.set_contextプロシージャであらかじめ設定されている必要があります。このパラメータでは大文字と小文字は区別されませんが、30バイトを超える長さには指定できません。

length

戻り値の最大サイズを指定する数式。指定する値はNUMBER(または暗黙的にNUMBERに変換される値)で、1から4000バイトの範囲内にする必要があります。無効な値を指定すると、その値は無視されてデフォルト値である256バイトが使用されます。

使用上の注意

組込みネームスペースUSERENV

Oracleには、現行のセッションを記述するUSERENVという組込みネームスペースが用意されています。

USERENVネームスペースの事前定義パラメータの詳細は、『Oracle Database SQL言語リファレンス』のSYS_CONTEXTファンクションに関する項を参照してください。

例

例8-125 セッションのユーザー名の取得

次の例では、データベースにログインしたユーザーの名前であるJOHNSMITHという値を取得します。

SHOW SYS_CONTEXT ('USERENV', 'SESSION_USER')
JOHNSMITH

SYSDATE

SYSDATEファンクションは、現在の日付および時刻をDATETIME値として返すファンクションです。日付の形式は、NLS_DATE_FORMATオプションによって制御されます。デフォルトのDATETIME形式(DD-MM-RR)では、時刻は表示されません。

戻り値

DATETIME

構文

SYSDATE

例

例8-126 現在の日付の表示

次の文

SHOW SYSDATE

によって、次のように現在の日付が返されます。

08-Sep-00

SYSINFO

SYSINFOファンクションは、現行のセッションのOracleユーザーIDに関する情報を返すファンクションです。

戻り値

TEXT

構文

SYSINFO (keyword)

ここで、keywordは次のいずれかです。

USER

ROLES

PROFILES

HOSTNAME

OSUSER

INSTNAME

PID

PROGNAME

CHOSTNAME

COSUSER

TERMNAME

パラメータ

USER

Oracle Databaseセッションが実行されているユーザーIDを示すTEXT値を返します。この値は、USERIDで返される値と同じです。

ROLES

セッションのユーザーIDに適用されるロールをリストする複数行のTEXT値を返します。

PROFILES

セッションのユーザーIDに適用されるプロファイルをリストする複数行のTEXT値を返します。

OSUSER

Oracle Databaseサーバーが実行されているオペレーティング・システムのユーザー名を示すTEXT値を返します。

INSTNAME

Oracle Databaseサーバーのインスタンス名であるTEXT値を返します。

PID

Oracle Databaseセッションのオペレーティング・システムのID番号であるTEXT値を返します。

HOSTNAME

Oracle Databaseサーバーのホスト名であるTEXT値を返します。

PROGNAME

データベースに接続しているクライアントを表すTEXT値を返します。

CHOSTNAME

クライアントのホスト名であるTEXT値を返します。

COSUSER

クライアントのオペレーティング・システムのユーザー名であるTEXT値を返します。

TERMNAME

クライアントの端末名であるTEXT値を返します。

例

例8-127 ユーザーIDの取得

SYSINFOファンクションを使用して、現行のセッションのユーザーを取得できます。

SHOW SYSINFO(USER)

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

Scott

SYSTEM

SYSTEMファンクションは、Oracle OLAPが実行されているプラットフォームを識別するファンクションです。

データ型

TEXT

構文

SYSTEM

使用上の注意

プラットフォームの関連性

Oracle OLAPはOracle Databaseに組み込まれているため、Oracle OLAPが稼働しているオペレーティング・システムはその動作において重要な要素ではありません。

注意:
外部ファイルへのすべての参照は、プラットフォームに固有ではないディレクトリ・オブジェクトを介して行われます。

例

例8-128 プラットフォームの表示

Intel NTで次のSYSTEM文を発行すると、値NTX86が返されます。

SHOW SYSTEM

NTX86

SYSTIMESTAMP

SYSTIMESTAMPファンクションは、現在の日時をTIMESTAMP_TZ値として返します。

データ型

TIMESTAMP_TZ

構文

SYSTIMESTAMP

例

例8-129 TIMESTAMP値として取得する現在の日時

SHOW systimestamp
26-APR-07 02.18.47.030587 PM -04:00

TALLY

TALLYファンクションは、1つ以上の関連ディメンションの各値に対応するディメンションの値の数をカウントするファンクションです。

戻り値

INTEGER

構文

TALLY(dimension [related-dimensions])

パラメータ

dimension

値をカウントする対象のディメンション。related-dimensionsを指定すると、TALLYは単一の関連ディメンションの各値、または複数の関連ディメンションの値の各組合せに対応するdimensionの値の数をカウントします。related-dimensionsを指定しない場合、TALLYはディメンション内の値の数をカウントします。dimensionの現行のステータスにある値のみがカウントされます。

related-dimensions

結果の1つ以上の関連ディメンション。これらは、dimensionに関連付けられる必要があります。または、ディメンション名のかわりにリレーションの名前を指定でき、これによって、ディメンション間のリレーションが複数ある際に使用するリレーションを選択できます。related-dimensionsが指定されていない場合、TALLYはdimensionの現行のステータスにある値の総数を返します。

使用上の注意

TALLYがNAを返す場合

TALLYは、対応するdimension値がないrelated-dimensionの位置にはNAを返します。

DWMQYディメンションとともに使用するTALLY

expressionがDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションによりディメンション化されている場合は、related-dimensionとして、他のどのDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションでも指定できます。Oracle OLAPでは、ディメンション間の暗黙的なリレーションを使用します。1つのDAY、WEEK、MONTH、QUARTERまたはYEARディメンションと別のディメンションとのマッピング(たとえば週から月)を制御するには、2つのディメンション間に明示的リレーションを定義し、そのリレーションの名前をTALLYファンクションのrelated-dimension引数として指定します。

Oracle OLAPは、関連ディメンションの期間ごとに、ターゲット期間に終了するすべてのソース期間を計算します。この方法は、どのディメンションがより上位の集計期間を保持しているかにかかわらず、適用されます。

例

例8-130 TALLYの結果の生成

ここでは、TALLYを使用して、各部門によって生産される製品の数を調べます。division.productリレーションは、各製品が属する部門を記録します。次の例は、division.productのレポートです。

PRODUCT          DIVISION.PRODUCT
---------------------------------
Tents          Camping
Canoes         Camping
Racquets       Sporting
Sportswear     Clothing
Footwear       Clothing

次の文には、各部門によって生産される製品の数を出力するTALLYが含まれています。

REPORT HEADING 'Products' TALLY(product, division)

この文によって生成されるレポートは次のとおりです。

DIVISION        Products
-------------------------
Camping                 2
Sporting                1
Clothing                2

TAN

TANファンクションは、三角式の正接を計算するファンクションです。

戻り値

NUMBER

構文

TAN(expression)

パラメータ

expression

ラジアン単位で指定された角度値を含む数式。

例

例8-131 角度の正接の計算

この例では、1ラジアンの角度の正接を計算します。次の文

DECIMALS = 5
SHOW TAN(1)

によって、次の結果が生成されます。

1.55741

TANH

TANHファンクションは、三角式の双曲線正接を計算するファンクションです。

戻り値

NUMBER

構文

TANH(expression)

パラメータ

expression

ラジアン単位で指定された角度値を含む数式。

例

例8-132 角度の双曲線正接の計算

この例では、1ラジアンの角度の双曲線正接を計算します。次の文

DECIMALS = 5
SHOW TANH(1)

によって、次の結果が生成されます。

0.76159

TCONVERT

TCONVERTファンクションは、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションの時系列データを、DAY、WEEK、MONTH、QUARTERまたはYEAR型の他のディメンションに変換するファンクションです。変換で使用する集計方法または割当て方法を指定できます。

重要:
このファンクションは、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションでのみ使用できます。TEXT型の階層ディメンションとして実装されている時間ディメンションには使用できません。

戻り値

TCONVERTファンクションにより返される値は、指定した変換のタイプおよび変換するディメンションの型により異なります。

構文

TCONVERT(expression time-dimension method [method])

methodの構文は、使用する方法の種類によって次のように異なります。

SUM|AVERAGE|LAST [BY PERIOD|BY DAY] [STATUS|NOSTATUS]

SPLIT|REPEAT|INTERPOLATE [BY PERIOD|BY DAY]

パラメータ

expression

変換する値を含む式。expressionは、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションによりディメンション化されている必要があります。このディメンションは、ソース・ディメンションと呼ばれます。通常、expressionは数値ですが、一部の変換方法ではテキスト・データも変換できます。「テキスト・データの変換」を参照してください。

time-dimension

expressionの変換後のDAY、WEEK、MONTH、QUARTERまたはYEARディメンション。このディメンションは、ターゲット・ディメンションと呼ばれます。

method

データをソース・ディメンションからターゲット・ディメンションに変換する際に使用する方法。次の集計方法または割当て方法を指定できます。

- 集計方法は、SUM、AVERAGEおよびLASTです。これらは通常、データを小さい方の時間間隔から大きい方の時間間隔(たとえば、月から年)に変換する際に使用されます。

- 割当て方法は、SPLIT、REPEATおよびINTERPOLATEです。これらは通常、データを大きい方の時間間隔から小さい方の時間間隔(たとえば、年から四半期)に変換する際に使用されます。すべての割当て方法で、ソース・ディメンションの完全デフォルト・ステータスが使用されて、割当てに使用される期間が決定されます。

ソース・ディメンションおよびターゲット・ディメンションに重複する同じ長さの期間(暦年と会計年度など)が含まれる場合以外は、集計方法および割当て方法の両方を指定できます。「互換性のある集計方法と割当て方法」および「集計および割当ての両方の使用」を参照してください。

どの方法においても、ターゲット・ディメンションの現行のステータスにある値について結果が計算されます。

取得する結果は、指定した方法と、同じ長さの期間または異なる長さの期間のどちらを持つディメンション間でデータを変換するかによって異なります。「集計および割当ての両方の使用」、「同じ長さの重複する期間」および「互換性のある代替方法」を参照してください。

SUM [BY PERIOD]

元となるソース期間のデータを合計することにより、ターゲット期間に対してデータを集計します。各ターゲット期間について、SUM BY PERIODはターゲット期間内で終了するすべてのソース期間の合計を返します。SUMは、ソースおよびターゲット・ディメンション間の暗黙的なリレーションを使用します。

SUM BY DAY

ソース値に含まれる各ターゲットの日数に従って、各ソース値に加重します。各ターゲット期間について、SUM BY DAYは元となる各ソース期間の値を、次の形式の加重係数で乗算しますが、ここで、source-days-in-targetは実際にターゲット期間に含まれるソース期間の日数、total-days-in-periodはソース期間の日数の合計です。

source-days-in-target / total-days-in-period

その後、SUM BY DAYはそれらの加重ソース値の合計を返します。SUM BY DAYを使用すると、個々のソース期間の値が、隣接するターゲット期間にまたがって分配されることがあります。

たとえば、週単位のデータを月単位のデータに変換するとします。週の3日間が1月に属し、4日間が2月に属する場合、SUM BY DAYはその週のデータの3/7を1月の合計に加算し、4/7を2月の合計に加算します。一方、SUM BY PERIODは週のデータ値全体を2月の合計に加算します(週が2月に終了するため)。

別の例として、暦年データを、6月に終了する会計年度に変換するとします。暦年1996(Cal96)は、会計年度1997(Fy97)に終了する唯一の暦年です。SUM BY PERIODメソッドでは、Cal96の値をFy97に割り当てます。一方、SUM BY DAYはCal96の値を、各会計年度に属する暦日の数に従って、会計年度Fy96とFy97に分配します。Cal96の366日のうち、182日(1月1日から6月30日)がFy96に属し、184日(7月1日から12月31日)がFy97に属します。このため、CAL96のデータについて、SUM BY DAYはFy96には加重係数182/366を、Fy97には加重係数184/366を使用します。

AVERAGE [BY PERIOD]

元となるソース期間のデータを平均することにより、ターゲット期間に対してデータを集計します。各ターゲット期間について、AVERAGE BY PERIODはターゲット期間内に終了するすべてのソース期間のデータを合計し、この合計をソース期間の数で除算します。AVERAGE BY PERIODは、2つの時間ディメンション間の暗黙的なリレーションを使用します。

AVERAGE BY DAY

ソース値に含まれる各ターゲットの日数に従って、元となる各ソース期間の値に加重します。各ターゲット期間について、AVERAGE BY DAYは各ソース期間の値を、実際にターゲット期間に含まれるソース期間の日数で乗算します。その後、それらの加重ソース値を合計し、ターゲット期間に含まれる合計日数で除算することにより平均が計算されます。AVERAGE BY DAYを使用すると、単一のソース期間の値が、隣接するターゲット期間にまたがって分配されることがあります。

LAST [BY PERIOD]

各ターゲット期間について、LAST BY PERIODはターゲット期間内で終了する最後のソース期間のデータ値を返します。ソース・ディメンションおよびターゲット・ディメンション間の暗黙的なリレーションが使用されます。

LAST BY DAY

小さい方の期間から大きい方の期間にデータを変換する場合は、LAST BY PERIODと同じ機能を持ちます。「互換性のある代替方法」を参照してください。

STATUS

ソース・ディメンションの現行のステータスが使用されることを示します。これは、SUMおよびAVERAGEメソッドのデフォルトです。

NOSTATUS

ソース・ディメンションの完全デフォルト・ステータスが使用されることを示します。これは、LASTメソッドのデフォルトです。

SPLIT [BY PERIOD]

ソース期間のデータを分割することにより、ターゲット期間にデータを割り当てます。SPLIT BY PERIODは、そのソース期間内に終了するターゲット期間の間で、ソース値を等分します。SPLIT BY PERIODは、2つのDAY、WEEK、MONTH、QUARTERまたはYEARディメンション間の暗黙的なリレーションを使用します。

SPLIT BY DAY

ソース値に含まれる各ターゲットの日数に従って、各ソース値に加重します。各ターゲット期間について、SPLIT BY DAYは元となる各ソース期間の値を、次の形式の加重係数で乗算しますが、ここで、target-days-in-sourceは実際にソース期間に含まれるターゲット期間の日数、total-period-daysはソース期間の日数の合計です。

target-days-in-source / total-period-days

その後、SPLIT BY DAYはそれらの加重ソース値の合計を返します。SPLIT BY DAYを使用すると、個々のソース期間の値が、隣接するターゲットにまたがって分配されることがあります。

REPEAT

各ターゲット期間について、REPEATはソース期間の値を返します。ターゲット期間は、ソース期間内に終了する期間です。REPEATは、ソースおよびターゲット・ディメンション間の暗黙的なリレーションを使用します。大きい方の期間から小さい方の期間にデータを変換する場合は、REPEAT BY DAYはREPEAT BY PERIODと同じ機能を持ちます。「互換性のある代替方法」を参照してください。

INTERPOLATE [BY PERIOD]

INTERPOLATEメソッドは、まず現行および前のソース期間の値の間にある差異を計算し、次に結果をターゲット期間に増分的に分割することにより、データをターゲット期間に割り当てます。INTERPOLATEは、現行および前のソース期間の間にある差異を、ソース期間内に終了するターゲット期間の数で除算し、この結果によって各ターゲット期間を増分します。

INTERPOLATE BY DAY

各ターゲット期間について、前のソース期間の値を次のように計算された値に加算します。ここで、end-daysは前のソース期間の終わりから現行のターゲット期間の終わりまでの日数で、period-daysは現行のソース期間に含まれる日の総数です。

(end-days / period-days) * (current-source-value - previous-source-value)

複数のソース期間にまたがる日がターゲット期間に含まれている場合、各ソース期間について同様の計算が行われます。

使用上の注意

TCONVERTから返される結果のディメンション

TCONVERTにより返される結果は、ターゲットのDAY、WEEK、MONTH、QUARTERまたはYEARディメンション、およびDAY、WEEK、MONTH、QUARTERまたはYEARディメンションではないすべてのexpressionディメンションによってディメンション化されます。

割当てで使用されるステータス

STATUSおよびNOSTATUSキーワードは、割当て方法には影響を与えません。割当て方法では、常にソース・ディメンションの完全デフォルト・ステータスが使用されて、元となる期間が決定されます。

互換性のある集計方法と割当て方法

ソース・ディメンションおよびターゲット・ディメンションに重複する同じ長さの期間が含まれる場合以外は、集計方法および割当て方法の両方を指定できます。ただし、2つの方法に互換性が必要です。表8-15「互換性のある集計方法と割当て方法」は、互換性のある方法を示しています。

表8-15 互換性のある集計方法と割当て方法

集計

互換性のある割当て

SUM

SPLIT

AVERAGE

REPEAT

LAST

INTERPOLATE

集計方法と割当て方法の両方を指定した場合、どちらかの方法にBY PERIODまたはBY DAYを使用できます。一方の方法にBY PERIODを(明示的にまたはデフォルトとして)指定して、もう一方の方法にBY DAYを指定した場合、BY DAYが優先されます。

集計および割当ての両方の使用

集計方法と互換性のある割当て方法の両方を指定した場合、Oracle OLAPはこれを次のように処理します。

- 小さい方の期間から大きい方の期間にデータを変換する場合、Oracle OLAPは(BY DAYをどちらかの方法に指定した場合はBY DAYを使用して)集計方法を採用します。

- 大きい方の期間から小さい方の期間にデータを変換する場合、Oracle OLAPは(BY DAYをどちらかの方法に指定した場合はBY DAYを使用して)割当て方法を採用します。

- 3月に終了する四半期と6月に終了する四半期など、同じ長さの重複しない期間を持つディメンション間でデータを変換する場合、集計方法および割当て方法の結果は同じになります。

同じ長さの重複する期間

暦年と会計年度、または3月で終了する四半期と4月に終了する四半期など、同じ長さの重複する期間を持つ、DAY、WEEK、MONTH、QUARTERまたはYEAR型の2つのディメンション間でデータを変換する場合、集計方法または割当て方法のどちらかを指定する必要がありますが、両方を指定することはできません。これらのディメンションについて、互換性のある集計方法と割当て方法では異なる結果が生成される可能性があります。

たとえば、暦年ディメンションから6月に終了する会計年度ディメンションにデータを変換する場合、SUMおよびSPLITメソッドは次のように異なる結果を返します。

- SUMメソッドは、ターゲット期間内に終了するソース期間のデータを合計します。暦年1996は会計年度1997内に終了するため、SUMメソッドは暦年1996の値を会計年度1997に割り当てます。

- SPLITメソッドは、ソース・データ値を、ソース期間内に終了するターゲット期間に割り当てます。会計年度1996は暦年1996内に終了するため、SPLITメソッドは暦年1996の値を会計年度1996に割り当てます。

互換性のある代替方法

単一の変換方法を指定し、集計方法を使用してデータを大きい方の期間から小さい方の期間(たとえば、月から週など)に変換する場合、Oracle OLAPは自動的に、指定した集計方法のかわりに互換性のある割当て方法を使用します。同様に、割当て方法を使用してデータを小さい方の期間から大きい方の期間に変換する場合、Oracle OLAPは自動的に互換性のある集計方法を使用します。「互換性のある集計方法と割当て方法」を参照してください。

結果のデータ型

可能な場合、TCONVERTはexpressionと同じデータ型の結果を返します。expressionがDECIMALの場合、結果は常にDECIMALになります。expressionがINTEGERの場合、必要な計算に除算が含まれない場合は結果はINTEGERとなります。たとえば、2つのディメンションが揃っている(つまり、暦年ディメンションと12月に終了する四半期ディメンションなど、それらが同じフェーズを持っており、同じ期間に基づいている)場合、REPEATメソッドを使用してINTEGER expressionを大きい方の期間から小さい方の期間に変換する場合は、結果がINTEGERとなります。同様に、SUMまたはLASTメソッドを使用してexpressionを小さい方の期間から大きい方の期間に変換する場合、結果はINTEGERとなります。

テキスト・データの変換

TCONVERTを使用して、変換に数値計算が必要ない場合にテキスト式の値を変換することもできます。たとえば、揃っているディメンションの場合、LASTメソッドを使用してテキスト値を小さい方の期間から大きい方の期間に変換でき、REPEATメソッドを使用してテキスト値を大きい方の期間から小さい方の期間に変換できます。さらに、LASTおよびREPEATメソッドを使用すると、同じ長さの期間を持つディメンション間でテキスト・データを変換することもできます。数値計算が必要なメソッドを使用してテキスト式を変換しようとすると、エラー・メッセージが表示されます。

財務データのメソッド

財務データを扱う場合、各タイプのデータに適切な変換メソッドを使用できます。表8-16「様々なタイプの財務データの変換メソッドの例」に、いくつかの例を示します。

表8-16 様々なタイプの財務データの変換メソッドの例

財務データのタイプ

変換内容

変換メソッド

収入および経費

月から年

SUM

株価

日から四半期

AVERAGE

貸借対照表の項目

月から四半期

LAST

四半期ごとの納税

年から四半期

SPLIT BY PERIOD

マネー・サプライ

年から四半期

INTERPOLATE

TCONVERTでのNA値の処理

TCONVERTはNASKIPオプションの影響を受けます。NASKIPがNOに設定されている場合、TCONVERTはNA値を持つソース期間からデータを受け取るターゲット期間にNAを返します。

例

例8-133 四半期をまたがるデータの分割

この例は、SPLITメソッドとSPLIT BY DAYメソッドを使用して、$120,000の年間予算収入を1996年の各四半期に割り当てた場合の結果を示しています。既存のyearディメンションがソース・ディメンションで、既存のquarterディメンションがターゲット・ディメンションです。

次の文

DEFINE budget.revenue DECIMAL <year>
budget.revenue(year 'Yr96') = 120000
LIMIT quarter TO year 'Yr96'
REPORT W 12 HEADING 'Split Evenly' -
TCONVERT(budget.revenue quarter SPLIT) -
W 12 HEADING 'Split by Day' -
TCONVERT(budget.revenue quarter Split by day)

によって、次のレポートが生成されます。

QUARTER        Split Evenly Split by Day
-------------- ------------ ------------
Q1.96             30,000.00    29,836.07
Q2.96             30,000.00    29,836.07
Q3.96             30,000.00    30,163.93
Q4.96             30,000.00    30,163.93

例8-134 TCONVERTを使用した週単位から月単位へのデータの集計

この例では、週単位のデータを月単位のデータに集計します。まず、weekという名前の週ディメンションを定義し、1996年1月1日から1996年6月30日までの日付を含む週を追加します(間の週はOracle OLAPによって自動的に追加されます)。

DEFINE week DIMENSION WEEK
MAINTAIN week ADD '01Jan96' '30Jun96'

次に、weekによりディメンション化されるweekvarという名前の変数を定義し、各週に値7を割り当てます。

DEFINE weekvar DECIMAL <week>
weekvar = 7

次の文を発行すると、weekvarに非NAデータが含まれる最初の週の開始日が1995年12月31日で、weekvarに非NAデータが含まれる最後の週の終了日が1996年7月6日であることが表示されます。

SHOW BEGINDATE(weekvar)
SHOW ENDDATE(weekvar)

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

31Dec95
06Jul96

これらの開始日と終了日に基づき、月単位のデータに変換される際、データはDec95からJul96までの月を基準として集計されます。次の文は、SUMメソッドとSUM BY DAYメソッドを使用して、weekvarの週単位のデータを月単位のデータに変換した場合の結果を出力します。

LIMIT month TO 'Jan96' TO 'Jul96'
REPORT HEADING 'Sum' TCONVERT(weekvar month SUM) -
HEADING 'Sum by Day' -
TCONVERT(weekvar month SUM BY day)

この文によって生成されるレポートは次のとおりです。

MONTH              Sum    Sum by Day
-------------- ---------- ----------
Jan96               28.00      31.00
Feb96               28.00      29.00
Mar96               35.00      31.00
Apr96               28.00      30.00
May96               28.00      31.00
Jun96               35.00      30.00
Jul96                7.00       6.00

TEXTFILL

TEXTFILLファンクションは、テキスト値の書式を再設定して、現行の書式にかかわらず指定した幅の行に収めるファンクションです。TEXTFILLは通常、行の幅に統一性がなく右側に不必要な余白があるテキストや、特に幅の大きい行があるテキストの書式を再設定する際に使用されます。

注意:
TEXTFILLは書式の再設定時にテキストの行を結合し、一方、ROWおよびREPORTは行を結合せずに書式を再設定します。例8-135「ROW内でのTEXTFILLの影響」を参照してください。

戻り値

TEXTまたはNTEXT

構文

TEXTFILL(text-expression, width)

パラメータ

text-expression

データの現行の書式にかかわらず、指定した幅に書式を再設定する対象のテキスト式。TEXT式を指定すると、戻り値はTEXTです。NTEXT式を指定すると、戻り値はNTEXTです。

width

データの書式が再設定される幅。1から132までのINTEGER値として指定します。

構造化されたレポートでは、指定された幅がレポートの列の幅を超えない場合、TEXTFILLはtext-expressionの書式をその幅に再設定します。widthの値が列の幅を超える場合、TEXTFILLはそれを無視し、式の書式は列の幅に再設定されます。

TEXTFILLは、単語間に空白を1つのみ配置して余分な空白を削除することにより、text-expressionの単語をできるだけ多く1行に収めます。単語がwidthより長い場合、TEXTFILLは2行以上に分割します。この場合、行の最後に余分な空白が配置されることがあります。

例

例8-135 ROW内でのTEXTFILLの影響

次の例は、適切に書式が設定されたテキスト変数textvarを使用して、ROWコマンド内でTEXTFILLを使用した場合の影響を示しています。

次の文

SHOW textvar

によって、次の出力が生成されます。

You can use the following options to control the format of
your display.

BMARGIN    Controls the bottom margin.
COLWIDTH   Controls column width.
COMMAS     Controls the use of commas in numbers.
DECIMALS   Controls number of decimal places in numbers.
LSIZE      Controls the maximum length of a line.
NASPELL    Controls the spelling of NA values in output.

次のROW文

ROW W 50 textvar

によって、次の出力が生成されます。

You can use the following options to control the
format of your
display.
BMARGIN       Controls the bottom margin.
COLWIDTH      Controls column width.
COMMAS        Controls the use of commas in
numbers.
DECIMALS      Controls the number of decimal
places in numbers.
LSIZE         Controls the maximum length of a
line.
NASPELL       Controls the spelling of NA values
in output.

それに対して、TEXTFILLを指定したROW文

ROW W 50 TEXTFILL(textvar, 50)

によって、次の出力が生成されます。

You can use the following options to control the
format of your display. BMARGIN Controls the
bottom margin. COLWIDTH Controls column width.
COMMAS Controls the use of commas in numbers.
DECIMALS Controls the number of decimal places in
numbers. LSIZE Controls the maximum length of a
line. NASPELL Controls the spelling of NA values
in output.

TO_BINARY_DOUBLE

TO_BINARY_DOUBLEファンクションは、テキスト式または数式をDECIMALの数式に変換します。

戻り値

DECIMAL

構文

TO_BINARY_DOUBLE(expr [, fmt [, nlsparam ] ])

パラメータ

expr

テキスト式または数式。exprがテキスト式の場合、次の値(大/小文字を区別しない)が特定の値に変換されます。

- INF: 正の無限大に変換されます。

- -INF: 負の無限大に変換されます。

- NaN: NaN(非数)に変換されます

fmt

数値の書式モデルを指定するテキスト式。この引数は、exprがテキスト式の場合にのみ有効です。

関連項目:
『Oracle Database SQL言語リファレンス』の数値書式モデルに関する項

数値のデフォルトの書式モデルでは、NLS_NUMERIC_CHARACTERSによって指定される小数点と3桁区切りが使用されます。

注意:
テキスト式では、浮動小数点数の書式要素(F、f、D、またはd)は使用できません。

nlsparams

テキスト式を変換する際に使用する3桁区切り、小数点および通貨記号を指定するテキスト式。この引数は、exprがテキスト式の場合にのみ有効です。この式には、次の1つ以上のパラメータを含め、カンマで区切ります。

NLS_CURRENCY symbol

NLS_ISO_CURRENCY territory

NLS_NUMERIC_CHARACTERS dg

TO_BINARY_FLOAT

TO_BINARY_FLOATファンクションは、テキスト式または数式をSHORTDECIMALの数式に変換します。

戻り値

SHORTDECIMAL

構文

TO_BINARY_FLOAT(expr [, fmt [, nlsparam ] ])

パラメータ

expr

テキスト式または数式。exprがテキスト式の場合、次の値(大/小文字を区別しない)が特定の値に変換されます。

- INF: 正の無限大に変換されます。

- -INF: 負の無限大に変換されます。

- NaN: NaN(非数)に変換されます

fmt

数値の書式モデルを指定するテキスト式。この引数は、exprがテキスト式の場合にのみ有効です。

関連項目:
『Oracle Database SQL言語リファレンス』の数値書式モデルに関する項

数値のデフォルトの書式モデルでは、NLS_NUMERIC_CHARACTERSによって指定される小数点と3桁区切りが使用されます。

注意:
テキスト式では、浮動小数点数の書式要素(F、f、D、またはd)は使用できません。

nlsparams

テキスト式を変換する際に使用する3桁区切り、小数点および通貨記号を指定するテキスト式。この引数は、exprがテキスト式の場合にのみ有効です。この式には、次の1つ以上のパラメータを含め、カンマで区切ります。

NLS_CURRENCY symbol

NLS_ISO_CURRENCY territory

NLS_NUMERIC_CHARACTERS dg

TO_CHAR

TO_CHARファンクションは、DATETIME、数値またはNTEXT式を、指定した書式のTEXT式に変換するファンクションです。このファンクションは通常、出力データの書式の設定に使用されます。

戻り値

TEXT

構文

TO_CHAR(datetime-exp, [datetime-fmt,] [option setting])

または

TO_CHAR(num-exp, [num-fmt,] [nlsparams])

または

TO_CHAR(ntext-exp)

パラメータ

datetime-exp

TEXTに変換されるDATETIME式。

datetime-fmt

日時書式テンプレートを指定するテキスト式。このテンプレートでDATETIMEデータ型からTEXTへの変換方法を指定します。日時書式テンプレートの詳細は、表9-4「日時の書式要素」を参照してください。datetime-fmtのデフォルト値は、NLS_DATE_FORMATオプションによって制御されます。

option setting

現在セッションで有効な設定を一時的に上書きするOLAPオプション(NLS_DATE_LANGUAGEなど)およびその新しい設定。一般に、このオプションにはdatetime-expの翻訳対象の言語を指定します。例8-138「現在日時のスペイン語での表示」を参照してください。

他のオプションを設定するオプションは指定しないでください。たとえば、NLS_DATE_LANGUAGEやNLS_TERRITORYは設定せず、かわりにNLS_DATE_LANGUAGEを設定してください。TO_CHARは、文の実行中にのみ新しい値を保持できるように、指定したオプションの現行の設定を保存およびリストアしますが、そのオプションの変更結果を保存およびリストアできません。たとえば、NLS_TERRITORYは、NLS_DATE_FORMAT、NLS_NUMERIC_CHARACTERS、NLS_CURRENCY、NLS_CALENDARなどの値およびその他のオプションを制御します。TO_CHARに対するコールでNLS_TERRITORYの値を変更した場合、すべてのオプションはそれらの領域に適したデフォルト値に2回リセットされます(1回目はNLS_TERRITORYがTO_CHAR文の実行中にその新しい値に設定されたとき、2回目はNLS_TERRITORYの保存された値がリストアされたとき)。

num-exp

TEXTに変換される数式。

num-fmt

数値の書式モデルを示すテキスト式。このモデルは、数値データ型(NUMBER、INTEGER、SHORTINTEGER、LONGINTEGER、DECIMAL、SHORTDECIMAL)からTEXTへの変換の実行方法を指定します。

数値のデフォルトの書式モデルでは、NLS_NUMERIC_CHARACTERSによって指定される小数点と3桁区切りが使用されます。

関連項目:
『Oracle Database SQL言語リファレンス』の数値書式モデルに関する項

nlsparams

num-expで使用される3桁区切り、小数点および通貨記号を指定するテキスト式。この式には、次の1つ以上のパラメータを含め、カンマで区切ります。

NLS_CURRENCY symbol

NLS_ISO_CURRENCY territory

NLS_NUMERIC_CHARACTERS dg

symbol

各国通貨記号を指定するテキスト式。11文字以上を指定することはできません。

territory

ISO通貨記号が使用されている地域を示すテキスト式。

dg

小数点(d)および3桁区切り(g)を示す、2つの異なるシングルバイト文字で構成されるテキスト式。

これらのパラメータは、NLS_CURRENCY、NLS_ISO_CURRENCYおよびNLS_NUMERIC_CHARACTERSオプションにより指定されるデフォルト値を上書きします。

ntext-exp

TEXTに変換されるNTEXT式。NTEXTからTEXTへの変換では、NTEXT値がデータベース・キャラクタ・セットで表せない場合、データの損失をまねくことがあります。

使用上の注意

TO_CHARによる数値データ型の処理

TO_CHARファンクションは、INTEGER、SHORTINTEGER、LONGINTEGER、DECIMALおよびSHORTDECIMAL値を、TEXTに変換する前にNUMBERに変換します。このため、TO_CHARはNUMBER値を他の数値データ型より速く変換します。

TO_CHARの端数処理により発生する可能性のある影響

数値のすべての書式モデルにより、数値が指定した有効桁数に端数処理されます。表8-17「端数処理により発生する可能性のある影響」に、端数処理による一部の影響を示します。

表8-17 端数処理により発生する可能性のある影響

num-expの条件

戻り値への影響

小数桁の左側に、書式で指定された数より多くの有効桁がある場合

番号記号(#)で表示

指定した書式で表示できない非常に大きい正の値である場合

ティルド(~)で表示。

指定した書式で表示できない非常に小さい負の値である場合

負の記号とその後に続くティルド(-~)で表示

例

例8-136 日付のCHARへの変換

次の文では、今日の日付を変換し、書式を指定します。

SHOW TO_CHAR(SYSDATE, 'Month DD, YYYY HH24:MI:SS')

指定した日付書式に従った日付と時刻が表示されます。

November  30, 2000 10:01:29

例8-137 数値のテキストへの変換

この文では、数値をテキストに変換し、小数点として空白を、3桁区切りとしてピリオドを指定します。

SHOW TO_CHAR(1013.50, NA, NLS_NUMERIC_CHARACTERS ' .')

この結果、値1013.50は、次のように表示されます。

1.013 50

例8-138 現在日時のスペイン語での表示

次の文では、デフォルトの言語をスペイン語に設定し、新しい日付書式を指定します。

NLS_DATE_LANGUAGE = 'spanish'
NLS_DATE_FORMAT = 'Day: Month dd, yyyy HH:MI:SS am'

次の文により、現在の日付と時刻がスペイン語で表示されます。

SHOW TO_CHAR(SYSDATE)
Viernes  : Diciembre  01, 2000 08:21:17 AM

NLS_DATE_LANGUAGEオプションは、文の実行中に言語を変更します。次の文により、日付と時刻がドイツ語で表示されます。

SHOW TO_CHAR(SYSDATE, NA, NLS_DATE_LANGUAGE 'german')
Freitag   : Dezember  01, 2000 08:26:00 AM

TO_DATE

TO_DATEファンクションは、書式が設定されたTEXTまたはNTEXT式を、DATETIME値に変換するファンクションです。

戻り値

DATETIME

構文

TO_DATE(text-exp, [fmt,] [option setting])

パラメータ

text-exp

変換する日付を含むテキスト式。式には、TEXTまたはNTEXTデータ型を使用できます。NTEXT値を日付として解釈できない場合は、NTEXTからの変換は不適切な結果となります。

fmt

日時書式テンプレートを指定するテキスト式。このテンプレートでテキストからDATETIMEへの変換方法を指定します。日時書式テンプレートの詳細は、表9-4「日時の書式要素」を参照してください。

option setting

現在セッションで有効な設定を一時的に上書きするOLAPオプション(NLS_DATE_LANGUAGEなど)およびその新しい設定。通常、このオプションはtext-expの言語がセッションの言語と異なる場合にその言語を指定します。例8-140「デフォルト言語および日付書式の指定」を参照してください。

他のオプションを設定するオプションは指定しないでください。たとえば、NLS_LANGUAGEやNLS_TERRITORYは設定せず、かわりにNLS_DATE_LANGUAGEを設定してください。TO_DATEは、文の実行中にのみ新しい値を保持できるように、指定したオプションの現行の設定を保存およびリストアしますが、そのオプションの変更結果を保存およびリストアできません。たとえば、NLS_TERRITORYは、NLS_DATE_FORMAT、NLS_NUMERIC_CHARACTERS、NLS_CURRENCY、NLS_CALENDARなどの値およびその他のオプションを制御します。TO_DATEに対するコールでNLS_TERRITORYの値を変更した場合、すべてのオプションはそれらの領域に適したデフォルト値に2回リセットされます(1回目はNLS_TERRITORYがTO_DATE文の実行中にその新しい値に設定されたとき、2回目はNLS_TERRITORYの保存された値がリストアされたとき)。

使用上の注意

大文字の使用

書式要素において単語、略称またはローマ数字で大文字が使用されると、対応する大文字が戻り値に生成されます。たとえば、書式要素DAYによりMONDAYが、DayによりMondayが、dayによりmondayが生成されます。

認識されない日付

TO_DATEがfmtを使用して、有効なDATE値で値を構成できない場合、エラーが返されます。たとえば、fmtが句読記号文字を示す場合で、text-expに英数字が含まれる場合、エラーが発生します。

例

例8-139 テキスト値のDATE値への変換

次の文は、January 15, 2002, 11:00 A.M.を、デフォルトの日付書式である15JAN02に変換し、その値をbonusdateという名前のDATE変数に格納します。

bonusdate = TO_DATE('January 15, 2002, 11:00 A.M.', -
'Month dd, YYYY, HH:MI A.M.')

例8-140 デフォルト言語および日付書式の指定

次の文では、デフォルトの言語をスペイン語に設定し、新しい日付書式を指定します。NLS_DATE_LANGUAGEオプションをTO_DATEファンクションで使用して、米語の月の名前を変換できます。

NLS_DATE_FORMAT = 'Day: Month dd, yyyy HH:MI:SS am'
NLS_DATE_LANGUAGE = 'spanish'
SHOW TO_DATE('November 15, 2001', 'Month dd, yyyy', -
NLS_DATE_LANGUAGE 'american')

日付が米語からスペイン語に変換され、新しい日付書式で表示されます。

Jueves   : Noviembre  15, 2001 12:00:00 AM

TO_DSINTERVAL

TO_DSINTERVALファンクションは、文字をDSINTERVAL値に変換するファンクションです。

戻り値

DSINTERVAL

構文

TO_DSINTERVAL(char)

パラメータ

char

変換する文字列を指定します。

TO_NCHAR

TO_NCHARファンクションは、TEXT式、日付または数値を、指定した書式でNTEXT式に変換するファンクションです。このファンクションは通常、出力データの書式の設定に使用されます。

戻り値

NTEXT

構文

TO_NCHAR(text-exp)

または

TO_NCHAR(datetime-exp, [datetime-fmt,] [option setting]

または

TO_NCHAR(num-exp, [num-fmt,] [nlsparams]

パラメータ

text-exp

NTEXTに変換されるTEXT式。

datetime-exp

NTEXTに変換されるDATETIME式。

datetime-fmt

日時書式テンプレートを指定するテキスト式。このテンプレートでDATETIMEデータ型からNTEXTへの変換方法を指定します。日時書式テンプレートの詳細は、表9-4「日時の書式要素」を参照してください。datetime-fmtのデフォルト値は、NLS_DATE_FORMATオプションによって制御されます。

option setting

現在セッションで有効な設定を一時的に上書きするOLAPオプション(NLS_DATE_LANGUAGEなど)およびその新しい設定。一般に、このオプションにはdatetime-expの翻訳対象の言語を指定します。例8-143「デフォルト言語および日付書式の指定」を参照してください。

他のオプションを設定するオプションは指定しないでください。たとえば、NLS_LANGUAGEやNLS_TERRITORYは設定せずに、かわりにNLS_DATE_LANGUAGEを設定してください。TO_NCHARは、文の実行中にのみ新しい値を保持できるように、指定したオプションの現行の設定を保存およびリストアしますが、そのオプションの変更結果を保存およびリストアできません。たとえば、NLS_TERRITORYは、NLS_DATE_FORMATE、NLS_NUMERIC_CHARACTERS、NLS_CURRENCY、NLS_CALENDARなどのオプションの値を制御します。TO_NCHARに対するコールでNLS_TERRITORYの値を変更した場合、すべてのオプションはそれらの領域に適したデフォルト値に2回リセットされます(1回目はNLS_TERRITORYがTO_NCHAR文の実行中にその新しい値に設定されたとき、2回目はNLS_TERRITORYの保存された値がリストアされたとき)。

num-exp

NTEXTに変換される数式。

num-fmt

数値の書式モデルを示すテキスト式。このモデルは、数値データ型(NUMBER、INTEGER、SHORTINTEGER、LONGINTEGER、DECIMAL、SHORTDECIMAL)からTEXTへの変換の実行方法を指定します。

関連項目:
『Oracle Database SQL言語リファレンス』の数値書式モデルに関する項

数値のデフォルトの書式モデルでは、NLS_NUMERIC_CHARACTERSオプションにより識別される小数点と3桁区切りが使用されます。

nlsparams

num-expで使用される3桁区切り、小数点および通貨記号を指定するテキスト式。この式には、次の1つ以上のパラメータを含め、カンマで区切ります。

NLS_CURRENCY symbol

NLS_ISO_CURRENCY territory

NLS_NUMERIC_CHARACTERS dg

symbol

各国通貨記号を指定するテキスト式。11文字以上を指定することはできません。

territory

ISO通貨記号が使用されている地域を示すテキスト式。

dg

小数点(d)および3桁区切り(g)を示す、2つの異なるシングルバイト文字で構成されるテキスト式。

これらのパラメータは、NLS_CURRENCY、NLS_ISO_CURRENCYおよびNLS_NUMERIC_CHARACTERSオプションにより指定されるデフォルト値を上書きします。

例

例8-141 日付の変換

次の文では、今日の日付を変換し、書式を指定します。

SHOW TO_NCHAR(SYSDATE, 'Month DD, YYYY HH24:MI:SS')

指定した日付書式に従った日付と時刻が表示されます。

November  30, 2000 10:01:29

例8-142 数値データのNTEXTデータへの変換

この文では、数値をNTEXTに変換し、小数点として空白を、3桁区切りとしてピリオドを指定します。

SHOW TO_NCHAR(1013.50, NA, NLS_NUMERIC_CHARACTERS ' .')

この結果、値1013.50は、次のように表示されます。

1.013 50

例8-143 デフォルト言語および日付書式の指定

次の文では、デフォルトの言語をスペイン語に設定し、新しい日付書式を指定します。

NLS_DATE_LANGUAGE = 'spanish'
NLS_DATE_FORMAT = 'Day: Month dd, yyyy HH:MI:SS am'

次の文

SHOW TO_NCHAR(SYSDATE)

によって、次のように現在の日付と時刻がスペイン語で表示されます。

Viernes  : Diciembre  01, 2000 08:21:17 AM

NLS_DATE_LANGUAGEオプションは、文の実行中に言語を変更します。次の文

SHOW TO_NCHAR(SYSDATE, NA, NLS_DATE_LANGUAGE 'german')

によって、次のように日付と時刻がドイツ語で表示されます。

Freitag   : Dezember  01, 2000 08:26:00 AM

TO_NUMBER

TO_NUMBERファンクションは、書式が設定されたTEXTまたはNTEXT式を、数値に変換するファンクションです。このファンクションは通常、通貨記号、小数点、3桁区切りなどを含むアプリケーションで、書式が設定されている数値出力を他のアプリケーションの入力として使用できるように変換するために使用します。

戻り値

NUMBER。書式モデルにMI、SまたはPRの書式要素が含まれている場合以外は、負の戻り値の前には負の記号が含まれ、正の値の名前には空白が含まれます。

構文

TO_NUMBER(text-exp, [fmt,] [nlsparams])

パラメータ

text-exp

変換する数値を含むテキスト式。式には、TEXTまたはNTEXTデータ型を使用できます。NTEXT値を数値として解釈できない場合は、NTEXTからの変換は不適切な結果となります。

fmt

数値の書式モデルを示すテキスト式。このモデルは、NUMBERへの変換の実行方法を指定します。

関連項目:
『Oracle Database SQL言語リファレンス』の数値書式モデルに関する項

デフォルトの数値書式では、ピリオド(.)が小数点として識別され、他の記号は認識されません。

nlsparams

text-expで使用される3桁区切り、小数点および通貨記号を指定するテキスト式。この式には、次の1つ以上のパラメータを含め、カンマで区切ります。

NLS_CURRENCY symbol

NLS_ISO_CURRENCY territory

NLS_NUMERIC_CHARACTERS dg

symbol

各国通貨記号を指定するテキスト式。11文字以上を指定することはできません。

territory

ISO通貨記号が使用されている地域を示すテキスト式。

dg

小数点(d)および3桁区切り(g)を示す、2つの異なるシングルバイト文字で構成されるテキスト式。

これらのパラメータは、NLS_CURRENCY、NLS_ISO_CURRENCYおよびNLS_NUMERIC_CHARACTERSオプションにより指定されるデフォルト値を上書きします。追加情報は、NLSオプションの項を参照してください。

使用上の注意

デフォルトの数値書式値

一部の書式の値は、NLS_TERRITORYの値によって決定されます

TO_NUMBERの端数処理により発生する可能性のある影響

数値のすべての書式モデルにより、数値が指定した有効桁数に端数処理されます。表8-17「端数処理により発生する可能性のある影響」に、端数処理による一部の影響を示します。

例

例8-144 テキスト・データの10進データへの変換

次の文で、テキスト文字列が現在の数値の書式(米語)のDECIMALデータ型に変換されます。text-expパラメータは、欧語の書式のテキスト文字列です。fmtパラメータは、現地の通貨記号(L)、3桁区切り文字(G)および小数点記号(D)を表します。text-expパラメータのGおよびDの書式がセッションの現行の設定とは異なるため、NLS_NUMERIC_CHARACTERSオプションにこれらの書式で使用されている文字を指定します。text_expのDはカンマで、Gはスペースです。

DEFINE money VARIABLE DECIMAL
money = TO_NUMBER('$94 567,00', 'L999G999D00', NLS_NUMERIC_CHARACTERS ', ')
SHOW money

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

94,567.00

TO_TIMESTAMP

TO_TIMESTAMPファンクションは、テキスト・データをTIMESTAMPデータ型の値に変換するファンクションです。

戻り値

TIMESTAMP

構文

TO_TIMESTAMP(char-exp [, fmt [ 'nlsparam' ] ])

パラメータ

char-exp

変換するテキスト式。

fmt

テキスト式の変換に使用する日時書式テンプレートを指定します。日時書式テンプレートの詳細は、表9-4「日時の書式要素」を参照してください。

この引数を省略した場合は、オブジェクトに対してTIMESTAMPのデフォルトの書式が使用されます。

nlsparam

戻り値となる月や曜日の名前と省略形に使用する言語を指定します。この引数は次のような形式で指定できます。

'NLS_DATE_LANGUAGE = language'

この引数を省略した場合、このファンクションではセッションのデフォルトの日付の言語が使用されます。

例

例8-145 タイムスタンプ・データへの変換とタイムスタンプ・データからの抽出

SHOW NLS_DATE_FORMAT
DD-MON-RR

SHOW TO_TIMESTAMP('10-SEP-0614:10:10:10.123000' 'DD MON RR HH24:MI:SS.FF')
10-SEP-14 10.10.10.123 AM

SHOW TO_TIMESTAMP_TZ ('2006-03-26 7:33:00 -4:00', 'YYYY-MM-DD HH:MI:SS TZH:TZM')
26-MAR-06 07.33.00 AM -04:00

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
SHOW EXTRACT (TIMEZONE_HOUR FROM mytimestamptz)
-4.00

TO_TIMESTAMP_TZ

TO_TIMESTAMP_TZファンクションは、テキスト・データをTIMESTAMP_TZデータ型の値に変換するファンクションです。

戻り値

TIMESTAMP_TZ

構文

TO_TIMESTAMP_TZ (char-exp [, fmt [ 'nlsparam' ] ])

パラメータ

char-exp

変換するテキスト式。

fmt

テキスト式の変換に使用する日時書式テンプレートを指定します。日時書式テンプレートの詳細は、表9-4「日時の書式要素」を参照してください。

この引数を省略した場合は、オブジェクトに対してTIMESTAMP_TZのデフォルトの書式が使用されます。

nlsparam

戻り値となる月や曜日の名前と省略形に使用する言語を指定します。この引数は次のような形式で指定できます。

'NLS_DATE_LANGUAGE = language'

この引数を省略した場合、このファンクションではセッションのデフォルトの日付の言語が使用されます。

例

例8-146 テキスト・データのTIMESTAMP_TZデータへの変換

SHOW TO_TIMESTAMP_TZ ('2006-03-26 7:33:00 -4:00', 'YYYY-MM-DD HH:MI:SS TZH:TZM')
26-MAR-06 07.33.00 AM -04:00

TO_YMINTERVAL

TO_YMINTERVALファンクションは、文字をYMINTERVAL値に変換するファンクションです。

戻り値

YMINTERVAL

構文

TO_YMINTERVAL(char)

パラメータ

char

変換する文字列を指定します。

TOD

TODファンクションは、24時間の書式を使用したhh:mm:ssの形式で現在の時刻を返すファンクションです。

戻り値

ID

構文

TOD

例

例8-147 現在の時刻の表示

次の文により、現在の時刻が現行の出力ファイルに送信されます。

show tod

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

17:30:46

TODAY

TODAYファンクションは、現在の日付をDATE値またはTEXT値として返すファンクションです。

戻り値

予期されるデータ型に応じてDATEまたはTEXT

- DATE
返されるDATE値を表示すると、値の書式はDATEFORMATオプションの日付テンプレートによって指定されている書式になります。日付テンプレートで曜日または月名が使用されている場合、TODAYはDAYNAMESオプションで指定されている曜日名と、MONTHNAMESオプションで指定されている月名を使用します。

- TEXT
テキスト値が予期される場合。TODAYは、日付を自動的にTEXT値に変換し、その際、DATEFORMATオプションの現行のテンプレートを使用して、テキスト値の書式が設定されます。現行のDATEFORMATテンプレートを上書きする場合は、date-format引数を指定したCONVERTファンクションを使用することによって、日付の結果をテキストに変換できます。

構文

TODAY

例

例8-148 今日の日付の表示

次の文により、現在の日付がDATE書式で現行の出力ファイルに送信されます。

DATEFORMAT = '<wtextl> <mtextl> <d>, <yyyy>'
SHOW TODAY

現在の日付が1996年1月15日の場合、これらの文によって生成される出力は次のとおりです。

Monday January 15, 1996

例8-149 TODAYファンクションを使用した日付の計算

次の文により、今日から60日後の日付が計算されます。

SHOW TODAY + 60

現在の日付が1996年1月15日の場合、この文によって生成される出力は次のとおりです。

Friday March 15, 1996

TOTAL

TOTALファンクションは、式の値の合計を計算するファンクションです。

戻り値

式のデータ型。INTEGER、LONGINTまたはDECIMALになります。

構文

TOTAL(expression [CACHE] [dimension...])

パラメータ

expression

合計する対象の式。

CACHE

内部動作が若干変更されます。このキーワードは、元のパフォーマンスが非常に遅い場合にのみ指定してください。

dimension

結果のディメンションの名前。または、expressionの1つのディメンションと結果のディメンションとする別のディメンションとの間のリレーションの名前。

デフォルトでは、TOTALは単一の値を返します。結果のディメンションを1つ以上指定した場合、TOTALは、指定されたディメンションに対して値を計算し、値の配列を返します。各ディメンションは、expressionのディメンションであるか、そのディメンションの1つと関連している必要があります。

ヒント:
指定したディメンションがexpressionの実際のディメンションではなくexpressionのディメンションに関連付けられたディメンションであり、かつ2つのディメンション間のリレーションが2つ以上ある場合は、ディメンション間のデフォルトのリレーションを使用して計算が行われます。(デフォルトのリレーションの詳細は、RELATIONコマンドを参照してください。)Oracle OLAPでこのデフォルトのリレーションを使用しない場合は、リレーションの名前を指定して、関連付けられたディメンションを指定します。

使用上の注意

TOTALでのNA値の処理

TOTALはNASKIPオプションの影響を受けます。NASKIPがYESに設定されている場合(デフォルト)、TOTALはNA値を無視し、非NA値の合計を返します。NASKIPがNOに設定されている場合、計算に含まれる値にNAが1つでもあると、TOTALはNAを返します。計算に含まれるすべてのデータ値がNAの場合には、NASKIPの設定にかかわらず、TOTALはNAを返します。

DWMQYディメンションでの合計

expressionがDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションによってディメンション化されている場合、それ以外のDAY、WEEK、MONTH、QUARTERまたはYEARディメンションを関連dimensionとして指定できます。Oracle OLAPでは、ディメンション間の暗黙的なリレーションを使用します。1つのDAY、WEEK、MONTH、QUARTERまたはYEARディメンションと別のディメンションとのマッピング(たとえば週から月)を制御するには、2つのディメンション間に明示的リレーションを定義し、そのリレーションの名前をTOTALファンクションのdimension引数として指定します。

Oracle OLAPは、関連ディメンションの期間ごとに、ターゲット期間に終了するすべてのソース期間のデータを合計します。この方法は、どのディメンションがより上位の集計期間を保持しているかにかかわらず、適用されます。2つの時間ディメンションの期間の間でデータを集計または割り当てる方法を制御するには、TCONVERTファンクションを使用します。

TOTALファンクションの複数リレーション

関連ディメンションによって合計を中断すると、式のディメンション性を変更しているため、Oracle OLAPはこの新しいディメンション性に基づく値を必要とします。そのディメンションの値を保持するリレーションを選択します。

Oracle OLAPは、必要なディメンションの値を保持するリレーションが複数ある場合、最初に定義されたリレーションを使用します。関連ディメンションが必要なディメンションとなるリレーションが存在しない場合、必要なディメンションによってディメンション化されるリレーションを検索します。

たとえば、districtおよびregionの間に次のような2つのリレーションがあるとします。

DEFINE REGION.DISTRICT RELATION REGION <DISTRICT>
LD The region each district belongs to

DEFINE DISTRICT.REGION RELATION DISTRICT <REGION>
LD The primary district in each region

アナリティック・ワークスペースに前述の2つのリレーションが存在するときに次のTOTALファンクションを指定した場合、指定したディメンションの値はリレーションregion.districtに格納されているため、Oracle OLAPではデフォルトでこのリレーションが使用されます。

REPORT TOTAL(sales region)

例

例8-150 すべての月の売上の合計

地区ごとのすべての月のスポーツウェアの合計売上を調べるとします。TOTALファンクションを使用して、売上総額を計算します。各地区の合計を参照するには、結果のディメンションとしてdistrictを指定します。

LIMIT product TO 'Sportswear'
REPORT W 15 HEADING 'Total Sales' TOTAL(sales district)

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

DISTRICT         Total Sales
-------------- ---------------
Boston            1,659,609.90
Atlanta           3,628,616.62
Chicago           2,296,631.81
Dallas            3,893,829.30
Denver            2,133,425.29
Seattle           1,298,215.59

TRANSLATE

TRANSLATEファンクションは、ある文字列に出現する各文字をそれぞれ対応する別の文字列の文字に置き換えるファンクションです。

注意:
TRANSLATEでは、REPLCHARSファンクションの機能に関連した機能が提供されます。REPLCHARSは、ある文字列を別の単一の文字列に置き換える機能や文字列を削除する機能を持つファンクションです。TRANSLATEでは、一度の操作で複数の単一の文字を1つずつ置き換えることが可能です。

戻り値

テキスト。

構文

TRANSLATE ( exp from_string to_string)

パラメータ

exp

置き換えられる文字を含むテキスト式。

from_string

置換え対象の文字を表すテキスト式。

to_string

from_stringの順序で置換えに使用する文字を表すテキスト式。この引数に指定した文字数がfrom_stringに指定した文字数よりも少ない場合、from_stringの残りの文字がこのファンクションによって戻り値から削除されます。ただし、空の文字列はNULL引数として解釈されるため、from_stringのすべての文字を削除するためにto_stringに空の文字列を指定することはできません。

例

例8-151 TRANSLATEでの複数文字の置換え

次の文は、本のタイトルを、ファイル名などに使用するために文字列に変換します。from_stringには、アスタリスク、空白、アポストロフィ(エスケープ文字としてバックスラッシュを付加)の3文字を含めています。to_stringにはアンダースコアを2つのみ含めていますが、このように指定するとfrom_stringの3番目の文字に対応する置換文字がない状態となり、戻り値にはアポストロフィが含まれないことになります。

SHOW TRANSLATE ('SQL*Plus User\'s Guide' '* \'' '__')
SQL_Plus_Users_Guide

TRIGGERファンクション

TRIGGERファンクションは、トリガー・プログラム(つまり、TRIGGER_DEFINE、TRIGGER_AFTER_UPDATE、TRIGGER_BEFORE_UPDATEのいずれかのプログラム、またはTRIGGERコマンドを使用してトリガー・プログラムとして指定された任意のプログラム)を実行するイベント、サブイベント、オブジェクトまたはアナリティック・ワークスペースの名前のいずれかを検索するファンクションです。

現行のプログラムがトリガー・プログラムの場合、TRIGGERファンクションはプログラムのトリガー情報を返します。そうでない場合、TRIGGERファンクションは、最後に実行されたトリガー・プログラムのトリガー情報を返します。

関連項目:
「トリガー・プログラム」および「TRIGGERコマンド」

戻り値

TEXT

構文

TRIGGER (NAME | EVENT | SUBEVENT)

パラメータ

NAME

TRIGGERコマンドを使用してトリガー・プログラムとして指定したプログラムの場合は、トリガー・プログラムと関連付けられているオブジェクトを返します。TRIGGER_AW、TRIGGER_DEFINE、TRIGGER_AFTER_UPDATE、TRIGGER_BEFORE_UPDATEのいずれかのプログラムの場合は、プログラムを実行するアナリティック・ワークスペースの名前を返します。

EVENT

プログラムの実行をトリガーしたイベント(DML文)の名前を返します。

AW

MAINTAIN

DELETE

DEFINE

PROPERTY

ASSIGN

BEFORE_UPDATE

AFTER_UPDATE

関連項目:
イベントの詳細は、「トリガー・プログラム」および「TRIGGERコマンド」を参照してください。

SUBEVENT
EVENTからの戻り値がMAINTAIN、AFTER_UPDATEまたはBEFORE_UPDATEの場合は、プログラムの実行をトリガーしたOLAP DML文の詳細な情報を返します。AWの有効なサブイベントについては、表8-18「AWイベントのサブイベント」で説明しています。MAINTAINの有効なサブイベントについては、表8-19「MAINTAINイベントのサブイベント」で説明しています。UPDATEの有効なサブイベントについては、表8-20「UPDATEイベントのサブイベント」で説明しています。

表8-18 AWイベントのサブイベント

サブイベント

説明

CREATE

AW CREATE文がプログラムの実行をトリガーすると返される。

ATTACH

AW ATTACH文がプログラムの実行をトリガーすると返される。

DELETE

AW DELETE文がプログラムの実行をトリガーすると返される。

DETACH

AW DETACH文がプログラムの実行をトリガーすると返される。

表8-19 MAINTAINイベントのサブイベント

サブイベント

説明

ADD

MAINTAIN ADD文がプログラムの実行をトリガーすると返される。

DELETE

MAINTAIN DELETE ALL文を除く任意のMAINTAIN DELETE文がプログラムの実行をトリガーすると返される。

DELETE ALL

MAINTAIN DELETE ALL文がプログラムの実行をトリガーすると返される。

MERGE

MAINTAIN MERGE文がプログラムの実行をトリガーすると返される。

MOVE

MAINTAIN MOVE文がプログラムの実行をトリガーすると返される。

RENAME

MAINTAIN RENAME文がプログラムの実行をトリガーすると返される。

表8-20 UPDATEイベントのサブイベント

サブイベント

説明

AW

UPDATEコマンドがTRIGGER_AFTER_UPDATEプログラムまたはTRIGGER_BEFORE_UPDATEプログラムの実行をトリガーすると返される。

MULTI

オブジェクトをマルチライタ・モードで取得したときに、TRIGGERコマンドを使用してトリガー・プログラムとして指定したプログラムの実行をUPDATEコマンドがトリガーすると返される。

例

TRIGGERファンクションの使用例は、例6-3「TRIGGER_BEFORE_UPDATEプログラム」および例10-166「Assignトリガーを使用した代替値の代入」を参照してください。

TRIM

TRIMファンクションを使用すると、先行または後続文字(あるいはその両方)を文字列から削除できます。

先行文字を削除するにはLTRIMを、後続文字を削除するにはRTRIMを使用する方法もあります。

戻り値

削除元となる文字列(trim-source)のデータ型

構文

TRIM ([{{LEADING|TRAILING|BOTH} [trim_characters])|trim_character} FROM] trim_source)

パラメータ

trim-characters

削除の対象とする文字値を指定する式。このテキスト式のデータ型は、任意のテキスト・データ型にできます。

trim-charactersに複数の文字を指定すると、trim_sourceの各文字が順に検索され、trim_sourceにあるがtrim-charactersにはない文字が出現するまでtrim_sourceから文字が削除されます。

値を指定しなかった場合、デフォルト値は空白となり、先行および後続の空白が削除されます。

LEADING

trim_charactersと等しいすべての先行文字をtrim_sourceから削除することを指定します。

TRAILING

trim_charactersと等しいすべての後続の文字をtrim_sourceから削除することを指定します。

BOTH

trim_charactersと等しいすべての先行および後続の文字をtrim_sourceから削除することを指定します。

trim-source

削除の対象とする文字列値を表す式。このテキスト式のデータ型は、任意のテキスト・データ型にできます。

TRUNCATE

TRUNCATEファンクション(省略形TRUNC)は、数値または日時値の切捨てを行うファンクションです。TRUNCファンクションの構文は、その対象が数値または日時の値のどちらであるかに応じて異なるため、次のように2つに分けて説明します。

- TRUNCATE(日時)

- TRUNCATE(数値)

TRUNCATE(日時)

TRUNCATE(日時)ファンクションは、時間部分を伴う日付を書式モデルで指定された単位に切り捨てた値を返します。

戻り値

DATETIME

構文

TRUNC (datetime_exp, [fmt])

パラメータ

datetime-exp

日時の数値を指定する日時式。

fmt

表8-13「ROUNDおよびTRUNC日付ファンクションの日時書式テンプレート」に示す書式モデルを指定するテキスト式。書式モデルは、日時の値をどのように切り捨てるかを示します。fmtを省略した場合、dateは最も近い日付に切り捨てられます。

例

例8-152 最も近い年への切捨て

NLS_DATE_FORMATオプションの値がDD-MON-YYの場合、次の文を発行します。

SHOW TRUNC (TO_DATE('27-OCT-92'),'YEAR')

次の値が返されます。

01-JAN-92

例8-153 様々な書式での切捨て

次のオプション値、変数および値がアナリティック・ワークスペースにあるとします。

SHOW NLS_DATE_FORMAT
DD-MON-RR
DEFINE MYDATETIME VARIABLE DATETIME
DATE_FORMAT = 'MON-RRRR-DD-HH24'
mydatetime = CURRENT_TIMESTAMP
SHOW mydatetime
= 'AUG-2006-07-14'

次のSHOW文が示すように、TRUNCATEファンクションの書式引数に指定する値に応じて、ファンクションから返される値が決まります。

SHOW TRUNCATE(mydatetime, 'MON')
01-AUG-06
SHOW TRUNCATE(mydatetime, 'DD')
07-AUG-06
SHOW TRUNCATE(mydatetime)
= 'AUG-2006-07-00'

TRUNCATE(数値)

数値を引数として指定すると、TRUNCATEファンクションは、指定された小数点以下の桁数に数値を切り捨てます。

戻り値

DECIMAL

構文

TRUNC (number, truncvalue)

パラメータ

number

切捨ての対象となる数値。numberに指定した値の後には、カンマを付ける必要があります。

truncvalue

numberが切り捨てられる、小数点の右側または左側の桁数を指定するINTEGER値。truncvalueが正の値の場合は、小数点の右側の桁が切り捨てられます。負の値の場合は、小数点の左側の桁が切り捨てられます(つまり、ゼロになります)。truncvalueを省略すると、numberの小数点以下の桁数は0桁に切り捨てられます。

例

例8-154 小数点の右側の切捨て

次の文

SHOW TRUNC (15.79, 1)

によって、次の値が返されます。

15.7

例8-155 小数点の左側の切捨て

次の文

SHOW TRUNC (15.79, -1)

によって、次の値が返されます。

10

TZ_OFFSET

TZ_OFFSETファンクションは、文が実行される日付に基づいて引数に対応するタイムゾーン・オフセットを返します。

注意:
夏時間機能には、タイムゾーン地域名が必要です。地域名は、2つのタイムゾーン・ファイルに格納されます。デフォルトのタイムゾーン・ファイルは、パフォーマンスを最大にするために一般的なタイムゾーンのみを含む小さなファイルです。タイムゾーンがデフォルトのファイルに存在しない場合は、環境変数ORA_TZFILEを使用して完全な(大きい)ファイルへのパスを指定しないかぎり、夏時間はサポートされません。

戻り値

オフセットを表す次の形式のテキスト値

'{ + | - } hh : mi'

構文

TZ_OFFSET( 'time_zone_name' | '{ + | - } hh : mi' | SESSIONTIMEZONE | DBTMEZONE)

パラメータ

time_zone_name

有効なタイムゾーン名を指定するテキスト値。time_zone_nameの有効な値のリストについては、V$TIMEZONE_NAMES動的パフォーマンス・ビューのTZNAME列を問い合せてください。

注意:
夏時間機能には、タイムゾーン地域名が必要です。地域名は、2つのタイムゾーン・ファイルに格納されます。デフォルトのタイムゾーン・ファイルは、パフォーマンスを最大にするために一般的なタイムゾーンのみを含む小さなファイルです。タイムゾーンがデフォルトのファイルに存在しない場合は、環境変数ORA_TZFILEを使用して完全な(大きい)ファイルへのパスを指定しないかぎり、夏時間はサポートされません。

{ + | - } hh : mi'

単純に自身を返すUTCからのタイムゾーン・オフセットを指定します。

SESSIONTIMEZONE

現行セッションのタイムゾーンを指定します。

DBTIMEZONE

データベースのタイムゾーンの値を指定します。

UNIQUELINES

UNIQUELINESファンクションは、複数行のテキスト値に存在する重複行を削除し、行を昇順にソートするファンクションです。このファンクションの戻り値は、結果として得られる行で構成される複数行のテキスト値です。

戻り値

TEXTまたはNTEXT

構文

UNIQUELINES(text-expression)

パラメータ

text-expression

UNIQUELINESが重複行を削除して、残りの行をソートする対象の複数行のテキスト式。UNIQUELINESは、重複を調べるときと空白を含むすべての文字を比較するときに、大文字と小文字を区別します。

TEXT式を指定すると、戻り値はTEXTです。NTEXT式を指定すると、戻り値はNTEXTです。

例

例8-156 重複するテキスト行の削除

次の例では、officelistの値から1行が削除され、残りの行がソートされます。

次の文

SHOW officelist

によって、次の出力が生成されます。

MIAMI
Providence
Miami
Baltimore
Saratoga
Baltimore

次の文

show uniquelines(officelist)

によって、次の出力が生成されます。

Baltimore
Miami
MIAMI
Providence
Saratoga

UNRAVEL

UNRAVELファンクションは、代入文と組み合せて使用し、式のディメンションが変数のディメンションと異なる場合に、式の値を変数のセルにコピーするファンクションです。

代入文を使用して作成した代入文は、ターゲット変数のディメンション・ステータスをループ処理することにより、UNRAVELから取得した値を代入します。変数の定義にリストされている最初のディメンションは、最も速く変化します。UNRAVELは、式の値を同じように取得し、最も速く変化する最初のディメンションを持つ式のディメンション・ステータスをループ処理します。UNRAVELによる値の取得順序を変更するには、ループ処理の対象となるディメンションを指定します。

戻り値

UNRAVELから返されるデータ型は、式で指定された値のデータ型になります。

構文

UNRAVEL(expression [dimension1...])

パラメータ

expression

コピーの対象となる値が属している式。

dimension

ループ処理の対象となる1つ以上のディメンションを指定します。最初に指定したディメンションは、データが解読されると、最も速く変化します。

UNRAVELでディメンションを指定すると、デフォルトのループ処理順序や式を解読する範囲が変更されます。デフォルトでは、式のすべてのディメンションが解読の範囲です。ただし、式のすべてのディメンションではなく一部を指定した場合、指定しなかったディメンションは解読されません。そのかわりに、解読される値は、省略した各ディメンションの最初の値のみになります。

使用上の注意

ワークシート・データの移動

UNRAVELの一般的な用途の1つは、ワークシートから変数へのデータの移動で、これは、ワークシートのディメンションは、通常、変数のディメンションとは異なるためです。例8-157「ワークシートから変数へのデータのコピー」を参照してください。

追加のターゲット・セルの埋込み

代入文が式の最後の値を使用した後に、(この代入文を使用して作成した)埋込みを目的とする代入文のターゲットにセルが残っている場合、UNRAVELは最初の値から埋込みをやり直します。

ステータスの設定

解読した値を代入する順序は、変数と式の両方のディメンションの現行のステータスによって決まるため、セルが適合するように、適切なLIMITコマンドを指定していることを確認してください。

データ値の代入

データ値の代入方法は、SETを参照してください。

例

例8-157 ワークシートから変数へのデータのコピー

あるアナリティック・ワークスペースで、一部の製品の価格データをスプレッドシートからワークシートにインポートしました。ここで、newpriceという変数にデータを送信します。pricedataというワークシートのレポートを生成するには、次の文を発行します。

LIMIT wksrow TO 1 TO 6
LIMIT wkscol TO 1 2 3
REPORT pricedata

これが生成されたレポートです。

-----------PRICEDATA------------
-------------WKSCOL-------------
WKSROW             1          2          3
-------------- ---------- ---------- ----------
1            Jan95      Jan96
2 Tents          191.39     194.00
3 Canoes         279.92     300.00
4 Racquets        83.34      85.00
5 Sportswear     107.90     110.00
6 Footwear       183.18     195.00

行1には月のラベルが、列1には製品のラベルがそれぞれ入っていることがわかります。変数newpriceは、その定義に示すように、monthおよびproductによってディメンション化されています。

DEFINE newprice VARIABLE DECIMAL <month product>
LD Wholesale Unit Selling Price

ワークシートのディメンション(wkscolおよびwksrow)はnewpriceのディメンションとは異なりますが、ワークシートに格納されているデータは変数への転送に適した形に編成されています。

ただし、ワークシートのすべての行および列からデータを取得するわけではないため、wkscolおよびwksrowを、価格データ自体が格納されている行と列に制限します。

LIMIT wkscol TO 2 3
LIMIT wksrow TO 2 TO 6

また、変数newpriceに値を設定するのは、1995年1月と1996年1月のみです。したがって、まずmonthをこれらの値に制限してから、UNRAVELを使用して代入文を入力し、ワークシートから変数へ値を移動します。

LIMIT month TO 'Jan95' 'Jan96'
newprice = UNRAVEL(pricedata)

wkscolは最も変化の速いディメンションであるため、UNRAVELファンクションのディメンションを指定する必要はありません。したがって、2つの月とも、最初の製品の価格データを解読してから2番目の製品に移ります。この変数の最も変化の速いディメンションはmonthであるため、SETによって変数に代入される値の順序は同じになります。

newpriceのレポートは次のようになります。

------NEWPRICE-------
--------MONTH--------
PRODUCT          Jan95      Jan96
-------------- ---------- ----------
Tents              191.39     194.00
Canoes             279.92     300.00
Racquets            83.34      85.00
Sportswear         107.90     110.00
Footwear           183.18     195.00

UPPER

UPCASEファンクションは、テキスト式に存在するすべてのアルファベット文字を大文字に変換するファンクションです。TEXT式を指定すると、戻り値はTEXTです。NTEXT式を指定すると、戻り値はNTEXTです。

戻り値

TEXTまたはNTEXT

構文

UPCASE(text-expression)

パラメータ

text-expression

変換の対象となる文字が存在するテキスト式。

例

例8-158 テキスト式の一部の大文字への変換

メーリング・リストに追加する新しいデータをいくつか入手したとします。既存のメーリング・リストでは、氏名の最初の文字を大文字にしています。ところが新しいデータでは、名前全体が小文字になっています。UPCASEを使用すると、次のような文により、新しいデータを現行のデータに対応させることができます。

lastname = JOINCHARS(UPCASE(EXTCHARS(lastname, 1, 1)), -
EXTCHARS(lastname, 2, NUMCHARS(lastname)))

UPPER

UPPERファンクションは、テキスト式に存在するすべてのアルファベット文字を大文字に変換するファンクションです。

戻り値

text-expressionのデータ型。

関連項目:
『Oracle Database SQL言語リファレンス』のUPPERファンクションに関する項

構文

UPPER(text-expression)

パラメータ

text-expression

変換の対象となる文字が存在するテキスト式。

VALSPERPAGE

VALSPERPAGEプログラムは、1つのページに収まる指定の幅を持つ変数値の最大数を計算するプログラムです。ページとは、ワークスペース内の格納単位です。

戻り値

INTEGER

構文

VALSPERPAGE(n)

パラメータ

n

変数の幅をバイト単位で指定するINTEGER式。この値の範囲は1から4000の間です。4000を超える値や1未満の値を指定すると、結果はNAになります。

使用上の注意

大きい変数

Oracle OLAPを使用すると、非常に大きい多次元変数を作成できます。理論上、変数には2**63セルまで格納できますが、この最大値はメモリー制約やシステムに固有のその他の要因の影響を受けます。

例

例8-159 1ページのセルの数の計算

次の文を実行すると、INTEGERデータ型の変数について、1ページで利用できるセルの最大数が計算されます。Oracle OLAPでは、INTEGER値のデフォルトの幅は4バイトです。

SHOW VALSPERPAGE(4)

この文の出力は次のとおりです。

992

VALUES

VALUESファンクションは、ディメンションやディメンション・サロゲートのデフォルトのステータス・リストまたは現行のステータス・リストを返すか、または値セットの値を返すファンクションです。VALUESは、1行に1つのディメンション値が格納された複数行のテキスト値を返します。

注意:
コンポジットにはステータスがないため、VALUESファンクションとコンポジットを組み合せて使用することはできません。使用した場合、エラー・メッセージが表示されます。

戻り値

TEXT

構文

VALUES(dimension [keyword] [INTEGER])

パラメータ

dimension

値がディメンション、ディメンション・サロゲートまたは値セットの名前であるテキスト式。

keyword

ディメンションまたはサロゲートの現行のステータス・リストまたはデフォルトのステータス・リストが必要かどうかを指定する、次のいずれかのキーワード。

- NOSTATUS: VALUESから返されるリストが、ディメンションまたはディメンション・サロゲートの現行のステータス・リストではなく、デフォルトのステータス・リストであることを指定します。

- STATUS: VALUESから返されるリストが、ディメンションまたはディメンション・サロゲートの現行のステータス・リストであることを指定します(デフォルト)。

これらのキーワードは値セットには影響しません。値セットの場合は、NOSTATUSとSTATUSのいずれかを指定しても、あるいは何も指定しなくても、この値セットのすべての値がVALUESから返されます。

INTEGER

INTEGERキーワードを使用すると、このファンクションからは、ディメンション値またはディメンション・サロゲート値ではなく、その位置番号が返されます。INTEGERと値セットを組み合せて使用すると、このファンクションからは、値セットではなく既存のディメンションでの値の位置番号が返されます。

使用上の注意

VALUESにかわる、STATUSキーワードを使用するLIMIT文の使用

Oracle OLAPで現在ステータス内にあるディメンション値を使用する場合、可能であれば、VALUES文を使用するのではなく、STATUSキーワードを使用するLIMITコマンド(値を使用)(または、同様の構成を持つLIMITファンクション)を使用してください。STATUSキーワードを使用するLIMITは、VALUES(dimname)文よりも効率的です。

VALUESとCHARLISTの比較

VALUESファンクションはCHARLISTファンクションと非常に似ています。VALUES(MONTH)ではCHARLIST(MONTH)と同じリストが返されます。

主な相違点は次のとおりです。

- ディメンションの場合、VALUESのNOSTATUSキーワードを指定すると、最初にディメンション値をALLに制限することなく、デフォルトのステータスが使用できます。

- VALUESファンクションを使用すると、テキスト式を使用してディメンション名または値セット名を指定できます。例8-162「テキスト変数とともに使用するVALUES」を参照してください。

アンパサンド(&)に関する特別な注意事項

特定の環境では、ディメンション値の名前にアンパサンド(&)を使用すると、アンパサンド置換と解釈されます。この場合、エラー・メッセージが表示されます。

これは、テキスト式のタプルに特殊文字を使用すると、ディメンション値の名前に含まれる特殊文字がOracle OLAPに認識されるからです。たとえば、ディメンション値に名前を付ける場合などに、NewYorkではなくNew Yorkのように空白を挿入できます。名前にアンパサンドが含まれるディメンション値がある場合は、例8-163「アンパサンドを含むディメンション値の名前に関する回避策」を参照してください。

例

例8-160 値セットの値の表示

値セットの値を表示する方法として最も簡単なのは、SHOWまたはREPORT文でその値セットの名前を使用することです。また、VALUESを使用して値セットの値を表示することもできます。

たとえば、アナリティック・ワークスペースに、値Jan95、May95およびDec95を持つmonthsetという値セットが格納されているとします。次の文によって、これらの値が表示されます。

SHOW VALUES(monthset)
Jan95
May95
Dec95

例8-161 ディメンションの位置番号の表示

VALUESを使用すると、ディメンションまたは値セットに存在する実際の値のかわりに、その位置番号を表示できます。この例では、INTEGERキーワードをディメンションではなく値セットとともに使用しているため、次に示すように、ファンクションからは、monthディメンションでの値の位置番号が返されます。

SHOW VALUES(monthset INTEGER)
61
65
72

したがって、値Jan95はmonthディメンションの61番目の値として、May95は65番目の値として、Dec95は72番目の値として表示されますが、これらはmonthsetでは、それぞれ1番目、2番目、3番目の値になります。

例8-162 テキスト変数とともに使用するVALUES

この例では、ディメンション名をテキスト変数に割り当てて、変数名自体ではなくVALUESファンクションのテキスト変数を使用する方法を示します。次に示すように、変数textvarに値districtが存在する場合、VALUES(textvar)の戻り値はdistrict値のリストになります。

textvar = 'district'
SHOW VALUES(textvar)
Boston
Atlanta
Chicago
Dallas
Denver
Seattle

VALUESファンクションではなくCHARLISTファンクションを使用してdistrictの値を表示するには、アンパサンドを使用する必要があります。

SHOW CHARLIST(&textvar)

プログラムにアンパサンドを使用するとパフォーマンスが低下する可能性があるため、このような場合はCHARLISTではなくVALUESを使用してください。

例8-163 アンパサンドを含むディメンション値の名前に関する回避策

ディメンション値の名前の文字としてアンパサンド(&)が含まれる場合、およびこのディメンションが結合ディメンションのベース・ディメンションである場合、タプルにディメンション値の名前が記述されているテキスト式は、特定の環境でエラーが発生する可能性があります。この例では、このようなエラーを回避する方法を示します。

次の文を使用して2つのディメンションを定義するとします。

DEFINE prod DIMENSION TEXT
DEFINE geog DIMENSION TEXT

次に、次の文を使用して2つの結合ディメンションを定義します。

DEFINE conj1 DIMENSION <prod geog>
DEFINE conj2 DIMENSION <prod geog>

次の文を実行すると、prodディメンションとgeogディメンションにディメンション値が追加されます。

MAINTAIN prod ADD 'prod1' 'prod&val2'
MAINTAIN geog ADD 'geog1' 'geog&val2'

次の文を実行すると、CONJ1結合ディメンションにタプル(ディメンション値の組合せ)が追加されます。

MAINTAIN conj1 ADD <'prod1' 'geog1'>
MAINTAIN conj1 ADD <'prod&val2' 'geog1'>

今度は、VALUEファンクションとMAINTAIN文を組み合せて使用し、前出の同じタプルをconj2結合ディメンションに追加します。次の文を使用しようとすると、エラー・メッセージが表示されます。

MAINTAIN conj2 ADD VALUES(conj1)
ERROR: (MXMSERR) val2 does not exist in any attached workspace.

このエラーが発生する理由は、ディメンション値の名前prod&val2のアンパサンドが、アンパサンド置換と解釈されるからです。

前出のMAINTAIN文を使用するかわりに、次の文を使用してタプルをCONJ2結合ディメンションに追加できます。

MAINTAIN conj2 MERGE < KEY(conj1 prod) KEY(conj1 geog) >

VINTSCHED

VINTSCHEDファンクションは、指定した期間数で全額返済する一連の変動金利分割払い融資に関する支払いの金利の部分を計算するファンクションです。VINTSCHEDは、特定の期間の結果を、その期間に受けた融資または未払いの融資ごとに、支払い期限に到達した金利の合計として計算します。期間ごとに、該当期間に受ける融資の初期金額と、新規の融資または未払いの融資ごとに該当期間内に請求される金利を指定します。

戻り値

DECIMAL

VINTSCHEDファンクションから返された結果は、loansおよびratesのすべてのディメンションと、time-dimension引数として使用したディメンションの結合によってディメンション化されます。

構文

VINTSCHED(loans, rates, n, [time-dimension] [STATUS])

パラメータ

loans

初期融資額を含む数式。loansに時間ディメンションがない場合、またはloansが複数の時間ディメンションによってディメンション化されている場合、time-dimension引数が必要です。

rates

loansに対する金利を含む数式。ratesがディメンション化された変数の場合、この変数は、異なる時間ディメンションなどの任意のディメンションによってディメンション化できます。ratesが時間ディメンションによってディメンション化されている場合は、該当期間に受けた融資または未払いの融資に適用する期間ごとに金利を指定します。金利は小数値で表し、たとえば、5%は.05として表します。

n

一連の融資の全額返済に必要な支払い回数を指定する数式。n式はディメンション化できますが、時間ディメンション引数でディメンション化することはできません。loansがディメンション化される時間ディメンションの各期間に、またはtime-dimension引数で指定されるディメンションの各期間に、1回の支払いが行われます。たとえば、1か月に1回の支払いは、loansをmonthでディメンション化すると実行されます。

time-dimension

金利支払い額が計算される基準になるディメンションの名前。loansに、DAY、WEEK、MONTH、QUARTER、YEARのいずれかの型のディメンションが存在する場合は、loansにこれらの型のディメンションが複数存在しないかぎり、time-dimension引数はオプションになります。

STATUS

VINTSCHEDが支払いの金利部分を計算する際に、現行のステータス・リスト(つまり現在ステータスにあり、現行のステータスの順序に並んでいるディメンション値のみ)を使用することを指定します。デフォルトでは、デフォルトのステータス・リストが使用されます。

使用上の注意

VINTSCHEDとNA値

loansの値がNA以外の値で、対応するratesの値がNAの場合、エラーが発生します。

VINTSCHEDはNASKIPオプションの影響を受けます。NASKIPをYES(デフォルト)に設定し、影響を受ける期間の融資の値がNAの場合、VINTSCHEDからの戻り値は、対応する金利の値がNAか非NAかによって異なります。表8-21「特定期間の融資または金利の値がNAの場合のNASKIPによる結果への影響」は、特定の期間の融資または金利の値がNAの場合、NASKIPが結果にどのように影響するかを示しています。

表8-21 特定期間の融資または金利の値がNAの場合のNASKIPによる結果への影響

融資の値

金利の値

NASKIP = YESの場合の結果

NASKIP = NOの場合の結果

非NA

NA

エラー

エラー

NA

非NA

金利の値(融資の値NAはゼロとして処理される)

影響を受ける期間に対してNA

NA

NA

影響を受ける期間に対してNA

影響を受ける期間に対してNA

たとえば、融資額の式と対応する金利の式の両方の値が1997年に対してNAであり、その後の年に対してNA以外であるとします。支払い回数が3回の場合、1997年、1996年および1995年のVINTSCHEDからの戻り値はNAになります。1997年の場合、VINTSCHEDは、1995年、1996年および1997年に受けた融資の支払い期限に到達した支払いの金利の部分を値として返します。

時間ディメンションのステータスの影響を受けないVINTSCHED

VINTSCHEDでは、時間ディメンションのステータスがどのように制限されているかにかかわらず、時間ディメンションの最初の値から計算を開始します。たとえば、loansはyearによってディメンション化されており、yearの値の範囲はYr95からYr99までの間であるとします。yearのステータスを制限してYr95を対象外にしている場合でも、計算は必ずYr95から開始されます。

ただし、loansが時間ディメンションによってディメンション化されていない場合は、VINTSCHEDによって、時間ディメンションの現行のステータスの最初の値から計算が開始されます。たとえば、loansはyearによってディメンション化されていないが、yearがtime-dimensionとして指定されているとします。yearのステータスがYr97からYr99までに制限されると、計算はYr95からではなくYr97から開始されます。

例

例8-164 VINTSCHEDの使用方法

次の文を実行すると、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.07
Yr99                 0.00       0.07

各年のloansには、その年に受ける変動金利融資の初期値が格納されます。各年のratesの値は、その年に受ける融資または未払いの融資に対する、その年に請求される金利です。

次の文を実行すると、各融資の返済が3回払いと指定され、融資の支払いの金利の部分が計算されます。

REPORT W 20 HEADING 'Payment' VINTSCHED(loans, rates, 3, year)

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

YEAR                        Payment
-------------- --------------------
Yr95                           5.00
Yr96                          16.10
Yr97                          33.06
Yr98                          19.43
Yr99                           7.48

1995年に支払う金利は、1995年に5%の金利で融資を受けた$100に対する金利です。1996年の金利支払いは、1995年に受けた融資の元金の支払い残高に対する金利と、1996年に受けた$200の融資に対する金利の合計になり、この2つの融資に対する金利は6%です。1997年の金利支払いは、1995年に受けた融資の元金の支払い残高に対する金利、1996年に受けた融資の元金の支払い残高に対する金利、さらに1997年に受けた$300の融資に対する金利の合計になり、この3つすべての融資に対する金利は7%です。1995年の融資は1997年に全額返済されるので、1998年の支払いは、1996年と1997年の融資の元金の支払い残高に対する7%の金利に相当します。1999年には、金利支払いの対象は1997年に受けた融資の元金の支払い残高になります。

VPMTSCHED

VPMTSCHEDファンクションは、一連の変動金利分割払い融資を指定した期間数にわたって全額返済するための返済スケジュール(元金および金利)を計算するファンクションです。VPMTSCHEDは、特定の期間の支払い額を、その期間に受けた融資または未払いの融資ごとに、支払い期限に到達した元金と金利の合計として計算します。期間ごとに、該当期間に受ける融資の初期金額と、新規の融資または未払いの融資ごとに該当期間内に請求される金利を指定します。

戻り値

DECIMAL

VPMTSCHEDファンクションから返された結果は、loansおよびratesのすべてのディメンションと、time-dimension引数として使用したディメンションの結合によってディメンション化されます。

構文

VPMTSCHED(loans, rates, n, [time-dimension] [STATUS])

パラメータ

loans

初期融資額を含む数式。loansに時間ディメンションがない場合、またはloansが複数の時間ディメンションによってディメンション化されている場合、time-dimension引数が必要です。

rates

loansに対する金利を含む数式。ratesがディメンション化された変数の場合、この変数は、異なる時間ディメンションなどの任意のディメンションによってディメンション化できます。ratesが時間ディメンションによってディメンション化されている場合は、該当期間に受けた融資または未払いの融資に適用する期間ごとに金利を指定します。金利は小数値で表し、たとえば、5%は.05として表します。

n

一連の融資の全額返済に必要な支払い回数を指定する数式。n式はディメンション化できますが、時間ディメンション引数でディメンション化することはできません。loansがディメンション化される時間ディメンションの各期間に、またはtime-dimension引数で指定されるディメンションの各期間に、1回の支払いが行われます。たとえば、1か月に1回の支払いは、loansをmonthでディメンション化すると実行されます。

time-dimension

金利支払い額が計算される基準になるディメンションの名前。loansに、DAY、WEEK、MONTH、QUARTER、YEARのいずれかの型のディメンションが存在する場合は、loansにこの型のディメンションが複数存在しないかぎり、time-dimension引数はオプションになります。

STATUS

VPMTSCHEDが支払いスケジュールを計算する際に、現行のステータス・リスト(つまり現在ステータスにあり、現行のステータスの順序に並んでいるディメンション値のみ)を使用することを指定します。デフォルトでは、デフォルトのステータス・リストが使用されます。

使用上の注意

VPMTSCHEDとNA値

loansの値がNA以外の値で、対応するratesの値がNAの場合、エラーが発生します。

VPMTSCHEDはNASKIPオプションの影響を受けます。NASKIPをYES(デフォルト)に設定し、影響を受ける期間の融資の値がNAの場合、VPMTSCHEDからの戻り値は、対応する金利の値がNAか非NAかによって異なります。表8-21「特定期間の融資または金利の値がNAの場合のNASKIPによる結果への影響」は、特定の期間の融資または金利の値がNAの場合、NASKIPが結果にどのように影響するかを示しています。

たとえば、融資額の式と対応する金利の式の両方の値が1994年に対してNAであり、その後の年に対してNA以外であるとします。支払い回数が3回の場合、1994年、1995年および1996年のVPMTSCHEDからの戻り値はNAになります。1997年の場合、VPMTSCHEDは、1995年、1996年および1997年に受けた融資の支払い期限に到達した支払い額を返します。

時間ディメンションのステータスの影響を受けないVPTMPTSCHED

VPMTSCHEDでは、時間ディメンションのステータスがどのように制限されているかにかかわらず、時間ディメンションの最初の値から計算を開始します。たとえば、loansはyearによってディメンション化されており、yearの値の範囲はYr95からYr99までの間であるとします。yearのステータスを制限してYr95を対象外にしている場合でも、計算は必ずYr95から開始されます。

ただし、loansが時間ディメンションによってディメンション化されていない場合は、VPMTSCHEDによって、時間ディメンションの現行のステータスの最初の値から計算が開始されます。たとえば、loansはyearによってディメンション化されていないが、yearがtime-dimensionとして指定されているとします。yearのステータスがYr97からYr99までに制限されると、計算はYr95からではなくYr97から開始されます。

例

例8-165 VPMTSCHEDの使用方法

次の文を実行すると、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.07
Yr99                 0.00       0.07

各年のloansには、その年に受ける変動金利融資の初期値が格納されます。各年のratesの値は、その年に受ける融資または未払いの融資に対する、その年に請求される金利です。

次の文を実行すると、各融資の返済が3回払いと指定され、融資の元金と金利を全額返済する返済スケジュールが計算されます。

REPORT W 20 HEADING 'Payment' VPMTSCHED(loans, rates, 3, year)

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

YEAR                        Payment
-------------- --------------------
Yr95                          36.72
Yr96                         112.06
Yr97                         227.78
Yr98                         190.19
Yr99                         114.32

1995年の支払い額は、1995年に受けた$100の融資のうち支払い期限に到達した元金と、この融資に対する5パーセントの金利の合計額です。1996年が期限の支払い額は、1995年に受けた融資の元金の2回目の支払い額、1996年に受けた$200の融資の元金の1回目の支払い額、さらにこの2つの融資の元金の支払い残高に対する6パーセントの金利の合計になります。1997年の支払い額は、1995年に受けた融資の元金の3回目(最終回)の支払い額、1996年に受けた融資の3回中2回目の元金の支払い額、1997年に受けた$300の融資の元金の1回目の支払い額、さらにこの3つの融資の元金の支払い残高に対する7パーセントの金利の合計になります。1995年の融資は1997年に全額返済されるので、1998年の支払いは、1996年と1997年の融資の元金と金利が対象になります。1999年の支払いは、1997年の融資に対する元金および金利の最後の支払いです。

VSIZE

VSIZEファンクションは、式の内部表現のバイト数を返します。

戻り値

INTEGER

exprがNULLの場合、NAが返されます。

構文

VSIZE(expr)

パラメータ

expr

任意のデータ型の式。

WEEKOF

WEEKOFファンクションは、指定した日付が含まれる週番号を示す、1から53までの範囲のINTEGERを返すファンクションです。結果は、指定したDATE式と同じディメンションを持ちます。

戻り値

INTEGER

構文

WEEKOF(date-expression)

パラメータ

date-expression

DATEデータ型の式、または日付を指定するテキスト式。テキスト式の値は自動的にDATE値へ変換され、指定した値が不明瞭な場合は、DATEORDERオプションの現行の設定を使用して値が解決されます。

使用上の注意

第1週の決定

WEEKDAYSNEWYEARの値は、WEEKOFが示す週を新しい年の第1週とみなすために、この週に含まれる必要がある新しい年の日数を表します。たとえば、1月1日が水曜日の場合、12月29日から1月4日までの週には、新しい年に含まれる日数が4日間あります。したがって、この週を第1週と数えるためには、WEEKDAYSNEWYEARの値を4以下にする必要があります。第1週をこのように決定すると、この年のすべての週の番号付けに影響します。

例

例8-166 今日の週番号の検索

次の文を実行すると、今日の日付が含まれる週の週番号が現行の出力ファイルに送られます。

SHOW WEEKOF(TODAY)

たとえば、今日の日付が1996年8月5日の月曜日の場合、この文によって生成される出力は次のとおりです。

32

例8-167 特定の日付の週番号の検索

次の文を実行すると、1996年7月4日が含まれる週の週番号が現行の出力ファイルに送られます。

SHOW WEEKOF('04JUL96')

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

27

WIDTH_BUCKET

WIDTH_BUCKETファンクションは、ある特定の式について、この式の値が評価後に式に割り当てられるバケット番号を返すファンクションです。

戻り値

INTEGER

構文

WIDTH_BUCKET (expr , min_value , max_value , num_buckets)

パラメータ

expr

ヒストグラムの作成対象となる式。この式は、数値または日時の値に評価される必要があります。exprがNAに評価される場合、式の戻り値はNAになります。

min_value

exprの許容範囲の最小の端点に解決される式。この式は、数値または日時の値に評価される必要があり、NAに評価されることはできません。

max_value

exprの許容範囲の最大の端点に解決される式。この式は、数値または日時の値に評価される必要があり、NAに評価されることはできません。

num_buckets

バケットの数を示す定数に解決される式。この式は、正のINTEGERに評価される必要があります。

使用上の注意

アンダーフロー・バケットとオーバーフロー・バケット

WIDTH_BUCKETは、(必要に応じて)0という番号の付いたアンダーフロー・バケットおよびnum_buckets+1という番号の付いたオーバーフロー・バケットも作成します。これらのバケットではmin_value未満の値やmax_valueを超える値が処理され、端点の妥当性を確認するときに役立ちます。

等幅ヒストグラムの作成

WIDTH_BUCKETを使用すると、ヒストグラムの範囲が同一サイズのインターバルに分割される、等幅ヒストグラムを作成できます。(等度数ヒストグラムを作成するNTILEとこのファンクションを比較してください。)理想的には、各バケットは実数直線のクローズ/オープン・インターバルです。たとえば、バケットを10.00と19.999...の間のスコアに割り当てると、10はこのインターバルに含まれ、20は除外されることを示すことができます。このサイズのバケットは、(10, 20)と表記されることもあります。

例

例8-168 バケットが10個のヒストグラムへの値のグループ化

次の例では、customer_idが825から853までの顧客に制限し、これらの顧客に対応するcredit_limit変数を対象に、バケットが10個のヒストグラムを作成します。各顧客のバケット番号の計算には、credit_group式を使用します。与信限度額が最大値を超える顧客には、オーバーフロー・バケットの11が割り当てられます。

DESCRIBE
DEFINE customer_id DIMENSION INTEGER
DEFINE cust_last_name VARIABLE TEXT <customer_id>
DEFINE credit_limit VARIABLE INTEGER <customer_id>
DEFINE credit_group FORMULA INTEGER <customer_id>
EQ WIDTH_BUCKET(credit_limit, 100, 5000, 10)

LIMIT customer_id to 825 TO 853
REPORT cust_last_name, credit_limit, credit_group

CUSTOMER_ID     CUST_LAST_NAME    CREDIT_LIMIT     CREDIT_GROUP
-------------- ---------------- ---------------- ----------------
825 Dreyfuss                      500                1
826 Barkin                        500                1
827 Siegel                        500                1
828 Minnelli                    2,300                5
829 Hunter                      2,300                5
830 Dutt                        3,500                7
831 Bel Geddes                  3,500                7
832 Spacek                      3,500                7
833 Moranis                     3,500                7
834 Idle                        3,500                7
835 Eastwood                    1,200                3
836 Berenger                    1,200                3
837 Stanton                     1,200                3
838 Nicholson                   3,500                7
839 Johnson                     3,500                7
840 Elliott                     1,400                3
841 Boyer                       1,400                3
842 Stern                       1,400                3
843 Oates                         700                2
844 Julius                        700                2
845 Fawcett                     5,000               11
846 Brando                      5,000               11
847 Streep                      5,000               11
848 Olmos                       1,800                4
849 Kaurusmdki                  1,800                4
850 Finney                      2,300                5
851 Brown                       2,300                5
852 Tanner                      2,300                5
853 Palin                         400                1

WKSDATA

WKSDATAファンクションは、ワークシートの各セルのデータ型や、WORKSHEETデータ型を持つプログラム引数のデータ型を返すファンクションです。WKSDATAを使用すると、テキスト・ファイルとOracle OLAPとの間でのラベルやデータの転送処理に役立ちます。

戻り値

個々のワークシート・セルのデータ型

構文

WKSDATA(worksheetname)

パラメータ

worksheetname

workunitsなど、Oracle OLAP Worksheetオブジェクトの名前を指定します。

使用上の注意

1つ以上のセルの確認

WKSDATAでは、セルの修飾データ参照を次の書式に示すように使用することにより、1つのワークシート・セルのデータ型を返すことができます。

SHOW WKSDATA(worksheetname(WKSROW n, WKSCOL n))

または、次の書式でREPORT文とWKSDATAを組み合せて使用すると、ワークシート内のすべてのセルの内容をそのデータ型と並べて表示できます。

REPORT worksheetname WKSDATA(worksheetname)

複数のデータ型

式にワークシート・オブジェクトを使用するときは、常に注意が必要です。ワークシート・オブジェクトには複数のデータ型を使用できるため、OLAP DML文のコンパイル時には、個々のワークシート・セルの実際のデータ型は考慮されません。そのかわり、式の中のワークシート・セルの位置で予想されるデータ型に各ワークシート・セルを変換するコードが生成されるため、場合によっては予期しない結果につながることがあります。

テキスト・データ

(数値、ブール、日付などとは対照的に)ワークシート内のテキスト・データのデータ型はすべてTEXTです。IDデータ型およびNTEXTデータ型は、ワークシートではサポートされていません。

例

例8-169 ワークシートからインポートしたデータの確認

workunitsというワークシートにフラット・データ・ファイルをインポートしたとします。WKSDATAを使用すると、ワークシートを標準のOLAPワークスペース書式に変換するときに、ディメンション値として処理する領域やデータ値として処理する領域をすばやく判別できます。

次の文を実行すると、workunitsのデータを表示する文の後に次の出力が生成されます。

REPORT workunits

-----------------WORKUNITS-----------------
------------------WKSCOL-------------------
WKSROW             1          2          3          4
-------------- ---------- ---------- ---------- ----------
1         NA Jan96      Feb96      Mar96
2 Tents             307        209        277
3 Canoes            352        411        488
4 Racquets        1,024      1,098      1,144
5 Sportswear      1,141      1,262      1,340
6 Footwear        2,525      2,660      2,728

この文では、WKSDATAファンクションを使用して、ワークシート内の各セルのデータ型を示すレポートを文の後に生成しています。

REPORT WKSDATA(workunits)

------------WKSDATA(WORKUNITS)-------------
------------------WKSCOL-------------------
WKSROW             1          2          3          4
-------------- ---------- ---------- ---------- ----------
1         NA TEXT       TEXT       TEXT
2 TEXT       INTEGER    INTEGER    INTEGER
3 TEXT       INTEGER    INTEGER    INTEGER
4 TEXT       INTEGER    INTEGER    INTEGER
5 TEXT       INTEGER    INTEGER    INTEGER
6 TEXT       INTEGER    INTEGER    INTEGER

WRITABLE

WRITABLEファンクションは、ユーザーがオブジェクトに対するWRITE権限を持っている場合はTRUEを返し、ユーザーがオブジェクトに対するWRITE権限を持っていない場合、およびオブジェクトが変数、ワークシート・オブジェクト、リレーションまたは値セットでない場合はFALSEを返すファンクションです。

戻り値

BOOLEAN

結果は、expressionと同じディメンションを持ちます。

構文

WRITABLE (expression)

パラメータ

expression

値を持つオブジェクト(変数、リレーション、値セットまたはワークシート・オブジェクト)の名前またはQDRを表す式。

YYOF

YYOFファンクションは、指定した日付が含まれる年を示す、1000から9999までの範囲のINTEGERを返すファンクションです。YYOFによって返される結果のディメンションは、指定した日付の式のディメンションと同じです。

戻り値

INTEGER

構文

YYOF(date-expression)

パラメータ

date-expression

DATEデータ型の式、または日付を指定するテキスト式。テキスト式の値は自動的にDATE値へ変換され、指定した値が不明瞭な場合は、DATEORDERオプションの現行の設定を使用して値が解決されます。

使用上の注意

年の値のカンマ

YYOFから返される値を表示するときにCOMMASオプションをYESに設定していると、年の表示が3桁区切りを示すカンマ付きになります(たとえば、1,996)。これを回避するには、年を表示する前にCOMMASオプションをNOに設定します。

例

例8-170 現在の年の取得

次の文を実行すると、今日の日付が含まれる年が現行の出力ファイルに送られます。

COMMAS = NO
SHOW YYOF(TODAY)

たとえば、今日の日付が1996年1月15日の場合、これらの文を実行すると次の出力が生成されます。

1996

9 OLAP DMLコマンド: AからG

この章では、次の項目について説明します。

- OLAP DMLコマンドの概要

- コマンド: アルファベット順

- カテゴリ別のコマンド

- 文字AからGで始まる各OLAP DMLコマンドにつき1つの項目(ACQUIREから説明)

この他のOLAP DMLコマンドについては、第10章「OLAP DMLコマンド: HからZ」でアルファベット順に説明しています。

その他のOLAP DMLリファレンス項目については、第4章「OLAP DMLプロパティ」、第5章「OLAP DMLオプション」、第7章「OLAP DMLファンクション: AからK」および第8章「OLAP DMLファンクション: LからZ」を参照してください。

OLAP DMLコマンドの概要

OLAP DMLコマンドの動作は、他のプログラミング言語のコマンドとほとんど同じです。ただし、OLAP DMLコマンドにはループ特性があります(「すべてのデータ・オブジェクトの値に対するOLAP DML文の適用」を参照)。

多くのOLAP DMLコマンドは、複雑なアクションを実行します。これらのコマンドには、アナリティック・ワークスペースの作成に使用するAWコマンドや、アナリティック・ワークスペース内でのオブジェクトの定義に使用するDEFINEコマンドなどのデータ定義コマンドがあります。その他のOLAP DMLコマンドは、データ操作コマンドです。たとえば、OLAP DML SQLコマンドを使用して、SQL文をOLAP DMLプログラムに埋め込み、リレーショナル表からアナリティック・ワークスペースのデータ・オブジェクトにデータをコピーしたり、AGGREGATEコマンドを使用して、サマリー・データを計算できます。さらに、DEFINE、MAINTAIN、PROPERTY、SET(=)UPDATEおよびAWコマンドは、Oracle OLAPではOLAP DMLプログラムの実行をトリガーするイベントとして認識されます。(詳細は、「トリガー・プログラム」を参照してください。)

ヒント:
OLAP DML文の多くはコーディングの際、文の名前の頭文字および2つの子音字を並べた3文字に省略して表すことができます。

さらに、コマンドとして実行可能なOLAP DMLプログラムを作成することにより、OLAP DMLの機能を強化できます。

コマンド: アルファベット順

A B C D E F G H I L M O P R S T U V W Z

A

ACQUIRE
ACROSS
ADD_CUBE_MODEL
ADD_DIMENSION_MEMBER
ADD_MODEL_DIMENSION
AGGMAP
AGGMAP ADDまたはREMOVEモデル
AGGMAP SET
AGGREGATEコマンド
ALLCOMPILE
ALLOCATE
ALLOCMAP
ALLSTAT
ARGUMENT
AWコマンド
AWDESCRIBE
B

BLANK
BREAK
C

CALL
CDA
CHGDFN
CLEAR
COMMIT
COMPILE
CONSIDER
CONTEXTコマンド
CONTINUE
COPYDFN
CREATE_LOGICAL_MODEL
D

DATE_FORMAT
DBGOUTFILE
DEFINE
DELETE
DESCRIBE
DO ... DOEND
E

EDIT
EQ
EXPORT
F

FCCLOSE
FCEXEC
FCSET
FETCH
FILECLOSE
FILECOPY
FILEDELETE
FILEMOVE
FILEPAGE
FILEPUT
FILEREAD
FILESET
FILEVIEW
FOR
FORECAST
FORECAST.REPORT
FULLDSC
G

GOTO
GROUPINGIDコマンド
HEADING
H

HIDE
HIERDEPTH
HIERHEIGHTコマンド
I

IF...THEN...ELSEコマンド
I

IMPORT
INFILE
L

LD
LIMITコマンド
LIMIT BASEDIMS
LISTBY
LISTFILES
LISTNAMES
LOAD
LOGコマンド
M

MAINTAIN
MODEL
MODEL.COMPRPT
MODEL.DEPRT
MODEL.XEQRPT
MONITOR
MOVE
O

OUTFILE
P

PAGE
PARSE
PERMIT
PERMITRESET
POP
POPLEVEL
PROGRAM
PROPERTY
PUSH
PUSHLEVEL
R

RECAP
REDO
REEDIT
REGRESS
REGRESS.REPORT
RELATIONコマンド
RELEASE
REMOVE_CUBE_MODEL
REMOVE_DIMENSION_MEMBER
REMOVE_MODEL_DIMENSION
RENAME
REPORT
RESYNC
RETURN
REVERT
ROWコマンド
S

SET
SET1
SET_INCLUDED_MODEL
SET_PROPERTY
SHOW
SIGNAL
SLEEP
SORTコマンド
SQL
STATUS
STDHDR
SWITCHコマンド
T

TEMPSTAT
TRACE
TRACKPRG
TRAP
TRIGGERコマンド
TRIGGERASSIGN
U

UNHIDE
UPDATE
UPDATE_ATTRIBUTE_VALUE
UPDATE_DIMENSION_MEMBER
V

VARIABLE
VNF
W

WHILE
Z

ZEROTOTAL

カテゴリ別のコマンド

OLAPのキューブとキューブ・ディメンションの変更コマンド

ADD_CUBE_MODEL
ADD_DIMENSION_MEMBER
ADD_MODEL_DIMENSION
CREATE_LOGICAL_MODEL
REMOVE_CUBE_MODEL
REMOVE_DIMENSION_MEMBER
REMOVE_MODEL_DIMENSION
SET_INCLUDED_MODEL
SET_PROPERTY
UPDATE_ATTRIBUTE_VALUE
UPDATE_DIMENSION_MEMBER

OBJORGファンクションも参照してください。
集計コマンド

AGGMAP
AGGMAP ADDまたはREMOVEモデル
AGGMAP SET
AGGREGATEコマンド
DEFINE AGGMAP
HIERDEPTH
HIERHEIGHTコマンド
割当てコマンド

ALLOCATE
ALLOCMAP
DEFINE AGGMAP
代入コマンド

CLEAR
MAINTAIN
SET
SET1
TRIGGERコマンド
TRIGGERASSIGN
デバッグ・コマンド

DBGOUTFILE
LOGコマンド
MONITOR
SIGNAL
TRACKPRG
TRAP
アナリティック・ワークスペース・オブジェクトの定義コマンド

CHGDFN
CONSIDER
COPYDFN
DEFINE
DELETE
DESCRIBE
FULLDSC
GROUPINGIDコマンド
HIDE
HIERHEIGHTコマンド
LD
LISTBY
LISTNAMES
LOAD
PROPERTY
RELATIONコマンド
RENAME
TRIGGERコマンド
UNHIDE
ディメンション・ステータス・コマンド

ACROSS
ALLSTAT
LIMITコマンド
LIMIT BASEDIMS
STATUS
TEMPSTAT
予測および回帰コマンド

FCCLOSE
FCEXEC
FCSET
FORECAST
FORECAST.REPORT
REGRESS
REGRESS.REPORT
日付の書式設定コマンド

DATE_FORMAT
VNF
計算式コマンド

DEFINE FORMULA
EQ
TRACE
アナリティック・ワークスペースの管理コマンド

AWコマンド
COMMIT
EXPORT(EIF)
IMPORT(EIF)
PERMIT
PERMITRESET
RENAME
UPDATE
アナリティック・ワークスペースのマルチライタ・モードの管理コマンド

ACQUIRE
RELEASE
RESYNC
REVERT
ファイルの管理コマンド

CDA
FILECLOSE
FILECOPY
FILEDELETE
FILEMOVE
FILEPAGE
FILEPUT
FILEREAD
FILESET
FILEVIEW
IMPORT(テキスト)
INFILE
LISTFILES
OUTFILE
データ・モデル・コマンド

AGGMAP ADDまたはREMOVEモデル
DEFINE MODEL
DIMENSION(モデル内)
INCLUDE
MODEL
MODEL.COMPRPT
MODEL.DEPRT
MODEL.XEQRPT
SET
TRACE
プログラミング・コマンド

ALLCOMPILE
ARGUMENT
BREAK
BREAK
CALL
CONTINUE
CONTINUE
DEFINE PROGRAM
DO ... DOEND
FOR
GOTO
HIDE
IF...THEN...ELSEコマンド
PARSE
PROGRAM
RETURN
SLEEP
SWITCHコマンド
TRACE
TRIGGERコマンド
TRIGGERASSIGN
UNHIDE
VARIABLE
WHILE
レポート・コマンド

BLANK
HEADING
PAGE
REPORT
ROWコマンド
SHOW
STDHDR
ZEROTOTAL
値の保存およびリストア・コマンド

CONTEXTコマンド
POP
POPLEVEL
PUSH
PUSHLEVEL
ソート・コマンド

MOVE
SORTコマンド
スプレッドシート・コマンド

DEFINE WORKSHEET
EXPORT(スプレッドシート)
IMPORT(スプレッドシート)
SQLの実行コマンド

FETCH
SQL
OLAP DML文の編集コマンド

EDIT
RECAP
REDO
REEDIT

ACQUIRE

アナリティック・ワークスペースがマルチライタ・モードでアタッチされる場合、ACQUIREコマンドは指定されたオブジェクトを取得および再同期化(オプション)し、それらのオブジェクトの変更内容が更新およびコミットされるようにします。

関連項目:
「マルチライタ・モードでアタッチされたアナリティック・ワークスペースの管理」

構文

ACQUIRE {acquired_noresync_objects | RESYNC [CASCADE] -

resync_objects [WAIT] } [CONSISTENT WITH [CASCADE] consistency_objects [WAIT]]

ここで、resync_objectsの構文は次のとおりです。

resynch_objname [FOR DELETE | [WITH [CASCADE]|WITHOUT] RELATIONS]] , ...

パラメータ

acquired_noresync_objects

再同期化せずに読取り/書込みモードでアクセスする1つ以上の変数、リレーション、値セット、ディメンション名のカンマで区切られたリスト。

パーティション変数の個々のパーティションを指定するには、次の構文を使用します。

variable_name (PARTITION partition_name [, PARTITION partition_name ]...)

この方法でオブジェクトを取得すると、オブジェクトに対して行われた読取り専用の変更がすべて保存されます。この方法で取得された変数およびディメンションは、UPDATE文を使用して更新できます。

partition_name

オブジェクトの取得先となるパーティションの名前。

RESYNC

指定したオブジェクトの最新の世代を、独自に加えた変更内容をすべて廃棄して読取り/書込みモードで取得するように指定します。

CASCADE

resync_objname

読取り/書込みモードでアクセスして再同期化する変数、リレーション、値セットまたはディメンションの名前。

パーティション変数の個々のパーティションを指定するには、次の構文を使用します。

variable_name (PARTITION partition_name [, PARTITION partition_name ]...)

WAIT

WAITを指定しない場合、他のユーザーがresync_objects内のオブジェクトのいずれかを読取り/書込みモードで取得していると、ACQUIRE文の実行に失敗します。WAITを指定した場合、Oracle OLAPはresync_objectsのすべてのオブジェクトが読取り/書込みモードで取得可能になるか、タイムアウトになるまで待機します。

CONSISTENT WITH

追加のオブジェクトが読取り専用モードでアクセス可能となるように指定します。指定したオブジェクトがすでに他のユーザーにより取得されている場合のACQUIRE文の動作を指定し、ACQUIRE文の実行に成功した場合は指定したオブジェクトを再同期化します。

consistency_objects [WAIT]

読取り専用モードで取得する1つ以上の変数、リレーション、値セットまたはディメンション名のカンマで区切られたリスト。

パーティション変数の個々のパーティションを指定するには、次の構文を使用します。

variable_name (PARTITION partition_name [, PARTITION partition_name ]...)

WAITを指定しない場合、consistency_objects内のオブジェクトのいずれかが読取り/書込みモードで他のユーザーにより取得されていると、ACQUIRE文の実行に失敗します。WAITキーワードを指定した場合、consistency_objectsのオブジェクトのうち、読取り/書込みモードで他のユーザーにより取得されているオブジェクトがなくなるか、タイムアウトするまでOracle OLAPがACQUIRE文の実行を待機します。

使用上の注意

一貫性の理解

CONSISTENT WITH句を含むACQUIRE文は、ある面ではACQUIRE文とRELEASE文の組合せと考えることができます。

ACQUIRE [avar...] RESYNC [rvar ...] cvar ... [WAIT]
RELEASE cvar ...

違いは、ACQUIRE CONSISTENT WITH文の実行は、ユーザーにcvar変数を取得する十分な権限がなくても成功するという点です。

障害およびエラー処理

ACQUIRE文のすべての句が成功しなければ、ACQUIRE文は失敗します。そのため、要求されたオブジェクトのすべてが取得されるか、まったく取得されないかのどちらかになります。

読取り/書込みモードでオブジェクトを取得できるのは一度に1ユーザーのみです。オブジェクトは、最初に読取り専用モードで取得した後、別のユーザーが読取り専用モードで同じオブジェクトを取得していなければ、そのオブジェクトを先に解放することなく読取り/書込みモードで取得できます。ただし、他のユーザーが読取り専用モードでオブジェクトを取得している場合、そのユーザーがオブジェクトを解放しないかぎり、同じオブジェクトを読取り/書込みモードで取得することはできません。指定したオブジェクトが他のユーザーにより取得された場合か、指定したオブジェクトの読取り専用の世代がオブジェクトの最新の世代ではない場合、ACQUIRE文が失敗します。

また、RESYNC句またはCONSISTENT句にWAITを指定した場合は、ACQUIRE文の完了に時間がかかることがあります。待機中に、取得リストの一部の変数が、他の変数が取得されるにもかかわらず解放されることがあります。ACQUIRE文がタイムアウト・エラーで失敗する原因となるデッドロックが発生する可能性もあります。

デッドロックによる問題を回避するには、ACQUIRE文およびRELEASE文をコーディングする順番に注意して、適切なエラー処理ルーチンを含めてください。

例

例9-1 オブジェクトの取得、更新および解放

マルチライタ・アタッチ・モードの従来の使用法では、2人のユーザーが同じアナリティック・ワークスペース内にある異なる2つのオブジェクトを変更できます。たとえば、アナリティック・ワークスペースに2つの変数actualsおよびbudgetがあるとします。ユーザーAがactualsを変更し、ユーザーBがbudgetを変更しようとします。この場合、アナリティック・ワークスペースをマルチライタ・モードでアタッチした後、各ユーザーは必要な変数を取得して必要な変更を行い、変更を更新およびコミットしてから、ワークスペースをデタッチするか、取得した変数を解放します。

ユーザーAは次の文を実行します。

AW ATTACH myworkspace MULTI
ACQUIRE actuals
... make modifications
UPDATE MULTI actuals
COMMIT
RELEASE actuals
AW DETACH myworkspace

一方で、ユーザーBは同時に次の文を実行します。

AW ATTACH myworkspace MULTI
ACQUIRE budget
... make modifications
UPDATE MULTI budget
COMMIT
RELEASE budget
AW DETACH myworkspace

例9-2 オブジェクトの取得および再同期化

B1およびB2という2人のユーザーが、どちらもbudgetのwhat-if分析で変更を行う必要があり、その結果が適切であった場合に自分の担当部分のbudgetを修正するとします。どちらのユーザーも、別のユーザーが同時にbudgetにアクセスする必要があるかどうか、またはbudgetに永続的な変更を行う必要があるかどうかがわかりません。そのため、what-if分析の変更を行う際に他のユーザーをブロックしたくないと考えます。

この場合、アナリティック・ワークスペースをマルチライタ・モードでアタッチした後、両方のユーザーがbudgetを取得せずにそれぞれのwhat-if計算を実行します。その後でwhat-if分析の変更を永続的にすることを決定したら、budgetを非同期化モードで取得します。取得に成功したら、budgetを更新して変更内容をコミットします。次のOLAP DML文は、この使用例を示しています。

AW ATTACH myworkspace MULTI
...perform what-if computations
ACQUIRE budget
...maybe make some additional final changes
UPDATE MULTI budget
COMMIT
RELEASE budget
AW DETACH myworkspace

ただし、最初の取得に成功しなかった場合、ユーザーは再同期化モードで再度budgetの取得を試みます(待機を要求する場合もあります)。再同期化モードでの取得に成功した場合、変更内容を再作成し(関連する数字の一部が変更された可能性があるため)、次に各ユーザーのアナリティック・ワークスペースを更新およびコミットします。次のOLAP DML文は、この使用例を示しています。

AW ATTACH myworkspace MULTI
... perform what-if computations
ACQUIRE budget
...maybe make some additional final changes
UPDATE MULTI budget
COMMIT
RELEASE budget
AW DETACH myworkspace
AW ATTACH myworkspace MULTI
...perform what-if computations
ACQUIRE budget --> failed
ACQUIRE RESYNC budget WAIT
...determine that the changes are still needed
...make changes to make permanent
UPDATE MULTI budget
COMMIT
RELEASE budget
AW DETACH myworkspace

例9-3 一貫性を保持する場合のオブジェクトの取得

場合によっては、一部のオブジェクトの相互の一貫性を保持する必要があります。その場合、マルチライタ・モードでの特別の注意が必要となります。

ユーザーB1およびユーザーB2の2人のユーザーがどちらもbudgetを変更する必要があり、budgetはinvestmentとの一貫性を保持する必要がある場合に、別のユーザー(ユーザーI)がinvestmentを変更する必要があるとします。この使用例では、どのユーザーもbudgetとinvestmentの両方を変更する必要はありませんが、すべてのユーザーは自分がbudgetまたはinvestmentのどちらかを取得する際に、budgetまたはinvestmentが他のユーザーによりその時点で取得されていないことを確認する必要があります。この条件を満たすため、次のサンプル・コードに示すように、各ユーザーがCONSISTENT WITH句を含むACQUIRE文を発行する必要があります。すべてのユーザーは、CONSISTENT句にリストされているオブジェクトが、必要な場合はACQUIRE文により再同期化される場合があることを認識しておく必要があります。

たとえば、ユーザーB1は次のOLAP DML文を発行します。

AW ATTACH myworkspace MULTI
... perform what-if computations
ACQUIRE budget CONSISTENT WITH investment
... maybe make some additional final changes
UPDATE MULTI budget
COMMIT
RELEASE budget, investment
AW DETACH myworkspace

ユーザーB2は、次のOLAP DML文を発行します。

AW ATTACH myworkspace MULTI
... perform what-if computations
ACQUIRE budget CONSISTENT WITH investment --> failed
ACQUIRE RESYNC budget CONSISTENT WITH investment WAIT
... determine that the changes are still needed
... make changes to make permanent
UPDATE MULTI budget
COMMIT
RELEASE budget, investment
AW DETACH myworkspace

ユーザーIは、次のOLAP DML文を発行します。

AW ATTACH myworkspace MULTI
ACQUIRE investment CONSISTENT WITH budget --> failed
ACQUIRE RESYNC investment CONSISTENT WITH budget WAIT
... make changes to investment
UPDATE MULTI investment
COMMIT
RELEASE budget, investment
AW DETACH myworkspace

ACROSS

ACROSSコマンドは、ループ内で実行する1つ以上の文を含むテキスト式を指定するコマンドです。ACROSSは、ステータスを、指定されたディメンションの現行のステータスにある値に一時的に設定します。ACROSS文の実行後、ディメンション・ステータスがループ前の状態にリストアされ、次の文を使用してプログラムの実行が再開されます。DO句文内の文の繰返しは、ACROSS文で指定されるディメンションおよびコンポジットのステータス、およびWHERE句が含まれている場合はその結果により制御されます。

構文

ACROSS dimension... DO dml-statements [WHERE boolean-expression]

パラメータ

dimension

現行のステータスが、dml-statementsに含まれる1つ以上の文の繰返しを制御する、1つ以上のディメンションまたはコンポジット。文は、現行のステータスにある指定されたディメンションの値の各組合せに対して繰り返されます。複数のディメンションを指定した場合、最初のディメンションが最後に変化します。

DO dml-statements

ループの各反復時に実行される1つ以上のOLAP DML文である、複数行のテキスト式。どのようなOLAP DML文でも指定できますが、プログラム内の複数行構成の一部として通常使用されるものは例外です。たとえば、IF...THEN...ELSE、WHILE、FORまたはSWITCHコマンドは、ACROSS文では実行できません。

WHERE boolean-expression

ループの各反復時に、dml-statementsを実行する前にboolean-expressionを評価するように指定します。boolean-expressionの結果がNAまたはFALSEである場合には、その反復時にはboolean-expressionは実行されません。

使用上の注意

コンパイルしてから実行するまでの間のコードの変更

Oracle OLAPでは、ACROSS文またはそれを含むプログラムが実行されるまで、ループ本体のコードは生成されません。実行まではコードが生成されないため、文はテキスト式内に含まれているので、ACROSSループの内容をコンパイルしてから実行するまでの間に変更することが可能になります。

例

例9-4 ACROSSを使用したROWコマンドの繰返し

レポート・プログラムで、3か月の各月におけるテントの売上数量を表示するとします。次のACROSS文を使用して、monthディメンションのそれぞれの値についてROWコマンドを繰り返します。

LIMIT product TO 'Tents'
LIMIT month TO 'Jan95' to 'Mar95'
ACROSS month DO 'ROW INDENT 5 month WIDTH 6 unit'

Jan95     533363
Feb95     572796
Mar95     707198

ADD_CUBE_MODEL

指定したモデルのMODEL(集計内)文を、キューブ・ディメンションの集計マップに追加します。このプログラムの実行で行われる変更はトランザクショナルではなく、プログラムの一部としてCOMMITが自動的に実行されます。

注意:
キューブ・ディメンションまたはそのキューブ・ディメンションを含むキューブに対してマテリアライズド・ビューが存在する場合は、キューブ・ディメンションの変更に、このプログラムを使用できません。

関連項目:
「キューブ対応のOLAP DML文」

構文

CALL ADD_CUBE_MODEL(logical_cube, logical_dim, model_name, is_static_model, [position ])

パラメータ

CALL

ADD_CUBE_MODELは引数を持つOLAP DMLプログラムであるため、OLAP DMLのCALL文を使用して起動します。

logical_cube

Oracleデータ・ディクショナリで定義されたキューブの名前を示すテキスト式。

関連項目:
「OLAP論理オブジェクトの名前の値を指定する場合のガイドライン」

logical_dim

変更するキューブ・ディメンションのOracleデータ・ディクショナリ名を示すテキスト式。

model_name

logical_dimに関連付けられている論理モデルの名前を表すテキスト式。

is_static_model

model_nameがlogical_cubeのaggmapにあるRELATION(集計用)文の前または後ろのどちらに追加されるのかを指定するブール式。

デフォルト値はTRUEです。これは、MODEL文がRELATION文の前に追加される(model_nameは静的モデルである)ことを意味します。

MODEL文をRELATION文の後ろに追加する(model_nameが動的モデルである)場合は、FALSEを指定します。

position

静的または動的モデルのリスト内で新しいモデルが追加される位置を指定する整数。たとえば、positionに対して0(ゼロ)の値およびis_static_modelに対してFALSEを指定した場合、そのモデルは最初の動的モデルとして追加されます。positionのデフォルト値はリストの末尾です。

positionに負数の値を指定すると、リストの末尾からその数の分だけ先頭方向に移動した位置にモデルが追加されます。

例

SET_INCLUDED_MODELとともにADD_CUBE_MODELを使用する例は、SET_INCLUDED_MODELで説明されている例を参照してください。

ADD_DIMENSION_MEMBER

ADD_DIMENSION_MEMBERプログラムを実行すると、OLAPキューブ・ディメンションにメンバーが追加されます。OLAPキューブ・ディメンション(OLAP論理ディメンションとも呼ばれる)は、Oracleデータ・ディクショナリでファースト・クラス・データ・オブジェクトとして定義されているOLAPディメンションです。

注意:
キューブ・ディメンションまたはそのキューブ・ディメンションを含むキューブに対してマテリアライズド・ビューが存在する場合は、キューブ・ディメンションの変更に、このプログラムを使用できません。

関連項目:
「キューブ対応のOLAP DML文」

構文

CALL ADD_DIMENSION_MEMBER(member_id, logical_dim, hier_list, level_name, -

parent-member_id, [ auto_compile, [ merge ]])

パラメータ

CALL

ADD_DIMENSION_MEMBERは引数を持つOLAP DMLプログラムであるため、OLAP DMLのCALL文を使用して起動します。

member_id

キューブ・ディメンションに追加するメンバーの値を示すテキスト式。

logical_dim

変更するキューブ・ディメンションのOracleデータ・ディクショナリ名を示すテキスト式。

関連項目:
「OLAP論理オブジェクトの名前の値を指定する場合のガイドライン」

hier_list

ディメンション・メンバーの追加先となるすべての階層のOracleデータ・ディクショナリ名で構成された複数行のテキスト式。1行ごとに1つの階層を指定します。

メンバーをすべてのキューブ・ディメンション階層に追加する場合は、NAを指定します。

level_name

レベル階層の場合に、プログラムによってメンバーがキューブ・ディメンションに追加される階層レベルを指定するテキスト値。レベル階層の場合、level_nameに指定する値は、次の条件を満たしている必要があります。

- parent_member_idに指定する値と互換性があること。

- 既存のキューブ・ディメンション・メンバーと同じ階層レベルであること(キューブ・ディメンション・メンバーはすべての階層で同じレベルに追加する必要があります)。

メンバーが値階層に含まれている場合(つまりレベルが存在しない場合)は、NAを指定します。

関連項目:
「キューブ対応のOLAP DML文で無効なレベル名」

parent_member_id

キューブ・ディメンションに追加するメンバーの親メンバーの値を指定するテキスト式。メンバーを階層の最上位メンバーとして追加する場合は、NAを指定します。

auto_compile

関連するアナリティック・ワークスペース・オブジェクト(親リレーションなど)を即時更新するかどうかを指定するブール式。デフォルト値であるTRUEを指定すると、アナリティック・ワークスペースの変更内容のうち、キューブ・ディメンション・メンバーに追加する必要のあるものはすべて即座に更新されます。パフォーマンス上の理由から、FALSEはコンパイルの実行前に大量の変更を行う場合のみ指定してください。この場合、アナリティック・ワークスペース・オブジェクトの値が有効になる前に、キューブ・ディメンションを明示的にコンパイルする必要があります(「キューブ・ディメンションの明示的なコンパイル」を参照)。

注意:
この引数に対して指定した値に関係なく、新しいメンバーは常にディメンションに即時追加されます。これは、コンパイル中にエラーが通知された場合でも同様です。

merge

プログラムによってディメンション・メンバーの更新(ディメンション・メンバーが存在する場合)またはディメンション・メンバーの作成(ディメンション・メンバーが存在しない場合)を行うかどうかを指定するブール式。デフォルト値はFALSEです。

使用上の注意

キューブ・ディメンションの明示的なコンパイル

auto_compileでFALSEを指定した場合、アナリティック・ワークスペース・オブジェクトの値が有効になる前に、キューブ・ディメンションを明示的にコンパイルする必要があります。コンパイルの実行にはDBMS_CUBE.BUILDパッケージ・コールを使用します。このコールを実行するには、Analytic Workspace Manager内で次の文を発行しますが、ここでcube_dimension_nameは、Oracleデータ・ディクショナリで定義されたキューブ・ディメンションの完全修飾名です。

SQL PROCEDURE DBMS_CUBE.BUILD('cube_dimension_name USING (COMPILE)');

デフォルトでは、前述の文を発行すると、データベースに対してUPDATEとCOMMITが実行されます。UPDATEとCOMMITが実行されないようにするには、次に示すようにNO COMMITを文に追加します。

SQL PROCEDURE DBMS_CUBE.BUILD'NO COMMIT cube_dimension_name USING (COMPILE)');

OLAP論理オブジェクトの名前の値を指定する場合のガイドライン

OLAP DML文において、OLAP論理オブジェクト(キューブやキューブ・ディメンションなど、Oracleデータ・ディクショナリで定義されているOLAPのファースト・クラス・オブジェクト)に対して指定するテキスト式は、次の形式の値に解決できる必要があります。ここでのLOGICAL_OBJECT_NAMEは、OLAPオブジェクトのOracleデータ・ディクショナリ名です。

[SCHEMA_NAME.] LOGICAL_OBJECT_NAME

たとえば、XADEMOスキーマのXADEMOキューブ・ディメンションを参照する場合、有効な式には次の記述が含まれます。

'product'
'xademo.product'
'PRODUCT'
'XADEMO.product'
'\"XADEMO\".\"PRODUCT\"'

注意:
OLAP DMLのキューブ対応のプログラムでは、OLAP論理オブジェクトに対して指定したテキスト値は大文字のテキストとして解釈されます(テキスト値を二重引用符で囲んだ場合を除く)。

キューブ対応のOLAP DML文におけるトランザクションの有効範囲

特に明記されていないかぎり、キューブ対応のOLAP DML文の有効範囲は、その他のOLAP DML文と同様に単一のセッションです。変更を維持するには、キューブ対応のOLAP DML文の発行前にアナリティック・ワークスペースを読取り/書込みモードでアタッチしておき、キューブ対応のOLAP DML文を実行した後でOLAP DML UPDATE文とCOMMIT文を発行する必要があります。アナリティック・ワークスペースが読取り専用モードでアタッチされている場合やUPDATE文とCOMMIT文を発行しない場合、変更内容は、アナリティック・ワークスペースがアタッチされている間のセッション内でのみ有効になります。

キューブ対応のOLAP DML文で無効なレベル名

level_nameまたはparent_member_idに無効な値を指定すると、コンパイル時にエラーがスローされます。また、メンバーの階層レベルを指定する場合に、そのメンバーが別の階層ですでに追加されているレベルとは異なるレベルを指定した場合にもエラーが発生します。この場合、auto_compileにFALSEが指定されていると、コール・エラーがスローされます。

例

例9-5 OLAPキューブ・ディメンションへのメンバーの追加

この例では、my_timeという名前のOLAPキューブ・ディメンションにメンバーを追加します。

1. 次のPL/SQL文を実行して、変更を加える前のmy_timeキューブ・ディメンションの値と階層に関するレポートを生成します。

select dim_key||'  '||level_name||'  '||parent
from my_time_lvl_hier_view
order by dim_key asc;

DIM_KEY||''||LEVEL_NAME||''||PARENT
-------------------------------------------------------------------------------
L1_0  L1
L1_1  L1
L2_1  L2  L1_1
L2_2  L2  L1_1
L3_1  L3  L2_1
L3_2  L3  L2_1
L3_3  L3  L2_2
L3_4  L3  L2_2
L3_5  L3  L2_2

9 rows selected.

2. 次のPL/SQL文を実行して、ADD_LQ_2という名前のユーザー作成のOLAP DMLプログラムを実行します。

exec dbms_aw.execute('call my_util_aw!add_l1_2');

ユーザー作成のOLAP DMLプログラムADD_LQ_2の定義を次に示します。このプログラムを実行すると、OLAP DMLから提供されるADD_DIMENSION_MEMBERプログラムがコールされ、my_timeキューブ・ディメンションに新しいメンバーが追加されます。

DEFINE ADD_L1_2 PROGRAM
PROGRAM
VARIABLE _aw_dim       text
VARIABLE _aw_sales     text
VARIABLE _members      text
VARIABLE _member       text
VARIABLE _i            integer

_aw_dim = OBJORG(DIM 'my_time')
_aw_sales = OBJORG(MEASURE 'my_cube' 'sales')

" Adds L1_2, L2_3, L3_6  CALL ADD_DIMENSION_MEMBER('L1_2', 'my_time', NA, 'L1', NA, NO)
CALL ADD_DIMENSION_MEMBER('L2_3', 'my_time', NA, 'L2', 'L1_2', NO)
CALL ADD_DIMENSION_MEMBER('L3_6', 'my_time', NA, 'L3', 'L2_3', NO)

" Set my_time attribute (to meaningless values) so dimension can compile
LIMIT &_aw_dim TO 'L1_2', 'L2_3', 'L3_6'
_members = VALUES(&_aw_dim)
_i = 1
WHILE _i LE NUMLINES(_members)
DO
_member = EXTLINES(_members, _i, 1)
_i = _i + 1
CALL UPDATE_ATTRIBUTE_VALUE(_member, 'my_time', 'start_date', -
to_date('01/01/08', 'MM/DD/YY'), NO)
CALL UPDATE_ATTRIBUTE_VALUE(_member, 'my_time', 'timespan', 1, NO)
DOEND

&_aw_sales(&_aw_dim 'L3_6') = 3

UPDATE
COMMIT
END

3. 次のPL/SQL文を発行し、my_timeキューブ・ディメンションをコンパイルします。

exec dbms_cube.build('MY_TIME USING (COMPILE)');

4. コンパイル後に、my_timeキューブ・ディメンションの値と階層に関するレポートを生成します。

select dim_key||'  '||level_name||'  '||parent
from my_time_lvl_hier_view
order by dim_key asc;

DIM_KEY||''||LEVEL_NAME||''||PARENT
-------------------------------------------------------------------------------
L1_0  L1
L1_1  L1
L1_2  L1
L2_1  L2  L1_1
L2_2  L2  L1_1
L2_3  L2  L1_2
L3_1  L3  L2_1
L3_2  L3  L2_1
L3_3  L3  L2_2
L3_4  L3  L2_2
L3_5  L3  L2_2
L3_6  L3  L2_3

12 rows selected.

5. 次のPL/SQL文を実行し、新しい階層でmy_cubeを解決します。

exec dbms_cube.build(script => 'MY_CUBE USING (SOLVE)', add_dimensions => false);

6. 次のPL/SQL文を発行して、my-cubeのsalesおよびmoving_salesメジャーの値に関するレポートを生成します。新しいmy_timeキューブ・ディメンションの値が表示されます。

select my_time||'  '||lpad(sales, 2)||'  '||lpad(moving_sales, 2)
from my_cube_view
order by my_time asc;

MY_TIME||''||LPAD(SALES,2)||''||LPAD(MOVING_SALES,2)
--------------------------------------------------------------------
L1_0  24  27
L1_1  14  38
L1_2   3   3
L2_1   2   5
L2_2  12  14
L2_3   3   3
L3_1   1   4
L3_2   1   2
L3_3  10  11
L3_4   1  11
L3_5   1   2
L3_6   3   3

12 rows selected.

ADD_MODEL_DIMENSION

ADD_MODEL_DIMENSIONプログラムを実行すると、キューブ・ディメンションのモデルにDIMENSION(モデル内)文が追加されます。このプログラムの実行で行われる変更はトランザクショナルではなく、プログラムの一部としてCOMMITが自動的に実行されます。

関連項目:
「キューブ対応のOLAP DML文」

構文

CALL ADD_MODEL_DIMENSION(logical_dim, model_name, explicit_dim)

パラメータ

CALL

ADD_MODEL_DIMENSIONは引数を持つOLAP DMLプログラムであるため、OLAP DMLのCALL文を使用して起動します。

logical_dim

変更するキューブ・ディメンションのOracleデータ・ディクショナリ名を示すテキスト式。

関連項目:
「OLAP論理オブジェクトの名前の値を指定する場合のガイドライン」

model_name

logical_dimに関連付けられている論理モデルの名前を表すテキスト式。

explicit_dim

キューブ・ディメンションのモデルに追加するディメンションの名前を示すテキスト式。

AGGMAP

AGGMAPコマンドは、aggmapオブジェクトを集計仕様として識別し、現行aggmapオブジェクトの定義に集計仕様を追加するコマンドです。AGGMAPを使用して、aggmapオブジェクトに集計仕様を割り当てるには、定義は最新のもの、または現行のセッション中に検討されたものにする必要があります。そうでない場合は、最初にCONSIDER文を使用し、現行の定義にする必要があります。

AGGMAPコマンドの代替コマンドはEDIT AGGMAP文であり、OLAP Worksheet内でのみ使用できます。EDIT AGGMAP文を実行すると、aggmapオブジェクトの集計仕様を追加、削除または変更できる編集ウィンドウが開きます。

関連項目:
「OLAP DML集計オブジェクト」

(ただし、これ以外にも、AGGMAP文と呼ばれることがあるOLAP DML文が2つあり、1つはAGGMAP ADDまたはREMOVEモデル文で、AGGMAP型のaggmapオブジェクトに対してモデルの追加または削除に使用し、もう1つはAGGMAP SET文で、変数のデフォルトaggmapを指定する際に使用します。)

構文

AGGMAP [specification]

パラメータ

specification

現行aggmapオブジェクトの集計仕様である、複数行のテキスト式。各文は、複数行のテキスト式で構成されています。コマンドライン・レベルでAGGMAPコマンドをコード化する際は、改行デリミタ(\n)で文を区切るか、JOINLINESを使用します。

集計仕様は、AGGMAPで始まり、ENDで終わります。これらの文の間に、指定する計算に応じて次の文のうち1つ以上をコーディングします。最低でも、1つのRELATION(集計用)文をコーディングする必要があります。

AGGINDEX

BREAKOUT DIMENSION

CACHE

DIMENSION(集計用)

DROP DIMENSION

MEASUREDIM(集計用)

MODEL(集計内)

PRECOMPUTE

RELATION(集計用)

注意:
aggmapの仕様では、結合ディメンションを使用できません。かわりに、コンポジットを使用してください。

使用上の注意

一時集計またはカスタム集計の作成

ほとんどのaggmapオブジェクトは、永続的なディメンション・メンバー(つまり、あるセッションから別のセッションへと持続されるディメンション・メンバー)によりディメンション化された変数値を計算するように定義されています。ただし、ユーザーは、予測またはwhat-if分析を行う際や、単に定型的ではない方法でデータを参照する際、実行時に独自の集計を作成できます。一時メンバーをディメンションに追加し、それらのメンバーのデータを集計することは、一時集計またはカスタム集計の作成と呼ばれることがあります。たとえば、次に示すようなMAINTAIN ADD SESSION文を使用して、モデルをaggmapオブジェクトへ一時的に追加できます。

MAINTAIN dimension ADD SESSION member = model APPLY TO AGGMAP aggmap

圧縮コンポジットによってディメンション化される変数の集計

圧縮コンポジットによってディメンション化される変数の集計仕様を設計する場合は、常に次の点に注意してください。

- 集計仕様のRELATION文は、「圧縮コンポジットのRELATION文」に示されているガイドラインに従ってコード化する必要があります。

- パラレル集計はサポートされていません。かわりに、複数セッションを使用して、独自の圧縮コンポジットを持つ変数またはパーティションを計算できます。

- 可能な場合、圧縮コンポジットによってディメンション化される変数を再集計する際に、Oracle OLAPが自動的に増分集計を実行します。つまり、Oracle OLAPは最後の集計以降に発生した変更を測定し、再計算が必要となる変数の最小の範囲を割り出し、その範囲のみを再計算します。
したがって、明示的な増分集計はサポートされていません。変数のディメンション・ステータスが制限されている場合、圧縮コンポジットによってディメンション化される変数を集計することはできません。集計を成功させるには、変数のディメンション・ステータスがALLSTATである必要があります。ただし、ローカルの圧縮コンポジットを持つ稠密ディメンションを使用してパーティションを計算できます。このようにして、新しいデータを含むパーティションのみを集計できます。

集計オプションとシステム・プロパティ

集計にはいくつかのオプションがあります。これらのオプションを「集計オプション」に示します。

集計または割当てに関連するシステム・プロパティについては、「カテゴリ別のシステム・プロパティ」を参照してください。

循環性の確認

AGGREGATEは、複数階層内および複数階層間の循環性の関係を自動的に確認します。最初に階層を定義する際、PRECOMPUTE文をNAに、AGGINDEXをNOに設定して循環性を確認します。集計中のXSHIERCK01エラーは、循環階層が検出された可能性のあることを示しています。ただし、メッセージにUNDIRECTEDへの参照が含まれる場合は、詳細データ・セルから祖先への複数のパスが検出されます。一部の計算では、詳細データ・セルに同じ祖先セルへの複数のパスが必要です。この場合、AGGREGATEコマンドを実行する前に、MULTIPATHHIERオプションをYESに設定する必要があります。あるいは、階層構造内のエラーを修正する必要があります。このエラー・メッセージに関する詳細と、その解析方法は、MULTIPATHHIERオプションを参照してください。

例

例9-6 事前計算および即時計算の組合せ

この例では、アナリティック・ワークスペース内の一部のデータを事前計算し、残りをユーザーによる要求時に計算するように指定する手順を説明します。

次の定義のunits変数を持つmydtbという名前のアナリティック・ワークスペースを定義するとします。

DEFINE units INTEGER <time, SPARSE <product, geography>>

この場合、集計するデータを指定する仕様をaggmapに作成および追加する必要があります。この例では、aggmapを定義し、aggmapに仕様を追加するOLAP DML文を含む入力ファイルの使用方法を示します。

1. 各ディメンションの階層の名前を識別します。セルフ・リレーションとして階層を定義した場合、セルフ・リレーションの名前を使用します。

2. 集計するデータを決定します。
timeおよびproductディメンションのすべてのレベルのデータを計算し、geographyのデータは計算しないとします。geographyディメンションの最下位レベルのデータは、都市レベルにあります。階層の2番目のレベルには、East、CentralおよびWestの各地域を表す3つのディメンション値があります。階層の3番目のレベルには、Totalという1つのディメンション値があります。

Eastのデータを事前計算し、アナリティック・ワークスペースに格納するとします。Central、WestおよびTotalのデータは、ユーザーがそのデータを要求した時点でのみ計算され、そのデータはアナリティック・ワークスペースに格納されません。そのため、aggmapオブジェクトに追加する仕様にこの情報を指定する必要があります。

3. units.txtという名前のASCIIテキスト・ファイルを作成します。次のOLAP DML文をテキスト・ファイルに追加します。

DEFINE units.agg AGGMAP <time, SPARSE <product, geography>>
AGGMAP
RELATION myti.parent
RELATION mypr.parent
RELATION myge.parent PRECOMPUTE ('East')
END

この文により、units.aggという名前のaggmapが定義され、units.txtファイルをアナリティック・ワークスペースに読み取る際に3つのRELATION文が集計仕様に追加されます。

4. units.txtファイルをアナリティック・ワークスペースに読み取るには、次の文を実行します。

INFILE 'inf/units.txt'

5. この時点で、units.agg aggmapがアナリティック・ワークスペースに存在している必要があります。次の文を使用して、units変数を集計できます。

AGGREGATE units USING units.agg

これで、すべての時間および製品についてのEastのデータが計算され、アナリティック・ワークスペースに格納されます。

6. ユーザーがCentral、WestまたはTotalのデータを要求した際に、そのデータが計算されて表示されるようにアナリティック・ワークスペースを設定します。次の文に示すとおり、通常、AGGREGATEファンクションとともに使用する前に、aggmapオブジェクトをコンパイルすることをお薦めします。

COMPILE units.agg

AGGREGATEコマンドを使用するのみの場合は、この文によりaggmapオブジェクトが使用前にコンパイルされるため必要ありません。ただし、AGGREGATEコマンドとともにFUNCDATAキーワードを使用しない場合、即時計算の実行に必要なメタデータがコンパイルされていません。他の必要な計算(モデルの計算など)がすべて実行済の場合は、データのロード時にaggmapをコンパイルするのが最適な方法になります。実行していない場合は、ユーザーはアナリティック・ワークスペースを開くたびに、集計が自動的にコンパイルされるのを待機する必要があります。つまり、なんらかのデータが即時計算される場合、アナリティック・ワークスペースをユーザーから使用可能にする前にaggmapをコンパイルすることにより、すべてのユーザーの問合せパフォーマンスを向上させることができます。

7. units変数にプロパティを追加します。

CONSIDER units
PROPERTY '$NATRIGGER' 'AGGREGATE(units USING units.agg)'

このプロパティは、データ・セルにNA値が含まれる場合、Oracle OLAPがAGGREGATEファンクションをコールして、そのセルのデータを集計することを示しています。このため、ユーザーにより要求されるすべてのunitsデータが表示されます。ただし、geographyディメンションのEastディメンション値のデータのみが実際に集計され、アナリティック・ワークスペースに格納されます。他のすべてのデータ(Central、WestおよびTotalのデータ)は、ユーザーにより要求された時点でのみ計算されます。

例9-7 非加算集計の実行

この例では、加算集計および非加算集計を組み合せる演算子および引数の使用方法を説明します。

sales、debt、interest_rateおよびinventoryの4つの変数を定義したとします。これらの変数は、同じディメンション性で定義されており、ここで、cpはproductおよびgeographyディメンションで定義されたコンポジットです。

<time cp<product geography>>

1つのAGGREGATEコマンドを使用して、4つの変数すべてを集計するとします。debt変数には加算集計が必要です。sales変数には加重合計集計が必要で、interest_rateには階層加重平均が必要です。そのため、salesおよびinterest_rateの両方に定義が必要な加重オブジェクトが必要で、加重値を移入する必要があります。inventoryには、階層内の最後の値である合計インベントリの結果が必要です。

debtおよびinventoryの集計演算は、OPERATORキーワードを使用して指定します。しかし、salesおよびinterest_rateには加重オブジェクトが必要な集計演算があるため、ARGSキーワードを使用してそれらの演算を指定する必要があります。演算子変数を定義して、OPERATORキーワードを使用します。通常、演算子変数は、メジャー・ディメンションまたは明細項目ディメンションによってディメンション化されます。

実行する集計を定義する手順は、次のとおりです。

1. メジャー・ディメンションを使用して、ARGSキーワードとともに使用する引数変数の定義も行うため、次の文に示されているようにmeasureディメンションを定義します。

DEFINE measure DIMENSION TEXT
MAINTAIN measure 'sales', 'debt', 'interest_rate', 'inventory'

注意:
RELATION文でmeasureディメンションを使用する場合は、同じ集計仕様に必ずMEASUREDIM文を含める必要があります。

2. opvarという名前の演算子変数を定義して移入します。文では、debtの集計でSUM演算子を使用することと、inventoryの集計でHLAST演算子を使用することを指定します。

DEFINE opvar TEXT <measure>
opvar (measure 'sales') = 'WSUM'
opvar (measure 'debt') = 'SUM'
opvar (measure 'interest_rate') = 'HWAVERAGE'
opvar (measure 'inventory') = 'HLAST'

3. salesおよびinterest_rateには加重オブジェクトが必要なため、それらの加重オブジェクトを定義および移入します。次の文では、currencyという名前の(salesが使用する)加重オブジェクトが定義されます。

DEFINE currency DECIMAL <time geography>

currency変数は、timeおよびgeographyのみによってディメンション化されることに注意してください。この変数の目的は、外国通貨の換算情報としての役割を果す加重の提供であるため、productディメンションを含める必要はありません。

4. 使用する加重値を持つcurrencyを移入します。

5. interest_rate変数の非加算集計(階層加重平均)には、変数debtの合計が必要です。つまり、interest_rateはdebtの集計結果がない場合は集計できません。
この時点で、引数変数を定義でき、この引数変数には、interest_rateの加重オブジェクトとしてdebtの集計結果を指定する必要があります。同じ引数変数を使用して、sales変数の加重オブジェクトとしてcurrencyを指定します。次の文では、argvarという名前の引数変数が定義されます。

DEFINE argvar TEXT <measure>

6. 次の文により、引数変数が移入されます。

argvar (measure 'sales') = 'weightby currency'
argvar (measure 'debt') = NA
argvar (measure 'interest_rate') = 'weightby debt'
argvar (measure 'inventory') = NA

7. productおよびgeographyの集計では、sales、debtおよびinterest_rate変数のデータが単に加算されるのみです。しかし、inventory変数には階層加重平均が必要です。そのため、2番目の演算子変数および2番目の引数変数を定義する必要があり、これらはどちらもproductおよびgeographyのRELATION文で使用されます。
次の文では、2番目の演算子変数を定義して移入します。

DEFINE opvar2 TEXT <measure>
opvar (measure 'sales') = 'Sum'
opvar (measure 'debt') = 'Sum'
opvar (measure 'interest_rate') = 'Sum'
opvar (measure 'inventory') = 'HWAverage'

次の文では、2番目の引数変数を定義して移入します。

DEFINE argvar2 TEXT <measure>
argvar (measure 'sales') = NA
argvar (measure 'debt') = NA
argvar (measure 'interest_rate') = NA
argvar (measure 'inventory') = 'weightby debt'

8. ここで、次の文を発行してaggmapを作成します。

DEFINE sales.agg AGGMAP <time, CP<product geography>>
AGGMAP
RELATION time.r OPERATOR opvar ARGS argvar
RELATION product.r OPERATOR opvar2 ARGS argvar2
RELATION geography.r OPERATOR opvar2 ARGS argvar2
MEASUREDIM measure
END

9. 最後に、次の文を使用して4つの変数すべてを集計します。

AGGREGATE sales debt interest_rate inventory USING sales.agg

例9-8 プログラムによるaggmapの定義

次のプログラムでは、EXISTSファンクションを使用して、AGGMAPが存在しているかどうかをテストし、存在しない場合はAGGMAPを定義します。その後、AGGMAP文を使用してaggmapの仕様を定義します。

DEFINE MAKEAGGMAP PROGRAM
LD Create dynamic aggmap
PROGRAM
IF NOT EXISTS ('test.agg')
THEN DEFINE test.agg AGGMAP <geography product channel time>
ELSE CONSIDER test.agg
AGGMAP JOINLINES(-
'RELATION geography.parentrel PRECOMPUTE (geography.lvldim 2 4)' -
'RELATION product.parentrel' -
'RELATION channel.parentrel' -
'RELATION time.parentrel' -
'END')
END

例9-9 入力ファイルを使用したaggmapの作成

次のaggmap定義および仕様を含む、salesagg.txtという名前のディスク・ファイルを作成したとします。

DEFINE sales.agg AGGMAP <time, product, geography>
AGGMAP
RELATION time.r PRECOMPUTE (time NE 'Year99')
RELATION product.r PRECOMPUTE (product NE 'ALL')
RELATION geography.r
CACHE STORE
END

sales.agg aggmapをアナリティック・ワークスペースに含めるには、次の文を実行します。ここで、infはファイルが格納されているディレクトリの別名です。

INFILE 'inf/salesagg.txt'

これで、sales.agg aggmapが定義され、3つのRELATION文とCACHE文が含まれるようになりました。この例では、Year99のtimeディメンション値を持つデータを除き、timeディメンションの階層time.rのデータをすべて集計することを指定しています。さらに、Allのproductディメンション値を持つデータ以外の、productディメンションの階層product.rの全データを集計しています。geographyディメンション値はすべて集計されます。CACHE STORE文は、その場でロールアップされるすべてのデータを1度のみ計算し、その値を同じセッション中に他のアクセス要求のキャッシュに格納することを指定します。

これで、次のようにAGGREGATEコマンドを実行してsales.agg aggmapを使用できるようになります。

AGGREGATE sales USING sales.agg

この例では、timeディメンションのYear99値、またはproductディメンションのAll値によってディメンション化されるすべてのデータ値が、即時計算されます。他のデータはすべて集計され、アナリティック・ワークスペースに格納されます。

例9-10 複数のaggmapの使用

予測を使用する場合、その予測で必要となるすべての入力データが事前計算されていることを確認する必要があります。事前計算されていないと、予測は不適切なデータまたは存在しないデータを使用します。たとえば、予測ですべての明細項目を集計する必要があるとします。time、line、divisionによってディメンション化されるbudget変数を使用する場合、1つの方法としてlineディメンションの完全な集計を実行してDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションを予測し、残りのディメンションdivisionを集計するという方法があります。

この処理は、次の3つのaggmapオブジェクトを定義することにより可能になります。

1. forecast.agg1という名前の最初のaggmapを定義しますが、これは、予測で必要とされるデータを集計します。これには、次の文が含まれます。

RELATION line.parentrel

2. forecast.agg2という名前の2番目のaggmapを定義しますが、これは、最初のaggmapおよび予測を使用して生成されるデータを集計します。これには、次の文が含まれます。

RELATION division.parentrel PRECOMPUTE ('L3')

3. forecast.agg3という名前の3番目のaggmapを定義します。これには、最初の2つのaggmap仕様にあるRELATION文が含まれます。

RELATION line.parentrel
RELATION division.parentrel PRECOMPUTE ('L3')

予測がfore.prgという名前のプログラムにある場合、次の文を使用してデータを集計します。

AGGREGATE budget USING forecast.agg1   "Aggregate over LINE
CALL fore.prg                          "Forecast over TIME
AGGREGATE budget USING forecast.agg2   "Aggregate over DIVISION
"Compile the limit map for LINE and DIVISION
COMPILE forecast.agg3
"Use the combined aggmap for the AGGREGATE function
CONSIDER budget
PROPERTY 'NATRIGGER' 'AGGREGATE(budget USING forecast.agg3)'

例9-11 集計仕様におけるAGGINDEX文の使用方法

次の定義を持つ2つの変数sales1およびsales2があるとします。

DEFINE sales1 DECIMAL <time, SPARSE<product, channel, customer>>
DEFINE sales2 DECIMAL <time, SPARSE<product, channel, customer>>

ディスク領域が限られていてパフォーマンスを向上させる必要があるため、salesデータをすべて事前計算してデータベースにコミットすることを避けたいとします。そのためにはaggmapを作成し、事前計算するデータと即時計算するデータを指定する必要があります。

次の文を使用して、sales.aggという名前のaggmapを定義します。

DEFINE sales.agg AGGMAP <time, SPARSE<product, channel, customer>>

次に、AGGMAP文を使用して、次のようなsales.aggの仕様を入力します。

RELATION time.r PRECOMPUTE (time NE 'Year99')
RELATION product.r PRECOMPUTE (product NE 'All')
RELATION channel.r
RELATION customer.r
AGGINDEX NO

この集計仕様によって、Oracle OLAPは、Year99のtimeディメンション値またはAllのproductディメンション値を持つデータを除き、それ以外のすべてのsalesデータをロールアップして、データベースにコミットします(処理されなかったセルのデータは、ユーザーが最初にそれらにアクセスしたときに計算されます)。AGGINDEX値がNOの場合は、Oracle OLAPに、即時計算するデータの索引を作成しないことを認識させることができます。

ここで、次の文を実行します。

sales2 = AGGREGATE(sales1 USING sales.agg) ACROSS SPARSE -
<product, channel, customer>

これで、sales2にはsales1にあるすべてのデータと、Year99の集計されたすべてのデータが格納されるようになります。これは、timeがコンポジットに含まれていないためです。

一方、Allのproduct値の集計データは計算されず、sales2には格納されません。このデータが計算も格納もされないのは、productディメンションがコンポジットに含まれているためであり、コンポジットに含まれるディメンションに必要な索引は、集計仕様にAGGINDEX NO文が含まれているため作成されませんでした。索引が存在しなかったため、Oracle OLAPはAGGREGATEファンクションをコールして即時計算すべきデータを計算しませんでした。

例9-12 ディメンション属性による集計

販売を行っているある会社で、顧客の名前、性別、年齢および販売量の記録を保持するとします。このデータを保持するため、アナリティック・ワークスペースにcustomerという名前のディメンションと、customerによってディメンション化される3つの変数(customer_sex、customer_age、salesという名前)を含めます。

REPORT W 14 <customer_sex customer_age sales>

CUSTOMER        CUSTOMER_SEX   CUSTOMER_AGE      SALES
-------------- -------------- -------------- --------------
Clarke         M                          26      26,000.00
Smith          M                          47      15,000.00
Ilsa           F                          24      33,000.00
Rick           M                          33      22,000.00

性別および年齢を基準とした詳細売上データを集計して、男性および女性に対する販売量と、異なる年齢層に対する販売量を計算します。このデータを保持するには、性別および年齢の階層ディメンションによってディメンション化されるINTEGER変数が必要です。Oracle OLAPが実行する計算を指定するaggmapオブジェクトも必要になり、Oracle OLAPはその計算でsales変数のデータをこの変数に移入します。

必要なオブジェクトを作成および移入する手順は、次のとおりです。

1. sexおよびageという名前のディメンション、および階層ディメンションのセルフ・リレーションを作成して移入します。

DEFINE sex DIMENSION TEXT
DEFINE sex.parentrel RELATION sex <sex>
DEFINE age DIMENSION TEXT
DEFINE age.parentrel RELATION age <age>

AGE               AGE.PARENTREL
-------------- --------------------
0-20           All
21-30          All
31-50          All
51-100         All
No Response    All
All            NA

SEX               SEX.PARENTREL
-------------- --------------------
M              All
F              All
No Reponse     All
All            NA

2. ageおよびsexディメンションをcustomerディメンションにマップするリレーションを作成して移入します。

DEFINE customer.age.rel RELATION age <customer>
DEFINE customer.sex.rel RELATION sex <customer>

CUSTOMER         CUSTOMER.AGE.REL     CUSTOMER.SEX.REL
-------------- -------------------- --------------------
Clarke         21-30                M
Smith          31-50                M
Ilsa           21-30                F
Rick           31-50                M

3. 集計データを保持するsales_by_sex_ageという名前の変数を作成します。sales変数と同様に、この変数の型はDECIMALですが、customerではなくsexおよびageによってディメンション化されます。

DEFINE sales_by_sex_age VARIABLE DECIMAL <sex age>

4. sales_by_sex_age変数の値を計算する、ssa_aggmapという名前のAGGMAP型のaggmapオブジェクトを定義します。

DEFINE SSA_AGGMAP AGGMAP
AGGMAP
RELATION sex.parentrel OPERATOR SUM
RELATION age.parentrel OPERATOR SUM
BREAKOUT DIMENSION customer -
BY customer.sex.rel, customer.age.rel OPERATOR SUM
END

ssa_aggmapの仕様に、次の文が含まれていることに注意してください。

- sales変数のcustomerディメンションをsales_by_sex_age変数の最下位レベルの値にマップする方法を指定する、BREAKOUT DIMENSION文。この文は、詳細値(つまりcustomer)を含む変数のディメンション名と、customerディメンションとsexおよびageディメンションの間のリレーションを定義するリレーション名(customer.sex.relおよびcustomer.age.rel)を指定します。

- sales_by_sex_age変数のsexおよびageディメンションを集計する方法を指定する、2つのRELATION文。それらの各文には、階層ディメンション(sexまたはage)のセルフ・リレーションを定義する子と親のリレーション(sex.parentrelまたはage.parentrel)の名前が含まれます。

5. 集計の詳細データをsales変数から取得することを指定するAGGREGATEコマンドを発行することにより、sales_by_sex_age変数を移入します。

AGGREGATE sales_by_sex_age USING ssa_aggmap FROM sales

集計を実行すると、sales_by_sex_ageのレポートに計算された値が示されます。

---------------------SALES_BY_SEX_AGE----------------------
----------------------------SEX----------------------------
AGE                  M              F          No Reponse        All
-------------- -------------- -------------- -------------- --------------
0-20                       NA             NA             NA             NA
21-30               26,000.00      33,000.00             NA      59,000.00
31-50               37,000.00             NA             NA      37,000.00
51-100                     NA             NA             NA             NA
No Response                NA             NA             NA             NA
All                 63,000.00      33,000.00             NA      96,000.00

例9-13 集計仕様におけるCACHE文の使用方法

次の定義を持つsales変数があるとします。

DEFINE sales DECIMAL <time, SPARSE<product, channel, customer>>

ディスク領域が限られていてパフォーマンスを向上させる必要があるため、salesデータを事前計算してデータベースにコミットすることを避けたいとします。そのためにはaggmapを作成し、事前計算するデータと即時計算するデータを指定する必要があります。

次の文を使用して、sales.aggという名前のaggmapを定義します。

DEFINE sales.agg AGGMAP <time, SPARSE<product, channel, - customer>>

次に、AGGMAP文を使用して、次のようなsales.aggの集計仕様を入力します。

AGGMAP
RELATION time.r PRECOMPUTE (time NE 'YEAR99')
RELATION product.r PRECOMPUTE (product NE 'ALL')
RELATION channel.r
RELATION customer.r
CACHE SESSION
END

この集計仕様によって、Oracle OLAPに、Year99の時間ディメンション値またはALLのproductディメンション値を持つセルを除き、それ以外のすべてのsalesデータをロールアップしてコミットすることを認識させることができ、処理されなかったセルのデータは、ユーザーが最初にそれらにアクセスしたときに計算されます。CACHE文がSESSIONキーワードを使用するため、それらのセルが即時計算される際、データが残りのOracle OLAPセッションのキャッシュに格納されることを意味します。そのようにして、次回ユーザーが同じセルにアクセスするときに、データを再び計算する必要がなくなります。かわりにデータはセッション・キャッシュから取得されます。

例9-14 詳細レベルを除くすべての階層レベルの移入

アナリティック・ワークスペースに次の定義を持つリレーションおよびディメンションが含まれるとします。

DEFINE geog.d TEXT DIMENSION
DEFINE geog.r RELATION geog.d <geog.d>
DEFINE sales_by_units   INTEGER VARIABLE <geog.d>
DEFINE sales_by_revenue DECIMAL VARIABLE <geog.d>
DEFINE price_per_unit   DECIMAL VARIABLE <geog.d>

2つのaggmapオブジェクトを作成するとします。1つのaggmapオブジェクトはunits_aggmapという名前で、sales_by_units変数のデータを集計する仕様です。もう1つのaggmapオブジェクトrevenue_aggmapは、sales_by_revenue変数の詳細データを除くすべてのデータを計算する仕様です。

DEFINE units_aggmap AGGMAP
AGGMAP
RELATION geog.r OPERATOR SUM
END

DEFINE revenue_aggmap AGGMAP
AGGMAP
RELATION geog.r OPERATOR WSUM ARGS WEIGHTBY price_per_unit
CACHE NOLEAF
END

次の手順は、集計プロセスの概要を示しています。

1. sales_by_unitおよびsales_by_revenue変数の値は、どちらも集計されていないとき、次のようになっています。

GEOG.D    SALES_BY_UNIT SALES_BY_REVENUE
--------- ------------- ----------------
Boston                1               NA
Medford               2               NA
San Diego             3               NA
Sunnydale             4               NA
MA                    NA              NA
CA                    NA              NA
USA                   NA              NA

2. sales_by_unit変数のデータが集計されると、sales_by_unitおよびsales_by_revenue変数の値は次のようになります。

AGGREGATE sales_by_unit    USING units_aggmap

GEOG.D    SALES_BY_UNIT SALES_BY_REVENUE
--------- ------------- ----------------
Boston                1               NA
Medford               2               NA
San Diego             3               NA
Sunnydale             4               NA
MA                    3               NA
CA                    7               NA
USA                  10               NA

3. sales_by_revenue変数のデータが集計されると、sales_by_unitおよびsales_by_revenue変数の値は次のようになります。

AGGREGATE sales_by_revenue USING revenue_aggmap FROM units_aggmap

GEOG.D    SALES_BY_UNIT SALES_BY_REVENUE
--------- ------------- ----------------
Boston                1               NA
Medford               2               NA
San Diego             3               NA
Sunnydale             4               NA
MA                    3             13.5
CA                    7             31.5
USA                  10             45.0

例9-15 異なる変数への集計

階層ディメンションtimeおよび非階層ディメンションdistrictによってディメンション化される、salesという名前の変数があるとします。

DEFINE time DIMENSION TEXT
DEFINE time.parentrel RELATION time <time>
DEFINE district DIMENSION TEXT
DEFINE sales VARIABLE DECIMAL <time district>

-----------------------SALES-----------------------
---------------------DISTRICT----------------------
TIME            North        South         West         East
------------ ------------ ------------ ------------ ------------
1976Q1         168,776.81   362,367.87   219,667.47   149,815.65
1976Q2         330,062.49   293,392.29   237,128.26   167,808.03
1976Q3         304,953.04   354,240.51   170,892.80   298,737.70
1976Q4         252,757.33   206,189.01   139,954.56   175,063.51
1976                   NA           NA           NA           NA

さらに、North地区を除くすべての地区の、各四半期および年の売上総額を計算するとします。aggmapオブジェクトを使用してこの計算を実行する手順は、次のとおりです。

1. データを集計する地区の値を表すnot_northという名前の値セットを作成します。

DEFINE not_north VALUESET district
LIMIT not_north TO ALL
LIMIT not_north REMOVE 'North'

2. 計算結果を保持するtotal_sales_exclud_northという名前の変数を定義します。

DEFINE total_sales_exclud_north VARIABLE DECIMAL <time>

salesのように、total_sales_exclud_north変数はtimeによってディメンション化されることに注意してください。ただし、salesとは異なり、この変数は各地区の詳細データを保持しますが、South、WestおよびEast地区(つまりNorthを除くすべての地区)の(集計された)総計値のみであるため、total_sales_exclud_north変数はdistrictによってはディメンション化されません。

3. 実行する計算を指定するaggmapオブジェクトを定義します。

DEFINE agg_sales_exclud_north AGGMAP
AGGMAP
RELATION time.parentrel OPERATOR SUM
DROP DIMENSION district OPERATOR SUM VALUES not_north
END

集計仕様は、集計の実行方法を指定する次の2つの文で構成されることに注意してください。

- 階層ディメンションtimeでの集計方法を指定するRELATION文。

- 非階層ディメンションdistrictにまたがる集計方法を指定するDROP DIMENSION文。この場合、DROP DIMENSIONは、集計の実行時にNorth地区の値を除外するように指定するnot_north値セットも使用します。

4. データを集計します。

AGGREGATE total_sales_exclud_north USING agg_sales_exclud_north FROM sales

total_sales_exclud_north変数のレポートに、集計された値が出力されます。

TIME             ALL_SALES_EXCEPT_NORTH
------------ ------------------------------
1976Q1                           731,850.99
1976Q2                           698,328.58
1976Q3                           823,871.02
1976Q4                           521,207.09
1976                           2,775,257.69

例9-16 集計仕様におけるMEASUREDIM文の使用方法

measureという名前のメジャー・ディメンションを定義したとします。その後、measureによってディメンション化されるmyopvarという名前の演算変数を定義します。集計仕様でmyopvarを使用する場合、ディメンションがmyopvarの定義に含まれるため、measureを識別するMEASUREDIM文も含める必要があります。

MEASUREDIM文は、次の例に示されるように、集計仕様にある最後のRELATION文の後に記述します。

DEFINE sales.agg AGGMAP <time, product, geography>
AGGMAP
RELATION time.r OPERATOR myopvar
RELATION product.r
RELATION geography.r
MEASUREDIM measure
END

例9-17 集計におけるモデルの解決

この例では、budget変数を使用します。

DEFINE budget VARIABLE DECIMAL <line time>
LD Budgeted $ Financial

timeディメンションには、次のように2つの階層(StandardおよびYTD)と、time.parentrelという名前の親リレーションがあります。

-----TIME.PARENTREL------
----TIME.HIERARCHIES-----
TIME             Standard       YTD
-------------- ------------ ------------
Last.YTD       NA           NA
Current.YTD    NA           NA
Jan01          Q1.01        Last.YTD
...
Dec01          Q4.01        Last.YTD
Jan02          Q1.02        Current.YTD
Feb02          Q1.02        Current.YTD
Mar02          Q1.02        Current.YTD
Apr02          Q2.02        Current.YTD
May02          Q2.02        Current.YTD
Q1.01          2001         NA
...
Q4.01          2001         NA
Q1.02          2002         NA
Q2.02          2002         NA
2001           NA           NA
2002           NA           NA

明細項目間のリレーションシップは、次のモデルで定義されます。

DEFINE income.budget MODEL
MODEL
DIMENSION line time
opr.income = gross.margin - marketing
gross.margin = revenue - cogs
revenue = LAG(revenue, 12, time) * 1.02
cogs = LAG(cogs, 1, time) * 1.01
marketing = LAG(opr.income, 1, time) * 0.20
END

次の集計仕様は、すべてのデータを事前集計します。モデルにはLAGファンクションと連立方程式の両方が含まれるため、すべてのデータを事前集計する必要がある点に注意してください。

DEFINE budget.aggmap1 AGGMAP
AGGMAP
MODEL income.budget
RELATION time.parentrel
END

例9-18 階層での集計

次の文でsales変数を定義するとします。

DEFINE sales VARIABLE <time, SPARSE <product, geography>>

salesの集計仕様には、次のようなRELATION文が含まれることがあります。

AGGMAP
RELATION time.r PRECOMPUTE ('Yr98', 'Yr99')
RELATION product.r
RELATION geography.r PRECOMPUTE (geography NE 'Atlanta')
END

AGGREGATEコマンドは、すべての製品およびAtlantaを除くすべての地域に関する、Yr98およびYr99の値を集計します。他のすべての集計は、即時計算されます。

例9-19 値セットの使用

time.typeという名前の階層ディメンションがあり、そのディメンション値は順番にFiscalおよびCalendarであるとします。それらの階層は競合しており、一部のtimeデータを事前計算して、残りを即時計算するとします。Calendar階層は階層ディメンションにおける最後のディメンション値であるため、値セットを定義してFiscal階層の正しい結果を取得する必要があります。

まず、次の文を使用して値セットを定義および移入します。

DEFINE time.vs VALUESET time
LIMIT time.vs TO 'Calendar' 'Fiscal'

次に、次のRELATION文で値セットを使用できます。Fiscal階層は値セットにおける最後の階層であるため、集計されるデータはFiscal階層に対して正確になります。

RELATION time.r(time.vs) PRECOMPUTE ('Yr99', 'Yr00')

例9-20 ARGSキーワードを使用するRELATION文による集計

RELATION文の引数を文に直接、またはテキスト変数の値として指定できます。たとえば、次の文はWEIGHTBY wobjを引数として指定します。

RELATION time.r OPERATOR wsum ARGS WEIGHTBY wobj

または、値がWEIGHTBY句のテキストである引数の変数を定義できます。

DEFINE argvar TEXT
argvar = 'WEIGHTBY wobj'

その後、RELATION文はWEIGHTBY句を含むテキスト変数を指定できます。

RELATION time.r OPERATOR WSUM ARGS argvar

例9-21 メジャー・ディメンションを使用した集計

単一のAGGREGATEコマンドを使用して、sales、units、priceおよびinventory変数を集計するとします。各変数に同じ演算子を使用する場合、メジャー・ディメンションを使用する必要はありません。しかし、異なる集計演算を指定する場合は、メジャー・ディメンションを使用する必要があります。

次の文では、measureという名前のディメンションが定義されます。

DEFINE measure DIMENSION TEXT

その後、MAINTAIN文を使用して、ディメンション値をmeasureディメンションに追加できます。

MAINTAIN measure ADD 'sales', 'units', 'quota', 'inventory'

measureディメンションを使用して、演算子変数として使用するmeas.opvarという名前のテキスト変数をディメンション化します。

DEFINE meas.opvar TEXT WIDTH 2 <measure>

次の文では、OPVARに値が追加されます。

meas.opvar (measure 'sales') = 'SU'
meas.opvar (measure 'units') = 'SU'
meas.opvar (measure 'price') = 'HA'
meas.opvar (measure 'inventory') = 'HL'

集計仕様は、次のようになる可能性があります。RELATION文に演算子変数を指定する場合、メジャー・ディメンション(次の例ではmeasure)の名前を指定するMEASUREDIM文を集計仕様に含める必要があります。

DEFINE opvar.aggmap AGGMAP
AGGMAP
RELATION geography.parentrel PRECOMPUTE (geography.lvldim 2 4)
RELATION product.parentrel OPERATOR opvar
RELATION channel.parentrel OPERATOR opvar
RELATION time.parentrel OPERATOR opvar
MEASUREDIM measure
END

例9-22 明細項目ディメンションを使用した集計

2つの変数actualおよびbudgetがあり、次のディメンションを持つとします。

<time line division>

様々な方法を使用して、様々な明細項目を計算します。演算子変数として使用するテキスト変数を作成します。

DEFINE line.opvar TEXT WIDTH 2 <line>

その後、各明細項目に適切な演算子を含むline.opvarを移入します。たとえば、次のようになります。

line.opvar (line 'Net.Income') = 'SU'
line.opvar (line 'Tax.Rate') = 'AV'

集計仕様は、次のようになる可能性があります。

DEFINE LINE.AGGMAP AGGMAP
AGGMAP
RELATION time.parentrel OPERATOR line.opvar
RELATION division.parentrel
END

例9-23 スキップレベル集計

salesデータを集計するとします。sales変数は、geography、product、channelおよびtimeによってディメンション化されます。

まず、各ディメンションの階層を検討します。各階層にいくつレベルがあるか。ユーザーが通常問合せを行うデータのレベルはどれか。新規ワークスペースを設計するのはいつか、ユーザーが問い合せを予定するデータのレベルはどれか。

ユーザーがtime階層のsalesデータを問い合せるかどうかについて、次の表にある情報を把握できたとします。

時間レベル名

記述レベル名

ディメンション値の例

ユーザーは通常このレベルの問合せを行うか

L1

年

Year99、Year00

はい

L2

四半期

Q3.99、Q3.99、Q1.00

はい

L3

月

Jan99、Dec00

はい

一方、次の表はユーザーがgeography階層のsalesデータをどのような方法で問い合せるかを示しています。

地理的レベル名

記述レベル名

ディメンション値の例

ユーザーは通常このレベルの問合せを行うか

L1

世界

World

はい

L2

大陸

Europe、Americas

いいえ

L3

国

Hungary、Spain

はい

L4

市区町村

Budapest、Madrid

はい

最後に、次の表はユーザーがproductディメンション階層のsalesデータをどのような方法で問い合せるかを示しています。

製品レベル名

記述レベル名

ディメンション値の例

ユーザーは通常このレベルの問合せを行うか

L1

全製品

Totalprod

はい

L2

除算

Audiodiv、Videodiv

はい

L3

カテゴリ

TV、VCR

はい

L4

製品

Tuner、CDplayer

はい

ユーザーがデータを問い合せる方法に関するこれらの情報を活用して、次のような集計の方針を採用します。

- すべてのレベルに対して問合せが頻繁に行われるため、timeおよびproductを完全に集計します。

- geographyディメンションについては、頻繁に問合せが行われるL1(World)およびL3(Country)のデータを集計します。しかし、L2に対する問合せは少ないため、即時計算します。

最下位レベルのデータは、アナリティック・ワークスペースにロードされます。集計データは、このソース・データから計算されます。

このため、集計仕様は次のようになる可能性があります。

RELATION time.parentrel
RELATION geography.parentrel PRECOMPUTE (geog.leveldim 'L3' 'L1')
RELATION product.parentrel

例9-24 PRECOMPUTE句を含むRELATION文を使用した集計仕様

この集計仕様は、RELATION文にPRECOMPUTE句を使用して、AGGREGATEコマンドにより集計されるデータを制限します。

DEFINE gpct.aggmap AGGMAP
LD Aggmap for sales, units, quota, costs
AGGMAP
RELATION geography.parentrel PRECOMPUTE (geography.levelrel 'L3')
RELATION product.parentrel PRECOMPUTE (LIMIT(product complement 'TotalProd'))
RELATION channel.parentrel
RELATION time.parentrel PRECOMPUTE (time NE '2001')
END

AGGINDEX

圧縮されていないキューブで使用される集計仕様で、AGGINDEX文は、AGGREGATEコマンドにより即時計算されるデータ・セルの索引(コンポジット・タプルを意味する)が作成されるかどうかを、Oracle OLAPに認識させます。AGGINDEX文では、コンポジットに含まれるディメンションのコンポジット・タプルを作成するようAGGREGATEコマンドに通知します。

それらの索引は、AGGMAPのMODEL文、およびACROSS句を使用する文で使用され、Oracle OLAPがコンポジットによってディメンション化される変数をループ処理するのに役立ちます。それらの文を使用すると、すべてのデータが計算されます。その場で一部のデータを計算するように指定する場合、そのデータが欠落しているように見えます。AGGINDEXをYESに設定すると、AGGREGATEファンクションを使用して即時計算を実行する(つまり、データを集計する変数に、AGGREGATEファンクションをコールするNAトリガー・プロパティを追加する)かどうかに関係なく、文は欠落しているデータへのアクセスを試みます。

索引が作成されていて、AGGREGATEファンクションを使用する場合、MODEL(またはACROSS句を使用する文)が欠落しているデータを要求すると、そのデータは即時計算されます。これは、文には必要なすべてのデータが含まれているため、MODEL(または他の文)の結果が正しいことを意味します。

それらの索引が作成されない場合、欠落しているデータは計算されません。したがって、AGGREGATEファンクションを使用した場合でも、索引が必要な文は欠落しているデータをNAデータとして解釈します。

構文

AGGINDEX {YES|NO}

パラメータ

YES

(デフォルト) AGGREGATEコマンドがaggmapとともに使用された場合は必ず、作成可能なすべての索引が作成されたことを確認します。つまり、事前計算されるデータと、即時計算されるデータの両方の索引が作成されます。作成可能なすべての索引を作成すると、AGGREGATEコマンドの実行時間が長くなります。AGGINDEXをYESに設定する必要がある場合の詳細は、「値がYESのAGGINDEXを使用する場合」を参照してください。

NO

即時計算されるデータの索引を作成しません。それらの索引値の作成を省略するとAGGREGATEコマンドの実行は短縮されますが、Oracle OLAPは、AGGMAPのMODEL文またはACROSS句が実行されている場合は必ず、計算されていないデータをNAデータとして処理します。AGGINDEXをNOに設定する必要がある場合の詳細は、「値がNOのAGGINDEXを使用する場合」を参照してください。

使用上の注意

値がYESのAGGINDEXを使用する場合

値がYESのAGGINDEXを使用する主な利点は、即時計算されるように指定したデータにOracle OLAPが常にアクセスする点です。AGGREGATEファンクションをコールする変数の$NATRIGGERプロパティを作成した場合、変数は完全に事前計算されたように見えます。これは、NA値が検出された場合、AGGMAPのMODEL文またはACROSS句の実行時にNAトリガーがコールされることを意味します。NAトリガーがコールされると、AGGREGATEファンクションが実行され、データが即時計算されます。

AGGINDEXの値がNOの場合、マテリアライズされたコンポジット・タプルおよびコンポジットに含まれないディメンションのすべての値のデータを集計するためにのみ、NAトリガーがコールされます。PRECOMPUTEDではないコンポジット・ディメンション・メンバーのデータは、NA値として解釈されます。

たとえば、次の定義を持つ2つの変数sales1およびsales2があるとします。

DEFINE sales1 DECIMAL <time, SPARSE <product, geography>>
DEFINE sales2 DECIMAL <time, SPARSE <product, geography>>

次に、次の定義を持つsales.aggという名前のaggmapオブジェクトがあるとします。

DEFINE sales.agg AGGMAP

仕様をsales.agg aggmapに追加する場合、time、productおよびgeographyについて、NAを指定するPRECOMPUTE句を含めたRELATION文を入力します。これにより、どのデータも集計されなくなります。かわりに、このaggmapを使用する変数のすべてのデータが即時計算されます。

RELATION time.r PRECOMPUTE (NA)
RELATION product.r PRECOMPUTE (NA)
RELATION geography.r PRECOMPUTE (NA)
AGGINDEX YES

ここで、次の$NATRIGGERプロパティをsales1変数にアタッチします。

CONSIDER sales1
PROPERTY '$NATRIGGER' 'AGGREGATE(sales1 USING sales.agg)'

ここで、sales1のAGGREGATEコマンドをコールして、索引値をインスタンス化します。

AGGREGATE sales1 using sales.agg

aggmapがAGGINDEX YESを指定する場合、次の文のAGGINDEXの影響を考慮します。

sales2 = sales1 ACROSS SPARSE <product, geography>

この文は、sales1のデータをループ処理し、値をsales2にコピーします。この文により、NAトリガーは、sales1で即時計算されるように指定されたすべてのデータにAGGREGATEファンクションをコールします。したがって、集計後にsales2にはsales1のコピーに加えて、すべての集計データ・セル(sales1データが完全に事前計算された、つまり完全にロールアップされた場合に計算されるセル)が含まれます。

ただし、sales.agg集計仕様にAGGINDEX NO文を配置した場合、sales2にはsales1のデータのコピーと、コンポジット・ディメンションのリーフ値の集計データ・セルが含まれます。

timeディメンションはコンポジットに含まれておらず、AGGINDEXの値はそれに影響を与えないため、どちらの場合も$NATRIGGERがコールされてtimeデータを集計することに注意してください。

値がNOのAGGINDEXを使用する場合

次のいずれかに当てはまることがわかっている場合、値がNOのAGGINDEXを使用できます。

- アプリケーションがAGGMAPコマンドのMODEL文またはACROSS句を含まない。

- aggmapのMODEL文は、RELATION文の前に表示されます。MODEL文またはACROSS句の結果が加算によるもので、集計が必要なデータを安全に即時計算できる。

この2つの場合には、即時計算するように指定したデータが、適切な時期に確実に使用できます。

AGGINDEXをNOに設定すると、索引のサイズが減少され、アプリケーションの全体的なパフォーマンスが向上します。

値がNOのAGGINDEXを使用して問題が発生する場合

MODELを実行して集計対象のすべてのデータが集計されたと想定される場合に、実際のデータが存在する場所でNAデータが取得されることがあります。たとえば、timeディメンションを含むコンポジットを持つ変数があるとします。年間総計から4番目の四半期を減算する計算を実行します。Yearの値が動的に計算され、AGGINDEX文がNOに設定されている場合、計算の結果はNAとなります。Yearの値が事前計算されたか、AGGINDEXがYESに設定されている場合、MODELは最初の3つの四半期の合計に等しい結果を正しく計算します。

既存のデータに基づいた索引の作成

AGGINDEXの値がYESの場合、既存のデータの集計に必要な索引のみが作成されます。たとえば、コンポジットのディメンションの1つがtimeという名前であるとします。timeディメンションの最下位レベルのデータは、月レベルです。そのため、最下位レベルのデータに関連付けされたディメンション値は、Jan99、Feb99などです。月のデータが、四半期および年に集計されます。年の最初の6か月のデータがあるとします。AGGINDEXの値がYESの場合、Q1、Q2およびYr99ディメンション値の索引が作成されますが、Q3およびQ4には作成されません。

例

AGGINDEX文の使用例は、例9-11「集計仕様におけるAGGINDEX文の使用方法」を参照してください。

BREAKOUT DIMENSION

集計仕様内では、BREAKOUT DIMENSION文によって、ターゲット変数のディメンションをソース変数の1つ以上のディメンションにマップする方法が指定されています。この文は、ある変数(ソース変数)から、詳細データを含む変数ではなく異なるディメンション(分割ディメンション)を持つ別の変数(ターゲット変数)に詳細データを集計する場合に、集計仕様で使用できます。

構文

BREAKOUT DIMENSION dimname BY relation [, relation...] -

OPERATOR operation [ARGS argument]

ここで、

relationの構文は次のとおりです。

relationname [IGNORE ignore_dim_value [DEFAULT default_dim_value]]

argumentには、様々なオプションの設定を指定します。次の1つ以上の句を指定できます。

DIVIDEBYZERO {YES|NO}
DECIMALOVERFLOW {YES|NO}
NASKIP {YES|NO}
WEIGHTBY [WNAFILL {number | NA}] wobj

パラメータ

dimname

詳細データ(つまり、ソース変数)を含む変数内のディメンションの名前。

relationname

リレーションの名前。その値が、ターゲット変数のディメンションをdimnameに関連付けます。

IGNORE ignore_dim_value

このパラメータを指定すると、ignore_dim-valueで指定した値に対してターゲット・ディメンションがQDRを設定している場合、AGGREGATEはrelationnameで指定したリレーションをソース・ディメンションの制限に使用しません。

DEFAULT default_dim_value

このパラメータを指定すると、すべてのリレーションにIGNORE句が含まれている場合、AGGREGATEはQDRの作成にリレーションを使用せずに、default_dim-value値で指定された値を使用します。すべてのリレーションにIGNORE句が含まれていて、かつDEFAULT句を指定していない場合、AGGREGATEは制限に使用するリレーションを任意に選択します。

ignore_dim-valueで指定したディメンション値に対してdimnameがQDRを設定している場合、AGGREGATEはrelationnameで指定したリレーションをソース・ディメンションの制限に使用しません。

OPERATOR

データの集計に使用される計算方法を識別します。

operation

実行する集計の種類を説明するキーワード。キーワードは、表9-1「集計方法」にリストされています。

ARGS

集計のオプション処理を示します。

DIVIDEBYZERO

0(ゼロ)で割り算できるかどうかを指定します。

YESはゼロによる除算を許可します。ゼロによる除算を伴う文がエラーなしで実行されますが、NA結果が生成されます。

NOはゼロによる除算を許可しません。ゼロによる除算を伴う文が実行を停止し、エラー・メッセージが生成されます。

デフォルト値は、DIVIDEBYZEROオプションの現行の値です。

DECIMALOVERFLOW

10進オーバーフローを許可するかどうかを指定します。10進オーバーフローは、計算結果が非常に大きく、数値表記の指数部分で表示できなくなった場合に発生します。YESを指定すると、オーバーフローを許可しますが、これは、オーバーフローを生成する計算がエラーなしで実行され、NA結果が生成されることを意味します。NOを指定すると、オーバーフローを許可しませんが、これは、オーバーフローを伴う計算が実行を停止し、エラー・メッセージが出力されることを意味します。デフォルト値は、DECIMALOVERFLOWオプションの現行の値です。

NASKIP

NA値が入力されるかどうかを指定します。集計時にOracle OLAPでNA値を無視する場合はYESを指定しますが、これによって、実際の値のみが計算に使用されます。Oracle OLAPでNA値も計算の対象とする場合は、NOを指定しますが、これによって、値のいずれかがNAとみなされると、計算によってNAが返されます。デフォルト値は、NASKIPオプションの現行値です。

NASKIP句に指定した値は、operationにHAVERAGE、HFIRST、HLAST、HWAVERAGE、HWFIRST、HWLASTを指定した場合に実行される計算に影響を与えません。

WEIGHTBY

加重集計を実行することを示します。operationにHWAVERAGE、HWFIRST、HWLAST、SSUM、WAVERAGE、WFIRST、WLASTまたはWSUMを指定する場合は、WEIGHTBY句を含める必要があります。WEIGHTBY句には、常にwobj引数が含まれ、オプションでWNAFILLキーワードを含めることができます。WEIGHTBY句の使用の詳細は、AGGMAPコマンドのRELATION(集計用)文を参照してください。

WNAFILL

NA値の処理を示します。WNAFILLのデフォルト値は、演算の値に応じて異なります。

number

すべてのNA値の数を代替します。その数値は、加重オブジェクト、加重計算式または加重リレーション内のすべてのNA値を置き換えます。HWAVERAGEおよびSSUMのデフォルト、1.0がHWFIRST、HWLAST、WAVERAGE、WFIRST、WLASTおよびWSUMのデフォルトです。

NA

NA値をNAとして指定するように指定します。NAは、ORのデフォルトです。

WNAFILL句の使用の詳細は、AGGMAPコマンドのRELATION(集計用)文を参照してください。

wobj

加重値を提供する変数、計算式またはリレーション。数値またはブール値になります。wobjがブール値の場合、TRUEのとき加重は1.0となり、FALSEのときの加重は0.0となります。計算式および集計される変数のディメンション性に応じて、必要な場合のみ計算式に問合せが行われます。wobjがリレーションの場合、1次元のセルフ・リレーションになります。wobjの値の指定に関する詳細は、AGGMAPコマンドのRELATION(集計用)文を参照してください。

例

BREAKOUT DIMENSION文の使用例は、例9-12「ディメンション属性による集計」を参照してください。

CACHE

集計仕様のCACHE文によって、Oracle OLAPに、計算されたデータをキャッシュまたは格納するかどうか、変数データが他の変数からの詳細データを使用して集計された場合にリーフ・データまたは詳細データを移入するかどうか、サマリー値がNAと計算される場合にNA値をキャッシュするかどうかを認識させることができます。

注意:
CACHE文は、AGGREGATEファンクションを使用して即時集計された変数データを格納またはキャッシュするかどうかを決定する唯一の因子です。「集計データを格納またはキャッシュするかどうかのOracle OLAPによる決定方法」を参照してください。

構文

CACHE {NOSTORE|NONE|STORE|SESSION|DEFAULT} [LEAF|NOLEAF] [NA|NONA]

パラメータ

NONE

NOSTORE

AGGREGATEファンクションを使用して計算されるデータについて、AGGREGATEファンクションが実行されるたびにOracle OLAPがそのデータを計算するように指定します。この2つのキーワードのいずれかを指定した場合、Oracle OLAPはAGGREGATEファンクションによって計算されたデータを格納またはキャッシュしません。

STORE

AGGREGATEファンクションを使用して計算されるデータについて、AGGREGATEファンクションにより計算されたデータをOracle OLAPがデータベースの変数に格納するように指定します。このオプションを指定すると、アナリティック・ワークスペースが更新およびコミットされる際に、集計結果が永続的に変数に格納されます。

SESSION

AGGREGATEファンクションを使用して計算されるデータについて、AGGREGATEファンクションにより計算されたデータをOracle OLAPがセッション・キャッシュにキャッシュするように指定します(「Oracle OLAPセッション・キャッシュの概要」を参照)。このオプションを指定すると、集計結果が更新およびコミット中に無視され、セッション後に廃棄されます。

注意:
SESSCACHEがNOに設定されている場合、SESSIONを指定してもOracle OLAPはデータをキャッシュしません。この場合、SESSIONの指定は、NONEの指定と同じことになります。

DEFAULT

(デフォルト)AGGREGATEファンクションを使用して計算されるデータについて、そのデータの処理方法を決定する際、VARCACHEオプションの値を使用するように指定します。「集計データを格納またはキャッシュするかどうかのOracle OLAPによる決定方法」を参照してください。

LEAF

別の変数からの詳細データを使用して変数データが集計された場合、Oracle OLAPが変数のリーフ・データを計算するように指定します。

NOLEAF

(デフォルト)別の変数からの詳細データを使用して変数データが集計された場合、Oracle OLAPが変数のリーフ・データを計算しないように指定します。

NA

AGGREGATEファンクションを使用して計算されるデータについて、AGGREGATEファンクションの実行結果であるNA値がOracle OLAPセッション・キャッシュ内に格納されるように指定します。この場合、その式としてのAGGREGATEファンクションに$NATRIGGERプロパティを持つ変数が存在する場合、Oracle OLAPはその変数の値を再計算しません。(NA値のキャッシュの詳細は、「$NATRIGGERの結果を格納またはキャッシュするかどうかのOracle OLAPによる決定方法」を参照)。

NONA

AGGREGATEファンクションを使用して計算されるデータについて、AGGREGATEファンクションの実行結果であるNA値をOracle OLAPがキャッシュしないように指定します。この場合、その式としてのAGGREGATEファンクションに$NATRIGGERプロパティを持つ変数が存在する場合、Oracle OLAPはその変数の値を再計算します。

使用上の注意

NOSTOREを使用する場合

ユーザーが事前計算されたデータを修正する可能性があり、AGGREGATEファンクションにより計算されたすべてのデータとそれらのユーザーが変更した内容の一貫性を保つ場合は、NOSTOREを使用します。

つまり、geographyディメンションにある3つの店舗のsalesなど、詳細レベルのデータをユーザーが変更するとします。geographyディメンションは、店舗から都市、州、地域、国にデータをロールアップします。つまり、geographyディメンションの階層には5つのレベルがあります。ここで、ユーザーは店舗レベル(使用している詳細データ)、地域レベルおよび国レベルでのみデータにアクセスする傾向があるとします。それらが、売上データをロールアップして、それをデータベースにコミットするレベルです。ユーザーは都市および州レベルのデータにはアクセスしないため、それらの2つのレベルにあるデータ・セルは即時計算するように指定します。ユーザーが店舗レベルのデータを修正して、都市データにアクセスすると、ユーザーが要求するたびに都市データが計算されます。そのため、ユーザーが店舗レベルの詳細に対して行う変更内容により、ユーザーが都市または州レベルのデータ・セルにアクセスするたびに、都市および州レベルに正確にロールアップされます。(ただし、地域および国レベルのセルには事前計算されたデータが格納されているため、それらのセルには該当しません。)

STOREまたはSESSIONを使用する場合

STOREまたはSESSIONを使用する利点は、問合せのパフォーマンスが向上することです。たとえば、複数のユーザーが変数のデータを参照するために表ツールを使用し、個々のユーザーが同じデータ・セルを同じセッションで複数回要求するとします。デフォルトのNOSTOREを使用する場合、AGGREGATEコマンドを使用して集計されないデータは、AGGREGATEファンクションでFORECALCキーワードを使用しない場合でも、ユーザーがそのデータを要求するたびに計算される必要があります。一方、STOREまたはSESSIONを使用する場合、データの特定のセルは、変数またはセッション全体にわたるキャッシュのいずれかで使用できるため、一度のみ計算されます。そのため、次にユーザーがそのデータ・セルを要求する際、データは即時計算されるかわりに変数またはキャッシュから返されるため、ユーザーにとっては問合せ時間は短縮されます。

多くの場合、AGGREGATEファンクションを使用して計算されたデータは、即時計算の目的にそぐわないためデータベースに永続的には格納しません。

- 集計された値が永続的にデータベースにコミットされないようにするには、SESSIONを使用します。

- 次のいずれかに該当することがわかっていて、AGGREGATEファンクションを使用して即時計算されるデータがデータベースにコミットされることがない場合は、STOREを使用します。

- アナリティック・ワークスペースのユーザーは、データを読取り専用としてのみ開くことができる。

- アナリティック・ワークスペースのユーザーがUPDATE文およびCOMMIT文を発行できないことがわかっている。

注意:
STOREを使用する場合、ユーザーが事前計算されたデータを修正する可能性があり、AGGREGATEファンクションを使用して即時計算されるように指定したデータにユーザーがアクセスする場合は、注意して使用する必要があります。問題は、ユーザーがFORCECALCキーワードとともにAGGREGATEファンクションを使用して変更しないかぎり、または、集計対象の変数に$AGGREGATE_FORCECALCプロパティが存在しないかぎり、ユーザーが修正する前にAGGREGATEファンクションを使用して計算されたデータがユーザーの変更内容を反映しない点にあります。

例

集計仕様でCACHE文を使用する例は、例9-13「集計仕様におけるCACHE文の使用方法」および例9-14「詳細レベルを除くすべての階層レベルの移入」を参照してください。

DIMENSION(集計用)

集計仕様で、DIMENSION文はステータスをディメンションの単一の値に設定します。集計仕様がDIMENSION文によりそのような単一の値を指定しない場合、Oracle OLAPは集計の実行時にディメンションの現行のステータスの値を使用します。

DIMENSION文を使用して、ディメンションのステータスが、集計で使用する値に確実に設定されるようにします。ソース・オブジェクト、基礎オブジェクトおよびターゲット・オブジェクトによって共有されない各ディメンションには、個別のDIMENSION文を使用する必要があります。

構文

DIMENSION dimension 'dimval'

パラメータ

dimension

制限するディメンションの名前。

dimval

集計中にディメンション・ステータスを設定するディメンションの単一の値を表すTEXT式。

DROP DIMENSION

集計仕様で、DROP DIMENSION文は変数間の非階層集計の実行方法を指定します。この文は、ある変数(ソース変数)から別の変数(ターゲット変数)に詳細データを集計し、ソース変数の非階層ディメンションで集計を行う場合に、集計仕様で使用します。この場合、このディメンションに関連付けられたソース変数の値が、集計されてターゲット変数に移入されるため、ターゲット変数のディメンションはソース変数よりも1つ少なくなります(削除されたディメンション)。

構文

DROP DIMENSION dimname [VALUES {valsetname|ALL}  OPERATOR operation [ARGS argument]

ただし、argumentには、次の句のうち1つ以上を指定できます。

DIVIDEBYZERO {YES|NO}

DECIMALOVERFLOW {YES|NO}

NASKIP {YES|NO}

WEIGHTBY [WNAFILL {number|NA}] wobj

パラメータ

dimname

詳細データを含むソース変数内のディメンションの名前。

VALUES

集計中にdimnameのステータスを設定します。

valueset

dimnameにより指定されるディメンションのステータスを決定する値セット・オブジェクトの名前。

ALL

dimnameのすべての値をステータスにあるように指定します。

OPERATOR

データの集計に使用される計算方法を識別します。

operation

実行する集計の種類を説明するキーワード。キーワードは、表9-1「集計方法」にリストされています。

ARGS

集計のオプション処理を示します。

DIVIDEBYZERO

0(ゼロ)で割り算できるかどうかを指定します。YESを指定すると、ゼロによる除算が許可されますが、これによって、ゼロによる除算を伴う文がエラーなしで実行され、NA結果が生成されることを意味します。NOを指定すると、ゼロによる除算を許可しませんが、これは、ゼロによる除算を伴う文が実行を停止し、エラー・メッセージが生成されることを意味します。デフォルト値は、DIVIDEBYZEROオプションの現行の値です。

DECIMALOVERFLOW

10進オーバーフローを許可するかどうかを指定します。10進オーバーフローは、計算結果が非常に大きく、数値表記の指数部分で表示できなくなった場合に発生します。YESを指定すると、オーバーフローを許可しますが、これは、オーバーフローを生成する計算がエラーなしで実行され、NA結果が生成されることを意味します。NOを指定すると、オーバーフローを許可しませんが、これは、オーバーフローを伴う計算が実行を停止し、エラー・メッセージが出力されることを意味します。デフォルト値は、DECIMALOVERFLOWオプションの現行の値です。

NASKIP

NA値が入力されるかどうかを指定します。集計時にOracle OLAPでNA値を無視する場合はYESを指定しますが、これによって、実際の値のみが計算に使用されます。Oracle OLAPでNA値も集計の対象とする場合は、NOを指定しますが、これによって、値のいずれかがNAとみなされると、計算によってNAが返されます。デフォルト値は、NASKIPオプションの現行の値です。

NASKIP句に指定した値は、operationにHAVERAGE、HFIRST、HLAST、HWAVERAGE、HWFIRST、HWLASTを指定した場合に実行される計算に影響を与えません。

WEIGHTBY

加重集計を実行することを示します。operationにHWAVERAGE、HWFIRST、HWLAST、SSUM、WAVERAGE、WFIRST、WLASTまたはWSUMを指定する場合は、WEIGHTBY句を含める必要があります。WEIGHTBY句には、常にwobj引数が含まれ、オプションでWNAFILLキーワードを含めることができます。WEIGHTBY句の使用の詳細は、AGGMAPコマンドのRELATION(集計用)文を参照してください。

WNAFILL

NA値の処理を示します。WNAFILLのデフォルト値は、演算の値に応じて異なります。WNAFILL句の使用の詳細は、AGGMAPコマンドのRELATION(集計用)文を参照してください。

数値

すべてのNA値の数を代替します。その数値は、加重オブジェクト、加重計算式または加重リレーション内のすべてのNA値を置き換えます。

- 0.0がHWAVERAGEおよびSSUMのデフォルトです。

- 1.0がHWFIRST、HWLAST、WAVERAGE、WFIRST、WLASTおよびWSUMのデフォルトです。

NA

NA値をNAとして指定するように指定します。NAは、ORのデフォルトです。

wobj

加重値を提供する変数、計算式またはリレーション。数値またはブール値になります。wobjがブール値の場合、TRUEのとき加重は1.0となり、FALSEのときの加重は0.0となります。計算式および集計される変数のディメンション性に応じて、必要な場合のみ計算式に問合せが行われます。wobjがリレーションの場合、1次元のセルフ・リレーションになります。wobjの値の指定に関する詳細は、AGGMAPコマンドのRELATION(集計用)文を参照してください。

例

集計仕様におけるDROP DIMENSION文の使用例は、例9-15「異なる変数への集計」を参照してください。

MEASUREDIM(集計用)

集計仕様で、MEASUREDIM文は演算子変数または引数変数の定義で指定されるメジャー・ディメンションの名前を識別します。

構文

MEASUREDIM name

パラメータ

name

メジャー・ディメンションの名前。メジャー・ディメンションは、ユーザーが定義するディメンションです。ディメンション値は、既存の変数の名前です。

注意:
メジャー・ディメンションは、aggmapオブジェクトの定義に含まれている場合は指定できません。

使用上の注意

メジャー・ディメンションの定義

次の文では、MEASUREという名前のディメンションが定義されます。

DEFINE measure DIMENSION TEXT

メジャー・ディメンションの移入

一度メジャー・ディメンションを定義したら、MAINTAIN文を使用してディメンション値をMEASUREディメンションに追加できます。

次の文では、sales、units、priceおよびinventory変数の名前が、そのディメンション値としてmeasureに追加されます。

MAINTAIN measure ADD 'sales', 'units', 'price', 'inventory'

演算子変数を伴うメジャー・ディメンションの使用

メジャー・ディメンションを使用する目的は、非加算集計演算子を使用する場合の柔軟性がもたらす利点を活用することです。演算変数または引数変数の定義で、メジャー・ディメンションを使用できます。

次の文は、opvarという名前の演算子変数の定義および移入方法を示しています。

DEFINE opvar TEXT <measure>
opvar (measure 'sales') = 'SUM'
opvar (measure 'inventory') = 'HLAST'

例

MEASUREDIM文を含む集計仕様の例は、例9-16「集計仕様におけるMEASUREDIM文の使用方法」を参照してください。

MODEL(集計内)

集計仕様で、MODEL文は事前定義されたモデルを実行します。

構文

MODEL modelname [PRECOMPUTE ALL | PRECOMPUTE NA]

パラメータ

modelname

事前定義されたMODELオブジェクトの名前を含むテキスト式。

PRECOMPUTE ALL

PRECOMPUTE NA

モデルが静的(事前計算の)モデルか、動的モデルかを指定します。

- PRECOMPUTE ALLがデフォルトで、静的モデルを指定します。次の条件に合致する必要があります。

- 集計仕様でこの文の前に配置されるRELATION文またはMODEL文にも、PRECOMPUTE ALLを指定する。

- 集計仕様でこのコマンドの後に配置されるRELATION文またはMODEL文には、PRECOMPUTE ALLまたはPRECOMPUTE NAのどちらを指定することもできる。

- PRECOMPUTE NAは動的モデルを指定します。実行時のモデルの実行については、次の条件を満たす必要があります。

- 集計仕様のRELATION文はすべて、PRECOMPUTE NAとして指定したMODEL文の前に配置する。

- 集計仕様でこの文の後に配置される別のMODEL文にも、PRECOMPUTE NAを指定する。

使用上の注意

動的モデルと非加算演算子

MODEL文は、集計仕様内にコーディングされた順序で実行されます。通常、実行順が結果に影響する場合、MODEL文が対応するRELATION文の後に続きます。

非加算演算子(MAXなど)を使用するRELATION文の順序は計算結果に影響を与えること、また、動的モデル(つまり、PRECOMPUTE NA句を含むMODEL文)はすべてのRELATION文の後に配置する必要があることから、非加算演算子とともに動的モデルを使用する場合には、いくらかの制約があります。

例

集計仕様におけるモデルの使用例は、例9-17「集計におけるモデルの解決」を参照してください。

PRECOMPUTE

集計仕様で、PRECOMPUTE文は変数のどの集計値を計算するかを指定します(AGGREGATEコマンドとともに使用)。

注意:
PRECOMPUTE文を含む集計仕様では、RELATION文の中にPRECOMPUTE句を使用できません。

構文

PRECOMPUTE precompute-phrase

ただし、precompute-phraseには、次のいずれかを指定します。

n% | AUTO

ALL

NA | NONE

パラメータ

n%

AGGREGATEコマンドを使用してデータベースのメンテナンス手順として集計する変数値の割合を明示的に指定します。Oracle OLAPではその割合を基に、集計アドバイザという特殊機能を使用して、集計の対象となる値が具体的に決定されます

AUTO

AGGREGATEコマンドを使用してデータベースのメンテナンス手順として集計する変数値とその数が、集計アドバイザを通じて決定されるよう指定します。

ALL

すべての集計データが、AGGREGATEコマンドを使用して事前に計算されるよう指定します。

NA

NONE

AGGREGATEファンクションを使用してすべての値を即時計算するように指定します(つまり、AGGREGATEコマンドにより事前計算されるデータはありません)。

RELATION(集計用)

集計仕様で、RELATION文は階層ディメンションでのデータの集計方法を指定します。多くの場合、集計仕様には、変数の各階層ディメンションに1つのRELATION文が含まれています。

注意:
AGGMAPコマンドの一部としてのみ使用可能なこのRELATION文は、ディメンションのデフォルト・リレーションを定義するRELATIONコマンドや、ALLOCMAPコマンドの一部として使用されるRELATION文とは混同しないでください。

構文

RELATION rel-name [(valueset...)] -

[PRECOMPUTE (precompute-phrase)] -

[OPERATOR {operation|opvar}] -

[PARENTALIAS dimension-alias-name] -

[ARGS {argument|argsvar}] -

[LOAD_STATUS(status-valueset-name)]

ここで、

- precompute-phraseは、次のいずれか1つ以上です。

n% | AUTO

dimension-values

positions-of-dim-values

level-relation-name level-name...

valueset2

ALL

NA | NONE

- argumentは、次のいずれか1つ以上です。

DIVIDEBYZERO {YES|NO}

DECIMALOVERFLOW {YES|NO}

NASKIP {YES|NO}

WEIGHTBY [WNAFILL {number | NA}] wobj

COUNT {YES|NO}

- argsvarは、一部またはすべてのディメンション値にargument句を含むテキスト変数です。

パラメータ

rel-name

階層内のすべてのディメンション値の親を識別することにより、階層を定義するリレーション。

valueset

集計中に、1つ以上のディメンションのステータスを設定します。これは、現行のステータスを変更します。

PRECOMPUTE

一部のディメンション値がAGGREGATEコマンドでのみ移入されることを示します。RELATION文のPRECOMPUTE句は、AGGREGATEコマンドにより集計されるデータを制限します。最も単純な形式では、PRECOMPUTE句がLIMIT dimension TO文と同様の役割を果すと考えることができます。デフォルトの制限はディメンション上のものであり、RELATION文で明示的に名前指定されないことに注意してください。

注意:
いずれかのRELATION文の中にPRECOMPUTE句を含む集計仕様では、PRECOMPUTE文を使用できません。また、圧縮コンポジットに対するRELATION文にもPRECOMPUTE句を指定できません。

n%

AGGREGATEコマンドを使用してデータベースのメンテナンス手順として集計する変数値の割合を明示的に指定します。Oracle OLAPではその割合を基に、集計アドバイザという特殊機能を使用して、集計の対象となる値が具体的に決定されます

AUTO

AGGREGATEコマンドを使用してデータベースのメンテナンス手順として集計する変数値とその数が、集計アドバイザを通じて決定されるよう指定します。

dimension-values

ディメンションの1つ以上の値のリスト。

positions-of-dim-values

INTEGERまたはNUMBER値を持つディメンション以外のすべてのディメンションについて、事前計算するディメンション値の位置。INTEGER値をカンマで区切って位置を指定します。

valueset2

値セットの名前。この引数を含める場合、値セットのディメンション値によってディメンション化されるデータのみがAGGREGATEコマンドにより事前計算されます。残りの値は、即時計算できます。

ディメンションの現行のステータスは、事前計算されるデータも制限する場合があることに注意してください。詳細は、AGGREGATEコマンドを参照してください。

ALL

すべてのディメンション値について、データを事前計算するように指定します。

NA

NONE

AGGREGATEファンクションを使用してすべての値を即時計算するように指定します(つまり、AGGREGATEコマンドにより事前計算されるデータはありません)。

level-relation-name level-name ...

事前計算されるディメンションのレベルを指定します。level-relation-nameには、ディメンション値とそのディメンションのレベルの名前とを関連付けるリレーション・オブジェクトの名前をTEXT値で指定します。level-nameには、level-relation-nameで使用した同じレベル名を使用して、1つ以上のレベルの名前をTEXT値で指定します。

OPERATOR

データの集計に使用される計算方法を識別します。

operation

実行する計算の種類を説明するキーワード。キーワードは表9-1「集計方法」にリストされており、AGGROPS文を発行することによって取得できます。最初の3文字を指定することにより、キーワードの固定長3文字の省略形を指定できます。

表9-1 集計方法

キーワード

説明

AND

子データ値のいずれかがFALSEの場合、その親のデータ値はFALSE。親は、そのすべての子がTRUEの場合にのみTRUEになる。(ブール変数のみ)

AVERAGE

データ値を加算した後、合計を加算されたデータ値の数で除算する。AVERAGEを使用する場合、「平均演算子」で説明されているように特別な注意が必要。

FIRST

最初の非NAデータ値。

HAVERAGE

(階層平均)データ値を加算した後、合計をディメンション階層の子の数で除算する。非NAの子のみをカウントするAVERAGEとは異なり、HAVERAGEは各子に値があるかどうかに関係なく、親のすべての論理的な子をカウントする。

このキーワードは、argumentのNASKIPオプション設定の影響を受けない。

HFIRST

(階層の最初)値がNAの場合でも、階層により指定される最初のデータ値。

このキーワードは、argumentのNASKIPオプション設定の影響を受けない。

HLAST

(階層の最後)値がNAの場合でも、階層により指定される最後のデータ値。

このキーワードは、argumentのNASKIPオプション設定の影響を受けない。

HWAVERAGE

(階層加重平均)非NAの子データ値をそれらに対応する加重値で乗算して、結果を加重値の合計で除算する。WAVERAGEとは異なり、対応する子の値がNAの場合でも、HWAVERAGEには分母合計に加重値が含まれる。

このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。

このキーワードは、argumentのNASKIPオプション設定の影響を受けない。

HWFIRST

(階層の最初の加重)値がNAの場合でも、階層により指定されて、対応する加重値により乗算される最初のデータ値。

このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。

このキーワードは、argumentのNASKIPオプション設定の影響を受けない。

HWLAST

(階層の最後の加重)値がNAの場合でも、階層により指定されて、対応する加重値により乗算される最後のデータ値。

このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。

このキーワードは、argumentのNASKIPオプション設定の影響を受けない。

LAST

最後の非NAデータ値。

MAX

すべての親データ値の子における最大データ値。

MIN

すべての親データ値の子における最小データ値。

NOAGG

このディメンションのどのデータも集計しない。

OR

子データ値のいずれかがTRUEの場合、その親のデータ値はTRUE。親は、そのすべての子がFALSEの場合にのみFALSEになる。(ブール変数のみ)

SSUM

(スケール合計)加重オブジェクトの値を各データ値に加算してから、データ値を加算する。

このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。

SUM

(デフォルト)データ値を加算する。

WAVERAGE

(加重平均)各データ値を加重要素で乗算して、データ値を加算した後、結果を加重要素の合計で除算する。

このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。

WFIRST

(最初の加重)対応する加重値により乗算される、最初の非NAデータ値。

このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。

WLAST

(最後の加重)対応する加重値により乗算される、最後の非NAデータ値。

このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。

WMAX

(加重最大値)対応する加重値により乗算される、すべての親データ値の子における最大データ値。

このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。

WMIN

(加重最小値)対応する加重値により乗算される、すべての親データ値の子における最小データ値。

このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。

WSUM

(加重合計)各データ値を加重要素で乗算した後、データ値を加算する。

このキーワードを使用する場合、変数、計算式またはリレーションに加重オブジェクトとしてWEIGHTBY引数キーワードを含めなければならない。

opvar

その各ディメンション値に、別の演算を指定するTEXT変数。

注意:
圧縮コンポジットによってディメンション化される変数には有効ではありません。

opvar引数は、次の2つの方法で使用されます。

- メジャー・ディメンション: 集計される変数に応じて集計方法を変更します。集計される変数に応じて集計方法を変更するやり方は、別々の方法で集計する必要のある複数の変数を単一のaggmapを使用して集計する場合に役立ちます。すべてのメジャーを単一のAGGREGATEコマンドで事前集計するか、または別個の文で事前集計するかにかかわらず、AGGREGATEはこの演算変数を使用して計算方法を識別します。メジャー・ディメンションの値は、集計する変数の名前です。各メジャーの集計に使用される演算をその値によって識別する、テキスト変数をディメンション化します。集計仕様には、メジャー・ディメンションを識別するMEASUREDIM文を含める必要があります。例9-21「メジャー・ディメンションを使用した集計」を参照してください。

- 明細項目ディメンション: 集計される明細項目に応じて集計方法を変更します。通常、明細項目ディメンションは非階層で、財務割当てを識別します。明細項目ディメンションは、データ変数および各項目の集計に使用される演算を識別するテキスト変数の両方をディメンション化するために使用されます。演算変数は通常、長期間にわたる明細項目の集計に使用します。aggmapでは、MEASUREDIM文を使用しないでください。例9-22「明細項目ディメンションを使用した集計」を参照してください。

opvar引数は、集計に使用されるディメンションによってディメンション化することはできません。たとえば、geographyディメンションに別の演算を指定する場合、opvarはgeographyによってディメンション化できません。

演算子変数のページング量を最小化するには、固定幅8のTEXT型として演算変数を定義します。

PARENTALIAS

集計されるディメンションの別名ディメンションを、現在集計されている親値にQDRとして設定するように指定します。

dimension-alias-name

rel-nameディメンションの別名ディメンションの名前。

ARGS

集計のオプション処理を示します。

DIVIDEBYZERO

0(ゼロ)で割り算できるかどうかを指定します。

- YESはゼロによる除算を許可します。ゼロによる除算を伴う文がエラーなしで実行されますが、NA結果が生成されます。

- NOはゼロによる除算を許可しません。ゼロによる除算を伴う文が実行を停止し、エラー・メッセージが生成されます。

デフォルト値は、DIVIDEBYZEROオプションの現行の値です。

DECIMALOVERFLOW

10進オーバーフローを許可するかどうかを指定します。10進オーバーフローは、計算結果が非常に大きく、数値表記の指数部分で表示できなくなった場合に発生します。

- YESはオーバーフローを許可します。オーバーフローを生成する計算がエラーなしで実行され、NA結果が生成されます。

- NOはオーバーフローを許可しません。オーバーフローを伴う計算が実行を停止し、エラー・メッセージが出力されます。

デフォルト値は、DECIMALOVERFLOWオプションの現行の値です。

NASKIP

NA値が入力されるかどうかを指定します。

- YESは、集計時にNA値を無視することを指定します。実際の値のみが計算に使用されます。

- NOは、集計時にNA値が検討されるように指定します。値のいずれかがNAとみなされると、計算によりNAが返されます。

デフォルト値は、NASKIPオプションの現行の値です。

NASKIP句に指定した値は、operationにHAVERAGE、HFIRST、HLAST、HWAVERAGE、HWFIRST、HWLASTを指定した場合に実行される計算に影響を与えません。

WEIGHTBY

加重集計を実行することを示します。operationにHWAVERAGE、HWFIRST、HWLAST、SSUM、WAVERAGE、WFIRST、WLASTまたはWSUMを指定する場合は、WEIGHTBY句を含める必要があります。WEIGHTBY句には、常にwobj引数が含まれ、オプションでWNAFILLキーワードを含めることができます。

WNAFILL {number | NA}

NA値の処理を示します。WNAFILLのデフォルト値は、演算の値に応じて異なります。0.0がHWAVERAGEおよびSSUMのデフォルト値です。NAは、ORのデフォルト値です。その他の演算子のデフォルト値は1.0です。WNAFILLのデフォルトは、集計仕様の各演算子に対して決まります。つまり、あるRELATION文にWSUM OPERATORが含まれる場合、WNAFILLのデフォルトは1.0となります。次のRELATION文にSSUM OPERATORが含まれる場合、WNAFILLのデフォルトは0.0となり、その他も同様です。「WNAFILLの使用」を参照してください。

wobj

加重値を提供する変数、計算式またはリレーション。数値またはブール値になります。wobjがブール値の場合、TRUEのとき加重は1.0となり、FALSEのときの加重は0.0となります。計算式および集計される変数のディメンション性に応じて、必要な場合のみ計算式に問合せが行われます。wobjがリレーションの場合、1次元のセルフ・リレーションになります。wobjへの値の指定に関する詳細は、「加重集計方法の使用」を参照してください。

COUNT {YES|NO}

YESの場合、Oracle OLAPがこのリレーションを使用して変数を集計する際に、その変数に関連するAggcount変数を移入するように指定します。Aggcount変数の詳細は、「Aggcount変数」を参照してください。

NOの場合、Oracle OLAPがこのリレーションを使用して変数を集計する際に、その変数に関連するAggcount変数を移入しないように指定します。Aggcount変数の詳細は、「Aggcount変数」を参照してください。

argsvar

一部またはすべてのディメンション値にargumentオプションを含むTEXT変数。

LOAD_STATUS

集計において、status-valueset-nameにより指定された値が階層の詳細レベルまたは最下位レベルとしてみなされるように指定します。

status-valueset-name

集計実行時にステータスで保持する最下位レベルの値を指定する定義済の値セット。集計の実行時に使用するaggmapの中のRELATION文にこの句が含まれている場合、ディメンション・ステータスは一時的に、status-valueset-nameおよびその祖先で指定した値に設定されます。status-valueset-nameで指定する値セットは、(階層ディメンションではなく)リレーションのディメンションに対する1次元の値セットであることが必要です。さらに、status-valueset-nameに指定された値セットには、値およびその祖先を含めることはできません。

使用上の注意

非加算演算子を使用したRELATION文の順序

非加算演算子を使用したRELATION文の順序は、計算結果に影響を与えます。たとえば、通常、合計の最大値は、最大値の合計と等しくなりません。したがって、集計仕様内のRELATION文の順序は、計算の論理要件に従う必要があります。この論理的な必要性により、集計における動的モデルの使用には制限があります(「動的モデルと非加算演算子」を参照)。

圧縮コンポジットのRELATION文

集計仕様を設計する場合に圧縮コンポジットのRELATION文をコード化する際は、次のガイドラインに従ってください。

- HAVERAGE、HWAVERAGE、HWFIRST、HWLAST、SSUM、WAVERAGE、WFIRST、WLAST、WMAX、WMINおよびWSUMの各演算子では、スパース性にかかわらず、データ値は集計の各レベルによって変化します。可能であれば、全体的な圧縮の量を最大にできるよう、これらの演算子を持つRELATION文を集計仕様の冒頭(AND、AVERAGE、FIRST、HFIRST、HLAST、LAST、MAX、MIN、NOAGG、ORまたはSUM演算子を使用するRELATION文の前)に配置します。

- 圧縮コンポジットの圧縮を最適化するには、計算ロジックが可能な場合、同様な演算子を連続的にリストします。たとえば、最初のディメンションでMAXを指定し、他のディメンションのすべてでSUMを指定すると、圧縮率が高くなるので、残りのディメンションでSUM、MAXおよびSUMを指定するよりも計算パフォーマンスが向上します。

- SUMは、最も高速で最も高圧縮な演算子です。1つ以上のディメンションで集計演算子をSUMから別の演算子に変更すると、圧縮率が低くなるので、大きな変数とその変数のAGGREGATEコマンドの実行時間が長くなります。

- AVERAGE演算子を指定するRELATION文がAGGMAPに含まれる場合、その集計仕様を使用するすべての変数については、WITH AGGCOUNT句を伴うDEFINE VARIABLE文を使用して定義する必要があります。

- 指定できるのは単一の集計操作のみです。opvar変数を使用して集計操作を指定することはできません。

値セットを使用する2つの方法

値セットを使用して次のことを行うことができます。

- 階層ディメンションの制限。AGGREGATEコマンドおよびAGGREGATEファンクションにより使用される階層と、それらの階層が使用される順序を制限できます。使用する値セットは、ディメンションの階層の名前を指定します。この方法で値セットを使用するには、次の構文を使用します。

RELATION rel-name (valueset)

この場合、値セットを使用すると、互いに競合している階層を管理できますが、これは、同じディメンション値が、異なる階層の別々の子のデータを格納している場合です(たとえば、Q1が、Calendar階層にJan、FebおよびMarのデータを格納する一方で、Fiscal階層ではMay、JunおよびJulのデータを格納している場合など)。

- AGGREGATEファンクションによって即時計算する値や、AGGREGATEコマンドによって事前計算する値の指定。使用する値セットにより、ディメンション値の名前が指定されます。この方法で値セットを使用するには、次の構文を使用します。

RELATION rel-name PRECOMPUTE (valueset)

この場合、PRECOMPUTEキーワードの後ろの値セットを使用します。

値セットを使用して階層ディメンションを制限する場合で、複数のaggmapを使用し、階層に一貫性がない場合は、AGGREGATEファンクションでFORCECALCキーワードを使用するか、集計対象の変数に$AGGREGATE_FORCECALCプロパティを設定しておく必要があります。

PRECOMPUTEまたはOPERATOR句を変更する場合

PRECOMPUTEまたはOPERATOR句を変更する場合は、変数データを再集計し、aggmapを再コンパイルして正確なデータを生成する必要があります。

異なる階層レベルにロードされたデータの集計

異なるレベルの階層にあるディメンション値にデータをロードする場合、集計仕様のRELATION文のPRECOMPUTE句にステータスを設定する方法に注意する必要があります。

timeディメンションに3つのレベルを持つ階層があり、月は四半期に集計され、四半期は年に集計されるとします。一部のデータが月ディメンション値にロードされ、他のデータが四半期ディメンション値にロードされます。たとえば、Q1はJanuary、FebruaryおよびMarchの親です。Marchのデータは、Marchディメンション値にロードされます。しかし、JanuaryおよびFebruaryのデータの合計は、Q1ディメンション値に直接ロードされます。実際、JanuaryおよびFebruaryディメンション値には、データのかわりにNA値が含まれます。ここで目標とするのは、MarchのデータをQ1のデータに追加することです。

January、FebruaryおよびMarchをQ1に集計しようとする場合、Marchのデータは単純にQ1のデータを置き換えます。これが起こると、Q1にはJanuary、FebruaryおよびMarchの合計ではなく、Marchのデータが含まれることになります。

階層の異なるレベルにロードされるデータを集計するには、データが含まれるそれらのディメンション値に対してのみ、値セットを作成します。

DEFINE all_but_q4 VALUESET time
LIMIT all_but_q4 TO ALL
LIMIT all_but_q4 REMOVE 'Q4'

次の文に示されているように、集計仕様で値セットを使用して、詳細レベルのデータをその親であるQ1に存在するデータに追加するように指定します。

RELATION time.r PRECOMPUTE (all_but_q4)

平均演算子

AVERAGE、HAVERAGE、WAVERAGEおよびHWAVERAGE演算子の使用に関しては次のような問題があります。

- Oracle OLAPは、平均値を計算するために集計値に加えられたリーフ・ノード数の非NAカウント数を別のINTEGER変数に格納する必要があります。いずれかの平均演算子を使用して変数を集計する場合は、その変数のDEFINE VARIABLE文にWITH AGGCOUNT句を含めます。

- 平均する際の精度: すべての10進データは、格納および計算の両方の用途で浮動小数点形式に変換され、その結果、場合によっては、DECIMALまたはSHORTDECIMAL変数で計算される平均集計の最下位の数字が、手動で計算した結果と異なる可能性があります。このため、通貨額を含む変数など、計算速度よりも精度が重要な場合はNUMBERデータ型を使用する必要があります。詳細は、「数式」を参照してください。

- AGGREGATEコマンドを使用した集計時の平均演算子の使用: PRECOMPUTEキーワードとともに平均演算子を使用する場合、10進またはNUMBERデータ型を持つ変数を使用して結果の正確さを確保するのが最も効果的です。

- 部分集計での平均演算子の使用: 部分集計で平均演算子を使用する場合、同じINTEGER変数(つまりAggcountまたはCountvar変数)を常に使用して集計する必要があります。集計間で、このINTEGER変数に格納されている値を変えないでください。また、INTEGER変数の数は、集計される変数の数と一致する必要があります。

HAVERAGE、HFIRST、HLASTおよびHWAVERAGE演算子

階層の演算子(HAVERAGE、HFIRST、HLASTおよびHWAVERAGE)の目的は、NA処理の代替方法を提供することです。

FIRST、HFIRST、LASTおよびHLAST演算子

これらの演算子は、ディメンション値の既存の順序に依存しており、この順序は、そのディメンションのデフォルトの論理的な順序を想定しています。たとえば、月ディメンションでは、FebruaryはJanuaryの後であり、MarchはFebruaryの後である、となります。

デフォルトの順序を変更する必要がある場合は、MAINTAIN文を使用します。たとえば、Q1にはJanuary、FebruaryおよびMarchが含まれますが、MarchではなくFebruaryをQ1の最後の月にするとします。そのためには、次の文を使用します。

MAINTAIN time MOVE 'Feb01' AFTER 'Mar01'

これで、LAST演算子はFEB01をQ1の最後の月とみなすようになりました。

読取り権限とaggmap

RELATION文でrel-nameの読取り権限を変更する場合、aggmapをAGGREGATEファンクションとともに使用する前に再コンパイルする必要があります。AGGREGATEコマンドを使用する場合は、aggmapが自動的に再コンパイルされるため必要ありません。しかし、aggmapでrel-nameのすべての読取り権限を持っていない場合にaggmapを使用しようとすると、エラー・メッセージが生成されます。

加重集計方法の使用

加重集計方法を使用する場合は、加重を含むオブジェクトを定義および移入する必要があります。集計方法はOPERATOR句に識別し、加重オブジェクトはARGS句に識別します。

加重オブジェクトには、変数、計算式またはリレーションを使用できます。オブジェクト型、加重オブジェクトのデータ型、および部分集計を実行するかどうかに応じて、特別な注意が必要です。

オブジェクト型に基づく加重オブジェクトに関する注意点: 加重オブジェクトに使用するオブジェクト型に応じて、次のような点に注意してください。

- 加重オブジェクトが変数の場合、数値またはブール・データ型を使用して定義できます。加重値を事前計算して、それをデータベースにコミットする場合、加重オブジェクトとして変数を使用します。変数の加重オブジェクトは、任意の加重オプションとともに使用できます。

- 加重オブジェクトがリレーションの場合、オブジェクトを1次元のセルフ・リレーションとして定義します。加重オブジェクトを使用して、特定のセルの加重が別の場所の現行の変数に含まれるように指定できます。明細項目またはメジャー・ディメンションを使用する場合、加重オブジェクトとしてリレーションを使用します。この場合、1つの明細項目が、別の明細項目の集計値を計算するための加重として使用されます。リレーションを使用すると、加重演算の加重値として集計される変数に、セルの別のセットを指定できます。

- 加重オブジェクトが計算式の場合は、計算式のディメンション性と、データが集計される変数のディメンション性に応じて、計算式に対して必要な場合にのみ問合せが行われます。計算式は、数値またはブール・データ型を使用して定義できます。加重値を即時計算する場合、計算式を加重オブジェクトとして使用します。計算式の加重オブジェクトは、集計できない点を除いては変数の加重オブジェクトと同様です。計算式の加重オブジェクトの値は、動的に実行されます。そのため、多くの加重オプションは計算式の加重オブジェクトとともに使用できません。

加重オブジェクトのデータ型に基づく注意点: 次の注意点は、加重オブジェクトが数値またはBOOLEANの場合に当てはまります。

- 加重オブジェクトが数値データ型である場合、加重オブジェクト変数は対応する変数と同じディメンション性(またはそのサブセット)を持つことがお薦めされますが、これは必須ではありません。Oracleの数値または10進数を使用してデータ変数を定義する場合、必ず同じデータ型を使用して対応する加重オブジェクトを定義します。または、WAVERAGEまたはHWAVERAGEを使用する場合以外は、加重オブジェクトおよびデータ変数に同じデータ型を使用しますが、この場合、10進数またはNUMBERデータ型を使用して加重オブジェクトを定義します。

- 定義する加重オブジェクト変数、計算式またはリレーションがBOOLEANデータ型の場合、TRUEは加重が1.0であることを示し、FALSEは加重が0.0であることを示します。さらに、NA値が任意の値により乗算される場合、結果はNAとなります。

部分集計を実行する際の加重オブジェクトに関する注意点: WEIGHTBY句を要求する演算子を使用して、部分集計を実行する場合、AGGREGATEコマンド間の加重オブジェクトに格納されている値を変更しないでください。

WNAFILLの使用

たとえば、WSUM演算子を使用して通貨の換算を行うとします。通貨の換算レートは、詳細データ・レベルで適用されます。変数データは換算後に集計されるため、換算する必要があるのは詳細データのみです。正確な結果を取得するためには、加重オブジェクトに含まれる詳細レベル以外の加重値がすべて1になる必要があります。この方法では正確な結果が得られますが、効率的ではありません。最も効率的な方法は、WNAFILLのデフォルト値1を使用することであり、これにより、加重オブジェクトのすべてのNA値が1の加重を持つ値として処理されます。この場合、演算子はWSUMであり、デフォルト値は正確なため、WNAFILLをAGGREGATEコマンドに含める必要はありません。

たとえば、次の文を使用すると、値0.7がsalesw加重オブジェクトのNA値の代替となります。

AGGREGATE sales USING sales.agg WEIGHTBY WNAFILL 0.7 salesw

NA値と置き換える数値を指定しない場合、次の文に示されるように数値のかわりにNAを使用できます。

AGGREGATE sales USING sales.agg WEIGHTBY WNAFILL NA salesw

WNAFILLの後にNAを指定すると、次のような影響があります。

- 集計仕様にWAVERAGEまたはWSUM OPERATORが含まれる場合、NA値を持つ加重オブジェクトの子セルはNAセルとして処理されます。

- 集計仕様にSSUM OPERATORが含まれる場合、結果はOracle OLAPのオプションNASKIPの設定内容によって異なります。NASKIPがYESに設定されている場合、すべてのNA値は0.0として処理されます。一方、NASKIPがNOに設定されている場合、すべてのNA値がNAセルとして処理されます。

集計のディメンション・ステータスの影響

ステータスの設定にLIMIT文を使用するか、RELATION文のLOAD STATUS句を使用するかにかかわらず、RELATION文によって集計されるのは、ステータスにあるソース・データ値のみです。親値は、ステータスにあるかどうかに関係なく計算されます。たとえば、Jan01、Feb01およびMar01のみがtimeディメンションのステータスにある場合、Q1.01が計算され(他の四半期は計算されません)、他の四半期はNAとなるため、入力としてQ1.01のみを使用して、2001が計算されます(他の年は計算されません)。この機能は、アナリティック・ワークスペースの新しいデータのみを集計する場合に役立ちます。

階層ディメンションtimeおよび非階層ディメンションdistrictによってディメンション化される、salesという名前の変数があるとします。

DEFINE time DIMENSION TEXT
DEFINE time.parentrel RELATION time <time>
DEFINE district DIMENSION TEXT
DEFINE sales VARIABLE DECIMAL <time district>

REPORT DOWN time sales

-----------------------SALES-----------------------
---------------------DISTRICT----------------------
TIME            North        South         West         East
------------ ------------ ------------ ------------ ------------
1976Q1         168,776.81   362,367.87   219,667.47   149,815.65
1976Q2         330,062.49   293,392.29   237,128.26   167,808.03
1976Q3         304,953.04   354,240.51   170,892.80   298,737.70
1976Q4         252,757.33   206,189.01   139,954.56   175,063.51
1976                   NA           NA           NA           NA

例

RELATION文を含む集計仕様の例については、AGGMAPコマンドの例を参照してください。

AGGMAP ADDまたはREMOVEモデル

AGGMAP ADDまたはREMOVEモデル・コマンドは、以前に定義された集計仕様(AGGMAP型のaggmapオブジェクト)に対して、以前に定義されたモデルを追加または削除します。モデルは集計仕様内で使用され、非階層ディメンション(明細項目など)でデータを集計しますが、非階層ディメンションには親リレーションがないため、RELATION文では集計できません。詳細はMODEL(集計内)を参照してください。

注意:
AGGMAP ADD MODELおよびAGGMAP REMOVE MODEL文を使用してもaggmapオブジェクトにモデルを一時的に追加できますが、通常は、この操作を実行する次のようなMAINTAIN ADD SESSION文を使用します。
MAINTAIN dimension ADD SESSION member = model APPLY TO AGGMAP aggmap

MAINTAIN ADD SESSION文を使用すると、あるセッションで計算されたメンバーおよびその定義のいずれも次のセッションには維持されず、どちらも作成されたセッションが終了すると削除されます。

構文

AGGMAP {ADD model TO aggmap|REMOVE model FROM aggmap}

パラメータ

ADD

モデルを、aggmapオブジェクトに一時的に追加します。モデルは、セッションの期間中のみaggmapにアタッチされます。アナリティック・ワークスペースが更新およびコミットされた場合でも、セッションが閉じるとモデルはaggmapから廃棄されます。

REMOVE

モデルを、aggmapから削除します。

model

指定されたaggmapに追加するモデル・オブジェクトの名前。

aggmap

以前に定義された、AGGMAP型のaggmapオブジェクトの名前。

例

例9-25 aggmapへのモデルの一時的な追加

例として、次の定義を持つletter.aggmapという名前のaggmapオブジェクトがあるとします。

DEFINE LETTER.AGGMAP AGGMAP
AGGMAP
RELATION letter.letter PRECOMPUTE ('AA')
END

さらに、ディメンション値AABおよびABAによりディメンション化されるセルの、サマリー変数データを作成するとします。ただし、このデータをアナリティック・ワークスペースに永続的に格納することはしません。セッション中に、データを参照するだけです。

この種類の集計を実行する手順は、次のとおりです。

1. カスタム集計のディメンション値を作成します。このディメンション値は、ディメンション値AABおよびABAの親になります。次の文では、letterディメンションに'BB'を追加します。

MAINTAIN letter ADD 'BB'

2. AGGREGATIONファンクションを含むMODELオブジェクトを作成し、このオブジェクトによって子ディメンション値が新しいディメンション値に関連付けられます。次のモデルは、AABおよびABAの親としてBBを識別します。親ディメンション値(この場合はBB)を、親リレーション(letter.letter)の親としてあらかじめ定義することはできません。

DEFINE LETTER.MODEL MODEL
MODEL
DIMENSION letter
BB=AGGREGATION('AAB' 'ABA')

3. AGGMAP ADD文を実行して、モデルを既存のAGGMAPオブジェクトに追加します。

AGGMAP ADD letter.model TO letter.aggmap

ここで、aggmapは次のようになります。

DEFINE LETTER.AGGMAP AGGMAP
AGGMAP
RELATION letter.letter PRECOMPUTE ('AA')
END
AGGMAP ADD letter.model

4. モデルは、次の式のようにAGGREGATEファンクションによってのみ実行され、AGGREGATEコマンドからは無視されます。

REPORT AGGREGATE(units USING letter.aggmap)

5. セッション中にaggmapからモデルを削除する場合、AGGMAP REMOVE文を使用します。

6. 使用しているaggmapが、アナリティック・ワークスペースで永続オブジェクトにならないようにするには、セッションを閉じる前に次の文を発行して、手順1で追加したディメンション値を削除してください。

MAINTAIN letter DELETE 'BB'

セッションが終了すると、Oracle OLAPはAGGMAP ADD文を使用して追加されたモデルを自動的に削除します。AGGMAP REMOVE文を明示的に発行する必要はありません。

AGGMAP SET

変数のデフォルトaggmapを指定します。

注意:
$AGGMAPプロパティを使用して変数のデフォルト集計仕様を指定したり、$ALLOCMAPプロパティを使用して変数のデフォルト割当て仕様を指定したりすることも可能です。

構文

AGGMAP SET aggmap AS DEFAULT FOR variables

パラメータ

aggmap

以前に定義されたaggmapオブジェクトの名前。

variables

指定されたaggmapがデフォルトaggmapとなっている、1つ以上の変数の名前であるテキスト式。リテラル値を指定する場合は、変数の名前をカンマで区切ります。

例

例9-26 AGGMAP SETを使用したデフォルトaggmapの指定

例4-3「$AGGREGATE_FROMプロパティの使用」では、例9-13「集計仕様におけるCACHE文の使用」に示されているAGGREGATEコマンドを次の文に簡略化する方法を説明します。

AGGREGATE sales_by_revenue USING revenue_aggmap

revenue_aggmapをsales_by_revenue変数のデフォルトaggmapにすると、AGGREGATEコマンドをさらに簡略化できます。そのためには、sales_by_revenue変数の$AGGMAPプロパティを定義するか、次の文を発行します。

AGGMAP SET revuienue_aggmap AS DEFAULT FOR sales_by_revenue

これで、USING句を含まない次のAGGREGATEコマンドを発行することにより、データを集計できるようになります。

AGGREGATE sales_by_revenue

AGGREGATEコマンド

AGGREGATEコマンドは、指定されたaggmap内でPRECOMPUTEとして指定されている変数のサマリー・データを計算します。(事前計算するデータの指定については、AGGMAPコマンドのPRECOMPUTEおよびRELATION(集計用)文を参照してください。)集計の対象になるのは、現在ステータスにある値に限られます。

事前計算するように指定されていないデータを計算するには、$AGGMAPプロパティまたはAGGREGATEファンクションを使用します。

関連項目:
AGGREGATEファンクション

構文

AGGREGATE|AGGR { var  [(PARTITION partition-name)]}... [USING aggmap] -

[FROM fromspec|FROMVAR textvar] [FORCEORDER] [FUNCDATA] [COUNTVAR countvar...]

パラメータ

var

この変数のデータ値が計算の対象となります。1つのAGGREGATEコマンドに指定されているすべての変数には、同一のディメンションが同じ順序で含まれている必要があります。

PARTITION

指定した変数の指定した部分にある値についてのみ、AGGREGATEの再計算を実行するよう指定します。通常、集計対象のパーティションを1つに限定するのは、マルチライタ・モードを使用してビルドをパラレル化するためです。

注意:
AGGREGATEコマンドでは、個々のパーティションを集計する際、パーティションの依存性は考慮されないため、1つのAGGREGATEコマンドの中では依存性のないパーティションのみを集計してください。

partition-name

事前に定義されたパーティションの名前。DEFINE PARTITION TEMPLATEを参照してください。

USING

このキーワードは、指定したaggmapを使用して集計が実行されることを示します。この句を含めない場合、AGGMAP文または$AGGMAPプロパティを使用して事前に指定されている変数のデフォルトのaggmapがコマンドで使用されます。

aggmap

データの集計方法を指定する事前定義されたaggmapの名前。aggmapの詳細は、DEFINE AGGMAPコマンドを参照してください。

FROM

このキーワードは、異なるオブジェクトから詳細データが取得されることを示します。

FROM句は、集計の実行時における詳細データの取得元の変数を指定する唯一の方法です。「集計の詳細データの取得元を指定する方法」を参照してください。

fromspec

集計の詳細データの取得元である任意にディメンション化された変数、計算式またはリレーション。

FROMVAR

このキーワードは、キャップストーン集計を実行するために異なるオブジェクトから詳細データが取得されることを示します。(FROMVAR句の使用例は、例9-32「キャップストーン集計」を参照。)

FROMVAR句は、集計の実行時における詳細データの取得元の変数を指定する唯一の方法です。「集計の詳細データの取得元を指定する方法」を参照してください。

textvar

リーフ・ノードを解決するために使用される任意にディメンション化された変数。値を計算するときにノードが詳細データを必要としない場合は、NAを指定します。

FORCEORDER

aggmapにリストされているRELATION文と同じ順序で計算を実行するよう指定します。AGGREGATEコマンドで計算された値の一部を変更した場合に、このオプションを使用します。このオプションを指定しないと、AGGREGATEコマンドで使用する最適化方法において、変更された値が無視されることがあります。

注意:
変数に$AGGREGATE_FORCEORDERプロパティを設定すると、この動作を集計時のデフォルトの動作にすることができます。この場合、FORCEORDERキーワードをAGGREGATEコマンドで指定する必要はありません。

FUNCDATA

AGGREGATEファンクションで将来使用する集計仕様をコンパイルします。FUNCDATAを使用すると、aggmap、リレーション階層またはコンポジットを変更しないかぎり、AGGREGATEファンクションを使用する前にaggmapを再コンパイルする必要がありません。

変数にコンポジット・ディメンションがある場合、AGGREGATEファンクションで使用する索引(コンポジット・タプル)が作成および保存されます。それ以外の場合、AGGREGATEファンクションがコールされるたびに索引が再作成されます。コンポジット索引の詳細は、AGGINDEXを参照してください。

COUNTVAR countvar

AVERAGE、HAVERAGE、HWAVERAGEまたはWAVERAGE演算子を含むRELATION文について計算された集計値に加えられたリーフ・ノードの数の非NAカウント数を格納する場合、countvarで指定されたユーザー定義の変数を使用するよう指定します。

注意:
通常、平均集計値の格納にユーザー定義のCountvar変数は使用しません。かわりに、Oracle OLAPが作成したAggcount変数を使用します。圧縮コンポジットに対する平均演算子を持つRELATION文が集計仕様に含まれる場合は、Aggcount変数を使用する必要があります。
Aggcount変数の詳細は、「Aggcount変数」を参照してください。

countvar変数は、varで指定された変数と同一のディメンションが同一の順序で定められているINTEGER変数である必要があります。複数の変数を同時に集計する場合、個別に結果を記録するためにINTEGER変数をそれぞれ定義する必要があります。

使用上の注意

AGGREGATEに対するステータスの影響

現行のステータスは、最下位レベルの階層、つまりリーフ・ノードのディメンション値にのみ影響します。現在ステータスにあるリーフ・ノードのディメンション値のみが集計されます。AGGMAPコマンドのPRECOMPUTE句でそのレベルにあるディメンション値を対象外にしないかぎり、親値自体がステータスにあるかどうかにかかわらず、ステータスにあるリーフ・ノードの親値が計算されます。したがって、aggmapで指定したすべてのデータを集計する場合、集計を実行する前にディメンションのステータスがALLに設定されていることを確認してください。

AGGREGATEで親リレーションを使用すると、異なるレベルの階層でディメンション値が識別されます。また、ステータスを制限することでデータの部分集計も実行できます。ただし、AGGREGATEファンクションで実行時に集計されるデータがある場合には注意して実行する必要があります。詳細は、AGGREGATEファンクションの項にある注意を参照してください。

たとえば、表9-2「geography階層」に示すように、areaディメンションおよび1つのgeographyディメンションに対して1つの階層をサポートするarea.area親子関係を使用するとします。

表9-2 geography階層

レベル

areaディメンション

area.area親リレーション

1

TotalUS

NA

2

East

TotalUS

2

South

TotalUS

3

Boston

East

3

New York

East

3

Atlanta

South

ここでNew Yorkのデータ値を変更するとします。New Yorkに対してのみAGGREGATEを使用すると、Southの子値(Atlanta)を含まずに計算が実行されますが、レベル3からレベル1(TotalUS)までの計算にその値のレベル2が含まれます。TotalUSまでのロールアップにすべての子値を含めるには、AGGREGATEコマンドを実行する前にa LIMIT TO ALL文を使用します。

階層にある子値の一部のみが変更された場合、変更された値のみを計算するようにステータスを設定します。たとえば、埋込み合計ディメンションd2とその親リレーションreld2がある場合、最初にd2を変更された値に制限します。

ディメンションにあるすべての階層のデータを計算するには、AGGREGATEコマンドを実行する前にそのディメンションの階層ディメンションをALLに制限します。

計算するデータ量の制御

aggmapのRELATION文でPRECOMPUTEキーワードを使用すると、計算する変数データの量を制御できます。PRECOMPUTEキーワードの後に制限句を使用してディメンションのステータスを設定します。

ユーザーがデータを変更する場合

ユーザーが変数のデータを変更できる場合は、AGGREGATEファンクションを使用して集計を即時計算することで、ユーザーによる変更が集計データに反映されます。データの実行時における変更の詳細は、AGGREGATEファンクションを参照してください。

階層の世代スキップ

AGGREGATEは、階層の世代スキップ可能な範囲で、親リレーションの世代が自動的に識別されます。たとえば、3レベルのブランチ(たとえば、Boston、MassachusettsおよびtotalUS)がある4レベルの階層(たとえば、neighborhoods、cities、statesおよびtotalUS)が使用可能です。

アクセス権に関する制限

セルごとにアクセス権がある変数ではAGGREGATEが機能しないので、即座にエラーが返されます。また、PERMITERRORオプションも無視されます。ただし、AGGREGATEは、オブジェクト・レベルまたディメンション・レベルのアクセス権がある変数では機能します。PERMITコマンドおよびPERMITERRORオプションを参照してください。

集計の詳細データの取得元を指定する方法

データを集計する場合、詳細データの取得元を次の方法で指定できます。

- $AGGREGATE_FROMプロパティまたは$AGGREGATE_FROMVARプロパティを変数に割り当てる。

注意:
変数には、これらのプロパティの一方のみ割当て可能です。$AGGREGATE_FROMプロパティと$AGGREGATE_FROMVARプロパティの両方を1つの変数に割り当てることはできません。

- データを集計するAGGREGATEコマンドまたはAGGREGATEファンクションにFROM句またはFROMVAR句を含める。

集計を実行すると、Oracle OLAPによって次のように詳細データの取得元が決定されます。

1. FROM句またはFROMVAR句で場所が指定されている場合、Oracle OLAPはその場所にある詳細データを使用します。

2. FROM句またはFROMVAR句で場所が指定されていない場合、Oracle OLAPは$AGGREGATE_FROMプロパティまたは$AGGREGATE_FROMVARプロパティを使用して場所が指定されているかどうかを確認します。これらのプロパティの1つで場所が指定されている場合、Oracle OLAPはその場所にある詳細データを使用します。

3. FROM句またはFROMVAR句、あるいは$AGGREGATE_FROMプロパティまたは$AGGREGATE_FROMVARプロパティで場所が指定されていない場合、Oracle OLAPはその変数自体の詳細データを使用して集計を実行します。

例

この項では、一部のAGGREGATEコマンドの使用例を示します。その他の集計の例は、AGGMAPコマンドの例を参照してください。

例9-27 バッチ・ジョブでのデータの事前計算

通常、データベースのデータをメンテナンスする方法の一部として、事前計算された集計をバッチ・ウィンドウで生成します。たとえば、『Oracle OLAPユーザーズ・ガイド』の説明に従い、ジョブ・マネージャを使用してOracle Enterprise Managerにバッチ・ジョブをスケジュールできます。

事前計算された集計を生成するには、AGGREGATEコマンドを使用します。AGGREGATEコマンドによって、aggmapで指定された仕様に従って1つ以上の変数のデータが集計されます。

バッチ・ジョブには次のような文を含める必要があります。

AGGREGATE sales units USING gpct.aggmap
UPDATE
COMMIT

例9-28 1つの変数の集計

アナリティック・ワークスペースに次の定義を含むactualsという名前の変数が含まれているとします。

DEFINE actuals DECIMAL <time, SPARSE <product, customer, channel>>

次に、同じディメンションが同じ順序で定義されているaggmapオブジェクトを定義します。DEFINE AGGMAPを使用して、act.aggという名前のaggmapオブジェクトを定義するとします。

DEFINE act.agg AGGMAP <time, SPARSE <product, customer, channel>>

timeディメンションの階層の名前はtime.r、productディメンションの名前はproduct.rとし(以降同様)、AGGMAP文を使用して、次のテキストをact.agg aggmapに追加します。

AGGMAP
RELATION time.r
RELATION product.r
RELATION customer.r
RELATION channel.r
END

これらのテキストによって、ロールアップされるデータの各ディメンションの階層の名前が指定されます。各ディメンションの現行のステータスがALLの場合、actualsの定義にある各ディメンションのそれぞれのディメンション値にデータが適応されます。データは即時計算されません。

次の文を使用してactuals変数を計算します。(AGGREGATEコマンドの一部としてコンパイル処理が含まれているため、aggmapをコンパイルする必要はありません。)

AGGREGATE actuals USING act.agg

例9-29 複数の変数の集計

アナリティック・ワークスペースに、actualsという名前の変数およびforecastという名前の変数が含まれているとします。次の変数定義で示すように、これらの変数には同一のディメンションが同じ順序で定義されています。

DEFINE actuals DECIMAL <time, SPARSE <product, customer, channel>>
DEFINE forecast DECIMAL <time, SPARSE <product, customer, channel>>

次に、同じディメンションが同じ順序で定義されているaggmapオブジェクトを定義します。「1つの変数の集計」で説明したように、act.aggという名前の同じaggmapオブジェクトを定義します。各変数のデータを同じようにロールアップするには、同一のaggmapを使用し、1つの文で両方の変数を計算します。

次の文を使用してactuals変数およびforecast変数を計算します。

AGGREGATE actuals forecast USING act.agg

各ディメンションにあるそれぞれのディメンション値のすべてのデータをロールアップするようにaggmapで指定しているので、この文はactualsおよびforecastにあるすべてのデータをロールアップします。

例9-30 複数の変数でのCOUNTVARの使用

3つの変数(sales、unitsおよびprojected_sales)のデータを1つのAGGREGATEコマンドで集計するとします。各変数には次のディメンション性があります。

<month product geography>

COUNTVARで結果を計算するには、sales、unitsおよびprojected_salesと同じディメンション性を持つ3つのINTEGER変数を定義する必要があります。

DEFINE intsales INTEGER <month product geography>
DEFINE intunits INTEGER <month product geography>
DEFINE intprojsales INTEGER <month product geography>

次の文でINTEGER変数を指定します。

AGGREGATE sales units projected_sales USING sales.agg -
COUNTVAR intsales intunits inprojsales

例9-31 部分集計の実行

この例では、timeディメンションを直前の2つの期間に制限し、新しくロードされたデータのみ集計します。

tp2.aggというaggmapは、現在ステータスにあるすべての詳細データに対する事前集計を指定します。

DEFINE TP2.AGG AGGMAP
LD Full preaggregation
AGGMAP
RELATION time.parentrel PRECOMPUTE (ALL)
RELATION product.parentrel PRECOMPUTE (ALL)
END

この集計では、timeが直前の2つの期間に制限され、すべてのproduct値がステータスにあります。

LIMIT time TO LAST 2
STATUS time product
The current status of TIME is:
Apr02, May02
LIMIT product TO ALL

次のAGGREGATE文では、tp2.aggというaggmapを使用してunitsが計算されます。

AGGREGATE units USING tp2.agg

この集計の結果によって、子がステータスにある場合、親がステータスにあるかどうかにかかわらず親値が計算されることが示されます。

LIMIT time TO '2002' 'Q1.02' 'Q2.02' 'Jan02' to 'May02'
REPORT DOWN time units

-----------------------------------------UNITS-----------------------------------------
----------------------------------------PRODUCT----------------------------------------
TIME     FOOD      SNACKS    DRINKS   POPCORN   COOKIES   CAKES     SODA      JUICE
-------  --------  --------  -------- --------  --------  --------  --------  --------
2002     38        24        14       6         9         9         9         5
Q1.02    NA        NA        NA       NA        NA        NA        NA        NA
Q2.02    38        24        14       6         9         9         9         5
Jan02    NA        NA        NA       8         2         4         5         8
Feb02    NA        NA        NA       5         3         2         2         5
Mar02    NA        NA        NA       3         4         4         2         4
Apr02    21        13        8        2         7         4         6         2
May02    17        11        6        4         2         5         3         3

例9-32 キャップストーン集計

アナリティック・ワークスペースに次の値でgeog.dおよびtime.dという名前の2つの階層TEXTディメンションがあるとします。

GEOG.D
--------------
Boston
Medford
San Diego
Sunnydale
Massachusetts
California
United States

TIME.D
--------------
Jan76
Feb76
Mar76
76Q1

さらに、次の定義による4つの変数があるとします。

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>

これらの変数に対して次のREPORT文を発行するとします。レポートの出力には変数の詳細データが表示されます。

REPORT sales_jan76  sales_feb76 sales_mar76
REPORT DOWN geog.d sales_capstone76

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

-----------------SALES_CAPSTONE76------------------
----------------------TIME.D-----------------------
GEOG.D            Jan76        Feb76        Mar76         76Q1
-------------- ------------ ------------ ------------ ------------
Boston                   NA           NA           NA           NA
Medford                  NA           NA           NA           NA
San Diego                NA           NA           NA           NA
Sunnydale                NA           NA           NA           NA
Massachusetts            NA           NA           NA           NA
California               NA           NA           NA           NA
United States            NA           NA           NA           NA

1. 次の定義で2つのaggmapオブジェクトを定義します。

DEFINE leaf_aggmap AGGMAP
AGGMAP
RELATION geog.parentrel OPERATOR SUM
END

DEFINE capstone_aggmap AGGMAP
AGGMAP
RELATION time.parentrel OPERATOR SUM
END

2. データを集計するために、次の定義でcapstone_sourceという名前の変数を定義します。

DEFINE capstone_source VARIABLE TEXT <time.d>

REPORT文の次の出力に示されるように、time.dの各値に対して、該当する販売データを含む変数の名前をcapstone_sourceに移入します。

TIME.D            CAPSTONE_SOURCE
-------------- ----------------------
Jan76          sales_jan76
Feb76          sales_feb76
Mar76          sales_mar76
76Q1           NA

3. 次の文を発行して変数を集計します。

AGGREGATE sales_jan76 sales_feb76 sales_mar76 USING leaf_aggmap
AGGREGATE sales_capstone76 USING capstone_aggmap FROMVAR capstone_source

変数の集計後、REPORT文を発行すると、計算されたデータが変数に移入されます。

REPORT sales_jan76  sales_feb76 sales_mar76
REPORT DOWN geog.d sales_capstone76

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

-----------------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

ALLCOMPILE

ALLCOMPILEプログラムは、現行のアナリティック・ワークスペースにあるコンパイル可能なすべてのオブジェクトを1つずつコンパイルするプログラムです。ALLCOMPILEを実行すると、コンパイル中のオブジェクトの名前を示すメッセージが現行の出力ファイルに送信されます。

ALLCOMPILEはCOMPILEコマンドを使用します。したがって、オブジェクトをコンパイルする際に構文エラーがチェックされ、必要に応じてエラー・メッセージが現行の出力ファイルに記録されます。

構文

ALLCOMPILE [n]

パラメータ

n

ゼロ以上の値で指定するINTEGER式。この式は、UPDATE文が実行される前にコンパイルされるオブジェクトの数を指定します。たとえば、1を指定すると、各オブジェクトがコンパイルされるごとにUPDATE文が実行されます。0(ゼロ)を指定すると、すべてのオブジェクトがコンパイルされた後にUPDATE文が実行されます。この引数を省略すると、ALLCOMPILEはUPDATE文を実行しません。ALLCOMPILEの実行で更新を頻繁に行うと、アナリティック・ワークスペースの領域を最も有効に使用できます。

例

例9-33 ALLCOMPILEの出力

次の例は、4つのプログラムを含むアナリティック・ワークスペースでALLCOMPILEを実行した場合の出力です。

Compiling AUTOGO
Compiling READIT
Compiling REGION.REPORT
Compiling SALES.REPORT

ALLOCATE

ALLOCATEコマンドは、変数データを階層ディメンションの上位から下位へ順に割り当てることによって、上位レベルのデータから下位レベルのデータを計算するコマンドです。通常、予算編成、傾向予測および収益分析のためにデータを割り当てます。

構文

ALLOCATE source [SOURCE conjoint] [BASIS basisname [ACROSS dimname]] - [TARGET targetname [TARGETLOG targetlogname]] - [USING aggmap] [ERRORLOG errorlogfileunit]

パラメータ

source

割り当てる値を指定する変数または計算式。sourceオブジェクトが計算式の場合、TARGETキーワードで変数を指定する必要があります。sourceとして変数を指定してターゲット変数またはbasisname変数を指定しない場合、ALLOCATEは基礎およびターゲットとしてsourceを使用します。

SOURCE conjoint

ユーザーが変更したセルのリストを含む結合ディメンションを指定します。ALLOCATEコマンドはこのリストを使用して、変更されたすべてのソース・セルの割当てに必要な最小のターゲット・ステータスを作成します。

BASIS basisname

割当ての基準となるデータを指定する変数、リレーションまたは計算式を指定します。このデータによって、割り当てられた値を受け取るターゲット・セル、および均等演算または比例演算でターゲット・セルに割り当てられるソースの量が決定されます。

aggmapのRELATION(割当て用)文によって指定されたOPERATORがCOPY演算子(COPY、MIN、MAX、FIRST、LAST)の場合、どのターゲット・セルを更新するかを基礎を使用してALLOCATEコマンドに指定します。指定されたOPERATORがEVENの場合、ALLOCATEは割当てに使用するカウントを基礎から導き出します。指定されたOPERATORがPROPORTIONALの場合、ALLOCATEは基礎データを使用して各ターゲット・セルに割り当てる量を決定します。OPERATORがHCOPY、HFIRST、HLASTまたはHEVENの場合、ALLOCATEはBASISオブジェクトを使用しません。そのかわり、RELATION文で名前を付けたリレーションによって指定されるディメンション階層のすべてのターゲット・セルにソース・データを割り当てます。

基礎とターゲットの両方に同じ変数を指定した場合、ターゲット・セルの現行の値によって割当てが決定されます。基礎を指定しない場合、ALLOCATEコマンドは基礎としてソースを使用します。

ACROSS dimname

ALLOCATEコマンドが基礎でセルを検出するためにループ処理するディメンション(または名前付きコンポジット)を指定します。基礎は計算式も使用可能なので、ループするディメンションを使用して基礎ループからスパース性を排除することにより、大きなパフォーマンス効果を実現できます。

TARGET targetname

割り当てられた値を保持する変数を指定します。ソース・オブジェクトが計算式の場合、ターゲットを指定する必要があります。ソース・オブジェクトが変数であり、ターゲットを指定しない場合、ALLOCATEはターゲットとしてソースの変数を使用します。

TARGETLOG targetlogname

ALLOCATEが割当てのコピーを割り当てる変数(targetname変数と同様にディメンション化されている)、またはそのような変数を指定するリレーションを指定します。たとえば、timeおよびproductのディメンション値Jan01およびTVによって指定されたcosts変数のセルにALLOCATEが100の値を割り当て、その同じディメンション値によって指定されたcostacct変数のセルがtargetlogリレーションによって指定されると、ALLOCATEは指定されたcostacctセルにも100の値を割り当てます。

USING aggmap

割当てに使用する事前定義したaggmapの名前を指定します。この句を含めない場合、$ALLOCMAPプロパティを使用して事前に指定されている変数のデフォルトの割当て仕様をコマンドで使用します。

ERRORLOG errorlogfileunit

割当てデッドロック、エラーまたは他の情報のロギングにALLOCATEが使用するファイル・ユニットを指定します。割当てでデッドロックおよびエラーが生成されない場合、ALLOCATEはerrorlognameにNAを設定します。割当てで1つ以上のデッドロックまたはエラーが生成されると、そのイベントが指定されたファイルに送信されます。ALLOCATEは、割り当てられないままになっている割当てソースごとに1行ずつファイルに書き込みます。

ERRORLOGでファイル・ユニットを指定しない場合、ALLOCATEは情報を標準の出力デバイスに送信します。

使用上の注意

元の基礎値の保存

通常、ソース・オブジェクト、基礎オブジェクトおよびターゲット・オブジェクトは同じ変数なので、ターゲット変数のセルにある元の値によって割当ての比率が決定されます。割当てによって、ターゲット・セルの元の値が割り当てられた値で上書きされます。変数の元の値を保存するには、元の変数を基礎オブジェクトとして指定し、割り当てられた値をターゲット・オブジェクトとして新しい変数に保存します。異なる基礎オブジェクトおよびターゲット・オブジェクトを使用することによって、割り当てられたデータをプレビューできます。割り当てられた値を基礎と同じ変数に格納するには、基礎およびターゲットと同じオブジェクトで割当てを再度実行します。異なる基礎オブジェクトおよびターゲット・オブジェクトを使用する例として、割当ての基礎にactuals変数を使用し、ターゲットにbudget変数を使用する例を次に示します。

ソースまたは基礎の計算式の使用

ソース・オブジェクトおよび基礎オブジェクトに計算式が使用できるので、複雑な計算を行い、その結果をソース・オブジェクトまたは基礎オブジェクトに使用できます。たとえば、翌年の売上で30%増加を条件とする個々の製品の売上高を参照するには、次の計算式で増加後の売上高を表します。

DEFINE actualsWanted DECIMAL FORMULA <time, product>
EQ LAG(actuals, 1, time) * 1.3

ALLOCATEコマンドでsourceオブジェクトとしてACTUALSWANTEDを使用します。この例では、基礎としてACTUALS変数を使用しています。

複数割当てのトラッキング

TARGETLOG引数で変数を指定すると、その変数に割り当てられた値およびtarget変数に割り当てられた値を格納できます。この二重のエントリ割当てによって、同じターゲット・セルに対する複数の割当てをトラッキングできます。たとえば、一連の様々なコストを同じコスト・センターに割り当てると、ターゲット・セルの値が割当てごとに増加します。各割当てに異なるtargetlogname変数を指定することによって、各割当てを個別にトラッキングできます。

割当てエラーのロギング

ERRORLOG引数でファイルを指定すると、ロックおよびNAの基礎値が原因で発生したエラーを記録できます。ログによって、ソース値が割り当てられないままになっていることをアプリケーションにフィードバックできます。この情報に基づいて、たとえば、aggmapのRELATION文でHEVENなどの階層演算子を使用して割当てを変更できます。ALLOCERRLOGHEADERおよびALLOCERRLOGFORMATオプションを使用すると、エラー・ログの書式を設定できます。割当て仕様では、ERRORLOGおよびERRORMASK文を使用してエラー・ログのその他の部分も指定できます。

割当ての進捗状況のロギング

キューブ操作ログにより、割当ての進捗状況を記録および監視できます。このファイルを使用することにより、時間がかかる割当て中にフィードバックが得られ、今後の割当ての最適化に有効な情報を取得できます。

関連項目:
キューブ操作ログおよびDBMS_CUBE_LOGパッケージの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

例

例9-34 直接均等割当て

この例では、timeディメンション階層の1レベルで指定された値を、階層の中間レベルに値を割り当てず、下位レベルの値によって指定されている変数のターゲット・セルに直接割り当てます。timemonthyearリレーションはtime値の階層関係を指定します。割当てのソース、基礎およびターゲットはすべて同じ変数PROJBUDGETであり、その変数はdivision、timeおよびlineにディメンション化されています。timeディメンションは非一意の連結ディメンションであり、ベース・ディメンションとしてyear、quarterおよびmonthがあります。このtimeディメンションは、<year: Yr02>、<quarter: Q1.02>、<quarter: q1.02>と、<month: Jan02>から<month: Jun02>までに制限されています。次の文によってprojbudget変数が定義され、セルの値が6000に設定され、その変数のレポートが作成されます。

DEFINE projbudget VARIABLE DECIMAL <division time line>
projbudget(division 'CAMPING' time '<YEAR: YR02>' line  'MARKETING') = 6000
REPORT projbudget

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

LINE: MARKETING
-PROJBUDGET--
--DIVISION---
TIME                CAMPING
---------------- -------------
<year: Yr02>          6,000.00
<quarter: Q1.02>            NA
<quarter: Q2.02>            NA
<month: Jan02>              NA
<month: Feb02>              NA
<month: Mar02>              NA
<month: Apr02>              NA
<month: May02>              NA
<month: Jun02>              NA

次の文によってtimeディメンションのセルフ・リレーションが定義され、month値をyear値に直接関連付け、そのリレーションの値のレポートが作成されます。

DEFINE timemonthyear RELATION time <time>
LIMIT month TO 'JAN02' TO 'JUN02'
timemonthyear(time month) = '<YEAR: YR02>'
REPORT timemonthyear

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

TIME             TIMEMONTHYEAR
---------------- -------------
<year: Yr02>     NA
<quarter: Q1.02> NA
<quarter: Q2.02> NA
<month: Jan02>   <year: Yr02>
<month: Feb02>   <year: Yr02>
<month: Mar02>   <year: Yr02>
<month: Apr02>   <year: Yr02>
<month: May02>   <year: Yr02>
<month: Jun02>   <year: Yr02>

次の文によってaggmapが定義され、割当て仕様に文が入力されます。これにより、projbudgetから<year: Yr02>によって指定される値がmonthディメンション値によって指定される同じ変数のセルに割り当てられ、projbudgetのレポートが作成されます。変数のターゲット・セルがNA値なので、割当て仕様のRELATION文ではHEVEN演算子が指定されます。ALLOCATEコマンドによって1つの変数projbudgetのみが指定されているので、その変数が割当てのソースおよびターゲットになります。割当てはHEVEN演算なので、基礎オブジェクトは必要ありません。割当て仕様のリレーションで指定されている階層に従って、割当てはyearソース値からmonthターゲット値に直接行われます。

DEFINE projbudgmap AGGMAP
ALLOCMAP
RELATION timemonthyear OPERATOR HEVEN
END
ALLOCATE projbudget USING projbudgmap
REPORT projbudget

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

LINE: MARKETING
-PROJBUDGET--
--DIVISION---
TIME                CAMPING
---------------- -------------
<YEAR: YR02>          6,000.00
<QUARTER: Q1.02>            NA
<QUARTER: Q2.02>            NA
<MONTH: JAN02>        1,000.00
...
<MONTH: JUN02>        1,000.00

例9-35 ロックを伴う再帰的均等割当て

この例では、timeディメンション階層の1レベルで指定された値を中間レベルのターゲット・セルに最初に変数で割り当て、次に階層の最下位レベルの値によって指定されているセルに割り当てます。timeparentリレーションはtime値の階層関係を指定します。割当てのソース、基礎およびターゲットはprojbudgetです。division、timeおよびlineディメンションのステータスは直接割当ての例と同じです。この例の最初の設定では、projbudget変数の値は<year: Yr02>で指定されたセルの6000のみです。

DEFINE timeparent RELATION time <time>
LIMIT quarter TO 'Q1.02' 'Q2.02'
timeparent(time quarter) = '<YEAR: YR02>'
LIMIT month TO 'JAN02' TO 'MAR02'
timeparent(time month) = '<QUARTER: Q1.02>'
LIMIT month TO 'APR02' TO 'JUN02'
timeparent(time month) = '<QUARTER: Q1.02>'
REPORT timeparent

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

TIME             TIMEPARENT
---------------- -------------
<year: Yr02>     NA
<quarter: Q1.02> <year: Yr02>
<quarter: Q2.02> <year: Yr02>
<month: Jan02>   <quarter: Q1.02>
<month: Feb02>   <quarter: Q1.02>
<month: Mar02>   <quarter: Q1.02>
<month: Apr02>   <quarter: Q2.02>
<month: May02>   <quarter: Q2.02>
<month: Jun02>   <quarter: Q2.02>

次に、セルを割当ての対象外にするセルのロックの例を示します。セルをロックするには値セットが必要なので、次の文で定義してtimeディメンションを必要な値に制限し、値を値セットに割り当て、timeディメンションのステータスをリセットします。

DEFINE timeval TO '<QUARTER: Q2.02>'
LIMIT time TO '<Year: YR02>' '<Quarter: Q1.02>'  '<Quarter: Q2.02>' -
'<month: Jan02>' '<month: Feb02>' '<month: Mar02>' -
'<month: Apr02>' '<month: May02>' '<month: Jun02>

次の文によって、projbudgmapという名前のaggmapの仕様が修正されます。この場合、割当て仕様のRELATION文はtimeparentリレーション、HEVEN演算子およびPROTECT引数を指定します。READWRITEキーワードは、ロックされたセルの子も割当ての対象外にすることを指定します。NONORMALIZEキーワードは、ロックされたセルの値がターゲット・セルに割り当てられるまでソース値から差し引かれないことを指定します。その後、この文によってソース値が割り当てられ、結果のレポートが作成されます。

CONSIDER projbudgmap
ALLOCMAP
RELATION timeparent OPERATOR HEVEN ARGS PROTECT NONORMALIZE READWRITE timeval
END

ALLOCATE projbudget USING projbudgmap
REPORT projbudget

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

LINE: MARKETING
-PROJBUDGET--
--DIVISION---
TIME                CAMPING
---------------- -------------
<year: Yr02>          6,000.00
<quarter: Q1.02>      6,000.00
<quarter: Q2.02>            NA
<month: Jan02>        2,000.00
<month: Feb02>        2,000.00
<month: Mar02>        2,000.00
<month: Apr02>              NA
<month: May02>              NA
<month: Jun02>              NA

例9-36 再帰的比例割当て

この例では、再帰的均等割当てと同じリレーションを使用しますが、PROPORTIONAL演算子を使用し、セルをロックしません。比例割当ては、ターゲット・セルに割り当てる値を計算するために基礎オブジェクトの値を使用するため、projbudget変数にはその各セルに割り当てられている値が含まれています。<year: Yr02>セルの値は、割り当てられていたとおり6000です。この値は下位レベルの集計ではありません。割当て前のprojbudgetのレポートで生成される結果は次のとおりです。

LINE: MARKETING
-PROJBUDGET--
--DIVISION---
TIME                CAMPING
---------------- -------------
<year: Yr02>          6,000.00
<quarter: Q1.02>      1,000.00
<quarter: Q2.02>      2,000.00
<month: Jan02>          300.00
<month: Feb02>          100.00
<month: Mar02>          600.00
<month: Apr02>          400.00
<month: May02>          800.00
<month: Jun02>          800.00

次の文は、前の例で使用したaggmapの仕様をPROPORTIONAL演算子を指定する新しいRELATION文に変更した文です。この割当て仕様には、ソース値が割当て後にゼロ値に置き換えられることを指定するSOURCEVAL ZERO文が含まれます(詳細は、ALLOCMAPコマンドのSOURCEVAL文を参照)。その後、この文によってソース値が割り当てられ、結果のレポートが作成されます。

CONSIDER projbudgmap
ALLOCMAP JOINLINES('RELATION timeparent OPERATOR PROPORTIONAL timeval' -
'SOURCEVAL ZERO' -
'END')
ALLOCATE projbudget USING projbudgmap
REPORT projbudget

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

TIME             TIMEPARENT
LINE: MARKETING
-PROJBUDGET--
--DIVISION---
TIME                CAMPING
---------------- -------------
<year: Yr02>                 0
<quarter: Q1.02>      2,000.00
<quarter: Q2.02>      4,000.00
<month: Jan02>          600.00
<month: Feb02>          200.00
<month: Mar02>        1,200.00
<month: Apr02>          800.00
<month: May02>        1,600.00
<month: Jun02>        1,600.00

ALLOCMAP

ALLOCMAPコマンドは、aggmapオブジェクトを割当て仕様として識別し、仕様の内容を入力するコマンドです。AGGMAPを使用して割当て仕様をaggmapオブジェクトに割り当てるには、最新の定義または現行のセッション中に検討された定義である必要があります。そうでない場合は、最初にCONSIDER文を使用し、現行の定義にする必要があります。

AGGMAPコマンドの代替コマンドはEDIT AGGMAPコマンドであり、OLAP Worksheet内でのみ使用できます。EDIT AGGMAPコマンドを実行すると、aggmapオブジェクトの割当て仕様を削除または変更できる編集ウィンドウが開きます。OLAP Worksheetを使用して割当て仕様をコーディングする場合は、「新しく定義されたAggmapの編集による割当て仕様のコーディング」にある手順を参照してください。

関連項目:
「OLAP DML割当てオブジェクト」および「割当てオプション」

構文

ALLOCMAP [specification]

パラメータ

specification

現行のaggmapオブジェクトの割当て仕様である複数行のテキスト式。割当て仕様は、ALLOCMAP文で始まり、END文で終わります。これらの2つの文の間に、指定する計算に応じて次の文のうち1つ以上をコーディングします。

CHILDLOCK

DEADLOCK

DIMENSION(割当て用)

ERRORLOG

ERRORMASK

MEASUREDIM(割当て用)

RELATION(割当て用)

SOURCEVAL

VALUESET

各文は、複数行のテキスト式で構成されています。コマンドライン・レベルでALLOCMAP文をコード化する際は、改行デリミタ(\n)で文を区切るか、JOINLINESを使用します。

どの文を含めるかを決定する方法については、「割当て仕様の設計」を参照してください。

使用上の注意

割当て仕様の設計

最小限として、割当て仕様はRELATION文またはVALUESET文から構成されます。ただし、次のように他のOLAP DML文を仕様に含めることで、より複雑な割当て仕様を作成、またはエラー処理のデフォルト設定を変更できます。

1. 階層割当ての場合、階層の親子関係を識別するためのセルフ・リレーションを指定するRELATION文。いくつかの処理を実行する順で文をリストするか、または実行順序が重要でなければ、変数定義にあるディメンションと同じ順序でRELATION文をリストします。

2. 非階層割当ての場合、割当ての際に使用される値を指定するVALUESET文。

3. ディメンション階層の親と子の両要素に対するロックをaggmapのRELATION文で指定しているか否かを検出するかどうかをALLOCATEコマンドに指定するCHILDLOCK文。

4. ターゲット・セルがロックされているか、または一部の処理のためにNAの基礎値がそのセルに含まれることが原因で、割当てで値を配布できないときに発生するデッドロックを検出した場合、割当てを継続するかどうかをALLOCATEコマンドに指定するDEADLOCK文。

5. ディメンションがターゲット変数およびソース・オブジェクトまたは基礎オブジェクトによって共有されない場合、そのディメンションのステータスとして設定する単一の値を指定するDIMENSION(割当て用)文。

6. ALLOCATEコマンドによって指定されるエラー・ログに記録可能なエラーの数、およびその最大数までエラーが発生した場合に割当てを継続するかどうかを指定するERRORLOG文。

7. エラー・ログに記録しないエラー条件を指定するERRORMASK文。

8. ソース・データを変数から取得している場合、割当て後にALLOCATEがソース・データ値を変更するかどうかを指定するSOURCEVAL文。

aggmapの型

aggmapの型を確認するには、AGGMAPINFOファンクションを使用します。ALLOCMAP文を使用して割当て仕様を入力したaggmapの型はALLOCMAPになり、AGGMAP文を使用して集計仕様を入力したaggmapの型はAGGMAPになります。aggmapを定義したが仕様を入力していない場合の型はNAになります。

各ディメンションに対するRELATION

特定のディメンションに対してaggmapに指定できるRELATION文は1つのみです。

各ディメンションに対する階層

割当て演算では、ディメンションの1階層のみを上位から下位へ順に処理します。ディメンションに複数の階層がある場合、rel-name引数の後に修飾データ参照を使用してディメンションを1つの階層に制限する必要があります。

例

例9-37 入力ファイルからの割当て仕様

この例では、aggmapとその仕様はsalesalloc.txtという名前のASCIIディスク・ファイルに保存されています。このファイルの文はINFILE文を使用することによってアナリティック・ワークスペースで実行されます。salesalloc.txtの文は次のとおりです。

IF NOT EXISTS ('salesalloc')
THEN DEFINE salesalloc AGGMAP
ELSE CONSIDER salesalloc
ALLOCMAP
RELATION time.parent OPERATOR EVEN
RELATION product.parent OPERATOR EVEN
RELATION geography.parent OPERATOR EVEN
SOURCEVAL ZERO
DEADLOCK SKIP
END

salesallocというaggmapをアナリティック・ワークスペースに含めるには、次の文を実行します。

INFILE 'salesalloc.txt'

これで、sales.agg aggmapが定義され、3つのRELATION文、SOURCEVAL文およびDEADLOCK文が含まれるようになりました。この例では、リレーションtime.parent、product.parentおよびgeography.parentがそれぞれの子のディメンション値をディメンション階層の親に関連付けるので、ALLOCATE文によってソース値がターゲット変数のすべての集計レベルのセルおよび詳細レベルのセルに均等に割り当てられます。DEADLOCK文は、ターゲット階層のブランチがロックされているか、NA値を持つ場合にエラーをロギングし、割当てを継続するようにALLOCATE文に指定します。SOURCEVAL文は、ソース・データの割当て後、ソース・セルにゼロ値を割り当てるようにALLOCATEに指定します。

これにより、次のようなALLOCATE文でsalesallocというaggmapを使用できます。

ALLOCATE sales USING salesalloc

例9-38 テキスト式からの割当て仕様

この例では、salesallocというaggmapがすでに定義されています。この仕様は、ALLOCMAP文に対するテキスト式の引数としてaggmapに追加されます。

CONSIDER salesalloc
ALLOCMAP
RELATION time.parent OPERATOR EVEN
RELATION product.parent OPERATOR EVEN
RELATION geography.parent OPERATOR EVEN
SOURCEVAL ZERO
DEADLOCK SKIP

例9-39 割当て仕様における単一ディメンション値の指定

この例では、sales変数から計算される値をprojectedsales変数のセルに比例割当てします。sales変数は、time、product、customerおよびchannelディメンションでディメンション化されます。

次に、この例では、projectedsales変数を割当てのターゲットとして使用し、increasefactor計算式をソースとして使用するように定義します。この計算式はsalesの値を10%増加します。さらに、この例では、timeディメンションを制限し、2001年を2002年の各四半期に関連付けるytoq.relリレーションを作成します。次のLIMITコマンドは、salesおよびprojectedsalesによって共有されるディメンションを制限します。

さらに、この例では、aggmapを作成し、ALLOCMAP文を使用してRELATION文およびDIMENSION文を作成したaggmapに入力します。RELATION文は、割当てに使用するディメンション階層としてytoq.relリレーションを指定し、割当てが比例であることを指定します。DIMENSION文は、割当てが行われる間、channelディメンションのステータスをtotalchannelに設定するようにALLOCATEに指定します。

DEFINE projectedSales DECIMAL VARIABLE <time, SPARSE <product, customer>>
DEFINE increaseFactor DECIMAL FORMULA <product>
EQ sales * 1.1
LIMIT time TO '2001' 'Q1.02' TO 'Q4.02'
DEFINE YtoQ.rel RELATION time <time>
LIMIT time TO 'Q1.02' to 'Q4.02'
YtoQ.rel = '2001'
LIMIT time TO '2001' 'Q1.02' to 'Q4.02'
LIMIT product TO 'TotalProduct' 'Videodiv' 'Audiodiv' 'Accdiv'
LIMIT customers TO 'TotalCustomer'
DEFINE time.alloc AGGMAP
ALLOCMAP
RELATION YtoQ.rel OPERATOR PROPORTIONAL
DIMENSION channel 'TotalChannel'
END
ALLOCATE increaseFactor BASIS sales TARGET projectedSales USING time.alloc

割当ての基礎であるsales値は次のとおりです。

CHANNEL: TOTALCHANNEL
CUSTOMERS: TOTALCUSTOMER
---------------PROJECTEDSALES---------------
--------------------TIME--------------------
PRODUCT           2001      Q1.02      Q2.02      Q3.02      Q4.02
------------     ------     ------     ------     ------     ------
TotalProduct      7000       1000       2000       3000       1000
Videodiv          4100        600       1100       1900        500
Audiodiv          1700        200        600        600        300
Accdiv            1200        200        300        500        200

割当て後のtotalchannelのprojectedsalesのレポートは次のとおりです。

CHANNEL: TOTALCHANNEL
CUSTOMERS: TOTALCUSTOMER
---------------PROJECTEDSALES---------------
--------------------TIME--------------------
PRODUCT           2001      Q1.02      Q2.02      Q3.02      Q4.02
------------     ------     ------     ------     ------     ------
TotalProduct       NA         NA         NA         NA         NA
Videodiv           NA        660       1210       2090        550
Audiodiv           NA        220        660        660        330
Accdiv             NA        220        330        550        220

例9-40 割当て仕様におけるRELATION文の入力

この例では、time.typeディメンションを定義し、timeディメンションの2つの階層を追加します。これにより、階層の型(time.type)をtimeディメンションに関連付けるtime.timeリレーションを定義します。この例ではtime.allocというaggmapを定義します。ALLOCMAPコマンドを使用すると、RELATION文をaggmapに入力します。RELATION文は、割当てで使用するtimeディメンション階層の値を指定し、QDRでtimeディメンションを1つの階層に制限し、割当てにEVEN演算を指定します。次にALLOCATEコマンドは、time.allocというaggmapを使用して、データをソース・オブジェクトからターゲット変数に割り当てます。ALLOCATEコマンドのソース・オブジェクト、基礎オブジェクトおよびターゲット・オブジェクトは、同じsales変数です。

DEFINE time.type TEXT DIMENSION
MAINTAIN time.type add 'Fiscal'
MAINTAIN time.type add 'Calendar'
DEFINE time.time RELATION time <time, time.type>
DEFINE time.alloc AGGMAP

ALLOCMAP
RELATION time.time (time.type 'Fiscal') OPERATOR EVEN
END

ALLOCATE sales USING time.alloc

CHILDLOCK

割当て仕様では、CHILDLOCK文は、ディメンション階層の親とその子の両方に対するロックを割当て仕様のRELATION文で指定しているかどうかを検出するようにALLOCATE文に指定します。親とそのいずれかの子の両方をロックしていると、割当ての結果が不適切になる場合があります。

構文

CHILDLOCK [DETECT|NODETECT]

パラメータ

DETECT

ディメンション階層の親とそのいずれかの子に対して割当てロックが存在することを検出するようにALLOCATE文に指定します。ロックされた親および子が検出されると、ALLOCATE文によって割当てのエラー・ログにエントリが作成されます。

NODETECT

(デフォルト)ディメンション階層の親とそのいずれかの子に対してロックが存在する場合でも、割当てを継続するようにALLOCATE文に指定します。

例

割当て仕様にCHILDLOCK文を使用する例は、例9-79「割当て用のAggmapの作成」を参照してください。

DEADLOCK

割当て仕様では、DEADLOCK文は、ターゲット・セルが割当て仕様のRELATION文によってロックされているか、またはターゲット・セルがNAの基礎値を持つために、ディメンション階層の値によって指定されるターゲット・セルにソース値を配布できない場合の処理をALLOCATE文に指定します。

構文

DEADLOCK [SKIP|NOSKIP]

パラメータ

SKIP

ターゲット・セルがロックされているか、NAの基礎値を持つために、ディメンション階層のブランチによって指定されるセルにソース値を配布できない場合でも、エラーをロギングして割当てを継続するようにALLOCATE文に指定します。

NOSKIP

ターゲット・セルがロックされているか、NAの基礎値を持つために、ディメンション階層のブランチのセルにソース値を配布できない場合、割当てを中止してエラーを返すようにALLOCATE文に指定します。NOSKIPはALLOCATEコマンドによって使用されるaggmapにDEADLOCK文を含めない場合のデフォルトのアクションです。

例

割当て仕様でDEADLOCK文を使用する例は、例9-37「入力ファイルからの割当て仕様」および例9-38「テキスト式からの割当て仕様」を参照してください。

DIMENSION(割当て用)

割当て仕様では、DIMENSION文は、ステータスをディメンションの単一の値に設定します。割当て仕様におけるこのディメンションは、ソース・オブジェクト、基礎オブジェクトおよびターゲット・オブジェクトが共有しないディメンションです。割当て仕様でDIMENSION文によってこのような単一の値が指定されていない場合、Oracle OLAPは割当てを実行する際にディメンションの現行のステータス値を使用します。

DIMENSION文を使用すると、ディメンションのステータスを割当てで使用したい値に設定できます。ソース・オブジェクト、基礎オブジェクトおよびターゲット・オブジェクトによって共有されない各ディメンションには、個別のDIMENSION文を使用する必要があります。

構文

DIMENSION dimension 'dimval'

パラメータ

dimension

制限するディメンションの名前。

dimval

割当てが行われる間、ディメンションのステータスとして設定するディメンションの単一の値。

例

割当て仕様にDIMENSION文を使用する例は、例9-39「割当て仕様における単一ディメンション値の指定」を参照してください。

ERRORLOG

割当て仕様では、ERRORLOG文は、ロギングする割当てエラー条件の数、およびロギングしたエラーの数が指定した最大数に達した場合に割当てを継続するか中止するかを指定します。エラー・ログはALLOCATEコマンドにERRORLOGキーワードで指定します。

構文

ERRORLOG [UNLIMITED|MAX <num>] [STOP|NOSTOP]

パラメータ

UNLIMITED

エラーを制限数なくエラー・ログに書き込むようにALLOCATEコマンドに指定します。(デフォルト。)

MAX num

ALLOCATEによってエラー・ログに書き込まれるエラーの最大数を指定します。

STOP

NOSTOP

ALLOCATEがエラー・ログにエラーを最大数まで書き込んだ場合、割当てを中止するかどうかを指定します。STOPを指定すると、割当ては中止されます。NOSTOPを指定すると割当ては継続されますが、ALLOCATEはそれ以降のエラーをエラー・ログに書き込みません。UNLIMITEDを指定している場合、STOP引数およびNOSTOP引数は無効になり、エラーの発生数にかかわらず割当てが継続されます。

使用上の注意

エラー・ログの書式設定

ALLOCERRLOGFORMATオプションは、ALLOCATEコマンドにERRORLOG引数で指定するエラー・ログの内容および書式を設定するオプションです。エラー・ログのヘッダーはALLOCERRLOGHEADERオプションで指定します。

ERRORMASK

割当て仕様では、ERRORMASK文は、割当てエラー・ログに記録しないエラー条件を指定します。エラー・ログはALLOCATEコマンドにERRORLOGキーワードで指定します。

構文

ERRORMASK <num...>

パラメータ

num...

エラー・ログに記録しないエラーの番号。

例

例9-41 CHILDLOCKエラーを対象外にする

CHILDLOCKエラーを対象外にするには、割当て仕様に次の文を入力します。

ERRORMASK 10

例9-42 すべての割当てエラーを対象外にする

すべてのエラーを対象外にするには、割当て仕様に次の文を入力します。

ERRORMASK 1 2 3 4 5 6 7 8 9 10

MEASUREDIM(割当て用)

割当て仕様では、MEASUREDIM文は、演算子変数または引数変数の定義で指定されるメジャー・ディメンションの名前を識別します。ただし、メジャー・ディメンションは、aggmapオブジェクトの定義に含まれている場合、指定できません。

構文

MEASUREDIM name

パラメータ

name

メジャー・ディメンションの名前。メジャー・ディメンションは、ユーザーが定義するディメンションです。ディメンション値は、既存の変数の名前です。

関連項目:
AGGMAPコマンドのMEASUREDIM(集計用)文

RELATION(割当て用)

割当て仕様では、RELATION文は、ディメンション階層のパスおよび割当ての方法を指定するリレーションを識別します。ソース・データをディメンション階層の上位から下位へ順に割り当てるには、階層の値をRELATION文で指定し、割当てのターゲットである変数のセルを識別する必要があります。割当てのターゲットが多次元変数の場合、ソース・データを上位から下位へ順に割り当てるには、各ディメンションに個別のRELATION文を含める必要があります。aggmapのRELATION文の順序で割当ての順序が決定します。最初のRELATION文のディメンション階層で上位から下位へ順に割当てが行われ、続いてその後の文が処理されていきます。

注意:
AGGMAPコマンドの一部としてのみ使用可能なこのRELATION文は、ディメンションのデフォルト・リレーションを定義するRELATIONコマンドや、AGGMAPコマンドの一部として使用されるRELATION文とは混同しないでください。

構文

RELATION rel-name [(qdr. . .)] OPERATOR {operator|} -

[NAOPERATOR operator] [REMOPERATOR operator] -

[PARENTALIAS dimension-alias-name] -

[ARGS {[FLOOR floorval] [CEILING ceilval] [MIN minval] [MAX maxval] -

[NAHANDLE {IGNORE|CONSIDER|PREFER}] -

[ADD|ASSIGN] [PROTECT [NONORMALIZE] [READWRITE|WRITE] lockvalueset] -

[WEIGHTBY [ADD|MULTIPLY] [WNAFILL nafillval] weightobj]}]

パラメータ

rel-name

割当てのパスを識別するディメンション階層の値を指定するOracle OLAPのセルフ・リレーション。rel-nameの値によって識別されるターゲット変数のセルが割り当てられたデータを受け取ります。

qdr. . .

セルフ・リレーションの一部ではないリレーションの各ディメンションに単一のディメンション値を指定する1つ以上の修飾データ参照。セルフ・リレーションに複数の階層がある場合、セルフ・リレーションのディメンションの階層ディメンションにqdrを指定し、割当てに含まれない階層を単一の値に制限する必要があります。

OPERATOR operator

表9-3「割当て演算子」に示されている割当て方法、またはALLOCOPSにより返される割当て方法を指定します。この方法によって、ALLOCATEが値を割り当てるrel-nameリレーションのターゲット変数のセルが決定されます。演算子がFIRST、LAST、HFIRSTおよびHLASTの場合、ALLOCATEはディメンションの値の順序を使用してセルを決定します。ディメンションの順序は、割当てディメンションのデフォルトの論理順です。割当てには、デフォルトの演算子はありません。

表9-3 割当て演算子

演算子

説明

COPY

基礎データ値がNA以外のターゲット・セルすべてに割当てソースをコピーする。

HCOPY

階層によって指定されるターゲット・セルのデータがNAの場合でも、そのすべてのセルに割当てソースをコピーする。ソース・データがNAの場合、そのNA値は割当てのターゲット・セルには割り当てられない。

MIN

最小の基礎データ値を持つターゲットに割当てソースをコピーする。

MAX

最大の基礎データ値を持つターゲットに割当てソースをコピーする。

FIRST

非NAの基礎データ値を持つ最初のターゲット・セルに割当てソースをコピーする。

HFIRST

階層によって指定される最初のターゲット・セルの現行のデータ値がNAの場合でも、そのセルに割当てソースをコピーする。

LAST

非NAの基礎データ値を持つ最後のターゲット・セルに割当てソースをコピーする。

HLAST

階層によって指定される最後のターゲット・セルの現行のデータ値がNAの場合でも、そのセルに割当てソースをコピーする。

EVEN

非NAの基礎データ値を持つターゲット・セルの数で割当てソースを除算し、その商を各ターゲット・セルに適用する。

HEVEN

NA値のターゲット・セルを含めたターゲット・セルの数で割当てソースを除算し、その商を各ターゲット・セルに適用する。

PROPORTIONAL

基礎データ値が非NAのターゲット・セルのデータ値を合計してその数で割当てソースを除算し、各ターゲット・セルの基礎データ値とその商をそれぞれ乗算し、その結果データをそのターゲット・セルに適用する。

NAOPERATOR operator

NAOPERATORキーワードの後のoperatorには、ALLOCATEの処理でNAまたはロックベースのデッドロックを検出したときに使用する演算子を指定します。有効な演算子は、表9-3「割当て演算子」に示されているHFIRST、HLASTおよびHEVENです。

REMOPERATOR operator

REMOPERATORキーワードの後のoperatorには、割当てによって生じた残りを格納する際にALLOCATEの処理が使用する演算子を指定します。たとえば、INTEGER値である10を階層の同レベルの3つのセルに割り当てると残りは1になります。REMOPERATORは、この残りを割当て演算によって格納する場所を指定します。REMOPERATORの有効な演算子は、表9-3「割当て演算子」に示されているMIN、MAX、FIRST、HFIRST、LASTおよびHLASTです。

ARGS

追加引数で割当て演算の追加パラメータを指定することを示します。これらの引数はすべて、rel-nameによって指定されるディメンション階層に一様に適用されます。

PARENTALIAS dimension-alias-name

親に応じて特殊な割当て(親または子による加重など)を指定します。dimension-alias-nameには、rel-nameのディメンションの別名を指定します。

ARGS argument...

割当て演算に追加パラメータを指定するARGSキーワードの後の1つ以上の引数。これらの引数はすべて、rel-nameによって指定されるディメンション階層に一様に適用されます。

FLOOR floorval

割り当てられるターゲット・データ値がfloorvalに指定される値より小さい場合、そのターゲット・セルに割り当てるデータをNAにするように指定します。PROPORTIONAL演算子が指定されている場合にのみ、この引数はリレーションに適用されます。

CEILING ceilval

割り当てられるターゲット・データ値がceilvalに指定される値より大きい場合、そのターゲット・セルに割り当てられるデータをNAにするように指定します。PROPORTIONAL演算子が指定されている場合にのみ、この引数はリレーションに適用されます。

MIN minval

割り当てられるターゲット・データ値がminvalに指定される値より小さい場合、そのターゲット・セルに割り当てられるデータをminvalにするように指定します。

MAX maxval

割り当てられるターゲット・データ値がmaxvalに指定される値より大きい場合、そのターゲット・セルに割り当てられる値をmaxvalにするように指定します。

NAHANDLE

ALLOCATEでのNA値の処理方法を指定します。OPERATORがMINまたはMAXである場合にのみ有効です。

- IGNOREは、MIN演算またはMAX演算においてALLOCATEがNA値を無視するように指定します。(デフォルト)

- CONSIDERは、ALLOCATEがNA値をゼロとして処理するように指定します。ただし、ターゲット・セルのデータ値が実際にゼロである場合、そのゼロのセルは割り当てられるデータ値を受け取り、NAのセルはデータ値を受け取りません。

- PREFERは、ALLOCATEがNA値をゼロとして処理するように指定します。この場合、NAがゼロ値より優先されるので、割り当てられるデータ値をNAのセルが受け取り、実際にゼロ値のセルはデータ値を受け取りません。

ADD

割り当てられるデータをターゲット・セルにある現行のデータに追加するようにALLOCATEに指定します。

ASSIGN

割り当てられるデータでターゲット・セルのデータを置き換えるようにALLOCATEに指定します(デフォルトの動作)。

PROTECT lockvalueset

割当てのターゲットにならないようにロックするディメンション値のセットを指定します。ソース・データを割り当てる前に、ソース・データから指定のロックされたセルのデータ値を差し引くことによって、割当て演算はソースを正規化します。

NONORMALIZE

割当て演算がソース・データを正規化しないことを指定します。NONORMALIZEを使用すると、lockvaluesetによって指定されるディメンション値より下位にある階層の値を割当てから効果的に削除できます。

READWRITE

ロックされたデータ値は後に続く割当てでソース・データとして使用できないので、lockvalueset値より下位にある階層のデータをロックすることを指定します。

WRITE

割当てにおいて、lockvaluesetディメンション値によって識別されるセルにデータ値を格納できないが、そのセルのデータを後に続くステップでソース・データとして使用できることを指定します。ただし、NAまたはZEROを指定するSOURCEVAL文がaggmapにあり、ロックされたセルが割当てのソースの場合、割当て後にALLOCATEはロックされたセルの値をNAまたはゼロに設定します。

WEIGHTBY

weightobjで指定された値を割当てに使用するよう指定します。この句を使用すると、単位または通貨の変換などの処理ができます。

ADD

ALLOCATEに対して、weightobjで指定された値をターゲットの既存のデータ値に加算し、その合計をターゲット・セルに割り当てるよう指定します。

MULTIPLY

(デフォルト)ALLOCATEに対して、weightobjで指定された値をターゲットのデータ値に乗算し、その値を割り当てるよう指定します。

WNAFILL

ALLOCATEに対して、weightobjで指定された値をnafillval値に適用する前にセルのNA値を置き換えるよう指定します。

nafillval

ALLOCATEにおいて、NA値と置き換えられる値です。WEIGHTBY句にADDオプションを指定した場合、デフォルトのNAの埋込み値は0ですが、それ以外の場合はデフォルトのNAの埋込み値は1になります。

weightobj

Oracle OLAPが、ターゲット・セルに格納する直前に割り当てられたデータに適用する加重値としての変数、計算式またはリレーションの名前です。リレーションを使用した場合、加重リレーションに基づいてターゲット変数が参照され、そのセルが割当てターゲット・セルに適用されます。

使用上の注意

割当てのパスの指定

割当てのパスは、割当てシステムが使用するソース・データからターゲット・データまでのルートです。割当てパスが異なると、その結果は大幅に異なります。このパスは、aggmapに入力するRELATION文で指定します。RELATION文のリレーション・オブジェクトおよびそのRELATION文の順序によって、割当てのパスおよび方法が指定されます。

割当てパスは、ディメンション階層の任意のレベルから階層の任意の下位レベルまでのルートです。階層のメンバーを相互に関連付けるリレーション・オブジェクト(セルフ・リレーション)を使用して、割当てに関係する階層の要素を識別できます。割当ては、aggmapの最初のRELATION文でディメンション階層を上位から下位へ順に処理し、続いて2番目のRELATION文で階層を上位から下位へ順に処理していきます(以降同様)。

ディメンションに複数の階層がある場合、割当てに使用する階層を指定するためにqdr引数をRELATION文で使用する必要があります。リレーションで指定する階層には循環リレーションを含めないでください(たとえば、ディメンション値Aがディメンション値Bに関連し、ディメンション値Bがディメンション値Cに関連し、ディメンション値Cがディメンション値Aに関連するリレーションなど)。

割当てパスのタイプ

ソースからターゲットへ値を割り当てる際に使用できるパスの種類を次に示します。

- 直接割当てパス: 階層の中間ノードに対する割当てを行わずに、ソース・セルから最終のターゲット・セルに値を直接割り当てます。たとえば、階層timeディメンションのQuarterレベルのディメンション値によって指定されるソース・データ値をMonthレベルの値に、またはYearレベルのディメンション値によって指定されるソース・データ値をMonthレベルの値に割り当てます。

- 再帰的下降階層パス: 値を階層の中間ノードに割り当ててから最終のターゲット・セルに割り当てます。たとえば、productディメンションのCategoryレベルのディメンション値によって指定されるソース・データ値を、Subcategoryレベルの値に割り当ててからProductIDレベルの値に割り当てます。

- 多次元割当てパス: 最初に1つのディメンションに対して上位から下位へ順に割り当ててから、別のディメンションに対して上位から下位へ順に割り当てます。直接または再帰的、あるいはその両方の組合せの割当てが使用可能です。割当ての順序によって結果が異なる場合があります。

- 連立多次元割当てパス: 値の割当て先になる変数の非NAのセルを指定するコンポジット・ディメンションを作成することにより、複数のディメンションによって指定される複数の変数セルに対して値の直接割当てを同時に実行します。その後、そのコンポジットを割当ての基礎として使用します。

割当て用のRELATION文を設計する際の制限

RELATION文の設計時には、次の制限事項に注意してください。

- Oracle OLAPでは、ALLOCATEコマンドの1回の実行でディメンションの1階層に対してのみ割当てが行われます。ディメンションに複数の階層がある場合、リレーションを1階層のみに制限するためにqdr引数を指定する必要があります。

- 割当て仕様にはRELATION文またはVALUESET文を指定する必要があります。

- 割当て仕様で各ディメンションに使用できるRELATION文またはVALUESET文は1つのみです。

割当てパスにおけるセルのロック

場合によっては、セルの既存の値を保持し割当ての影響を受けないようにする必要があります。ディメンション階層の値をロックすることによって、その値を割当てパスから削除できます。階層の詳細レベルより上位の値をロックすると、その値より下位の階層のブランチが割当てから削除されます。値をロックするには、RELATION文にPROTECT引数を使用します。

たとえば、毎月見直しする年間予算を割り当てる場合、timeディメンション階層のYearレベルにbudgetの値を設定します。データはMonthレベルにある各要素に割り当てます。時間の経過とともに、実際の月間データを入力してその要素をロックし、残りの年間予算値を再割当てすることにより、年間目標を達成するのに必要な新しい月別ターゲットを確認します。

要素をロックする場合、ソース値を再正規化するかどうかを指定できます。デフォルトでは、階層の要素をロックすると、その要素によって指定されるターゲット変数のセルの値がソース値から差し引かれ、その残りがターゲット・セルに割り当てられます。割当ての際にソースが再正規化されないようにするには、PROTECT引数の後にNONORMALIZEを指定します。

例

割当て文にRELATION文を使用する例は、ALLOCMAPコマンドの例(特に、例9-40「割当て仕様におけるRELATION文の入力」)を参照してください。

SOURCEVAL

割当て仕様では、SOURCEVAL文は、ALLOCATEコマンドが割当て前のソース・セルの値を正常に割り当てた後、その割当て演算でソース・セルに割り当てる値を指定します。

SOURCEVALのデフォルト値はNAなので、ALLOCATEは割当て後に割り当てられたソース・セルのそれぞれの値をNAに設定します。SOURCEVALにCURRENTを指定すると、割り当てられたソース・セルは割当て前に持っていた値を保持します。SOURCEVALにZEROを指定すると、割り当てられた各ソース・セルにゼロ値を割り当てます。

構文

SOURCEVAL [CURRENT|ZERO|NA]

パラメータ

CURRENT

割当て後のソース・セルの値は、割当て前の値と同じであることを指定します。

ZERO

割当て後のソース・セルの値は、ゼロであることを指定します。

NA

割当て後のソース・セルの値は、NAであることを指定します。(デフォルト値)

VALUESET

割当て仕様では、VALUESET文は割当てのターゲット・ディメンション値を指定します。ディメンション化された値セットは、メジャー・ディメンションまたは明細項目ディメンションなど非階層ディメンションに割当てターゲットを指定するために使用できます。

注意:
次の制限に注意してください。

- 割当て仕様には、RELATION文またはVALUESET文を少なくとも1つ指定する必要があります。

- 割当て仕様で指定される各ディメンションに指定できるRELATION文またはVALUESET文は1つのみです。

構文

VALUSET vs-name[(nondimvalueset)| qdr... ] OPERATOR operator | opvar –

[NAOPERATOR text -exp] [REMOPERATOR text -exp] -

[ARGS [FLOOR floorval] [CEILING ceilval] –

[MIN minval] [MAX maxval] –

[ADDT [ {TRUE|FALSE} | ASSIGN] –

[{PROTECTRW| PROTECTW} [NONORMALIZE] lockvalueset] –

[WEIGHTBY [ADD] weightobj [WNAFILL nafillval]] | -

[WEIGHTBY WEIGHTVAR wobjr]]

パラメータ

vs-name

割当てのパスとしてディメンションの値を指定する値セット・オブジェクトの名前を指定します。vs-nameの値によって識別されるターゲット変数のセルが割り当てられたデータを受け取ります。

nondimvalueset

vs-nameがディメンション化された値セットの場合、その値セット・ディメンションのループ処理に使用されるステータスとしてディメンション化されていない値セットを指定します。nondimvaluesetまたはqdrを含めない場合、Oracle OLAPは現行のステータス値を使用するかわりに、ディメンションのデフォルトの論理順序を使用します。

qdr

vs-nameがディメンション化されていない値セットの場合、データの割当ての際に使用するディメンション値を指定する1つ以上の修飾データ参照。

OPERATOR operator

OPERATORキーワードの後のoperator引数はテキスト式であり、表9-3「割当て演算子」で示されている演算子タイプが使用されます。演算子タイプは割当ての方法を指定します。この方法によって、ALLOCATEが値を割り当てるvs-nameリレーションのターゲット変数のセルが決定されます。FIRST演算子、LAST演算子、HFIRST演算子およびHLAST演算子に対してdimorder valuesetを使用して異なるステータスを指定していないかぎり、ALLOCATEは割当てディメンションのデフォルトの論理順序を使用してセルを決定します。割当てには、デフォルトの演算子はありません。

OPERATOR opvar

OPERATORキーワードの後のopvar引数には、ディメンションの各値に対して異なる演算を指定するTEXT変数を指定します。変数の値は、表9-3「割当て演算子」に示されている割当て演算子です。演算子変数は、割当て演算子をあるディメンションの値で変更するために使用します。opvar引数は、次のタイプのディメンションで使用します。

- メジャー・ディメンション: 割り当てられる変数に応じて割当て方法を変更します。メジャー・ディメンションの値は、割り当てられる変数の名前です。これにより、各メジャーの割当てに使用される演算を識別する値のテキスト変数がディメンション化されます。割当て仕様には、メジャー・ディメンションを識別するMEASUREDIM(割当て用)文が含まれている必要があります。

- 明細項目ディメンション: 割り当てられる明細項目に応じて割当て方法を変更します。通常、明細項目ディメンションは非階層で、財務割当てを識別します。データ変数のディメンション化、および各項目の割当てに使用する演算を識別するテキスト変数のディメンション化の両方に、明細項目ディメンションを使用します。演算変数は通常、長期間にわたる明細項目の割当てに使用します。

opvar引数は、この引数を使用して割り当てられるディメンションによってディメンション化できません。たとえば、geographyディメンションに別の演算を指定する場合、opvarはgeographyによってディメンション化できません。

ヒント:
演算子変数をページングする量を最小限にするには、opvar変数を固定幅8のTEXT型で定義します。

NAOPERATOR text-exp

NAOPERATORキーワードの後のoperatorには、ALLOCATEの処理でNAまたはロックベースのデッドロックを検出したときに使用する演算子を指定します。有効な演算子は、表9-3「割当て演算子」に示されているHFIRST、HLASTおよびHEVENです。

REMOPERATOR text-exp

REMOPERATORキーワードの後のoperatorには、割当てによって生じた残りを格納する際にALLOCATEの処理が使用する演算子を指定します。たとえば、INTEGER値である10を階層の同レベルの3つのセルに割り当てると残りは1になります。REMOPERATORは、この残りを割当て演算によって格納する場所を指定します。REMOPERATORの有効な演算子は、表9-3「割当て演算子」に示されているMIN、MAX、FIRST、HFIRST、LASTおよびHLASTです。

ARGS

追加引数で割当て演算の追加パラメータを指定することを示します。これらの引数はすべて、値セットに一様に適用されます。

FLOOR floorval

割り当てられるターゲット値がfloorvalに指定される値より小さい場合、Oracle OLAPがその値をNAとして格納することを指定します。

CEILING ceilval

割り当てられるターゲット値がceilvalに指定される値より大きい場合、Oracle OLAPがその値をNAとして格納することを指定します。

MIN minval

割り当てられるターゲット値がminvalに指定される値より小さい場合、Oracle OLAPがminvalの値をターゲットに格納することを指定します。

MAX maxval

割り当てられるターゲット値がmaxvalに指定される値より大きい場合、Oracle OLAPがmaxvalの値をターゲットに格納することを指定します。

ADDT {TRUE|FALSE}

ADDT句は、Oracle OLAPがターゲット・セルをターゲット・セルの既存の内容に追加する際に加算の符号を指定します。

- TRUEは、割当ての結果がターゲットに加算されることを指定します。(デフォルト)

- FALSEは、割当ての結果がターゲット・セルから減算されることを指定します。

PROTECTRW lockvalueset

lockvaluesetによって指定されるディメンション・メンバーが割当てのターゲットおよびソース値になることができないことを指定します。この句を使用すると、階層のサブツリーに割当てロックを指定できます。ターゲット・セルの現行の内容がソースから減算され、ソースおよび基礎が再正規化されます。

PROTECTW lockvalueset

lockvaluesetによって指定されるディメンション・メンバーが割当てのターゲットになることができないことを指定します。ただし、そのターゲット・セルは、割当て処理の後に続くステップでソース値として使用されます。SOURCEVAL文を0(ゼロ)またはNAに設定してその値を再割当てすると、値が適切に設定されます。

NONORMALIZE

保護されたセルに基づいてOracle OLAPがソースおよび基礎を再正規化しないことを指定します。このキーワードを指定すると、サブブランチを階層から削除するのと同様の効果があります。通常、このキーワードを使用して、割当て後にデータが割当てレベルから集計されると、ソース・セルには割り当てられた元の合計が含まれません。

WEIGHTBY weightobj

格納する直前にターゲット・セルに適用される加重値を指定します。この句を使用すると、単位または通貨の変換などの処理ができます。値の加重オブジェクトは変数、計算式またはリレーションです。リレーションを使用した場合、加重リレーションに基づいてターゲット変数が参照され、そのセルが割当てターゲット・セルに適用されます。

ADD

Oracle OLAPが加重値を割当てターゲットに乗算ではなく加算することを指定します。

WNAFILL nafillval

使用する加重変数のデフォルト値を指定します。ADD句を含めない場合、nafillvalのデフォルト値は1です。ADD句を含める場合、nafillvalのデフォルト値は0(ゼロ)です。

WEIGHTBY WEIGHTVAR wobj

割り当てられるデータに加重することを指定します。wobj引数は、Oracle OLAPが、ターゲット・セルに格納する直前に割り当てられたデータに適用する加重値としての変数、リレーションまたは計算式の名前です。この句を使用すると、単位または通貨の変換などの処理ができ、OPERATOR opvar句に対して作成した演算子変数で指定される異なる演算子によって異なる加重オブジェクトを使用できます。

ALLSTAT

ALLSTATプログラムは、現行のアナリティック・ワークスペースにあるすべてのディメンションのステータスにそれぞれの値を設定するためのプログラムです。ただし、ALLSTATではNAMEディメンションのステータスは設定されません。

構文

ALLSTAT

使用上の注意

1つのディメンションを制限

LIMITコマンドを使用すると、単一のディメンションのステータスをそのディメンションのすべての値に設定できます。

ALLSTATとLOCK_LANGUAGE_DIMSオプション

LOCK_LANGUAGE_DIMSがTRUEの場合、ALLSTATは言語ディメンションを無視します。LOCK_LANGUAGE_DIMSがFALSEの場合、ALLSTATは言語ディメンションを他のディメンションと同じように扱います。

関連項目:
$DEFAULT_LANGUAGEプロパティおよびLOCK_LANGUAGE_DIMSオプション

例

例9-43 すべての値に制限

次のSTATUS文によって、変数UNITSのディメンションに対する現行のステータスが生成されます。

status units

The current status of MONTH is:
Jul96 TO Dec96
The current status of PRODUCT is:
Tents TO Racquets
The current status of DISTRICT is:
DALLAS

ALLSTAT文を実行した後で同じSTATUS文を実行すると、出力は次のようになります。

The current status of MONTH is:
ALL
The current status of PRODUCT is:
ALL
The current status of DISTRICT is:
ALL

ARGUMENT

ARGUMENT文は、OLAP DMLプログラム内で、プログラムに必要な引数を宣言します。プログラムの内部では、引数は変数や値セットと同様の構造体で格納されます。引数は、プログラムの起動時に渡された値で初期化されます。引数は、プログラムが実行されているときにのみ存在します。

ARGUMENT文はプログラム内でのみ使用され、プログラム内の実行可能な最初の行の前に指定する必要があります。ARGUMENT文のARGという省略形とARGファンクションとの区別に注意してください。

構文

ARGUMENT name {datatype|dimension|VALUESET dim}

パラメータ

name

プログラム内で引数を参照するときに使用する名前。引数の名前をローカル変数やローカル値セットと同じ名前にすることはできません。引数の名前は、アナリティック・ワークスペース・オブジェクトの名前の指定に関するルールに従って指定します(DEFINEコマンドを参照)。

datatype

格納されるデータの種類を示す引数のデータ型。DEFINE VARIABLEの項にリストおよび説明されている任意のデータ型を指定できます。また、プログラムが引数を特定のデータ型に変換することなく受け取ることができるようにする場合、そのデータ型のWORKSHEETを指定することもできます。

重要:
引数の型をNTEXTで宣言し、TEXT値をプログラムに渡すと、Oracle OLAPはTEXT値をNTEXTに変換します。同様に、引数の型をTEXTで宣言し、NTEXT値をプログラムに渡すと、Oracle OLAPはNTEXT値をTEXTに変換します。NTEXTをTEXTに変換すると、データが失われる可能性があります。

dimension

引数に指定する値のディメンションの名前。この引数にはディメンションの単一の値が保持されます。現在ディメンションに存在しない値を代入すると、エラーが発生します。

VALUESET dim

nameが値セットであることを示します。キーワードdimは、値セットにある値のディメンションを指定するキーワードです。引数の値セットは、アナリティック・ワークスペースの値セットと同様にプログラムの内部で使用できます。

使用上の注意

引数の有効期間

引数は、その引数が宣言されているプログラムが実行されているときにのみ存在します。プログラムが終了すると引数は消滅し、引数の値は失われます。したがって、引数はアナリティック・ワークスペース・オブジェクトではありません。

プログラムは、RETURN文またはSIGNAL文、あるいはプログラムの最後の行が実行されたときに終了します。プログラムがサブプログラムをコールすると、元のプログラムは一時的に停止しますが、サブプログラムが終了すると、制御は元のプログラムに戻るので、引数は存続します。自分自身を再帰的にコールするプログラムは、プログラムのコピーの実行ごとに別個の引数を保持します。

プログラムに渡される引数の宣言

プログラムに渡される引数を宣言するときは、特に注意が必要です。

値で渡される引数引数は値でプログラムに渡されます。したがって、コールされるプログラムには引数の値のみが渡され、このプログラムに関連するアナリティック・ワークスペース・オブジェクトへのアクセスは行われません。したがって、引数の値はコールされるプログラム内で変更でき、プログラムの外部の値には影響しません。引数変数や値セットは、使用しやすく初期化されたローカル変数またはローカル値セットとみなすことができます。

ファンクションに対する引数の処理プログラムをCALL文で起動するか、またはファンクションとして起動する場合は、次の2段階の処理が発生します。

1. 指定したデータ型を確定する。コール側プログラムで指定した引数の式は、左から右に評価され、そのデータ型が識別されます。ディメンション値を表す式には、テキスト(TEXTまたはID)、数値(INTEGER、DECIMALなど)またはRELATION値が使用可能です。引数の式の1つにエラーがあると、処理は停止します。

2. 指定した各データ型と宣言したデータ型を一致させる。引数の式は、宣言された引数と、位置によって一致されます。最初の引数の式は最初に宣言された引数と一致し、2番目の引数の式は2番目に宣言された引数と一致します(以降同様)。それぞれの式は、宣言された引数の宣言されたデータ型に順次変換されます。

引数をディメンション値として宣言すると、コール側プログラムから渡される対応する値は、TEXTまたはID(指定したディメンションの値)、数値(論理的なディメンションの位置)、RELATION(物理的なディメンションの位置)のいずれかになります。RELATIONメソッドは、対応する値として使用されたディメンション名やリレーション名を評価した結果のディメンション値がOracle OLAPによって渡される方法です。対応する値が整数以外の数値(DECIMALなど)の場合は、論理的なディメンション位置の値に最も近いINTEGER値に丸められます。

引数をディメンション値以外の値として宣言し、コール側プログラムから渡された対応する値がRELATION値の場合、エラーが発生します。RELATION値を渡し、それをTEXT引数として受け取る場合は、CONVERTを使用し、プログラムの引数リストの値を変換します。

引数をディメンションの値セットとして宣言した場合は、該当するディメンションの値セットの名前のみが引数として使用されます。

最初または2番目の段階でエラーが発生した場合、プログラムは実行されません。

コマンドに対する引数の処理引数をカッコで囲まずに独立型のコマンドとしてプログラムを起動すると、各引数は宣言された引数と、位置によって一致されます。コールされるプログラムは、指定した引数を宣言した引数として参照するか、またはARG (n)、ARGSおよびARGFR (n)の各ファンクションを介して参照します。この場合、引数は値ではなくテキスト文字列として渡されます。

余分な引数コール側プログラムで指定した引数の数が、コールされるプログラムで宣言されている引数の数より多い場合、コール側プログラムで指定された余分な引数は無視されます。コール側プログラムで指定した引数の数が、コールされるプログラムで宣言されている引数の数より少ない場合、コールされるプログラムで宣言されている余分な引数にはNA値が代入されます。

アナリティック・ワークスペース・オブジェクトの名前と重複する引数名

通常、引数にアナリティック・ワークスペース・オブジェクトと同じ名前を指定すると、プログラムの内部では、アナリティック・ワークスペース・オブジェクトではなく、引数が参照されます。このルールの例外が発生するのは、参照される文に対して、アナリティック・ワークスペース・オブジェクトが引数として必要な場合のみです。

例

例9-44 ユーザー定義ファンクションへの引数の受渡し

GETファンクションにユーザーが入力した内容を確認する場合、複雑になる可能性があります。通常の方法では、次のようなコード行が必要です。

SHOW GET(INT VERIFY VALUE GT 0 AND VALUE LT 100 -
IFNOT 'The value must be between 1 and 100')

ユーザー定義ファンクションを作成すると、GET式を単純化できます。たとえば、次のプログラムをファンクションとして使用すると、0から100の値を調べることができます。

DEFINE verit PROGRAM BOOLEAN
PROGRAM
ARGUMENT uservalue INT
TRAP ON haderror NOPRINT
IF uservalue GT 100
THEN SIGNAL toobig 'The value must be 100 or smaller.'
ELSE IF uservalue LT 0
THEN SIGNAL toosmall 'The value must be 0 or greater.'
RETURN TRUE
haderror:
RETURN FALSE
END

次のGET式では、veritファンクションを使用しています。

SHOW GET(INT VERIFY VERIT(VALUE) IFNOT ERRORTEXT)

例9-45 複数の引数の受渡し

product.rptプログラムで、レポートのデータ列の列幅を指定する2番目の引数を指定するとします。product.rptプログラムでは、2番目のARGUMENT文を追加して、COLWIDTHオプションの値の設定で使用するINTEGER引数を宣言します。

ARGUMENT natext TEXT
ARGUMENT widthamt INTEGER
NASPELL = natext
COLWIDTH = widthamt

8文字の列を指定するには、次の文を使用してproduct.rptプログラムを実行します。

CALL product.rpt ('Missing' 8)

product.rptプログラムに3番目の引数として製品の名前が必要な場合は、製品の引数を処理するためにproduct.rptプログラムに3番目のARGUMENT文を追加し、この引数を使用してproductディメンションのステータスを設定します。

ARGUMENT natext TEXT
ARGUMENT widthamt INTEGER
ARGUMENT rptprod PRODUCT
NASPELL = natext
COLWIDTH = widthamt
LIMIT product TO rptprod

次の文を使用してproduct.rptプログラムを実行します。

CALL product.rpt ('Missing' 8 'TENTS')

この例では、アナリティック・ワークスペース内のすべてのディメンションの値が大文字で指定されていることを前提に、3番目の引数を大文字で指定しています。

例9-46 ARGUMENT文の使用

product.rptというプログラムを作成しているとします。product.rptプログラムはレポートを生成するプログラムなので、このレポート生成プログラムに、NA値としてレポートに表示するテキストを指定する引数を指定します。product.rptプログラムで、宣言された引数natextをARGUMENT文で使用し、引数として指定した値にNASPELLオプションを設定します。

ARGUMENT natext TEXT
NASPELL = natext

MissingをNA値のテキストとして指定するには、次の文を実行します。

CALL product.rpt ('Missing')

この例では、一重引用符で囲まれたリテラル・テキストによって、テキスト引数の値が指定されます。ただし、次の例で示すように、その他のテキスト式も同様に機能します。

DEFINE natemp VARIABLE TEXT TEMP
natemp = 'Missing'
CALL product.rpt (natemp)

例9-47 式のテキストの受渡し

REPORT文が記述されたcustom.rptというプログラムがあり、このプログラムを使用して、式の値(sales - expenseなど)と個々の変数も表示するとします。

custom.rpt 'sales - expense'

式は必ず一重引用符で囲んでください。この式には記号(マイナス記号)が含まれているため、式全体が1つの引数であることを示すために引用符が必要です。

custom.rptプログラムでは、次の文を使用してこの式のレポートを生成できます。

ARGUMENT rptexp TEXT
REPORT &rptexp

アンパサンド置換を使用して複数のディメンション値を渡す例は、例10-18「LIMITでのアンパサンド置換の使用」を参照してください。

例9-48 ワークスペース・オブジェクト名とキーワードの受渡し

引数として指定されている変数のレポートを生成し、別の引数で指定した順序でproductディメンションをソートするsales.rptというプログラムを作成するとします。次の文を実行することによって、sales.rptプログラムを実行します。

sales.rpt units d

sales.rptプログラムでは、次の文を使用します。

ARGUMENT varname TEXT
ARGUMENT sortkey TEXT
SORT product &sortkey &varname
REPORT &varname

引数の置換後、次の文をsales.rptプログラムで実行します。

SORT product D units
REPORT units

AWコマンド

AWコマンドの構文は、実行するタスクによって異なります。

AW ALIASLIST
AW ATTACH
AW CREATE
AW DELETE
AW DETACH
AW FREEZE
AW LIST
AW PURGE CACHE
AW ROLLBACK TO FREEZE
AW SEGMENTSIZE
AW THAW
AW TRUNCATE

使用上の注意

AW文実行時におけるプログラム実行トリガー

アナリティック・ワークスペースにTRIGGER_AWというプログラムが存在する場合、そのワークスペースに対してAW文を実行すると、そのプログラムは自動的に実行されます。詳細は、「トリガー・プログラム」および「TRIGGER_AW」プログラムを参照してください。

AW ATTACH文が実行されると、Oracle OLAPは、他のプログラムについても同様に調べます。詳細は、「起動プログラム」を参照してください。

AW文に関連するオプション

「アナリティック・ワークスペースのオプション」に、アナリティック・ワークスペースを作成またはアタッチする前にリセットできるオプションを示します。

EXPRESSワークスペース

OLAPオプションを使用してデータベースをインストールした場合、EXPRESSワークスペースは必ず読取り専用モードでセッションにアタッチされます。このワークスペースは、Oracle OLAPによる内部使用を目的としているため、ワークスペース・リスト内の先頭または唯一のワークスペースである場合でも、自動的に現行のワークスペースになることはありません。EXPRESSワークスペースを明示的にアタッチすることによって現行のワークスペースにできますが、この方法はお薦めできません。EXPRESSワークスペースはデタッチできません。

AW ALIASLIST

AW ALIASLISTコマンドは、指定したアタッチ済ワークスペースに対して、1つ以上のワークスペースの別名を割り当てるか削除するコマンドですが、ワークスペースを指定しなかった場合は、現行のワークスペースが処理の対象になります。ALIASは1つ以上の別名を割り当てることを示し、UNALIASは1つ以上の別名を削除することを示します。アナリティック・ワークスペースをデタッチすると、デタッチしたワークスペースのすべての別名は自動的に削除されます。

構文

AW ALIASLIST [workspace] {ALIAS|UNALIAS} alias1, alias2, ...

パラメータ

workspace

アナリティック・ワークスペースの名前。使用するキーワードに応じて、アナリティック・ワークスペースの名前または別名のいずれかを指定できます。

ALIAS

指定したアタッチ済ワークスペースに対して、1つ以上のワークスペースの別名を割り当てますが、ワークスペースが指定されていない場合は、現行のワークスペースに対して別名を割り当てます。ALIASは1つ以上の別名を割り当てることを示し、UNALIASは1つ以上の別名を削除することを示します。

アナリティック・ワークスペースをデタッチすると、デタッチしたワークスペースのすべての別名は自動的に削除されます。そのため、アタッチされていないワークスペースをアタッチするたびに、別名を再度割り当てる必要があります。

UNALIAS

指定したアタッチ済ワークスペースに割り当てられた1つ以上のワークスペースの別名を削除します。ワークスペースが指定されていない場合は、現行のワークスペースに割り当てられた別名を削除します。

alias1

alias2

アナリティック・ワークスペースの別名。別名には次の制約があります。

- 長さは1文字以上、26文字以下です。すべての文字は、データベースのキャラクタ・セットに含まれる文字、数字またはアンダースコアを使用する必要があります。

- DMLでは、数字は先頭に使用できず、予約語も使用できません。(予約語は、RESERVEDを使用して確認できます。)

例

例9-49 別名の割当て

次の文によって、scottというユーザーが作成したdemoワークスペースの別名としてsdemoが割り当てられます。現行のユーザーはscottではないため、ワークスペースをフルネームで指定します。

AW ALIASLIST scott.demo ALIAS sdemo

次の文では、scottという名前のユーザーによって、同じワークスペースの別名としてmydemoが割り当てられます。

AW ALIASLIST demo ALIAS mydemo

AW ATTACH

AW ATTACHコマンドは、セッションにアナリティック・ワークスペースをアタッチします。Oracle OLAPでは、指定したワークスペースが現行のワークスペースになります。以前にアタッチされたワークスペースはアタッチ済ワークスペースのリストの下方向に移動し、これによって新規の現行のワークスペースのための場所がリストの先頭に作成されます。要求したアナリティック・ワークスペースのキャッシュされたバージョンが存在する場合は、そのキャッシュされたバージョンが、アタッチ済ワークスペースのリストに戻されますが、もちろんこれは、要求したアナリティック・ワークスペースの現行バージョンがキャッシュされたバージョンよりも新しい場合に限られます。

複数のワークスペースをアタッチすると、アタッチしたすべてのワークスペースのコードおよびデータはセッション中に使用できます。現行のワークスペースはワークスペース・リストの先頭に置かれ、セッションで利用するためにOracle OLAPによって保持されます。

注意:
AW ATTACH文が実行されると、これによって複数のプログラムが起動する場合があります。詳細は、「起動プログラム」を参照してください。

構文

AW ATTACH workspace  -

[ONATTACH [progname]|NOONATTACH] -

[RO [THAW] ] | RW | RWX | MULTI [THAW]] [WAIT | NOWAIT] ] -

[AUTOGO [progname]|NOAUTOGO] -

[AFTER workspace|BEFORE workspace|LAST|FIRST] -

[PASSWORD password]

パラメータ

workspace

アナリティック・ワークスペースの名前。まだアタッチしていないアナリティック・ワークスペースをATTACHキーワードを使用してアタッチする場合は、該当するワークスペース名を指定する必要があります。これは、AW ALIAS LISTを使用して割り当てられている別名がないためです。ただし、すでにアタッチされたワークスペースにATTACHキーワードを使用する場合(ワークスペース・リストでの位置を変更するためなど)は、AW ALIAS LISTを使用して別名を割り当てた上で、その別名を使用できます。

ONATTACH [progname]

(デフォルト)prognameを指定しない場合は、アタッチされたワークスペースにONATTACHというプログラムが存在すれば、そのプログラムがONATTACH句によって自動的に実行されます。NOONATTACHを指定しない場合も同じ結果になります。

NOONATTACH

NOONATTACHを指定すると、ワークスペースにONATTACHというプログラムが存在する場合でも、Oracle OLAPによってそのプログラムは実行されません。

AUTOGO [progname]

(デフォルト)prognameを指定しない場合は、アタッチされたワークスペースにAUTOGOというプログラムが存在すれば、そのプログラムがAUTOGO句によって自動的に実行されます。NOAUTOGOを指定しない場合も同じ結果になります。

prognameを指定すると、アタッチしたプログラムに指定したプログラムがAUTOGO句によって自動的に実行されます。

NOAUTOGO

NOAUTOGOを指定すると、ワークスペースにAUTOGOというプログラムが存在する場合でも、Oracle OLAPによってそのプログラムは実行されません。

RO

(デフォルト)ワークスペースが読取り専用アクセス権モードでアタッチされることを指定します。ユーザーはワークスペースのデータに独自の変更を加えることによって、what-if分析を実行できますが、これらの変更をコミットすることはできません。

読取り専用でアタッチされているアナリティック・ワークスペースには、複数のセッションから同時にアクセスできます。読取り専用アタッチ・モードは、読取り/書込みアクセス権モードおよびマルチライタ・アクセス権モードと互換性があります。ユーザーは、他のユーザーが読取り/書込みアクセス権モードとマルチライタ・アクセス権モードのいずれかでアナリティック・ワークスペースをアタッチした場合、読取り専用モードでアナリティック・ワークスペースをアタッチできます。さらに、他のユーザーが読取り専用モードでアナリティック・ワークスペースをアタッチしている場合、ユーザーは読取り/書込み排他モードでアナリティック・ワークスペースをアタッチできません。読取り専用アクセスでアナリティック・ワークスペースをアタッチすると、PERMIT_READというプログラムがワークスペース内に存在する場合は、Oracle OLAPによってそのプログラムが実行されます。

THAW

NOTHAWキーワードを指定せずにAW FREEZEコマンドを使用して固定されたアナリティック・ワークスペースの現行ビューをOracle OLAPでアタッチするように指定します。

RW

ワークスペースが読取り/書込みアクセス権モードでアタッチされることを指定します。読取り/書込みモードで同時にアナリティック・ワークスペースを開くことができるのは1ユーザーのみです。ユーザーはワークスペースに対する変更をすべてコミットするか、変更しないことをコミットする必要があります。

読取り/書込み非排他でアタッチされているアナリティック・ワークスペースには、複数のセッションから同時にアクセスできます。読取り/書込み非排他アタッチ・モードは、読取り専用アクセス権モードとのみ互換性があります。ユーザーは、他のユーザーが読取り専用モードでアナリティック・ワークスペースをアタッチした場合、読取り/書込みモードでアナリティック・ワークスペースをアタッチできますが、他のユーザーが読取り専用以外のモードでアタッチした場合は、読取り/書込みモードでアナリティック・ワークスペースをアタッチできません。同様に、他のユーザーが読取り/書込み非排他モードでアナリティック・ワークスペースをアタッチしている場合、ユーザーは読取り専用以外のモードでアナリティック・ワークスペースをアタッチできません。読取り/書込みアクセスでアナリティック・ワークスペースをアタッチすると、PERMIT_WRITEというプログラムがワークスペース内に存在する場合は、Oracle OLAPによってそのプログラムが実行されます。

RWX

ワークスペースが読取り/書込み排他アクセス権モードでアタッチされることを指定します。読取り/書込み排他モードでアナリティック・ワークスペースを開くことができるのは一度に1ユーザーのみです。ユーザーはワークスペースに対する変更をすべてコミットするか、変更しないことをコミットする必要があります。

読取り/書込み排他モードでアタッチされているアナリティック・ワークスペースは、その他のセッションからはアクセスできません。読取り/書込み排他アタッチ・モードは、他のアクセス権モードとの互換性がありません。他のユーザーがいずれかのモードでアナリティック・ワークスペースをアタッチしている場合、ユーザーは読取り/書込み排他モードでアナリティック・ワークスペースをアタッチできません。さらに、他のユーザーが読取り/書込み排他モードでアナリティック・ワークスペースをアタッチしている場合、ユーザーはそれ以外のモードでアナリティック・ワークスペースをアタッチできません。読取り/書込みアクセスでアナリティック・ワークスペースをアタッチすると、PERMIT_WRITEというプログラムがワークスペース内に存在する場合は、Oracle OLAPによってそのプログラムが実行されます。

MULTI

ワークスペースがマルチライタ・アクセス権モードでアタッチされることを指定します。マルチライタ・モードでアタッチされているアナリティック・ワークスペースには、複数のセッションから同時にアクセスできます。マルチライタ・モードでは、変数、リレーション、値セットおよびディメンションの個々に対してアタッチ・モード(読取り専用または読取り/書込み)を指定することでアナリティック・ワークスペースを制御しているので、ユーザーは同じアナリティック・ワークスペースを同時に変更できます。

関連項目:
「マルチライタ・モードでアタッチされたアナリティック・ワークスペースの管理」

マルチライタ・アタッチ・モードは、読取り専用モードおよびマルチライタ・モードとのみ互換性があります。他のユーザーが読取り/書込みモードまたは排他モードのいずれかでアナリティック・ワークスペースをアタッチしている場合、ユーザーはマルチライタ・モードでアナリティック・ワークスペースをアタッチできません。さらに、他のユーザーがマルチライタ・モードでアナリティック・ワークスペースをアタッチしている場合、ユーザーは読取り/書込みモードまたは排他モードでアナリティック・ワークスペースをアタッチできません。

WAIT

NOWAIT

読取り/書込み排他アクセス権モードで使用するアナリティック・ワークスペースへのアクセスを要求した場合、または読取り/書込み非排他アクセス権モードで使用しているアナリティック・ワークスペースへの読取り/書込みアクセスを要求した場合、Oracle OLAPがアナリティック・ワークスペースへのアクセスが可能になるまで待機するかどうかを指定します。NOWAIT(デフォルト)を指定すると、Oracle OLAPはワークスペースが使用できないことを示すエラー・メッセージを生成します。WAITを指定すると、Oracle OLAPはワークスペースにアクセスできるようになるまで待機します。アクセスするまでOracle OLAPが待機する秒数は、Oracle OLAPのAWWAITTIMEオプションによって異なります。

FIRST

(デフォルト)アタッチしているワークスペースをワークスペース・リスト内の現行のワークスペースにします。

LAST

対象のワークスペースを、ワークスペース・リストにある現行のワークスペースの後からEXPRESSワークスペースの前までの間に置きます。アタッチされている他のワークスペースがEXPRESSワークスペースの前に存在する場合、指定したワークスペースはその後にアタッチされます。EXPRESSワークスペースの前にワークスペースが存在しない場合、LASTを指定すると指定したワークスペースが現行のワークスペースになります。LASTでは、EXPRESSワークスペースの後のワークスペースは無視されます。

AFTER workspace

BEFORE workspace

新規にアタッチされたワークスペースのワークスペース・リストにおける位置を、アタッチされているアナリティック・ワークスペースを基準にして指定できます。EXPRESSワークスペースの後にアナリティック・ワークスペースをアタッチする場合は、LASTではなくAFTERを使用します。BEFOREを指定してワークスペースを先頭に置くと、そのワークスペースが現行のワークスペースになります。

プログラム内に指定されているプログラム名またはオブジェクト名がOracle OLAPによって検索される場合、ワークスペースの検索順序は、ワークスペース・リストの順序によって決まります。

PASSWORD password

アタッチされるワークスペースへのアクセス権を付与または拒否するために、起動プログラムで確認されるパスワードを指定します。「起動プログラム」を参照してください。

使用上の注意

アタッチ済ワークスペースでのATTACHの使用

AW ATTACH workspace文を使用してアタッチ済ワークスペースを再アタッチした場合は、Oracle OLAPはワークスペースの新しいコピーを作業メモリーに移動しません。そのかわりに、Oracle OLAPでは次のアクションが実行されます。

1. 対象のワークスペースが現行のワークスペースになります。

2. AUTOGOキーワードを指定している場合は、AUTOGOプログラムが実行されます。

ただし、セッション中にデータを変更した場合は、アクティブ・ワークスペースを再アタッチしても変更内容は破棄されません。さらに、ワークスペースの現行の別名は変更されません。

マルチライタ・モードでアタッチされたアナリティック・ワークスペースの管理

マルチライタ・モードのオブジェクトの管理には、次のコマンドを使用します。

- ACQUIRE: 変更内容を更新してコミットできるように、指定のオブジェクトを取得および再同期化(オプション)します。

- RELEASE: 指定した変数、リレーション、値セットまたはディメンションのアクセス権モードを読取り/書込み(取得)アクセスから読取り専用アクセスに変更します。

- RESYNC: 指定された読取り専用オブジェクトに対するプライベートな変更を削除し、表示可能な最新の世代のデータを取得します。

- REVERT: 指定したオブジェクトについて、最後に更新、再同期化(RESYNC文を使用)、またはACQUIREのRESYNC句で取得されてから行われたすべての変更、あるいはアナリティック・ワークスペースがアタッチされてから行われたすべての変更を削除します。

次の点に注意してください。

- 読取り/書込みモードでオブジェクトを取得できるのは一度に1ユーザーのみです。オブジェクトは、最初に読取り専用モードで取得した後、別のユーザーが読取り専用モードで同じオブジェクトを取得していなければ、そのオブジェクトを先に解放することなく読取り/書込みモードで取得できます。ただし、他のユーザーが読取り専用モードでオブジェクトを取得している場合、そのユーザーがオブジェクトを解放しないかぎり、同じオブジェクトを読取り/書込みモードで取得することはできません。指定したオブジェクトが他のユーザーにより取得された場合か、指定したオブジェクトの読取り専用世代がそのオブジェクトの最新の世代ではない場合、取得が失敗します。

- 同時にコンポジット・ディメンションを共有しているすべての変数、値セットおよびリレーションを再同期化する必要があります。

- オブジェクトを再同期化する場合、一部のオブジェクトのみを新しい世代にプロモートすることによって、データの論理的一貫性が失われないように、異なるオブジェクト間の論理的関係に留意する必要があります。

- コンポジット・ディメンションを共有するオブジェクトは別々に再同期化できます。ただし、これらの再同期化されていないオブジェクトはすべて、変更されていないか取得済である必要があります。

- ディメンションのいずれかがすでに取得および変更された場合は、変数を更新できません。

- ディメンションをメンテナンスするには、先に取得する必要があります。

- ディメンションは、解放されると、自動的に回復されます。

- 更新済のオブジェクトを解放しても、そのトランザクションをコミットまたはロールバックするまで、他のユーザーはそのオブジェクトを取得できません。what-if変更をさらに進め、後で取得済のすべての変数を更新する場合に、更新済オブジェクトをコミット前に解放するのには役立ちます。

- ディメンション値を追加してからディメンションを元に戻すと、そのディメンションによってディメンション化された変数の領域割当てが最適ではなくなる場合があるためお薦めしません。

- メンテナンス済の取得済ディメンションによって取得済変数がディメンション化されている場合、そのディメンションを更新または解放するまでその変数を更新できません。

- ディメンション値は削除できません。

固定されたアナリティック・ワークスペースのアタッチ

アナリティック・ワークスペースをいったん固定すると、THAWキーワードを指定して現行ビューがアタッチされるように要求しないかぎり、ROおよびMULTIでアナリティック・ワークスペースをアタッチした場合に、そのワークスペースの固定されたビューがアタッチされます。(RWまたはRWでアタッチした場合は、常に最新の世代がアタッチされます。)

現行ビューをアタッチする際、中間のコミットで複数手順の作成がある場合、アナリティック・ワークスペースの状態が一貫性を保てない場合があります。たとえば、アナリティック・ワークスペースに2つの変数actualおよびbudgetがあるとします。また、actual変数を設定して、UPDATEおよびCOMMITコマンドを発行したとします。この時点で、actualにのみデータが存在することになります。

読取りマルチライタ・モードで固定されたアナリティック・ワークスペースをアタッチする際、マルチライタのコマンド(RESYNCおよびACQUIRE)を使用すると、AW FREEZEにNOTHAWキーワードを指定しているかどうかに関係なく、最新バージョンのデータを取得できます。

ワークスペース名と別名の競合

スキーマに存在するアナリティック・ワークスペースは、名前が割り当てた別名と同じである場合にはアタッチできません。同様に、スキーマに存在するアタッチ済ワークスペースの名前と重複する別名を割り当てることはできません。さらに、2つのアタッチ済ワークスペースに同じ別名を割り当てることはできません。

AW DELETE文では、アタッチされていないアナリティック・ワークスペースに、割り当てた別名と同じ名前を指定すると、その名前が別名と解釈され、エラーが通知されます。

例

例9-50 起動プログラム

次のような定義を持つPERMIT_READ、PERMIT_WRITE、ONATTACH、MYATTACHおよびAUTOGOという5つのプログラムがあるawtestというアナリティック・ワークスペースを作成したとします。

DEFINE PERMIT_READ PROGRAM BOOLEAN
PROGRAM
SHOW 'permit_read program executing'
AW LIST
RETURN YES
END

DEFINE PERMIT_WRITE PROGRAM BOOLEAN
PROGRAM
SHOW 'permit_write program executing'
AW LIST
RETURN YES
END

DEFINE ONATTACH PROGRAM BOOLEAN
PROGRAM
SHOW 'onattach program executing'
AW LIST
RETURN YES
END

DEFINE MYATTACH PROGRAM BOOLEAN
PROGRAM
SHOW 'myattach program executing'
AW LIST
RETURN YES
END

DEFINE AUTOGO PROGRAM
PROGRAM
SHOW 'autogo program executing'
AW LIST
END

awtestをアタッチするときに実行されるプログラムは、次に示すように、AW ATTACH文に指定したアタッチ・モードおよびキーワードによって異なります。

- 次の文を使用して読取り/書込みモードでawtestをアタッチした場合

AW DETACH awtest
AW ATTACH awtest RW

最初にPERMIT_WRITEプログラムが実行され、次にONATTACHプログラムが実行されます。

- 次の文を使用して読取り専用モードでawtestをアタッチした場合

AW DETACH axuserwtest
AW ATTACH awtest NOONATTACH RO

PERMIT_READプログラムのみが実行されます。

- 次の文を使用して読取り専用モードでawtestをアタッチした場合

AW DETACH awtest
AW ATTACH awtest RO

最初にPERMIT_READプログラムが実行され、次にONATTACHプログラムが実行されます。

- 次の文を使用して読取り専用モードでawtestをアタッチした場合

AW DETACH awtest
AW ATTACH awtest ONATTACH myattach RO

最初にPERMIT_READプログラムが実行され、次にMYATTACHプログラムが実行されます。

- 次の文を使用してマルチライタ・モードでawtestをアタッチした場合

AW DETACH awtest
AW ATTACH awtest MULTI

最初にPERMIT_WRITEプログラムが実行され、次にONATTACHプログラムが実行されます。

- 次の文を使用して読取り専用モードでawtestをアタッチした場合

AW DETACH awtest
AW ATTACH awtest AUTOGO

最初にPERMIT_WRITEプログラムが実行されます。次に、ONATTACHプログラムが実行されます。最後に、AUTOGOプログラムが実行されます。

例9-51 ONATTACHプログラムによるアナリティック・ワークスペースのアタッチ

売上データのワークスペースとして、expensesとrevenueの2つがあるとします。analysisという3番目のワークスペースがあり、ここには、データを分析するためのプログラムが含まれています。analysisワークスペースには、他の2つのワークスペースをアタッチするための次のようなONATTACHプログラムが含まれています。

DEFINE onattach PROGRAM
PROGRAM
AW ATTACH expenses RW AFTER analysis
AW ATTACH revenues RW AFTER analysis
END

ONATTACHプログラムを実行するには、次の文によってanalysisワークスペースをアタッチします。

AW ATTACH analysis

AW LIST文を発行すると、3つのアナリティック・ワークスペースすべてがアタッチされたことが、次の出力によって確認できます。

ANALYSIS  R/W CHANGED   XUSER.ANALYSIS
REVENUE   R/W UNCHANGED XUSER.REVENUES
EXPENSES  R/W UNCHANGED XUSER.EXPENSES
EXPRESS   R/O UNCHANGED SYS.EXPRESS

AW CREATE

AW CREATEコマンドは、新規のワークスペースを作成し、セッションにおける現行のワークスペースにするコマンドです。

Oracle OLAPでは、アナリティック・ワークスペースを作成するための手順の一部として、COMMITが自動的に実行されます。以前にアタッチされたワークスペースはアタッチ済ワークスペースのリストの下方向に移動し、これによって新規のワークスペースのための場所がリストの先頭に作成されます。

また、現行のアナリティック・ワークスペースにおいて、別のアナリティック・ワークスペースが作成される場合、TRIGGER_AWという名前のプログラムが存在すれば、そのTRIGGER_AWプログラムが実行されます。

注意:
アナリティック・ワークスペースを作成するには、「アナリティック・ワークスペースの作成および削除に必要な権限」で概説する適切なSQL GRANT権限が必要です。

構文

AW CREATE workspace [position] [UNPARTITIONED|PARTITIONS n] -

[TABLESPACE tblspname [SEGMENTSIZE n [K, M, or G]]]

ワークスペース・リストでのワークスペースの位置を指定する場合、positionは次のいずれかの値になります。(デフォルトはFIRSTです。)

AFTER workspace

BEFORE workspace

LAST

FIRST

パラメータ

workspace

アナリティック・ワークスペースの名前。ワークスペースの名前には次の制約があります。

- 長さは1文字以上、26文字以下です。すべての文字は、データベースのキャラクタ・セットに含まれる文字、数字またはアンダースコアを使用する必要があります。

- DMLでは、数字は先頭に使用できず、予約語も使用できません。(予約語は、RESERVEDを使用して確認できます。)

FIRST

(デフォルト)アタッチしているワークスペースが現行のワークスペースになります。

LAST

対象のワークスペースを、現行のワークスペースの後からEXPRESSワークスペースの前までの間に置きます。アタッチされている他のワークスペースがEXPRESSワークスペースの前に存在する場合、指定したワークスペースはその後にアタッチされます。EXPRESSワークスペースの前にワークスペースが存在しない場合、LASTを指定すると指定したワークスペースが現行のワークスペースになります。LASTでは、EXPRESSワークスペースの後のワークスペースは無視されます。

AFTER

BEFORE

新規にアタッチされたワークスペースの位置を、すでにアタッチされているアナリティック・ワークスペースを基準にして指定します。EXPRESSワークスペースの後にアナリティック・ワークスペースをアタッチする場合は、LASTではなくAFTERを使用します。BEFOREを指定してワークスペースを先頭に置くと、そのワークスペースが現行のワークスペースになります。

プログラム内に指定されているプログラム名またはオブジェクト名がOracle OLAPによって検索される場合、ワークスペースの検索順序は、ワークスペース・リストの順序によって決まります。

UNPARTITIONED

アナリティック・ワークスペースであるリレーショナル表がパーティション化された表ではないことを指定します。

PARTITIONS n

アナリティック・ワークスペースであるリレーショナル表が、n個のパーティションを持つパーティション化されたハッシュ表であることを指定します。nの値として0(ゼロ)を指定した場合は、UNPARTITIONEDを指定した場合と同じ結果になります。nのデフォルト値は8です。

TABLESPACE  tblspname

アナリティック・ワークスペースが作成されるOracle Database表領域の名前を指定します。

ヒント:
オラクル社では、このために用意された表領域にワークスペースを作成する場合、TABLESPACE引数を使用することをお薦めします。使用する表領域については、DBAに問い合せてください。

SEGMENTSIZE n [K, M, or G]

この引数をCREATEキーワードで使用すると、作成するワークスペースの各セグメントの最大サイズが設定されます。K、M、Gのいずれも指定しない場合、nに対して指定する値はバイトとして解釈されます。値nの後にK、M、Gのいずれかを指定すると、この値はそれぞれKB、MB、GBと解釈されます。

使用上の注意

アナリティック・ワークスペースのアクセス権

アナリティック・ワークスペースに対して追加可能なセキュリティには、次のようないくつかのレベルがあります。

- SQL GRANT文を使用するリレーショナル表レベル。

- 別々のアタッチ・モードと起動プログラムを使用したアナリティック・ワークスペース・レベルおよびワークスペース・オブジェクト・レベル。AW ATTACHコマンドおよび「起動プログラム」を参照してください。

例

例9-52 アナリティック・ワークスペースの作成と始動

AWコマンドでCREATEキーワードを使用すると、新規のワークスペースを作成および始動できます。

AW CREATE mywork

AW DELETE

AW DELETEコマンドは、デタッチされたアナリティック・ワークスペースをデータベースから削除します。Oracle OLAPでは、アナリティック・ワークスペースを削除するための手順の一部としてCOMMITが自動的に実行されることに注意してください。DELETEキーワードは、ワークスペースをアタッチしているユーザーがいないときにのみ正常に実行されます。

注意:
また、現行のアナリティック・ワークスペースにおいて、別のアナリティック・ワークスペースが削除される場合、TRIGGER_AWという名前のプログラムが存在すれば、そのTRIGGER_AWプログラムが実行されます。

関連項目:
AW DETACH、AW TRUNCATE

構文

AW DELETE workspace

パラメータ

workspace

アナリティック・ワークスペースの名前。名前を指定する必要があり、別名は指定できません。

使用上の注意

アタッチされていないワークスペースの削除

アタッチされていないワークスペースの名前が割り当てられた別名と同じ場合、このワークスペースを削除しようとすると、Oracle OLAPは、この名前を別名と解釈し、エラーを通知します。

例

例9-53 アナリティック・ワークスペースの削除

AWコマンドでDELETEキーワードを使用すると、アナリティック・ワークスペースを削除できます。

AW DELETE mywork

AW DETACH

AW DETACHコマンドは、ワークスペース・リストからアナリティック・ワークスペースを削除するコマンドです。先頭のワークスペースを削除すると、2番目のワークスペースが現行のワークスペースになります(そのワークスペースがEXPRESSワークスペースの場合は除く)。アナリティック・ワークスペースをデタッチすると、UPDATEが発行される前に変更された内容はデータベースで保持され、次のCOMMITによって永続化されます。UPDATEの発行後に変更が行われた場合、その内容は廃棄されます。

注意:
アナリティック・ワークスペースにTRIGGER_AWというプログラムが存在する場合、AW DETACH文を実行すると、そのプログラムが自動的に実行されます。

構文

AW DETACH [CACHE|NOCACHE] workspace

パラメータ

CACHE

アタッチ以降、アナリティック・ワークスペースが変更されていない場合、そのアナリティック・ワークスペースをキャッシュするよう指定します。(デフォルト)

NOCACHE

アタッチ以降、アナリティック・ワークスペースが変更されていない場合でも、そのアナリティック・ワークスペースをキャッシュしないよう指定します。

注意:
同じセッションで次にワークスペースをアタッチするときに、Oracle OLAPによってPermission、OnAttachまたはAutogoのプログラムが実行されるようにする場合は、アナリティック・ワークスペースをデタッチするときにNOCACHEを指定する必要があります。

workspace

アナリティック・ワークスペースの名前。使用するキーワードに応じて、アナリティック・ワークスペースの名前または別名のいずれかを指定できます。

使用上の注意

アナリティック・ワークスペースが変更されているかどうかの判断

次の文は、アタッチ以降、アナリティック・ワークスペースが変更されているかどうかを示します。

- CHANGEDキーワードを指定したAWファンクション。

- AW LIST。アタッチされていないアナリティック・ワークスペースを示します。

Cache Size

デフォルトで、キャッシュされたアナリティック・ワークスペースのリストは2つです。つまり、キャッシュ・リストに一度に含まれるアナリティック・ワークスペースはデフォルトで2つのみで、新しいワークスペースをキャッシュ・リストに追加すると、前のワークスペースが削除されます。たとえば、mywk1、mywk2の順序で、この2つのアナリティック・ワークスペースをデタッチしたとします。ここで、mywk3にAW DETACH CACHEコマンドを発行します。すると、キャッシュおよびキャッシュ・リストからmywk1が削除され、mywk3がキャッシュされて、キャッシュ・リストのmywk2の後に追加されます。

注意:
メモリー競合が著しい場合、Oracle OLAPではキャッシュを空にしてメモリーを解放することがあります。

キャッシュ・サイズの変更は、イベント番号37372を使用して実行できますが、ここで、levelは、保持するアナリティック・ワークスペースの数です。キャッシュを完全に無効にするには、levelに1024を指定します。ベータ版では未確定であり、標準的な開発者にとって有効な情報かどうか確認する必要があります。

アナリティック・ワークスペースをデタッチするときに実行されるプログラム

アナリティック・ワークスペースがデタッチされると、次のプログラムが実行されます。

- デタッチするアナリティック・ワークスペース内にONDETACHという名前のプログラムが存在する場合は、そのONDETACHプログラムが実行されます。

- 現行のアナリティック・ワークスペースにおいて、別のアナリティック・ワークスペースがデタッチされる場合、TRIGGER_AWという名前のプログラムが存在すれば、そのTRIGGER_AWプログラムが実行されます。

例

例9-54 アナリティック・ワークスペースのデタッチ

AWコマンドでDETACHキーワードを使用すると、アナリティック・ワークスペースをデタッチできます。

AW DETACH expense

AW FREEZE

AW FREEZEコマンドは、現行トランザクションがある場合、そのトランザクションをコミットし、現在のアナリティック・ワークスペースが、そのワークスペースのデフォルトのアタッチ・バージョンであることを指定するフラグを設定するコマンドです。このコマンドの実行後、読取り専用モードまたは読取りマルチライタ・モードでこのワークスペースをアタッチする要求を行うと、このフラグ付き世代のアナリティック・ワークスペースがOracle OLAPによってアタッチされます。

注意:
このコマンドを実行するには、書込みモードでアナリティック・ワークスペースにアタッチされている必要があります。

構文

AW FREEZE [NOTHAW]

パラメータ

NOTHAW

後でワークスペースをアタッチする際に、AW ATTACHでTHAWキーワードを指定できないように指定します。

注意:
アナリティック・ワークスペースをいったん固定すると、AW ATTACHコマンドでTHAWキーワードを指定しないかぎり、読取り専用モードまたは読取りマルチライタ・モードでアナリティック・ワークスペースをアタッチした場合に、固定されたビューのアナリティック・ワークスペースがアタッチされます。

使用上の注意

アナリティック・ワークスペースの固定

アナリティック・ワークスペースを固定する際は、次の点に注意してください。

- 一度に固定できるアナリティック・ワークスペースの世代は1つのみです。

- 現在固定されているアナリティック・ワークスペースを再度固定するには、最初にAW THAWコマンドを使用し、その固定を解除する必要があります。

AW LIST

AW LISTコマンドは、アクティブ・ワークスペースのリストを、その更新ステータスとともに現行の出力ファイルに送信するコマンドです。

構文

AW LIST

使用上の注意

AW LISTによって生成される出力

現行のワークスペースが存在しない場合を除き、リスト内の最初のワークスペースが現行のワークスペースです。更新ステータスであるCHANGEDまたはUNCHANGEDの意味は、ワークスペースが読取り/書込みアクセスまたは読取り専用アクセスのどちらかでアタッチされているか、ワークスペースが他のユーザーと共有されているかどうかによって異なります。更新ステータスは、AW LISTによって次のように表示されます。

- 読取り/書込みモードでの非共有ワークスペース: ワークスペースのアタッチ以降または前回の更新以降に変更を行った場合、更新ステータスはCHANGEDになります。

- 読取り専用モードでの非共有ワークスペース: ワークスペースは更新できないため、更新ステータスは常にUNCHANGEDになります。

- 読取り/書込みモードでの共有または非共有ワークスペース: ワークスペースのアタッチ以降または前回の更新以降に変更を行った場合、更新ステータスはCHANGEDになります。

- 読取り専用モードでの共有ワークスペース: 最後にアクセスした後に他のユーザーが更新した場合、更新ステータスはCHANGEDになります。新規のオブジェクトまたはデータにアクセスするには、他のユーザーが自分の変更をコミットした後にワークスペースをデタッチし、再アタッチする必要があります。ワークスペースをアタッチしたままにしている場合、ワークスペース・ビューは変更されません。

現行のワークスペース

現行のワークスペースの名前は、ワークスペース・リストの先頭にあり、AW(NAME)ファンクションによって返された名前です。(詳細は、AWファンクションを参照してください。)NAMEディメンションに存在するのは、現行のワークスペースのオブジェクトのみです。AWDESCRIBEやLISTBYなどのプログラムは、現行のワークスペースに存在するオブジェクトのみを表示します。アナリティック・ワークスペースがアクティブではあるが現行ではない場合、ワークスペースのデータの変更と更新、ワークスペースのプログラムの編集と実行、およびワークスペースのオブジェクトの変更を実行できます。

例

OLAP Worksheetを使用してOracle OLAPに接続した直後だとします。AW LIST文を発行すると、EXPRESSがアタッチされている唯一のアナリティック・ワークスペースであることを示します。

AW LIST
EXPRESS   R/O UNCHANGED SYS.EXPRESS

ここで、アナリティック・ワークスペースを作成し、別のAW LIST文を発行します。EXPRESSアナリティック・ワークスペースと新規に作成したアナリティック・ワークスペースが両方ともアタッチされていることがわかります。

AW CREATE myaw
AW LIST
MYAW      R/W UNCHANGED MYNAME.MYAW
EXPRESS   R/O UNCHANGED SYS.EXPRESS

AW PURGE CACHE

AW PURGE CACHEコマンドは、現在キャッシュ内にあるすべてのアナリティック・ワークスペースをデタッチするコマンドです。

構文

AW PURGE CACHE

AW ROLLBACK TO FREEZE

AW ROLLBACK TO FREEZEは、直近のAW FREEZEコマンド実行により作成されたアナリティック・ワークスペースを現行のワークスペースにするためのコマンドです。

構文

AW ROLLBACK TO FREEZE

AW SEGMENTSIZE

AW SEGMENTSIZEコマンドは、複数のセグメントに対してアナリティック・ワークスペースを設定するコマンドです。

構文

AW SEGMENTSIZE n [K, M, or G] [workspace]

パラメータ

workspace

アナリティック・ワークスペースの名前。使用するキーワードに応じて、アナリティック・ワークスペースの名前または別名のいずれかを指定できます。

SEGMENTSIZE n [K, M, or G] [workspace]

指定したワークスペースに対して各セグメントの最大サイズを設定します。ワークスペースが指定されていない場合は、現行のワークスペースが対象になります。

現行のワークスペースがすでに複数のセグメントを持っている場合、SEGMENTSIZEの設定は最新のセグメントにのみ反映され、それより前のセグメントには反映されません。前のセグメントは、各セグメントの作成時にSEGMENTSIZEの設定で決定された様々なサイズになる場合があります。K、M、Gのいずれも指定しない場合、nに対して指定する値はバイトとして解釈されます。値nの後にK、M、Gのいずれかを指定すると、この値はそれぞれKB、MB、GBと解釈されます。

AW THAW

AW THAWコマンドは、現在のトランザクションが存在する場合はそのトランザクションをコミットし、前のAW FREEZEコマンドを取り消すコマンドです。

構文

AW THAW

AW TRUNCATE

既存のアナリティック・ワークスペースからオブジェクトおよびデータをすべて削除します。アナリティック・ワークスペースで使用されている表領域もすべて割当てが解放されます。AW TRUNCATEを使用してデータを削除する方が、AW DELETEを使用してアナリティック・ワークスペースを削除するよりも効率的であり、データ以外に削除される対象も少なくなります。たとえば、AW TRUNCATEを使用してデータを削除した場合、削除前に付与されていたオブジェクト権限はすべて保持されます。

表の削除に関する詳細は、『Oracle Database SQL言語リファレンス』のTRUNCATE TABLEに関する説明を参照してください。

注意:
所有しないスキーマにあるアナリティック・ワークスペースを削除するには、「アナリティック・ワークスペースの作成および削除に必要な権限」で概説する適切なSQL GRANT権限が必要です。

構文

AW TRUNCATE workspace

パラメータ

workspace

アナリティック・ワークスペースの名前。名前を指定する必要があり、別名は指定できません。

例

例9-55 アナリティック・ワークスペースの全データの削除

AWコマンドでTRUNCATEキーワードを使用すると、アナリティック・ワークスペース内のオブジェクトおよびデータをすべて削除できます。

AW TRUNCATE mywork

AWDESCRIBE

AWDESCRIBEプログラムは、現行のアナリティック・ワークスペースに関する情報を現行の出力ファイルに送信するプログラムです。サマリー・ページの後に、次の2つの部分で構成されるレポートが作成されます。

- 名前、型および説明を示すアナリティック・ワークスペース・オブジェクトのアルファベット順リスト。

- オブジェクト型別のオブジェクト定義のリスト。それぞれの定義には、DESCRIBE文を使用したときに表示される情報が記述されています。このプログラムには、オブジェクトのコールやアクセスを行うプログラムまたはコンパイル可能な他のオブジェクトを示す、参照元リストも組み込まれています。さらに、コンパイル可能なオブジェクトには参照先リストが格納されており、コール先またはアクセス先のアナリティック・ワークスペース・オブジェクトであることを示します。

構文

AWDESCRIBE

使用上の注意

参照元リストの情報

AWDESCRIBEコマンドは、暗黙の参照についての参照元リストおよび参照先リストの情報を送信しません。たとえば、プログラムにLIMITコマンドが記述されており、関連ディメンションによってディメンションが制限されている場合、これらのディメンションのリレーションが、AWDESCRIBEによって該当のプログラムの参照先リストに登録されることはありません。

例

例9-56 アナリティック・ワークスペースに関する情報の出力

次の例は、demoというアナリティック・ワークスペースに対するAWDESCRIBEの出力の一部を示したものです。

DEMO Workspace Listing
=====================

Last updated:  25Jun96     Time: 09:46:50
Print date:    27Aug96     Time: 10:30:11
DEMO contains:
11 DIMENSIONS
19 VARIABLES
1 PROGRAM
4 RELATIONS
2 VALUESETS

This report is in two parts:
- Object Listing: An alphabetic list of workspace objects,
beginning on the next page.
- Object Descriptions: Detailed descriptions of all workspace
objects, sorted by object type and alphabetically by name.

Object List                                                      Page 2
Workspace: DEMO         Updated: 25Jun96   At: 09:46:50           ACTUAL

NAME              TYPE       DESCRIPTION
____              ____       ___________
ACTUAL            VARIABLE   Actual $ Financials
ADVERTISING       VARIABLE   Total Advertising Dollars
BUDGET            VARIABLE   Budgeted $ Financials
CHOICE            DIMENSION  List of choices
CHOICEDESC        VARIABLE   Description line for the choices
DEMOVER           VARIABLE   DEMO Workspace Version
DISTRICT          DIMENSION
DIVISION          DIMENSION  Division
DIVISION.PRODUCT  RELATION   DIVISION for each PRODUCT
EXPENSE           VARIABLE   Total Production & Distribution Cost
FCST              VARIABLE   Forecasted $ Financials
INDUSTRY.SALES    VARIABLE   Total Industry Sales Revenue
LINE              DIMENSION  Lineitem
MARKET            DIMENSION  Geography Dim with Embedded Totals
MARKET.MARKET     RELATION   Self-relation for the Market Dim
MARKETLEVEL       DIMENSION  Geography Level
MLV.MARKET        RELATION
MONTH             DIMENSION
NAME.LINE         VARIABLE   Lineitem Names for Reporting
NAME.PRODUCT      VARIABLE   Product Names for Reporting Purposes
NATIONAL.SALES    VARIABLE   Projected Total U.S. Dollar Sales
NOT.IMPLEMENTED   PROGRAM
PRICE             VARIABLE   Wholesale Unit Selling Price
PRODUCT           DIMENSION  Sporting Goods Products
PRODUCT.MEMO      VARIABLE   Product Analysis Memo
PRODUCTSET        VALUESET   Valueset for Sporting Goods Products
QUARTER           DIMENSION
QUARTERSET        VALUESET
REGION            DIMENSION  Sales Region
REGION.DISTRICT   RELATION   REGION for each DISTRICT
SALES             VARIABLE   Sales Revenue
SALES.FORECAST    VARIABLE   Forecasted Unit Sales
SALES.PLAN        VARIABLE   Budgeted Sales Revenue
SHARE             VARIABLE   Market Share (Based on Dollar Sales)
UNITS             VARIABLE   Actual Unit Shipments
UNITS.M           VARIABLE
YEAR              DIMENSION

Description of DIMENSIONS                                        Page 3
Workspace: DEMO         Updated: 25Jun96   At: 09:46:50           CHOICE

DEFINE CHOICE DIMENSION TEXT
LD List of choices
Referenced By:
NONE

DEFINE DISTRICT DIMENSION TEXT
Referenced By:
NONE

DEFINE DIVISION DIMENSION TEXT
LD Division
Referenced By:
NONE
...

BLANK

BLANKコマンドは、現行の出力ファイルに1行以上の空白行を送信するコマンドです。BLANKは、通常、OLAP DMLプログラム内でのみ使用します。たとえばレポート・プログラムでは、ヘッダーとデータを分ける空白行や、データのグループを分ける空白行を挿入するためにBLANKが使用されます。

構文

BLANK [n]

パラメータ

n

挿入する空白行の行数を指定する0(ゼロ)以上の値のINTEGER式。nを省略すると、Oracle OLAPによって空白行が1行挿入されます。NAを指定すると、エラーが発生します。

例

例9-57 空白行の挿入

この例では、レポートのタイトルと列ヘッダーの間に空白行を挿入します。次の行は、レポート・プログラムの内容です。

LSIZE = 50
HEADING WIDTH LSIZE CENTER 'Quarterly Sales Report'
BLANK 2
ROW WIDTH 20 'Unit Sales' ACROSS month -
'Jan96' TO 'Mar96': month

このプログラムによって生成される出力は、次のとおりです。

Quarterly Sales Report

Unit Sales           Jan96    Feb96    Mar96

BREAK

OLAP DMLプログラムのSWITCHコマンド、FOR文またはWHILE文の中でBREAKコマンドを使用すると、SWITCH文、FOR文またはWHILE文から、それぞれに関連付けられているDOENDの直後の文へプログラムの制御が移ります。

構文

BREAK

使用上の注意

TEMPSTAT文およびBREAK文

プログラムのFORループ処理内部で、DO ... DOEND句がTEMPSTATの後に続く場合、DOEND、BREAK、GOTOのいずれかが検出されると、ステータスはリストアされます。

例

例9-58 SWITCHで使用するBREAK

次のプログラム行には、2つのcaseラベルを使用してSWITCHコマンドが記述されています。各caseラベルの最後の文にBREAKが指定されているので、最初のcase文から次のcase文へ実行は継続されません。各BREAK文によって、DOENDに続く文に制御が移ります。

SWITCH userchoice
DESCRIPTION 'MARKET REPORT\NFINANCE REPORT\NNO REPORT')
DO
CASE 'market':
...
BREAK
CASE 'finance':
...
BREAK
DEFAULT:
...
BREAK
DOEND
cleanup:
...

CALL

CALLコマンドは、プログラムを起動するコマンドです。プログラムに引数が指定されている場合、これらの引数は必ずカッコで囲まれており、コールされるプログラムに渡されます。

構文

CALL program-name [(arg ...)]

パラメータ

program-name

コールされるプログラムの名前。

arg

コールされるプログラムに必要な1つ以上のオプションの引数。これらの引数は、コールされるプログラムでARGUMENTを使用して宣言するか、またはARGを使用して参照します。プログラムにARGUMENT文が使用されている場合は、CALLを使用してプログラムを起動する際に、コールされるプログラムで宣言されている引数の順序と一致するように引数を指定します。

使用上の注意

ディメンションの引数

ディメンションの値やディメンション名を引数として渡す場合は、'Jan96'のように、正確なテキスト値を一重引用符で囲む必要があります。プログラムの引数をARGUMENT文で宣言する場合は、テキスト値を評価するテキスト式を渡すことができます。

プログラムの戻り値

値を返すプログラムをCALLを使用して起動した場合、戻り値は廃棄されます。プログラムがファンクションまたはコマンドとして起動されたか、またはCALLを使用して起動されたかを判別するには、そのプログラムにCALLTYPEファンクションを使用します。

ARGUMENTコマンドまたはARGファンクション

コールされるプログラムでは、ARGUMENT文またはARGファンクションのいずれかを使用して引数を処理できます。CALLによって起動したプログラムやファンクションとして起動したプログラムでは、ARGSファンクションおよびARGFRファンクションは、必ずNAを返します。

引数がARGUMENT文で宣言されていないプログラムをCALLによって起動した場合、渡された引数はARGファンクションを使用して参照します。ただし、ARGファンクションはテキストを処理するファンクションなので、渡された引数はすべてテキスト値として解釈します。NTEXT引数を渡す場合は、ARGではなく、必ずARGUMENTを使用してNTEXT引数を宣言してください。ARGを使用すると、NTEXT引数はTEXTに変換され、NTEXTの値がデータベースのキャラクタ・セットで表現できないと、データが失われる可能性があります。

ARGUMENT文の処理

プログラムをCALL文を使用して起動するか、またはファンクションとして起動する場合は、次の2段階の処理が発生します。いずれかの段階でエラーが発生した場合、プログラムは実行されません。

1. 指定したデータ型を確定する。コール側プログラムで指定した引数の式は、左から右に評価され、そのデータ型が識別されます。ディメンション値を表す式には、テキスト(TEXTまたはID)、数値(INTEGER、DECIMALなど)またはRELATION値が使用可能です。引数の式の1つにエラーがあると、処理は停止します。

2. 指定した各データ型と宣言したデータ型を一致させる。引数の式の順序は、コールされるプログラムで宣言された引数の順序と一致します。最初の引数の式は最初に宣言された引数変数と一致し、2番目の引数の式は2番目に宣言された引数変数と一致します(以降同様)。それぞれの式は、引数変数の宣言されたデータ型に順次変換されます。

引数変数をディメンション値として宣言すると、コール側プログラムから渡される対応する値は、指定したディメンションの値を表すTEXTまたはID、論理的なディメンションの位置を表す数値、物理的なディメンションの位置を表すRELATIONのいずれかになります。対応する値が整数以外の数値(DECIMALなど)の場合は、論理的なディメンション位置を表す最も近いINTEGER値に丸められます。

引数変数をディメンション値以外の値として宣言し、コール側プログラムから渡された対応する値がRELATION値の場合、エラーが発生します。RELATION値を渡し、それをTEXT引数として受け取る場合は、CONVERTファンクションを使用し、プログラムの引数リストの値を変換します。

余分な引数を持つARGUMENT文

コール側プログラムで指定した引数の数が、コールされるプログラムで宣言されている引数の数より多い場合、コール側プログラムで指定した余分な引数は無視されます。コール側プログラムで指定した引数の数が、コールされるプログラムで宣言されている引数の数より少ない場合、コールされるプログラムで宣言されている余分な引数変数にはNA値が代入されます。

値で渡されるARGUMENT文

ARGUMENT文を使用して引数を宣言すると、引数は値でプログラムに渡されます。したがって、コールされるプログラムには引数の値のみが渡され、このプログラムに関連するアナリティック・ワークスペース・オブジェクトへのアクセスは行われません。ただし、アナリティック・ワークスペース・オブジェクトの名前を一重引用符で囲んだ引数として指定した場合は、アナリティック・ワークスペース・オブジェクトの値は渡されません。そのかわりに、このオブジェクトの名前がテキスト文字列として渡されます。例9-59「プログラムまたはファンクションのコール」を参照してください。

例

例9-59 プログラムまたはファンクションのコール

この例では、2つのプログラムroundup.pとroundup.fを様々な方法で使用してデータを評価し、出力を生成する例を示します。

roundup.pプログラムには、10進変数の名前をテキスト文字列として使用し、この変数の値を近似値のINTEGERに丸めた値のレポートを生成します。roundup.fプログラムにも10進変数の名前を使用できます。ただし、変数の名前をテキスト文字列として渡すかわりに、変数の値を引数として渡します。roundup.fでは、レポートは生成されません。そのかわりに、10進変数のそれぞれの値が、近似値のINTEGERに丸められて返されます。

roundup.pプログラムはCALLによって起動し、REPORT文が記述されています。これとは対照的に、roundup.fは、戻り値がREPORT文への引数として使用されるユーザー定義ファンクションとして起動します。

roundup.pプログラムでは、テキスト引数を宣言するためにARGUMENTを使用します。roundup.pを起動すると、このプログラムでは引数が10進変数の名前として使用されます。コール側プログラムでは、コールされるプログラムがディメンション化された変数のすべての値にアクセスできるようにするために、変数の名前を渡します。コール側プログラムが変数の名前ではなく変数自体を渡した場合は、コールされるプログラムがアクセスできる値は1つに限定されます。このプログラムからは値は返されず、レポートが生成されます。

DEFINE roundup.p PROGRAM INTEGER
PROGRAM
ARGUMENT varname TEXT
Report Down Line Across Month: Heading 'VARNAME' -
IF INTPART(&varname) EQ &varname -
THEN &varname ELSE INTPART(&varname) + 1
END

次の文

LIMIT division TO 1
LIMIT month TO 1 TO 4
DECIMALS = 0
CALL roundup.p('actual')

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

DIVISION: CAMPING
----------------- Varname------------------
-------------------MONTH-------------------
LINE             Jan95      Feb95      Mar95      Apr95
-------------- ---------- ---------- ---------- ----------
revenue           533,363    572,797    707,198    968,858
cogs              360,811    400,902    478,982    641,716
gross.margin      172,553    171,895    228,217    327,143
marketing          37,370     38,867     51,224     69,439
selling            89,008     86,458    102,233    139,567
r.d                24,308     23,400     39,943     57,186
opr.income         21,868     23,171     34,819     60,952
taxes              15,971     16,320     23,030     27,584
net.income          5,898      6,851     11,789     33,368

同じレポートを生成するにはこれ以外にも、REPORT文への引数として使用できるユーザー定義ファンクションとして次のようなroundup.fというプログラムを作成するという方法があります。

DEFINE roundup.f PROGRAM INTEGER
PROGRAM
ARGUMENT realval DECIMAL
IF realval EQ INTPART(realval)
THEN RETURN INTPART(realval)
ELSE RETURN INTPART(realval) + 1
END

次の文

LIMIT division TO 1
LIMIT month TO 1 TO 4
DECIMALS = 0
REPORT DOWN line ACROSS month: roundup.f(actual)

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

DIVISION: CAMPING
------------ ROUNDUP.F(ACTUAL)-------------
-------------------MONTH-------------------
LINE             Jan95      Feb95      Mar95      Apr95
-------------- ---------- ---------- ---------- ----------
revenue           533,363    572,797    707,198    968,858
cogs              360,811    400,902    478,982    641,716
gross.margin      172,553    171,895    228,217    327,143
marketing          37,370     38,867     51,224     69,439
selling            89,008     86,458    102,233    139,567
r.d                24,308     23,400     39,943     57,186
opr.income         21,868     23,171     34,819     60,952
taxes              15,971     16,320     23,030     27,584
net.income          5,898      6,851     11,789     33,368

(roundup.fプログラムをroundup.pプログラムと比較してください。roundup.fからは値が返されますが、レポートは生成されません。)

CDA

CDAコマンドを使用すると、セッションのカレント・ディレクトリ・オブジェクトを特定または変更できます。

既定のカレント・ディレクトリ・オブジェクトを使用すると、ディレクトリ・オブジェクトの名前を指定することなく、DMLファイルのアクセス文でファイル識別子を指定できます。ファイル・アクセス文の例としては、FILECOPY、FILEMOVE、FILEDELETE、EXPORTおよびIMPORTがあります。

構文

CDA [directory-alias]

パラメータ

directory-alias

実行しているセッションのカレント・ディレクトリ・オブジェクトになるディレクトリ・オブジェクトを指定するテキスト式。

この引数を指定しなかった場合、CDAによってカレント・ディレクトリ・オブジェクトの名前が現行の出力ファイルに送信されます。カレント・ディレクトリ・オブジェクトが存在しない場合、この文によって、存在しないという状況が通知されます。

使用上の注意

既定のカレント・ディレクトリ・オブジェクトでのファイル識別子の指定

次の文を実行すると、セッションのカレント・ディレクトリ・オブジェクトのファイルlog.txtが、backupというディレクトリ・オブジェクトのファイルoldlog.txtに移動します。

FILECOPY 'log.txt' 'backup/oldlog.txt'

ディレクトリ・オブジェクトの設定

データベース管理者はディレクトリ・オブジェクトを設定して、このオブジェクトへのアクセス権を付与する必要があります。

例

例9-60 カレント・ディレクトリ・オブジェクトの指定

次の文を実行すると、mydirがカレント・ディレクトリ・オブジェクトとして指定されます。

CDA 'mydir'

例9-61 カレント・ディレクトリ・オブジェクトの取得

次の文を実行すると、カレント・ディレクトリ・オブジェクトが現行の出力ファイルに送信されます。

CDA

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

The current directory is MYDIR.

CHGDFN

CHGDFNコマンドは、アナリティック・ワークスペース・オブジェクトの定義の一部を変更するコマンドです。

CHGDFNでオブジェクトの定義を変更するには、まずCONSIDERを使用して、該当するオブジェクトの定義を現行の定義にする必要があります。

注意:
CHGDFNでは、マルチライタ・モードでアタッチされているアナリティック・ワークスペースのオブジェクト定義は変更できません。

構文

CHGDFN desired-change

ここで、desired-changeは次のいずれかです。

varname SEGWIDTH length dim...

partitioned-varname {DROP | ADD } (partition-instance...)

partition-template {DEFINE | DELETE [CLEAR] } (partition-instance...)

partition-template RENAME PARTITION old-name new-name

{conjoint | composite}  {HASH | BTREE | NOHASH}

concat BASE ADD dimensionlist

conjoint COMPOSITE

composite DIMENSION

dimension NTEXT | TEXT | NUMBER [p, s]

dwmqy-dimname { {BEGINNING | ENDING} phase | {EARLIER | LATER} n}

concat [NOT] UNIQUE

varname {ADD |DROP} AGGCOUNT

varname [DROP] NULLTRACKING

パラメータ

varname

セグメント・サイズを設定する対象の変数名。

SEGWIDTH

変数のセグメントの明示的なサイズを指定します。詳細は、「変数セグメントの理解」を参照してください。

partitioned-varname

パーティションを変更する、パーティション変数の名前を指定します。

DROP partition-instance

ADD partition-instance

指定されたパーティションを、パーティション変数から削除または追加します。partition-instance引数の詳細は、DEFINE VARIABLEコマンドを参照してください。

DEFINE partition

DELETE [CLEAR] partition-instance

指定されたパーティションを、パーティション・テンプレート・オブジェクトから削除または追加します。partition-instance引数の詳細は、DEFINE PARTITION TEMPLATEコマンドを参照してください。

オプションのCLEARキーワードを含めると、Oracle OLAPでは、パーティション・テンプレート・オブジェクトを使用してパーティション化されている変数内の対応するパーティションも削除します。つまり、CLEARを含めることは、パーティション・テンプレート・オブジェクトによってパーティション変数からパーティションをDROPするために、別のCHGDFN文を発行することと同義です。

RENAME PARTITION old-name new-name

パーティション・テンプレート・オブジェクト内の指定されたパーティションの名前を変更します。

BASE ADD dimensionlist

dimensionlistに指定された1つまたは複数のディメンションを連結ディメンションのベース・ディメンションに追加します。1つ以上のディメンションを連結のベース・ディメンションとして追加する場合、Oracle OLAPでは、そのディメンションを連結の既存のベース・ディメンション・リストに追加します。連結でディメンション化されたオブジェクト、またはベース・ディメンションとして変更された連結を持つ連結でディメンション化されたオブジェクトでは、追加のNA値が取得されます。すでに連結ディメンションの構成要素であるディメンションは、ベース・ディメンションとして追加できません。

length-dim...

セグメントの幅は、変数のディメンション・リストにある各ディメンションまたはコンポジットの各セグメント内の値の最大数として指定されます。最初のlength-dimは、変数の定義内のディメンション・リストの最初に位置しているディメンションまたはコンポジット(つまり、最も変化の速いディメンションまたはコンポジット)の値の数で、2番目のlength-dimは、ディメンション・リスト内の2番目に位置しているディメンションまたはコンポジットの値の数、というように続きます。

conjoint

composite

index構文では、索引アルゴリズムを変更する対象の結合ディメンションまたはコンポジットの名前です。conjoint-to-composite構文では、コンポジットへ変更する対象の結合ディメンションの名前です。composite-to-dim構文では、結合ディメンションへ変更する対象のコンポジットの名前です。結合が計算式のディメンションである場合は、結合ディメンションをコンポジットへ変更できません。

BTREE

BTREE64

HASH

NOHASH

結合またはコンポジットで定義されているオブジェクト内のデータを失うことなく、結合ディメンションまたはコンポジットの値をロードおよびアクセスするために使用される索引アルゴリズムを示します。コンポジットはNOHASHへ変更できません。結合は、当初、HASHとして定義されたものである場合にのみ、NOHASHに変更できます。「BTREEからNOHASHへの結合の索引アルゴリズムの変更」を参照してください。

HASH、NOHASHおよびBTREEは、結合ディメンションまたはコンポジットの値のロードおよびアクセスに使用される、それぞれ異なる索引アルゴリズムです。(BTREE64はコンポジットでのみ使用できます。)HASHは結合に対するデフォルトです。コンポジットのデフォルトは、SPARSEINDEXオプションにより決まり、これにはBTREEのデフォルト値が含まれます。索引アルゴリズムは、サイズの大きい結合またはコンポジットをロードまたはアクセスする際のパフォーマンスに影響します。パフォーマンスは、使用しているシステムの構成、データ編成およびアプリケーション設計により異なります。

- BTREEは、コンポジットおよび結合ディメンションについて推奨される標準的な索引付けメソッドです。上級ユーザーであり、かつHASHまたはNOHASHを特に必要とするとき以外は、BTREEをデフォルトとして使用してください。BTREEは類似する値をグループ化するため、アクセスの局所性に優れています。

- BTREE 64は、コンポジットでのみ使用できます。コンポジット値とベース・ディメンション値の関連付けとして、拡張性の高いBツリー索引の作成を指定します。BTREE64コンポジットでディメンション化される変数では、BTREEコンポジットと同様に、配列要素(つまり変数セル)はコンポジットのタプルに格納されるディメンション値についてのみ作成され、ベース・ディメンション内のすべての値についてセルが作成されるわけではありません。ただし、BTREEコンポジットとは異なり、BTREE64コンポジットでは2GBを超えるBツリーがサポートされます。

- HASHは、2つまたは3つのベース・ディメンションのみを持つコンポジットまたは結合ディメンションに対し使用できる標準的な索引付けメソッドです。HASHを使用する場合の利点は、結果が少量のコードになることです。ただし、一般的には、HASHはお薦めしません。HASHを使用すると、巨大な索引表が作成されるため、メモリーに読み込むには大きすぎる場合があります。

- NOHASHは、結合ディメンションでのみ使用できます。使用可能なメモリーがほとんどなく、結合ディメンションが2つまたは3つのベース・ディメンションのみを持つような場合、NOHASHの使用が有用です。また、非常に大きい初期データ量をロードする際にもNOHASHを使用できます。NOHASHを使用すると、データは、ロード後にデータへアクセスしやすい方法でロードされます。データがロードされたら、良好なパフォーマンスを得るために、結合ディメンションの定義をBTREEに戻します。そうしないと、特に結合ディメンションが4つ以上のベース・ディメンションを持つ場合にはパフォーマンスが低下する可能性があります。「BTREEからNOHASHへの結合の索引アルゴリズムの変更」を参照してください。

ヒント:
パフォーマンスのテストを実施して、状況に即して最もパフォーマンスのよいアルゴリズムを判定できます。たとえば、最初はデータ・ロードが非常に迅速に行われたにもかかわらず、その後、大幅に速度が落ちた場合を想定します。CHGDFNを使用して、索引アルゴリズムをBTREEからNOHASHへ変更します。データのロードを再試行し、NOHASHの使用によってパフォーマンスが向上するかどうかを確認します。その後、CHGDFNを使用して索引アルゴリズムをBTREEに戻すこともできます。ただし、大きな結合ディメンションまたはコンポジットの索引アルゴリズムをあるアルゴリズムから別のアルゴリズムに変更する場合かなりの時間がかかることがあり、CHGDFNコマンドは中断できないことに注意してください。

COMPOSITE

結合ディメンションの名前付きコンポジットへの変更を指定します。結合ディメンションのコンポジットへの変更では、結合がNOHASH索引アルゴリズムを持つ場合や権限を持つ場合はコンポジットには変更できないという制約があります。

DIMENSION

名前付きコンポジットの結合ディメンションへの変更を指定します。

composite_dimension

コンポジットをベース・ディメンションとして持つようなコンポジットの名前。

注意:
Oracle Database 11gでは、ネストしたコンポジットを定義することはできません。そのため、UNNESTキーワードが使用されるのは、以前のリリースで定義され、Oracle Database 11gにインポートされたネストしたコンポジットに対してのみです。

dimension

TEXT、NTEXTまたはNUMBERディメンションの名前。

NTEXT

TEXTディメンションのデータ型をNTEXTに変更するように指定します。

TEXT

NTEXTディメンションのデータ型をTEXTに変更するように指定します。

NUMBER [p, s]

TEXT、NTEXTまたはNUMBERディメンションのデータ型を、pで指定する精度およびsで指定するスケールを持つNUMBERに変更するように指定します。

dwmqy-dimname

DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションのフェーズを指定または変更します。

BEGINNING phase

ENDING phase

DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションの開始フェーズまたは終了フェーズを指定します。フェーズは、DATEデータ型の変数値に対し有効な任意の入力スタイルを使用して、年、月および日を示す日付として、一重引用符で囲むかたちで指定する必要があります。意味があいまいな形式('03 05 97'など)で日付が指定されている場合、その日付はDATEORDERオプションの現行の設定に基づいて解釈されます。日付の指定の詳細は、DATEORDERオプションを参照してください。

EARLIER n

LATER n

nは、DAY、WEEK、MONTH、QUARTERまたはYEARディメンションのフェーズが開始または終了する期間を増減するINTEGER式です。たとえば、開始フェーズが月曜日のWEEKディメンションに対しLATER 2を指定すると、フェーズが水曜日に変更されます。

[NOT] UNIQUE

NOTを含めると、一意の連結ディメンションが一意でない連結ディメンションに変更されます。NOTを含めない場合は、一意でない連結ディメンションが一意の連結ディメンションに変更されます。連結ディメンションの詳細は、DEFINE DIMENSION CONCATコマンドを参照してください。

ADD AGGOUNT

指定された変数にAggcount変数を追加します。Aggcount変数の詳細は、DEFINE VARIABLEコマンドのWITH AGGCOUNT句を参照してください。

DROP AGGOUNT

指定された変数からAggcount変数を削除します。Aggcount変数の詳細は、DEFINE VARIABLEコマンドのWITH AGGCOUNT句を参照してください。

NULLTRACKING

指定した変数にNA2ビットがない場合、NA2ビットを追加します。NA2ビットおよびNULLトラッキングに関する詳細は、「NA2ビットとNULLトラッキング」を参照してください。

DROP NULLTRACKING

指定した変数にNA2ビットがある場合、NA2ビットを削除します。

使用上の注意

変数セグメントの理解

セグメントとは、変数に格納される値の総数の一部に対し確保される、連続したディスク領域のことです。たとえば、SEGWIDTHが150のmonthとSEGWIDTHが90,000のproductでディメンション化される変数の場合、各セグメントには150×90,000個まで変数値が格納されます。変数内のセグメント数は、データのロード時やデータへのアクセス時のパフォーマンスに影響します。

CHGDFN SEGWIDTHを指定しない場合、デフォルトの動作として、非コンポジット・ディメンションのSEGWIDTHに0(ゼロ)が割り当てられ、ディメンション・セット内の最も変化の遅いディメンションではないコンポジットに大きな値が割り当てられます。この動作により、ほとんどの状況において、セグメント数を大幅に増やしてパフォーマンスを低下させることなく新しいディメンション値およびコンポジット値を追加することが可能になります。

SEGWIDTHを指定する場合は、変数のすべてのディメンションおよびコンポジットに対し、数値、0(ゼロ)またはゼロ以外を指定する必要があります。

ディメンションのSEGWIDTHの値を0に設定すると、Oracle OLAPでは、セグメントの数を最小化するように(ただし既存のセグメントは変更しないで)、必要に応じてそのディメンション内のセグメントを拡大します。最も変化の遅いディメンションには、常に0(ゼロ)を指定できますが、これは、ディメンションに後から追加されるどの値のデータも、変数の最後のセグメントにある既存のデータに追加されることになるためです。

指定するセグメント・サイズは、varnameに指定された変数のみでなく、同じディメンションとコンポジットの組合せが同じ順序で定義されているすべての変数およびリレーションに対しても適用されます。DEFINEコマンドは、変数またはリレーションの作成時にSEGWIDTHを設定します。SEGWIDTHの変更は、変更が行われた以降に作成する新しい変数またはリレーションに影響します。SEGWIDTHの設定の変更は、既存の変数またはリレーションには適用されません。

変数についてのデータのロード時間は、メモリーへ読み込まれ、書き出されるページ数により異なります。このページ数は変数のセグメント分割方法に影響を受ける場合があります。セグメントが多すぎる(数千から数百万)とパフォーマンスが低下する場合があります。「セグメント数の削減」を参照してください。

セグメント数はデータ・アクセス時のパフォーマンスにも影響します。これは、変数をレポートする時間が、メモリーに取り込まれる値の数により異なるためです。変数のセグメント数の決定は、データのロード・パターンとデータへのアクセス・パターンに基づいて行います。

DEFINEは、デフォルトのセグメントを提供します。ほとんどの場合、デフォルトのセグメントを使用できるため、CHGDFN SEGWIDTHによって手動でセグメント・サイズを制御する必要はありません。ただし、デフォルトを使用せずにセグメント・サイズを指定することで、パフォーマンスを向上させることが可能な場合もあります。セグメント・サイズの決定基準がわからないときは、SEGWIDTHに対する長さ引数として、各ディメンションまたはコンポジットの値の推定最大数を使用します。この場合、変数には1つのセグメントのみが作成されます。

セグメント数の削減

OBJ(NUMSEGS)を使用して、特定のディメンション・セットを持つオブジェクトのセグメント数が多すぎるかどうかを確認できます。セグメント数が多すぎる場合、次の手順でセグメントの数を削減できます。

1. 該当するディメンション・セットを使用する変数およびリレーションを、EIFファイルにエクスポートします。

2. ディメンション・セット内のディメンションに対し、MAINTAIN DELETE ALL文を実行します。

3. オプションで、このディメンション・セットを持つ変数またはリレーションにCHGDFN文を実行し、SEGWIDTHキーワードに対する長さ引数の値を増やします。

4. EIFファイルから、手順1でエクスポートしたすべての値をインポートします。

BTREEからNOHASHへの結合の索引アルゴリズムの変更

BTREEアルゴリズムで定義された結合ディメンションをNOHASH結合へ変更する必要がある場合は、次の方法で行います。

1. 結合ディメンションとそれによってディメンション化されたすべてのオブジェクトを、EIFファイルにエクスポートします。

2. 結合ディメンションによってディメンション化されたすべてのオブジェクトを削除し、さらに結合自体も削除します。

3. 結合をNOHASH結合として再定義します。

4. 結合ディメンションとそれによってディメンション化されたオブジェクトを、EIFファイルからインポートします。インポート時に、定義上のNOHASH属性によって、結合ディメンションがNOHASH結合として読み込まれます。

名前のないコンポジットから名前付き結合ディメンションへの変更

名前のないコンポジットを結合ディメンションに変更するには、まずRENAME文を使用して名前のないコンポジットを名前付きコンポジットに変更し、その後、CHGDFNを使用して名前付きコンポジットを結合ディメンションに変更します。

例

変数からNULLトラッキングを削除する例は、例9-104「NULLトラッキングを使用した変数の定義」を参照してください。

例9-62 CHGDFN SEGWIDTHの使用方法

ベース・ディメンションmarketおよびproductを持つコンポジットとmonthによってディメンション化された、d.salesという変数があるとします。d.salesの定義は、次のようになります。

DEFINE d.sales VARIABLE DECIMAL <month SPARSE<market product>>

d.sales変数が1つのセグメントのみを持つようにするとします。monthディメンションには最終的に150個の値が、コンポジットには100,000個の値がそれぞれ格納されると見積もります。次の文では、d.sales変数に1つのセグメントが作成されます。

CHGDFN d.sales SEGWIDTH 150 100000

ただし、d.salesにセグメント・サイズを指定するためのより適切な方法は、最も変化の遅いディメンションに0を指定することです。

CHGDFN d.sales SEGWIDTH 150 0

1つのコンポジットと2つのディメンションで定義された変数のセグメントを1つにするとします。たとえば、次のような定義を持つf.costsという変数があるとします。

DEFINE f.costs VARIABLE DECIMAL <geog SPARSE<product channel> time>

geogディメンションには100個の値が、コンポジットには300,000個の値が格納されるものと見積もります。timeディメンションは最も変化の遅いディメンションなので、値の数を見積もる必要はありません。次の文によって、f.costs変数に1つのセグメントが作成されます。

CHGDFN f.costs SEGWIDTH 100 300000 0

例9-63 YEARディメンションのフェーズの変更

まず次の文で会計年度用のYEAR型のディメンションを作成し、その後、CHGDFNを使用して会計年度用の新しい時間フェーズに切り替えます。

DEFINE fiscal DIMENSION year BEGINNING '06 01 96'
CHGDFN fiscal BEGINNING '01 01 97'

例9-64 連結ディメンションへのベース・ディメンションの追加

次の文では、ベース・ディメンションとしてregionディメンションおよびdistrictディメンションを持つreg.dist.ccdimという名前の一意でない連結ディメンションを作成し、連結の値をレポートします。

DEFINE reg.dist.ccdim DIMENSION CONCAT(region district)
REPORT W 22 reg.dist.ccdim

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

REG.DIST.CCDIM
--------------------
<region: East>
<region: Central>
<region: West>
<district: Boston>
<district: Atlanta>
<district: Chicago>
<district: Dallas>
<district: Denver>
<district: Seattle>

次の文により、連結ディメンションにベースとしてstore_idディメンションが追加され、再度、連結の値がレポートされます。

CHGDFN reg.dist.ccd BASE ADD store_id
REPORT W 22 reg.dist.ccd

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

REG.DIST.CCD
----------------------
<region: East>
<region: Central>
<region: West>
<district: Boston>
...
<district: Seattle>
<store_id: 10>
<store_id: 20>
<store_id: 30>
<store_id: 100>
...
<store_id: 500>
<store_id: 510>

CLEAR

CLEARコマンドは、1つ以上の変数について、指定するデータを削除するコマンドです。

構文

CLEAR [STATUS | {ALL [CACHE]}] [VALUES | {aggdata [USING aggmapname]}] -

FROM {varname [ ( PARTITION partition-name ) ] } [, ... ]

ここで、aggdataは、変数から削除する集計データの型を特定する次のキーワードのいずれかです。

AGGREGATES

LEAVES

PRECOMPUTES

NONPRECOMPUTES

パラメータ

STATUS

現在ステータスにあるデータのみを対象とするように指定します。(デフォルト)

ヒント:
圧縮コンポジットを消去する場合、一部の値のみがステータスにあるときにCLEARを実行しないでください。

ALL

現行のステータスにかかわらず、変数のすべてのデータをコマンドの対象とするように指定します。CACHEキーワードまたはAGGREGATESキーワードを指定する場合は必須です。

CACHE

セッション・キャッシュを消去します。このキーワードを指定した場合は、ALLキーワードも同時に指定する必要があります。

VALUES

(デフォルト)変数の保存済のデータをすべて削除して、NA値に置換します。

AGGREGATES

AGGREGATEコマンドまたはAGGREGATEファンクションの実行によって移入されたすべてのセルのデータを削除します。このキーワードを指定した場合は、ALLキーワードも同時に指定する必要があります。

PRECOMPUTES

圧縮コンポジットでディメンション化された変数以外のすべての変数について、AGGREGATEコマンドの実行時に計算されたすべてのデータを削除して、NA値に置換します。

NONPRECOMPUTES

AGGREGATEファンクションの実行により即時計算されたすべてのデータを削除して、NA値に置換します。

LEAVES

詳細レベルのデータ(リーフ・データ)を削除します。

注意:
圧縮コンポジットによりディメンション化された変数に対しては、このキーワードを指定できません。

varname

データを削除する変数の名前。

aggmapname

使用するaggmapの名前。

圧縮コンポジットではない変数または$AGGMAPプロパティを持たない変数を消去するには、この句を指定する必要があります。ただし次の変数を消去する場合は、この句を指定する必要はありません。

- 圧縮コンポジットによってディメンション化される変数。デフォルトでは、CLEARによるこの変数の消去は、その圧縮コンポジットの構造に基づいて行われます。

- $AGGMAPプロパティを持つ変数(ただし、そのプロパティにより指定されたaggmapをCLEARで使用する場合)。$AGGMAPプロパティを持つ変数に対してUSING句を指定しない場合、CLEARではそのプロパティにより指定されたaggmapが使用されます。

ディメンション化されたaggmapに対してこの句を使用する場合、CLEARコマンド内に指定する各変数のディメンション性はaggmapのディメンション性と一致している必要があります。つまり、すべての変数が、その定義内にaggmapの定義と同じディメンションを同じ順序で持つ必要があります。

PARTITION partition_name

パーティション変数に対して、データを消去するパーティションの名前を指定します。

注意:
圧縮コンポジットの単一のパーティションのみを消去する場合、プロセス中に値を解凍するため、リソースが多量に消費され、処理に時間がかかります。

例

例9-65 変数のデータの消去

CLEARコマンドを使用することで、変数の保存済データすべてを簡単に削除できます。sales変数を定義して、そこにデータをロードしたとします。その後、データのほとんどが変更されていることに気付きました。既存のデータを変更するよりも、このsales変数を消去して、すべてのデータを再ロードする方が効率的です。次の文を使用して、これを実行します。

CLEAR ALL FROM sales

この例では、VALUESキーワードをデフォルトとして想定しています。したがって、salesデータはすべて削除され、NA値に置換されます。

例9-66 集計データの消去

sales変数およびunits変数についての集計データがあり、その他のデータはすべて即時計算するように指定したとします。

salesおよびunits変数には、time、productおよびgeographyという3つの同じディメンションが、同じ順序で定義されています。そのため、これらは、次の定義を持つsales.agg aggmapで集計されました。

DEFINE sales.agg AGGMAP <time, product, geography>

sales.agg aggmapには次の内容が含まれています。

RELATION time.r PRECOMPUTES (time ne 'YEAR99')
RELATION product.r PRECOMPUTES (product ne 'ALL')
RELATION geography.r

salesおよびunitsの両方を集計すると、ユーザーがまったくアクセスしない地域があることがわかります。geographyは最も変化の遅いディメンションであるため、ユーザーが必要としない地域のデータを削除することにより、データの保存に必要なページ数を削減でき、これによって、アナリティック・ワークスペースのサイズの縮小と、パフォーマンスの向上が可能になります。

1. 各ディメンションにステータスを設定します。ユーザーが必要とする地域は、ニューイングランド、ヨーロッパおよびオーストラレーシアのみです。次の文により、ユーザーが必要とする地域以外の地域の全期間および全製品を現行のステータスに設定します。つまり、次の文によって、ユーザーがアクセスする必要のないデータをすべてステータスに入れます。

LIMIT time TO ALL
LIMIT product TO ALL
LIMIT geography COMPLEMENT 'NewEngland' 'Europe' 'Australasia'

2. 不要なデータを削除するには、次の文を使用します。

CLEAR STATUS PRECOMPUTES FROM sales units USING sales.agg

例9-67 キャッシュされたデータの消去

aggmapで即時計算が指定されており、かつaggmapがCACHE SESSION文を含む場合、データがキャッシュされます。

たとえば、sales.agg aggmapに次の内容が含まれているとします。

RELATION time.r PRECOMPUTES (time ne 'YEAR99')
RELATION product.r PRECOMPUTES (product ne 'ALL')
RELATION geography.r
CACHE SESSION

sales.aggがCACHE SESSIONコマンドを含むことに注意してください。これにより、Oracle OLAPは一部のデータをユーザーからリクエストされた時点で計算し、それをセッション・キャッシュに保存します。sales変数からこのデータを消去するには、次の文を使用します。

CLEAR ALL CACHE FROM sales

COMMIT

COMMITコマンドは、SQL COMMIT文を実行するコマンドです。アナリティック・ワークスペース内で行った変更をCOMMITコマンドの実行時にコミットさせるにはまず、UPDATE文を使用してそのワークスペースを更新する必要があります。UPDATEによって、変更が一時的な作業領域からワークスペースが格納されているデータベース表へ移動します。表へ移動していない変更は、コミットされません。UPDATE文およびCOMMIT文を使用しない場合、セッション中に行ったアナリティック・ワークスペースの変更内容は、Oracleセッションの終了時に廃棄されます。

データベース・セッション内でSQL COMMIT文を実行すると、セッションで行われたすべての変更(読取り/書込みアクセスでアタッチしたワークスペース内のすべての更新された変更を含む)がコミットされます。コミットされた変更はすべて、それ以降にワークスペースをアタッチする他のユーザーに対し表示されます。ただし、別のユーザーのUPDATE文およびCOMMIT文が、アタッチ済ワークスペースの使用中のビューに作用することはありません。

注意:
ユーザーの多くは、SQL*PlusまたはOLAP Worksheetを使用してDML文を実行します。これらのツールはどちらも、セッションの終了時に自動でCOMMIT文を実行します。

構文

COMMIT

例

例9-68 アナリティック・ワークスペースへのすべての変更の保存

次の文により、セッション内でそれまでに行われたアナリティック・ワークスペースへの変更がすべて永続的に保存されます。また、COMMITコマンドによって、Oracle OLAP外部のセッション内で行われたデータベースへの変更が保存されます。

UPDATE
COMMIT

COMPILE

COMPILEコマンドは、プログラム、計算式、モデル、aggmapなどのコンパイル可能なオブジェクトのためのコンパイル済コードを、オブジェクトを実行することなく生成し、アナリティック・ワークスペースに保存するコマンドです。COMPILEの実行では、コンパイル時にフォーマット・エラーのチェックが行われるため、コードを実行する前のデバッグとしても使用できます。COMPILEは、現行の出力ファイルにエラーを記録します。

ただし、コンパイル可能なオブジェクトを実行する前に必ずしもCOMPILEコマンドを使用する必要はありません。COMPILEを使用しなくても、コンパイル可能なオブジェクトのコンテンツが入力または変更された後に最初にオブジェクトを実行する際、Oracle OLAPが自動でそれらのオブジェクトをコンパイルします。ユーザーは、処理のために応答時間がわずかに遅延することを除いて、この自動コンパイルにはほとんど気付きません。コンパイル可能なオブジェクトのコンパイル・ステータスについての情報を取得するには、ISCOMPILEDキーワードとともにOBJファンクションを使用します。

COMPILEを使用してオブジェクトを明示的にコンパイルするか、オブジェクトを実行することで自動で行うかにかかわらず、その後、同じセッションでオブジェクトを実行する際は、コードがすでにコンパイルされているため、常にコードの実行はより迅速になります。アナリティック・ワークスペースを更新およびコミットすると、コンパイル済のコードがアナリティック・ワークスペースの一部として保存され、その後のセッションで使用できます。そのため、その後のセッションでは、最初に実行するときにコードの実行が高速になります。

COMPILEを使用して、コンパイル可能なオブジェクトを実行せずにコードをコンパイルすることは、読取り専用のアナリティック・ワークスペース(使用はできるが、更新できないアナリティック・ワークスペース)の一部となるコードを記述している場合、特に有用です。

関連項目:
「プログラムのコンパイル」、「モデルのコンパイル」および「集計仕様のコンパイル」

構文

COMPILE object-name

パラメータ

object-name

コンパイルの対象とする、コンパイル可能なオブジェクトの名前。

使用上の注意

コンパイル・オプション

コンパイルにはいくつかのオプションがあります。これらのオプションは、「コンパイル・オプション」に記載されています。これらのオプションのうち1つ以上を設定することにより、コンパイル時のエラー・メッセージを非表示にしたり、THIS_AWの一致文字列を指定した値に置換したりできます。

削除されたオブジェクト

アナリティック・ワークスペースでオブジェクトを削除するか、オブジェクトの名前を変更すると、Oracle OLAPにより、プログラム内のすべての文と、そのオブジェクトに依存するすべての計算式およびモデルについてのコンパイル済コードが自動的に無効化されます。削除されたか名前が変更されたオブジェクトを参照するコードを実行すると、Oracle OLAPがコードの再コンパイルを試行します。同じ名前で新しいオブジェクトが定義されていないかぎり、この時点でエラー・メッセージが表示されます。

無効化されたコードを含むプログラムを実行すると、1回に1つの文がコンパイルされ、実行されます。プログラム全体のコンパイル済コードを保存するには、COMPILEコマンドを使用して明示的にコンパイルします。

同一行内での複数のエラー

単一の文に複数のエラーがある場合、COMPILEが検出するのは最初のエラーのみです。ただし、後続の文のフォーマット・エラーのチェックは続行されます。

宣言エラー

COMPILEでは、プログラムやモデルの宣言エラーを別々に処理します。

- プログラムに宣言エラーがある場合(実行可能コードの後にVARIABLEまたはARG文が続く場合など)、COMPILEによりトラップ可能エラーが通知されます。

- モデルに宣言エラーがある場合(MODEL文内のDIMENSION文が代入文の後に続く場合など)は、トラップ可能エラーは通知されません。そのかわり、そのモデルは実行できません。

トラップ可能エラーの詳細は、TRAPコマンドを参照してください。

コンパイルの優位点

COMPILEコマンドを使用する明示的なコンパイルには、自動コンパイルと比較した場合、次のようなメリットがあります。

- コンパイル可能なすべてのオブジェクトについて、COMPILEでは、オブジェクト内でコードを実行することなくコンパイル済コードを生成できます。

- プログラムまたはモデルでは、自動コンパイルが診断するのは、エラーを含む最初の文の1つのエラーのみです。その後、エラー・メッセージが表示され、プログラムの実行またはモデルの解析が中止されます。そのため、プログラムまたはモデルを自動でコンパイルするたびに、1つのエラー・メッセージのみが表示されることになります。それに対し、COMPILEでは、プログラムまたはモデルのすべての文についてフォーマットが正しいかどうかをチェックし、複数のエラー・メッセージ(エラーを含む文ごとに1つのメッセージ)を生成します。(プログラムでは、一部のタイプの文はコンパイルできないため、それらは例外です。「COMPILEでは検出されないエラー」を参照)。COMPILEでは、少なくとも1つのエラーを含む文がすべて検出されるため、すべてのエラーを修正するまでのコードの編集回数が最小限になります。

- モデルでは、モデルの実行前に、コンパイルの結果を検証したり、連立方程式を処理するオプションを設定する必要がある場合があります。

COMPILEでは検出されないエラー

COMPILEコマンドではコードは実際に実行されないため、オブジェクトを実際に実行してみると正常に実行されないコードもコンパイルされる可能性があるのですが、これは、正常に実行されない理由が、フォーマット・エラー以外の理由によるためです。プログラムの場合、たとえば次の文では、'joplin'が地区名でないにもかかわらず、コンパイルできます。

LIMIT district TO 'joplin'

文は正常にコンパイルされますが、実行時にはエラー・メッセージが表示されます。

コンパイルされない文

プログラム内の一部の文はまったくコンパイルされず、実行のたびに解釈されます。これには、アンパサンド置換を含む文、アナリティック・ワークスペース操作に関する文およびプログラムをコマンドとしてコールする文が含まれます。(プログラムをファンクションとしてコールする文またはCALLコマンドでコールする文はコンパイルされます。)

PRGTRACEオプション

PRGTRACEオプションを使用して、プログラム内のどの文がコンパイル済かを確認できます。PRGTRACEをYESに設定してプログラムを実行すると、実行前に各文が現行の出力ファイルに記録されます。コンパイル済の文は等号によって識別されます。

(PRG= program-name) statement

未コンパイルの文はコロンによって識別されます。

(PRG: program-name) statement

複数のアナリティック・ワークスペース

別のアナリティック・ワークスペース内のオブジェクトを使用するコンパイル可能なオブジェクトをコンパイルする際は、現行のOracle OLAPセッションに2番目のアナリティック・ワークスペースをアタッチする必要があります。その後、そのアナリティック・ワークスペースまたは同じ名前および型のオブジェクトを持つアタッチされたもう1つのアナリティック・ワークスペースで、コンパイル可能なオブジェクトを実行します。Oracle OLAPにより、オブジェクトが、コンパイル可能なオブジェクトのコンパイルに使用するオブジェクトと同じ名前、型(変数、ディメンションなど)、データ型(INTEGER、TEXTなど)およびディメンションを持っているかどうかがチェックされます。

アクティブなアナリティック・ワークスペースが複数ある場合、両方のアナリティック・ワークスペースに同じ名前のオブジェクトを存在させることはできません。たとえば、プログラムのアナリティック・ワークスペースが1つあり、製品TEAおよびCOFFEEに関するデータを保持する2つのアナリティック・ワークスペースがある場合、製品のアナリティック・ワークスペースがどちらもMONTHディメンションを持ち、プログラムがそのMONTHを参照することは可能です。ただし、セッション中は、MONTHディメンションが1つのみになるように、製品のアナリティック・ワークスペースは1回に1つのみをアタッチするようにします。

メモリーの使用

コードをコンパイルするには、プログラムで参照されるすべての変数(アンパサンド置換を含む行内の変数を除く)をメモリーにロードする必要があります。したがって、Oracle OLAPは、ユーザーが使用するすべての変数の定義を読み取って、オブジェクト定義の保存用に確保されているメモリーの空き領域にそれを保存します。コンパイル中に大きな変数がバインドされると、多量のメモリーが使用され、容量の大きいEXPTEMPファイルが作成されることがあります。大きな変数が多数バインドされると、場合によってはバインドに失敗して、Oracle OLAPによって「メイン・メモリーが不足しています」などのようなエラー・メッセージが記録されます。オブジェクト定義のメモリーへのロードの詳細は、LOADコマンドを参照してください。

例

例9-69 プログラムのコンパイル

次のコマンドは、myprogプログラムをコンパイルするCOMPILEコマンドの例です。

COMPILE myprog

myprogプログラム内のLIMITコマンドでディメンションmonthのスペルを間違えたとします。

LIMIT motnh TO LAST 6

COMPILEコマンドがこの文を検出すると、次のメッセージが生成されます。

ERROR: (MXMSERR00) Analytic workspace object MOTNH does not exist.
In DEMO!MYPROG PROGRAM:
limit month to last 6

プログラムを編集してエラーを修正してから、コンパイルを再試行できます。

例9-70 プログラム・エラーの検出

この例では、2つのエラーを含むsalesrptというプログラムを使用します。

DEFINE salesrpt PROGRAM
PROGRAM
ROW WIDTH 80 CENTER Monthly Report
BLANK 2
ROWW 'Total Sales' TOTAL(sales)
END

次の文を使用して、プログラムをコンパイルできます。

COMPILE salesrpt

Oracle OLAPによってエラーが両方とも識別され、次のメッセージが記録されます。

ERROR: You provided extra input starting at 'REPORT'.
In SALESRPT PROGRAM:
ROW WIDTH 80 CENTER Monthly Report
ERROR: ROWW is not a command.
In SALESRPT PROGRAM:
roww 'Total Sales' TOTAL(sales)

この時点でプログラムを編集し、Monthly Reportを一重引用符で囲み、ROWWのスペルを直して、エラーを修正します。その後、プログラムを再度コンパイルして、コンパイルしたコードを使用しているアナリティック・ワークスペースの一部として保存できます。

CONSIDER

CONSIDERコマンドは、ある定義を現行定義として指定するためのコマンドです。このコマンドをLD、VNF、EQ、PROGRAM、MODEL、PERMITまたはPROPERTY文とともに使用することで、定義に説明、値名書式、計算式、プログラム、モデル、権限またはプロパティを追加できます。

構文

CONSIDER name

パラメータ

name

現行のワークスペースまたはアタッチされたワークスペース内の定義の名前。

使用上の注意

定義の構成要素の置換

LD、VNF、EQ、PROGRAM、MODELまたはPERMIT文を使用して現行の定義に構成要素を追加する場合、その構成要素の既存の値は廃棄され、指定した新しい値に置換されます。PROPERTY文では、既存のプロパティ名に対して新しい値を指定するときにのみ、値が置換されます。定義は複数のプロパティを保持できます。

エラーとなるCONSIDER文

発行したCONSIDERコマンドが正常に実行されないと、後続のLD、VNF、EQ、PROGRAM、MODEL、PERMITまたはPROPERTY文でエラーが発生します。

暗黙的なCONSIDER文

DEFINE、COPYDFNおよびRENAMEの各コマンドでは、暗黙的なCONSIDERコマンドが自動で発行されます。

例

例9-71 アナリティック・ワークスペース・オブジェクトへの説明の追加

この例では、districtの定義に説明(LD)を追加します。LDを追加するには、まず、CONSIDERを使用してdistrictを現行の定義にする必要があります。次の文

CONSIDER district
LD Sales Districts
DESCRIBE district

次の定義が生成されます。

DEFINE district DIMENSION TEXT
LD Sales Districts

CONTEXTコマンド

CONTEXTコマンドでは、Oracle OLAPセッション中にコンテキストを作成または使用できます。コンテキストとは、オブジェクト値を維持するための方法です。コンテキストを作成した後、ディメンションの現行のステータスの他、オプション、単一セル変数、値セットおよび単一セル・リレーションの値をそのコンテキストに保存できます。その後、オブジェクト値の一部またはすべてをコンテキストからリストアできます。コンテキストは、1つのOracle OLAPセッションの間のみ存在します。これは、アナリティック・ワークスペース・オブジェクトではないため、アナリティック・ワークスペースの一部として保存できません。特定のアナリティック・ワークスペース内のオブジェクトの保存済の値がコンテキストに含まれている場合、そのアナリティック・ワークスペースをデタッチすると、Oracle OLAPによってそれらのオブジェクトがコンテキストから削除されます。Oracle OLAPオプションについての保存済の値、およびまだアタッチされている他のアナリティック・ワークスペースからのオブジェクトの保存済の値は、コンテキストに維持されます。

コンテキストについての情報は、CONTEXTファンクションを使用して取得できます。

CONTEXTコマンドとCONTEXTファンクションは、PUSHおよびPOP文の代替機能です。ただし、CONTEXTでは保存したオブジェクト値にアクセスしてオブジェクト値を更新できますが、PUSHおよびPOPで行えるのは単に値を保存およびリストアすることのみです。

構文

CONTEXT context-name [ CREATE | APPLY | DISCARD | {SAVE |DROP|RESTORE} objects]

パラメータ

context-name

コンテキストの名前を含むテキスト式。

CREATE

context-nameに指定された名前でコンテキストを作成します。名前は一意である必要があります。

SAVE

objectsに指定されたオブジェクトの値をコンテキストに保存します。コンテキストに保存できるのは、単一セルの変数およびリレーションです。ディメンション化された変数の値、ディメンション化されたリレーションまたはNAMEディメンションの値は、CONTEXTコマンドでは保存できません。これらのオブジェクトの値を保存しようとすると、エラー・メッセージが生成されます。

APPLY

適切なオブジェクトを、コンテキストに保存されている対応するオブジェクトの値に設定します。

DISCARD

コンテキストを削除します。

SAVE

objectsに指定されたオブジェクトの値をコンテキストに保存します。

DROP

objectsに指定されたオブジェクトの値をコンテキストから削除します。

注意:
セッション中にOracle OLAPオブジェクトを削除すると、コンテキストからも削除されます。

RESTORE

objectsに指定されたすべてのオブジェクトを、コンテキストに保存されている対応するオブジェクトの値に設定します。

objects

1つ以上のオブジェクト名。各オブジェクト名はスペースで区切ります。複数の名前をリストする際に1行に収まらない場合は、継続文字を使用してCONTEXTコマンドを別の行に継続できます。

使用上の注意

ネーミング規則

プログラミングの際は、関連付けられているアナリティック・ワークスペースの名前を基にして、コンテキストの名前を指定することをお薦めします。

例

例9-72 ディメンション・ステータスの保存

この例では、CONTEXTコマンドを使用してディメンションのステータスを保存およびリストアする方法を示します。次の文を実行すると、productディメンションの値のサブセットを含むコンテキストが作成されます。

LIMIT product TO 'Tents' 'Canoes'
CONTEXT 'democontext1' CREATE
CONTEXT 'democontext1' SAVE product

次の文で、productをそのすべての値に制限し、それらをリストするレポートを生成します。

LIMIT product TO ALL
REPORT product

これが生成されたレポートです。

PRODUCT
-----------
Tents
Canoes
Racquets
Sportswear
Footwear

次の文で、保存済のコンテキストを適用して、コンテキスト内に含まれる値のみをリストするレポートを生成します。

CONTEXT 'democontext1' APPLY
REPORT product

これが新しいレポートです。

PRODUCT
-----------
Tents
Canoes

CONTINUE

CONTINUEコマンドは、プログラム制御をFORループ処理またはWHILEループ処理の終端(DO/DOEND文の直前)に移動し、ループの繰返しを可能にするコマンドです。CONTINUEは、プログラム内でのみ、またFORまたはWHILEと組み合せた場合にのみ使用可能。

プログラム実行制御の詳細は、「プログラムのフロー制御」も参照してください。

構文

CONTINUE

例

例9-73 FORループにおけるコードのスキップ

あるプログラムの行で、次のように、地区の売上総額が5,000,000を超えているかどうかをテストするためにIF文が使用されているとします。売上がこの金額を超えていると、プログラムが続行して、その地区のレポートが作成されます。一方、地区の売上がその金額より少ない場合は、CONTINUE文によってプログラム制御がFORループの終わり(DOEND文の直前)に移動されます。その地区については行は作成されず、プログラムはステータス・リスト内の次の地区のテストを続行します。

...
FOR district
DO
IF TOTAL(sales, district) LT 5000000
THEN CONTINUE
... "(report statements for districts with total sales above 5,000,000)
DOEND
...

COPYDFN

COPYDFNプログラムは、アナリティック・ワークスペースでは新しいオブジェクトを定義し、現行のワークスペースまたはアタッチされているワークスペースでは指定したオブジェクトと同じ定義を使用するプログラムです。

COPYDFNでは、すべてのオブジェクト・タイプについてDEFINE、LDおよびPROPERTY行をコピーし、計算式オブジェクトの計算式(EQ)およびDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションの値名書式(VNF)をコピーします。COPYDFNによって、プログラムまたはモデルのテキストもコピーされます。COPYDFNでは、すべてのオブジェクトのPERMIT行、および計算式、プログラムまたはモデルのコンパイル済コードもコピーしません。

構文

COPYDFN newobject oldobject

パラメータ

newobject

定義する新しいオブジェクトの名前。

oldobject

定義のコピー元のオブジェクトの名前。

例

例9-74 プログラムのコピー

次の文では、COPYDFNを使用してnewprogというプログラムを作成しますが、このプログラムはoldprogという既存のプログラムのコピーです。その後、newprogを編集して、わずかに内容の異なるプログラムを作成できます。oldprogプログラムには次のような定義があります。

DEFINE oldprog PROGRAM
LD Shows total sales for the top five months from high to low
PROGRAM
LIMIT district TO 'BOSTON'
LIMIT month TO TOP 5 BASEDON TOTAL(sales, month)
REPORT TOTAL(sales, month)
END

次の文

COPYDFN newprog oldprog
DESCRIBE newprog

newprogに対し次の定義が作成されます。

DEFINE newprog PROGRAM
LD Shows total sales for the top five months from high to low
PROGRAM
LIMIT district TO 'BOSTON'
LIMIT month TO TOP 5 BASEDON TOTAL(sales, month)
REPORT TOTAL(sales, month)
END

CREATE_LOGICAL_MODEL

CREATE_LOGICAL_MODELプログラムを実行すると、OLAPキューブ・ディメンションの新しいモデルが作成され、その定義がOracleデータ・ディクショナリに追加されます。このプログラムの実行で行われる変更はトランザクショナルではなく、プログラムの一部としてCOMMITが自動的に実行されます。

関連項目:
「キューブ対応のOLAP DML文」

構文

CALL CREATE_LOGICAL_MODEL ( logical_dim, model_name)

パラメータ

CALL

CREATE_LOGICAL_MODELは引数を持つOLAP DMLプログラムであるため、OLAP DML CALL文を使用して起動します。

logical_dim

変更するキューブ・ディメンションのOracleデータ・ディクショナリ名を示すテキスト式。

関連項目:
「OLAP論理オブジェクトの名前の値を指定する場合のガイドライン」

model_name

Oracleデータ・ディクショナリでモデルに付ける名前を示すテキスト式。

DATE_FORMAT

DATE_FORMATコマンドは、DATETIME、TIMESTAMP、TIMESTAMP_TZ、TIMESTAMP_LTZ、DSINTERVALまたはYMINTERVALのデータ型を持つオブジェクトの定義に、書式テンプレートを割り当てるコマンドです。

日時書式テンプレートは、文字列に格納された日時データの書式を記述するテンプレートです。このテンプレートによりデータベース内の値の内部表現が変更されることはありません。文字列を日付に変換する場合、Oracle OLAPがその文字列をどのように解釈するかがテンプレートで決定されます。

注意:
この文は、SQLの日時データ型に対応する日時データ型を持つオブジェクトについてのみ使用できます。OLAP DMLに特有である日付のみのデータ型を持つ時間ディメンションには使用できません。

定義に日時書式テンプレートを割り当てるには、最新の定義または現行のセッション中に検討された定義である必要があります。そうでない場合は、最初にCONSIDER文を使用し、現行の定義にする必要があります。

構文

DATE_FORMAT [datetime_format_template]

パラメータ

datetime_format_template

1つ以上の日時書式要素で構成される式で、この式によって現行オブジェクトの値の入力や表示に使用する書式を指定します。テンプレートで指定できる要素については、表9-4「日時の書式要素」を参照してください。テンプレートを作成する際は、次の点に注意してください。

- 日時書式テンプレートの全長は、22文字を超えることはできません。

- 入力書式モデルの場合、同じ書式項目は2回指定できません。また、類似した情報を表す書式項目を組み合せることもできません。たとえば、'SYYYY'と'BC'を同一の書式文字列内で使用することはできません。

- 日時の書式要素には、TO_*日時ファンクションで使用できないものもあります(表2-7「日時フィールドと値」を参照)。

- 日時の書式要素であるFF、TZD、TZH、TZMおよびTZRは、タイムスタンプや期間の書式モデルで使用できますが、元のDATETIME書式モデルでは使用できません。

- 日時の書式要素の多くは、特定の長さに満たない場合、空白が追加されます。

templateを省略した場合、現行定義の既存の日付書式テンプレートが削除され、デフォルトの日時書式テンプレートが使用されます。(デフォルトの日時書式テンプレートについては、「デフォルトの日時書式テンプレート」を参照してください。)

表9-4 日時の書式要素

要素

TO_*日時ファンクションでの使用

説明

-
/
,
.
;
:
"text"

あり

句読点と引用符付きテキストは、結果で複製されます。

AD
A.D.

あり

ピリオド付き/なしで西暦を示します。

AM
A.M.

あり

ピリオド付き/なしで子午線インジケータを示します。

BC
B.C.

あり

ピリオド付き/なしで紀元前を示します。

CC
SCC

なし

世紀。

- 4桁の年の下2桁が01から99(01および99を含む)の場合、世紀はその年の上2桁に1を加えた値になります。

- 4桁の年の下2桁が00の場合、世紀はその年の上2桁と等しい値になります。

たとえば、2002は21を戻し、2000は20を戻します。

D

あり

曜日(1から7)。

DAY

あり

曜日。この要素に使用する言語で最長の曜日の幅に満たない場合は空白を追加します。

DD

あり

日付(1から31)。

DDD

あり

年における日(1から366)。

DL

あり

Oracle DatabaseのDATETIME書式の拡張である長い日付書式で値を返します(NLS_DATE_FORMATパラメータの現行値)。日付の構成要素(曜日や月など)の表示が、NLS_TERRITORYパラメータおよびNLS_LANGUAGEパラメータによって決まるようにします。たとえば、AMERICAN_AMERICAロケールでは、これは書式'fmDay, Month dd, yyyy'を指定することと同じです。GERMAN_GERMANYロケールでは、'fmDay, dd. Month yyyy'形式で指定したのと同じです。

制限: この書式は、TS要素でのみ、空白で区切って指定可能です。

DS

あり

短い日付書式の値を戻します。日付の構成要素(曜日や月など)の表示が、NLS_TERRITORYパラメータおよびNLS_LANGUAGEパラメータによって決まるようにします。たとえば、AMERICAN_AMERICAロケールでは、'MM/DD/RRRR'形式で指定したのと同じです。ENGLISH_UNITED_KINGDOMロケールでは、'DD/MM/RRRR'形式で指定したのと同じです。

制限: この書式は、TS要素でのみ、空白で区切って指定可能です。

DY

あり

曜日の省略形。

E

なし

年号(日本の元号暦、台湾暦およびタイ仏教暦)の省略形。

EE

なし

年号(日本の元号暦、台湾暦およびタイ仏教暦)の完全形。

FF [1..9]

あり

小数秒で、基数文字は印刷されません(X書式要素を使用して基数文字を追加します)。FFの後に1から9の数字を使用して、戻される日時値の小数秒部分の桁数を指定します。数字を指定しない場合は、日時データ型に指定された精度またはデータ型のデフォルトの精度が使用されます。

例: 'HH:MI:SS.FF'

SELECT TO_CHAR(SYSTIMESTAMP, 'SS.FF3') from dual;

FM

あり

先行および後続する空白を持たない値を返します。

関連項目: 『Oracle Database SQL言語リファレンス』の書式モデル修飾子に関する項

FX

あり

文字データと書式モデルの完全一致を必要とします。

関連項目: 『Oracle Database SQL言語リファレンス』の書式モデル修飾子に関する項

HH

あり

時間(1から12)。

HH12

なし

時間(1から12)。

HH24

あり

時間(0から23)。

IW

なし

ISO規格に基づく、年における週(1から52または1から53)。

IYY
IY
I

なし

ISO年の最後の3桁、2桁または1桁。

IYYY

なし

ISO規格に基づく4桁の年。

J

あり

ユリウス日(紀元前4712年1月1日からの経過日数)。Jで指定する数字は、整数である必要があります。

MI

あり

分(0から59)。

MM

あり

月(01から12。1月は01)。

MON

あり

月の名前の省略形。

MONTH

あり

月の名前。この要素に使用する言語で最長の月名の幅に満たない場合は空白を追加します。

PM
P.M.

なし

ピリオド付き/なしで子午線インジケータを示します。

Q

なし

年の四半期(1、2、3、4。1月から3月は1)。

RM

あり

ローマ数字による月(IからXII。1月はI)。

RR

あり

2桁のみを使用して、21世紀に20世紀の日付を格納できます。

関連項目: 『Oracle Database SQL言語リファレンス』のRR日時書式要素に関する項

RRRR

あり

年を丸めます。4桁または2桁で入力できます。2桁の場合、RRと同じ値が返されます。この機能を使用しない場合は、4桁の年を入力します。

SS

あり

秒(0から59)。

SSSSS

あり

午前0時から経過した秒(0から86399)。

TS

Yes

短い時間書式で値を返します。時間の構成要素(時間や分など)の表示が、NLS_TERRITORY初期化パラメータおよびNLS_LANGUAGE初期化パラメータによって決まるようにします。

制限: この書式は、DLまたはDS要素でのみ、空白で区切って指定可能です。

TZD

あり

夏時間情報。TZD値は、夏時間の情報を含むタイムゾーン文字列の省略形。TZRで指定した地域と一致している必要があります。

例: PST(アメリカ太平洋標準時)、PDT(アメリカ太平洋夏時間)。

TZH

あり

タイム・ゾーンの時間を指定します。(TZM書式要素を参照。)

例: 'HH:MI:SS.FFTZH:TZM'

TZM

あり

タイム・ゾーンの分を指定します。(TZH書式要素を参照。)

例: 'HH:MI:SS.FFTZH:TZM'

TZR

あり

タイムゾーン地域の情報。この値は、データベースでサポートされるタイムゾーン地域である必要があります。

例: US/Pacific

WW

なし

年における週(1から53)。第1週はその年の1月1日で始まり、1月7日で終了します。

W

なし

月における週(1から5)。第1週はその月の1日で始まり、7日で終了します。

X

あり

ローカル基数文字

例: 'HH:MI:SSXFF'

Y,YYY

あり

指定の位置にカンマを付けた年。

YEAR
SYEAR

なし

スペルアウトした年。Sの場合、紀元前の日付の先頭にマイナス記号(-)が付加されます。

YYYY
SYYYY

あり

4桁の年。Sの場合、紀元前の日付の先頭にマイナス記号が付加されます。

YYY
YY
Y

あり

年の最後の3桁、2桁または1桁。

使用上の注意

デフォルトの日時書式テンプレート

デフォルトの日時書式テンプレートは、初期化パラメータNLS_DATE_FORMATで明示的に指定されるか、または初期化パラメータNLS_TERRITORYで暗黙的に指定されます。セッションのデフォルトの日時書式は、ALTER SESSION文で変更できます。

ISO標準日付書式要素

Oracleでは、ISO規格に従って、日時書式要素IYYY、IYY、IY、IおよびIWによって返された値が計算されます。

これらの値と日時書式要素YYYY、YYY、YY、YおよびWWによって戻される値の相違点については、『Oracle Databaseグローバリゼーション・サポート・ガイド』の「グローバリゼーション・サポート」の章を参照してください。

RR日時書式要素

RR日時書式要素は、YY日時書式要素に似ていますが、より柔軟に、他の世紀に日付の値を格納できます。RR日時書式要素では、年の下2桁のみを指定することにより、20世紀の日付を21世紀に格納できます。

TO_DATEファンクションとYY日時書式要素を使用する場合、返される年の上2桁は常に、現在の年と同一になります。かわりにRR日時書式要素を使用する場合、戻り値の世紀は、指定した2桁の年および現在の年の下2桁によって異なります。

したがって次の構文を使用します。

- 指定した2桁の年が00から49である場合、次のようになります。

- 現在の年の下2桁が00から49の場合、返される年の上2桁は、現在の年と同一になる。

- 現在の年の下2桁が50から99の場合、返される年の上2桁は、現在の年の上2桁に1を加えた値になる。

- 指定した2桁の年が50から99である場合、次のようになります。

- 現在の年の下2桁が00から49の場合、返される年の上2桁は、現在の年の上2桁から1を引いた値になる。

- 現在の年の下2桁が50から99の場合、返される年の上2桁は、現在の年と同一になる。

日時書式要素の接尾辞

表9-5「日時書式要素の接尾辞」に、日時書式要素に追加できる接尾辞を示します。

表9-5 日時書式要素の接尾辞

接尾辞

意味

要素の例

値の例

TH

序数

DDTH

4TH

SP

スペルアウトした数字

DDSP

FOUR

SPTHまたはTHSP

スペルアウトした序数

DDSPTH

FOURTH

日付書式要素の接尾辞を使用する際は、次の点に注意してください。

- 前述の接尾辞のいずれかを日時書式要素に追加する場合、戻り値は必ず英語になります。

- 日時の接尾辞は、書式の出力にのみ有効です。データベースに日付を挿入するためには使用できません。

日時書式要素およびグローバリゼーション・サポート

いくつかの日時書式要素の機能は、Oracle Databaseを使用している国および言語に依存します。たとえば、次に示す日時書式要素は、スペルアウトした値を返します。

- MONTH

- MON

- DAY

- DY

- BC、AD、B.C.またはA.D.

- AM、PM、A.M.またはP.M.

これらの値を戻す言語は、初期化パラメータNLS_DATE_LANGUAGEによって明示的に指定することも、初期化パラメータNLS_LANGUAGEによって暗黙的に指定することもできます。日時書式要素YEARとSYEARによって戻される値は常に英語です。

日時書式要素Dは、週の何日目であるか(1から7)を返します。週の第1日目は、初期化パラメータNLS_TERRITORYで暗黙的に指定されます。

関連項目:
グローバリゼーション・サポートの初期化パラメータの詳細は、『Oracle Databaseリファレンス』および『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

日付書式要素における大文字

スペルアウトした単語、省略形またはローマ数字での大文字の使用方法は、対応する書式要素での大文字の使用方法に従います。たとえば、日時書式要素'DAY'の場合は'MONDAY'、'Day'の場合は'Monday'、'day'の場合は'monday'のように大文字が使用されます。

日時書式テンプレートの句読点および文字リテラル

日時書式テンプレートには、次の文字を含めることができます。

- ハイフン、スラッシュ、カンマ、ピリオドおよびコロンなどの句読点

- 二重引用符で囲んだ文字リテラル

これらの文字は、書式モデル内と同じ位置で戻り値に表示されます。

書式文字列では句読記号文字がある位置に、日付文字列で英数字が見つかった場合、Oracleはエラーを返します。たとえば、次の書式文字列ではエラーが返されます。

TO_CHAR (TO_DATE('0297','MM/YY'), 'MM/YY')

例

例9-75 オブジェクトの日時書式テンプレートの変更

次の文に示すように、デフォルトの日時書式テンプレートがDD_MON_RRであるとします。

SHOW NLS_DATE_FORMAT
DD-MON-RR

また、mydatetimeという変数を定義し、CURRENT_TIMESTAMPの値を割り当てるとします。

DEFINE mydatetime VARIABLE DATETIME
mydatetime = CURRENT_TIMESTAMP

mydatetimeの値についてのレポートには、次の値が表示されます。この値は、NLS_DATETIME FORMATの設定で決定された書式を持ちます。次のように指定された順で、日、月および年の値のみが表示されます。

REPORT mydatetime

MYDATETIME
-----------
02-FEB-07

ここで、次の文を発行することにより、mydatetimeの日付書式マップを変更します。

CONSIDER mydatetime
DATE_FORMAT MON-RRRR-DD-HH24

その結果、mydatetimeの値の表示に、24時間形式の時間が含まれます。

REPORT mydatetime

MYDATETIME
--------------
FEB-2007-02-10

DBGOUTFILE

DBGOUTFILEコマンド(省略形はDOTF)は、デバッグ情報をファイルに送信するコマンドです。PRGTRACEおよびMODTRACEをYESに設定すると、DBGOUTFILEにより生成されるファイルではプログラム、モデルまたは入力ファイルの各行とそれに対応する出力が併記されます。ECHOPROMPTをYESに設定すると、デバッグ・ファイルにエラー・メッセージも含まれます。

構文

DBGOUTFILE {EOF | TRACEFILE | [APPEND] file-name [NOCACHE]}

パラメータ

EOF

現行のデバッグ・ファイルを閉じます。それにより、デバッグ出力がファイルへ送信されなくなります。

TRACEFILE

デバッグ出力をOracleのトレース・ファイルに送信するよう指定します。トレース・ファイルはTRACEFILEUNITオプションにより識別されます。

APPEND

出力を既存のファイルの末尾に追加するかどうかを指定します。この引数を指定せず、指定された名前のファイルがすでに存在する場合は、ファイルの現在の内容が新しい出力に置き換えられます。

file-name

デバッグ出力が書き込まれるファイルの名前を表すテキスト式。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。

注意:
ディレクトリ・オブジェクトはデータベースで定義され、ディレクトリおよびディレクトリ内のファイルへのアクセスを制御します。CDA文を使用して、カレント・ディレクトリ・オブジェクトを特定および指定できます。使用するデータベース・ユーザー名で読取りおよび書込み可能なファイルがあるディレクトリ・オブジェクトへのアクセス権については、Oracle DBAに問い合せてください。

NOCACHE

行が実行されるたびにOracle OLAPがデバッグ・ファイルに書き込むことを指定します。このキーワードを指定しなかった場合、Oracle OLAPでは、ファイルのI/Oアクティビティを軽減するため、テキストの保存およびファイルへの書込みが定期的に実行されます。

NOCACHEキーワードは処理速度を大幅に低下させますが、このキーワードにより、各行が実行された直後にデバッグ・ファイルに確実に記録されるようになります。特定の行の後で異常終了するプログラムをデバッグしているときは、NOCACHEを使用することで、実行されたすべての行を確認できます。

例

例9-76 デバッグ・ファイルを使用したデバッグ

次の文で、カレント・ディレクトリ・オブジェクト内にdebug.txtという名前の便利なデバッグ・ファイルが作成されます。

PRGTRACE = yes
ECHOPROMPT = yes
DBGOUTFILE 'debug.txt'

これらの文を実行後、プログラムをいつもどおりに実行できます。デバッグ・ファイルを閉じるには、次の文を実行します。

DBGOUTFILE EOF

次のサンプル・プログラムでは、最初のLIMITコマンドに構文エラーがあります。

DEFINE ERROR_TRAP PROGRAM
PROGRAM
TRAP ON traplabel
LIMIT month TO FIRST badarg
LIMIT product TO FIRST 3
LIMIT district TO FIRST 3
REPORT sales
traplabel:
SIGNAL ERRORNAME ERRORTEXT
END

PRGTRACEとECHOPROMPTの両方をYESに設定し、DBGOUTFILEでデバッグ出力をdebug.txtというファイルに送信するように設定すると、error_trapプログラムを実行した時点で次のテキストがdebug.txtファイルに送信されます。

(PRG= ERROR_TRAP)
(PRG= ERROR_TRAP) TRAP ON traplabel
(PRG= ERROR_TRAP)
(PRG: ERROR_TRAP) LIMIT month TO FIRST badarg
ERROR: BADARG does not exist in any attached database.
(PRG= ERROR_TRAP) traplabel:
(PRG= ERROR_TRAP) SIGNAL ERRORNAME ERRORTEXT
ERROR: BADARG does not exist in any attached database.

例9-77 デバッグ情報のファイルへの送信

次に示すのは、最初のLIMITコマンドに構文エラーのあるプログラムのテキストです。

DEFINE error_trap PROGRAM
PROGRAM
TRAP ON traplabel
LIMIT month TO FIRST BADARG
LIMIT product TO FIRST 3
LIMIT district TO FIRST 3
REPORT sales
traplabel:
SIGNAL ERRORNAME ERRORTEXT
END

次の文で、デバッグ情報がdebug.txtというファイルに送信されます。

DBGOUTFILE 'debug.txt'

PRGTRACEとECHOPROMPTの両方をYESに設定すると、Oracle OLAPでは、ERROR_TRAPプログラムが実行された時点で、次のテキストをdebug.txtファイルに送信します。ファイルの最後の行は、デバッグ情報の記録を終了するためのコマンドです。

error_trap
(PRG= ERROR_TRAP)
(PRG= ERROR_TRAP) trap on traplabel
(PRG= ERROR_TRAP)
(PRG: ERROR_TRAP) limit month to first badarg
ERROR: BADARG does not exist in any attached workspace.
(PRG= ERROR_TRAP) traplabel:
(PRG= ERROR_TRAP) signal errorname errortext
ERROR: BADARG does not exist in any attached workspace.
dbgoutfile eof

DEFINE

DEFINEコマンドは、アナリティック・ワークスペースに新規オブジェクトを追加するコマンドです。ここでは、DEFINEコマンドの概略を示します。続いて、各オブジェクト型を作成する次のようなDEFINEコマンドの使用方法について説明します。

- DEFINE AGGMAP

- DEFINE COMPOSITE

- DEFINE DIMENSION

- DEFINE DIMENSION(単純)

- DEFINE DIMENSION(結合)

- DEFINE DIMENSION CONCAT

- DEFINE DIMENSION ALIASOF

- DEFINE FORMULA

- DEFINE MODEL

- DEFINE PARTITION TEMPLATE

- DEFINE PROGRAM

- DEFINE RELATION

- DEFINE SURROGATE

- DEFINE VALUESET

- DEFINE VARIABLE

- DEFINE WORKSHEET

関連項目:
第3章「計算式、モデル、集計および割当て」

構文

DEFINE name object-type attributes [AW workspace] [SESSION]

パラメータ

name

新規オブジェクトの名前を示すTEXT式。名前の値を指定する際は、次のガイドラインに従ってください。

- 名前は1から64文字で指定する必要があります。マルチバイト・キャラクタ・セットを使用している場合、必要なバイト数が64バイトを超えるときでも64文字まで指定できます。各文字には、英文字(AからZ)、数字(0から9)、アンダースコア(_)またはドット(.)を使用できます。ただし、これらの文字の使用には次の制約があります。

- 名前は、ドット記号(.)単独またはアンダースコア記号(_)単独では構成できません。

- 名前では、予約語を重複できません。予約語の確認の詳細は、RESERVEDファンクションを参照してください。

- 名前の最初の文字は数字にできません。

- 2番目の文字が数字の場合、最初の文字はドット(.)にできません。

- デフォルトでは、定義は現行のワークスペースに作成されます。アタッチされている別のワークスペースに定義を作成する場合は、nameに修飾オブジェクト名を指定するか、AW引数を使用してワークスペースを指定します。両方を一緒には使用できません。

注意:
作成するオブジェクトの名前が、アタッチされている別のワークスペース内の既存オブジェクトと同じ名前でも、Oracle OLAPでは警告を行いません。

object-type

定義するオブジェクト型。デフォルトはVARIABLEです。オブジェクト型については、DEFINEコマンドのサブセクションに記載されています。

attributes

属性はオブジェクト型ごとに異なります。各属性は、それぞれのオブジェクト型の項に一覧で示されています。

AW workspace

オブジェクトを定義する先の、アタッチされたワークスペースの名前。nameに修飾オブジェクト名を使用することでも、現行ワークスペース以外のアタッチされたワークスペースを指定できます。nameに修飾オブジェクト名を指定する場合は、この句は使用できません。

SESSION

オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、読取り専用アクセス権のあるEXPRESSアナリティック・ワークスペースに作成されます。オブジェクトは、現行のセッションの終了時に廃棄されます。

使用上の注意

DEFINE実行時におけるプログラム実行トリガー

TRIGGER_DEFINEプログラムを使用して、DEFINEコマンドを、自動でOLAP DMLプログラムを実行するイベントにすることができます。詳細は、「トリガー・プログラム」を参照してください。

NAMEディメンションのステータスに対するDEFINEの影響

値が制限されているNAMEディメンションでDEFINEコマンドを実行すると、NAMEのステータスが自動的にALLに制限されます。

セッション・オブジェクトの表示

SESSIONキーワードを使用して作成されたオブジェクトは、現行のアナリティック・ワークスペースではなく、EXPRESSという名前のアナリティック・ワークスペースに保存されます。したがって、現行のアナリティック・ワークスペースに対して操作を行う文(LISTNAMESなど)では、次のいずれかを実行しないかぎり、セッション・オブジェクトはリストされません。

- 文にEXPRESSアナリティック・ワークスペースを指定する(LISTNAMES AW EXPRESSなど)

- AW ATTACH EXPRESS文を発行して、EXPRESSアナリティック・ワークスペースを現行のアナリティック・ワークスペースにする。

DEFINE AGGMAP

DEFINEコマンドとともにAGGMAPキーワードを使用すると、アナリティック・ワークスペースに新しいaggmapオブジェクトが追加されます。aggmapオブジェクトとは、Oracle OLAPによる変数データの割当て方法または集計方法についての仕様です。

aggmapを定義することで、aggmapオブジェクトがアナリティック・ワークスペースに作成されますが、計算仕様は定義されません。aggmap仕様では、データの集計方法か割当て方法のいずれかを指定できます。

- 集計仕様のコーディングについては、AGGMAPコマンドを参照してください。

- 割当て仕様のコーディングについては、ALLOCMAPコマンドを参照してください。

構文

DEFINE aggname AGGMAP [<dims...>][AW workspace][SESSION]

パラメータ

aggname

定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。

AGGMAP

aggmapを定義するときのオブジェクト型。

dims

(オプションで、以前のリリースのソフトウェアとの互換性のために維持されています。)集計のためのaggmapオブジェクト(AGGMAP型のaggmap)を定義する場合のディメンションの名前。aggmapの定義または仕様では、結合ディメンションをベース・ディメンションとして指定できません。

AW workspace

オブジェクトを定義する先の、アタッチされたワークスペースの名前。この引数の詳細は、DEFINEコマンドを参照してください。

SESSION

オブジェクトを現行のセッションでのみ存在させることを指定します。この引数の詳細は、DEFINEコマンドを参照してください。

例

例9-78 集計用のAggmapの作成

次の文でsales変数を定義するとします。

DEFINE sales VARIABLE <time, product, geography>

また、次の定義および仕様で、sales.aggというaggmapを定義するとします。

DEFINE sales.agg AGGMAP <time, product, geography>
AGGMAP
RELATION time.r PRECOMPUTE (time NE 'Year99')
RELATION product.r PRECOMPUTE (product NE 'All')
RELATION geography.r
CACHE STORE
END

sales.agg集計仕様には、先行する3つのRELATION文およびCACHE文が含まれます。この例では、timeディメンションの値がYear99であるデータを除き、timeディメンションのtime.r階層のすべてのデータを集計するように指定しています。productディメンションの値がALLであるデータを除き、productディメンションのproduct.r階層のすべてのデータを集計されます。(この例では、productディメンションには、階層内のすべての製品を表すALLというディメンション値があります。)geographyディメンション値はすべて集計されます。さらに、CACHE STORE文によって、その場でロールアップされるデータを1回のみ計算し、同一のセッション内の他のアクセス要求のためにキャッシュに保存するように指定しています。

CACHE STOREが設定されている場合、セッション中に計算されたデータは意図しないうちに保存されるため、ユーザーがアナリティック・ワークスペースへの書込みアクセス権限を持っている必要はないことに注意してください。

この例では、Year99 time値でディメンション化されているすべてのデータ値、またはALL productディメンション値が、即時計算されます。

この時点で、次のように、sales.agg aggmapをAGGREGATEコマンドとともに使用できます。

AGGREGATE sales USING sales.agg

例9-79 割当て用のAggmapの作成

次の文で定義したsales変数があるとします。

DEFINE sales VARIABLE <time, product, geography>

あるソースから、timeおよびproductディメンション階層によって指定されるsales変数のセルへデータを割り当てるため、次のaggmap定義および仕様を含むsalesalloc.txtというASCIIディスク・ファイルを作成したとします。

DEFINE sales.alloc AGGMAP
ALLOCMAP
RELATION time.r OPERATOR EVEN
RELATION product.r operator EVEN NAOPERATOR HEVEN
SOURCEVAL ZERO
CHILDLOCK DETECT
END

sales.alloc aggmapを使用中のワークスペースに含めるには、次の文を実行します。

INFILE 'salesalloc.txt'

これで、sales.alloc aggmapが定義され、先行する2つのRELATION文、SOURCEVAL文およびCHILDLOCK文が含まれています。aggmapへの文のエントリは、END文で終了します。この例では、ソース値の最初の割当てはtimeディメンション階層で行い、ソース値を各割当てレベルのターゲット・セル間で均等に分割するように指定しています。2番目の割当てはproductディメンション階層で行い、ここでもソース値は各割当てレベルのターゲット・セル間で均等に分割され、割当てがデッドロックに遭遇した場合は、ソース値は、基礎値にNAを持つセルも含め、階層ターゲット・セル間で均等に分割されます。SOURCEVAL文によって、割当て後に、ALLOCATEによって各ソース・セルの値をゼロに設定するよう指定しています。CHILDLOCK文によって、ALLOCATEで、ディメンション階層の親要素および子要素の両方についてロックの存在を検出するように指定しています。

この時点で、次のように、sales.alloc aggmapをALLOCATEコマンドとともに使用できます。

ALLOCATE sales USING sales.alloc

この文では、基礎オブジェクトまたはターゲット・オブジェクトが指定されていないため、ALLOCATEはsales変数を割当てのソース、基礎およびターゲットとして使用します。

DEFINE COMPOSITE

DEFINEコマンドとともにCOMPOSITEキーワードを使用すると、アナリティック・ワークスペースに新しい名前付きコンポジットが追加されます。概念として、コンポジットは次の2つの構造から成り立っていると考えられます。

- コンポジット・オブジェクト自体。コンポジットには、ディメンション値の組合せ(つまり、コンポジット・タプル)が含まれており、Oracle OLAPでは、この組合せを使用して、コンポジットによってディメンション化される変数の構造を決定します。

- コンポジット値とそのベース・ディメンション値との間の索引。

コンポジットでディメンション化される変数では、配列要素(つまり変数セル)はコンポジットのタプルに格納されるディメンション値についてのみがOracle OLAPによって作成され、ベース・ディメンション内のすべての値についてセルが作成されるわけではありません。変数のデータは、コンポジットの各タプルに対し、セルからセルへ順番に格納されます。データ格納の観点からは、コンポジット内のベース・ディメンション値の各組合せは、通常のディメンションの値と同様に扱われます。したがって、通常のディメンションとコンポジットを1つずつ持つ変数を定義する場合、変数のデータは、2次元の変数と同様に格納されます。コンポジットを使用することにより、変数に対して作成される要素の数が減り、データの格納がより効率化されます。

注意:
「名前のないコンポジット」で説明されているように、Oracle OLAPは、名前のないコンポジットの使用もサポートします。

構文

DEFINE name COMPOSITE <dims...> [AW workspace] [index-algorithm] [SESSION]

ここで、index-algorithmは、Oracle OLAPが、コンポジット値とそのベース・ディメンション値を関連付ける索引を作成する際に使用するアルゴリズムです。このオプションの引数を指定しない場合、SPARSEINDEXオプションで指定された値が使用されます。index-algorithmの有効な値は次のとおりです。

BTREE

BTREE64

COMPRESSED

HASH

パラメータ

name

定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。

COMPOSITE

名前付きコンポジットを定義するときのオブジェクト型。

dims

コンポジットのベース・ディメンションとする、2つ以上のディメンションの名前。index-algorithmの値としてCOMPRESSEDを指定する場合は、1つ以上のディメンションが階層ディメンションである必要があります。

dims内のディメンションの順序は、index-algorithmに指定する値によって次のように異なります。

- Bツリー・コンポジットまたはハッシュ・コンポジットについては、「変数の格納および文のループ処理におけるディメンションの順序の影響」で説明されているように、最も変化の速いディメンションから最も変化の遅いディメンションという順序でディメンションを指定します。

- 圧縮コンポジットについては、ディメンションを指定する順序は任意で構いません。AGGREGATEコマンドまたはAGGREGATEファンクションでFORCEORDERを指定しないかぎり、値が格納される順序はOracle OLAPにより選択され最適化されます。Oracle OLAPにより最適化された順序を確認するには、キューブ操作ログを表示します。

関連項目:
キューブ操作ログおよびDBMS_CUBE_LOGパッケージの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。

コンポジットを定義する前に、まず、リストで使用するすべてのディメンションおよび名前付きコンポジットを定義しておく必要があります。リスト内にある名前のないコンポジットは、DEFINEを実行することで自動作成されます。

AW workspace

オブジェクトを定義する先の、アタッチされたワークスペースの名前。この引数の詳細は、DEFINEコマンドを参照してください。

BTREE

コンポジット値とベース・ディメンション値の関連付けとして、Bツリー索引の作成を指定します。BTREEは、コンポジットの標準的な索引付けメソッドです。BTREEコンポジットでディメンション化される変数では、配列要素(つまり変数セル)はコンポジットのタプルに格納されるディメンション値についてのみがOracle OLAPによって作成され、ベース・ディメンション内のすべての値についてセルが作成されるわけではありません。

BTREE64

コンポジット値とベース・ディメンション値の関連付けとして、拡張性の高いBツリー索引の作成を指定します。BTREE64コンポジットでディメンション化される変数では、BTREEコンポジットと同様に、配列要素(つまり変数セル)はコンポジットのタプルに格納されるディメンション値についてのみ作成され、ベース・ディメンション内のすべての値についてセルが作成されるわけではありません。ただし、BTREEコンポジットとは異なり、BTREE64コンポジットでは2GBを超えるBツリーがサポートされます。

注意:
通常、BTREE64コンポジットは、2GBを超えるリレーショナル表からデータを移入する変数をディメンション化する場合に定義します。

COMPRESSED

コンポジット値とベース・ディメンション値の関連付けとして、圧縮型索引の作成を指定します。1つ以上の階層ディメンションがdimsに指定され、これから集計される変数のコンポジットを作成する場合にのみ、COMPRESSEDを指定します。

圧縮コンポジットは、そのコンポジットを使用する変数の非NAの詳細データを識別するベース・ディメンション値の各セットにつき、1つのコンポジット・タプルを保持します。さらに、圧縮コンポジットでディメンション化された変数では、複数の子孫を持つ親を表すタプルに対してのみコンポジット内での物理的な位置が作成されることによって、変数、コンポジットおよびコンポジット索引内の冗長性が削減されます。その後、コンポジット構造とベース・ディメンション値の索引が作成され、このコンポジット構造が変数のディメンションとして使用されます。圧縮コンポジットの実際の構造は、Bツリー・コンポジットまたはハッシュ・コンポジットの構造より小さいため、圧縮コンポジットでディメンション化される変数も、Bツリー・コンポジットまたはハッシュ・コンポジットでディメンション化される変数よりも小さくなります。また、圧縮コンポジットの索引には複数の子孫を持つ親ノードのみが含まれるので、圧縮コンポジットの索引にはレベルが少なく、Bツリー・コンポジットの索引よりも小さくなります。実際のパフォーマンスは階層の深さやコンポジット内のディメンションの順序により異なりますが、圧縮コンポジットで定義された変数の集計は、通常、Bツリー・コンポジットまたはハッシュ・コンポジットで定義された変数の集計よりもはるかに高速です。

注意:
Oracle OLAPは、AGGREGATEコマンドまたはAGGREGATEファンクションの機能を使用して圧縮コンポジットによってディメンション化される変数のデータを圧縮します。したがって、1つ以上の圧縮コンポジットによりディメンション化されている変数を集計する場合には、特に注意が必要です。詳細は、「圧縮コンポジットによってディメンション化される変数の集計」を参照してください。

HASH

コンポジット値とベース・ディメンション値の関連付けとして、ハッシュ索引の作成を指定します。HASHはほとんど使用しませんが、通常は、コンポジットに2つまたは3つのディメンションがある場合にのみ使用します。Bツリー・コンポジットまたはハッシュ・コンポジットでディメンション化される変数では、配列要素(つまり変数セル)はコンポジットのタプルに格納されるディメンション値についてのみがOracle OLAPによって作成され、ベース・ディメンション内のすべての値についてセルが作成されるわけではありません。

SESSION

オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。

使用上の注意

共有コンポジット

単一のBツリー・コンポジットまたはハッシュ・コンポジットを使用して、複数の変数をディメンション化することが可能です。(このような形では圧縮コンポジットを共有できません。)Bツリー・コンポジットまたはハッシュ・コンポジットでディメンション化された変数の実際のスパース性は、そのコンポジットが非共有コンポジットおよび共有コンポジットのいずれであるかによって異なります。

- 非共有コンポジットは、1つの変数のディメンション化にのみ使用されるコンポジットです。いずれのコンポジット(Bツリー・コンポジット、ハッシュ・コンポジットおよび圧縮コンポジット)も、非共有コンポジットとして使用できます。非共有コンポジットは、それを使用する変数が移入される場合にのみ、移入されます。したがって、非共有コンポジットは、それを使用してディメンション化する変数のスパース性を完全に反映します。その変数についての、各非NA値のディメンション値の組合せのみを保持します。

- 共有コンポジットは、複数の変数のディメンション化に使用されるコンポジットです。共有コンポジットとして使用できるのは、Bツリー・コンポジットまたはハッシュ・コンポジットのいずれかで、圧縮コンポジットは共有できません。共有コンポジットの移入は、それを使用する変数のいずれかが移入されると行われます。共有コンポジットは、それを使用してディメンション化するすべての変数について、非NA値のディメンション値のあらゆる組合せを保持します。つまり、共有コンポジットは、それを使用してディメンション化するすべての変数のスパース性を反映します。したがって、通常、共有コンポジットでディメンション化する変数は、完全にスパースな変数ではありません。

変数のサイズが重要な場合で、同じディメンションでスパースな、ただし、スパース性のパターンが大幅に異なる複数の変数がある場合、それぞれの変数に対し別のコンポジットを定義します。

例

この項では、名前付きBツリー・コンポジットの簡単な作成例を紹介します。コンポジットを使用して変数をディメンション化する例は、例9-99「非圧縮コンポジットによりディメンション化される変数の定義」および例9-100「圧縮コンポジットによりディメンション化される変数の定義」を参照してください。

例9-80 名前付きのBツリー・コンポジットの作成

SPARSEINDEXの値がBTREEであるとします。次の文で、2つのオブジェクト(Bツリー索引とベース・ディメンションmarketを持つ名前付きコンポジット、およびmonthディメンションとmarket.productコンポジットでディメンション化されたexpensesという変数)が定義されます。

DEFINE market.product COMPOSITE <market product>
DEFINE expenses DECIMAL <month market.product <market product>>

DEFINE DIMENSION

DEFINEコマンドとともにDIMENSIONキーワードを使用すると、アナリティック・ワークスペースに新しいディメンション・オブジェクトが追加されます。ディメンションは、データへの索引を提供する、値のリストです。

DEFINE DIMENSIONコマンドの構文は定義するディメンションの型によって異なるため、次のように4つの項目に分かれています。

- DEFINE DIMENSION(単純): ディメンションを同じデータ型の一意の値で定義します。

- DEFINE DIMENSION(DWMQY): 値が時間間隔(日、週、月、四半期または年)を表す、非階層ディメンションを定義します。

- DEFINE DIMENSION(結合): ベース・ディメンションが重複する値を含まないか、異なるデータ型を持つ場合で、ディメンション値の組合せを明示的に指定する必要がある場合に、2つ以上の別のベース・ディメンションにまたがり1つのディメンションを定義します。

- DEFINE DIMENSION CONCAT: ベース・ディメンションが重複する値または異なるデータ型を含む場合、またはOracle OLAPによってディメンション値の組合せを自動で移入する必要がある場合、2つ以上の別のベース・ディメンションにまたがり1つのディメンションを定義します。

- DEFINE DIMENSION ALIASOF: 単純なディメンションに対して別名を定義します。

注意:
アナリティック・ワークスペースにディメンションを定義しても、アナリティック・ワークスペースにはディメンションの定義のみが追加され、ディメンション自体は移入されません。OLAP DMLを使用してディメンションを移入するには、OLAP DMLのSQL、FILEREADまたはMAINTAIN文を発行します。

DEFINE DIMENSION(単純)

DEFINE DIMENSION(単純)コマンドは、単純なディメンションを定義するコマンドです。変数が通常のディメンションによってディメンション化されている場合、Oracle OLAPでは、変数内に、変数のディメンション値の各セットについて1つの配列要素を作成します。単純なディメンションの値は、同じデータ型を持つ一意のデータ値です。単純なディメンションは、フラット・ディメンション、または階層の異なるレベルからの値を含む階層ディメンションです。

ヒント:
重複する値またはデータ型が異なる値を使用して階層ディメンションを作成するには、DEFINE DIMENSION CONCATで説明されているように、連結ディメンションを使用します。

構文

DEFINE name DIMENSION type [TEMP] [AW workspace] [SESSION]

ここで、typeは、ディメンションのデータ型です。typeの構文は、データ型に応じて次のように異なります。

TEXT  [WIDTH n]

NTEXT  [WIDTH n]

ID

INTEGER

NUMBER [(precision , scale)]

DATETIME [( truncation-code )]

TIMESTAMP [( truncation-code )]

TIMESTAMP_TZ [( truncation-code )]

TIMESTAMP_LTZ [( truncation-code )]

パラメータ

name

定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。

DIMENSION

ディメンションを定義するときのオブジェクト型。

TEXT

ディメンションの値をTEXTデータ型として指定し、このTEXTデータ型は、Oracle DatabaseにおけるCHARおよびVARCHAR2データ型に相当します。このデータ型は、データベース・キャラクタ・セットで1行に最大4000バイトを格納できます。

NTEXT

ディメンションの値をNTEXTデータ型として指定し、このNTEXTデータ型は、Oracle DatabaseにおけるNCHARおよびNVARCHAR2データ型に相当します。このデータ型は、UTF-8文字コードで1行に最大4,000バイトを格納できます。

ID

データベース・キャラクタ・セットで1行に最大8シングルバイト文字を格納する、特殊なテキスト・データ型を指定します。

WIDTH n

TEXTまたはNTEXTディメンションの場合の、オブジェクトの各値の格納の幅(バイト単位)。幅の有効な値は1から4000までです。特定のディメンションの値が同じようなサイズであることがわかっている場合にのみ、固定幅を指定します。指定された幅を超える値は、切り捨てられます。

INTEGER

ディメンションの値をINTEGERデータ型として指定します。数字が示す位置(1、2など)によって識別される値を持つディメンションのためのデータ型です。INTEGERデータ型は、ディメンションに文字値が含まれないことを意味します。可能な場合は、テキスト・データ型または時間間隔のデータ型を使用する方が簡単です。

NUMBER

ディメンションの値をNUMBERデータ型として指定します。NUMBERディメンションは、値を位置によって指定できず、値によってしか指定できないという点で、その他のディメンションと異なります。NUMBERディメンションの値を位置で指定するには、NUMBERディメンションに対しINTEGER型のディメンション・サロゲートを定義します。

precision

NUMBER型の値が保持できる合計桁数。

scale

NUMBER型の値が保持できる、小数点より右の桁数。たとえば、精度7およびスケール2を指定した場合、ディメンションに指定可能な値の最高値は99999.99です。精度の値を指定し、スケールの値を指定しなかった場合、スケールは0となります。

DATETIME

ディメンションの値をDATETIMEデータ型として指定します。

TIMESTAMP

ディメンションの値をTIMESTAMPデータ型として指定します。

TIMESTAMP_TZ

ディメンションの値をTIMESTAMP_TZデータ型として指定します。

TIMESTAMP_LTZ

ディメンションの値をTIMESTAMP_LTZデータ型として指定します。

truncation_code

表8-13「ROUNDおよびTRUNC日付ファンクションの日時書式テンプレート」に示す書式モデルを指定するテキスト式。書式モデルは、日時の値をどのように切り捨てるかを示します。

TEMP

ディメンションの値が一時的なもので、現行のセッションのみで保持できることを示します。ディメンションは現行のワークスペース内に定義を持ち、現行のセッションの間のみ値を保持できます。ただし、更新およびコミットすると、ディメンションの定義は保存されます。セッションを終了するか、別のワークスペースに切り替えると、データ値は廃棄されます。ワークスペースを開始する時点では常に、一時ディメンションの値はNAです。

AW workspace

ディメンションを定義する先の、アタッチされたアナリティック・ワークスペースの名前。ディメンションによってディメンション化するオブジェクトはすべて、同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。

SESSION

オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。

使用上の注意

単純なディメンションによりディメンション化される変数のNA値

変数が通常のディメンションによってディメンション化されている場合、Oracle OLAPでは、変数内に、変数のディメンション値の各セットについて1つの配列要素を作成します。配列要素が空の場合は、その要素にNA値が含まれているとみなされます。場合によっては、これが原因でスパースな変数(つまり、配列要素が空である割合が比較的高い変数)になることがあります。スパース性には、次の2つのタイプがあります。

- 制御されたスパース性: 1つ以上のディメンションの範囲にデータがない場合に発生します。たとえば、過去数か月にわたりデータがないmonthによってディメンション化される、新しい変数などです。

- ランダムなスパース性: ディメンション値のある組合せがデータをまったく持たない場合に発生します。たとえば、ある地区では特定の製品のみが販売され、他の製品のデータが存在しない場合があります。他の地区ではそれらの製品とともに他の製品群も販売されている場合があります。

アナリティック・ワークスペースのページ容量に相当する数の配列要素が連続してNA値を持つ場合、Oracle OLAPはそれらのNA値を実際には格納せず、内部で管理します。ただし、アナリティック・ワークスペースのページに正常な値とNA値が混在する場合は、それらすべての値を格納します。変数を1つ以上のコンポジットまたは結合ディメンションでディメンション化することにより、NA値を持つ配列要素の数を減らすことができます。DEFINE COMPOSITEコマンドおよびDEFINE DIMENSION(結合)コマンドを参照してください。

例

例9-81 単純なディメンションの定義

この例では、アナリティック・ワークスペースにディメンションcityを追加します。定義した直後に、そのオブジェクトに説明を追加できます。(CONSIDERおよびLD文を使用して、後で説明を追加することもできます。)ディメンションcityを定義した後、MAINTAIN文で値を追加できます。

次の文

DEFINE city DIMENSION ID
LD List of cities
MAINTAIN city ADD 'Boston' 'Chicago' 'Dallas' 'Seattle'
DESCRIBE city

次の定義が生成されます。

DEFINE city DIMENSION ID
LD List of cities

DEFINE DIMENSION(DWMQY)

DEFINE DIMENSION(DWMQY)コマンドは、値が時間間隔を表すDWMQYディメンション(型がDAY、WEEK、MONTH、QUARTERまたはYEARのディメンション)を定義するコマンドです。DWMQYディメンションを定義した後で、VNF文を使用して、ディメンションの定義に値名書式を追加できます。VNFコマンドは、ディメンション値を入力するときの書式と、それらの値を出力に表示するときの書式を制御します。

注意:
この型のディメンションでは集計は行えないため、時系列の集計が必要な場合は、時間ディメンションをDWMQYディメンションとして定義しないでください。かわりに、時間ディメンションをTEXT型またはNTEXT型の階層ディメンションとして定義します。

構文

DEFINE name DIMENSION dwmqy [TEMP] [AW workspace] [SESSION]

ここで、dwmqyは、ディメンションの期間です。dwmqyの有効な型は、DAY、WEEK、MONTH、QUARTERおよびYEARです。各型は、ディメンションの個々のディメンション値により表される期間の範囲を示します。dwmqyの構文は、型に応じて次のように異なります。

DAY

[multiple] WEEK [BEGINNING phase ] [ ENDING phase ]

[multiple] MONTH [BEGINNING phase ] [ ENDING phase ]

QUARTER [BEGINNING phase ] [ ENDING phase ]

YEAR [BEGINNING phase ] [ ENDING phase ]

パラメータ

name

定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。

DIMENSION

ディメンションを定義するときのオブジェクト型。

multiple

WEEKおよびMONTH型について、複数の週または複数の月にわたる期間を指定します。WEEKキーワードとともに使用する場合、multipleは2から52までのINTEGERです。MONTHキーワードとともに使用する場合、multipleは2、3、4または6です。

BEGINNING phase

ENDING phase

WEEK、MONTH、QUARTERまたはYEARディメンションの開始フェーズまたは終了フェーズを指定します。

- 単一の週では、phaseは曜日名(DAYNAMESオプション内の名前)または日付です。

- 複数の週では、phaseは日付でなければなりません。

- 月、四半期または年では、phaseは、月名(MONTHNAMESオプション内の名前)または日付で表現された月です。

phaseを日付で指定する場合は、DATEデータ型の変数値で有効な任意の入力スタイルを使用し、月、日および年を一重引用符で囲んで指定します。意味があいまいな形式('03 05 97'など)で日付が指定されている場合、その日付はDATEORDERオプションの現行の設定に基づいて解釈されます。

注意:
WEEK型の複数期間のディメンションを定義して、BEGINNINGまたはENDING引数を指定しない場合、DEFINEにより、'31DEC1899'の日付で始まるフェーズが自動で指定されます。

TEMP

ディメンションの値が一時的なもので、現行のセッションのみで保持できることを示します。ディメンションは現行のワークスペース内に定義を持ち、現行のセッションの間のみ値を保持できます。ただし、更新およびコミットすると、ディメンションの定義は保存されます。セッションを終了するか、別のワークスペースに切り替えると、データ値は廃棄されます。ワークスペースを開始する時点では常に、一時ディメンションの値はNAです。

AW workspace

ディメンションを定義する先の、アタッチされたアナリティック・ワークスペースの名前。ディメンションによってディメンション化するオブジェクトはすべて、同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。

SESSION

オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。

使用上の注意

DWMQYディメンション間の暗黙的なリレーション

DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションを2つ以上定義すると、Oracle OLAPでは、ディメンションの値の間に暗黙的なリレーションを自動で定義します。たとえば、MONTH型のディメンションとYEAR型のディメンションを定義すると、特定の年に属するすべてのMONTH値とYEARディメンションの呼応する値とを関連付けるリレーションが、Oracle OLAPによって自動で定義されます。

会計年度カレンダによりデータを編成するためのBEGINNINGまたはENDINGフェーズの使用方法

MONTH、QUARTERおよびYEAR型のディメンションでは、データを会計年度カレンダで編成する場合、BEGINNING phaseまたはENDING phase引数が特に有用です。

MONTHおよびQUARTER型のディメンションに対しフェーズを指定することで、1つの年の最初の期間または最後の期間である期間を識別できます。たとえば、MONTH型のディメンションを、6月を終了フェーズとして定義すると、6月はその年の12番目の月として識別されます。QUARTER型のディメンションで6月を終了フェーズとすると、6月に終了する四半期はその年の4番目の四半期として識別されます。ディメンションに期間コードを含むVNFを指定すると、その年の期間に従ってディメンション値を入力したり、レポートしたりできます。

デフォルトでは、WEEK型のディメンション内の単一の週または複数の週は、土曜日で終了します。BEGINNING phaseまたはENDING phase引数により、各期間が開始または終了する曜日を指定できます。複数の週にわたる期間については、週を期間にグループ化する際の開始日付や終了日付も、このフェーズ引数で制御します。デフォルトでは、複数の週をグループ化する際の開始時点は、1899年12月31日(日曜日)です。

ただし、フェーズ引数は、1つの年の最初の期間としてカウントされる期間は決定しません。WEEK型のディメンションの場合、ある暦年の期間1は常に、その年内に終了する最初の期間です。たとえば、WEEK型のディメンションを、1997年6月7日に終了する4週期間で指定するとします。DEFINEは、この日付から後方または前方に機能し、各週を4週ずつの期間に形成します。1997年では、期間1は1996年12月22日に開始し1997年1月18日に終了する期間となります。

例

例9-82 YEARディメンションの定義

次の文で、6月30日に終了する会計年度の値を保持する、YEAR型のディメンションが定義されます。

DEFINE fyear DIMENSION YEAR ENDING june

ディメンションを定義した後、このディメンションに説明およびVNF(値名書式)を追加できます。ディメンションへ値を追加するには、MAINTAIN文を使用します。

LD Fiscal years ending June 30
VNF 'FY<ff>'
MAINTAIN fyear ADD 'FY97' 'FY00'

例9-83 ENDING句の日付に対するデフォルトの句の使用方法

この例では、BEGINNING phaseまたはENDING phase引数を指定しないでWEEK型の複数期間ディメンションを定義した場合、DEFINEによって、日付'31DEC1899'に始まるフェーズが自動的に指定される様子を示します。次の文を発行するとします。

DEFINE twoweek DIMENSION 2 WEEK
DESCRIBE TWOWEEK

twoweekに対しDESCRIBE文を発行すると、次の出力が生成されます。

DEFINE twoweek DIMENSION 2 WEEK ENDING '13Jan1900'

DEFINE DIMENSION(結合)

DEFINE DIMENSION(結合)コマンドは、結合ディメンションを定義するコマンドです。

概念として、結合ディメンションは次の2つの構造から成り立っていると考えられます。

- ディメンション・オブジェクト自体。ディメンションの値は、2つ以上の他のディメンションの値の組合せ(つまり、結合タプル)であり、Oracle OLAPではこの組合せを使用して、結合ディメンションによってディメンション化されるすべての変数の構造を決定します。

- 結合ディメンション値とそのベース・ディメンション値との間の索引。

コンポジットは、ディメンション値の組合せのリストを使用して変数をディメンション化するために使用できる、もう1つのオブジェクトです。コンポジットと結合ディメンションの主な違いについては、「結合ディメンションとコンポジットの違い」を参照してください。

構文

DEFINE name DIMENSION <dims. . .> index-algorithm  [AW workspace] [SESSION]

ここで、index-algorithmは、Oracle OLAPが、結合ディメンションへの索引を作成する際に使用するアルゴリズムです。index-algorithmの有効な値は次のとおりです。

BTREE

NOHASH

HASH

パラメータ

name

定義する結合ディメンションの名前。この引数の一般情報は、DEFINEコマンドを参照してください。

DIMENSION

結合ディメンションを定義するときのオブジェクト型。

dims

結合ディメンションのベース・ディメンションとする、事前に定義されている1つ以上のディメンション。「変数の格納および文のループ処理におけるディメンションの順序の影響」で説明されているように、最も変化の速いディメンションから最も変化の遅いディメンションという順序でディメンションを指定します。ディメンション・リストは山カッコで囲む必要があります。

通常、結合ディメンションのベース・ディメンションは単純なディメンションですが、別の結合ディメンションを使用することもできます。ただし、dimsの値の1つに単純なディメンションがある場合、dimsには、同じ単純なディメンションをベースの1つとして持つ結合ディメンションまたは連結ディメンションは指定できません。

BTREE

結合値とベース・ディメンション値の関連付けとして、Bツリー索引の作成を指定します。通常は、結合ディメンションの索引アルゴリズムとしてBTREEを指定します。

ヒント:
BTREEまたはNOHASHのいずれを指定するべきかわからない場合は、NOHASHを使用します。これは、NOHASH結合からBTREE結合へはCHGDFN文を使用していつでも変更できる一方、CHGDFN文を使用してBTREE結合からNOHASH結合に変更できるのは、結合がもともとNOHASH結合として定義されたものである場合に限られるためです。

NOHASH

Oracle OLAPでは結合ディメンションの索引を作成しないかわりに、内部構造を使用して、結合値をベース・ディメンション値に関連付けることを指定します。NOHASHでは索引が作成されないため、結合ディメンションに関連付けられた構造の数は減少するため、多くの場合、結合ディメンションの値をロードおよびアクセスする時間が短縮されます。ただし、NOHASHは複雑なアルゴリズムであり、しばしば予期しないパフォーマンスに繋がるため、あまり使用されません。

HASH

(デフォルト、非推奨。)結合値とベース・ディメンション値の関連付けとして、ハッシュ索引の作成を指定します。

ヒント:
HASHはデフォルトですが、通常、結合ディメンションの索引アルゴリズムにはBTREEを指定します。結合ディメンションが3つより多いベース・ディメンションを持つ場合は、パフォーマンスを最高にするために、HASHのかわりにBTREEを使用します。

AW workspace

ディメンションを定義する先の、アタッチされたアナリティック・ワークスペースの名前。ディメンションによってディメンション化するオブジェクトはすべて、同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。

SESSION

オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。

使用上の注意

結合ディメンションとコンポジットの違い

ディメンション値の組合せのリストを使用して変数をディメンション化するには、コンポジットまたは結合ディメンションのいずれかを使用できます。どちらのタイプのオブジェクトを使用するかを決める際は、次の点に注意してください。

- オブジェクトの移入のメンテナンス: 結合ディメンションは、ほとんどの制御を提供します。一方、コンポジットは、使用に際し次のように非常に便利です。

- コンポジットに格納するディメンション値の組合せを、Oracle OLAPが決定する。コンポジットでディメンション化された変数が移入される場合は、Oracle OLAPが自動でコンポジットを移入します。

- コンポジットに格納するディメンション値の組合せを、ユーザーが決定する。他のディメンションを移入およびメンテナンスするのと同じ方法で、MAINTAIN文を使用して、結合ディメンションを明示的に移入およびメンテナンスする必要があります。

- ディメンション操作: ディメンション操作は結合ディメンションに対しては実行できますが、コンポジットにはできませんが、コンポジットのベース・ディメンションにのみディメンション操作を実行できます。たとえば、結合ディメンションにはLIMIT操作を実行できますが、ビューをコンポジット値のサブセットに制限するにはコンポジットのベース・ディメンションを制限する必要があり、さらに、結合ディメンションを使用してリレーションを定義できますが、コンポジットではできません。

コンポジットの詳細は、DEFINE COMPOSITEコマンドを参照してください。

結合ディメンションとベース・ディメンションの関係

結合ディメンションの値はベース・ディメンションと関連付けられています。結合ディメンションによりディメンション化されている変数のデータは、結合値の組合せ、ベース・ディメンションの個々の値、または結合ディメンションのベース・ディメンションのいずれかに関連付けられている他のディメンションの値を使用して指定できます。

ディメンションの値のサブセットの定義

ベース・ディメンションが1つしかない結合ディメンションを定義できますが、これによって、そのディメンションの値のサブセットを作成できます。ベース・ディメンションが1つでも、山カッコで囲む必要があります。

式における結合ディメンション値の使用方法

式において結合ディメンションの値を参照するには、次のガイドラインに従って値を指定します。

- ディメンション値の指定全体を山カッコで囲み、さらに一重引用符で全体を囲みます。各値を個別に一重引用符で囲まないでください。

- ベース・ディメンション値には、大文字と小文字を正しく使用します。

- ディメンション値の指定に空白が埋め込まれたテキスト値が含まれる場合、それらのディメンション値をカンマで区切る必要があります。

たとえば、item.orgが、ベース・ディメンションitemおよびorgを持つ結合ディメンションである場合、item.orgの値を参照するには次の書式を使用します。

'<Expenses, Direct Sales>'

例

例9-84 結合ディメンションの定義

単純なディメンションcity、stateおよびregionを定義および移入し、それらに次の値があるとします。

CITY             STATE           REGION
---------       ----------       ------
Princeton       New Jersey       East
Newark          New Jersey       Central
Patterson       New York
New York        Illinois
Chicago         Indiana

cityandstateという結合ディメンションを定義して、それに値を追加するには、次のOLAP DML文を使用します。

DEFINE cityandstate DIMENSION <city state>
MAINTAIN cityandstate add <'Princeton' 'New Jersey'>
MAINTAIN cityandstate add <'Newark' 'New Jersey'>
MAINTAIN cityandstate add <'Patterson' 'New Jersey'>
MAINTAIN cityandstate add <'New York' 'New York'>
MAINTAIN cityandstate add <'Chicago' 'Illinois'>
MAINTAIN cityandstate add <'Princeton' 'Indiana'>

DEFINE DIMENSION CONCAT

DEFINE DIMENSION CONCATコマンドは、連結ディメンションを定義するコマンドです。連結ディメンションは、重複する値または異なるデータ型を持つ一連のベース・ディメンションを1つのディメンションにグループ化するディメンションです。

重複するデータ値がある場合は、非一意の連結ディメンションを作成します。たとえば、「New York」が都市レベルと州レベルの両方の値であるような場合、地理階層に対し非一意のディメンションを作成します。すべてのベース・ディメンションのデータ値がすべて一意である場合は、一意の連結ディメンションを作成できます。

ヒント:
連結ディメンションの値を指定する方法は、連結ディメンションが一意の連結ディメンションか非一意の連結ディメンションかによって異なります。詳細は、「CONCATディメンションの値の指定」を参照してください。

構文

DEFINE name DIMENSION CONCAT(basedimlist. . .)[UNIQUE] [TEMP] [AW workspace] [SESSION]

パラメータ

name

定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。

DIMENSION CONCAT

連結ディメンションを定義するときのオブジェクト型。

basedimlist

連結ディメンションをベース・ディメンションとする、事前に定義されている1つ以上のディメンション。「変数の格納および文のループ処理におけるディメンションの順序の影響」で説明されているように、最も変化の速いディメンションから最も変化の遅いディメンションという順序でディメンションを指定します。ディメンション・リストはカッコで囲む必要があります。

ベース・ディメンションとして使用できるディメンションの型は、定義する連結ディメンションが一意か非一意かによって異なります。

- 非一意の連結ディメンションを定義する場合は、ベース・ディメンションとして、任意のデータ型の単純なディメンション、結合ディメンションまたは別の連結ディメンションを指定できます。

- 一意の連結ディメンションを定義する場合、すべてのベース・ディメンションのデータ値が一意であり、ベース・ディメンションのいずれにおいても重複していないという条件を満たしていれば、ベース・ディメンションとしてTEXT型またはID型の単純なディメンション、または別の一意の連結ディメンションを指定できます。

連結ディメンションのベース・ディメンションとしてコンポジットは指定できません。

単純なディメンションおよび結合ディメンションは、連結ディメンションの最下位のコンポーネントです。連結ディメンションを定義する際に連結ディメンションをベース・ディメンションとして指定すると、内部連結のベース・ディメンションは外部連結のコンポーネントのディメンションになります。

連結ディメンションのコンポーネントのディメンションでは、同一のディメンションは1回しか使用できません。ただし、連結では、結合ディメンションは1つの分割できない構成単位であり、Oracle OLAPは連結の定義において結合のベース・ディメンションを検討しません。したがって、ある単純なディメンションが結合のベース・ディメンションであり、その結合とその同じ単純なディメンションが連結ディメンションのベース・ディメンション(またはコンポーネント)であることが可能です。

たとえば、次の定義は許可されます。

DEFINE conjointdim.a DIMENSION <simpledim.b, simpledim.c>
DEFINE conjointdim.b DIMENSION <simpledim.a, simpledim.b>
DEFINE conjointdim.c DIMENSION <simpledim.a, conjointdim.a>
DEFINE concatdim.a DIMENSION CONCAT (simpledim.a, conjointdim.a)
DEFINE concatdim.b DIMENSION CONCAT (simpledim.a, conjointdim.b)
DEFINE concatdim.c DIMENSION CONCAT (simpledim.b, conjointdim.b)
DEFINE concatdim.d DIMENSION CONCAT (simpledim.a, concatdim.c)

concatdim.aの定義では、ベース・ディメンションはsimpledim.aとconjointdim.aです。concatdim.dの定義では、ベース・ディメンションはsimpledim.aとconcatdim.cです。concatdim.dのコンポーネントのディメンションは、simpledim.a、simpledim.bおよびconjointdim.bです。simpledim.aおよびsimpledim.bはconjointdim.bのベース・ディメンションですが、結合のベース・ディメンションは連結のコンポーネントのディメンションではないため、コンポーネントのディメンションとしては1回しか使用されません。

しかし、次の定義は、同じ単純なディメンションが、concatdim.eのベース・ディメンションであるとともに、(concatdim.bのベース・ディメンションであることから)concatdim.eのコンポーネントでもあるため、許可されません。

DEFINE concatdim.e DIMENSION CONCAT (simpledim.a, concatdim.b)

注意:
basedimlist引数内の単純なディメンション、およびbasedimlist内の結合ディメンションまたは連結ディメンションのベース・ディメンションである単純なディメンションは、INTEGERデータ型を持つことはできません。

UNIQUE

ベース・ディメンションのテキスト値を一意とすることを指定します。このキーワードを指定した場合、basedimlistにリストされるディメンションは、テキスト型またはID型の単純なディメンション、または一意の連結ディメンションのいずれかである必要があります。

TEMP

ディメンションの値が一時的なもので、現行のセッションのみで保持できることを示します。ディメンションは現行のワークスペース内に定義を持ち、現行のセッションの間のみ値を保持できます。ただし、更新およびコミットすると、ディメンションの定義は保存されます。セッションを終了するか、別のワークスペースに切り替えると、データ値は廃棄されます。ワークスペースを開始する時点では常に、一時ディメンションの値はNAです。

AW workspace

ディメンションを定義する先の、アタッチされたアナリティック・ワークスペースの名前。ディメンションによってディメンション化するオブジェクトはすべて、同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。

SESSION

オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。

例

例9-85 連結ディメンションの定義

単純なディメンションcity、stateおよびregionを定義および移入し、それらに次の値があるとします。

CITY             STATE           REGION
---------       ----------       ------
Princeton       New Jersey       East
Newark          New Jersey       Central
Patterson       New York
New York        Illinois
Chicago         Indiana

次のOLAP DML文を使用して、これらのディメンションに基づく連結ディメンションを定義します。

DEFINE geog DIMENSION CONCAT(region cityandstate)

geogの値は次のとおりです。

<REGION: East>
<REGION: Central>
<CITYANDSTATE: <Princeton New Jersey>>
<CITYANDSTATE: <Newark New Jersey>>
<CITYANDSTATE: <Patterson New Jersey>>
<CITYANDSTATE: <New York New York>>
<CITYANDSTATE: <Chicago Illinois>>
<CITYANDSTATE: <Princeton Indiana>>

DEFINE DIMENSION ALIASOF

DEFINE DIMENSION ALIASOFコマンドは、単純なディメンションのディメンション別名を定義するコマンドです。別名ディメンションは、そのベース・ディメンションと同じ型および値を持ちます。通常、ある変数を同じディメンションで2回ディメンション化する必要がある場合に、別名ディメンションを定義します。

また、LIMIT文を使用して別名ディメンションを制限し、別名ディメンションを使用して変数やリレーションを定義できます。ただし、別名ディメンションは直接的にメンテナンスできませんが、かわりに、MAINTAINを使用してそのベース・ディメンションをメンテナンスします。

構文

DEFINE name DIMENSION ALIASOF dimension [TEMP] [AW workspace] [SESSION]

パラメータ

name

定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。

DIMENSION ALIASOF

ディメンションを定義するときのオブジェクト型。定義するディメンションが別のディメンションの別名であることを示します。

dimension

別名を定義する単純なディメンションの名前。このディメンションとして、連結または結合ディメンション、コンポジット、サロゲートは指定できません。

TEMP

ディメンションの値が一時的なもので、現行のセッションのみで保持できることを示します。ディメンションは現行のワークスペース内に定義を持ち、現行のセッションの間のみ値を保持できます。ただし、更新およびコミットすると、ディメンションの定義は保存されます。セッションを終了するか、別のワークスペースに切り替えると、データ値は廃棄されます。ワークスペースを開始する時点では常に、一時ディメンションの値はNAです。

AW workspace

ディメンションを定義する先の、アタッチされたアナリティック・ワークスペースの名前。ディメンションによってディメンション化するオブジェクトはすべて、同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。

SESSION

オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは現行のセッションの終了時に廃棄されます。

例

例9-86 別名ディメンションの定義

部門内に従業員が参加する複数のプロジェクトがあり、ある従業員が1つのプロジェクトのリーダーであると同時に別のプロジェクトの参加者でもあるとします。また、各従業員がリーダーとしてまたは参加者としてプロジェクトに参加した時間をそれぞれ追跡するとします。この情報を追跡するために、追跡の単位とする時間(この例ではyear)、projectおよび従業員についての2つのディメンション(参加者としての従業員のためのemployeeというディメンションと、リーダーとしての従業員のためのleaderというディメンション)でディメンション化する変数を設計します。この構造は次の定義でサポートされます。

DEFINE year DIMENSION TEXT
DEFINE project DIMENSION TEXT
DEFINE employee DIMENSION TEXT
DEFINE leader DIMENSION ALIASOF employee
DEFINE hours VARIABLE INTEGER <year project employee leader>

次の文により、すべてのディメンションが移入されます。

MAINTAIN year ADD '2001' '2002' '2003'
MAINTAIN project ADD 'projA' 'projB'
MAINTAIN employee add 'Adams' 'Baker' 'Charles'

別名ディメンション(つまり、leader)を明示的に移入する必要がないことに注意してください。employeeディメンションを移入すると、その別名ディメンションであるleaderも移入されます。

EMPLOYEE
--------------
Adams
Baker
Charles

LEADER
--------------
Adams
Baker
Charles

別名を制限せずにあるディメンションを制限したり、ディメンションを制限せずにその別名を制限することができます。たとえば、次の文を発行して、year2001におけるproject ProjAについてのemployeeをAdamsに制限すると、レポートにはAdamsが参加するプロジェクトのすべてのリーダーが表示されます。

LIMIT year TO '2001'
LIMIT employee TO 'Adams'
LIMIT project TO 'projA'
REPORT DOWN leader ACROSS employee: hours

PROJECT: projA
YEAR: 2001
--HOURS---
-EMPLOYEE-
LEADER           Adams
-------------- ----------
Adams                   1
Baker                   2
Charles                 1

一方、year2001におけるproject ProjAについてのleaderをAdamsに制限すると、レポートにはAdamsがリーダーとなるプロジェクトのすべての従業員が表示されます。

LIMIT employee TO ALL
LIMIT leader TO 'Adams'
LIMIT project TO 'projA'
REPORT DOWN leader ACROSS employee: hours

PROJECT: projA
YEAR: 2001
-------------HOURS--------------
------------EMPLOYEE------------
LEADER           Adams      Baker     Charles
-------------- ---------- ---------- ----------
Adams                   1          3          3

DEFINE FORMULA

DEFINEコマンドとともにFORMULAキーワードを使用すると、アナリティック・ワークスペースに新しい計算式オブジェクトが追加されます。計算式を定義することにより、式を保存します。計算式は、繰り返し使用する式のかわりに使用できます。計算式の名前は、その式のテキストのかわりです。Oracle OLAPでは、計算式のデータは変数に保存せず、要求されるたびに、実行時ベースで計算を行います。

関連項目:
「OLAP DML計算式」

構文

DEFINE name FORMULA {expression | [ datatype ][<dimensions...>]} [AW workspace] [SESSION]

パラメータ

name

定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。

FORMULA

計算式を定義するときのオブジェクト型。

expression

計算式を使用したときに値を生成するために実行される計算。定数または変数の名前を含めた有効な式を任意に指定できます(第2章「OLAP DML式」を参照)。

EQ文を使用して式を定義する際、または式を定義した後で、計算式に対しその式を指定できます。式を指定せずに計算式を定義すると、計算式の実行時にNA値が指定されたデータ型で返されます。

注意:
Oracle OLAPでは、計算式内のテキストを自動で大文字に変換しません。

datatype

expressionの値を指定しないときに計算式に対して指定するデータ型。変数に適用可能な任意のデータ型を使用できます。値を指定しない場合、データ型は実行時に決まります。

計算式の定義にexpressionを含めると、expressionを使用して定義される計算式のデータ型がDEFINEにより自動的に決まります。EQ文を使用して後で式を追加する場合、その式のデータ型はここで指定するデータ型と一致する必要があります。一致しない場合、DEFINEによって、出力が指定されたデータ型に変換されます。

dimensions

計算式のディメンション。リストを山カッコで囲みます。dimensions引数はオプションです。計算式が単一セルの値の場合、ディメンションは指定しません。また、定義に式を含める場合にも、値を指定しません。ディメンションはDEFINEにより自動で決定されます。

ただし、定義に式を含めない場合は、ディメンションを指定する必要があります。EQ文を使用して後で式を追加する場合、その式が計算式の定義と同じディメンションを持っている必要があります。同じディメンションを持たない場合、DEFINEによって、指定されたディメンションが出力に強制的に追加されます。

制限事項:
コンポジットでディメンション化する計算式は定義できません。

AW workspace

計算式を定義する先の、アタッチされたワークスペースの名前。計算式がディメンション化されている場合、そのディメンションと同じワークスペースに定義する必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。

SESSION

オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。

使用上の注意

計算式で使用されているオブジェクトの特性を変更することによる影響

計算式で使用されているオブジェクトの名前、データ型またはディメンションを変更した場合、計算式は自動的には更新されません。参照しているオブジェクトが削除されたか、(計算式に対し)適切でないデータ型に変更されていると、その計算式の実行によりエラーが発生します。

複雑な式および計算の保存

非常に複雑な計算を定義する場合、RETURN文を使用して値を返すプログラムを定義できます。その後、式または計算式を使用する箇所で、そのプログラムをファンクションとして使用できます。

例

例9-87 計算式の定義

この例では、sales.diffという計算式をアナリティック・ワークスペースに追加します。この計算式は、現行の年と前の年について売上総額の差異を比率で計算するものです。

次の文

DEFINE sales.diff FORMULA LAGPCT(TOTAL(actual year) 1 year)
DESCRIBE sales.diff

次の定義が生成されます。

DEFINE sales.diff FORMULA DECIMAL <year>
EQ lagpct(TOTAL(actual year) 1 year)

DEFINE MODEL

DEFINEコマンドとともにMODELキーワードを使用すると、アナリティック・ワークスペースに新しいモデル・オブジェクトが追加されます。モデルとは、相互に関連した一連の方程式です。方程式の計算は、変数またはディメンション値のいずれかに基づきます。計算の結果を変数に直接代入するか、データ計算の対象となるディメンション値を指定できます。たとえば、財務アプリケーションでは、すべての方程式について明細項目ディメンションの値を基礎とし、経費合計や純益などの明細項目についてのデータを計算できます。

注意:
モデルを定義することでアナリティック・ワークスペースに作成されるのは、モデル・オブジェクトのみです。MODELで説明されているように、モデルの仕様もコーディングする必要があります。

構文

DEFINE name MODEL [AW workspace] [SESSION]

パラメータ

name

定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。

MODEL

モデルを定義するときのオブジェクト型。

AW workspace

オブジェクトを定義する先の、アタッチされたワークスペースの名前。この引数の詳細は、DEFINEコマンドを参照してください。

SESSION

オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。

例

例9-88 単純なモデルの定義

この例では、損益計算書の明細項目を計算するincome.calcという単純なモデルを示します。モデルの方程式は、demoワークスペースのlineディメンションを基礎とします。まず、モデルを定義して、LDを追加します。

DEFINE income.calc MODEL
LD Model for calculating Income Statement items

その後、MODEL文を使用して、モデルの仕様を入力します。この例では、次のモデル説明に示す行のようなモデル明細を入力できます。

DEFINE income.calc MODEL
LD Model for calculating Income Statement items
MODEL
dimension line
net.income = opr.income - taxes
opr.income = gross.margin - (marketing+selling+r.d)
gross.margin = revenue - cogs
END

actual変数についてモデルを解決するには、入力明細項目(Revenue、Cogs、Marketing、Selling、R.DおよびTaxes)のactualにデータを入力します。その後、次の文を実行します。

income.calc actual

DEFINE PARTITION TEMPLATE

DEFINEコマンドとともにPARTITION TEMPLATEキーワードを使用すると、アナリティック・ワークスペースに新しいパーティション・テンプレート・オブジェクトが追加されます。パーティション・テンプレートは、パーティション変数のパーティション仕様です。パーティション変数は、アナリティック・ワークスペースであるLOBのリレーショナル表に複数行として格納され、各パーティションが表の1行になります。パーティション変数とパーティション化されていない変数は、どちらもDEFINE VARIABLE文を使用して定義します。パーティション変数を定義するには、まず、パーティション・テンプレート・オブジェクトを定義する必要があります。

構文

DEFINE name PARTITION TEMPLATE <dimlist>  PARTITION BY

{RANGE|LIST} (dims_partitioned_by)  ([partition_definition_statement...]) [AW workspace]

ここで、partition_definition_statementはパーティションを定義する文です。RANGEとLISTのどちらを指定するかによって、構文は異なります。

- RANGEの場合:
PARTITION partition-name VALUES LESS THAN const-exp <partition-dimlist>

- LISTの場合:
PARTITION partition-name VALUES ([valuelist)] <partition-dimlist>

パラメータ

name

定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。

dimlist

パーティション化する変数のすべての論理ディメンションのリスト。ディメンションの名前は、左右を1組の山カッコ(< >)で囲む必要があります。ディメンションは、パーティション・テンプレートの定義に含める前に定義しておく必要があります。

dims_partitioned_by

実際に変数のパーティションを指定する、dimlistにより指定されたディメンションのサブセット。レンジ・パーティション化およびリスト・パーティション化(つまり、RANGEまたはLISTキーワードのいずれかを指定する場合)では、dims_partitioned_byには1つのディメンションしか指定できません。INTEGERディメンションに対しては、変数をパーティション化できません。

PARTITION partition-name

パーティションの名前。

VALUES LESS THAN

比較値によってRANGEパーティションを指定することを示します。

constant-exp

dims_partitioned_byに対し指定されたディメンションのデータ型と同じデータ型を持つ定数式。

partition-dimlist

パーティション・テンプレート・オブジェクトの、すべてのディメンションのリスト(ディメンションはコンポジットのメンバーである場合もあります)。ディメンションの名前は、左右を1組の山カッコ(< >)で囲む必要があります。この引数を使用して、partition-nameに対応するパーティションをディメンション化するために使用するコンポジット(ある場合)を指定します。値を指定しない場合は、パーティションは、パーティション・テンプレート・オブジェクトのすべてのディメンションによって稠密にディメンション化されます。

VALUES

値の指定によってLISTパーティションを指定することを示します。

valuelist

カンマで区切った、ディメンション値のリスト。テキスト値は、一重引用符で囲む必要があります('mytext'など)。結合の値を指定するには、ベース・ディメンション値をカンマで区切り、1組の山カッコで囲んで指定します(<'Value1', 'Value2'>など)。非一意の連結ディメンションの値を指定するには、ベース・ディメンション値をコロンで区切り、1組の山カッコで囲んで指定します(<'Value1': 'Value2'>など)。

ヒント:
値セット・オブジェクトを使用して値を指定する必要がある場合は、valuelistに値を指定しないでください。かわりに、パーティション・テンプレート定義からvaluelistを省き、MAINTAIN ADD TO PARTITION文を使用してパーティションのための値を指定します。

例

例9-101「パーティションを持つ変数の定義」を参照してください。

DEFINE PROGRAM

DEFINEコマンドとともにPROGRAMキーワードを使用すると、アナリティック・ワークスペースに新しいOLAP DMLプログラム・オブジェクトが追加されます。OLAP DMLプログラムは、一部のワークスペース管理または分析タスクの完了に役立つOLAP DML文のコレクションです。プログラムを定義することでアナリティック・ワークスペースに作成されるのは、プログラム・オブジェクトのみです。プログラムの実際の行もコーディングする必要があります。

関連項目:
「OLAP DMLプログラムの作成」

構文

DEFINE name PROGRAM [datatype|dimension] [AW workspace] [SESSION]

パラメータ

name

定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。

PROGRAM

プログラムを定義するときのオブジェクト型。

datatype

ファンクションとしてコールされた際にプログラムが返す値のデータ型。変数に適用可能な任意のデータ型を使用できます。

dimension

ディメンションの名前で、ファンクションとしてコールされた際、プログラムはこのディメンションの値を返します。戻り値はディメンションの単一の値で、位置(INTEGER)ではありません。ディメンションは、プログラムと同じワークスペースに定義されている必要があります。

AW workspace

プログラムを定義する先の、アタッチされたワークスペースの名前。プログラムがディメンションを返す場合、プログラムはディメンションと同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。

SESSION

オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。

使用上の注意

値を返す場合

プログラムから値を返す必要がある場合は、プログラム内でRETURN文を使用します。RETURN文への引数は、返す値を指定する式です。この式が、宣言されているデータ型またはディメンションと一致しない場合、値は宣言されているデータ型またはディメンション値に変換されます(可能な場合)。

プログラムの定義でデータ型またはディメンションを指定しない場合、戻り値はワークシート・データとして処理され、すべての戻り値がOracle OLAPによってコール側のコンテキストで必要とされるデータ型に変換されるため、予期しない結果になる場合があります。

プログラムから値を返すには、プログラムをファンクションとしてコールする必要があります。つまり、文の中で式として使用する必要があります。次の例では、プログラムisrecentはファンクションとして扱われます。これは、REPORTコマンドの引数です。

REPORT isrecent(actual)

プログラムがディメンションの値を返す場合、プログラムはLISTBYファンクションの出力に含まれ、そのディメンションに対するOBJ(ISBY)はTRUEです。

ユーザー定義のファンクションとしてのプログラムの詳細は、ARGUMENT、CALLおよびRETURNコマンドを参照してください。

例

例9-89 テスト結果に基づくプログラム・フロー

salesevalプログラムは、ある月の売上総額がその月の予定売上高の合計を超えているかどうかをテストするプログラムです。このプログラムでは、テストの結果に基づいて異なる文を実行します。

DEFINE SALESEVAL PROGRAM
PROGRAM
ARGUMENT onemonth MONTH
VARIABLE excess DECIMAL
ALLSTAT
LIMIT month TO onemonth
IF TOTAL(sales, month) GT TOTAL(sales.plan, month)
THEN DO
excess = (TOTAL(sales, month) -
- TOTAL(sales.plan, month)) -
/ TOTAL(sales.plan, month) * 100
SHOW JOINCHARS('Sales exceeded plan by ' excess '%.')
DOEND
ELSE SHOW JOINCHARS('We\'re not meeting plan. ' -
'Let\'s get working!')
REPORT DOWN product W 10 ACROSS district: sales - sales.plan
END

ある月の売上総額がその月の予定売上高の合計を超えている場合は、THEN文の行が実行されます。プログラムは、実際の売上高が予定売上高を超えている割合を計算し、結果をexcessという数値の変数に格納します。その後、結果を現行の出力ファイルに送信します。出力では、JOINCHARSファンクションによって、計算された式excessとテキスト式「Sales exceeded plan by」が結び付けられます。

ある月の売上総額がその月の予定売上高を超えていない場合は、ELSE文の行が実行され、別のメッセージが生成されます。

THEN文またはELSE文の行が実行された後、制御はプログラム内の次の行に移動し、予定を超えた売上のレポートが生成されます。

DEFINE RELATION

DEFINEコマンドとともにRELATIONキーワードを使用すると、アナリティック・ワークスペースに新しいリレーション・オブジェクトが追加されます。リレーションは、2つ以上のディメンションの値間における対応関係を表します。変数のようにディメンションを持つことができますが、リレーションの値は関連ディメンションからの値である必要があります。

注意:
アナリティック・ワークスペースにリレーションを定義しても、アナリティック・ワークスペースにはリレーションの定義のみが追加され、リレーション自体は移入されません。OLAP DMLを使用してリレーションを移入するには、OLAP DMLのSQL、FILEREAD、SETまたはSET1文を発行します。

構文

DEFINE name RELATION related-dim [<dimensions...>] [TEMP] [AW workspace] [SESSION]

パラメータ

name

定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。

RELATION

リレーションを定義するときのオブジェクト型。

related-dim

1つ以上のdimensionsが関連付けられているディメンションを指定します。通常、リレーションは、たとえば都市が各地域に属しているなど、2つのディメンション間の関係についての情報を保存するために使用されます。

定義では、通常、値がより少ないほうのディメンションを関連ディメンションとして指定します(たとえば、地域)。そして、値が多いほうのディメンションを、リレーションのディメンションとして指定します(たとえば、都市)。

<dimensions...>

リレーションのディメンションの名前。ディメンションの名前は、左右を1組の山カッコ(< >)で囲む必要があります。ディメンションは、リレーションの定義に含める前に定義しておく必要があります。ディメンション・リストにコンポジットは含められません。

制限事項:
Oracle OLAPでは、リレーションのディメンションとしてのコンポジットの使用はサポートしていません。コンポジットを定義しないでください。

ヒント:
同一ディメンション間の2つのリレーションを定義するには、RELATIONコマンドを使用してデフォルトのリレーションを指定します。

TEMP

リレーションの値が一時的なものであることを示します。リレーションは現行のワークスペース内に定義され、現行のセッションの間のみ値を保持できます。ただし、ワークスペースを更新およびコミットすると、リレーションの定義は保存されます。セッションを終了するか、別のワークスペースに切り替えると、データ値は廃棄されます。ワークスペースを開始する時点では常に、一時リレーションの値はNAです。

AW workspace

リレーションを定義する先の、アタッチされたワークスペースの名前。リレーションは、そのディメンションと同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。

SESSION

オブジェクトを現行のセッションでのみ存在させることを指定します。セッションの終了時に、オブジェクトは廃棄されます。SESSIONキーワードで指定される動作は、TEMPキーワードで指定される動作とは異なり、TEMPキーワードでは値は一時的ですが、オブジェクト定義は作成したワークスペースに保存されます。

例

例9-90 リレーションの作成および移入と、そのリレーションによる合計

次の例では、divisionとproductの間のリレーションを定義し、リレーションの値を格納して、divisionごとにunitsを合計します(unitsはproductによりディメンション化されています)。次の文により、div.prodリレーションを定義します。

DEFINE div.prod RELATION division <product>

次の文により、divisionの値をdiv.prodに格納します。

LIMIT product TO 'Tents' 'Canoes'
div.prod = 'Camping'
LIMIT product TO 'Racquets'
div.prod = 'Sporting'
LIMIT product TO 'Sportswear' 'Footwear'
div.prod = 'Clothing'

REPORT文を使用して、div.prodに格納された値を参照できます。

report div.prod

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

PRODUCT        DIV.PROD
------------- ----------
Tents         Camping
Canoes        Camping
Racquets      Sporting
Sportswear    Clothing
Footwear      Clothing

データがproductによりディメンション化されているにもかかわらず、div.prodリレーションを使用することでレポートに部門合計を表示できます。

REPORT TOTAL(units division)

DEFINE SURROGATE

DEFINEコマンドとともにSURROGATEキーワードを使用すると、アナリティック・ワークスペースに新しいディメンション・サロゲート・オブジェクトが追加されます。サロゲートは、ディメンションの値の代替セットを提供する。サロゲートは、モデル内のディメンションではなく、LIMITコマンド、修飾データ参照、または文(FILEREAD、FILEVIEW、SQL FETCHおよびSQL IMPORTなど)によるデータのロードにおけるディメンションで使用します。

注意:
アナリティック・ワークスペースにサロゲートを定義しても、アナリティック・ワークスペースにはディメンション・サロゲートの定義のみが追加され、サロゲート自体は移入されません。OLAP DMLを使用してサロゲートを移入するには、OLAP DMLのSQL、FILEREAD、SETまたはSET1文を発行します。

構文

DEFINE name SURROGATE targetname type [AW workspace] [SESSION]

ここで、typeの構文は次のとおりです。

[TEXT|NTEXT] [WIDTH n]|ID|INTEGER|NUMBER (precision[, scale] | datatime-datatype)

パラメータ

name

定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。

SURROGATE

ディメンション・サロゲートを定義するときのオブジェクト型。

targetname

サロゲートを作成するディメンションの名前。ターゲットを決める際の注意点については、「サロゲートの使用に関する制限」を参照してください。

TEXT

NTEXT

ID

テキスト値のあるディメンション・サロゲートのデータ型。ディメンション・サロゲートの値がすべて8シングルバイト文字またはそれ以下の場合、IDデータ型を指定します。1つ以上のディメンション値が8シングルバイトを超える文字の場合、TEXTまたはNTEXTデータ型を指定する必要があります。使いやすさと効率を向上させるために、可能な場合は常にディメンションにはIDデータ型を指定します。

WIDTH n

TEXTまたはNTEXTディメンション・サロゲートでの、オブジェクトの各値の格納の幅(バイト単位)。幅の有効な値は1から4000までです。特定のディメンション・サロゲートの値が同じようなサイズであることがわかっている場合にのみ、固定幅を指定します。指定された幅を超える値は、切り捨てられます。

INTEGER

ディメンション内での値の順序位置(1、2など)を示す値を持つディメンション・サロゲートのデータ型。NUMBER型ディメンションにINTEGER型ディメンション・サロゲートを作成することで、ディメンション値をディメンションの値ではなく位置で指定できるようになります。INTEGER型ディメンション・サロゲートを定義すると、ディメンション内の各位置のサロゲートに自動でINTEGER値が割り当てられます。

NUMBER

ディメンション・サロゲートをNUMBERデータ型として指定します。詳細は、「数値データ型」を参照してください。

precision

NUMBER型ディメンション・サロゲートの値の合計文字数を指定します。

scale

NUMBER型のディメンション・サロゲートの小数点以下の文字数を指定します。

datetime_datatype

日時データ型(つまり、DATETIME、TIMESTAMP、TIMESTAMP_TZまたはTIMESTAMP-LTZ)を指定します。詳細は、「日時データ型と期間データ型」を参照してください。

AW workspace

ディメンション・サロゲートを定義する先の、アタッチされたワークスペースの名前。サロゲートを定義するディメンションは、同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。

SESSION

オブジェクトを現行のセッションでのみ存在させることを指定します。オブジェクトは、現行のセッションの終了時に廃棄されます。このキーワードは、targetnameディメンションの定義にSESSIONが含まれている場合に使用してください。

使用上の注意

サロゲートの使用に関する制限

サロゲートのターゲットを決める際は、次の制限を考慮してください。

- DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションのサロゲートまたはコンポジットのサロゲートは作成できません。

- 結合のサロゲートを作成すると、その結合はコンポジットに変換できません。

連結ディメンション、計算式、プログラム、リレーション、値セットまたは変数を定義する場合は、ディメンション・サロゲートをディメンションまたは関連ディメンションの引数としては指定できません。また、データをロードする際、ディメンション・サロゲートを使用して新しいディメンション値は作成できません。

例

例9-91 INTEGER型ディメンション・サロゲートの作成

次の文で、store_idディメンションのINTEGER型ディメンション・サロゲートを作成します。

DEFINE storepos SURROGATE store_id INTEGER

例9-92 NUMBER型ディメンション・サロゲートの作成

次の文で、productディメンションのNUMBER型ディメンション・サロゲートを作成しますが、このディメンションは、製品名を値として持つTEXT型ディメンションです。NUMBERキーワードへのprecision引数でprodnumの値を7文字以下として指定し、scale引数で小数点の右側を3文字以下として指定しています。

DEFINE prodnum SURROGATE product NUMBER(7, 3)

次の文により、prodnumの最初の値を1083.375に設定します。

prodnum(product 1) = 1083.375

DEFINE VALUESET

DEFINEコマンドとともにVALUESETキーワードを使用すると、アナリティック・ワークスペースに新しい値セット・オブジェクトが追加されます。値セットは、1つまたは複数のディメンションに対するディメンション値のリストです。値セットを使用すると、複数のセッションにまたがってディメンション・ステータス・リストを保存できます。

注意:
値セットを定義すると、アナリティック・ワークスペースに値セットの定義が追加され、その値はすべてNULL(NA)に設定されます。値セットに値を割り当てるには、LIMITコマンドを使用します。また、値セットの操作には、STATUS文およびSTATFIRST、INSTAT、VALUESの各ファンクションを使用できます。

構文

DEFINE name VALUESET dimension [<dims...>] [NOORDER] [TEMP] [AW workspace] [SESSION]

パラメータ

name

定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。

VALUESET

値セットを定義するときのオブジェクト型。

dimension

値セットに保存する値が格納されている、事前定義されたディメンションの名前。

dims

多次元の値セットを定義する際の、当該値セットのディメンション化に使用する事前定義済ディメンションの名前。

NOORDER

ディメンション化された値セット(つまり、dimsの1つ以上の値を指定する値セット)では、Oracle OLAPで値セットを圧縮ビットマップとして格納することを指定します。このキーワードを指定すると、元のステータスの順序は失われます。

TEMP

値セットの値が一時的なものであることを示します。値セットは現行のワークスペース内に定義を持ち、現行のセッションの間のみ値を保持できます。ただし、更新およびコミットすると、値セットの定義は保存されます。セッションを終了するか、別のワークスペースに切り替えると、値は廃棄されます。ワークスペースを開始する時点では常に、一時値セットの値はNULLです。

AW workspace

値セットを定義する先の、アタッチされたワークスペースの名前。値セットは、そのディメンションと同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。

SESSION

オブジェクトを現行のセッションでのみ存在させることを指定します。セッションの終了時に、オブジェクトは廃棄されます。SESSIONで指定される動作は、TEMPキーワードで指定される動作とは異なり、TEMPキーワードでは値は一時的ですが、オブジェクト定義は作成したワークスペースに保存されます。

例

例9-93 値セットの作成と値セットへの値の割当て

この例では、デモンストレーション・ワークスペースにlinesetという値セットを追加します。lineset値セットはlineによりディメンション化されており、そのためlineディメンションの現行の値で制限できます。LD文で、オブジェクトに説明を追加します。

次の各文は、まずlineディメンションを制限して値をステータスに表示します。次に、値セットを定義し、その値セットをlineディメンションの現在のステータスにある値に制限して、linesetという値セットを作成します。最後に、linesetの値を表示します。

LIMIT line TO FIRST 2
STATUS line

The current status of LINE is:
REVENUE, COGS

" Define the valueset and specify a long description for it

DEFINE lineset VALUESET line
LD Valueset for LINE dimension values
" Assign the values that are currently in status for line
" as the values of valueset
LIMIT lineset TO line
UPDATE

SHOW lineset

Revenue
Cogs

例9-94 多次元の値セットの作成と値セットへの値の割当て

アナリティック・ワークスペースに、次の定義を持つ変数およびディメンションがあるとします。

DEFINE geography DIMENSION TEXT
DEFINE product DIMENSION TEXT
DEFINE sales VARIABLE DECIMAL <geography product>
DEFINE salestax VARIABLE DECIMAL <geography>

また、その同じアナリティック・ワークスペースに、ワークスペース内の変数およびディメンションの名前を値とする、次のようなディメンションがあるとします。

DEFINE all_variables DIMENSION TEXT
MAINTAIN all_variables ADD 'sales' 'salestax'
DEFINE all_dims DIMENSION TEXTMAINTAIN all_dims ADD 'geography' 'product'

次の文により、all_variablesおよびall_dimsの値のための値セットが作成され移入された後、その値セットの値がレポートされます。

DEFINE variables_dims VALUESET all_dims <all_variables>
" Assign all values of all_dims and all_variables to the valueset
LIMIT variables_dims TO ALL
REPORT variables_dims

ALL_VARIABLES        VARIABLES_DIMS
---------------- ------------------------------
sales            geography
product
salestax         geography
product

それらを使用する変数と関連付けられた正しいディメンションを持つ、多次元の値セットを作成するには、QDRを使用してall_variablesのsalestax値のためのall_dims値を制限する、次の文を発行します。

LIMIT variables_dims(all_variables  'salestax') TO 'geography'
REPORT variables_dims

ALL_VARIABLES        VARIABLES_DIMS
---------------- ------------------------------
sales            geography
product
salestax         geography

DEFINE VARIABLE

DEFINEコマンドとともにVARIABLEキーワードを使用すると、アナリティック・ワークスペースに新しい変数オブジェクトが追加されます。変数には、数値、テキスト、ブールまたは日付のいずれか1つの型のデータが保存されます。変数のデータ型の他に、変数について作成する定義によって、次のような変数の特性が決定されます。

- 変数である配列内に実際に作成される要素の数

- 変数の要素の論理的な順序

- 変数のデータは永続的に格納されるか、そのセッションでのみ使用可能か

- 変数のデータに対しOracle OLAPによって作成されるLOBの数

VARIABLEコマンドを使用して、ローカルなプログラム変数を定義することもできます。これらの変数は、プログラムが実行されているときにのみ存在します。

注意:
アナリティック・ワークスペースに変数を定義しても、アナリティック・ワークスペースには変数の定義のみが追加され、変数自体は移入されません。OLAP DMLを使用して変数を移入するには、OLAP DMLのSQL、FILEREAD、SETまたはSET1文を発行します。

構文

DEFINE name [VARIABLE] datatype [<dims...>] [WITH NULLTRACKING] [WITH AGGCOUNT] -

[PERMANENT | TEMP ] -

[ RANSPACE64] [(partition-instance...)] [WIDTH n] [AW workspace] [SESSION]

ここで、

- dimsは変数のディメンションを表し、各ディメンション間はカンマで区切ります。変数のディメンションに対しては、ディメンション・オブジェクト、パーティション・テンプレート・オブジェクト、名前付き非圧縮コンポジット、圧縮コンポジット、または名前のない非圧縮コンポジットを次のような形で指定できます。

dimension_name

partition_template_name<dims>

uncompressed_composite_name <[basedims...]>

compressed_composite_name <[basedims...]>

SPARSE <basedims...>

注意:
変数のdimsに指定する順序は、様々な文(REPORTやUNRAVELなど)のディメンションおよび動作のデフォルト順序であり、変数のデータの格納方法に影響します(「変数の格納および文のループ処理におけるディメンションの順序の影響」を参照)。また、同じディメンションを使用して複数のオブジェクトを定義する場合、各定義においてディメンションを同じ順序でリストすると、ほとんどの操作がより効率よく動作します。

- partition-instanceは変数のパーティションを表し、各パーティション間はカンマで区切ります。パーティションは、次の構文を使用して指定します。
PARTITION partition-name INTERNAL [TEMP | PERMANENT]

パラメータ

name

定義する変数の名前。この引数の一般情報は、DEFINEコマンドを参照してください。

VARIABLE

変数を定義するときのオブジェクト型。これはデフォルトなので、VARIABLEを入力する必要はありません。

datatype

変数に保存するデータのデータ型。データ型、その略称、および適用可能な値の範囲は、表2-1「OLAP DMLのデータ型の一覧」を参照してください。

dimension_name

DEFINE DIMENSION文を使用して事前に定義した単純、連結、結合または別名ディメンションの名前。この場合は、ディメンションの名前を指定します。

RANSPACE64

データ型がTEXT、NTEXTまたはRAWの変数を定義する際は、このキーワードを指定して、変数値に対する最大文字数を2**32から2**64に増やします。

partition-template-name<dims>

DEFINE PARTITION TEMPLATE文を使用して事前に定義したパーティション・テンプレート・オブジェクトの名前。dimsには、パーティション・テンプレート・オブジェクトのディメンションの名前を指定します。これらのディメンションは、パーティション・テンプレート・オブジェクトの定義に使用したものと同じである必要があります。

uncompressed_composite_name <[basedims...]>

DEFINE COMPOSITE文を使用して事前に定義された非圧縮コンポジットの名前。オプションのbasedims引数には、コンポジットの定義に使用するディメンションの名前をカンマで区切って指定します。

compressed_composite_name <basedims...>

DEFINE COMPOSITE文を使用して事前に定義された圧縮コンポジットの名前。オプションのbasedims引数には、コンポジットの定義に使用するディメンションの名前をカンマで区切って指定します。

圧縮コンポジットでディメンション化される変数を定義する際は、次の点に注意してください。

- 圧縮コンポジットによりディメンション化できるのは、1つの変数のみ、または変数の1つのパーティションのみです。圧縮コンポジットは共有コンポジットにはできません。

- 圧縮コンポジットは、変数を定義するDEFINE VARIABLE文での変数のディメンション・リストにおいて、最後のディメンションにする必要があります。

SPARSE <basedims...>

名前のないコンポジットをOracle OLAPによって作成し、変数をディメンション化する際にそれを使用するように指定します。basedims引数には、名前のないコンポジットを作成する対象となるディメンションの名前をカンマで区切って指定します。

WITH NULLTRACKING

変数がコンポジットによりディメンション化されている場合は、Oracle OLAPによってその変数のセルにNA2ビットが作成されるように指定します。

関連項目:
「NA2ビットとNULLトラッキング」

WITH AGGCOUNT

AVERAGE、HWAVERAGEまたはWAVERAGE演算子を持つRELATION文について計算された集計値に加えられたリーフ・ノード数の非NAカウント数を格納するためのINTEGER変数が自動的に作成されるように指定します。圧縮コンポジットによりディメンション化された変数の平均集計を計算する場合は、この句を指定する必要があります。Aggcount変数の詳細は、「Aggcount変数」を参照してください。

PERMANENT

TEMP

変数または変数のパーティションについて、永続的であるか一時的であるかを指定します。変数やパーティションの永続的または一時的な定義は常に、更新およびコミット後、セッションの間で保存されます。永続的または一時的の指定では、更新およびコミット後、セッションを終了するか別のワークスペースに切り替えた際に、変数の値または変数のパーティションの値を保存するか、廃棄するかが決まります。

- 永続的な変数およびパーティション: Oracle OLAPにより、永続変数または永続パーティションのデータ値が保存されます。ワークスペースを開始した場合、永続変数または永続パーティションのデータ値はそれらを最後にコミットしたときと同じです。

- 一時的な変数およびパーティション: Oracle OLAPにより、一時変数または一時パーティションのデータ値が廃棄されます。ワークスペースを開始する時点では常に、一時変数または一時パーティションの値はNAです。

PERMANENTおよびTEMPキーワードを指定する際は、次の点に注意してください。

- デフォルトでは、変数は永続的です。

- 一時変数は、パーティション・テンプレート・オブジェクトまたは一時ディメンションによってディメンション化できます。

- デフォルトでは、変数の最上位レベルのパーティションは、それを含む変数と同じ永続性を保持します。具体的には、PERMANENTキーワードを使用してそれを永続パーティションにしないかぎり、一時変数のパーティションは一時パーティションであり、TEMPORARYキーワードを使用してそれを一時パーティションにしないかぎり、永続変数のパーティションは永続パーティションです。別の動作を指定するには、PERMANENTまたはTEMPキーワードのいずれかを使用します。

- デフォルトでは、サブパーティションは親パーティションと同じ永続性を保持します。別の動作を指定するには、PERMANENTまたはTEMPキーワードのいずれかを使用します。

WIDTH n

(WIDTHの略称としてWを使用できます。)変数の各値の格納の、バイト単位での幅。マルチバイト・キャラクタ・セットを使用している場合、文字数でなく、バイト数を指定することに注意してください。

より迅速でコンパクトなデータ格納フォーマットを作成するには、固定幅を指定します。次で説明されているように、固定幅はディメンション化されたTEXT、NTEXTおよびINTEGER変数に対してのみ指定できます。

- ディメンション化されたTEXTおよびNTEXT変数には、1バイトから4,000バイトまでの幅を指定できます。特定の変数の値が同じようなサイズであることがわかっている場合にのみ、その変数に固定幅を指定します。スカラー変数には幅を割り当てられません。

- ディメンション化されたINTEGER変数には、1バイトの幅しか指定できません。変数のすべての値が-128と127の間であることがわかっている場合にのみ、固定幅のINTEGER変数を定義します。

変数のデフォルトの幅は、SHORTINTEGERでは2バイト、DATE、INTEGERおよびSHORTDECIMALでは4バイト、DECIMALおよびIDでは8バイトです。固定幅ではないTEXTおよびNTEXT変数は、2つのページ・セットに格納されます。最初のセットには4バイトのセルがあり、各セルが、もう1つのページ・セットに格納されている実際のテキスト値を指し示します。TEXTおよびNTEXT変数についての4バイトのデフォルト幅は、これらの4バイト・セルのためのものです。

PARTITION partition-name INTERNAL

変数のパーティションを指定します。ここで、partition-nameはパーティションの名前です。

圧縮コンポジットでディメンション化される変数のパーティションを定義する際は、次の点に注意してください。

- 1つの圧縮コンポジットによりディメンション化できるパーティションは1つのみです。

- 圧縮コンポジットでディメンション化される変数のパーティションは、階層ディメンションの親子関係を踏襲する必要があります。AGGREGATEコマンドを実行する際、データはパーティション間にまたがって集計できません。変数が正しくパーティション化されているかどうかを確認するには、PARTITIONCHECKファンクションを使用します。

AW workspace

変数を定義する先の、アタッチされたワークスペースの名前。変数がディメンション化されている場合、そのディメンションと同じワークスペースに定義する必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。

SESSION

オブジェクトを現行のセッションでのみ存在させることを指定します。セッションの終了時に、オブジェクトは廃棄されます。SESSIONで指定される動作は、TEMPキーワードで指定される動作とは異なり、TEMPキーワードでは値は一時的ですが、オブジェクト定義は作成したワークスペースに保存されます。

使用上の注意

Aggcount変数

DEFINE VARIABLE文にWITH AGGCOUNT句を指定すると、DEFINE文に指定された変数の他、補助的な変数(一般にはAggcount変数という)が自動的に作成されます。Aggcount変数はINTEGER変数であり、定義された変数に対して平均集計が実行される際、Oracle OLAPで使用されます。AVERAGE、HAVERAGE、WAVERAGEまたはHWAVERAGE演算子を持ち、COUNT NO句を持たないRELATION文を解決する際には、Aggcount変数の平均集計値の計算に加えられるリーフ・ノード数の非NAカウント数が格納されます。

変数をメンテナンスするほとんどの文では、関連するAggcount変数のメンテナンスも自動的に行われます。たとえば、EXPORT文では、変数およびそれに関連するAggcount変数がエクスポートされ、CLEAR文では、変数およびそれに関連するAggcount変数の一部が消去されます。さらにOLAP DML文には、Aggcountオブジェクトを使用する場合に特化したものもあります。表9-6「Aggcount変数用のOLAP DML文」に、これらの文を示します。

表9-6 Aggcount変数用のOLAP DML文

文

キーワード

説明

DEFINE VARIABLE

WITH AGGCOUNT

変数および関連するAggcount変数を定義する。

AGGCOUNT

指定した変数に関連付けられたAggcount変数の値を取得する。

CHGDFN

ADD|DROP AGGCOUNT

指定された変数に対して、Aggcount変数の追加または削除を行う。

OBJ

HASAGGCOUNT

指定した変数に関連付けられたAggcount変数が存在するかどうかを示すBOOLEAN値を返す。

NA2ビットとNULLトラッキング

リレーショナル・ファクト表には、NULLファクト(NULL値を持つファクト)が含まれていることがあります。通常、Oracle OLAPでは、コンポジットによりディメンション化された変数が作成される際、NA(またはNULL)値に対してコンポジット・タプルは作成されません。このような場合、OLAP DML変数ではNULLファクトが削除されるため、各変数とそのベース・リレーショナル・ファクト表とは一致しません。

OLAP DMLのコンポジット・ディメンションでディメンション化された変数(NULLファクトを持つリレーショナル・ファクト表に対応する変数)をサポートするため、Oracle OLAPには、NA2ビットと呼ばれる特殊なNA値があります。基礎となるリレーショナル表にNULLファクトが含まれているため、これらのNA2ビットによって、変数の各セルにNULL値が存在するかどうかのトラッキングが行われます。対応するファクト表にNULLファクトがある場合、Oracle OLAPでは、変数のコンポジット・タプルにあえてNA値を指定する必要があるため、NA2ビットを使用して前述の処理が実行されます。Oracle OLAPでは、SQL IMPORTコマンドやAGGREGATEコマンドを使用して変数を移入する場合、およびマテリアライズド・ビューとして作成された変数を移入する場合に、NA2ビットが使用されます。また、OLAP_TABLE SQLファンクションを使用してリレーショナル表を移入する場合にも使用されます。さらにOracle OLAPにおいて、算術演算子やブール演算子を使用して式の評価が行われる場合、NA2値は認識の対象となります。

OLAP DMLでは、NA2ビットを持つ変数に対して次のような文を使用できます。

- NA2ビットを持つ変数を作成する場合は、NULLTRACKING句を指定したDEFINE VARIABLE文を使用します。

- NA2ビットを持たない変数にNA2ビットを追加するには、NULLTRACKING句を指定したCHGDFN文を使用します。

- NA2ビットを持つ変数からNA2ビットを削除するには、DROP NULLTRACKING句を指定したCHGDFN文を使用します。

- テストやデバッグを行う場合、NA2ファンクションを使用すると、各変数のNA2ビットをTRUEに設定できます。NAFLAGファンクションを使用すると、変数の各値がNA値であるかどうか、またその場合はそれがOLAPにより無視される通常のNA値であるのか、通常のNA値であると同時にNA2値でもあるのかを判定できます。

関連項目:
Oracle OLAPを使用してマテリアライズド・ビューを作成する方法の詳細は、『Oracle OLAPユーザーズ・ガイド』を参照してください。

非常に大きな変数の定義

理論上は、変数には2**63セルまで格納でき、TEXTまたはNTEXT変数には20億バイトまで格納できます。ただし、1つの変数全体を1つのページに格納できるかどうか、またいくつの変数を1つのページに格納できるかは、そのページのサイズにより決まります。1つのページに収まる、一定の幅の変数の値の最大数を計算するには、VALSPERPAGEプログラムを使用します。

変数の格納および文のループ処理におけるディメンションの順序の影響

変数定義のディメンションをリストする順序により、変数の要素を格納する順序が決まり、さらにはデータへのアクセス方法が決まります。変数定義における最初のディメンションは最も変化の速いディメンションで、最後のディメンションは最も変化の遅いディメンションです。

たとえば、アナリティック・ワークスペースに、オフィスが存在する各都市の月別の営業経費が含まれるopcosts変数があるとします。opcosts変数についての次の定義では、monthが最も変化の速いディメンションで、cityが最も変化の遅いディメンションです。

DEFINE opcosts VARIABLE DECIMAL <month city>

多次元変数のデータは、線形の値として格納され、最も変化の速いディメンションの値はクラスタ化されます。たとえば、opcosts変数の場合、すべての月のBostonの値が順に格納され、次にすべての月のChicagoの値が順に格納される、というように続きます。

変数および他のディメンション化されたオブジェクトを定義する場合、およびネストしたループで多次元式をループ処理するプログラムを作成する場合、常に最も変化の速いディメンションと内部ループを一致させて、パフォーマンスを最適化します。

名前のないコンポジット

DEFINE VARIABLE文をSPARSE <dimlist>句とともに実行すると、Oracle OLAPによって、名前のないコンポジットが自動で定義されます。名前のないコンポジットには、Bツリー索引またはハッシュ索引のいずれかが使用されます。索引のタイプは、名前のないコンポジットが定義されたときのSPARSEINDEXオプションの値によって決まります。

あるディメンション・リストについての名前のないコンポジットの定義が一度作成されると、それ以降、同じSPARSE <dimlist>句で変数を定義する際は常にそのコンポジットが使用されます。そのため、同じSPARSE <dimlist>句で定義されるすべての変数が、同じ名前のないコンポジットを共有することになります。コンポジットの共有の詳細は、「共有コンポジット」を参照してください。

変数セグメント

1つのパーティション内で、変数データはアナリティック・ワークスペース・セグメントに格納されます。アナリティック・ワークスペース・セグメントとは、アナリティック・ワークスペースにおける論理的に連続したページのグループです。デフォルトでは、変数のセグメント・サイズはOracle OLAPによって自動で決まります。各セグメントには、あるOLAP DML文により割り当てられた値を格納するのに必要な数のアナリティック・ワークスペース・ページが過不足なく含まれます。CHGDFNコマンドにSEGWIDTHキーワードを指定して、変数のセグメント・サイズを明示的に指定できます。この場合、値を変数に割り当てると、Oracle OLAPでは、複数のOLAP DML文によって割り当てられたデータを、そのセグメントがいっぱいになるまで1つのセグメントに格納します。

例

例9-95 通常のディメンションを1つだけ持つINTEGER変数の定義

この例では、アナリティック・ワークスペースに変数populationを追加します。この変数は、cityによってディメンション化され、cityは、ワークスペースにあらかじめ定義されています。LD文で、オブジェクトに説明を追加します。次の文

DEFINE population INTEGER <city>
LD Population in each city
DESCRIBE population

次の説明が作成されます。

DEFINE POPULATION VARIABLE INTEGER <CITY>
LD Population in each city

例9-96 単一セルの変数の定義

次の定義は、newdataという変数の定義で、この変数は単一のブール値です。ディメンションはありません。ワークスペースに新しいデータが追加されると、アプリケーションによってYESに設定され、ユーザーがそのデータを表示した後はNOに設定されるようにできます。

DEFINE newdata BOOLEAN
newdata = YES

例9-97 NUMBER変数の定義

次の文では、productおよびgeographyでディメンション化された、16桁の精度および4桁のスケールのsalesというNUMBER変数が定義されます。

DEFINE sales VARIABLE NUMBER (16,4) <product, geography>

次の文では、有効桁数5桁および小数桁数2桁のnumvarというNUMBER変数が定義されます。数字1234567は有効範囲外です。

DEFINE numvar VARIABLE NUMBER (5, 2)
numvar = 1234567
SHOW numvar
NA

スケールを負にすることにより、有効桁数5桁および小数点の左の2桁を端数処理した、numnegvarというNUMBER変数が定義されます。数字1,234,567は端数処理されます。

DEFINE numnegvar VARIABLE NUMBER (5, -2)
numnegvar = 1234567
SHOW numnegvar
1,234,600.00

例9-98 通常のディメンションを2つ使用してディメンション化される変数の定義

アナリティック・ワークスペースに次の定義を持つディメンション、リレーションおよびaggmapが含まれるとします。

DEFINE GEOG_CITY DIMENSION TEXT
DEFINE GEOG_STATE DIMENSION TEXT
DEFINE GEOG_AREA DIMENSION TEXT
DEFINE GEOG_CONT DIMENSION TEXT
DEFINE GEOG DIMENSION CONCAT (GEOG_CITY GEOG_STATE GEOG_AREA GEOG_CONT)
DEFINE PROD_UPC DIMENSION TEXT
DEFINE PROD_FAMILY DIMENSION TEXT
DEFINE PROD_DIV DIMENSION TEXT
DEFINE PROD_TOP DIMENSION TEXT
DEFINE PROD DIMENSION CONCAT (PROD_UPC PROD_FAMILY PROD_DIV PROD_TOP)
DEFINE GEOGLEVEL DIMENSION TEXT
DEFINE PRODLEVEL DIMENSION TEXT
DEFINE GEOG.PARENT RELATION GEOG <GEOG>
DEFINE PROD.PARENT RELATION PROD <PROD>
DEFINE GEOG.LEVELREL RELATION GEOGLEVEL <GEOG>
DEFINE PROD.LEVELREL RELATION PRODLEVEL <PROD>
DEFINE GEOG.FAMILYREL RELATION GEOG <GEOG GEOGLEVEL>
DEFINE PROD.FAMILYREL RELATION PROD <PROD PRODLEVEL>
DEFINE SALES_DIMS_REG VARIABLE NUMBER (12,0) <PROD GEOG>
DEFINE SALES_AGGMAP AGGMAP
AGGMAP
RELATION geog.parent
RELATION prod.parent
END

2つの親リレーション(prod.parentおよびgeog.parent)の値は次のとおりです。

PROD                             PROD.PARENT
------------------------- -------------------------
<PROD_UPC: ColorTV>       <PROD_FAMILY: TV>
<PROD_UPC: BWTV>          <PROD_FAMILY: TV>
<PROD_UPC: StndVCR>       <PROD_FAMILY: VCR>
<PROD_UPC: StrVCR>        <PROD_FAMILY: VCR>
<PROD_FAMILY: VCR>        <PROD_DIV: VideoDiv>
<PROD_FAMILY: TV>         <PROD_DIV: VideoDiv>
<PROD_DIV: VideoDiv>      <PROD_TOP: Total Prod>
<PROD_TOP: Total Prod>    NA
GEOG                             GEOG.PARENT
------------------------- -------------------------
<GEOG_CITY: Canberra>     <GEOG_STATE: ACT>
<GEOG_CITY: Sydney>       <GEOG_STATE: NSW>
<GEOG_CITY: Darwin>       <GEOG_STATE: NT>
<GEOG_CITY: Brisbane>     <GEOG_STATE: QLD>
<GEOG_CITY: Adelaide>     <GEOG_STATE: SA>
<GEOG_CITY: Hobart>       <GEOG_STATE: TAS>
<GEOG_CITY: Melbourne>    <GEOG_STATE: VIC>
<GEOG_CITY: Perth>        <GEOG_STATE: WA>
<GEOG_STATE: ACT>         <GEOG_AREA: Aust Terr>
<GEOG_STATE: NSW>         <GEOG_AREA: Aust State>
<GEOG_STATE: NT>          <GEOG_AREA: Aust Terr>
<GEOG_STATE: QLD>         <GEOG_AREA: Aust State>
<GEOG_STATE: SA>          <GEOG_AREA: Aust State>
<GEOG_STATE: TAS>         <GEOG_AREA: Aust State>
<GEOG_STATE: VIC>         <GEOG_AREA: Aust State>
<GEOG_STATE: WA>          <GEOG_AREA: Aust State>
<GEOG_AREA: Aust State>   <GEOG_CONT: Australia>
<GEOG_AREA: Aust Terr>    <GEOG_CONT: Australia>
<GEOG_CONT: Australia>    NA

sales_aggmapを使用してsales_dims_regの集計を行うとします。ここでは、sales_dims_reg変数のレポートに対して次のREPORT文を発行するとします。

REPORT sales_dims_reg->REPORT sales_dims_reg

REPORT文の出力でも確認できるように、sales_dims_reg変数は、スパースに移入された変数で、含まれる152個のセルのほとんどがNA値です。

----------------------------SALES_DIMS_REG-----------------------------
---------------------------------PROD----------------------------------
<PROD_DI
<PROD_UP          <PROD_UP <PROD_UP <PROD_FA <PROD_FA    V:    <PROD_TO
C:    <PROD_UP    C:       C:     MILY:    MILY:   VideoDiv P: Total
GEOG                      ColorTV> C: BWTV> StndVCR> StrVCR>    VCR>     TV>       >      Prod>
------------------------- -------- -------- -------- -------- -------- -------- -------- --------
<GEOG_CITY: Canberra>     11,592.0       NA 38,356.0 3,444.00 41,800.0 11,592.0 53,392.0 53,392.0
<GEOG_CITY: Sydney>             NA       NA       NA       NA       NA       NA       NA       NA
<GEOG_CITY: Darwin>       24,868.0       NA 22,104.0 32,667.0 54,771.0 24,868.0 79,639.0 79,639.0
<GEOG_CITY: Brisbane>     49,556.0       NA 48,239.0 24,285.0 72,524.0 49,556.0  122,080  122,080
<GEOG_CITY: Adelaide>           NA       NA       NA       NA       NA       NA       NA       NA
<GEOG_CITY: Hobart>       17,223.0       NA 18,872.0 48,780.0 67,652.0 17,223.0 84,875.0 84,875.0
<GEOG_CITY: Melbourne>          NA 22,000.0       NA       NA       NA 22,000.0 22,000.0 22,000.0
<GEOG_CITY: Perth>              NA       NA       NA       NA       NA       NA       NA       NA
<GEOG_STATE: ACT>         11,592.0       NA 38,356.0 3,444.00 41,800.0 11,592.0 53,392.0 53,392.0
<GEOG_STATE: NSW>               NA       NA       NA       NA       NA       NA       NA       NA
<GEOG_STATE: NT>          24,868.0       NA 22,104.0 32,667.0 54,771.0 24,868.0 79,639.0 79,639.0
<GEOG_STATE: QLD>         49,556.0       NA 48,239.0 24,285.0 72,524.0 49,556.0  122,080  122,080
<GEOG_STATE: SA>                NA       NA       NA       NA       NA       NA       NA       NA
<GEOG_STATE: TAS>         17,223.0       NA 18,872.0 48,780.0 67,652.0 17,223.0 84,875.0 84,875.0
<GEOG_STATE: VIC>               NA 22,000.0       NA       NA       NA 22,000.0 22,000.0 22,000.0
<GEOG_STATE: WA>                NA       NA       NA       NA       NA       NA       NA       NA
<GEOG_AREA: Aust State>   66,779.0 22,000.0 67,111.0 73,065.0  140,176 88,779.0  228,955  228,955
<GEOG_AREA: Aust Terr>    36,460.0       NA 60,460.0 36,111.0 96,571.0 36,460.0  133,031  133,031
<GEOG_CONT: Australia>     103,239 22,000.0  127,571  109,176  236,747  125,239  361,986  361,986

sales_dims_reg変数は、コンポジットや連結ディメンションではなく、2つの通常のディメンションによりディメンション化されているため、NA値も含め、そのセルのすべての値は変数に格納されています。次の文を発行すると、ワークスペースに格納されている物理的な値の数を確認できます。

SHOW OBJ(NUMVALS 'sales_dims_reg')
152.00

この文を実行すると、152.00という値が表示されます。これは、sales_dims_reg変数に含まれる152個のセルにあるすべての値(NA値も含む)が変数の一部として格納されていることを示しています。

例9-99 非圧縮コンポジットによりディメンション化される変数の定義

例9-98「通常のディメンションを2つ使用してディメンション化される変数の定義」で使用したものと同じディメンション、リレーションおよびaggmapを使用して、アナリティック・ワークスペースが作成されているとします。ここでは次の文を発行して、コンポジットおよびそのコンポジットによりディメンション化される変数を定義するとします。

DEFINE COMP_PROD_GEOG COMPOSITE <PROD GEOG>
DEFINE SALES_DIMS_COMPOSITE VARIABLE NUMBER (12,2) <COMP_PROD_GEOG <PROD GEOG>>

例9-98「通常のディメンションを2つ使用してディメンション化される変数の定義」でのsales_dims_regと同様に、sales_dims_compositeに同じベース値を移入し、同じaggmap(つまり、sales_aggmap)を使用してsales_dims_compositeの集計を行うとします。そして、sales_dims_composite変数に対し次のREPORT文を発行します。

REPORT sales_dims_composite

sales_dims_composite変数のレポートには、sales_dims_reg変数のレポートと同じように、152個のセルが表示されます。

-------------------------SALES_DIMS_COMPOSITE--------------------------
---------------------------------PROD----------------------------------
<PROD_DI
<PROD_UP          <PROD_UP <PROD_UP <PROD_FA <PROD_FA    V:    <PROD_TO
C:    <PROD_UP    C:       C:     MILY:    MILY:   VideoDiv P: Total
GEOG                      ColorTV> C: BWTV> StndVCR> StrVCR>    VCR>     TV>       >      Prod>
------------------------- -------- -------- -------- -------- -------- -------- -------- --------
<GEOG_CITY: Canberra>     11,592.0       NA 38,356.0 3,444.00 41,800.0 11,592.0 53,392.0 53,392.0
<GEOG_CITY: Sydney>             NA       NA       NA       NA       NA       NA       NA       NA
<GEOG_CITY: Darwin>       24,868.0       NA 22,104.0 32,667.0 54,771.0 24,868.0 79,639.0 79,639.0
<GEOG_CITY: Brisbane>     49,556.0       NA 48,239.0 24,285.0 72,524.0 49,556.0  122,080  122,080
<GEOG_CITY: Adelaide>           NA       NA       NA       NA       NA       NA       NA       NA
<GEOG_CITY: Hobart>       17,223.0       NA 18,872.0 48,780.0 67,652.0 17,223.0 84,875.0 84,875.0
<GEOG_CITY: Melbourne>          NA 22,000.0       NA       NA       NA 22,000.0 22,000.0 22,000.0
<GEOG_CITY: Perth>              NA       NA       NA       NA       NA       NA       NA       NA
<GEOG_STATE: ACT>         11,592.0       NA 38,356.0 3,444.00 41,800.0 11,592.0 53,392.0 53,392.0
<GEOG_STATE: NSW>               NA       NA       NA       NA       NA       NA       NA       NA
<GEOG_STATE: NT>          24,868.0       NA 22,104.0 32,667.0 54,771.0 24,868.0 79,639.0 79,639.0
<GEOG_STATE: QLD>         49,556.0       NA 48,239.0 24,285.0 72,524.0 49,556.0  122,080  122,080
<GEOG_STATE: SA>                NA       NA       NA       NA       NA       NA       NA       NA
<GEOG_STATE: TAS>         17,223.0       NA 18,872.0 48,780.0 67,652.0 17,223.0 84,875.0 84,875.0
<GEOG_STATE: VIC>               NA 22,000.0       NA       NA       NA 22,000.0 22,000.0 22,000.0
<GEOG_STATE: WA>                NA       NA       NA       NA       NA       NA       NA       NA
<GEOG_AREA: Aust State>   66,779.0 22,000.0 67,111.0 73,065.0  140,176 88,779.0  228,955  228,955
<GEOG_AREA: Aust Terr>    36,460.0       NA 60,460.0 36,111.0 96,571.0 36,460.0  133,031  133,031
<GEOG_CONT: Australia>     103,239 22,000.0  127,571  109,176  236,747  125,239  361,986  361,986

ただし、sales_dims_comp変数はコンポジットによりディメンション化されているため、NA値として表示される65個のセルは変数に格納されません。次のようにsales_dims_composite変数にNUMVALSキーワードを指定した文を発行しOBJファンクションを呼び出すことによって、ワークスペースに格納されている物理的な値の数を確認できます。

SHOW OBJ(NUMVALS 'sales_dims_composite')
87.00

この文を実行すると、87.00という値が表示されます。これは、sales_dims_composite変数の一部として格納されている値が、87個の非NA値のみであることを示しています。

例9-100 圧縮コンポジットによりディメンション化される変数の定義

例9-98「通常のディメンションを2つ使用してディメンション化される変数の定義」で使用したものと同じディメンション、リレーションおよびaggmapを使用して、アナリティック・ワークスペースが作成されているとします。ここでは次の文を発行して、コンポジットおよびそのコンポジットによりディメンション化される変数を定義するとします。

DEFINE CC_COMP_PROD_GEOG COMPOSITE <PROD GEOG> COMPRESSED
DEFINE SALES_DIMS_COMP_COMPOSITE VARIABLE NUMBER (12,0) <CC_COMP_PROD_GEOG <PROD GEOG>>

例9-98「通常のディメンションを2つ使用してディメンション化される変数の定義」でのsales_dims_regと同様に、sales_dims_compositeに同じベース値を移入し、同じaggmap(つまり、sales_aggmap)を使用してsales_dims_comp_compositeの集計を行うとします。ここで、次の文を発行します。

REPORT sales_dims_comp_composite

sales_dims_comp_comp_composite変数のレポートには、sales_dims_reg変数のレポートと同じように、152個のセルが表示されます。

-----------------------SALES_DIMS_COMP_COMPOSITE-----------------------
---------------------------------PROD----------------------------------
<PROD_DI
<PROD_UP          <PROD_UP <PROD_UP <PROD_FA <PROD_FA    V:    <PROD_TO
C:    <PROD_UP    C:       C:     MILY:    MILY:   VideoDiv P: Total
GEOG                      ColorTV> C: BWTV> StndVCR> StrVCR>    VCR>     TV>       >      Prod>
------------------------- -------- -------- -------- -------- -------- -------- -------- --------
<GEOG_CITY: Canberra>     11,592.0       NA 38,356.0 3,444.00 41,800.0 11,592.0 53,392.0 53,392.0
<GEOG_CITY: Sydney>             NA       NA       NA       NA       NA       NA       NA       NA
<GEOG_CITY: Darwin>       24,868.0       NA 22,104.0 32,667.0 54,771.0 24,868.0 79,639.0 79,639.0
<GEOG_CITY: Brisbane>     49,556.0       NA 48,239.0 24,285.0 72,524.0 49,556.0  122,080  122,080
<GEOG_CITY: Adelaide>           NA       NA       NA       NA       NA       NA       NA       NA
<GEOG_CITY: Hobart>       17,223.0       NA 18,872.0 48,780.0 67,652.0 17,223.0 84,875.0 84,875.0
<GEOG_CITY: Melbourne>          NA 22,000.0       NA       NA       NA 22,000.0 22,000.0 22,000.0
<GEOG_CITY: Perth>              NA       NA       NA       NA       NA       NA       NA       NA
<GEOG_STATE: ACT>         11,592.0       NA 38,356.0 3,444.00 41,800.0 11,592.0 53,392.0 53,392.0
<GEOG_STATE: NSW>               NA       NA       NA       NA       NA       NA       NA       NA
<GEOG_STATE: NT>          24,868.0       NA 22,104.0 32,667.0 54,771.0 24,868.0 79,639.0 79,639.0
<GEOG_STATE: QLD>         49,556.0       NA 48,239.0 24,285.0 72,524.0 49,556.0  122,080  122,080
<GEOG_STATE: SA>                NA       NA       NA       NA       NA       NA       NA       NA
<GEOG_STATE: TAS>         17,223.0       NA 18,872.0 48,780.0 67,652.0 17,223.0 84,875.0 84,875.0
<GEOG_STATE: VIC>               NA 22,000.0       NA       NA       NA 22,000.0 22,000.0 22,000.0
<GEOG_STATE: WA>                NA       NA       NA       NA       NA       NA       NA       NA
<GEOG_AREA: Aust State>   66,779.0 22,000.0 67,111.0 73,065.0  140,176 88,779.0  228,955  228,955
<GEOG_AREA: Aust Terr>    36,460.0       NA 60,460.0 36,111.0 96,571.0 36,460.0  133,031  133,031
<GEOG_CONT: Australia>     103,239 22,000.0  127,571  109,176  236,747  125,239  361,986  361,986

ただし、sales_dims_comp_comp変数は圧縮コンポジットによりディメンション化されているため、セル内の値がすべて変数に格納されるわけではありません。NA値として表示されている65個のセルは変数に格納されず、それらの値は階層へ渡されて、最下位レベルの階層に一度だけ格納されます。

次のようにsales_dims_comp_composite変数にNUMVALSキーワードを指定した文を発行しOBJファンクションを呼び出すことによって、ワークスペースに格納されている物理的な値の数を確認できます。

SHOW OBJ(NUMVALS 'sales_dims_comp_composite')
38.00

この文を実行すると、38.00という値が表示されますが、これは、sales_dims_comp_composite変数の一部として格納されている値が38個のみであることを示しています。これらの値を、次の表に示します。

GEOG

PROD_UPC:ColorTV

PROD_UPC:BWTV

PROD_UPC:StandVCR

PROD_UPC:StrVCR

PROD_FAMILY: VCR

PROD_FAMILY: TV

PROD_DIV: VideoDiv

GEOG_CITY: Canberra

11,592.0

38,356.0

3,444.00

41,800.0

53,392.0

GEOG_CITY: Darwin

24,868.0

22,104.0

32,667.0

54,771.0

79,639.0

GEOG_CITY: Brisbane

49,556.0

48,239.0

24,285.0

72,524.0

122,080

GEOG_CITY: Hobart

17,223.0

18,872.0

48,780.0

67,652.0

84,875.0

GEOG_CITY: Melbourne

22,000.0

GEOG_AREA: Aust State

66,779.0

67,111.0

73,065.0

140,176

88,779.0

228,955

GEOG_AREA: Aust Terr

36,460.0

60,460.0

36,111.0

96,571.0

133,031

GEOG_Cont: Australia

103,239

127,57

109,176

236,747

125,239

361,986

例9-101 パーティションを持つ変数の定義

productおよびtimeでディメンション化され、さらに年ごとのデータが個別のパーティションに入るようにパーティション化されているsales変数を定義するとします。

アナリティック・ワークスペースには、productsディメンション、3つのデータ・レベル(日、月、年)を持つ単純な階層ディメンションであるtimeディメンション、およびtimeの値間の親子関係を示すtime_parentrelリレーションがあるとします。

DEFINE TIME DIMENSION TEXT
DEFINE PRODUCT DIMENSION TEXT
DEFINE TIME_PARENTREL RELATION TIME <TIME>

わかりやすくするために、この例では、timeおよびproductディメンションは一部分のみ移入され、次の値しか持たないものとします。

TIME
--------------
2003
2002
Dec2003
Jan2003
Dec2002
Jan2002
31Dec2003
01Dec2003
31Jan2003
01Jan2003
31Dec2002
01Dec2002
31Jan2002
01Jan2002

PRODUCT
-------
00001
00002

パーティション変数を作成するには、次の手順に従います。

1. 各年のデータに対し1パーティションを定義するパーティション・テンプレートを定義します。

DEFINE partition_sales_by_year PARTITION TEMPLATE <time product> -
PARTITION BY LIST (time)(-
PARTITION time_2003 VALUES ('2003', 'Dec2003', 'Jan2003', '31Dec2003', '01Dec2003', '31Jan2003', '01Jan2003') <time product>-
PARTITION time_2002 VALUES ('2002', 'Dec2002', 'Jan2002', '31Dec2002', '01Dec2002', '31Jan2002', '01Jan2002') <time product>)

(わかりやすくするために、この例では、各パーティションに対し、各年のディメンション値の一部のみが指定されていることに注意してください。通常、パーティションに多くの数の値を指定する必要がある場合は、DEFINE PARTITION STATEMENT文内ではそれを行いません。かわりに、値を指定せずにパーティションを定義し、その後で、例10-53「値セットを使用したパーティションの値の指定」に記載されているように、MAINTAIN ADD TO PARTITION文またはMAINTAIN MOVE TO PARTITION文を使用して値を指定します。)

2. partition_sales_by_yearというパーティション・テンプレートによって定義されたパーティションを使用して、パーティション化されたsales変数を定義します。

DEFINE sales DECIMAL <partition_sales_by_year<time product>>

3. dayの値でsalesを移入した後、次のREPORT文を発行して、どのsales値がどのパーティションにあるかを確認できます。

REPORT DOWN PARTITION(partition_sales_by_year) time product sales

PARTITION(PARTITION_SALES_BY_YEAR)     TIME     PRODUCT     SALES
----------------------------------- ---------- ---------- ----------
TIME_2003                           2003       00001              NA
TIME_2003                           Dec2003    00001              NA
TIME_2003                           Jan2003    00001              NA
TIME_2003                           31Dec2003  00001           14.78
TIME_2003                           01Dec2003  00001           15.52
TIME_2003                           31Jan2003  00001           13.61
TIME_2003                           01Jan2003  00001           10.39
TIME_2003                           2003       00002              NA
TIME_2003                           Dec2003    00002              NA
TIME_2003                           Jan2003    00002              NA
TIME_2003                           31Dec2003  00002           16.05
TIME_2003                           01Dec2003  00002           12.27
TIME_2003                           31Jan2003  00002           10.83
TIME_2003                           01Jan2003  00002           11.07
TIME_2002                           2002       00001              NA
TIME_2002                           Dec2002    00001              NA
TIME_2002                           Jan2002    00001              NA
TIME_2002                           31Dec2002  00001           18.80
TIME_2002                           01Dec2002  00001           13.64
TIME_2002                           31Jan2002  00001           12.41
TIME_2002                           01Jan2002  00001           16.97
TIME_2002                           2002       00002              NA
TIME_2002                           Dec2002    00002              NA
TIME_2002                           Jan2002    00002              NA
TIME_2002                           31Dec2002  00002           17.47
TIME_2002                           01Dec2002  00002           16.58
TIME_2002                           31Jan2002  00002           18.94
TIME_2002                           01Jan2002  00002           18.36

例9-102 固定幅のTEXT変数の定義

次の文により、employeeでディメンション化されたlastnameというTEXT変数が定義されます。lastname内の値は20文字に制限されているため、20文字を超える値は切り捨てられます。

DEFINE lastname TEXT <employee> WIDTH 20

例9-103 名前付きBツリー・コンポジットを使用する変数の定義

アナリティック・ワークスペースに次のようなディメンションがあるとします。

DEFINE month DIMENSION TEXT
DEFINE product DIMENSION TEXT
DEFINE region DIMENSION TEXT

会社で、すべての地域ではなく一部の地域でのみ特定の製品の販促マーケティングを実施し、変数データがproductおよびregionディメンションでスパースになるとします。そのため、ベース・ディメンションがproductおよびregionであるproddistというコンポジットを定義するとします。コンポジットには、データを持つ値についてのみ、ディメンションと値の組合せが含まれます。たとえば、テントについての販促は行うがスキーについては行わないという場合、コンポジットにはテントと地域の組合せは含まれますが、スキーと地域の組合せは含まれません。

次の文で、ベース・ディメンションがproductおよびdistrictであるproddistというBツリー・コンポジットと、monthおよびproddistでディメンション化されたpromoという変数が作成されます。

DEFINE proddist COMPOSITE <product region>
DEFINE promo VARIABLE INTEGER <month proddist <product district>>

わかりやすくするために、アナリティック・ワークスペースには次のディメンション・データのみが格納されているとします。

PRODUCT
--------------
Tents
Skis

REGION
--------------
Northeast
Southwest

MONTH
--------------
Jan2003
Feb2003
Mar2003
Apr2003
May2003
Jun2003
Jul2003
Aug2003
Sep2003
Oct2003
Nov2003
Dec2003

2003年9月にNortheast地域において、$5,000の経費でスキーの販促セールを実施することにしたとします。この内容でpromoを移入した後、promoのセルは12セルのみで、各セルは、monthの値、およびproddistについての<'Skis' 'Northeast'>のコンポジット・タプル値によりディメンション化されています。2003年9月のセルは値$5,000を含み、他のすべてのセルはNAを含みます。promo内には、これ以外のNA値はなく、productまたはregionの他の値について、セルは作成されません。

例9-104 NULLトラッキングを持つ変数の定義

アナリティック・ワークスペースに次のオブジェクトが定義されているとします。

DEFINE GEOG DIMENSION TEXT
LD A dimension with a simple hierarchy for geography

DEFINE geog_levellist DIMENSION TEXT
LD List of Levels in in the hierarchy of the geog dimension

DEFINE GEOG_PARENTREL RELATION GEOG <GEOG>
LD Self-relation for geog showing parents of each value in the hierarchy

DEFINE GEOG_LEVELREL RELATION GEOG_LEVELLIST <GEOG>
LD Level of each dimension member for geog

DEFINE product DIMENSION TEXT
LD A nonhierarchical dimension

DEFINE time DIMENSION TEXT
LD A hierarchical text dimension for time

DEFINE time_levellist DIMENSION TEXT
LD List of Levels in hierarchy of the time dimension

DEFINE time_parentrel RELATION time <time>
LD A self-relation for time show parents of each value in the hierarchy

DEFINE TIME_LEVELREL RELATION TIME_LEVELLIST <TIME>
LD Level of each dimension member for time

DEFINE prod_geog COMPOSITE <product geog> COMPRESSED

ここで、timeおよびprod_geogコンポジットによりディメンション化しておく必要があるsales変数を定義するとします。この変数は、最終的にSQL IMPORTを使用して移入することになりますが、ファクト表内の一部のファクトにはNULL値が含まれていることがわかっているため、この変数にはNULLトラッキングを含める必要があります。そのためには、WITH NULLTRACKING句が指定された次のような文を発行します。

DEFINE sales VARIABLE DECIMAL <time prod_geog<product geog>> WITH NULLTRACKING

テスト用に、RANDOMファンクションを使用してこの変数を移入します。変数の移入を行ったら、レポートを発行して変数内のNA値を表示します。

REPORT DOWN time ACROSS geog: sales

PRODUCT: TVs
-----------------------SALES-----------------------
-----------------------GEOG------------------------
TIME              Boston    Springfield    Hartford    All Places
-------------- ------------ ------------ ------------ ------------
2007                     NA           NA           NA           NA
2008                     NA           NA           NA           NA
All years                NA           NA           NA           NA
Jan07                    NA           NA           NA           NA
Feb07                    NA           NA           NA           NA
Mar07                    NA           NA           NA           NA
Apr07                    NA           NA           NA           NA
May07                    NA           NA           NA           NA
Jun07                    NA           NA           NA           NA
Jul07                    NA           NA           NA           NA
Aug07                    NA           NA           NA           NA
Sep07                    NA           NA           NA           NA
Oct07                    NA           NA           NA           NA
Nov07                    NA           NA           NA           NA
Dec07                    NA           NA           NA           NA
Jan08                    NA           NA           NA           NA
Feb08                    NA           NA           NA           NA
Mar08                    NA           NA           NA           NA
Apr08                    NA           NA           NA           NA
May08                    NA           NA           NA           NA
Jun08                    NA           NA           NA           NA
Jul08                    NA           NA           NA           NA
Aug08                    NA           NA           NA           NA
Sep08                    NA           NA           NA           NA
Oct08                    NA           NA           NA           NA
Nov08                    NA           NA           NA           NA
Dec08                    NA           NA           NA           NA

PRODUCT: Radios
-----------------------SALES-----------------------
-----------------------GEOG------------------------
TIME              Boston    Springfield    Hartford    All Places
-------------- ------------ ------------ ------------ ------------
2007                     NA           NA           NA           NA
2008                     NA           NA           NA           NA
All years                NA           NA           NA           NA
Jan07                 24.59        23.70        33.12        28.65
Feb07                 22.78        21.42        26.28        37.06
Mar07                 25.74        32.08        22.75        24.62
Apr07                 22.23        23.21        20.79        28.68
May07                 20.51        29.71        30.35        33.05
Jun07                 34.43        35.96        33.85        39.34
Jul07                 24.86        38.02        36.78        31.22
Aug07                 39.05        21.08        35.80        33.81
Sep07                 34.38        21.69        25.04        33.40
Oct07                 33.82        39.27        20.28        24.39
Nov07                 25.48        23.03        32.45        39.94
Dec07                 25.14        30.66        33.75        23.37
Jan08                    NA           NA           NA           NA
Feb08                    NA           NA           NA           NA
Mar08                    NA           NA           NA           NA
Apr08                    NA           NA           NA           NA
May08                    NA           NA           NA           NA
Jun08                    NA           NA           NA           NA
Jul08                    NA           NA           NA           NA
Aug08                    NA           NA           NA           NA
Sep08                    NA           NA           NA           NA
Oct08                    NA           NA           NA           NA
Nov08                    NA           NA           NA           NA
Dec08                    NA           NA           NA           NA

同じくテスト用に、NAFLAGファンクションを使用してレポートを生成し、変数内のNAのタイプを取得します。次のレポートからわかるように、RANDOMを使用して変数の移入が行われたため、NAはすべて通常のNA値であって、NA2値ではありません。

REPORT DOWN time ACROSS geog: NAFLAG(sales)

PRODUCT: TVs
-------------------NAFLAG(SALES)-------------------
-----------------------GEOG------------------------
TIME              Boston    Springfield    Hartford    All Places
-------------- ------------ ------------ ------------ ------------
2007                      1            1            1            1
2008                      1            1            1            1
All years                 1            1            1            1
Jan07                     1            1            1            1
Feb07                     1            1            1            1
Mar07                     1            1            1            1
Apr07                     1            1            1            1
May07                     1            1            1            1
Jun07                     1            1            1            1
Jul07                     1            1            1            1
Aug07                     1            1            1            1
Sep07                     1            1            1            1
Oct07                     1            1            1            1
Nov07                     1            1            1            1
Dec07                     1            1            1            1
Jan08                     1            1            1            1
Feb08                     1            1            1            1
Mar08                     1            1            1            1
Apr08                     1            1            1            1
May08                     1            1            1            1
Jun08                     1            1            1            1
Jul08                     1            1            1            1
Aug08                     1            1            1            1
Sep08                     1            1            1            1
Oct08                     1            1            1            1
Nov08                     1            1            1            1
Dec08                     1            1            1            1

PRODUCT: Radios
-------------------NAFLAG(SALES)-------------------
-----------------------GEOG------------------------
TIME              Boston    Springfield    Hartford    All Places
-------------- ------------ ------------ ------------ ------------
2007                      1            1            1            1
2008                      1            1            1            1
All years                 1            1            1            1
Jan07                     0            0            0            0
Feb07                     0            0            0            0
Mar07                     0            0            0            0
Apr07                     0            0            0            0
May07                     0            0            0            0
Jun07                     0            0            0            0
Jul07                     0            0            0            0
Aug07                     0            0            0            0
Sep07                     0            0            0            0
Oct07                     0            0            0            0
Nov07                     0            0            0            0
Dec07                     0            0            0            0
Jan08                     1            1            1            1
Feb08                     1            1            1            1
Mar08                     1            1            1            1
Apr08                     1            1            1            1
May08                     1            1            1            1
Jun08                     1            1            1            1
Jul08                     1            1            1            1
Aug08                     1            1            1            1
Sep08                     1            1            1            1
Oct08                     1            1            1            1
Nov08                     1            1            1            1
Dec08                     1            1            1            1

再びテスト用に、NAファンクションを使用して、2008年の月でディメンション化された変数のセルにNA2ビットを設定します。次のコードは、NA2ファンクションのSHOWを発行し、そのファンクションを使用して、2008年の月でディメンション化された変数のセルにNA2ビットを設定した結果を示したものです。

SHOW NA2
NA

LIMIT time TO 'Jan08' 'Feb08' 'Mar08' 'Apr08' 'May08' 'Jun08' 'Jul08' 'Aug08' 'Sep08' 'Oct08' 'Nov08' 'Dec08'
saleswithnull= NA2

状況を単純化して、ここでは次の3つのLIMIT文を発行し、sales変数およびsales変数に対するNAFLAGファンクションについてのレポートを表示するというテストを行います。NAFLAGレポートに示されているように、NA2値が割り当てられている月の値Jan08では、NAFLAGに対する値として2が返されており、年2008では値1が返されています。

LIMIT product to 'Radios'
LIMIT time TO 'Jan08' '2008'
LIMIT geog TO 'Boston' 'All Places'

REPORT DOWN time ACROSS geog: sales

PRODUCT: Radios
----------SALES----------
----------GEOG-----------
TIME              Boston     All Places
-------------- ------------ ------------
Jan08                    NA           NA
2008                     NA           NA

REPORT DOWN time ACROSS geog: NAFLAG(sales)

PRODUCT: Radios
------NAFLAG(SALES)------
----------GEOG-----------
TIME              Boston     All Places
-------------- ------------ ------------
Jan08                     2            2
2008                      1            1

ここで、次のコードを発行してsales変数からNA2ビットを削除するとします。

CHGDFN sales DROP NULLTRACKING

sales変数のDESCRIBEでは、その定義の中にWITH NULLTRACKING句がないことが示されており、NAFLAGの結果のレポートでは、現在のNA値がNA2ビットを持たない通常のNA値であることが示されています。

DESCRIBE sales

DEFINE SALES VARIABLE DECIMAL <TIME PROD_GEOG <PRODUCT GEOG>>

REPORT DOWN time ACROSS geog: sales

PRODUCT: Radios
----------SALES----------
----------GEOG-----------
TIME              Boston     All Places
-------------- ------------ ------------
Jan08                    NA           NA
2008                     NA           NA

"Report on the type of NA values in the sales variable
REPORT DOWN time ACROSS geog: NAFLAG(sales)

PRODUCT: Radios
------NAFLAG(SALES)------
----------GEOG-----------
TIME              Boston     All Places
-------------- ------------ ------------
Jan08                     1            1
2008                      1            1

DEFINE WORKSHEET

DEFINEコマンドとともにWORKSHEETキーワードを使用すると、アナリティック・ワークスペースに新しいワークシート・オブジェクトが追加されます。ワークシートは、スプレッドシートと同様に、ワークシート行とワークシート列でディメンション化された2次元のオブジェクトです。スプレッドシート・パッケージとワークスペース・ディメンションおよび変数との間で転送する必要のあるデータを、一時的に保存できます。

ワークシートを最初に定義した時点では、ワークシートに値は含まれていません。既存のスプレッドシートからワークシートに値を移入するには、IMPORT(スプレッドシート)文を使用でき、MAINTAIN文を使用すると、ワークシート行およびワークシート列のディメンションに対して値の追加や削除を行うことができます。

構文

DEFINE name WORKSHEET [<column-dim row-dim>] [TEMP] [AW workspace] [SESSION]

パラメータ

name

定義するオブジェクトの名前。この引数の一般情報は、DEFINEコマンドを参照してください。

WORKSHEET

ワークシートを定義するときのオブジェクト型。

<column-dim row-dim>

ワークシートのディメンションの名前。この引数を指定する場合は、column-dimおよびrow-dimに2つのINTEGERディメンションの名前を指定する必要があります。この引数を指定しない場合は、ワークシートは自動でWKSCOLおよびWKSROWでディメンション化されます。詳細は、「ワークシート・ディメンション」を参照してください。

TEMP

ワークシートが一時的であることを示します。ワークシートは指定されたワークスペース内に定義され、現行のセッションの間のみ値を保持できます。ただし、更新およびコミットすると、ワークシートの定義は保存されます。セッションを終了するか、別のワークスペースに切り替えると、データ値は廃棄されます。

AW workspace

ワークシートを定義する先の、アタッチされたワークスペースの名前。ワークシートは、そのディメンションと同じワークスペースに定義されている必要があります。この引数の一般情報は、DEFINEコマンドを参照してください。

SESSION

オブジェクトを現行のセッションでのみ存在させることを指定します。セッションの終了時に、オブジェクトは廃棄されます。SESSIONで指定される動作は、TEMPキーワードで指定される動作とは異なり、TEMPキーワードでは値は一時的ですが、オブジェクト定義は作成したワークスペースに保存されます。

使用上の注意

ワークシート・ディメンション

ワークシートは常に、ワークシートの行と列を表す2つのディメンションによりディメンション化される必要があります。ワークシート行およびワークシート列のディメンションは、Oracle OLAPにより自動で作成することも、明示的に作成することもできます。

- ワークシート行ディメンションおよびワークシート列ディメンションを作成して名前をDEFINE WORKSHEETのcolumn-dimおよびrow-dim引数に指定しない場合は、Oracle OLAPにより、自動で次のディメンションが作成されます。

- ワークシート行のための、1から63までの値を持つWKSROWというINTEGERディメンション

- ワークシート列のための、1から63までの値を持つWKSROWというINTEGERディメンション

注意:
アタッチされているいずれかのワークシートにWKSCOLおよびWKSROWがすでに存在する場合、Oracle OLAPは、現行のワークシート内にこれらを作成できません。この場合、DEFINE WORKSHEETコマンドは、これらのデフォルト・ディメンションを使用するワークシートの作成に失敗します。(また、WKSCOLとWKSROWは、DESCRIBEによって生成されたワークシートの説明には表示されないことに注意してください。)

- ワークシート行およびワークシート列のディメンションは、他の単純なディメンションを作成する場合と同じように、次の文を発行することで作成できます。

1. DEFINE DIMENSION(単純)文を使用して、2つの単純なINTEGERディメンションを作成します。一方のディメンションは行数、もう一方は列数を表します。

2. MAINTAIN文を使用して、行数を表す整数を持つディメンションと列数を表す整数を持つもう1つのディメンションを移入します。

例

例9-105 ワークシートの定義

これらの文により、columnsおよびrowsでディメンション化された、travelexpという一時ワークシートが定義されます。

DEFINE itemsheet WORKSHEET
DEFINE columns INT DIMENSION
MAINTAIN columns ADD 5
DEFINE rows INT DIMENSION
MAINTAIN rows ADD 10
DEFINE travelexp WORKSHEET <columns rows> TEMPORARY

例9-106 スプレッドシート・データのインポート

スプレッドシートからワークシートへデータをインポートできます。すべてのセルが同じ型のデータを含む場合は、UNRAVELを使用して、1つの文でデータを変数へ転送できます。ワークシート・ディメンションをセルの小さいグループに制限し、UNRAVELを使用して各グループを個別の変数に転送することもできます。インポートしたデータをitemsheetというワークシートからitemsという変数へ転送するには、次の文を使用できます。

DEFINE itemsheet WORKSHEET
IMPORT itemsheet FROM dif FILE 'file name'
LIMIT WKSCOL TO FIRST 3
LIMIT WKSROW TO FIRST 10
items = UNRAVEL(itemsheet)

DELETE

DELETEコマンドは、アナリティック・ワークスペースから1つ以上のオブジェクトを削除するコマンドです。UPDATE文およびCOMMIT文を実行すると、削除が永続的になります。

オブジェクトを削除する前に、その関連オブジェクトをすべて削除しておく必要があります。たとえば、あるディメンションを削除する場合、そのディメンションによってディメンション化された変数を最初に削除する必要があります。また、PERMIT文により、アクセス権を変更する権限がないことが検出された場合、オブジェクトは削除できません。

ヒント:
オブジェクトの削除を試行するとエラー・メッセージが表示される場合、そのオブジェクトの名前が予約語である可能性があります。(予約語は、RESERVEDを使用して確認できます。)その場合は、RENAME文でオブジェクトに新しい名前を付けてから削除します。

構文

DELETE name... [AW workspace]

パラメータ

name...

空白またはカンマで区切られた、1つ以上のオブジェクトの名前。DELETEを実行すると、適切なワークスペースからこれらのオブジェクトの定義が削除されます。

修飾オブジェクト名を指定するかAW引数を使用すると、各オブジェクトを削除する先の、アタッチされたワークスペースを指定できます。ただし、同じDELETEコマンド内で、修飾オブジェクト名とAW引数の両方は使用できません。

注意:
削除するオブジェクトが、アタッチされている別のワークスペース内の既存オブジェクトと同じ名前を持つ場合でも、Oracle OLAPでは警告を行いません。また、NAMEディメンションがそのすべての値よりも少なく制限されている場合、DELETEコマンドを使用すると、DELETEによってNAMEのステータスが自動的にALLに設定されます。

AW workspace

指定したすべてのオブジェクトを削除する先の、アタッチされたワークスペースの名前。修飾オブジェクト名またはAW引数を使用してアナリティック・ワークスペースを指定しない場合、オブジェクトは現行のワークスペースから削除されます。

例

例9-107 ディメンションの削除

cityというディメンションおよびpopulationという変数を削除するとします。変数populationは、cityによりディメンション化されるか、それを使用する唯一のオブジェクトであるため、DELETEコマンドでこのディメンションの前にこの変数を指定すると、1つのコマンドでこれら両方を削除できます。

DELETE population city

この文で、populationの前にcityを指定すると、エラーが発生します。

DESCRIBE

DESCRIBEコマンドは、1つ以上のワークスペース・オブジェクトの定義を示すレポートを生成するコマンドです。DESCRIBEコマンドの出力に表示されるオブジェクト定義には、説明(LD)、時間ディメンションの値名書式(VNF)、FORMULAに関連付けられている式、PERMIT文で指定されたアクセス権、計算仕様の内容(プログラムまたはモデルの内容など)などがあります。DESCRIBEを使用すると、オブジェクトへのアクセス権や、アクセス権を変更する権限が付与されていない場合でも、オブジェクトの定義を表示できます。オブジェクト定義の一部には、レポートされないものがあります(「DESCRIBEの出力でレポートされない内容」を参照)。

構文

DESCRIBE [names]

パラメータ

names

空白またはカンマで区切られた、1つ以上のワークスペース・オブジェクトの名前。この引数を省略した場合、DESCRIBEはNAMEディメンションの現行のステータスにあるすべてのオブジェクトの定義を表示します。そのため、この引数を省略する場合は、DESCRIBEとLIMITコマンドを組み合せて使用することで、ワークスペース内の特定のオブジェクト・グループの定義をレポートできます(例9-109「すべてのリレーションに関する情報の表示」を参照)。

使用上の注意

DESCRIBEの出力でレポートされない内容

オブジェクト定義の一部は、DESCRIBEの出力に表示されません。

- オブジェクトへのアクセス権を変更する権限がPERMIT文によって拒否された場合は、DESCRIBEにはこのオブジェクトの定義に関連付けられたアクセス権が含まれません。

- ワークシート定義の場合、DESCRIBEレポートにはデフォルトのディメンションであるWKSCOLおよびWKSROWは含まれません。ただし、ユーザー定義ディメンションを使用してワークシートを定義した場合は、このユーザー定義ディメンションがレポートに含まれます。例9-110「ワークシートに関する情報の表示」を参照してください。

- オブジェクトに関連付けられたプロパティおよびトリガーは表示されません。オブジェクトに関連付けられたプロパティおよびトリガーを表示するには、FULLDSCプログラムを使用する必要があります。

- コンポジットまたは結合でデフォルトの索引タイプを使用するよう定義した場合、この情報は表示されません。

- 従来の1バイトまたは2バイト形式になっている、ディメンション化されたBOOLEAN変数は、WIDTH 1およびWIDTH 2としてリストされます。1ビット形式で作成されたBOOLEAN変数の幅は表示されません。

DESCRIBE出力を使用したオブジェクトの作成

DESCRIBEコマンドからの出力を使用すると、この出力の各行は有効な文であるため、他のワークスペースにオブジェクトを作成できます。たとえば、OUTFILE文を実行して後続の出力をファイルに送り、その後でDESCRIBEコマンドを実行できます。次に別のワークスペースにアクセスしてINFILE文を使用すると、DESCRIBE出力を読み取ることができます。これで、対象のワークスペースに同じオブジェクトが作成されます。

例

例9-108 変数に関する情報の表示

この例では、2つの変数salesおよびpriceの定義のレポートが生成されます。次の文

DESCRIBE sales price

によって、次の出力が生成されます。

DEFINE SALES VARIABLE DECIMAL <MONTH PRODUCT DISTRICT>
LD Sales Revenue
DEFINE PRICE VARIABLE DECIMAL <MONTH PRODUCT>
LD Wholesale Unit Selling Price

例9-109 すべてのリレーションに関する情報の表示

ワークスペース内にあるすべてのリレーションの定義を参照するとします。最初にOBJファンクションを使用して、NAMEディメンションを制限します。NAMEを制限したら、引数を指定しないでDESCRIBEコマンドを使用し、定義のレポートを生成します。次の文により、アナリティック・ワークスペース内のリレーションの説明が生成されます。

LIMIT NAME TO OBJ(TYPE) EQ 'RELATION'
DESCRIBE

DEFINE REGION.DISTRICT RELATION REGION <DISTRICT>
LD REGION for each DISTRICT
DEFINE DIVISION.PRODUCT RELATION DIVISION <PRODUCT>
LD DIVISION for each PRODUCT
DEFINE MLV.MARKET RELATION MARKETLEVEL <MARKET>
DEFINE MARKET.MARKET RELATION MARKET <MARKET>
LD Self-relation for the Market Dimension

OBJ(TYPE)によって返される値は必ず大文字であるため、一致する結果を得るには、LIMITコマンドで、'relation'ではなく'RELATION'を使用する必要があります。

例9-110 ワークシートに関する情報の表示

情報が表示されるワークシートのディメンションは、ユーザー定義ディメンションのみです。デフォルトのディメンションであるWKSCOLおよびWKSROWは、説明には含まれていません。次の文

DEFINE work1 WORKSHEET
DEFINE columns DIMENSION INTEGER
DEFINE rows DIMENSION INTEGER
DEFINE work2 WORKSHEET <columns rows>
DESCRIBE work1 work2

によって、次の出力が生成されます。

DEFINE WORK1 WORKSHEET
DEFINE WORK2 WORKSHEET <COLUMNS ROWS>

DO ... DOEND

DOおよびDOENDコマンドは、OLAP DMLプログラム内で、プログラムの1つ以上の文のグループをひとまとめにするコマンドです。DOおよびDOENDは、通常、次のいずれかをまとめるときに使用します。

- IFコマンドで指定した条件下で実行する一連の文

- FORまたはWHILEによって導入された繰返しループ内の一連の文

- SWITCHコマンドのCASEラベル

DO文は他のDO文の内側に置いて文のグループをネストできます。文グループの終了を示すためのDOENDが、それぞれのDO文に対応して存在するかぎり、必要な数のグループをネストできます。

構文

DO

statement1

...

statementN

DOEND

パラメータ

statement

1つ以上のOLAP DML文またはユーザー定義プログラム、あるいはその両方。

使用上の注意

TEMPSTAT文とDOEND文

プログラムのFORループ処理内部で、DO/DOEND句がTEMPSTATの後に続く場合、DOEND、BREAK、GOTOのいずれかが検出されると、ステータスはリストアされます。

例

例9-111 DOおよびDOENDとFOR文との組合せ

ROWコマンドを使用して、テントの売上数量を2か月ごとに示すレポートを生成するとします。monthディメンションの値ごとに繰り返し実行するROW文およびBLANK文をひとまとめにするには、DO ... DOENDを使用します。次のようなプログラムを作成できます。

LIMIT month TO 'Jan96' to 'Feb96'
ROW district
ROW UNDER '-' VALONLY name.product
FOR month
DO
ROW INDENT 5 month WIDTH 6 UNITS
BLANK
DOEND

このプログラムによって生成される出力は、次のとおりです。

BOSTON
3-Person Tents
--------------
Jan96              307
Feb96              209

EDIT

EDITコマンドは、OLAP Worksheetの編集ウィンドウを表示するコマンドです。このコマンドを使用できるのは、OLAP Worksheetを使用してOracle OLAPにアクセスする場合のみです。

OLAP Worksheetの編集ウィンドウの詳細は、OLAP Worksheetのヘルプを参照してください。

構文

EDIT {PROGRAM|MODEL|AGGMAP|FORMULA} object-name

パラメータ

PROGRAM

MODEL

AGGMAP

FORMULA

編集の対象となるオブジェクトが、プログラム、モデル、aggmap、計算式のいずれであるかを示します。

object-name

既存のプログラム、モデル、aggmap、計算式のいずれかの名前を指定するテキスト式。これらのオブジェクトのいずれかを編集するには、その前にDEFINE文を使用して、アナリティック・ワークスペース内に対象のオブジェクトを作成します。

使用上の注意

新しく定義されたAggmapの編集による割当て仕様のコーディング

定義直後のaggmapの中身は空で、型はNAです。型が指定されていないaggmapに対してEDITコマンドを使用すると、OLAP Worksheetによって自動的にAGGMAP文が挿入され、そのaggmapは集計仕様になります。

そのため、aggmapを割当て仕様として使用する予定がある場合は、OLAP Worksheetの編集ウィンドウでaggmapを開く前に、次の文でそのaggmapを割当て仕様に指定します。

CONSIDER aggmap-name
ALLOCMAP 'END'

例

例9-112 プログラムの編集

次の文をOLAP Worksheetで実行すると、myprogプログラムがOLAP Worksheetの編集ウィンドウに表示されます。

EDIT myprog

例9-113 モデルの編集

次の文をOLAP Worksheetで実行すると、myModelというモデルがOLAP Worksheetの編集ウィンドウに表示されます。

EDIT MODEL myModel

EQ

EQコマンドは、定義済の計算式に新しい式を指定するコマンドです。EQを使用して式を計算式の定義に割り当てるには、この定義が最新の定義、あるいは現行のセッション中に検討された定義である必要があります。そうでない場合は、まずCONSIDERコマンドを使用して現行の定義にする必要があります。

EQコマンドの代替コマンドはEDIT FORMULAコマンドであり、OLAP Worksheet内でのみ使用できます。EDIT FORMULAコマンドを実行すると、計算式の計算の対象となる式を追加、削除または変更できる編集ウィンドウが開きます。

ここで説明するEQコマンドを、同じ型の値を比較するときに使用するEQ演算子と混同しないように注意してください。

構文

EQ [expression]

パラメータ

expression

計算式を使用したときに値を生成するために実行される計算。式を指定しないと、式はEQコマンドによってNAに設定されます。計算式のテキストは大文字に変換されません。

使用上の注意

データ型とディメンション

通常、新しい式のデータ型とディメンションは、計算式の定義で指定したデータ型とディメンションに一致します。一致していない場合、得られた値は計算式のデータ型に変換され、結果が強制的に計算式のディメンション性に合せられます。DESCRIBEコマンドを使用すると、計算式のデータ型とディメンションが表示されます。新しい式のデータ型とディメンションを確認するには、式を解析します。例9-115「PARSEとEQの使用方法」を参照してください。

EQコマンドによる計算式のデータ型またはディメンションの変更はできません。これらを変更するには、計算式を削除してから再定義する必要があります。

例

例9-114 EQの追加

この例では、次のように定義されたf1という計算式に新しい式を指定します。

DEFINE f1 FORMULA INTEGER <month line division>
EQ actual * 2

次の文

CONSIDER f1
EQ actual * 3
DESCRIBE f1

計算式の定義と新しいEQが次のように生成されます。

DEFINE F1 FORMULA INTEGER <MONTH LINE DIVISION>
EQ actual * 3

例9-115 PARSEとEQの使用方法

次の例は、ワークスペースにline.totalsという名前の計算式がすでに存在していることを前提としています。PARSE文およびSHOW INFO文により、式のディメンション性とデータ型が確認されます。CONSIDER文およびEQ文により、式がline.totals計算式に割り当てられます。line.totals計算式の定義は次のとおりです。

DEFINE line.totals FORMULA DECIMAL <year line>

次の文

PARSE 'total(actual line year)'
SHOW INFO(PARSE DIMENSION)

によって、次の出力が生成されます。

YEAR
LINE

次の文

SHOW INFO(PARSE DATA)

によって、次の出力が生成されます。

DECIMAL

INFO(PARSE)からの出力は、この式のディメンション性とデータ型がline.totals計算式と同じであることを示しています。次の文

CONSIDER line.totals
EQ TOTAL(actual line year)
DESCRIBE line.totals

line.totalsの定義とその新しいEQが表示されます。

DEFINE LINE.TOTALS FORMULA DECIMAL <YEAR LINE>
EQ total(actual line year)

EXPORT

EXPORTコマンドは、ワークスペース・オブジェクトをアナリティック・ワークスペースから外部ファイルにコピーするコマンドです。EXPORTを使用すると、データとオブジェクト定義の両方をワークスペースからEIFファイルにコピーしたり、OLAP DMLワークシート・オブジェクトをスプレッドシート・ファイルにコピーしたりできます。

EXPORTコマンドの構文は、EIFファイルまたはスプレッドシート・ファイルを生成するために使用されるかどうかによって異なるので、次のように2つに分けて説明します。

- EXPORT(EIF)

- EXPORT(スプレッドシート)

EXPORT(EIF)

EXPORT(EIFへ)コマンドは、データおよび定義をOracle OLAPアナリティック・ワークスペースからEIFファイルにコピーします。EXPORTは、コマンドに指定しなくても、エクスポートされるデータのすべてのディメンションもコピーします。Oracle OLAPにおけるデータのディメンションのステータスが、エクスポートされる値を決定します。

ヒント:
EIFファイルのインポートおよびエクスポートの方法を決定するオプションは複数あります。これらのオプションは、「EIFオプション」に記載されています。

EXPORT(EIFへ)は一般的にIMPORT(EIF)とともに使用して、Oracle OLAPワークスペースを別のOracle OLAPワークスペースにコピーします。オブジェクトをソース・ワークスペースからEIFファイルにエクスポートし、次にそのオブジェクトをEIFファイルからターゲット・ワークスペースにインポートします。ソースおよびターゲットのワークスペースが存在する場所は、同じプラットフォームでも異なるプラットフォームでも構いません。

構文

EXPORT export_item TO EIF FILE file-name [LIST] [NOPROP] -

[NOREWRITE|REWRITE] [FILESIZE n [K, M, or G]] -

[NOTEMPDATA] [NLS_CHARSET charset-exp] [AGGREGATE | NOAGGR] -

[API | NOAPI]

ここで、export_itemは次のいずれかです。

ALL

name [AS newname]

exp [SCATTER AS scattername [TYPE scattertype] [EXCLUDING (concatbasedim . . .)]

exp AS name [EXCLUDING (concatbasedim . . .)]

パラメータ

ALL

現在NAMEのステータスにあるオブジェクトをすべてOracle OLAPがエクスポートすることを指定します(したがって、ワークスペースのすべてのオブジェクトとは限りません)。

注意:
キューブのメタデータをエクスポートする場合(つまり、デフォルトのAPIキーワードが有効になっている場合)、ワークスペースのすべてのオブジェクトをエクスポートする必要があります(つまり、export_itemでALLキーワードを指定する必要があります)。ワークスペースの一部のオブジェクトのみをエクスポートする場合は、キューブのメタデータをエクスポートすることはできません。

name

エクスポートされるアナリティック・ワークスペース・オブジェクトまたはオプションの名前。複数の名前を指定してエクスポートできます。

AS newname

アナリティック・ワークスペース・オブジェクトまたはオプションの新しい名前を指定します。式、ローカル変数またはローカル値セットを指定する場合、IMPORT(EIF)がデータの受取りに使用するオブジェクトの名前を指定するためにAS nameを使用する必要があります。

重要:
ディメンションの名前は変更できません。

exp

計算またはエクスポートされる式。複数の名前を指定してエクスポートできます。

SCATTER AS scattername [TYPE scattertype]

複数のパスによってメモリーに書き込む必要があるような大規模な多次元オブジェクトをエクスポートする場合、SCATTER AS scatternameを使用してファイルI/Oのパフォーマンスを向上できます。最初に1つまたは2つの新しい1次元のテキスト変数(scatternameおよびscattertype)を定義し、テキスト値とそれに対応するデータ型をscatternameに割り当てる必要があります。SCATTER AS scatternameを使用すると、scatternameで指定したslicesの別々の変数として多次元式がOracle OLAPによってエクスポートされます。各スライス変数が同じデータ型である場合は、expをそのデータ型にするのみなので、TYPE scattertypeを使用する必要がありません。

EXCLUDING (concatbasedim  . . .)

EXCLUDING句は、name引数で指定する連結ディメンションにのみ適用されます。concatbasedimに指定する値は、Oracle OLAPがエクスポートしない連結のベース・ディメンションを指定します。

ALL

現在NAMEのステータスにあるオブジェクトをすべてOracle OLAPがエクスポートすることを指定します(したがって、ワークスペースのすべてのオブジェクトとは限りません)。

TO EIF FILE

EIFファイルを作成することを示します。

file-name

出力が書き込まれるファイルの名前を表すテキスト式。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。

注意:
ディレクトリ・オブジェクトはデータベースで定義され、ディレクトリおよびディレクトリ内のファイルへのアクセスを制御します。CDAコマンドを使用すると、カレント・ディレクトリ・オブジェクトの特定や指定を行うことができます。使用するデータベース・ユーザー名で読取りおよび書込み可能なファイルがあるディレクトリ・オブジェクトへのアクセス権については、Oracle DBAに問い合せてください。

LIST

エクスポートが開始されると、各オブジェクトの定義を現行の出力ファイルに送信します。ディメンションの場合、EXPORTはエクスポートされている値の数を示し、コンポジットの場合、ディメンション値の組合せの数を示します。さらに、2分ごとおよびエクスポート処理後の合計読取りバイト数を示すメッセージも生成されます。

NOPROP

PROPERTYを使用して各オブジェクトに割り当てたプロパティを、EIFファイルに書き込まないようにします。

NOREWRITE

REWRITE

ターゲット・ファイルがすでに存在する場合にEXPORTがそれを上書きするかどうかを指定します。NOREWRITE(デフォルト)は、既存のターゲット・ファイルをそのままにして現行の出力ファイルにエラー・メッセージを送信します。REWRITEは、EXPORTが既存のファイルを新しいEIFファイルに置き換えます。

FILESIZE n [K|M|G]

EIFファイルの各コンポーネント・ファイル(メイン・ファイルおよび拡張ファイル)の最大サイズを設定します。エクスポート処理に伴ってファイルのサイズがFILESIZEの値を超えると、あるいは、現行のディスクまたは場所に空き領域がなくなると、Oracle OLAPはEIF拡張ファイルを作成します。「EIF拡張ファイル」を参照してください。

FILESIZEは、その設定後に作成されるコンポーネント・ファイルに影響します。その設定より前のコンポーネント・ファイルのサイズは、ファイルが作成されたときのFILESIZEの設定またはディスクがいっぱいになったときのファイルのサイズによって決まるので様々です。

K、M、Gのいずれも指定しない場合、nに対して指定する値はバイトとして解釈されます。値nの後にK、M、Gのいずれかを指定すると、この値はそれぞれKB、MB、GBと解釈されます。

FILESIZEに設定可能な値は81,920バイト(80KB)から2,147,479,552バイト(2GB)です。

NOTEMPDATA

TEMP変数のデータをEIFファイルに書き込まないようにします。

NLS_CHARSET charset-exp

file-nameによって指定されるファイルにテキスト・データをエクスポートする際にOracle OLAPが使用するキャラクタ・セットを指定しますが、これによって、Oracle OLAPはデータをそのキャラクタ・セットに正確に変換できます。この引数は最後に指定する必要があります。この引数を省略すると、Oracle OLAPはNLS_LANGオプションに記録されているデータベース・キャラクタ・セットでデータをエクスポートします。

AGGREGATE

集計したデータをエクスポートします。(デフォルトの動作)

NOAGGR

集計したデータをエクスポートしません。

API

(デフォルト)指定した項目に対して定義されているキューブのメタデータをエクスポートします。

NOAPI

指定した項目に対して定義されているキューブのメタデータをエクスポートしません。

使用上の注意

異なるプラットフォーム間でのインポートとエクスポート

コンピュータ間でEIFファイルを転送する場合、バイナリ転送を使用してプラットフォーム間のファイル形式の非互換性の問題を回避します。EIFファイルは、EIFVERSIONをターゲット・ワークスペースのリリース番号以下のリリースに設定して作成する必要があります。ターゲット・リリース番号の確認に関する詳細は、EIFVERSIONオプションを参照してください。

リレーションのエクスポート

リレーションをエクスポートする場合、EXPORTは関連ディメンションに関する定義およびステータスにある値、ならびにそのリレーションのディメンションをエクスポートします。

結合ディメンションのエクスポート

結合ディメンションをエクスポートする場合、ベース・ディメンションのステータスと結合ディメンションのステータスが一致することを確認してください。結合ディメンションとベース・ディメンションには暗黙的なリレーションがあるので、Oracle OLAPは結合ディメンションとともにベース・ディメンションをエクスポートしますが、関連ベース値もステータスにない場合、現行のステータスの結合ディメンション値をすべてエクスポートできません。

ディメンション・サロゲートのエクスポート

ディメンション・サロゲートをエクスポートする場合、Oracle OLAPはそのサロゲートのディメンションもエクスポートします。詳細は、「ディメンション・サロゲートのインポートとエクスポート」を参照してください。

ワークスペース・サイズの削減

多数のオブジェクトまたはディメンション値を追加した後に削除した場合、EXPORT(EIFから)コマンドをIMPORT(EIF)とともに使用して、アナリティック・ワークスペースから余分な領域を削除できます。多くの場合、これによってワークスペースが十分に小さくなります。これを行うには、ALLキーワードとともにEXPORTコマンドを使用してすべてのデータをEIFファイルに入れ、そのEIFファイルを異なる名前で作成した新しいワークスペースにインポートします。次に、古いワークスペースを削除し、そのワークスペースで使用していたのと同じワークスペース別名が新しいワークスペースを指すようにします。

結合ディメンションの型の維持

HASH、BTREEまたはNOHASH結合ディメンションをEIFファイルにエクスポートする場合、EIFファイルにはその定義とともに結合型がエクスポートされます。その結合ディメンションをアナリティック・ワークスペースにインポートすると、新しいディメンションまたはその結合型をすでに使用しているディメンションにインポートしたときに、Oracle OLAPはその結合型を維持します。同じ結合型を使用しない既存のディメンションにそのディメンションをインポートしたときには、Oracle OLAPはEIFファイルに保存された元の結合型を維持しません。

名前のないコンポジットのエクスポート

定義に名前のないコンポジットがあるオブジェクトをエクスポートまたはインポートすると、そのコンポジットはオブジェクトとともに自動的にエクスポートまたはインポートされます。名前のないコンポジットの単独でのインポートやエクスポートはできません。

EIF拡張ファイル

EIF拡張ファイル名の構造はfilename.ennnで、ここで、nnnは001から始まる3桁の数字です。たとえば、export.eifというEIFファイルがある場合、拡張ファイルの名前は、export.e001やexport.e002などになります。EIFSHORTNAMESオプションを使用すると、拡張子を3文字に設定できます。EIFEXTENSIONPATHオプションを使用して異なるディレクトリ・オブジェクトを指定しないかぎり、拡張ファイルは元のEIFファイルと同じディレクトリ・オブジェクトに作成されます。

SEGWIDTH設定情報の維持

CHGDFNコマンドのSEGWIDTHキーワードを使用して変数セグメントの長さを指定した場合、セグメント情報は自動的にはエクスポートおよびインポートされません。SEGWIDTH設定を維持するには、ワークスペース全体をエクスポートして新しく作成したワークスペースにワークスペース・オブジェクトのみをインポートし、セグメント設定を指定してから変数データを新しいワークスペースにインポートします。

2つの異なるワークスペースから同じ名前のオブジェクトをエクスポートする方法

2つの異なるワークスペースから同じ名前の2つのオブジェクトをエクスポートする場合、ASキーワードを使用してエクスポートすることにより、EIFファイルでそのオブジェクトの一方の名前を変更する必要があります。EIFファイルのオブジェクトには重複した名前は付けられません。

PERMIT_READプログラムまたはPERMIT_WRITEプログラムのエクスポート

PERMIT_READプログラムまたはPERMIT_WRITEプログラムの内容は、エクスポート時に空になります。これらのプログラムの内容を正常にアナリティック・ワークスペースにコピーしたりアナリティック・ワークスペースからコピーしたりするには、EXPORT(EIFへ)を使用する前にプログラムの名前を変更してから、IMPORT(EIFから)を使用してプログラムをアナリティック・ワークスペースにコピーし、その後で再度PERMIT_READまたはPERMIT_WRITEという名前を付けます。

TEXT値とNTEXT値のエクスポート

TEXT値およびNTEXT値はエクスポートやインポートが可能です。どちらのデータ型も単一のEIFファイルにエクスポートされます。

- エクスポートされるTEXT値は、EXPORTコマンドでファイルに指定されるキャラクタ・セットを使用してEIFファイルに格納されます。

- エクスポートされるNTEXT値は、NTEXT(UTF8 Unicode)としてEIFファイルに格納されます。

- TEXTオブジェクトにインポートされるNTEXT値は、データベース・キャラクタ・セットに変換されます。その結果、NTEXT値がデータベース・キャラクタ・セットで表せない場合にデータが失われることがあります。

- NTEXTオブジェクトにインポートされるTEXT値は、NTEXT(UTF8 Unicode)キャラクタ・セットに変換されます。

例

例9-116 変数のエクスポート

ステータスにある値とともにactualおよびbudgetという名前の2つの変数のディメンションを、現行Oracle OLAPワークスペースからカレント・ディレクトリ・オブジェクトのfinance.eifという名前のディスク・ファイルにエクスポートするとします。次の文を使用します。

EXPORT actual budget TO EIF FILE 'finance.eif'

例9-117 ラージ・オブジェクトのエクスポート

複数のパスによってメモリーに書き込む必要があるような多次元のラージ・オブジェクトをエクスポートするとします。ファイルI/Oのパフォーマンスを向上させるために、1次元の変数を作成し、多次元変数を細かくスライスする方法をOracle OLAPに認識させます。また、このラージ・オブジェクトはsales変数であり、month、productおよびdistrictによってディメンション化されているとします。salesをスライスする方法を指定するために、次の文に示すように1次元の変数を作成します。

DEFINE salescatter VARIABLE TEXT <district>

salescatterはdistrictによってディメンション化されるので、この文によってsalesを複数のdistrictスライスに分割するようにOracle OLAPに認識させます。districtには6つの値があるので、salesは6つのスライスに分割されます。各スライスは名前を付ける必要があります。そのために、salescatterの各districtに値を割り当てます。次に、必要に応じてQDR(修飾データ参照)などを使用して、各スライスに適切なデータ型を割り当てます。

SALESをエクスポートするために、次の文を実行します。

EXPORT sales SCATTER AS salescatter TYPE TYPEVAR TO EIF FILE 'slice.eif'

変数をインポートするために、次の文のように必要な名前の付いたスライスを指定します。

IMPORT dist1 dist2 dist3 dist4 dist5 dist6 FROM EIF FILE 'slice.eif'

あるいは、次のようにすべての変数をインポートできます。

IMPORT ALL FROM EIF FILE 'slice.eif'

EXPORT(スプレッドシート)

EXPORT(スプレッドシートへ)コマンドは、作成したOracle OLAP Worksheetオブジェクトをスプレッドシート・ファイルにコピーし、それを適切な形式に自動的に変換します。アナリティック・ワークシートのディメンションが、スプレッドシート・ファイルの列および行を形成します。そのディメンションの現行のステータスによって、ワークシートのエクスポートされる部分が決定されます。

アナリティック・ワークシートをEIFファイルにエクスポートすることもできます(EXPORT(EIF)を参照)。EXPORT(スプレッドシートへ)は、一般に、Lotus 1-2-3、Symphonyなどの他のソフトウェアで読取り可能なファイルにOracle OLAPワークスペースの一部をコピーするために使用します。

構文

EXPORT worksheetname TO {WKS|WK1|WRK|WR1|DIF} FILE file-name -

[STATRANK] [NOREWRITE|REWRITE] [NLS_CHARSET charset-exp]

パラメータ

worksheetname

作成済のOracle OLAP Worksheetオブジェクト。1つのEXPORT(スプレッドシートへ)コマンドは、1つのみのworksheetnameを1つのスプレッドシート・ファイルにエクスポートします。

WKS

Oracle OLAP WorksheetをLotus 1-2-3のファイル(バージョン1)にエクスポートすることを示します。

WK1

Oracle OLAP WorksheetをLotus 1-2-3のファイル(バージョン2)にエクスポートすることを示します。

WRK

Oracle OLAP WorksheetをSymphonyのファイル(バージョン1.0)にエクスポートすることを示します。

WR1

Oracle OLAP WorksheetをSymphonyのファイル(バージョン1.1)にエクスポートすることを示します。

DIF

Oracle OLAP Worksheetをデータ交換フォーマット・ファイルにエクスポートすることを示します。

FILE file-name

FILEでは、作成するファイルを指定します。file-nameには、作成するファイルの名前を表すテキスト式を指定します。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。

注意:
ディレクトリ・オブジェクトはデータベースで定義され、ディレクトリおよびディレクトリ内のファイルへのアクセスを制御します。CDAコマンドを使用すると、カレント・ディレクトリ・オブジェクトの特定や指定を行うことができます。使用するデータベース・ユーザー名で読取りおよび書込み可能なファイルがあるディレクトリ・オブジェクトへのアクセス権については、Oracle DBAに問い合せてください。

STATRANK

ワークシート・データとともにエクスポートされる行番号および列番号がWKSROWおよびWKSCOLディメンションの現行のステータスのランキングになることを指定します。

NOREWRITE

(デフォルト)ターゲット・ファイルがすでに存在する場合は、そのファイルを上書きせず、エラーを表示することを指定します。

REWRITE

ターゲット・ファイルがすでに存在する場合は、そのファイルを上書きすることを指定します。

NLS_CHARSET charset-exp

file-nameによって指定されるワークシート・ファイルにテキスト・データをエクスポートする際にOracle OLAPが使用するキャラクタ・セットを指定しますが、これによって、Oracle OLAPはデータをそのキャラクタ・セットに正確に変換できます。

指定可能なキャラクタ・セットについては、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

この引数は最後に指定する必要があります。この引数を省略すると、Oracle OLAPはNLS_LANGオプションに記録されているデータベース・キャラクタ・セットでデータをエクスポートします。

例

例9-118 エクスポート前の制限

この例では、EXPORTコマンドの前でディメンションWKSCOLおよびWKSROWを制限して価格ワークシートの一部をエクスポートします。

LIMIT WKSCOL TO 2 TO 4
LIMIT WKSROW TO 3 TO 4
EXPORT pricing TO WRK FILE 'price1.wrk'

FCCLOSE

FCCLOSEコマンドは、予測コンテキストを閉じるコマンドです。Oracle OLAPが予測コンテキストを閉じると、FCEXECコマンドで指定される変数のデータのみがアプリケーションで使用可能になります。Oracle OLAPは、一時ページも含めて予測に関連付けられた他のすべてのデータを消去します。

FCCLOSEコマンドは、「予測プログラム」に示すように他のOLAP DML文と組み合せて使用する必要があります。

構文

FCCLOSE handle-expression

パラメータ

handle-expression

FCOPENファンクションを使用して前に開いた予測コンテキストへのハンドルであるINTEGER式。

例

予測プログラムの例は、例9-119「予測プログラム」を参照してください。

FCEXEC

FCEXECコマンドは、予測のためにFCSETコマンドによって指定されるパラメータ・オプションに基づいて予測を実行するコマンドです。FCEXECコマンドは、時間ディメンション以外の式のディメンションをすべて暗黙的にループ処理します。

FCEXECコマンドは、「予測プログラム」に示すように他のOLAP DML文と組み合せて使用する必要があります。

構文

FCEXEC handle-expression [choice] time-series-expression

ここで、choiceは、次のいずれか1つ以上です。

TIME time-dimension
TRADINGDAYS expression
INTO name
SEASONAL name
SMSEASONAL name
BACKCAST

パラメータ

handle-expression

FCOPENファンクションを使用して前に開いた予測コンテキストへのハンドルを指定するINTEGER式。

TIME time-dimension

時間ディメンションの名前。time-series-expressionのディメンションの1つがDAY、WEEK、MONTH、QUARTERまたはYEAR型である場合、このパラメータを指定する必要はありません。

TRADINGDAYS expression

time-series-expressionの時間データ型(DAY、WEEK、MONTHまたはYEAR)の時間単位における営業日数を指定するINTEGER式。デフォルトでは、この値は時間単位における合計日数です。

INTO name

予測エンジンが予測データを格納するOracle OLAP変数の名前。この変数は、時間ディメンション、およびステータスにある複数の値を持つtime-series-expressionのその他のディメンションによってディメンション化されている必要があります。(この変数は追加ディメンションを持つことができます。ただし、この場合、Oracle OLAPが予測を実行するときに、それぞれの追加ディメンションをディメンションのステータス・リストの最初の値に制限します。)

重要:
INTOを指定せず、time-series-expressionがOracle OLAP変数を指す場合、予測エンジンは入力変数に予測の出力データを移入するので、元のデータが上書きされます。

SEASONAL name

予測エンジンが季節係数を表すデータを移入する変数の名前。この変数は、時間ディメンション、およびステータスにある複数の値を持つtime-series-expressionのその他のディメンションによってディメンション化されている必要があります。この変数は、時間ディメンション、およびステータスにある複数の値を持つtime-series-expressionのその他のディメンションによってディメンション化されている必要があります。(この変数は追加ディメンションを持つことができます。ただしこの場合Oracle OLAPは、予測エンジンが予測を実行するときに、それぞれの追加ディメンションをディメンションのステータス・リストの最初の値に制限します。)

SMSEASONAL name

予測エンジンが平滑季節係数を表すデータを移入する変数の名前。予測エンジンは係数を1サイクルのみ生成し、その値をステータスにある最初の期間から始まるこの変数に格納し、他のすべての値はNAに設定されます。この変数は、時間ディメンション、およびステータスにある複数の値を持つtime-series-expressionのその他のディメンションによってディメンション化されている必要があります。(この変数は追加ディメンションを持つことができます。ただしこの場合Oracle OLAPは、予測エンジンが予測を実行するときに、それぞれの追加ディメンションをディメンションのステータス・リストの最初の値に制限します。)

BACKCAST

BACKCASTキーワードは、予測エンジンが適合履歴データを返すことを指定します。通常、このデータは履歴期間のサブセット(適合ウィンドウともいう)でのみ使用可能です。予測エンジンは、適合ウィンドウ以外の履歴期間に対応するデータの値をNAに設定します。

重要:
BACKCASTの値を指定してINTO変数の値を指定しない場合、予測エンジンはバックキャスト・データをソース変数に移入するので、元のデータは上書きされます。

time-series-expression

FCEXECが値を計算するデータを指定する式。time-series-expressionは、time-dimensionによってディメンション化される数式である必要があります。time-series-expressionは、他のディメンションによってディメンション化することもできます。その場合、FCEXECは時間ディメンション以外の式のディメンションをすべて暗黙的にループ処理します。time-series-expressionの最大ステータス長は5000です。

使用上の注意

単一値の予測

FCEXECコマンドは、時間ディメンション以外の時系列式のすべてのディメンションを暗黙的にループ処理します。多次元の時系列式の値を1つのみ予測する場合、FCEXECコマンドを実行する前に、すべての非時間ディメンションのステータスを単一の値に制限する必要があります。

例

例9-119 予測プログラム

fcin1という名前の入力変数にあるデータから予測を行うautofcstという名前のプログラムを定義するとします。fcin1変数は、timedimという名前の時間ディメンションによってディメンション化されます。autofcstプログラムの定義および仕様は、次のとおりです。

DEFINE autofcst PROGRAM
PROGRAM
" Using the Automatic forecasting method
" Suppose you want to create a forecast from the data in
" an input variable named fcin1 that is dimensionsed by
" a time dimension named timedim.
"
" Open a forecasting context
hndl = FCOPEN('MyForecast')
" Initialize the target variables
fcout1 = NA
fcseas1 = NA
fcsmseas1 = NA
" Specify that the forecast be of the AUTOMATIC type
fcset hndl method 'automatic'
" Execute the forecast
FCEXEC hndl time timedim INTO fcout1 -
seasonal fcseas1 smseasonal fcsmseas1 backcast fcin1
" Create a report showing the input and output of the forecast
REPORT DOWN timedim fcin1 fcout1 fcseas1 fcsmseas1
" Run a program named queryall to retrieve the characteristics
" of the forecasting trials
QUERYALL
" Close the forecasting context
FCCLOSE hndl
END

autofcstプログラムは、予測コンテキストを開いて、予測のオプションのAUTOMATICへの設定、予測されたデータに関するレポート、およびOracle OLAPが使用する方法を決定するために実行した様々な試行の特性に対する問合せとレポートを行い、予測コンテキストを閉じます。

autofcstプログラムには、予測への入力および予測からの出力に関するレポートを表示する次のレポート・コマンドがあります。

REPORT DOWN timedim fcin1 fcout1 fcseas1 fcsmseas1

この文によって作成されるサンプル・レポートを次に示します。

TIMEDIM          FCIN1      FCOUT1    FCSEAS1   FCSMSEAS1
-------------- ---------- ---------- ---------- ----------
Jan97                  NA         NA 1.06725482 1.02926773
Feb97                  NA         NA .978607917 .945762221
Mar97                  NA         NA 1.12699278 .860505188
Apr97                  NA         NA .576219022 .905284834
May97                  NA         NA .920601317 .907019312
Jun97                  NA         NA 0.91118344  1.0580697
Jul97                  NA         NA 1.07886483 1.05597234
Aug97                  NA         NA 1.08101034   1.054612
Sep97                  NA         NA 1.08077427 1.05361672
Oct97               2,914         NA 1.08351799 1.05380407
Nov97               2,500         NA 1.01126778 1.04504316
Dec97               2,504         NA 1.08370549 1.03104272
Jan98               3,333         NA         NA         NA
Feb98               2,512         NA         NA         NA
Mar98               2,888         NA         NA         NA
...                 ...           ...        ...        ...
Jan01                  NA 3,371.7631         NA         NA
Feb01                  NA 2,736.4811         NA         NA
Mar01                  NA 3,408.3656         NA         NA
Apr01                  NA 714.277175         NA         NA
May01                  NA 2,502.9315         NA         NA
Jun01                  NA 3,195.3626         NA         NA
Jul01                  NA 3,911.6058         NA         NA
Aug01                  NA  4,000.651         NA         NA
Sep01                  NA 4,220.2658         NA         NA
Oct01                  NA 3,416.0208         NA         NA
Nov01                  NA 2,827.3943         NA         NA
Dec01                  NA 2,990.8629         NA         NA

queryallプログラムとその出力から作成されたサンプル・レポートは、例7-87「予測の問合せ」に示してあります。

FCSET

FCSETコマンドは、FCOPEN文で作成した予測コンテキストを実行する際に、Geneva Forecastingエンジンに使用させたい特性を指定するコマンドです。

FCSET文は、「予測プログラム」に示すように他のOLAP DML文と組み合せて使用する必要があります。

構文

FCSET handle-expression forecast-characteristic

ここで、forecast-characteristicの構文は次のとおりです。

[ALLOCLAST {YES|NO}]

[ALPHA {MAX|MIN|STEP} decimal]...

[APPROACH {'APPAUTO'|'APPMANUAL']

[BETA {MAX|MIN|STEP} decimal]...

[COMPSMOOTH {YES|NO}]

[CYCDECAY {MAX|MIN} decimal]...

[GAMMA {MAX|MIN|STEP} decimal]...

[HISTPERIODS integer]

[MAXFACTOR decimal]

[METHOD 'method']

[MINFCFACTOR decimal]

[MPTDECAY {MAX|MIN} decimal]...

[NTRIALS integer]

[PERIODICITY cycle-spec]

[RATIO decimal]

[SMOOTHING {YES|NO}]

[TRANSFORM {'TRNOSEA'|'TRSEA'|'TRMPT'}]

[TRENDHOLD {MAX|MIN|STEP} decimal]...

[WINDOWLEN integer]

パラメータ

handle-expression

これから問い合せる予測コンテキスト、およびFCOPENファンクションを使用して前に開いた予測コンテキストへのハンドルであるINTEGER式。

ALLOCLAST {NO|YES}

予測エンジンで過調整のリスクを減少させるのに、最後のサイクルの割当と最後のサイクルの予測のどちらの方法を使用するかを指定します。

- NOを指定すると、予測エンジンでは最後のサイクルの予測が行われます。(デフォルト)

- YESを指定すると、予測エンジンではサイクルの1つの時間間隔に対する平均値のみが予測されます。その平均値は係数で乗算され、その時間間隔の残りの各ポイントに与えられます。たとえば、最後のサイクルが24時間の時間間隔である場合、1時間の平均値のみが予測され、それに24の1時間単位の係数を乗算して各時間の値に与えられます。

ALPHA {MAX|MIN|STEP} decimal

単純指数平滑法、二重指数平滑法およびHolt-Winters予測法でベースライン・パラメータとして使用されるアルファの値を指定します。

- ALPHA MAX decimalではアルファの最大値を指定します。decimalには、0.0から1.0までの任意の10進値を指定できます。decimalのデフォルト値は0.3です。

- ALPHA MIN decimalではアルファの最小値を指定します。decimalには、0.0から1.0までの任意の10進値を指定できます。decimalのデフォルト値は0.1です。

- ALPHA STEP decimalでは、予測エンジンがアルファの値を決定する際に使用する間隔の値を指定します。decimalには、0.05から0.2までの範囲にあり、かつALPHA MAXの値とALPHA MINの値の差をちょうど割り切る任意の10進値を指定できます。decimalのデフォルト値は0.1です。

APPROACH {'APPAUTO'|'APPMANUAL'}

予測エンジンにおける予測をどのような方法で実行するかを指定します。

- 'APPAUTO'はデフォルトの方法で、これによってGeneva Forecastingエキスパート・システムが起動され、考えられる予測法およびそのオプションがすべて検証され、データに対して最適な方法が選択および使用されます。この値を指定すると、エキスパート・システムでは、METHODキーワードに指定されたすべての値が無視されます。
この方法を選択すると、エキスパート・システムでは、コーディングされた最大設定と最小設定から、alpha、beta、gamma、傾向保持、周期減衰およびMPT変換の各設定が選択されます。APPAUTOに対してこれらの値を設定する場合は、最小および最大のいずれにも同じ値を指定します。たとえば、alphaに対して値.2を指定するには、ALPHA MINとALPHA MAXのどちらも.2に設定します。エキスパート・システムではその他にも、すでに設定されているグローバル・パラメータが使用されます。(デフォルト)

- 'APPMANUAL'を指定すると、Geneva Forecastingエンジンにおいて予測が実行される際、このFCSET文に指定した予測法およびオプションが使用されます。

BETA {MAX|MIN|STEP} decimal

二重指数平滑化法およびHolt-Winters予測法に対するベータの値を指定します。ベータは傾向の予測を制御する傾向パラメータ。

- BETA MAX decimalではベータの最大値を指定します。decimalには、0.0から1.0までの任意の10進値を指定できます。デフォルト値は0.3です。

- BETA MIN decimalではベータの最小値を指定します。decimalには、0.0から1.0までの任意の10進値を指定できます。デフォルト値は0.1です。

- BETA STEP decimalでは、予測エンジンがベータの値を決定する際に使用する間隔の値を指定します。decimalには、0.05から0.2までの範囲にあり、かつBETA MAXの値とBETA MINの値の差をちょうど割り切る任意の10進値を指定できます。decimalのデフォルト値は0.1です。

COMPSMOOTH {YES|NO}

中央値平滑データ系列に対して最適化を行うかどうかを示す。

- NOは、元の履歴時系列データを使用した方法を実行することを指定します。(デフォルト)

- YESを指定すると、中央値平滑データ系列に対して最適化が行われます。その結果、より平滑化された(いわゆる「ベースライン」)予測になります。

CYCDECAY {MAX|MIN} decimal

線形回帰法および非線形回帰法に対する周期減衰の値を指定します。周期減衰とは、予測エンジンにおいて線形回帰および非線形回帰が行われる際、ベースライン・アクティビティからのずれがどの程度考慮されるかを表すものです。

- CYCDECAY MAX decimalでは、周期減衰パラメータの最大値を指定します。decimalには、0.2から1.0までの範囲にあり、かつCYCDECAY MINの値とCYCDECAY MAXの値の差を0.4でちょうど割り切る任意の10進値を指定できます。decimalのデフォルト値は1.0です。

- CYCDECAY MIN decimalでは、周期減衰パラメータの最小値を指定します。decimalには、0.2から1.0までの範囲にあり、かつCYCDECAY MINの値とCYCDECAY MAXの値の差を0.4でちょうど割り切る任意の10進値を指定できます。decimalのデフォルト値は0.2です。

GAMMA {MAX|MIN|STEP} decimal

Holt-Winters予測法において季節パラメータとして使用されるガンマの値を指定します。

- GAMMA MAX decimalではガンマの最大値を指定します。decimalには、0.0から1.0までの任意の10進値を指定できます。decimalのデフォルト値は0.3です。

- GAMMA MIN decimalではガンマの最小値を指定します。decimalには、0.0から1.0までの任意の10進値を指定できます。decimalのデフォルト値は0.1です。

- GAMMA STEP decimalでは、予測エンジンがガンマの値を決定する際に使用する間隔の値を指定します。decimalには、0.05から0.2までの範囲にあり、かつGAMMA MAXの値とGAMMA MINの値の差をちょうど割り切る任意の10進値を指定できます。decimalのデフォルト値は0.1です。

HISTPERIODS integer

履歴期間の数。integerには、1から50000までの任意のINTEGER値を指定でき、この値は、FCEXECコマンドに指定されるtime-series式での時間ディメンション値の最大数です。(予測期間の数は、time-series式の次元のSTATLENからHISTPERIODSの値を差し引いて求められます。)

MAXFCFACTOR decimal

予測データに対する上限を指定します。decimalに指定する値は、履歴系列の最大値の倍数を表します。たとえば、10.0を指定すると、上限値は履歴系列の最大値の10倍になります。デフォルト値は100.0です。

METHOD 'method''

予測エンジンで使用する予測法を指定します。予測法に関して指定する値は、APPROACHの値が'APPMANUAL'に設定されていないかぎり無視されます。

methodには次のキーワードのいずれかを指定できます。

- AUTOMATICを指定すると、使用する方法としてデータに最適なものが予測エンジンにより決定されます。(デフォルト)

- LINREGを指定すると、データに対して線形関係(y=a*x+b)を当てはめる線形回帰法が使用されます。

- NLREG1を指定すると、元のデータからなんらかの変換(この場合は、x'=log(x)、y'=log(y))を行って得られたデータに線形関係(y'=a*x'+b)を当てはめる非線形回帰法が使用されます。この場合、xとy(y=c*x^a)の間の多項式モデルが構成されます。

- NLREG2を指定すると、元のデータからなんらかの変換(この場合は、x'=x、y'=ln(y))を行って得られたデータに線形関係(y'=a*x'+b)を当てはめる非線形回帰法が使用されます。この場合、xとy(y=c*e^ax)の間の指数モデルが構成されます。

- NLREG3を指定すると、元のデータからなんらかの変換(この場合は、x'=log(x)、y'=y)を行って得られたデータに線形関係(y'=a*x'+b)を当てはめる非線形回帰法が使用されます。この場合、xとy(y=a*log(x)+b)の間の対数モデルが構成されます。

- NLREG4を指定すると、元のデータからなんらかの変換(この場合は、x'=1/x、y'=1/y)を行って得られたデータに線形関係(y'=a*x'+b)を当てはめる非線形回帰法が使用されます。この場合、漸近曲線(y=x/(a+bx))が構成されます。

- NLREG5を指定すると、元のデータからなんらかの変換(この場合は、x'=x、y'=ln(y/(K-y)))を行って得られたデータに線形関係(y'=a'*x+b)を当てはめる非線形回帰法が使用されます。この場合、指数関数の漸近曲線(y=cKe^ax/(1+ce^ax))が構成されます。

- SESMOOTHを指定すると、過去値の等比級数的な加重平均を現行予測値とし、すべての将来値をその値とする単純指数平滑法が使用されます。この方法は非季節データの短期予測に向きます。

- DESMOOTHを指定すると、過去値の等比級数的な加重平均を現行予測値とし、同じ方法で計算されるトレンド項にその値を加算する二重指数平滑法が使用されます。したがって、単純指数平滑法は系列とトレンド項の両方に適用されます。

- CROSTONを指定すると、クロストン断続性需要メソッドが使用されます。クロストン断続性需要メソッドは、断続的なデータ(観測値の大半が0であるようなデータ)についても扱えるように指数平滑法を拡張した予測法です。この予測法では、まず需要が正の値を示す間隔が予測され、さらに正の値を示す場合の需要の大きさが予測されます。

- HOLT/WINTERSを指定すると、季節データにHolt-Winters法が使用されます。これは、傾向減衰を伴う二重指数平滑法において、単純指数平滑法で予測される乗法的な季節性因子を考慮した予測法です。

MINFCFACTOR decimal

予測データに対する下限を指定します。指定する値は、履歴系列の最小値の倍数を示します。decimalには、0.0から1.0までの任意の10進値を指定できます。たとえば、0.5を指定すると、下限値は履歴系列の最小値の半分になります。decimalのデフォルト値は0.0です。

MPTDECAY {MAX|MIN} decimal

予測エンジンにおいて、移動周期的合計(MPT)系列の予測結果を分析する際、ベース値の予測値の減衰を調整するために使用するパラメータの値を指定します。

- MPTDECAY MAX decimalでは、予測エンジンにおいて、移動周期的合計(MPT)系列の予測結果を分析する際、ベース値の予測値の減衰を調整するために使用するパラメータの最大値を指定します。decimalには、0.2から1.0までの範囲にあり、かつMPTDECAY MINの値とMPTDECAY MAXの値の差を0.4でちょうど割り切る任意の10進値を指定できます。decimalのデフォルト値は1.0です。

- MPTDECAY MIN decimalでは、予測エンジンにおいて、移動周期的合計(MPT)系列の予測結果を分析する際、ベース値の予測値の減衰を調整するために使用するパラメータの最小値を指定します。decimalには、0.2から1.0までの範囲にあり、かつMPTDECAY MINの値とMPTDECAY MAXの値の差を0.4でちょうど割り切る任意の10進値を指定できます。decimalのデフォルト値は0.2です。

NTRIALS integer

予測を決定するために予測エンジンが実行する試行の数を指定します。integerには、1から3までの任意のINTEGER値を指定できます。decimalのデフォルト値は3です。

PERIODICITY cycle-spec

単一サイクルの時間間隔の数、またはネストされたサイクルのセットのうちの各サイクルの時間間隔の数を指定します。

DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションを使用する場合、このパラメータを指定する必要はありません。この場合、予測エンジンは1年を構成する時間ディメンションの時間間隔の数(たとえば、1年には52 WEEK時間間隔があります)から周期性を導出します。

DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションを使用しない場合、cycle-specのデフォルト値は1であり、データはまったくグループ化されない(つまり、各時間間隔は論理的に独立している)ことが指定されます。

サイクルは、データの期間を通じて繰り返される時間間隔のグループです。たとえば、日単位の時間間隔は週のサイクルにグループ化され、週単位の時間間隔は年のサイクルにグループ化されます。この場合、サイクルはネストされているといい、年のサイクルは週のサイクルより上位の集計であり、週のサイクルは年のサイクルよりさらに詳細です。より詳細なレベルのサイクルを指定すると、データに影響を与える要因に対してきめの細かい検索をOLAPで行えます。

- 単一サイクルを指定するには、cycle-specを1から25000までのINTEGERに設定します。このINTEGERはサイクルが分割される時間間隔の数を示します。たとえば、INTEGER 12は、サイクルが12の時間間隔に分割されることを指定します。

- ネストされた一連のサイクルを指定するには、cycle-specにカンマで区切って並べた最大6つのINTEGER値をカッコで囲んで設定します。並べる各値は、ネストされたサイクル内にある時間間隔の数です。サイクルは、最大集計から最小集計の順に順序付けられます。たとえば、cycle-specが(52,7)の場合、2つのサイクルのうちの最大集計のサイクルは52の時間間隔に分割され、その各時間間隔が7つの時間間隔に分割されることを示します。この例では、1年が52週に分割され、その各週が7日に分割されています。

RATIO decimal

予測エンジンが平滑化に使用するウィンドウのサイズと履歴期間の合計数の比率を指定します。予測エンジンはこの値を使用してバックキャスト期間の数を決定します。1/26から1/2までの任意の10進値を指定できます。decimalのデフォルト値は1/3です。

SMOOTHING {YES|NO}

予測エンジンが予測のデータを平滑化するかどうかを指定します。デフォルト値はNOです。予測エンジンでデータを平滑化する場合はYESを指定します。

TRANSFORM {'TRNOSEA'|'TRSEA'|'TRMPT'}

予測の実行時に予測エンジンが使用するデータ・フィルタ。

- 'TRNOSEA'を指定すると、予測エンジンではデータの季節調整は行われません。(デフォルト)

- 'TRSEA'を指定すると、予測エンジンでは、データを季節調整するフィルタを使用して変換が行われます。

- 'TRMPT'を指定すると、予測エンジンでは、移動周期的合計(MPT)フィルタを使用して変換が行われます。

TRENDHOLD {MAX|MIN|STEP} decimal

二重指数平滑法およびHolt-Winters予測法において傾向の信頼性を示す傾向保持パラメータの値を指定します。

- TRENDHOLD MAX decimalでは、傾向保持パラメータの最大値を指定します。decimalには、0.0から1.0までの任意の10進値を指定できます。decimalのデフォルト値は0.8です。

- TRENDHOLD MIN decimalでは、傾向保持パラメータの最小値を指定します。decimalには、0.0から1までの任意の10進値を指定できます。 0decimalのデフォルト値は0.4です。

- TRENDHOLD STEP decimalでは、予測エンジンが傾向保持パラメータの値を決定する際に使用する間隔の値を指定します。decimalには、0.1から0.2までの任意の10進値を指定できます。decimalの値は、TRENDHOLD MAXの値とTRENDHOLD MINの値の差をちょうど割り切る必要があります。decimalのデフォルト値は0.2です。

WINDOWLEN integer

予測エンジンにおいて、中央値平滑化を実行する際、中央値を決定するために使用するポイント数を指定します。中央値平滑化は、系列内の各データ・ポイントをそれの中央値およびその隣接値に置き換えることによって、データにおける極端な相違を排除します。integerには、1から13までの任意のINTEGER値を指定できます。integerのデフォルト値は3です。

例

予測プログラムの例は、例9-119「予測プログラム」を参照してください。

FETCH

FETCHコマンドは、SQLによるアナリティック・ワークスペース・データへのアクセス時に使用するOLAP_TABLEファンクションで作成されるリレーショナル表での使用を目的として、アナリティック・ワークスペース・データを取得する方法を指定するコマンドです。

FETCHコマンドは、OLAP_TABLEファンクションのOLAP_commandパラメータでのみ使用できます。それ以外のコンテキストでは使用できません。

OLAP_TABLEファンクション内で、FETCHキーワードは、アナリティック・ワークスペース・データが表オブジェクトにマッピングされる方法を明示的に指定します。FETCHキーワードは、Oracle Databaseに移植するOLAPアプリケーション用に提供されています。

注意:
SNAPIのFETCHコマンドを使用していたExpressアプリケーションをアップグレードする場合にのみ、OLAP_TABLEでFETCHキーワードを使用します。Expressアプリケーションをアップグレードする場合、構文はExpress 6.3と同じです。前に使用していたのと同じFETCHコマンドを使用できます。

OLAP_TABLEの引数としてFETCHを使用する場合、改行や継続マークを付けずに、文全体を1行で入力する必要があります。

OLAP DMLに埋め込まれたSQLコマンドを使用してリレーショナル表からアナリティック・ワークスペース・オブジェクトにデータをフェッチまたはインポートするには、OLAP DML SQLコマンドを使用します。

関連項目:
OLAP_TABLEファンクションの詳細は、付録A「OLAP_TABLE SQLファンクション」を参照してください。

構文

FETCH expression... [TAG tag-exp] [LABELED] [data-order]

ここで、data-orderは次のいずれかです。

USING <order-dim...>
ACROSS across-dim...
DOWN down-dim...
ACROSS across-dim... DOWN down-dim...

パラメータ

expression...

各ターゲット列に対して1つの式で、行定義に現れるのと同じ順序です。式は空白またはカンマで区切ります。

TAG tag-exp

このキーワードは無視されます。下位互換性のためにのみ構文に残されています。

LABELED

このキーワードは無視されます。下位互換性のためにのみ構文に残されています。すべてのフェッチにラベルが付けられます。

USING <order-dim...>

<order-dim...>に指定されるディメンション・リストに従ってデータ・ブロックを順序付けます。山カッコで囲んでディメンションまたはコンポジット、あるいはその2つの組合せを指定します。複数のディメンションは、最初のディメンションが最も変化の速いディメンションとなり、最も変化の速いディメンションから最も変化の遅いディメンションという順序になります。USING句を指定すると、ACROSSおよびDOWNを指定できません。

ACROSS across-dim...

列および行のデータ・ブロックを順序付け、列ディメンションを指定します。across-dimには、1つ以上のディメンション、コンポジット、NONEキーワード、あるいはこれらの組合せのリストを指定します。複数のACROSSディメンションを指定すると、最初のディメンションが最も変化の遅いディメンションとなり、最も変化の遅いディメンションから最も変化の速いディメンションへと変化します。

DOWNではなくACROSSを指定した場合、指定されないディメンションはすべて、デフォルトでDOWNディメンションに設定され、オブジェクト定義の順序で最も変化の速いディメンションから最も変化の遅いディメンションへと変化します。ただし、NONEキーワードをACROSSディメンション・リストに追加すると、指定されないDOWNディメンションのステータスにある最初の値のみがフェッチされます。

ACROSS句を指定すると、USING句を指定できません。

DOWN down-dim...

列および行のデータ・ブロックを順序付け、行ディメンションを指定します。down-dimには、1つ以上のディメンション、コンポジット、NONEキーワード、あるいはこれらの組合せのリストを指定します。複数のDOWNディメンションを指定すると、最初のディメンションが最も変化の遅いディメンションとなり、最も変化の遅いディメンションから最も変化の速いディメンションへと変化します。

ACROSSではなくDOWNを指定した場合、指定されないディメンションはすべて、デフォルトでACROSSディメンションに設定され、オブジェクト定義の順序で最も変化の速いディメンションから最も変化の遅いディメンションへと変化します。ただし、NONEキーワードをDOWNディメンション・リストに追加すると、指定されないACROSSディメンションのステータスにある最初の値のみがフェッチされます。

DOWN句を指定すると、USING句を指定できません。

使用上の注意

デフォルトのデータの順序

USINGまたはDOWN/ACROSS句を指定しない場合、データのディメンションはワークスペースのオブジェクト定義のリストの順序で最も変化の速いディメンションから最も変化の遅いディメンションへと変化します。

ディメンション性が異なる複数の式の使用方法

ディメンション性が異なる複数の式を1つのFETCHコマンドで指定した場合、最も変化の速いディメンションから最も変化の遅いディメンションへと変化するディメンションの順序は予測できません。

データ・ブロックの最大サイズ

MAXFETCHを使用して、FETCHによって生成されるデータ・ブロックのサイズに上限を設定できます。

コンポジットで定義された変数

コンポジットで定義された変数の場合、FETCHのACROSS句、DOWN句およびUSING句で、ベース・ディメンションのかわりにコンポジットを指定できるため、結果のデータ・ブロックでNAフィールド数を最小限にできます。変数が名前付きコンポジットで定義されている場合、USING、DOWNまたはACROSSキーワードの後にそのコンポジットの名前を指定できます。名前のないコンポジットは、それを定義するために使用した構文で指定します。たとえば、変数d.salesの定義では次のように指定します。

DEFINE d.sales VARIABLE DECIMAL <month SPARSE<product district>>

USING、DOWNまたはACROSSキーワードの直後に式SPARSE<product district>を指定することによってフェッチできます。

例

OLAP_TABLEでのFETCHの使用例は、例A-9「OLAP_TABLEでFETCHを使用するスクリプト」を参照してください。

FILECLOSE

FILECLOSEコマンドは、開かれているファイルを閉じるコマンドです。対象のファイルが開かれていない場合は、エラーが発生します。

構文

FILECLOSE fileunit

パラメータ

fileunit

FILEOPENファンクションを事前にコールすることによって開かれたファイル、またはOUTFILEコマンドによって開かれたファイルに割り当てられるINTEGERのファイル・ユニット番号。

使用上の注意

LOGコマンド

LOGコマンドで開かれたファイルを閉じるには、FILECLOSEではなく、EOFキーワードとともにLOGコマンドを使用する必要があります。

例

例9-120 ファイルを開閉するプログラム

最初の引数としてファイル名を取るREADFILEという名前のプログラムがあるとします。このプログラムの次の行によって、ファイルが開かれた後、閉じられます。

fil.unit = FILEOPEN(arg(1), read)
... (Commands to read and process data)
FILECLOSE fil.unit

FILECOPY

FILECOPYコマンドは、あるファイル(ソース・ファイル)の内容を別のファイル(ターゲット・ファイル)にコピーするコマンドです。ターゲット・ファイルがすでに存在する場合、そのファイルはコピーによって上書きされます。

構文

FILECOPY source-file-name target-file-name

パラメータ

source-file-name

コピー元のファイルの名前を指定するテキスト式。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。

注意:
ディレクトリ・オブジェクトはデータベースで定義され、ディレクトリおよびディレクトリ内のファイルへのアクセスを制御します。CDAコマンドを使用すると、カレント・ディレクトリ・オブジェクトの特定や指定を行うことができます。使用するデータベース・ユーザー名で読取りおよび書込み可能なファイルがあるディレクトリ・オブジェクトへのアクセス権については、Oracle DBAに問い合せてください。

target-file-name

コピー先のファイルの名前を指定するテキスト式。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。

例

例9-121 ファイルのコピー

次の文は、ファイルlog.txtをセッションのカレント・ディレクトリ・オブジェクトから同じディレクトリのファイルoldlog.txtにコピーします。

FILECOPY 'log.txt' 'oldlog.txt'

FILEDELETE

FILEDELETEコマンドは、オペレーティング・システムのディスク領域からファイルを削除するコマンドです。

構文

FILEDELETE file-name

パラメータ

file-name

削除するファイルの名前を指定するテキスト式。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。

注意:
ディレクトリ・オブジェクトはデータベースで定義され、ディレクトリおよびディレクトリ内のファイルへのアクセスを制御します。CDAコマンドを使用すると、カレント・ディレクトリ・オブジェクトの特定や指定を行うことができます。使用するデータベース・ユーザー名で読取りおよび書込み可能なファイルがあるディレクトリ・オブジェクトへのアクセス権については、Oracle DBAに問い合せてください。

例

例9-122 変数を使用したファイルの指定

次の文は、filevarという名前のテキスト変数にファイル名が格納されているファイルを削除します。

FILEDELETE filevar

FILEMOVE

FILEMOVEコマンドは、指定したファイルの名前または場所を変更するコマンドです。新しいファイルの名前は、元の名前と同じでも異なっていても構いません。

構文

FILEMOVE old-file-name new-file-name

パラメータ

old-file-name

移動または名前を変更するファイルの名前を指定するテキスト式。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。

注意:
ディレクトリ・オブジェクトはデータベースで定義され、ディレクトリおよびディレクトリ内のファイルへのアクセスを制御します。CDAコマンドを使用すると、カレント・ディレクトリ・オブジェクトの特定や指定を行うことができます。使用するデータベース・ユーザー名で読取りおよび書込み可能なファイルがあるディレクトリ・オブジェクトへのアクセス権については、Oracle DBAに問い合せてください。

new-file-name

ファイルの新しい名前または場所を指定するテキスト式。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。

例

ファイルの移動

次の文を実行すると、セッションのカレント・ディレクトリ・オブジェクトのファイルlog.txtが、backupというディレクトリ・オブジェクトのファイルoldlog.txtに移動します。

FILECOPY 'log.txt' 'backup/oldlog.txt'

FILEPAGE

FILEPAGEコマンドは、PAGINGがオンの場合の出力において改ページを指定するコマンドです。現行ページの残りの行数を条件に、FILEPAGEは改ページを送ることができます。

構文

FILEPAGE fileunit [n]

パラメータ

fileunit

FILEOPENファンクションを事前にコールすることによって、またはOUTFILEコマンドによって(WRITEまたはAPPENDモードで開かれている)ファイルに割り当てられるファイル・ユニット番号。

n

ページの残りの行数がnより少ない場合に改ページが発生することを示す正のINTEGER式。残りの行数がn以上の場合またはnがゼロの場合、改ページは発生しません。nがPAGESIZEより大きい場合、LINENUMがゼロではないときに改ページが発生します。nが負数の場合または省略した場合、常に改ページが発生します。

Oracle OLAPは、ページ・サイズ、現行の行数および下マージンを指定するオプションの値を使用してページの残りの使用可能な行数を計算します。LINESLEFTに格納される数値は、次の計算式によって計算されます。

LINESLEFT = PAGESIZE - LINENUM - BMARGIN

使用上の注意

FILEPAGEのかわりとなるPAGEの使用方法

PAGEコマンドは、現行の出力ファイルの出力先の番号であるファイル・ユニット番号OUTFILEUNITに対してFILEPAGEコマンドを指定するのと同じ働きをします。次の2つの文は等価です。

FILEPAGE OUTFILEUNIT
PAGE

例

例9-123 FILEPAGEコマンドの使用方法

次のプログラムの抜粋では、製品の次のグループが同じページに適さない場合にFILEPAGE文を送ります。プログラムは引数として出力ファイルの名前および3つのmonthディメンション値を取ります。

fil.unit = FILEOPEN(ARG(1) WRITE)
LIMIT month TO &ARG(2) &ARG(3) &ARG(4)
COMMAS = NO
DECIMALS = 0
FOR district
DO
FILEPAGE fil.unit STATLEN(product)
FOR product
DO
FIL.TEXT = product
FOR month
JOINCHARS(fil.text  ' ' CONVERT(sales TEXT))
FILEPUT fil.unit fil.text
DOEND
FILEPUT fil.unit ''
DOEND
FILECLOSE fil.unit

FILEPUT

FILEPUTコマンドは、テキスト式で指定されるデータをWRITEまたはAPPENDモードで開かれているファイルに書き込むコマンドです。

構文

FILEPUT fileunit {text-exp|FROM infileunit} [EOL|NOEOL]

パラメータ

fileunit

FILEOPENファンクションを事前にコールすることにより、またはOUTFILEコマンドにより、書込み(WRITEまたはAPPENDモード)用に開かれたファイルに対して割り当てられるファイル・ユニット番号。

text-exp

出力用のデータを含むテキスト式。

注意:
NTEXTデータがファイルに書き込まれるように指定した場合、FILEPUTはテキストをファイルのキャラクタ・セットに変換します。キャラクタ・セットで表すことができないNTEXT文字がある場合、データが失われます。

FROM infileunit

FILENEXTファンクションによって、infileunitから読み取られるレコードをfileunitで指定されるファイルに直接送信します。この句を指定すると、FILEVIEWコマンドでデータ処理を継続しながら、選択したレコードを出力ファイルに書き込むことができます。

注意:
キーワード句FROM infileunitを使用する場合、バイナリ・ファイルとバイナリ以外のファイルを混在させることはできません。BINARYキーワードでいずれかのファイルが開かれた場合、他のファイルもバイナリである必要があります。

EOL

(デフォルト)改行文字が出力文字列に追加されてファイルに書き込まれることを指定します。

NOEOL

改行文字がファイルに書き込まれるテキストに追加されないことを指定します。

例

例9-124 FILEPUTを使用したファイルへのデータの書込み

次の例は、3か月間の販売データのファイルを書き込むプログラムです。ファイルの名前は最初の引数です。このプログラムの抜粋は、ファイルを開いて各行のデータをファイルに書き込み、ファイルを閉じます。このプログラムは、プログラム名の後のステートメント行で4つの引数(入力データのファイル名および3つの月の名前)を取ります。

DEFINE salesdata PROGRAM
LD Write Sales Data To File. Args: File Name, 3 Month Names
PROGRAM
VARIABLE fil.unit INTEGER
VARIABLE fil.text TEXT
fil.unit = FILEOPEN(ARG(1) WRITE)
LIMIT month TO &ARG(2) &ARG(3) &ARG(4)
LIMIT product TO ALL
LIMIT district TO ALL
COMMAS = NO
DECIMALS = 0
FOR district
DO
FOR product
DO
fil.text = product
FOR month
fil.text = JOINCHARS(fil.text  ' ' -
CONVERT(sales TEXT))
FILEPUT fil.unit fil.text
DOEND
FILEPUT fil.unit ''
DOEND

FILECLOSE fil.unit
END

例9-125 データの事前処理

次の例は、各地区における販売製品に関する1996年の売上高のデータファイルを使用します。ここでは、Aで始まるレコードのみを対象として処理しますが、残りのレコードは後で処理するために別のファイルに保存します。次のプログラムの抜粋は、FILENEXTを使用して各レコードを取得し、FILEVIEWを使用してそのレコードの種類を確認します。2番目のFILEVIEW文はレコードがタイプAの場合の処理です。それ以外のレコードはFILEPUT文によって出力ファイルに書き込まれます。

DEFINE rectype VARIABLE ID
LD One Letter Code Identifying The Record Type
VARIABLE in.unit INTEGER
VARIABLE out.unit INTEGER
. . .
in.unit = FILEOPEN( GET(TEXT PROMPT 'Input Filename: ') READ)
out.unit = FILEOPEN( GET(TEXT PROMPT 'Output Filename: ') -
WRITE)

WHILE FILENEXT(in.unit)
DO
FILEVIEW in.unit WIDTH 1 rectype
IF rectype EQ 'A'
THEN FILEVIEW COLUMN 2 WIDTH 8 district SPACE 2 -
WIDTH 8 product ACROSS month year Yr96: saleS
ELSE FILEPUT out.unit FROM in.unit
DOEND
FILECLOSE in.unit
FILECLOSE out.unit
. . .
END

FILEREAD

FILEREADコマンドは、入力ファイルからレコードを読み取り、指定したアクション文に従ってデータを処理します。FILEREADは、バイナリ・データ、パック10進データおよびテキストを処理します。E表記法(.1E+9など)またはM表記法(10Mなど)で記述された10進データを処理できます。データをOracle OLAP変数、ディメンション、コンポジットまたはリレーションに格納する前に、適切なデータ型に変換できます。

構文

FILEREAD fileunit [STOPAFTER n] [file-format] {[attribute...] action-statement1}

[[attribute...] action-statementN...]

ここで、

- file-formatは、入力ファイルのレコードの形式を指定します。次のいずれかを使用します。

RULED

CSV [DELIMITER dchar]

STRUCTURED [TEXTSTART schar] [TEXTEND echar] [DELIMITER dchar]

- attributeは、アクション文によって使用される情報を指定します。

{COLUMN|COL} n

{SPACE|SP} n

{FIELD|FLD} n

{WIDTH|W} n

data-type

dimension-value-handling

BINARY | PACKED | SYMBOLIC

TRANSLATE | NOTRANSLATE

SCALE n

ZPUNCH | ZPUNCHL

LSET 'text'

RSET 'text'

stripping

NAVALUE val

NASPELL 'text'

ZSPELL 'text'

YESSPELL 'text'

NOSPELL 'text'

ZEROFILL

アクション文における属性の配置については、「FILEREADでのフィールド属性の配置」を参照してください。

- action-statementsは処理を実行する文で、代入文やIF文などがあります。action-statementは、次のいずれかです。

assignment-statement

IF-statement

SELECT-statement

ACROSS-statement: action-statement

<action-statement-group>

パラメータ

fileunit

FILEOPENファンクションを事前にコールすることによって読取り用(READモード)に開かれたファイルに割り当てられるファイル・ユニット番号。

STOPAFTER n

入力ファイルから読み取るレコードの数。STOPAFTERを省略した場合、あるいは負数またはNAを指定した場合、FILEREADはファイル全体を処理します。「STOPAFTERキーワード」を参照してください。

RULED

文字単位またはバイト単位の固定幅の列でレコードが編成されることを指定します。すべての行が同じ形式である必要があります。RULEDはデフォルトのファイル形式です。レコード内のデータの位置を指定するには、COLUMN、SPACEおよびWIDTH属性を使用します。

CSV [DELIMITER dchar]

CSVは、データがCSV(カンマ区切り値)形式であることを指定します。レコード内のデータの位置を指定するには、FIELDおよびSPACE属性を使用します。

dcharは、構造化ファイルでOracle OLAPが標準フィールド・デリミタとして解釈するようにする単一文字を指定するテキスト式です。Oracle OLAPは、標準フィールド・デリミタを使用して数値フィールドおよびテキスト・フィールドを識別します。デフォルト文字はカンマ(,)です。

CSVファイルは、スプレッドシート・プログラムによって生成される一般的な出力形式です。ソース・ファイルの文字の各行がシングル・レコードとして扱われます。レコードの各フィールドはデフォルトでカンマによって区切られます。フィールド・デリミタとして他の文字を指定するには、DELIMITERキーワードを使用します。

入力レコードの文字のグループが二重引用符で囲まれる場合、次のすべてのルールが適用されます。

- そのグループに含まれるデリミタ文字は、デリミタではなくリテラルとして扱われます。

- 文字のグループに含まれる二重引用符(")は、その後に別の二重引用符を付ける必要があります。

- 文字のグループに含まれる改行文字(\n)は無視されます。

- 文字のグループを囲む二重引用符の前後にあるスペースまたはタブは無視されます。

STRUCTURED

レコードが構造化prn形式であることを指定します。レコード内のデータの位置を指定するには、FIELDおよびSPACE属性を使用します。

構造化ファイルは、PCソフトウェア用の一般的な出力形式です。テキスト・ファイルとして、フィールドが文字のグループで構成されます。文字のグループは、二重引用符で囲まれたテキスト、または小数点による以外は中断されない数列の2つの条件によって定義されます。したがって、小数点を含む引用符で囲まれていない数列は単一の値として格納されますが、千の桁を区切るカンマまたはその他のデリミタを含む引用符で囲まれていない数列は、単一の値として格納されずに複数の値に分割されます。引用符で囲まれない数字以外の文字は無視されますが、数字の直前にあるマイナス記号のみは数字の一部とみなされます。マイナス記号と数字の間にスペースを入れても切り離せません。

ファイル形式が前述のパターンに従わない場合、TEXTSTART、TEXTENDおよびDELIMITERキーワードを使用して、各フィールドの先頭および末尾を識別するためにFILEREADが使用するデリミタをカスタマイズできます。

TEXTSTART schar

構造化ファイルでOracle OLAPがテキスト・フィールドの先頭として解釈するようにする単一文字を指定します。scharは文字の値です。デフォルト文字は二重引用符(")です。

TEXTEND echar

構造化ファイルでOracle OLAPがテキスト・フィールドの末尾として解釈するようにする単一文字を指定します。echarrは文字の値です。デフォルト文字は二重引用符(")です。

DELIMITER dchar

構造化ファイルでOracle OLAPが標準フィールド・デリミタとして解釈するようにする単一文字を指定します。Oracle OLAPは、標準フィールド・デリミタを使用して数値フィールドおよびテキスト・フィールドの両方を識別します。dcharは文字の値です。デフォルト文字はカンマ(,)です。

{COLUMN|COL} n

入力レコードでフィールドが開始する列。デフォルトでは、フィールド1は列1から開始し、それに続くフィールドは前のフィールドの後の列から開始します。現行フィールドのデフォルト列は、前のフィールドの最初の列、前のフィールドの幅、および現行フィールドに指定されるスペースの合計です。

表9-7 ファイル属性

構文

説明

{COLUMN|COL} n

入力レコードでフィールドが開始する列。デフォルトでは、フィールド1は列1から開始し、それに続くフィールドは前のフィールドの後の列から開始します。現行フィールドのデフォルト列は、前のフィールドの最初の列、前のフィールドの幅、および現行フィールドに指定されるスペースの合計です。

{SPACE|SP} n

フィールドと前のフィールドの間のスペースの数。構造化PRNファイルでは、前のフィールドと現行フィールドの間のフィールドの数。デフォルト値は0です。

{FIELD|FLD} n

構造化PRNファイルの場合のみ、データの抽出元のフィールド。

{WIDTH|W} n

構造化されていないレコードの場合に、入力レコードでフィールドが占有する列の数。デフォルトがない場合、ルール化レコードにはWIDTHを含める必要があり、含めないとFILEREADはエラーを生成する。デフォルトは、次に示すようにデータ型から導出される。

- INTEGER、SHORTINTEGERまたはSHORTDECIMALのターゲット・データ型のBINARY入力形式の場合、デフォルトは4列。

- DECIMALまたはNUMBERのターゲット・データ型のBINARY入力形式の場合、デフォルトは8列。

- BOOLEANのターゲット・データ型のBINARY入力形式の場合、デフォルトは2列。

- いずれかのターゲット・データ型のPACKED入力形式の場合、デフォルトはなし。

- IDのターゲット・データ型のSYMBOLIC入力形式の場合、デフォルトは8列。

- ID以外のターゲット・データ型のSYMBOLIC入力形式の場合、デフォルトはなし。

最大幅はテキスト入力で4,000文字。

data-type

使用できるキーワードは、INTEGER、SHORTINTEGER、DECIMAL、SHORTDECIMAL、NUMBER、TEXT、ID、DATE、VNF、RAW DATE、BOOLEAN。

- テキスト・データの場合は、入力がアナリティック・ワークスペースに格納される前に変換されるデータ型。

- バイナリ・データの場合は、入力レコードのデータのデータ型。

- DAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンション以外では、デフォルトはターゲット・オブジェクトのデータ型。

- DAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンションでは、デフォルトはVNF。

- DATE変数、およびDAY、WEEK、MONTH、QUARTER、YEAR型のディメンションでは、RAW DATEは、入力値が1899年12月31日から後の日数を表す正のINTEGER値または1899年12月31日より前の日数を表す負のINTEGER値であることを示す。

「NTEXT値を持つターゲット・オブジェクトの指定」を参照。

dimension-value-handling

ターゲット・オブジェクトがディメンションまたはディメンション・サロゲートである場合に、新しい値をターゲット・オブジェクトに追加するかどうかを指定する次のいずれかのキーワード句。

- MATCH
新しい値をディメンションまたはディメンション・サロゲートに追加しない。ただし、ターゲット・オブジェクトがディメンションである場合は、入力フィールドの値は現行ディメンション値と一致していなければならない。処理されるレコードごとに、ディメンションは一時的にレコードのその値に制限される。値が存在しない場合、FILEREADはエラーを生成する。この属性は、ターゲット・オブジェクトがディメンション・サロゲートである場合も適用される。

- APPEND [LAST |FIRST | BEFORE pos | AFTER pos]
新しい値を、追記の形でディメンションに追加する。フィールドには新しいディメンション値が含まれ、場合によって既存の値も含まれる。新しい値はディメンション・リストに追加され、ステータスは現行値に制限される。FILEREADの終了後、ステータスはALLに設定される。時間ディメンションの場合、既存の時間間隔と新しい時間間隔の間の欠落した時間間隔をOracle OLAPは自動的に埋める。ターゲット・オブジェクトが時間ディメンション以外のディメンションである場合は、LAST(ディメンション・リストの末尾に値を追加)、FIRST(リストの先頭に値を追加)、BEFORE pos(指定した値またはINTEGER位置の前に値を追加)、AFTER pos(指定した値またはINTEGER位置の後に値を追加)、のいずれかのキーワードを使用したOracle OLAPによる値の追加方法を指定できる。

- ASSIGN
新しい値を、代入の形でディメンション・サロゲートに追加する。この属性はディメンション・サロゲートにのみ適用される。この属性によって新しい値がサロゲートに代入される。

input-field-format

入力フィールドの形式を指定する次のいずれかのキーワード。

- SYMBOLIC。入力フィールドの形式がASCIIまたはEBCDICテキストであることを指定する。

- BINARY。入力フィールドの形式がバイナリであることを指定する。

- PACKED。入力フィールドの形式がパック10進であることを指定する。

TRANSLATE|NOTRANSLATE

Oracle OLAPがデータを元のオペレーティング・システムの形式からFILESET ORIGIN文の指定のとおりに変換するかどうか。データを変換する場合はTRANSLATE、データを変換しない場合はNOTRANSLATEを指定する。

SCALE n

想定10進小数点または2進小数点の右側の桁の数。デフォルトは0です。入力データがテキストの場合、SCALEによって指定される数より入力の小数点が優先される。

ZPUNCH|ZPUNCHL

入力ゾーンがどのようにオーバーパンチされているかを指定する。入力がゾーン・オーバーパンチである場合はZPUNCHを指定。入力の左がゾーン・オーバーパンチである場合はZPUNCHLを指定。

LSET 'text'

テキスト入力およびTEXTまたはIDターゲット・オブジェクトの場合に、格納の前にテキストを値の左に追加する。textが複数行の値の場合は、最初の行のみが使用される。

RSET 'text'

テキスト入力およびTEXTまたはIDターゲット・オブジェクトの場合に、格納の前にテキストを値の右に追加する。textが複数行の値の場合は、最初の行のみが使用される。

stripping

テキスト入力の場合に、入力値をターゲット・オブジェクトに格納する前に、それに含まれるスペースまたはNULLを削除するかどうかを指定する次のいずれかのキーワードを指定する。

- NOSTRIP
スペースまたはNULLを入力値から削除しない。

- STRIP
スペースおよびNULLを入力値の左右両方から削除する。

- LSTRIP
スペースおよびNULLを入力値の左側から削除する。

- RSTRIP
スペースおよびNULLを入力値の右側から削除する。

NAVALUE val

バイナリまたはパック入力の場合、入力が指定された数値であるときにNAがターゲット・オブジェクトに割り当てられることを指定します。

NASPELL 'text'

テキスト入力の場合に、Oracle OLAPがテキストをNAとして格納することを指定します。入力が指定されたテキストである場合、NAがターゲット・オブジェクトに割り当てられます。テキストは、複数のNA値を取れる複数行の文字列にできます。テキストに指定される値の他に、入力がNAである場合はNAがターゲット・オブジェクトに割り当てられます。

ZSPELL 'text'

テキストの数値入力の場合に、Oracle OLAPがテキストを0として格納することを指定します。入力が指定されたテキストである場合、ゼロがターゲット・オブジェクトに割り当てられます。テキストは、複数のゼロ値を取れる複数行の文字列にできます。テキストに指定される値の他に、入力が0である場合は0がターゲット・オブジェクトに割り当てられます。

YESSPELL 'text'

テキスト入力がBOOLEANである場合に、Oracle OLAPがテキストをYESとして格納することを指定します。入力がテキストである場合、YESがターゲット・オブジェクトに割り当てられます。テキストは、複数のYES値を取れる複数行の文字列にできます。textに指定される値の他に、入力がYES、ONまたはTRUEである場合はYESがターゲット・オブジェクトに割り当てられます。

NOSPELL 'text'

テキスト入力がBOOLEANである場合に、Oracle OLAPがテキストをNOとして格納することを指定します。入力がテキストである場合、NOがターゲット・オブジェクトに割り当てられます。テキストは、複数のNO値を取れる複数行の文字列にできます。'text'に指定される値の他に、入力がNO、OFFまたはFALSEである場合はNOがターゲット・オブジェクトに割り当てられます。

ZEROFILL

テキストの数値入力の場合に、Oracle OLAPが結果のテキストのスペースをゼロで埋めることを指定します。入力のスペースがゼロで置き換えられます。デフォルトはゼロによる埋込みを行いません。

action-statement

入力ファイルからレコードが読み取られるたびに実行するアクション文を1つ以上指定できます。通常、ディメンション・ステータスの設定、および入力レコードから取得されたデータのOracle OLAPのターゲット・オブジェクトへの割当てのために、アクション文を使用します。また、入力レコードのデータを参照しないアクション文を指定することもできます。たとえば、アクション文のうちの1つを、カウンタを増分するのみの代入文に指定できます。あるいは、特定の処理において入力データを使用するが、Oracle OLAPのターゲット・オブジェクトにはそのデータを割り当てないアクション文も可能です。

アクション文のリストでは、必ず変数の前にディメンションを処理してください。FILEREADは、入力レコードごとに各アクション文を左から右に処理します。アクション文でディメンション処理を実行すると、その結果得られたステータスは次のアクション文にも有効になります。変数のディメンションを制限するアクション文を最初に指定しない場合、FILEREADはステータスにある最初の値を使用して変数のセルをターゲットにします。ACROSS句を指定しないかぎり、FILEREADは入力レコードのフィールドの単一の値をOracle OLAP変数の単一セルに割り当てます。デフォルトでは、FILEREADはデータを変数に割り当てる際に変数のディメンションをループ処理しません。「フィールド順序」を参照してください。

FILEREADアクション文にVALUEキーワードを使用して、入力レコードの特定フィールドの値を表します。VALUEは、指定したFILEREADの属性に従って書式化してそのデータを表します。レコードのフィールドが空白の場合、FILEREADはその値をNAとみなします。デフォルトでは、VALUEのデータ型はターゲット・オブジェクトのデータ型です。ただし、属性キーワードによって別のデータ型を指定できます。

注意:
FILEREADとともに使用するアクション文をすでに指定してある場合、必要に応じて代入文を調整してVALUEキーワードを削除するだけで、SQL FETCHおよびSQL IMPORTでコードを再利用できます。ディメンション処理を制御する属性を除く大部分のFILEREAD属性は、SQLロードに対しては意味がなく、SQL FETCHおよびSQL IMPORT内で実行する際には無視されます。

assignment-statement

代入文によって、Oracle OLAPオブジェクトに値を代入できます。代入文の形式は次のとおりです。

object [= expression]

objectは、データを代入して格納するターゲットです。objectには、Oracle OLAP変数、ディメンション、ディメンション・サロゲート、コンポジットまたはリレーションを指定できます。

expressionは、ターゲットに代入されるデータ値のソースです。

重要:
SQL FETCHまたはSQL IMPORT代入文では、expression構成要素はオプションではありません。ただし、FILEREAD代入文はオブジェクト名のみで構成できます。その場合、入力データはobjectに直接代入されます。FILEREAD代入文のexpressionにはVALUEキーワードを含めることができます。

IF-statement

IF文では、ブール式がTRUEまたはFALSEのいずれであるかに従ってアクションを実行できます。IF文の形式は次のとおりです。

IF bool-exp

THEN action

[ELSE action]

IFはブール式を評価します。TRUEの場合、THEN actionが発生します。FALSEの場合、ELSE actionが指定されていれば発生します。ブール式がNAの場合、actionは発生しません。

actionは、次のうちのいずれかを使用できます。

- NULL(アクションは発生しません)

- 代入文

- SELECT文

- IF文

- action-statementsを含むDO … DOEND文

FILEREAD IF文にはVALUEキーワードの呼出しを含めることができます。FILEREAD IF文を使用することにより、1つのFILEREAD文で、様々なタイプのレコード(異なる構造や異なるターゲット・オブジェクトのレコードなど)を処理できます。

FILEREADでは、同じレコードから異なる値を表すために、VALUEキーワードを複数回使用できます。インスタンスごとに各値を読み取る列を指定します。

SELECT statement

SELECT文によって、式の値に基づいてアクションを実行できます。SELECT文の形式は次のとおりです。

SELECT select-expression

[WHEN expression1 action

[WHEN expression2 action . . .]

[ELSE action]

SELECTはSELECT式を評価し、その結果をWHEN式と順次比較します。最初に一致が見つかったところで、関連付けられたactionが発生します。一致が見つからない場合、ELSE actionが指定されていれば発生します。

SELECT文のactionはIF文のactionと同じです。

FILEREAD SELECT文にはVALUEキーワードの呼出しを含めることができます。FILEREAD SELECT文を使用することにより、1つのFILEREAD文で、様々なタイプのレコード(異なる構造や異なるターゲット・オブジェクトのレコードなど)を処理できます。

ACROSS-statement: action-statement

ACROSS文では、後に続くアクション文がACROSSディメンションのステータスにあるすべての値に対して1回ずつ実行されます。ループを複数のアクション文に適用するには、アクション文を山カッコで囲みます。

ACROSS文の構文は次のとおりです。

ACROSS dimension [limit-clause]:

action-statement

limit-clauseの構文は、各種LIMITコマンドにおけるlimit-clause引数の構文(つまり、LIMITコマンドの「TO」などのlimit-type引数の後の構文)と同じです。これらの引数の構文については、LIMITコマンド(値を使用)、LIMITコマンド(LEVELRELを使用)、LIMIT(親リレーションを使用)、LIMITコマンド(関連ディメンションを使用)、LIMITコマンド(NOCONVERTを使用)およびLIMITコマンド(POSLISTを使用)を参照してください。

次の例は、monthの現行のステータスにかかわらず、monthを最近の6つの値に制限します。

ACROSS month last 6: units

FILEREAD ACROSS文では、Oracle OLAPがACROSS句によって指定されるフィールドの読取りを開始するレコード内の位置を示す属性を指定できます。位置を指定するには、属性FIELD、SPACEおよびCOLUMNを使用します。ACROSS句で指定される一連のフィールドが構造化レコードのすぐ次のフィールドまたはルール化レコードのすぐ次のバイトから始まる場合、位置属性はオプションです。

<action-statement-group>

複数のアクション文は山カッコで囲んでグループ化できます。action-statement-groupの形式は次のとおりです。

<action-statement1 -

[action-statement2 . . .]>

アクション文のグループが使用されるのは、通常、ACROSS文の後です。山カッコの構文によって、ACROSSディメンションのステータスにあるすべての値に対して複数のアクション文を実行できます。

使用上の注意

一度に1つのレコードの読取り

FILEREADのかわりとして、レコードのフィールドを処理する1つ以上のFILEVIEW文とともに、一度に1つのレコードを読み取るFILENEXTファンクションを使用できます。

フィールド表示順

入力レコードにディメンション値と変数データの両方が含まれる場合、ディメンション値はレコードで最初に読み取られるフィールドである必要があり、変数データ値はそのディメンション値の後に読み取られる必要があります。これに従うためには、入力レコードのフィールド自体を並べ替えるか、FILEREAD属性を使用してフィールド位置を明示的に指定します。(attribute引数の説明を参照してください。)

FILEREADで位置属性を使用する必要がないように入力レコードを編成するには、すべてのディメンション値をレコードの最初のフィールドに入れ、変数データ値をレコードの最後のフィールドに入れます。たとえば、同じディメンションを同じ順序(time、productおよびgeography)で共有する2つの変数(unitsおよびsales)のデータがあるとします。この場合、次のサンプル入力レコードに示すように、入力レコードの最初の3つのフィールドにディメンション値を入れ、4番目と5番目のフィールドに変数データを入れます。

Sep99    Snowshoes    Boston    35    5565.95

STOPAFTERキーワード

デフォルトでは、FILEREADはファイルのすべてのレコードを自動的に順次読み取ります。ファイルの最初の部分のみを処理するには、STOPAFTERキーワードを使用します。FILEREADは指定された数のレコードを処理して停止します。その後にファイルを閉じることができます。

ファイルの最初の部分をスキップして残りのレコードを処理するには、STOPAFTERキーワードを使用してフィールド説明を省略します。FILEREADは指定された数のレコードを読み取りますが、データを処理しません。その後に、入力を処理するために、2番目のFILEREAD文をフィールド説明とともに発行します。次のプログラムの抜粋にこの方法を示します。

LIMIT district TO 'Boston'
unit = FILEOPEN('bostdata' READ)
FILEREAD unit STOPAFTER 25
FILEREAD unit WIDTH 8 product SPACE 2 ACROSS month 13 TO 24:-
WIDTH 4 PACKED sales

ディメンション・メンテナンス

フィールド説明のターゲット・オブジェクトがディメンションである場合、ディメンションに値を追加するためにファイルのデータを使用するかどうかを指定できます。ディメンション属性はMATCHおよびAPPENDです。APPENDによってディメンションに値を追加する場合、APPENDのすぐ後にディメンション位置属性(LAST、FIRST、BEFORE pos、AFTER pos)を指定できます。

形式object=expressionの代入文では、ディメンション属性は、等号の右側に置くことができず、ターゲット・オブジェクトの前に指定する必要があります。例外として、結合ディメンションをメンテナンスする場合など、ディメンションをターゲット・オブジェクトとして右側に置くことがあります。例9-130「ファイル・データによる結合ディメンションのメンテナンス」を参照してください。

ディメンション位置番号

入力データがディメンション値ではなくディメンション位置番号で構成される場合、ディメンションの型がTEXT、ID、DAY、WEEK、MONTH、QUARTERまたはYEARである場合でも、フィールド説明で変換型をINTEGERに指定します。

FILEREAD unit COLUMN 1 WIDTH 8 INTEGER month

入力に位置番号が含まれる場合、TEXT、ID、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションに新しい値を追加する際に、APPENDキーワードは使用できません。新しい位置番号には、追加される関連付けられた値がないためです。

結合ディメンション・メンテナンス

結合ディメンションがターゲット・オブジェクトである場合、次の2つの方法のいずれかを使用して値を読み取ることができます。

- 方法1: 入力にベース・ディメンションの値または位置番号が含まれる場合、次のサンプルの2行に示すように、ディメンション・リストを等号の後に山カッコで囲んで指定する必要があります。

FILEREAD unit proddist = <COL 1 W 10 product COL 20 -
W 8 district>
FILEREAD unit proddist = <COL 1 W 10 INTEGER product COL 20 -
W 8 INTEGER district>

この例は、proddist連結ディメンションの値を指定するために使用されているproductおよびdistrictディメンションの値を示します。いずれかのディメンションをメンテナンスする必要がある場合には、APPEND属性も使用できます。ただし、productまたはdistrictの値を最初に処理する必要がある場合は、構文で山カッコ内に等号が必要になるため、代替方法を使用する必要があります。(ネストされた等号は許可されません。)この場合、最初にベース・ディメンション値を読み取って処理し、次にフィールド属性を使用せずに、結合ディメンションのディメンション・リストのディメンションを使用します。たとえば、結合ディメンションのベース・ディメンション値を大文字に変換するには、次のような文を使用します。

FILEREAD unit COL 14 W 8 product = UPCASE(VALUE) -
COL 5 W 8 district = UPCASE(VALUE) -
proddist = <product, district>

- 方法2: 入力に結合ディメンションの位置番号が含まれる場合、INTEGERキーワードを指定する必要があります。

FILEREAD unit INTEGER proddist

コンポジットによってディメンション化された変数を伴うFILEREAD

FILEREADは、コンポジットによってディメンション化された変数にデータを読み取る場合、非NA値を割り当てられているターゲット・セルが欠落していると、それを自動的に作成します。この処理によって、その新しいセルに対応するすべてのディメンション値の組合せがコンポジットにも追加されます。したがって、ターゲット・オブジェクトおよびコンポジットは、代入後にサイズが大きくなることがあります。

コンポジットによってディメンション化された変数と効率

FILEREADの自動コンポジット・メンテナンス機能を使用して、コンポジットによってディメンション化された変数にデータをロードする場合、変数のデータにアクセスしようとする際に後で発生する可能性があるパフォーマンスの問題に注意する必要があります。変数のディメンション・リストにおけるコンポジットの位置によって、後でパフォーマンスの問題が発生するかどうかがわかります。

コンポジットが変数の定義におけるディメンション・リストの最後(最も変化の遅い位置)にある場合、ディメンション・リストにコンポジットが含まれない変数に対するのと同じようにFILEREADを使用できます。たとえば、同じFILEREAD文を使用して、次の定義の変数newsalesおよびnewsales.cpにデータを読み取ることができるので、効率が損なわれません。

DEFINE newsales VARIABLE DECIMAL <product district month>
DEFINE newsales.cp VARIABLE DECIMAL <product SPARSE<district month>>

newsales.cpは、3つのディメンションによってディメンション化されており、そのうち最後の2つのディメンションはコンポジットです。ただし、次の定義のnewsales2.cpのような変数がある場合は、FILEREADによってロードされるデータにアクセスする際のパフォーマンスに影響することがあります。

DEFINE newsales.cp VARIABLE DECIMAL <SPARSE<district month> product >

この場合、パフォーマンスの問題を回避するために、次に示す2つの方法のいずれかを使用します。

- FILEREADを使用する前に、CHGDFNをSEGWIDTHキーワードとともに使用して変数のセグメント・サイズを変更します。CHGDFN SEGWIDTHによって変数のセグメントのサイズを指定できます。セグメントは、変数が保持する値の合計数のうちの一部分です。変数内のセグメント数は、データのロード時やデータへのアクセス時のパフォーマンスに影響します。CHGDFN SEGWIDTH文で指定するセグメント・サイズは、varnameで指定する変数に対してのみではなく、同じ組合せのディメンションとコンポジットが同じ順序で定義されているその他すべての変数およびリレーションに対しても使用されます。

- 結合ディメンションの場合と同じようにコンポジット値を明示的に追加できます。この方法は、名前付きコンポジットと名前のないコンポジットの両方に使用できます。「コンポジット・メンテナンス」を参照してください。

コンポジット・メンテナンス

FILEREADによってコンポジットを明示的にメンテナンスする場合、結合ディメンションのメンテナンスのために使用するのと同じ構文を使用します。コンポジットに名前がない場合、形式SPARSE<dim1 dim2 ...>で指定します。FILEREADによる明示的コンポジット・メンテナンスと自動コンポジット・メンテナンスのそれぞれの利点については、「コンポジットによってディメンション化された変数を伴うFILEREAD」および「コンポジットによってディメンション化された変数と効率」を参照してください。

FILEREADでのDWMQYディメンションの使用方法

フィールドのターゲット・オブジェクトがDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションである場合、デフォルトの変換型はVNFです。したがって、入力値がターゲット・ディメンションのVNF(ディメンションのVNFがないときはデフォルトのVNF)に従って書式化されている場合、変換型を指定する必要はありません。

フィールドのターゲット・オブジェクトがDATE変数であるか、DAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンションである場合、DATEORDERに示す日付として有効な入力スタイルである値は、FILEREADによって正確に解釈されます。DAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンションでは、変換型としてDATEを指定する必要があります。DATE変数の値では、DATEがデフォルトの変換型なのでDATEキーワードはオプションです。

時間ディメンションまたはDATE変数の値が日付を表すINTEGER値(1 = January 1, 1900)である場合も、FILEREADによって正確に解釈されます。この場合、変換型としてRAW DATEを指定する必要があります。

空白のフィールド

フィールドが空白である場合、その値はNAであり、ターゲット変数にNAが代入されます。空白のフィールドの例として、スペースで埋められたテキスト・フィールド、レコードの末尾より後から始まるフィールド、またはフィールド・デリミタ間にスペースも何もない構造化ファイルのフィールドがあります。

FILEREADでのフィールド属性の配置

通常、フィールド属性は、ターゲット・オブジェクトの直前または等号の右側の式の直前に置きます。

attributes object

ただし、複数のフィールドに属性を適用するには、山カッコで囲んだターゲット・オブジェクトのリストの前に属性を指定します。1つのオブジェクトに適用する複数の属性を含めるには、属性を適用するオブジェクトの前に属性を山カッコで囲んで指定します。

attributes0 <attributes1 object1=expression object2 attributes3 object3>

山カッコは、結合ディメンション値のベース値を囲む場合にも使用します。

FILEREADでエラーが発生した場合のエラー処理

FILEREADがエラーを検出した場合、エラー・トラップおよび適切な処理によって発生したエラーを制御できます。データを互換性のないデータ型に変換しようとした場合、または無効なディメンション値が検出された場合に、エラーが発生します。FILEERRORファンクションを使用して、エラーの原因に関する詳細を取得できます。エラーを処理した後は、TRAP文を使用してエラー・トラップをオンに戻し、GOTOを使用してFILEREAD文に分岐して戻ります。処理は次のレコードから続行します。例9-128「エラー処理」を参照してください。

NTEXT値を持つターゲット・オブジェクトの指定

構造化ファイルまたはCSVファイルのデータにNTEXT型のターゲット・オブジェクトを指定した場合、FILEREADは値を格納する前に、その値がNTEXTオブジェクトに割り当てられていても、ファイルのデータをデータベース・キャラクタ・セットに変換するため、ファイルのデータがデータベース・キャラクタ・セットで表せない場合にデータが失われることがあります。固定幅の列であるルール化ファイルの場合、FILEREADはデータベース・キャラクタ・セットに変換しないので、データが失われることはありません。

例

例9-126 ディメンション値とデータ

アナリティック・ワークスペースに6文字の製品識別番号が含まれているとします。製品名および各月の売上数量の値をインポートする必要があります。直近の四半期のデータファイルの形式は、次のとおりです。

Jan951234aa00Chocolate Chip Cookies        123
Jan951099bb00Oatmeal Cookies               145
Jan952355cc00Sugar Cookies                 223
Jan955553ee00Ginger Snap Cookies           233
Feb951234aa00Chocolate Chip Cookies        123
Feb951099bb00Oatmeal Cookies               O145
Feb952355cc00Sugar Cookies                 SS223
Feb955553ee00Ginger Snap Cookies           G233
Mar952355cc00Sugar oCookies                 223
Mar955553ee00Ginger Snap Cookies           233
Mar953222dd00Brownies                      432

ディメンションおよび変数の定義は、次のとおりです。

DEFINE month DIMENSION MONTH
DEFINE productid DIMENSION ID
DEFINE productname VARIABLE TEXT <productid>
DEFINE units.sold VARIABLE INTEGER <month productid>

次のプログラムは、FILEREADを使用してmonthおよびproductidの新しい値をアナリティック・ワークスペースに追加し、データを正しい変数に格納します。1つのFILEREAD文でディメンションをメンテナンスしてファイルを閉じ、再びそのファイルを処理して関連付けられたデータを取得します。

DEFINE read.product PROGRAM
PROGRAM
VARIABLE fi INT
fi = FILEOPEN('Dr.Dat' READ)
FILEREAD fi COLUMN 1 APPEND WIDTH 5 month -
COLUMN 6 APPEND WIDTH 6 productid
FILECLOSE fi

fi = FILEOPEN('Dr.Dat' READ)
FILEREAD fi COLUMN 1 WIDTH 5 month -
COLUMN 6 WIDTH 6 productid -
COLUMN 12 WIDTH 30 productname -
COLUMN 44 WIDTH 22 units.sold
FILECLOSE fi
END

例9-127 ディメンション・サロゲート値

この例は、1つのFILEREAD操作でproductディメンションに値を追加し、productディメンションのNUMBERディメンション・サロゲートであるprodnumに値を代入します。2番目のFILEREADでは、month、productおよびdistrictによってディメンション化されているunits変数に値を代入します。ディメンション値およびサロゲート値のデータファイルの形式は、次のとおりです。

Kiyaks400

次の文は、ファイル・ユニットを定義してファイルを開き、その内容を読み取ってproductディメンションへの値の追加およびprodnumサロゲートへの値の代入を行い、ファイルを閉じます。

DEFINE funit INT
funit = FILEOPEN('Ds.Dat' READ)
FILEREAD funit COL 1 APPEND W 6 product COL 7 ASSIGN W 3 prodnum
FILECLOSE funit

変数値のデータファイルの形式は、次のとおりです。

Jan02400Boston416

次の文は、ファイルを開いてその内容を読み取り、prodnumサロゲートの値との一致を見つけてunits変数に値を代入した後、ファイルを閉じます。

funit = FILEOPEN('Var.Dat' READ)
FILEREAD funit COL 1 W 5 month COL 6 MATCH W 3 prodnum -
COL 9 W 6 district COL 15 W 3 INTEGER units
FILECLOSE funit

例9-128 エラー処理

書式指定に一致しないデータが入力ファイルにある場合、または、デフォルトのMATCH属性を使用しているときにアナリティック・ワークスペースに含まれないディメンション値が入力ファイルにある場合、エラーが発生します。トラップ・ラベルでエラー処理を使用してエラーの種類をチェックし、不正なレコードをスキップし、ファイルの処理を続行します。FILEPUT文を使用して、不正なレコードを別のファイルに格納することもできます(FILEPUTコマンドを参照)。

次の例では、トラップ・ラベルの文が、ファイルが正常に開かれたか(fil.unitはINTEGER値)およびユーザーがプログラムを中断したのかどうかをチェックします。これらのエラーの原因に該当しない場合、プログラムは不正なレコードを検出したと判断し、トラップをリセットしてからFILEREAD文に分岐して戻り、次のレコードの処理を続行します。

DEFINE read.price PROGRAM
PROGRAM
VARIABLE fil.unit INTEGER
TRAP ON ERROR
fil.unit = FILEOPEN( ARG(1) READ)
LIMIT month TO &ARG(2)
NEXT:
FILEREAD fil.unit -
WIDTH 8 product -
WIDTH 4 BINARY price
FILECLOSE fil.unit
RETURN
error:
IF fil.unit EQ NA
THEN RETURN
IF ERRORNAME NE 'attn' AND ERRORNAME NE 'quit'
THEN DO
SHOW JOINCHARS('Record ' RECNO(fil.unit) ' is Invalid.')
TRAP ON ERROR
GOTO NEXT
DOEND
FILECLOSE fil.unit
END

例9-129 アナリティック・ワークスペース・オブジェクトへの割当て前のファイル・データの事前処理

各フィールドのデータをアナリティック・ワークスペースの変数またはディメンションに割り当てる前に、そのデータを処理することもできます。たとえば、データファイルには6桁の数字の製品識別子があり、アナリティック・ワークスペースにはそれと同じ製品番号の値で先頭にPが付くproductディメンションがあるとします。このとき、ファイルの識別子を処理して各値の先頭にPを追加できます。

FILEREAD unit COLUMN 1 WIDTH 6 APPEND LSET 'p' product

例9-130 ファイル・データによる結合ディメンションのメンテナンス

FILEREADによって結合ディメンションをメンテナンスするには、最初にベース・ディメンションをメンテナンスするために入力ファイルの新しい値を追加します。次に、その結果のベース・ディメンション値の組合せを結合ディメンションに割り当てます。次の例は、2つの異なるフィールドからベース・ディメンション値を取得し、その値をベース・ディメンションに追加し、さらに、その組合せを結合ディメンションに追加します。

FILEREAD unit APPEND proddist = <W 8 product, W 8 district>

この文では、山カッコで囲まれていることによって3つのすべてのディメンションにAPPENDが適用されます。ベース・ディメンションには新しい値を追加せずに、新しい結合ディメンション値のみを追加するには、次の2つの文に示すように、キーワードMATCHを明示的に指定するか、ターゲット・オブジェクトの順序を変更します。

fileread unit APPEND proddist = <W 8 MATCH product,W 8 MATCH district>

または

FILEREAD unit W 8 product W 8 district APPEND proddist = <product, district>

例9-131 構造化PRNファイルからのデータの読取り

フィールド2にproductディメンションの値、フィールド3にdistrictディメンションの値、およびフィールド6から始まる複数月の売上値がある構造化PRNファイルからデータを読み取るとします。次の文によって、ファイルの最初の10レコードを読み取ることができます。

FILEREAD unit STOPAFTER 10 STRUCTURED FIELD 2 product -
district FIELD 6 ACROSS month: sales

FILESET

FILESETコマンドは、指定したファイル・ユニットのページング属性を設定するコマンドです。

構文

FILESET fileunit attrib-arg1 exp1 [attrib-argN expN ...]

ここで、attrib-argは次のいずれかです。

BMARGIN

LINENUM

LSIZE

ORIGIN

PAGENUM

PAGEPRG

PAGESIZE

PAGING

PAUSEATPAGEEND

TABEXPAND

TMARGIN

パラメータ

fileunit

FILEOPEN文またはOUTFILE文を使用してあらかじめ開かれているファイルに割り当てられるファイル・ユニット番号。開かれているファイルに対してのみ属性を設定できます。属性の引数が、変更するファイル特性を指定します。属性は、指定したファイル・ユニットに対応する必要があり、対応しない場合、Oracle OLAPはエラーを返します。属性名とその新しい値のペアを指定することで、複数の属性を1つのFILESET文に設定できます。

BMARGIN

下部余白になる空白行の数を指定します。

LINENUM

現行の行数を指定します。PAGINGがオンの場合は改ページのたびにリセットされ、オフの場合は増え続けます。

LSIZE

テキスト出力ファイルの行の最大長、またはバイナリ入力ファイルのレコード長を指定します。

ORIGIN

ファイルが作成されたシステムのタイプを指定します。ORIGIN属性のデフォルト値は現在使用しているシステムを反映するので、異なるシステムで作成されたファイルの場合はORIGINを設定する必要があります。ORIGINの設定は、データ読取り文によるファイルの解釈の仕方に影響します。たとえば、データ読取り文はこの設定の情報を使用して、バイナリ・データのバイトを反転する必要があるかどうかなどを決定します。正しく設定するために表9-8「FILESETのORIGIN句の値」を参考にしてください。使用しているシステムが表にない場合、ORIGINの値としてPCまたはHPを使用してみてください。どちらかの値で機能しない場合、もう一方の値に変更してください。

表9-8 FILESETのORIGIN句の値

値

ハードウェアまたはオペレーティング・システム

ALPHA

Alphaプロセッサを使用するDECワークステーション

AVMS

VMで実行されるDEC Alphaプロセッサ

HP

HP MPE XL

HPS700

HP Series 700 Workstation

HPS800

HP Series 800 Workstation

IBMPC

DOS、WindowsまたはWindows NTを実行するIntelプロセッサ

INTEL5

UNIXを実行するIntel5プロセッサ

MIPS

MIPSシステム

MVS

IBM MVS/TSO

NTALPHA

Windows NTを実行するDEC Alphaプロセッサ

PC

DOS、WindowsまたはWindows NTを実行するIntelプロセッサ

RS6000

IBM AIXを実行するIBM RS6000プロセッサ

SOLARIS2

Solaris2を実行するワークステーション

SUNOS4

SunOS4を実行するワークステーション

VAX

VAX VMS(G formatの浮動小数点のみ)

VM

VM/CMS

PAGENUM

現行のページ数を指定します。

PAGEPRG

出力がページングされる際にページ・タイトルおよびヘッダーを生成するOLAP DMLプログラムを指定します。

PAGESIZE

各ページの行数を指定します。

PAGING

出力が各ページで書式化されるかどうかを指定します。これは、PAGINGオプションをYESに設定するのと同じです。

PAUSEATPAGEEND

各ページが終わるたびにOracle OLAPが一時停止するかどうかを指定します。

TABEXPAND

タブ文字が拡張されるかどうかを指定します。TABEXPANDがゼロの場合、タブ文字は拡張されません。0より大きい値は、タブ間の距離のバイト数を示します。TABEXPANDのデフォルト値は8です。

TMARGIN

上部余白になる空白行の数を指定します。

exp

設定する属性の新しい値を含む式。式のデータ型は属性のデータ型と同じである必要があります。

例

例9-132 レポートのページングの設定

ディスク・ファイルのレポートに出力を送信する場合、次のように属性を設定することによって、レポートを各ページに編成して最初のページを1とすることができます。

DEFINE fil.unit INTEGER
fil.unit = FILEOPEN('REPORT' WRITE)
FILESET fil.unit PAGING YES PAGENUM 1

FILEVIEW

FILEVIEWコマンドは、入力ファイルから一度に1つのレコードを読み取るFILENEXTファンクションとともに機能してデータを処理し、フィールド説明に従ってOracle OLAPディメンションおよび変数にデータを格納するコマンドです。FILENEXTでレコードを読み取ってから、必要に応じて、1つ以上のFILEVIEW文を使用してフィールドを処理します。FILEVIEWには、入力の形式および出力の処理を指定するためにFILEREADと同じ属性があります。

構文

FILEVIEW fileunit [field-desc...]

パラメータ

fileunit

FILEOPENファンクションを事前にコールすることによって読取り用(READモード)で開かれるファイルに割り当てられるファイル・ユニット番号。

field-desc

フィールド説明は、各入力レコードの1つ以上のフィールドの処理方法を示します。フィールド説明の属性は、入力データの書式化の方法を指定します。FILEVIEWは、書式指定に従って各フィールドを読み取り、入力データを指定されたオブジェクトに割り当てます。データをオブジェクトに直接割り当てることも、式を指定して割当ての前にデータを操作することもできます。1つのフィールド説明によって、1つの入力フィールドのデータを1つのOracle OLAPオブジェクトに割り当てることができます。あるいは、ACROSSキーワードを使用して、入力レコードの複数の値を最も変化の速いディメンションによってディメンション化されている変数に割り当てることもできます。フィールド属性には入力レコードの列番号が含まれるので、入力フィールドを任意の順序で処理できます。

フィールド説明の形式は、次のとおりです。

[[pos] ACROSS dim [limit-clause]:] [attribs] object [= exp]

pos

Oracle OLAPがACROSS句によって指定されるフィールドの読取りを開始するレコード内の位置を指定する1つ以上の属性。位置を指定するには、属性FIELD、SPACEおよびCOLUMNを使用します(FILEREADコマンドを参照)。ACROSS句で指定される一連のフィールドが構造化レコードのすぐ次のフィールドまたはルール化レコードのすぐ次のバイトから始まる場合、pos引数はオプションです。

ACROSS-statement: action-statement

入力レコードにおける1つ以上のデータ・フィールドのディメンションを指定します。FILEVIEWは、dimの現行のステータスの値に従ってフィールドのデータを変数に割り当てます。通常、各フィールド説明で1つの値を処理します。ただし、ACROSSキーワードを使用することにより、現在ステータスにあるディメンション値ごとに1つの入力値を処理できます。ループを複数のアクション文に適用するには、アクション文を山カッコで囲みます。

ACROSS文の構文は次のとおりです。

ACROSS dimension [limit-clause]:

action-statement

limit-clauseの構文は、各種LIMITコマンドにおけるlimit-clause引数の構文(つまり、LIMITコマンドの「TO」などのlimit-type引数の後の構文)と同じです。これらの引数の構文については、LIMITコマンド(値を使用)、LIMITコマンド(LEVELRELを使用)、LIMIT(親リレーションを使用)、LIMITコマンド(関連ディメンションを使用)、LIMITコマンド(NOCONVERTを使用)およびLIMITコマンド(POSLISTを使用)を参照してください。

次の例は、monthの現行のステータスにかかわらず、monthを最近の6つの値に制限します。

ACROSS month last 6: units

attribs

レコード内の位置および入力データの形式をOracle OLAPに知らせる1つ以上の属性。(使用可能な属性の説明は、FILEREADコマンドを参照してください。)

object [= exp]

入力データの割当て先となるOracle OLAP変数、ディメンションまたはリレーション。= expがない場合、データは暗黙的にオブジェクトに割り当てられます。= expがある場合、データは式に従って処理されてobjectに割り当てられます。

VALUEキーワードを使用して、レコードの特定フィールドの値を表すことができます。VALUEは、使用するFILEREADの属性に従って書式化してファイルのデータを表します。レコードのフィールドが空白の場合、FILEREADはその値をNAとみなします。デフォルトでは、VALUEのデータ型はターゲット・オブジェクトのデータ型です。ただし、属性キーワードによって別のデータ型を指定できます。VALUEは、同じレコードから異なる値を表すために複数回使用できます。次のサンプル・コードに示すように、インスタンスごとに各値を読み取る列を指定します。

sales = if col 1 w 1 text value eq 'A' then col 2 w 8 value -
else col 10 w 8 value

この例では、VALUEのデフォルトのデータ型は、ターゲット・オブジェクトsalesのデータ型である10進数です。ただし、VALUEの最初のインスタンスはテキスト式と比較されるので、そのデータ型を指定するためには属性TEXTを使用する必要があります。

SELECT exp

フィールド説明のSELECTキーワードは、1つのFILEVIEW文によって様々なタイプのレコード(異なる構造や異なるターゲット・オブジェクトのレコードなど)を処理します。フィールド説明内に、次の構文を使用できます。

SELECT exp -

[WHEN exp action [WHEN exp action ...]] -

[ELSE action]

IF bool-exp THEN action [ELSE action]

DO

field-desc

[field-desc]

...

DOEND

action引数は、次のうちのいずれかです。

- NULL(アクションは発生しません)

- ネストされたIF文およびSELECT文を含むfield-description

SELECTは最初の式を評価しますが、この式にはVALUEキーワードの呼出しを含めることができ、デフォルトのデータ型はTEXTです。次に、SELECTはその結果をWHEN式と順次比較します。最初に一致が見つかったところで、関連付けられたactionが発生します。一致が見つからない場合、ELSE actionが指定されていれば発生します。

IF bool-exp

フィールド説明のIFキーワードは、1つのFILEVIEW文によって様々なタイプのレコード(異なる構造や異なるターゲット・オブジェクトのレコードなど)を処理します。フィールド説明内に、次の構文を使用できます。

IF bool-exp THEN action [ELSE action]

actionはSELECTの説明と同じです。

IFはブール式を評価しますが、この式にはVALUEキーワードの呼出しを含めることができます。式がTRUEの場合、IFはTHENアクションを実行し、式がFALSEの場合に、ELSEアクションが指定されていればそのアクションが実行されます。式がNAの場合、アクションは発生しません。

使用上の注意

レコード順序

FILEVIEWは、レコードのフィールドを任意の順序で処理できます。列番号によって明示的にフィールドを特定して、処理する順序にフィールド説明を列記します。また、レコード内のデータに応じて異なる処理を実行するには、同じレコードに対して複数のFILEVIEW文を使用します。

代替OLAP DML文

ファイルのすべてのレコードを複雑なオプションの処理を行わずに同じ方法で処理するには、FILEREAD文を使用すると簡単です。

ディメンション値

フィールド説明のターゲット・オブジェクトがディメンションである場合、ディメンションに値を追加するためにファイルのデータを使用するかどうかを指定できます。ディメンション属性は、次のようにMATCHおよびAPPENDです。

- MATCH: フィールドにある値はすでにディメンションの値である必要があります。FILEVIEWはステータスを一時的にその値に制限します。すでにディメンション値になっているのではない場合、FILEVIEWはエラーを生成します。FILEVIEW文の実行後と実行前のディメンション・ステータスは同じです。

- APPEND: フィールドの値はすでに存在するか新規です。値が存在する場合、FILEVIEWはステータスをその値に制限し、存在しない場合、FILEVIEWは値を追加してからステータスを制限します。FILEVIEWが終了するとディメンションはALLに制限されます。

ディメンションの処理の詳細は、FILEREADコマンドを参照してください。

FILEVIEWでエラーが発生した場合のエラー処理

FILEVIEWがエラーを検出した場合、エラー・トラップおよび適切な処理によって発生したエラーを制御できます。データを互換性のないデータ型に変換しようとした場合、または無効なディメンション値が検出された場合に、エラーが発生します。FILEERRORファンクションを使用すると、発生したエラーのタイプを確認できます。エラーを処理した後は、GOTOを使用してFILEVIEW文に分岐して戻ることができます。

属性リスト

FILEVIEWおよびFILEREADの属性の完全なリスト、NA値の処理、日付値の読取り、多次元データの読取り、NTEXT値の格納、および属性の指定については、FILEREADコマンドを参照してください。

コンポジットを伴うFILEVIEW

FILEREADにおけるコンポジットおよびコンポジットによってディメンション化された変数の説明は、FILEVIEWにも適用されます。

例

例9-133 可変の月数

次のプログラムは、可変の月数に関する販売データを含む入力ファイルを処理します。ファイルには次のレコードがあります。

- レコード1: タイトル(無視されます)。

- レコード2: 列ラベル。月名を使用してmonthのステータスを設定します。月数はファイルを処理するまで不明です。

- レコード3: 列ラベルに下線を引くダッシュ(無視されます)。

- レコード4: 空白。

- レコード5から最後まで: レコード5には3タイプのレコードがあり、各タイプごとに1行読み取られます。

レコード5のうちの1つのレコード・タイプは、次の表に示す内容の詳細行を表します。

列

幅

フォーマット

データ

1

8

シンボリック

地区名または空白(詳細行で地区名が空白である場合、地区名を含む最新の行によって現行地区が決定される)

10

10

シンボリック

製品名

21

10

シンボリック

最初の月の売上

33

10

シンボリック

2番目の月の売上

45

レコードの最後まで

シンボリック

その他の月の売上

レコード5の別のレコード・タイプは、次の表に示す内容の合計行を表します。

列

幅

データ

1

18

空白

21

レコードの最後まで

合計

レコード5の最後のレコード・タイプは、次の表に示すように、行セパレータとしてのダッシュまたは等号を含みます。

列

幅

データ

1

18

空白

21

レコードの最後まで

ダッシュ(--)または等号(==)

次は、サンプル・ファイルのレコードです。

This is the Title
Jan95      Feb95      Mar95      Apr95
---------- ---------- ---------- ----------

Boston   Tents       32,153.52  32,536.30  43,062.75  57,608.39
Canoes      66,013.92  76,083.84  91,748.16 125,594.28
Racquets    52,420.86  56,837.88  58,838.04  69,338.88
Sportswear  53,194.70  58,913.40  62,797.80  67,869.10
Footwear    91,406.82  86,827.32 100,199.46 107,526.66
---------- ---------- ---------- ----------
295,189.82 311,198.74 356,646.21 427,937.31
---------- ---------- ---------- ----------
Atlanta  Tents       40,674.20  44,236.55  51,227.06  78,469.37
.
.
.
Footwear    53,284.54  57,331.30  59,144.76  70,516.98
---------- ---------- ---------- ----------
231,780.46 245,812.33 275,622.68 355,784.92
---------- ---------- ---------- ----------
1,813,326  1,985,731  2,185,174  2,638,409
========== ========== ========== ==========

次のプログラムは、ファイルでカバーされている月を確認し、詳細行を読み取り、販売データを適切な地区および月に割り当てます。FILEVIEWが空白である列1から19までを検出すると、プログラムは合計行を無視して下線を引きます。プログラムはデータファイルの名前を引数として受け取ります。

DEFINE salesdata PROGRAM
LD Store Several Months of Sales Data in an Analytic Workspace
PROGRAM
VARIABLE fil.unit INTEGER
VARIABLE flag BOOLEAN
VARIABLE mname TEXT
VARIABLE label TEXT
VARIABLE savedist TEXT

TRAP ON error NOPRINT
PUSH month district
fil.unit = FILEOPEN(ARG(1) READ)

IF FILENEXT(fil.unit) NE YES    "Skip Record 1
THEN SIGNAL noread
IF FILENEXT(fil.unit) NE YES    "Process Record 2
THEN SIGNAL noread
FILEVIEW fil.unit COLUMN 21 ACROSS month: -
WIDTH 10 mname = JOINLINES( mname VALUE)
LIMIT month TO mname
IF FILENEXT(fil.unit) NE YES     "Skip Record 3
THEN SIGNAL noread
IF FILENEXT(fil.unit) NE YES     "Skip Record 4
THEN SIGNAL noread

WHILE FILENEXT(fil.unit)  "Process Record 5 To End Of File
DO
"Store Value In Local Label Variable
FILEVIEW fil.unit COLUMN 1 WIDTH 18 label
IF label NE NA         "Check For NA (Blank Field)
THEN DO              "Get District Value If Present
IF EXTCHARS(label, 1, 8) NE '      '
"Set District Status
THEN savedist = BLANKSTRIP(EXTCHARS(label, 1, 8))
FILEVIEW fil.unit -
COLUMN 1 WIDTH 8 district = IF VALUE NE NA THEN -
VALUE ELSE savedist -
COLUMN 10 WIDTH 10 product -
COLUMN 19 ACROSS month: WIDTH 10 SPACE 2 -
SCALE 2 newsales
DOEND
NEXT:
DOEND

FILECLOSE fil.unit
POP month district
RETURN
error:
IF fil.unit EQ NA
THEN SHOW JOINCHARS('Can\'t Open Data File ' ARG(1) '.')
ELSE IF ERRORNAME NE 'attn' AND ERRORNAME NE 'QUIT'
THEN DO
SHOW JOINCHARS('RECORD ' RECNO(fil.unit) ' is invalid.')
GOTO NEXT
DOEND
ELSE IF ERRORNAME EQ 'noread'
THEN DO
SHOW 'File Too Short.'
FILECLOSE fil.unit
DOEND
ELSE DO
SHOW 'Data Import Interrupted.'
FILECLOSE fil.unit
DOEND
POP month district
RETURN

例9-134 追加処理

FILEVIEWが読み取ったディメンション値を表示またはその後の処理のために保存する場合、フィールドを再び読み取ってその値を変数に保存できます。次のプログラムの行は、FILEVIEWが読み取った月の名前を表示します。FILEVIEWコマンドは、列1の月の値をmnameという名前の変数に保存します。

WHILE FILENEXT(fil.unit)
DO
FILEVIEW fil.unit WIDTH 8 month WIDTH 5 INTEGER units -
COLUMN 1 WIDTH 8 mname
SHOW mname PROMPT
DOEND

例9-135 ファンクションとしてのVALUEキーワードの使用

次のような15文字幅の列を持つnumbers.datという名前のディスク・ファイルからデータを読み取ってレポートするとします。

1.0            2.0            3.0            4.0            5.0
-1.0           -2.0           -3.0           -4.0           -5.0
0.0            0.0            1.43900000E+03                1.39900000E+03

次に示すtryという名前のプログラムで、FILEVIEWとともにVALUEキーワードをファンクションとして使用してこのデータを読み取ることができます。ただし、この最初のサンプル・プログラムは機能しません。FILEVIEWコマンドによってフィールドがスキップされます。データがスキップされる原因は、FILEREADが現行レコードからフィールドをフェッチするたびに、列ポインタが更新されてそのフィールドの先を指すことにあります。COLUMN、SPACEまたはFIELD属性を使用して次のフェッチが位置を指定するのではない場合、前のフェッチによって指定されるデフォルトの位置からデータが読み取られます。これは通常は望ましい動作ですが、単一の割当てを実行するために複数のフェッチが必要な場合(たとえば次に示すとおり、同じIF...THEN...ELSEコマンドのブロックにVALUEファンクションが2回コーディングされている場合など)には機能しません。NAMELISTおよびDIRLIST属性は、ディレクトリ内の特定ファイル名の複数バージョンに対して1つの値を返します。また、NAMELIST属性は、ルート・ファイル名は同じでファイル・タイプが異なるディレクトリ内の複数ファイルに対しても1つの値のみを返します。

DEFINE try PROGRAM
PROGRAM
VARIABLE funit INTEGER
DEFINE dvar VARIABLE DECIMAL <year>
PUSH year
LIMIT year TO LAST 5
TRAP ON ERROR
funit=FILEOPEN('numbers.dat' R)

WHILE FILENEXT(funit)
DO
FILEVIEW funit ACROSS year: W 15 TEXT dvar = -
IF FINDCHARS(VALUE, 'e') EQ 0 -  "Incorrect Use of Value
THEN CONVERT(VALUE, dec) -       "Results in Skipped
ELSE -9999.99                    "Fields
REPORT DOWN year dvar
DOEND
error:
FILECLOSE funit
DELETE dvar
POP year
END

次のようにtryプログラムを実行すると、

try

次のように出力で数値がスキップされます。

YEAR              DVAR
-------------  ----------
Yr93                 2.00
Yr94                 4.00
Yr95                   NA
Yr96            -9,999.99
Yr97            -9,999.99

YEAR              DVAR
-------------  ----------
Yr93                -2.00
Yr94                -4.00
Yr95                   NA
Yr96            -9,999.99
Yr97            -9,999.99

YEAR              DVAR
-------------  ----------
Yr93                 0.00
Yr94            -9,999.99
Yr95            -9,999.99
Yr96            -9,999.99
Yr97            -9,999.99

これに対し、2番目のVALUEが一定の距離を戻るようにSPACE属性を使用し、同じフィールドが読み取られるようにすると、正常に機能します。前述のサンプル・プログラムでSPACEを使用するには、THEN句を次の句に変更します。

THEN CONVERT(SPACE -15 VALUE, dec) -

ここで、変更したプログラムを実行します。

try

次のように出力されます。

YEAR              DVAR
-------------  ----------
Yr93                 1.00
Yr94                 2.00
Yr95                 3.00
Yr96                 4.00
Yr97                 5.00

YEAR              DVAR
-------------  ----------
Yr93                -1.00
Yr94                -2.00
Yr95                -3.00
Yr96                -4.00
Yr97                -5.00

YEAR              DVAR
-------------  ----------
Yr93                 0.00
Yr94                 0.00
Yr95            -9,999.99
Yr96            -9,999.99
Yr97            -9,999.99

FOR

OLAP DMLプログラムでは、FORコマンドにより1つ以上のディメンションが指定され、このディメンションのステータスに基づいて、1つ以上の文の反復処理が制御されます。FOR文を含めたこれらの文は通常、FORループと呼ばれます。

構文

FOR dimension...

statement

パラメータ

dimension

1つ以上のディメンションで、その現行のステータスによって1つ以上の文の反復処理が制御されます。文は、現行のステータスにある指定されたディメンションの値の各組合せに対して繰り返されます。複数のディメンションを指定した場合、最初のディメンションが最後に変化します。ディメンションのかわりにコンポジットを指定できます。

statement

繰り返される文。2つ以上の文を繰り返すには、それらをDOとDOENDで囲みます。

DO
statement1
...
statementN
DOEND

FORの後で文を1つのみ繰り返す場合、DOおよびDOENDはオプションです。

使用上の注意

FORディメンション

FOR文は、指定したディメンションのステータスにある値をループします。最後のディメンション値の後、ディメンション・ステータスはループ前のステータスにリストアされ、次の文のプログラム実行が再開されます。

ループ内のステータス

TEMPSTATコマンドは、FORループ内またはREPORT文によって自動的に生成されるループ内でループするディメンションを制限します。

ソート不可

現行のステータスがFORループを定義および制御するので、ループ内でFORディメンションをソートできません。

代入文と他のループ文

OLAP DML代入文(SET)および他の一部のOLAP DML文は、自動的にディメンション・ステータスをループし、FORループより効率的です。代入文などのこのような文をループに入れることによって不必要なループが発生しないように注意してください。

分岐

BREAK、CONTINUEおよびGOTOの各文を使用すると、FORループ内での分岐またはFORループ外への分岐が可能なため、文の実行順序を変更できます。

FOR文のネスト

対応するDOおよびDOEND文を必要に応じて指定することによって、FOR文をFORループ内で任意の深さまでネストできます。

例

例9-136 FORループのDOによるROWコマンドの繰返し

レポート・プログラムで、3か月の各月におけるテントの売上数量を表示するとします。次のようにFOR文をDO/DOENDシーケンスとともに使用して、monthディメンションの各値に対し、ROWコマンドおよびBLANKコマンドを繰り返します。

LIMIT product TO tents
LIMIT month TO 'Jan96' TO 'Mar96'
ROW district
ROW UNDER '-' VALONLY name.product
BLANK
FOR month
DO
ROW INDENT 5 month WIDTH 6 UNITS
BLANK
DOEND

このプログラムの行によって次のレポートが生成されます。

BOSTON
3-Person Tents
--------------

Jan96              307
Feb96              209
Mar96              277

例9-137 値をループ処理するFOR文の使用方法

FORコマンドは、ディメンションの現行のステータスの各値に対してコマンドをループして実行します。FOR文を実行する前に、ディメンションを目的の値に制限する必要があります。たとえば、各製品の価格を表示する一連の出力行を生成できます。

LIMIT month TO FIRST 1
LIMIT product TO ALL
FOR product
SHOW JOINCHARS('Price for ' product ': $' price)

各出力行の形式は、次のとおりです。

Price for TENTS: $165.50

データが多次元である場合、FOR文に複数のディメンションを指定して処理順序を制御できます。たとえば、次の文を使用すると、unitsデータのディメンション値が処理される順序を制御できます。

FOR month district product
units = ...

この代入文を実行すると、monthディメンションが最後に変化し、districtディメンションがその前に変化し、productディメンションが最初に変化します。したがって、最初の地区のすべての製品に対してループが実行されてから次の地区が実行され、最初の月のすべての地区に対して実行されてから次の月が実行されます。

FORループ内では、ループの文が実行される間、指定した各ディメンションは一時的に単一の値に制限されます。そのため、ループ内でディメンション値の組合せを限定できます。

例9-138 FORループでのDO/DOENDの使用方法

売上数量の実績値がunitsという名前の変数に格納され、売上数量の目標値がunits.planという名前の変数に格納される場合、コードをループに入れることによって、ディメンション値の同じ組合せに対する両方の数値を比較できます。

LIMIT month TO FIRST 1
LIMIT product TO ALL
LIMIT district TO ALL
FOR district product
DO
IF (units.plan - units)/units.plan GT .1
THEN SHOW JOINCHARS(-
'Unit sales for ' product ' in ' -
district ' are not within 10% of plan.')
DOEND

このコードの各行は次のように処理されます。

1. データが特定の月に制限されます。

2. すべての地区および製品がステータスに入れられ、FORループに入ります。

3. FORループで、実績値が目標値と比較されます。BostonにおけるTentsの売上数量が目標値の10%を超えて下回る場合、次のメッセージが現行の出力ファイルに送信されます。

Unit sales for TENTS in BOSTON are not within 10% of plan.

4. すべての製品の処理が終わると、最初の地区のFORループが完了します。

5. 次の地区のループが実行されていきます。
FORループが実行される間、FOR文で指定される各ディメンションは一時的に単一の値に制限されることに注意してください。FORループでdistrictを指定してproductを指定しない場合、FORループが実行される間、productのすべての値はステータスにあります。したがって、IF...THEN...ELSEコマンドでは、productディメンションの最初の値に関してのみ、データの比較が行われます。

FORECAST

FORECASTコマンドは、直線傾向、指数的成長、Holt-Winters補外の3つの方法のいずれかによってデータを予測するコマンドです。FORECASTは、指定した方法に従って計算を実行し、オプションとしてその結果をアナリティック・ワークスペースの変数に格納します。

その後、FORECAST.REPORTを実行して予測の標準レポートを生成できます。また、INFOファンクションを使用して、独自にカスタマイズしたレポートまたはさらに詳細な分析に使用するために結果を部分的に取得することもできます。

ヒント:
大部分のアプリケーションは、FORECAST文を使用せずに予測コンテキストを使用してデータを予測します。詳細は、「予測プログラム」を参照してください。

構文

FORECAST [LENGTH n] -

[METHOD {TREND|EXPONENTIAL|WINTERS PERIODICITY p [argument...]}] -

[TIME dimension] [FCNAME name] time-series

ここで、argumentは予測の特性を指定する次の句のいずれか1つ以上です。

ALPHA n

BETA n

GAMMA n

STSMOOTHED n STSEASONAL n-series STTREND n

FCSMOOTHED name

FCSEASONAL name

FCTREND name

パラメータ

LENGTH n

予測する時間間隔の数を指定します。デフォルトはゼロです。LENGTHを指定した場合、FCNAMEオプションも指定する必要があります。

METHOD TREND

(デフォルト)予測方法が履歴データの直線補外であることを指定します。

METHOD EXPONENTIAL

予測方法が期間から期間の定率成長を使用する履歴データの直線補外であることを指定します。

METHOD WINTERS

予測方法が、データにおける線形傾向および季節的変動の両方を考慮する補外法であるHolt-Winters法であることを指定します。Oracle OLAPは、最初に履歴データの各時間間隔に関して統計的に関連する3つの系列を構成します。(「Holt-Winters構成系列」を参照。)次にOracle OLAPは、指定された数の時間間隔に関するその3つの系列から将来への予測を生成します。

Holt-Winters予測の結果に影響を与える複数の引数を指定できます。PERIODICITYのみ必須です。他の引数については、Oracle OLAPは使用可能なデータに基づいて妥当な値を選択します。

PERIODICITY p

季節サイクルの長さで、pは、2以上のINTEGERを指定する式です。たとえば、分析するデータが月別の値である場合、pは12です。

METHOD WINTERSキーワードを使用する場合、PERIODICITYは必須です。

ALPHA n

BETA n

GAMMA n

Holt-Winters予測のために計算される最初の3系列に対する平滑化定数(「Holt-Winters構成系列」を参照)。ALPHAは平滑データ系列用、BETAは季節指数系列用、GAMMAは傾向系列用です。値nは、0より大きく1より小さい小数式です。各値はオプションです。省略した場合、Oracle OLAPはその系列に対して最適な平滑化定数を計算して、履歴期間における1つ先の時間間隔の平均絶対誤差率を最小限にします。

STSMOOTHED n STSEASONAL n-series STTREND n

STSMOOTHEDは、平滑データ系列の開始値を指定します(「Holt-Winters構成系列」を参照)。値nは、0より大きく1より小さい小数式です。STSMOOTHEDを指定した場合、STSEASONALおよびSTTRENDも指定する必要があります。この値を省略した場合、Oracle OLAPが開始値を計算します。

STSEASONALは、季節指数系列の開始値を指定します(「Holt-Winters構成系列」を参照)。n-seriesは、季節サイクルにおける時間間隔ごとに1つの値とする10進値の配列です。必要な値の数はPERIODICITYに指定する数と同じです(「Holt-Winters開始値」を参照)。STSEASONALを指定した場合、STSMOOTHEDおよびSTTRENDも指定する必要があります。この値を省略した場合、Oracle OLAPが開始値を計算します。

STTRENDは、傾向系列の開始値を指定します(「Holt-Winters構成系列」を参照)。Nは10進値です。STTRENDを指定した場合、STSMOOTHEDおよびSTSEASONALも指定する必要があります。この値を省略した場合、Oracle OLAPが開始値を計算します。

FCSMOOTHED name

FCSEASONAL name

FCTREND name

Oracle OLAPが平滑データ系列、季節指数系列および傾向系列用に計算したデータを格納する数値変数(「Holt-Winters構成系列」を参照)。nameによって指定される変数には、そのディメンションの1つとしてTIME dimensionがある必要があります。系列計算ではDECIMALの結果が生成されますが、Oracle OLAPはその値を格納する前にnameのデータ型に変換します。事前系列のいずれかまたはすべてを保存できます。系列を保存しない場合、Oracle OLAPは予測の完了後にその値を破棄します。

TIME dimension

時間ディメンションとしてみなされるディメンションの名前。dimensionの現行のステータスによって、予測の計算に使用される履歴データの時間間隔の数が決定されます。時間ディメンションのステータスは、逓増する連続的な値の範囲である必要があります。LENGTHが、この範囲を超えて隣接する、予測される値の数を指定します。

time-seriesが1つのみのディメンションである場合、時間ディメンションはデフォルトでそのディメンションに設定されます。time-seriesに複数のディメンションがあり、そのディメンションの1つがDAY、WEEK、MONTH、QUARTERまたはYEARの型である場合、時間ディメンションはデフォルトでその型に設定されます。それ以外の場合は、他のディメンションが単一の値に制限されるときでも、時間ディメンションを指定する必要があります。FORECASTは、時間ディメンション以外のディメンションではステータスにある最初の値のみを使用します。

FCNAME name

FORECASTによって計算される値を格納する数値変数の名前。nameは、時間ディメンションによってディメンション化されている必要があり、他のディメンションがあっても構いません。nameのデータ型が10進数でない場合、FORECASTはその値を適切なデータ型に変換します。

履歴データに対応する適合値は、時間ディメンションの現行のステータスに対してnameに格納されます。予測値は、LENGTHによって指定される時間間隔の数に対してnameに格納されます。その予測時間間隔は、時間ディメンションの現行のステータスの直後に続きます。

Holt-Winters法の場合、適合値は前の時間間隔で計算される1つ先の時間間隔の予測です。最終予測値は適合値から推定されます。

TRENDおよびEXPONENTIALの方法の場合、FORECASTは時間ディメンションの現行のステータスを通じて回帰方程式を評価することによって適合値を取得します。

time-series

予測される時系列を指定する式。Time-seriesは、時間ディメンションによってディメンション化される数式である必要があります。time-seriesに他のディメンションがある場合、FORECASTはその現行のステータスの最初の値のみを使用します。time-seriesは、FORECASTが適合値および予測値を計算する元の履歴データです。(FCNAMEの説明を参照してください。)

使用上の注意

多次元式の予測

多次元式のすべての値を予測するには、FORECAST文を1つ以上のFORループ内に入れたプログラムを使用して、式の残りのすべてのディメンションをループ処理します。

結果の一部の取得

INFO文を使用すると、独自のレポートまたはさらに詳細な分析のためにFORECASTの結果の一部を取得できます。

引数の順序

予測されるデータを指定する式であるtime-seriesが最後にくる必要があることを除き、FORECASTの引数を指定する順序は任意です。

Time-seriesデータの処理

各方法には、time-seriesに指定される入力データの処理に関してそれぞれの基準があります。

- TREND -- NAではない値が最低2つ必要です。ゼロおよび負の値を受け入れます。NA値を無視します

- EXPONENTIAL: 最低2つの正の値が必要です。ゼロ、負およびNA値を無視します。

- WINTERS: ゼロおよび負の値を受け入れます。加重移動平均を計算することによってNA値を埋めます。

ゼロ値

いずれの方法でも、time-seriesによって指定される履歴データにゼロ値を許可しますが、その時間間隔は平均絶対誤差率(MAPE)の計算から除外されます。

Holt-Winters構成系列

Holt-Winters予測法は、統計的に関連する3つの系列を構成して実際の予測に使用します。これらの系列は、次のとおりです。

1. 平滑データ系列は、季節的影響および確率的誤差を除いた元データです。

2. 季節指数系列は、各時間間隔の季節的影響です。ゼロより大きい値はその時間間隔のデータに季節的増加があることを表し、ゼロより小さい値はデータに季節的減少があることを表します。Holt-Winters法は、季節的影響が時間の経過とともに変化することを認めるので、すべての履歴期間に季節指数値があります。

3. 傾向系列は、季節的影響および確率的誤差を除いた各時間間隔のデータにおける変化です。Holt-Winters法は、傾向影響が時間の経過とともに変化することを認めるので、すべての履歴期間に傾向値があります。

引数を省略したHolt-Winters

Holt-Winters法では、STSMOOTHED、STTRENDおよびSTSEASONAL句を省略した場合、AbrahamおよびLedolter著『Statistical Methods for Forecasting』のアルゴリズムを使用してOracle OLAPが必要な開始値を計算します。Holt-Winters予測に不慣れな場合は、Oracle OLAPで開始値を計算してください。

Holt-Winters開始値

開始値を指定した場合、Oracle OLAPは値を解読してリストを作成することによって、STSEASONAL開始値を取得します。そのリストには、PERIODICITYによって指定される数の値が少なくとも必要です。これより多い値は無視され、少ない場合はエラーが発生します。STSEASONAL式は多次元も可能であり、履歴データと同じディメンションを持つ必要がありません。(ディメンション化された式を解明する際のリストの順序については、UNRAVELファンクションを参照してください。)

計算された値の取得

Oracle OLAPがALPHA、BETA、GAMMAに対して計算する値、およびSTSMOOTHED、STSEASONAL、STTRENDに対して計算する値は、INFOファンクションを使用して確認できます。

予測のレポートの生成

FORECAST.REPORTプログラムは、FORECASTコマンドを使用して作成される予測の標準レポートを生成します。

レポートには、予測の計算式および平均絶対誤差率を含む予測のパラメータに続いて、予測値が示されます。このレポートを生成するには、次のように入力します。

FORECAST.REPORT

例

例9-139 EXPONENTIAL法の使用方法

次の文は、fcst.salesという名前の変数を作成し、sales変数のディメンションを制限し、EXPONENTIAL法を使用して1997年のChicago地区におけるスポーツウェアの売上を予測し、計算の結果をfcst.salesに格納します。

DEFINE fcst.sales DECIMAL <month>
LIMIT product TO 'Sportswear'
LIMIT district TO 'Chicago'
LIMIT month TO 'Jan95' TO 'Dec96'
FORECAST LENGTH 12 METHOD EXPONENTIAL FCNAME fcst.sales -
time month sales

ここでFORECAST.REPORTを実行すると、生成された値を表示できます。その予測に対してFORECAST.REPORTプログラムを実行すると、次のレポートが生成されます。

Forecasting Analysis
====================

Variable to Forecast: SALES
Forecast dimension: MONTH
Forecast method: EXPONENTIAL
Mean absolute percent error: 16.64%

Forecast Equation: SALES = 87718.0009541883 *
(1.00553383457899 ** MONTH)

MONTH                   Actual Value    Fitted Value
--------------------    ------------    ------------
Jan95                      72,123.47       88,203.42
Feb95                      80,071.75       88,691.52
Mar95                      78,812.69       89,182.33
Apr95                      97,413.26       89,675.85
May95                      94,406.65       90,172.10
...                        ...               ...
Dec96                      72,095.02      100,140.38
...                        ...               ...

例9-140 WINTERS法の使用方法

次の文は、monthディメンションを制限し、WINTERS法を使用して季節的影響を考慮した予測を計算します。

DEFINE fcst.sales DECIMAL <montH>
LIMIT month TO year 'Yr95' 'Yr96'
FORECAST LENGTH 12 METHOD WINTERS -
PERIODICITY 12, ALPHA .5, BETA .5, GAMMA .5 -
time month, FCNAME fcst.sales, sales

ここでFORECAST.REPORTを実行すると、生成された値を表示できます。その予測に対してFORECAST.REPORTプログラムを実行すると、次のレポートが生成されます。

Forecasting Analysis
====================

Variable to Forecast: SALES
Forecast dimension: MONTH
Forecast method: WINTERS
Alpha: 0.50
Beta: 0.50
Gamma: 0.50
Periodicity: 12
Mean absolute percent error: 0.20%

MONTH                   Actual Value    Fitted Value
--------------------    ------------    ------------
Jan95                      72,123.47       72,154.67
Feb95                      80,071.75       80,027.51
Mar95                      78,812.69       79,171.08
Apr95                      97,413.26       97,200.81
May95                      94,406.65       94,464.71
....                         ...             ...
Dec97                                      77,867.23

FORECAST.REPORT

FORECAST.REPORTプログラムは、FORECASTコマンドを使用して作成される予測の標準レポートを生成します。

レポートには、予測の計算式および平均絶対誤差率を含む予測のパラメータに続いて、予測値が示されます。

構文

FORECAST.REPORT

例

例9-141 EXPONENTIAL法を使用した予測のレポート

例9-139「EXPONENTIAL法の使用方法」に示す予測を実行したとします。その予測に対してFORECAST.REPORTプログラムを実行すると、次のレポートが生成されます。

Forecasting Analysis
====================

Variable to Forecast: SALES
Forecast dimension: MONTH
Forecast method: EXPONENTIAL
Mean absolute percent error: 16.64%

Forecast Equation: SALES = 87718.0009541883 *
(1.00553383457899 ** MONTH)

MONTH                   Actual Value    Fitted Value
--------------------    ------------    ------------
Jan95                      72,123.47       88,203.42
Feb95                      80,071.75       88,691.52
Mar95                      78,812.69       89,182.33
Apr95                      97,413.26       89,675.85
May95                      94,406.65       90,172.10
...                        ...               ...
Dec96                      72,095.02      100,140.38
...                        ...               ...

例9-142 WINTERS法を使用した予測のレポート

例9-140「WINTERS法の使用方法」に示す予測を実行したとします。その予測に対してFORECAST.REPORTプログラムを実行すると、次のレポートが生成されます。

Forecasting Analysis
====================

Variable to Forecast: SALES
Forecast dimension: MONTH
Forecast method: WINTERS
Alpha: 0.50
Beta: 0.50
Gamma: 0.50
Periodicity: 12
Mean absolute percent error: 0.20%

MONTH                   Actual Value    Fitted Value
--------------------    ------------    ------------
Jan95                      72,123.47       72,154.67
Feb95                      80,071.75       80,027.51
Mar95                      78,812.69       79,171.08
Apr95                      97,413.26       97,200.81
May95                      94,406.65       94,464.71
....                         ...             ...
Dec97                                      77,867.23

FULLDSC

FULLDSCプログラムは、1つ以上のワークスペース・オブジェクトに関して、そのプロパティおよびトリガーを含む定義を表示するレポートを生成します。

構文

FULLDSC [names]

パラメータ

names

空白またはカンマで区切られた、1つ以上のワークスペース・オブジェクトの名前。FULLDSCは、指定した各オブジェクトのすべての定義を表示します。この引数を省略した場合、FULLDSCはNAMEディメンションの現行のステータスにあるすべてのオブジェクトの定義を表示します。

使用上の注意

FULLDSCの出力

FULLDSCプログラムは、DESCRIBEコマンドの拡張です。したがって、FULLDSCによってリスト表示するオブジェクト定義には、DESCRIBEコマンドでリスト表示される定義の構成要素が含まれ、オブジェクトに割り当てられているプロパティはその後に示されます。プロパティごとの各行には、PROPERTYという文字列、プロパティの名前およびその値が表示されます。

参照するオブジェクトの制限

通常、NAMEのステータスはALLなので、引数のないFULLDSCは、現行のワークスペースのすべてのオブジェクトに関する定義を含むレポートを生成します。ただし、FULLDSCと組み合せてLIMITコマンドを使用すると、ワークスペースの特定グループのオブジェクトに関する定義をレポートできます。最初にLIMITを使用して、NAMEディメンションのステータスを参照したい定義のオブジェクトの名前に制限します。次に、FULLDSC文を引数を付けずに実行して定義を表示します。

ページ番号付き出力

FULLDSC文によってページ番号付き出力を生成するには、FULLDSCを使用する前にPAGINGをYESに設定します。

FULLDSC出力によるオブジェクトの作成

FULLDSC文からの出力の各行は有効な文であるので、その出力を使用して他のワークスペースにオブジェクトを作成できます。たとえば、OUTFILE文を実行して後続の出力をファイルに送り、その後でFULLDSC文を実行できます。次に別のワークスペースにアクセスしてINFILE文を使用すると、FULLDSC出力を読み取ることができます。これで、対象のワークスペースに同じオブジェクトが作成されます。

FULLDSCによって生成される出力では、元の名前および値の式が保存されないため、オブジェクトのプロパティを作成した元のPROPERTY文が完全に一致して複製されない場合もあります。さらに、FULLDSCはDECIMALSオプションを255に設定するので、後続のゼロが削除されます。「変数のプロパティのリスト表示」を参照してください。

例

関連項目:
例10-160「トリガーの説明」

例9-143 変数のプロパティのリスト表示

この例は、プロパティDECPLACEおよびREPPRGが追加されているactual変数のすべての定義に関するレポートを生成します。次の文

FULLDSC actual

によって、次の出力が生成されます。

DEFINE ACTUAL VARIABLE DECIMAL <LINE DIVISION MONTH>
LD Actual $ Financials
PROPERTY 'DECPLACE' 4
PROPERTY 'REPPRG' 'qtrrep'

DECPLACEプロパティが次の文によって指定されていたとします。PRPNAMEはその値がDECPLACEである変数です。

PROPERTY prpname 4.00

FULLDSCによる出力は、先の例と同じ結果になります(つまり、値4.00が4として表示されます)。したがって、FULLDSC出力に対してINFILE技術を使用してオブジェクトを作成した場合、元のプロパティ値はDECIMALの型(値4.00による)であったにもかかわらず、新たに作成されたプロパティ値はINTEGERの型(値4による)になることになります。プロパティ値が使用されるときには適切な変換が実行されるので、多くの場合、この相違は大きな問題ではありません。

GOTO

OLAP DMLプログラム内のGOTOコマンドは、プログラム内の文の実行順序を変更します。

構文

GOTO label

パラメータ

label

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

GOTOに指定するlabelの後にはコロンを付ける必要はありません。ただし、プログラムの他の位置にある実際のラベルの後にはコロンを付けます。

使用上の注意

ラベルの構成のガイドライン

特定の位置に分岐する制御構造を使用する場合、位置を明確に識別するためにその位置のラベルを指定する必要があります。ラベルを作成するには、次のガイドラインに従います。

- ラベルの最初の文字は、英字、ピリオド(.)、アンダースコア(_)のいずれかであることが必要です。

- ラベルの残りの文字には、英字、数字、ピリオドまたはアンダースコアの任意の組合せを使用できます。

- ラベルの直後にはコロン(:)を付ける必要があります。

- ラベルの最初の8バイトは、一意である必要があります。(使用するキャラクタ・セットによって、1バイトが1文字ではない場合もあります。)ラベルは最大3999バイト(テキスト行の最大長からラベルを識別するコロンの1バイトを差し引いた値)です。ただし、ラベル名の最初の8バイトのみが使用されるので、最初の8バイトが一意ではない場合、8バイトを超えるラベル名に関しては問題が発生することがあります。

不明なGOTOラベル

labelに対応する実際のラベルが同じプログラムの他の位置に存在しない場合、エラーとともに実行が停止します。

IFおよびWHILEとともに使用するGOTO

次の構文に基づいて、GOTO文をIF...THEN...ELSEまたはWHILEと組み合せて使用することにより、条件分岐を設定できます。

IF boolean-expression

THEN GOTO label1

ELSE GOTO label2

ただし、プログラミング論理の明確性を保つために、GOTOの使用は最小限にしてください。GOTOはほとんどの場合、FOR、IF...THEN...ELSEまたはWHILEを使用した単独または複数の条件実行文で置き換えることができます。また、同じプログラム内で異なるケースを処理するSWITCHコマンドを使用することもできます。

FORとともに使用するGOTO

FORループでGOTO文を使用すると、ループ内での分岐やループ外への分岐が可能です。GOTO文およびラベルがどこにあるかによって、文の実行順序が変更されます。

- 同じループ内のラベルに分岐するFORループのGOTOは、現行のディメンション・ステータスに影響を与えずにそのラベルで実行を継続します。その後のループの繰返しは普通に継続されます。ループの終端、すなわちDOEND文の直前に分岐するには、CONTINUE文の使用をかわりに検討します。

- ループの外側のラベルに分岐するFORループのGOTOは、FOR文の処理を終了します。指定されたラベルで実行が継続され、ディメンション・ステータスはループ前の状態にリストアされます。ループのDOENDの直後の文に分岐するには、BREAK文の使用をかわりに検討します。

FORループの外側のGOTO文を使用してループ内(すなわちループの内側のラベル)に分岐すると、ループの残りが1回実行された後にエラーが発生します。

TEMPSTAT文とGOTO文

プログラムのFORループ処理内部で、DO ... DOEND句がTEMPSTATの後に続く場合、DOEND、BREAK、GOTOのいずれかが検出されると、ステータスはリストアされます。

GOTO文の代替方法

GOTOはプログラム内での分岐を簡単に行えますが、多用するとプログラムの論理が不明瞭になってフローがわかりにくくなります。特に複数のラベルがあったり、多くのコードをスキップするGOTO文がある複雑なプログラムを使用する場合は、このような状況が発生しやすくなります。

プログラムの論理を明確に保つために、GOTOの使用は最小限にします。

GOTO文が最良のプログラミング方法であることもありますが、多くの場合はさらに適した代替方法があります。次に例を示します。

- 通常、FOR文の中のGOTO文は、そのかわりとなる文をIF...THEN...ELSEコマンドの中のDO文とDOEND文の間に配置することで代用できます。

- 各セットの文が長い場合、または各セットの文をプログラム内の複数の場所で使用する場合、そのセットをサブプログラムに配置することを検討します。この場合、異なる2つのプログラムからどちらかを選択するには、IF...THEN...ELSEコマンドを使用でき、多数の異なるプログラムからいずれかを選択するには、SWITCHコマンドを使用できます。

FORコマンドで値をループ処理する方法については、例9-137「値をループ処理するFOR文の使用方法」を参照してください。FORループ内でのDO ... DOENDの使用方法については、例9-138「FORループでのDO/DOENDの使用方法」を参照してください。

例

例9-144 IFとともに使用するGOTO

次の例は、プログラムを実行するときにユーザーが指定する引数によって、3つの地域のうちの1つに関するレポートを生成するプログラムです。ユーザーがEAST、WESTまたはCENTRALを指定すると、対応するラベルに実行が分岐し、ラベルに続く文(文グループ1、2または3)が実行されます。ユーザーがそれ以外の引数を指定した場合、実行はargerrorラベルに分岐し、その後の文によってエラー処理が行われます。

DEFINE flexrpt PROGRAM
PROGRAM
IF NOT INLIST('East\nWest\nCentral', UPCASE(ARG(1)))
THEN GOTO argerror

SWITCH &UPCASE(ARG(1))
DO
CASE 'EAST':
..." (statement group 1)
BREAK
CASE 'WEST':
... "(statement group 2)
BREAK
CASE 'CENTRAL':
..." (statement group 3)
BREAK
DOEND

argerror:
..." statements to handle error)

END

GROUPINGIDコマンド

GROUPINGIDコマンドは、事前に定義されたオブジェクトに階層ディメンションの値に対応するグルーピングIDを移入し、さらに$GID_DEPTHシステム・プロパティを作成して移入するコマンドです。

グルーピングIDは、階層ディメンションのレベルに対応する数値です。階層の最下位レベルのグルーピングIDは0(ゼロ)です。特に、階層ディメンションの異なるレベルの値を識別する場合に、グルーピングIDは便利です。階層の同じレベルのディメンション値は、グルーピングIDの値が同じです。特定レベルのディメンション値を選択する場合、groupingid = nの単一条件で目的の値を識別できるため、グルーピングIDを使用すると簡単です。

通常、OLAP_TABLEファンクションを使用してSQLでアナリティック・ワークスペース・データにアクセスする場合に、GROUPINGID文を使用します。

関連項目:
詳細は「gidrelリレーション」を参照してください。またグルーピングIDの詳細は、『Oracle Database SQL言語リファレンス』のGROUPING_IDファンクションに関する項を参照してください。

構文

GROUPINGID [parent-relation] INTO destination-object -

{USING level-relation} [INHIERARCHY {inh-variable | inh-valueset}] [LEVELORDER lo-valueset] -

[ROLLUP | GROUPSET]

ここで、destination-objectは、次のいずれかです。

grouping-relation

grouping-variable

grouping-surrogate

パラメータ

parent-relation

階層ディメンションのセルフ・リレーション。このセルフ・リレーションは、階層ディメンションによってディメンション化されます。セルフ・リレーションの値は、階層ディメンションの各値の親です。GROUPINGIDコマンドを使用してサロゲートを移入する際、GROUPINGIDコマンドにLEVELORDER句を指定する場合にかぎり、parent-relation引数はオプションです。

grouping-relation

事前に定義されたリレーションの名前。grouping-relationのディメンションの1つは、階層ディメンションである必要があります。GROUPINGIDコマンドが実行されると、grouping-relationの値が計算されて移入されます。リレーションを宛先オブジェクトとして指定すると、Oracle OLAPでは、リレーションの移入時に、そのリレーションに対する$GID_DEPTHプロパティの作成および設定が自動的に行われます。

grouping-variable

事前に定義された数値変数の名前。grouping-variableのディメンションの1つは、階層ディメンションである必要があります。grouping-variableのデータ型は、NUMBERなどの数値型にできます。GROUPINGIDコマンドが実行されると、grouping-variableの値が計算されて移入されます。変数の定義については、DEFINE VARIABLEコマンドを参照してください。

grouping-surrogate

階層ディメンションの事前定義済のサロゲートの名前。GROUPINGIDコマンドが実行されると、grouping-surrogateの値が計算され移入されます。サロゲートの定義については、DEFINE SURROGATEコマンドを参照してください。

USING

グルーピングIDを作成する際に階層ディメンションのこの値のレベルを検討することを指定します。

level-relation

階層ディメンションによってディメンション化されるリレーション。階層ディメンションの値ごとに、リレーションにはディメンションの値に対するレベルの名前の値があります。

INHIERARCHY

グルーピングIDを作成する際に階層ディメンションの値の一部のみを検討することを指定します。

注意:
ROLLUPまたはGROUPSETを指定する場合は、INHIERARCHY句を指定することはできません。

inh-variable

階層ディメンションによってディメンション化されるか、または複数階層の階層ディメンションの場合には階層の名前であるディメンションによってディメンション化されるBOOLEAN変数。ディメンション値が階層にある場合の変数の値はTRUEであり、ない場合はFALSEです。

inh-valueset

グルーピングIDを作成する際に検討される階層ディメンションの値を識別する値を持つ値セット・オブジェクトの名前。値セットに含まれない値は無視されます。

LEVELORDER

グルーピングIDを作成する際のレベルのトップダウン順序を指定します。

lo-valueset

グルーピングIDを作成する際に使用されるレベルの名前の値を持つ値セット・オブジェクトの名前。値セット・オブジェクトの値の順序によって、割り当てられるグルーピングIDが決定されます。

ROLLUP

SQL SELECT文にROLLUPを指定した場合にSQLが行うのと同じ方法で、Oracle OLAPでグルーピングIDが作成されるように指定します。

関連項目:
『Oracle Database SQL言語リファレンス』のROLLUP CUBE句に関する項

ROLLUPキーワードは、宛先オブジェクトがリレーションである場合にのみ有効です。このキーワードを指定すると、$GID_TYPEおよび$GID_LISTプロパティ。

GROUPSET

SQL SELECT文にGROUPING SETを指定した場合にSQLが行うのと同じ方法で、Oracle OLAPでグルーピングIDが作成されるように指定します。

関連項目:
詳細は、『Oracle Database SQL言語リファレンス』のGROUPING SETS句に関する項を参照してください

GROUPSETキーワードは、宛先オブジェクトがリレーションである場合にのみ有効です。このキーワードを指定すると、Oracle OLAPでは、グルーピングIDのリレーションに対して$GID_TYPEおよび$GID_LISTという2つのプロパティの作成と移入が行われます。

例

例9-145 リレーションにグルーピングIDを移入するGROUPINGIDコマンドの使用方法

アナリティック・ワークスペースに次のオブジェクトが含まれているとします。

DEFINE GEOG DIMENSION TEXT
LD A dimension with two hierarchies for geography

DEFINE geog_hierlist DIMENSION TEXT
LD List of Hierarchies for geog dimension

DEFINE GEOG_INHIER VALUESET GEOG <GEOG_HIERLIST>
LD A valueset of geog that are just the values in each hierarchy

DEFINE GEOG_PARENTREL RELATION GEOG <GEOG GEOG_HIERLIST>
LD Self-relation for geog showing parents of each value

DEFINE GEOG_INHIER VALUESET GEOG <GEOG_HIERLIST>
LD A valueset of geog that are just the values in each hierarchy

DEFINE GEOG_LEVELREL RELATION GEOG_LEVELLIST <GEOG GEOG_HIERLIST>
LD Level of each dimension member for geog

これらのオブジェクトが、次のレポートに表示されている値を持っているとします。

REPORT geog_hierlist

GEOG_HIERLIST
--------------
Political_Geog
Sales_Geog

REPORT DOWN geog W 20 geog_parentrel

-------------GEOG_PARENTREL--------------
--------------GEOG_HIERLIST--------------
GEOG              Political_Geog         Sales_Geog
-------------- -------------------- --------------------
Boston         MA                   MA
Springfield    MA                   MA
Hartford       CT                   CT
Mansfield      CT                   CT
Montreal       Quebec               Quebec
Walla Walla    WA                   WA
Portland       WA                   WA
Oakland        CA                   CA
San Diego      CA                   CA
MA             USA                  East
CT             USA                  East
WA             USA                  West
CA             USA                  West
Quebec         Canada               East
East           NA                   All Regions
West           NA                   All Regions
All Regions    NA                   NA
USA            All Countries        NA
Canada         All Countries        NA
All Countries  NA                   NA

->REPORT W 20 geog_inhier

GEOG_HIERLIST      GEOG_INHIER
-------------- --------------------
Political_Geog Boston
Springfield
Hartford
Mansfield
Montreal
Walla Walla
Portland
Oakland
San Diego
MA
CT
WA
CA
Quebec
USA
Canada
All Countries
Sales_Geog     Boston
Springfield
Hartford
Mansfield
Montreal
Walla Walla
Portland
Oakland
San Diego
MA
CT
WA
CA
Quebec
East
West
All Regions

->REPORT DOWN geog W 20 geog_levelrel

--------------GEOG_LEVELREL--------------
--------------GEOG_HIERLIST--------------
GEOG              Political_Geog         Sales_Geog
-------------- -------------------- --------------------
Boston         City                 City
Springfield    City                 City
Hartford       City                 City
Mansfield      City                 City
Montreal       City                 City
Walla Walla    City                 City
Portland       City                 City
Oakland        City                 City
San Diego      City                 City
MA             State-Prov           State-Prov
CT             State-Prov           State-Prov
WA             State-Prov           State-Prov
CA             State-Prov           State-Prov
Quebec         State-Prov           State-Prov
East           NA                   Region
West           NA                   Region
All Regions    NA                   All Regions
USA            Country              NA
Canada         Country              NA
All Countries  All Countries        NA

geogの値に対するグルーピングIDを作成するには、まずGIDディメンションを次のように定義し、グルーピングIDに使用するのに十分な個数の値をそのディメンションに移入します。

DEFINE GID_DIMENSION DIMENSION NUMBER (16,0)

次に、グルーピングIDを保持するリレーションを定義します。

DEFINE GEOG_GIDREL RELATION GID_DIMENSION <GEOG GEOG_HIERLIST>

ここで、GROUPINGIDコマンドを実行し、geog_gidrel relationを移入します。

GROUPINGID geog_parentrel INTO geog_gidrel USING geog_levelrel -
INHIERARCHY geog_inhier

geog_gidrelのレポートに、リレーションが移入されていることが表示されます。

REPORT down geog w 20 geog_gidrel

---------------GEOG_GIDREL---------------
--------------GEOG_HIERLIST--------------
GEOG              Political_Geog         Sales_Geog
-------------- -------------------- --------------------
Boston         0                    0
Springfield    0                    0
Hartford       0                    0
Mansfield      0                    0
Montreal       0                    0
Walla Walla    0                    0
Portland       0                    0
Oakland        0                    0
San Diego      0                    0
MA             1                    1
CT             1                    1
WA             1                    1
CA             1                    1
Quebec         1                    1
East           NA                   3
West           NA                   3
All Regions    NA                   7
USA            3                    NA
Canada         3                    NA
All Countries  7                    NA

geog_gidrelのFULLDSCを実行すると、$GID_DEPTHプロパティが作成され、geog_gidrelに移入されたことが確認できます。

DEFINE GEOG_GIDREL RELATION GID_DIMENSION <GEOG GEOG_HIERLIST>
PROPERTY '$GID_DEPTH' 4

例9-146 変数にグルーピングIDを移入するGROUPINGIDの使用方法

アナリティック・ワークスペースに次のオブジェクトがあるとします。

DEFINE geography DIMENSION TEXT WIDTH 12
LD Geography Dimension Values
DEFINE geography.parent RELATION geography <geography>
LD Child-parent relation for geography
DEFINE geography.hierarchyid DIMENSION INTEGER
LD Dimension whose values are ids for hierarchies in geography

地理のStandard階層にグルーピングID変数を作成するには、グルーピングIDを生成する階層にある値のみの親子関係を定義し、グルーピングIDを保持する変数を定義します。これらの定義の例は、次のとおりです。

DEFINE geog.gid INTEGER VARIABLE <geography>
DEFINE geography.newparent RELATION geography <geography>

この後、次のような文を使用して変数を移入します。

" Populate the child-parent relation for hierarchy 1
geography.newparent = geography.parent(geography.hierarchyid 1)
" Populate the grouping id variables
GROUPINGID geography.newparent INTO geog.gid

このコードによって作成される新規オブジェクトに関するレポート(geography.newparentおよびgeog.gid)は、次のとおりです。

REPORT geography.newparent

GEOGRAPHY          GEOGRAPHY.NEWPARENT
---------------- ----------------
World            NA
Americas         World
Canada           Americas
Toronto          Canada
Montreal         Canada
Ottawa           Canada
Vancouver        Canada
Edmonton         Canada
Calgary          Canada
Usa              Americas
Boston           Usa
Losangeles       Usa
Dallas           Usa
Denver           Usa
Newyork          Usa
Chicago          Usa
Seattle          Usa
Mexico           Americas
...              ...
Japan            Asia
Tokyo            Japan
Osaka            Japan
Kyoto            Japan
China            Asia
Beijing          China
Shanghai         China
...              ...
India            Asia
Ireland          Europe
Taiwan           Asia
Thailand         Asia

REPORT geog.gid
GEOGRAPHY            GEOG.GID
---------------- ----------------
World                           7
Americas                        3
Canada                          1
Toronto                         0
Montreal                        0
Ottawa                          0
Vancouver                       0
Edmonton                        0
Calgary                         0
Usa                             1
Boston                          0
Losangeles                      0
Dallas                          0
Denver                          0
Newyork                         0
Chicago                         0
Seattle                         0
Mexico                          1
...                             ...
Japan                           1
Tokyo                           0
Osaka                           0
Kyoto                           0
China                           1
Beijing                         0
Shanghai                        0
...                             ...
India                           1
Ireland                         1
Taiwan                          1
Thailand                        1

10 OLAP DMLコマンド: HからZ

この章では、OLAP DMLコマンドのリファレンス項目の続きをアルファベット順に説明します。文字HからZで始まる各OLAP DMLコマンドにつき1つの項目があり、HEADINGから説明します。

OLAP DMLコマンドのアルファベット順リスト、カテゴリ別リスト、およびここで紹介する以外のOLAP DMLコマンドのリファレンス項目については、第9章「OLAP DMLコマンド: AからG」を参照してください。

その他のOLAP DMLリファレンス項目については、第4章「OLAP DMLプロパティ」、第5章「OLAP DMLオプション」、第7章「OLAP DMLファンクション: AからK」および第8章「OLAP DMLファンクション: LからZ」を参照してください。

ヒント:
OLAP DML文の多くはコーディングの際、文の名前の頭文字および2つの子音字を並べた3文字に省略して表すことができます。

HEADING

HEADINGコマンドは、レポートのタイトルおよび列ヘッダーを生成するコマンドです。ヘッダー出力は、現行の出力ファイルに送信されます。HEADINGコマンドの形式はROWコマンドの形式と同じです。ただし、HEADINGを使用する場合、Oracle OLAPはヘッダーから列小計および総計に数値を追加しません。

多くの場合、HEADING文はPAGEPRGプログラムで使用して、レポートの各ページにタイトルまたは列ヘッダーを生成します。

ヒント:
ROWコマンドの小計機能を必要としないことが前もって明らかな場合、ROWコマンドのかわりにHEADINGコマンドを使用してレポートの行を生成すると、この場合、Oracle OLAPは小計を管理しないので時間を節約できます。

構文

HEADING [attribs] {expression1|SKIP}, [attribs] {expressionN|SKIP}

パラメータ

attribs

各列の書式を指定する属性。(使用可能な属性のリストおよび詳細な説明は、ROWコマンドを参照してください。)

expression

列ヘッダーとして使用するテキスト。列ヘッダーにリテラル・テキストを使用するには、テキストを一重引用符で囲みます。(列を生成するための式、属性およびACROSSグループの使用の詳細は、ROWコマンドを参照してください。)

SKIP

式のかわりに使用され、その列を空白のままにすることを示します。

使用上の注意

ROWコマンドに関する注意は、HEADINGコマンドにも適用されます(ROWの行および列の算術に関する注意は除く)。

HEADINGを使用したタイトルの作成

レポートにタイトルまたはサブタイトルを作成するには、HEADINGを使用して、LSIZEオプションの設定と同じ幅の単一の列を生成します。その列内でテキストを中央揃えして、中央揃えのタイトルを作成します。

最大ヘッダー幅

ヘッダー行を含めて、レポートの各行の最大幅は4,000文字です。

例

例10-1 列ヘッダーの生成

レポートで、列にヘッダーを付けるとします。プログラム内で次のようなHEADING文を使用します。

HEADING UNDER '-' CENTER <WIDTH 15 'Product' -
ACROSS district FIRST 3: district>

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

Product      Atlanta     Boston    Chicago
--------------- ---------- ---------- ----------

HIDE

HIDEコマンドは、プログラムのテキストを非表示にし、DESCRIBE、EDITまたはOBJ文を使用したときにテキストを表示できないようにするコマンドです。そのプログラムに対しては、実行、コンパイル、名前の変更、エクスポートなどの他のすべてのアクションを実行できます。

プログラムを非表示にする場合、Oracle OLAPがプログラム・テキストをエンコードするために使用するシード式を指定します。このシード式を後でUNHIDE文とともに使用すると、テキストを表示できます。

注意:
このコマンドは、単純なエンコードを実行します。セキュアな暗号化の使用方法や、その他のOracleのセキュリティ機能については、『Oracle Databaseセキュリティ・ガイド』を参照してください。

構文

HIDE prog-name seed-exp

パラメータ

prog-name

テキストを非表示にするプログラムの名前。プログラム名は引用符で囲まないでください。

seed-exp

プログラム・テキストをエンコードする際にシード値として使用される単一行のテキスト式。この値にNAは指定できません。

後でUNHIDE文とともに使用するために、このシード式は記録しておく必要があります。UNHIDE文で指定するシード式は、HIDE文で使用していた値とすべてのバイトが同じである必要があります。さらに、シード式は大/小文字が区別されるので、記録するときに注意してください。

使用上の注意

エクスポートおよびインポートした場合のシード指定

非表示のプログラムをエクスポートおよびインポートする場合、インポート先のアナリティック・ワークスペースでもテキストは非表示のままです。UNHIDEコマンドとともに使用するために、同じシード式が保持されます。

例

例10-2 プログラム・テキストの非表示

次の例は、sales_rptという名前のプログラムのテキストを非表示にします。

HIDE sales_rpt 'Crystal'

HIERDEPTH

HIERDEPTHコマンドは、リレーションの各階層について、最上位の階層からの深さを計算し、深さリレーションとも呼ばれる事前に定義されたリレーションにその値を格納するコマンドです。

構文

HIERDEPTH parent-rel [(qdr-list)] INTO depth-rel [INHIERARCHY inh-valueset ]

パラメータ

parent-rel

階層ディメンションの親子のセルフ・リレーション。詳細は、「parentrelリレーション」を参照してください。

qdr-list

parentrelの値を制限するQDRのリスト。「修飾データ参照の構文」の説明に従ってQDRを指定します。qdrlistの値を指定しない場合、HIERHEIGHTは現行のステータスにあるparentrelの値を使用します。

depth-rel

HIERDEPTHコマンドが実行されたときに移入される、事前に定義されたリレーション。このリレーションは、複数のディメンションを持つことができますが、階層ディメンションの深さを表す他の1つのNUMBERディメンション、およびparentrelのディメンションによってディメンション化されている必要があります。

たとえば、parent-relが、dim1およびdim2という2つのディメンションを持つ場合、次に示すコードでは、3つの値を持つnumdimという名前のNUMBERディメンションを定義し、さらにdim1およびdim2によってディメンション化され、numdimの値をその値として持つdepthrelという名前の深さリレーションを定義します。

DEFINE numdim dimension NUMBER(3)
DEFINE depthrel RELATION numdim <dim1 dim2>

inh-valueset

グルーピングIDを作成する際に検討される階層ディメンション値を持つ値セット・オブジェクトの名前。値セットに含まれない値は無視されます。詳細は、「inhier値セットまたは変数」を参照してください。

例

例10-3 階層の深さリレーションの作成および移入

アナリティック・ワークスペースに、geog、geog_hierlistおよびgeog_parentrelオブジェクトが含まれる場合を想定します(例9-145「リレーションにグルーピングIDを移入するGROUPINGIDコマンドの使用方法」を参照)。これらのオブジェクトによって表される階層の深さリレーションを作成するには、次のDMLコードを発行します。

"   Define the number dimension for the depthrel
DEFINE numdepth DIMENSION NUMBER (3)
"   Define the depth relation
"   Populate the depth relation
HIERDEPTH geog_parentrel INTO depthrel
REPORT DOWN geog depthrel

------------------DEPTHREL-------------------
----------------GEOG_HIERLIST----------------
GEOG               Political_Geog           Sales_Geog
-------------- ---------------------- ----------------------
Boston         3                      3
Springfield    3                      3
Hartford       3                      3
Mansfield      3                      3
Montreal       3                      3
Walla Walla    3                      3
Portland       3                      3
Oakland        3                      3
San Diego      3                      3
MA             2                      2
CT             2                      2
WA             2                      2
CA             2                      2
Quebec         2                      2
East           0                      1
West           0                      1
All Regions    0                      0
USA            1                      0
Canada         1                      0
All Countries  0                      0

HIERHEIGHTコマンド

HIERHEIGHTコマンドは、指定された階層ディメンションの値を、事前定義済のリレーションにレベル別に移入するコマンドです。通常HIERHEIGHTコマンドは、OLAP_TABLEファンクションを使用してアナリティック・ワークスペースにアクセスできるようにする場合に使用します。

階層ディメンションの値としてノードの値(レベル別)を取得するには、HIERHEIGHTを使用します。

関連項目:
詳細は、「familyrelリレーション」を参照してください。

構文

HIERHEIGHT parentrelation [(qdrlist)] INTO{familyrel-

[USING level-relation | A | D] [INHIERARCHY { inh-variable | inh-valueset}]

パラメータ

parentrel

階層ディメンションの親子のセルフ・リレーション。詳細は、「parentrelリレーション」を参照してください。

qdrlist

parentrelの値を制限するQDRのリスト。「修飾データ参照の構文」の説明に従ってQDRを指定します。qdrlistの値を指定しない場合、HIERHEIGHTは現行のステータスにあるparentrelの値を使用します。

familyrel

HIERHEIGHTコマンドが実行されたときに移入される、事前に定義されたリレーション。このリレーションは、複数のディメンションを持つことができますが、階層ディメンションのレベルを表す他の1つのディメンション、およびparentrelのディメンションによってディメンション化されている必要があります。階層ディメンションのレベルを表すディメンションの実際の構造は、次のようにHIERHEIGHT文にUSING句が含まれているかどうかによって異なります。

- 文にUSING句が含まれている場合、階層ディメンションのレベルを表すディメンションは、レベルの名前が含まれるディメンションです。

- 文にUSING句が含まれていない場合、階層ディメンションのレベルを表すディメンションは、値としてレベルの深さを持つINTEGERディメンションです。

HIERHEIGHT文が実行される前にfamilyrelが移入されている場合、移入値が削除されてから新しい値が計算されます。

USING levelrel

指定のlevelrelを使用してリレーションが移入されるように指定します。詳細は、「levelrelリレーション」を参照してください。

A

リレーションが昇順で移入されるように指定します。

D

(デフォルト)リレーションが降順で移入されるように指定します。

inh-variable

階層ディメンションによってディメンション化されるか、または複数階層の階層ディメンションの場合には階層の名前であるディメンションによってディメンション化されるBOOLEAN変数。ディメンション値が階層にある場合の変数の値はTRUEであり、ない場合はFALSEです。

inh-valueset

グルーピングIDを作成する際に検討される階層ディメンション値を持つ値セット・オブジェクトの名前。値セットに含まれない値は無視されます。詳細は、「inhier値セットまたは変数」を参照してください。

使用上の注意

OLAP_TABLEファンクションを使用したHIERHEIGHT

通常、OLAP_TABLEファンクションを使用してアナリティック・ワークスペースにアクセスできるようにするには、HIERHEIGHT文を使用します。

例

例10-4 地理階層のリレーション表現の作成

地理階層が次の定義のアナリティック・オブジェクトによって定義されているmyawという名前のアナリティック・ワークスペースがあるとします。

DEFINE geog.hierdim DIMENSION TEXT
LD Hierarchy names for Geography hierarchies

DEFINE geog.leveldim DIMENSION TEXT
LD List of levels for GEOGRAPHY hierarchies

DEFINE geography DIMENSION TEXT WIDTH 12
LD Values for the Geography hierarchies

DEFINE geog.levelrel RELATION geog.leveldim <geography geog.hierdim>
LD Level of each value in the Geography hierarchies

DEFINE geog.parent RELATION geography <geography geog.hierdim>
LD Child-parent relation for the Geography hierarchies

DEFINE geog.familyrel RELATION geography <geography geog.leveldim geog.hierdim>
LD Geography values by level and hierarchy

これらのオブジェクトの構造は、次のとおりです。

GEOGRAPHY
------------------
World
Americas
Canada
USA
Toronto
Montreal
Boston
LosAngeles

GEOG.HIERDIM
------------------
Standard
Consolidated

GEOG.LEVELDIM
------------------
World
Continent
Country
City
Consolidated
Continent
Consolidated
Country

------------GEOG.LEVELREL------------
------------GEOG.HIERDIM-------------
GEOGRAPHY               Standard         Consolidated
------------------ ------------------ ------------------
World              World              NA
Americas           Continent          Consolidated
Continent
Canada             Country            Consolidated
Country
USA                Country            Consolidated
Country
Toronto            City               NA
Montreal           City               NA
Boston             City               NA
LosAngeles         City               NA

-------------GEOG.PARENT-------------
------------GEOG.HIERDIM-------------
GEOGRAPHY               Standard         Consolidated
------------------ ------------------ ------------------
World              NA                 NA
Americas           World              NA
Canada             Americas           Americas
USA                Americas           Americas
Toronto            Canada             NA
Montreal           Canada             NA
Boston             USA                NA
LosAngeles         USA                NA

地理階層のファミリ・リレーションを作成するために、次の定義によってアナリティック・ワークスペース・オブジェクトを定義します。

DEFINE geog.familyrel RELATION geography <geography geog.leveldim geog.hierdim>
LD Geography values by level and hierarchy

次に、次の文に示すように、HIERHEIGHT文を使用してそのオブジェクトを移入します。

HIERHEIGHT geog.parent INTO geog.familyrel USING geog.levelrel

次のREPORT文を発行すると、geographyディメンションのStandard階層およびConsolidated階層のリレーション表現を表示できます。

REPORT DOWN geography geog.familyrel

GEOG.HIERDIM: Standard
-------------------------------GEOG.FAMILYREL--------------------------------
--------------------------------GEOG.LEVELDIM--------------------------------
Consolidated Consolidated
GEOGRAPHY       World      Continent     Country        City      Continent     Country
------------ ------------ ------------ ------------ ------------ ------------ ------------
World        World        NA           NA           NA           NA           NA
Americas     World        Americas     NA           NA           NA           NA
Canada       World        Americas     Canada       NA           NA           NA
USA          World        Americas     USA          NA           NA           NA
Toronto      World        Americas     Canada       Toronto      NA           NA
Montreal     World        Americas     Canada       Montreal     NA           NA
Boston       World        Americas     USA          Boston       NA           NA
LosAngeles   World        Americas     USA          LosAngeles   NA           NA

GEOG.HIERDIM: Consolidated
-------------------------------GEOG.FAMILYREL--------------------------------
--------------------------------GEOG.LEVELDIM--------------------------------
Consolidated Consolidated
GEOGRAPHY       World      Continent     Country        City      Continent     Country
------------ ------------ ------------ ------------ ------------ ------------ ------------
World        NA           NA           NA           NA           NA           NA
Americas     NA           NA           NA           NA           Americas     NA
Canada       NA           NA           NA           NA           Americas     Canada
USA          NA           NA           NA           NA           Americas     USA
Toronto      NA           NA           NA           NA           NA           NA
Montreal     NA           NA           NA           NA           NA           NA
Boston       NA           NA           NA           NA           NA           NA
LosAngeles   NA           NA           NA           NA           NA           NA

IF...THEN...ELSEコマンド

IF...THEN...ELSEコマンドは、OLAP DMLプログラム内で使用すると、指定された条件に適合した場合にプログラム内の1つ以上の文を実行するコマンドです。オプションで、条件に一致しない場合に、かわりになる文または文のグループを実行することも可能。

注意:
式の条件演算子としてIFを使用することもできます。「IF...THEN...ELSE式」を参照してください。

構文

IF boolean-expression

THEN statement1

[ELSE statement2]

パラメータ

boolean-expression

TRUEまたはFALSEを返す有効なブール式。

THEN statement1

Oracle OLAPは、ブール式がTRUEである場合にstatement1引数を実行します。statement1はTHENと同じ行にある必要があります。

ELSE statement2

Oracle OLAPは、ブール式がFALSEである場合にstatement2引数を実行します。statement2はELSEと同じ行にある必要があります。ELSE句を省略した場合、プログラムのIF...THEN...文全体の後ろにある文によって実行が継続されます。

使用上の注意

DOとともに使用するIF

IF文は、THENまたはELSEキーワード(あるいはその両方)をDO ... DOENDシーケンスとともに使用することによって、複数の文を条件付きで実行できます。例10-5「IF...THEN...ELSEの使用方法」を参照してください。

単一行か複数行か

IFを式として使用する場合、THENおよびELSEキーワードはIFと同じ行にある必要があります。IFをコマンドとして使用する場合は、THENおよびELSEは別々の行にある必要があります。

例

例10-5 IF...THEN...ELSEの使用方法

プログラム内の次の行は、IF...THEN...ELSE...の使用方法を示します。ブール式ANY(DOLLARS LT 200000)がTRUEである場合、THENの後の文(statement group 1)が実行されます。式がFALSEである場合、ELSEの後の文(statement group 2)が実行されます。

IF ANY(DOLLARS LT 200000)
THEN DO
... " (statement group 1)
DOEND
ELSE DO
... "(statement group 2)
DOEND

例10-6 条件演算子としてのIFの使用方法

レポートを生成するプログラムで、引数としてプログラムに渡す年によって、前年の実績経費または当年の予算をレポートするとします。JOINCHARSファンクションの条件式は、単語ActualまたはBudgetが付加されたヘッダーを生成します。別の条件式でレポートに対する変数を選択します。プログラムの各行は次のとおりです。

ARGUMENT cur.year year

LIMIT month TO year cur.year
REPORT -
HEADING JOINCHARS( 'Expenses: ' -
IF cur.year LT 'Yr95' -
THEN 'Actual FOR ' -
ELSE 'Budget FOR ', -
cur.year ) -
IF cur.year LT 'Yr95' THEN actual ELSE budget

IMPORT

IMPORTコマンドは、テキスト・ファイルまたはスプレッドシートからアナリティック・ワークスペースに、あるいはEIFファイルから別のアナリティック・ワークスペースにデータを転送するコマンドです。

IMPORTコマンドの構文は、インポートするデータがある場所によって異なるので、次のようにソース・ファイルの種類別に説明します。

- IMPORT(EIF)

- IMPORT(テキスト)

- IMPORT(スプレッドシート)

IMPORT(EIF)

IMPORT(EIFから)コマンドを使用して、EIFファイルからOracle OLAPアナリティック・ワークスペースにデータおよび定義をコピーできます。IMPORTは、コマンドにディメンションを指定しなくても、ワークスペースに存在していない、インポートされるデータのディメンションもコピーします。

ヒント:
EIFファイルのインポートおよびエクスポートの方法を決定するオプションは複数あります。これらのオプションは、「EIFオプション」に記載されています。

IMPORT(EIFから)は、通常EXPORT(EIF)とともに使用して、Oracle OLAPアナリティック・ワークスペースの一部を別のOracle OLAPアナリティック・ワークスペースにコピーしますが、これは、オブジェクトをソース・ワークスペースからEIFファイルにエクスポートし、次にそのオブジェクトをEIFファイルからターゲット・ワークスペースにインポートします。ソースおよびターゲットのワークスペースが存在する場所は、同じプラットフォームでも異なるプラットフォームでも構いません。コンピュータ間でEIFファイルを転送する場合、バイナリ転送を使用してプラットフォーム間のファイル形式の非互換性の問題を回避します。EIFファイルは、EIFVERSIONをターゲット・ワークスペースのリリース番号以下のリリースに設定して作成する必要があります。ターゲットのリリース番号を確認するには、EVERSIONを使用します。

IMPORTを使用すると、EIFNAMESおよびEIFTYPESオプションにも情報が格納されます。

構文

IMPORT import_item FROM EIF FILE file-id [INTO workspace] -

[MATCH [STATUS]|APPEND|REPLACE [DELETE]] [LIST [ONLY]] [DATA] -

[DFNS] [UPDATE] [NOPROP] [NASKIP] [NLS_CHARSET charset-exp] -

[API | NOAPI]

ここで、import_itemは次のいずれかです。

name [AS newname]

ALL

パラメータ

name [AS newname]

EIFファイルからアタッチされたアナリティック・ワークスペースにインポートされるワークスペース・オブジェクトの名前。このオブジェクトはまだワークスペースに存在していないので、オブジェクトに対する修飾オブジェクト名を指定できません。一度に複数の名前を指定できます。オブジェクトがインポートされる場所については、INTO workspace引数を参照してください。

AS newnameは、ディメンションを除く、インポートされるあらゆる型のオブジェクト名の変更に使用できます。

多次元のオブジェクトを別々の変数としてエクスポートした場合、すべての変数名を指定します。(EXPORT(EIF)のSCATTER ASキーワードを参照してください。)

ALL

(デフォルト)EIFファイルに含まれるすべてのオブジェクトをインポートすることを示します。オブジェクトがインポートされる場所については、INTO workspace引数を参照してください。

INTO workspace

オブジェクトのインポート先となるアタッチされたアナリティック・ワークスペースの名前。指定されたワークスペースにオブジェクトが存在する場合、そのデータはインポートされるデータによって上書きされます。オブジェクトが存在しない場合、IMPORTは指定されたワークスペースにオブジェクトを作成します。他のアタッチされたワークスペースに同じ名前のオブジェクトが存在する場合は無視されます。

この引数を指定しない場合は、次のように処理されます。

- インポートされるオブジェクトをアタッチされたワークスペースで事前定義していない場合、IMPORTは現行のワークスペースでそのオブジェクトを自動的に定義します。

- いずれかのアタッチされたワークスペースにそのオブジェクトがすでに存在する場合、IMPORTはそこに含まれるデータをインポート・データによって上書きします。

FROM EIF FILE file-id

インポートするファイルを指定します。file-idはファイルの名前を表すテキスト式です。名前はファイル識別子の標準形式である必要があります。

MATCH [STATUS]

ターゲット・ワークスペースにすでに存在するディメンション値と一致するディメンション値に関連付けられているデータのみをIMPORTコマンドが転送することを示します。時間ディメンション以外のディメンションの場合、EIFファイルとターゲット・ワークスペースの対応するディメンション値を一致させるには、スペルおよび大/小文字の区別が同じであることを確認します(たとえば、TentsはTENTSと一致しません)。時間ディメンションの場合、Oracle OLAPは、ディメンション値の表示方法によってではなく、ディメンション値が表す日付によってディメンション値を識別します。したがって、EIFファイルとワークスペースの時間ディメンション値が同じ期間を表す場合、両方の時間ディメンション値は自動的に一致します。MATCH STATUSを指定した場合、IMPORTはそのディメンションの現行のステータスに含まれる値に関連付けられているデータのみをインポートします。ディメンションがターゲット・ワークスペースで制限されている場合、Oracle OLAPはステータスから除外されている値に関連付けられているEIFファイルのデータを無視します。

APPEND

(デフォルト)ディメンション値がターゲット・ワークスペースにすでに存在するディメンション値と一致するかどうかにかかわらず、関連付けられているデータとともにすべてのディメンション値をIMPORTコマンドが転送することを示します。APPENDは、既存のディメンション値と一致しないディメンション値を追加し、新しい値はディメンション値のリストの最後に追加されます。時間ディメンションの場合、ターゲット・ワークスペースのディメンション値と新しいディメンション値の間に差があれば、APPENDはそれを埋めるためのディメンション値の追加も行います。

REPLACE [DELETE]

ワークスペースですでに定義されているオブジェクトに対して、IMPORTがEIFファイルのディメンション値と一致する既存のディメンション値を保持することを示します。EIFファイルのディメンション値と一致しないディメンション値(およびそのデータ)は削除されます。EIFファイルに関連付けられているデータの変数が含まれる場合、IMPORTは、新しいディメンションの一部として保持されるディメンション値の関連付けられているデータを置き換えます。テキスト・ディメンションの場合、EIFファイルのディメンション値の順序も変更されます。

REPLACE DELETEを指定した場合、マッチングは行われません。ディメンションをインポートする前に、Oracle OLAPはMAINTAIN DELETE ALLを実行しますが、これによって既存ディメンションに関連付けられているすべてのデータがディメンション値がとともに廃棄されます。

重要:
REPLACEキーワードを使用する場合は注意が必要です。ディメンションの値を置き換えると、そのディメンションによってディメンション化されているターゲット・ワークスペースのすべての変数およびリレーションが影響を受けます。変数またはリレーションを同時にインポートするのではない場合に、そのディメンションのうちの1つで値を置き換えると、結果としてデータが失われることがあります。

LIST

LIST ONLY

定義のリストを生成します。ディメンションの場合、ターゲット・ワークスペースにインポートされるときの、各ディメンションの値の数が出力に示されます。コンポジットの場合、ディメンション値の組合せの数が示されます。さらに、2分ごとおよびインポート処理後には常に、読取りバイト数および経過時間もIMPORTによって示されます。

デフォルト以外の索引タイプを使用する結合またはコンポジットを定義した場合、IMPORT LISTコマンドはその索引タイプを表示します。デフォルトの索引タイプ(結合用のHASH、コンポジット用のBTREE)を使用する場合、その情報は表示されません。

EXPORT(EIF)は現行の出力ファイルにリストを送信します。LIST ONLYを指定した場合、実際のインポートは行われずにリスト表示のみが行われます。

ONLY

Oracle OLAPが、実際のインポートを行わずにEIFNAMESおよびEIFTYPESオプションに正しい値を配置します。ただし、オブジェクト定義の完全なリストは生成されません。そのリストを生成するには、ONLYキーワードの前にLISTキーワードを指定します。

DATA

ターゲット・ワークスペースにすでに存在するオブジェクトに対して、IMPORTがそのオブジェクトに関連付けられているデータのみを更新することを示します。すでに存在する計算式に対して、IMPORTはそのEQ式を更新します。IMPORTがターゲット・ワークスペースに作成するオブジェクトは、完全な定義および関連付けられているデータとともに作成されます。DATAとDFNSの両方を指定できますが、どちらも指定しない場合のデフォルトはDATAです。

DFNS

ターゲット・ワークスペースにすでに存在するオブジェクトに対して、IMPORTが定義を更新するのみで、データは変更しないままにすることを示します。IMPORT DFNSによって影響を受ける定義のコンポーネントは、LDコマンド、VNFおよびPROPERTYです。IMPORTがターゲット・ワークスペースに作成するオブジェクトは、そこでもデータを受け取ります。DATAとDFNSの両方を指定できますが、どちらも指定しない場合のデフォルトはDATAです。

UPDATE

IMPORTが各オブジェクトをインポートした後にUPDATE文を実行することを示しますが、これは、Oracle OLAPでメモリー不足が発生するような大きなEIFファイルのインポートに有効な場合があります。更新の頻度を制御するには、EIFUPDBYTESオプションを使用します。

NOPROP

各オブジェクトに割り当てたプロパティをEIFファイルから読み取りません。

NASKIP

NAデータのみを含むコンポジット・タプル(索引)をターゲット・ワークスペースにインポートしないことを指定します。この引数はすでにワークスペースに存在するタプルには影響を与えません。

NLS_CHARSET charset-exp

file-idによって指定されるファイルからテキスト・データをインポートする際にOracle OLAPが使用するキャラクタ・セットを指定します。通常、EIFファイルにはそのキャラクタ・セットの独自指定が含まれているので、この引数は必要ありません。ただし、EIFファイルで不適切なキャラクタ・セットが指定されている場合、またはキャラクタ・セットの指定が不明である場合は、この引数を使用してキャラクタ・セットを正しく指定する必要があります。

指定可能なキャラクタ・セットについては、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

この引数は最後に指定する必要があります。この引数が省略されていて、Oracle OLAPがEIFファイルからキャラクタ・セットを決定できない場合、Oracle OLAPは、NLS_LANGオプションに記録されているデータベース・キャラクタ・セットを使用してデータをインポートします。

API

(デフォルト)EIFファイルがAPIキーワードを使用したEXPORT(EIF)コマンドで作成された場合、指定した項目に対して定義されているキューブのメタデータをインポートします。

注意:
このようなインポートの実行後には、UPDATEおよびCOMMITが自動的に実行されます。

NOAPI

EIFファイルがAPIキーワードを使用したEXPORT(EIF)コマンドで作成された場合でも、指定した項目に対して定義されているキューブのメタデータをインポートしません。このキーワードを指定すると、Oracle OLAPでは、IMPORTコマンドの実行後にUPDATEおよびCOMMITは自動的に実行されません。

使用上の注意

別々のIMPORT文

MATCH、APPEND、REPLACE、DATAおよびDFNS引数を指定すると、インポートするために指定したすべてのオブジェクトに影響を与えます。それぞれのオブジェクトを異なる方法で処理するには、IMPORT文を個別に使用します。

非表示のプログラムのインポートとエクスポート

リレーションのインポート

リレーションをインポートする場合、IMPORTは関連ディメンションの定義および値も転送します。

連結ディメンションのインポート

連結ディメンションをアナリティック・ワークスペースにインポートするときに、連結ディメンションはすでにアナリティック・ワークスペースに存在するが、そのコンポーネントのディメンションは存在しない場合、Oracle OLAPは連結ディメンション、コンポーネントのディメンションおよびすべてのディメンションの定義をインポートします。

アナリティック・ワークスペースに存在していない連結ディメンションをインポートするときに、そのコンポーネントのディメンションの1つ以上がすでにアナリティック・ワークスペースに存在する場合、Oracle OLAPは連結ディメンション、新しいコンポーネントのディメンションおよびそれらの定義をインポートします。アナリティック・ワークスペースにすでに存在するコンポーネントのディメンションに対しては、他のディメンションの場合と同様に、IMPORT文にMATCH、APPEND、REPLACEの指定があればそれに従ってコンポーネントであるディメンションがインポートされます。

アナリティック・ワークスペースにすでに存在する連結ディメンションの名前および定義で連結ディメンションをインポートする場合、Oracle OLAPは他のディメンションの場合と同様に連結ディメンションをインポートします。

アナリティック・ワークスペースにすでに存在する連結ディメンションと同じ名前で連結ディメンションをインポートするときに、インポートされる連結ディメンションの定義が既存の連結ディメンションの定義と異なる場合、既存の連結ディメンションの定義は変更されず、既存の連結ディメンションのコンポーネントのディメンションの定義も変更されません。既存の連結ディメンションのコンポーネントのディメンションでもある、インポートされる連結ディメンションのコンポーネントのディメンションのみがインポートされます。インポートされる連結ディメンションが既存の連結ディメンションとコンポーネントのディメンションを共有しない場合、エラー条件が発生します。連結ディメンションによってディメンション化されているオブジェクトをインポートする場合、Oracle OLAPはインポートされるディメンションの値に対応するオブジェクトの値のみをインポートします。

ディメンション・サロゲートのインポートとエクスポート

ディメンション・サロゲートをExpress Interchange File(EIF)にインポートまたはEIFからエクスポートできます。この操作で、ディメンション・サロゲートは、サロゲートのディメンションによってディメンション化される変数のように動作します。EXPORT操作では、サロゲートが定義されているディメンションもエクスポートされます。IMPORT操作では、サロゲートが定義されているディメンションがインポートされますが、MATCH、STATUS、DATA、DFNS、APPENDおよびREPLACEキーワードを使用して、どの値をインポートするかを決定できます。

ディメンション・サロゲートをインポートすると、サロゲートの基になるディメンションの定義および値もインポートされます。同じ定義のディメンションが現行アナリティック・ワークスペースにすでに存在する場合、MATCH、APPEND、REPLACE、DATA、DFNSなどのIMPORTのキーワードのサロゲートに対する効力は、ディメンションによってディメンション化される変数のサロゲートの場合と同じです。インポートされるサロゲートの名前および定義が現行アナリティック・ワークスペースの既存のディメンション・サロゲートと同じ場合、およびインポートされるサロゲートに既存のサロゲートと同じ値がある場合、エラー条件が発生します。

同じ名前のオブジェクトが現行アナリティック・ワークスペースに存在しない場合、またはDFNSキーワードを使用する場合、INTEGERディメンション・サロゲートをインポートできます。INTEGERディメンション・サロゲートをインポートすると、インポートされるサロゲート・ディメンションの暗黙的なインポートによって既存のディメンションの値が変更される場合に、既存のINTEGERディメンション・サロゲートに影響を与えます。

APPENDとREPLACE

ターゲット・ワークスペースにすでに存在するINTEGERディメンションをインポートする場合、次の点に注意してください。

- インポートされるINTEGERディメンションが既存のINTEGERディメンションより大きい場合、APPENDとREPLACEの効力は同じです。ディメンションの値の数は、大きい方のインポートされるディメンションの値の数になります。

- インポートされるINTEGERディメンションのほうが小さい場合、REPLACEはディメンションの最後から該当するディメンション値を関連付けられているデータとともに削除しますが、APPENDは既存のディメンション値をそのまま残します。

INTEGERとSHORTINTEGERのデータ型

IMPORTコマンドは、INTEGERとSHORTINTEGERの間でデータ型を変換します。この2つのデータ型のうちの一方を持つ変数をEIFファイルからインポートするときに、その変数がすでにワークスペースに他方の型で存在する場合、Oracle OLAPはデータを自動的に変換します。SHORTINTEGERの最大値は32,767、最小値は-32,767です。この制限を超えるINTEGER値をSHORTINTEGER変数にインポートすると、結果はNAです。

TEXTとIDのデータ型

インポートするEIFファイルに、TEXTディメンション、変数、リレーションまたは値セットにインポートするIDデータが含まれる場合、Oracle OLAPはインポート処理時にIDデータをテキストに自動的に変換します。

既存のプログラムとモデル

ワークスペースにすでに存在するプログラムまたはモデルをインポートする場合、DFNSを指定する必要があります。プログラムまたはモデルは定義のみで、データを持ちません。デフォルトのオプションDATAは、すでに存在するソース・コードをインポートしません。

プログラムを定義する場合、プログラムがファンクションとしてコールされるときに使用されるデータ型またはディメンション名を指定できます。データ型を指定すると、戻り値のデータ型が決定されます。ディメンション名を指定すると、戻り値はそのディメンションの単一の値です。既存のプログラムをインポートする場合、インポートされるプログラム定義のデータ型またはディメンションは既存のプログラム定義と一致する必要があります。一致しない場合は、エラー・メッセージが生成されます。

PERMIT文

オブジェクトに関連付けられたPERMIT文は、オブジェクト定義とともにインポートされます。このコマンドは、そのオブジェクトを引数にしてDESCRIBEコマンドを使用すると参照できます。ただし、オブジェクトがインポートされるときに権限条件は評価されません。

同じ名前のオブジェクトがターゲット・ワークスペースにすでに存在する場合に、DFNSキーワードを指定すると、オブジェクトのPERMIT文は更新されます。ただし、新しいアクセス権を有効にするには、PERMITRESETを実行する必要があります。同じ名前のオブジェクトがターゲット・ワークスペースにすでに存在する場合に、DFNSキーワードを指定しないと、オブジェクトのPERMIT文は更新されません。ターゲット・ワークスペースに既存のオブジェクトがない場合には、インポート時にDFNSキーワードを指定するかどうかにかかわらず、オブジェクトのPERMITコマンドは更新されますが、新しいアクセス権を有効にするためにPERMITRESETを実行する必要があります。(PERMITコマンドを参照してください。)

ワークスペース全体をエクスポートおよびインポートし、続いてそのワークスペースを更新、デタッチおよび再アタッチする場合、Oracle OLAPはエクスポート前に有効だったすべてのアクセス権をターゲット・ワークスペースでも有効にします。

ワークスペース・サイズの削減

EXPORT文とともにIMPORTを使用すると、ワークスペース全体を即座に稠密にできます。これを行うには、最初にワークスペースをエクスポートし、次にそれを別の名前でインポートします。古いワークスペースを削除し、新しいワークスペースを元の名前に変更します。

結合型の維持

HASH、BTREEまたはNOHASH結合ディメンションをEIFファイルにエクスポートする場合、EIFファイルにはその定義とともに結合型がエクスポートされます。その結合ディメンションをアナリティック・ワークスペースにインポートすると、新しいディメンションまたはその結合型をすでに使用しているディメンションにインポートしたときに、Oracle OLAPはその結合型を維持します。同じ結合型を使用しない既存のディメンションにそのディメンションをインポートしたときには、Oracle OLAPはEIFファイルに保存された元の結合型を維持しません。

EIFBYTES、EIFNAMESおよびEIFTYPES

EIFBYTESオプションを使用すると、最後にIMPORT(EIFファイル)文が実行されたときの読取りまたは書込みのバイト数がわかります。EIFNAMESオプションを使用すると、最後に実行したIMPORT文によってインポートされたすべてのオブジェクトの名前のリストを取得でき、EIFTYPESオプションを使用すると、そのリストにあるオブジェクトの型がわかります。

次の形式の文では、IMPORTは指定されたオブジェクトを実際にインポートせずに、オブジェクトに関する情報をEIFNAMESおよびEIFTYPESオプションに格納します。IMPORTは、IMPORTコマンドによって指定されるオブジェクト名のリストをEIFNAMESオプションに配置します。また、IMPORTは、EIFNAMESにリストされる各オブジェクト型のリストをEIFTYPESオプションに配置します。LISTキーワードを使用すると、オブジェクト定義の完全なリストを現行の出力ファイルに送信できます。

IMPORT name FROM EIF FILE file-id [LIST] ONLY

詳細は、EIFBYTES、EIFNAMESおよびEIFTYPESオプションを参照してください。

名前のないコンポジットのインポート

SPARSEキーワードを使用してディメンション・リストに変数または他のオブジェクトを定義した場合、Oracle OLAPはSPARSEディメンション・リストに対応する名前のないコンポジットを作成します。定義に名前のないコンポジットがあるオブジェクトをエクスポートまたはインポートすると、そのコンポジットはオブジェクトとともに自動的にエクスポートまたはインポートされます。名前のないコンポジットは通常のワークスペース・オブジェクトではないため、単独でのインポートやエクスポートはできません。

SEGWIDTHで指定された変数セグメント

CHGDFN文でSEGWIDTHキーワードを使用して変数セグメントの長さを指定した場合、セグメント情報は自動的にエクスポートおよびインポートされません。SEGWIDTH設定を維持するには、ワークスペース全体をエクスポートして新しく作成したワークスペースにワークスペース・オブジェクトのみをインポートし、セグメント設定を指定してから変数データを新しいワークスペースにインポートします。

TEXT値とNTEXT値のインポート

TEXT値およびNTEXT値はエクスポートやインポートが可能です。どちらのデータ型も単一のEIFファイルにエクスポートされます。

- エクスポートされるTEXT値は、EXPORT(EIF)でファイルに指定されているキャラクタ・セットを使用してEIFファイルに格納されます。

- エクスポートされるNTEXT値は、NTEXT(UTF8 Unicode)としてEIFファイルに格納されます。

- TEXTオブジェクトにインポートされるNTEXT値は、データベース・キャラクタ・セットに変換されます。その結果、NTEXT値がデータベース・キャラクタ・セットで表せない場合にデータが失われることがあります。

- NTEXTオブジェクトにインポートされるTEXT値は、NTEXT(UTF8 Unicode)キャラクタ・セットに変換されます。

例

例10-7 EIFファイルからのディメンションのインポート

この例は、2つの変数の内容およびディメンションを、カレント・ディレクトリ・オブジェクトにあるfinance.eifという名前のディスク・ファイルから現行Oracle OLAPワークスペースにインポートする方法を示します。

IMPORT actual budget FROM EIF FILE 'finance.eif'

例10-8 連結ディメンションのインポート

この例は、現行アナリティック・ワークスペースにすでに存在する連結ディメンションとは異なる定義を持つ連結ディメンションのインポートの結果を示します。DESCRIBE文によって、現行アナリティック・ワークスペースのディメンションおよび変数の定義が次のように返されるとします。

DEFINE city TEXT DIMENSION
DEFINE state TEXT DIMENSION
DEFINE country TEXT DIMENSION
DEFINE locality DIMENSION CONCAT (city, state)
DEFINE geog DIMENSION CONCAT (locality, country)
DEFINE sales INTEGER VARIABLE <geog>

次の文は、salesデータをレポートします。

REPORT sales

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

GEOG                SALES
------------------- -----
<city: Boston>       1000
<city: Springfield>  2000
<state: Ma>          3000
<country: Usa>       4000

DESCRIBE文によって、diffconcat.eifファイルのディメンションおよび変数の定義が次のように返されます。

DEFINE CITY TEXT DIMENSION
DEFINE REGION TEXT DIMENSION
DEFINE COUNTRY TEXT DIMENSION
DEFINE GEOG DIMENSION CONCAT (CITY, REGION, COUNTRY)
DEFINE SALES INTEGER VARIABLE <GEOG>

次の文は、diffconcat.eifファイルにある連結ディメンションのエクスポート元であるアナリティック・ワークスペースのディメンション値のsalesデータをレポートします。

REPORT sales

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

GEOG               SALES
------------------ -----
<city: Boston>      1111
<city: Worcester>   2222
<region: East>      3333
<country: Usa>      4444

次の文は、diffconcat.eifファイルからsales変数をインポートし、連結ディメンションgeogを暗黙的にインポートします。APPENDキーワードによって、Oracle OLAPは値Worcesterをcityディメンションに追加します。その後、<city: Boston>、<city: Worcester>および<country: Usa>に一致するsalesの新しい値がインポートされます。

IMPORT sales FROM EIF FILE diffconcat.eif APPEND

インポート操作の後、SALESの値をレポートすると次の結果が返されます。

GEOG                SALES
------------------- -----
<city: Boston>       1111
<city: Springfield>  2000
<city: Worcester>    2222
<state: Ma>          3000
<country: Usa>       4444

IMPORT(テキスト)

IMPORT(テキストから)コマンドを使用すると、テキスト・ファイルからOracle OLAP Worksheetオブジェクトにデータをコピーできます。ワークシートの各行は、テキスト・ファイルの行と同じです。

IMPORTは、一般に、他のソフトウェア製品からアナリティック・ワークスペースにテキスト・ファイルをコピーするために使用されます。

通常、テキスト・ファイルの場合、IMPORTではなくFILEREAD文を使用します。FILEREADはより効率的で、ワークシート・オブジェクトを必要とせず、各列のデータを別々に処理する必要もありません。

構文

IMPORT worksheetname FROM [TEXT|STRUCTURED|RULED [RULER ruler-exp] -

PRN FILE file-id [STOPAFTER n] [TEXTSTART schar] [TEXTEND echar] -

[DELIMITER dchar] [NLS_CHARSET charset-exp]

パラメータ

worksheetname

Oracle OLAP Worksheetオブジェクトの名前を指定するテキスト式。ワークスペースでworksheetnameを事前定義していない場合、IMPORTがデフォルト・ディメンションWKSCOLおよびWKSROWを使用して自動的にそれを定義します。worksheetnameの前の内容は上書きされます。1つのIMPORT文で、1つのテキスト・ファイルからインポートできるworksheetnameは1つのみです。

FROM . . .PRN

Oracle OLAP Worksheetをテキスト・ファイルからインポートすることを示します。

TEXT

ソース・ファイルをそのまま行単位でOracle OLAP Worksheetにインポートします。ソース・ファイルは、単一の幅の広いワークシート列にTEXTのデータ型でコピーされます。その列は常にワークシートの列1です。ソース・ファイルの各行は、その最初の列の、ソース・ファイルと同じ数の個別の行の各セルにインポートされます。ソース・ファイルの空白行は、ワークシートの最初の列の対応する行でゼロ文字(NULL)のTEXT値になります。(TEXTがデフォルトです。)

STRUCTURED

ソース・ファイルをセル単位でターゲット・ワークシートにインポートし、自動的に次の3つの機能を果します。

1. ソース・ファイルの文字の各行を、ターゲット・ワークシートの単一行にコピーします。

2. ソース・ファイルの行の文字の各グループを、ターゲット・ワークシートの同じ行の別々のTEXTセルにコピーします。文字グループは、連続する数列(小数点がついた場合には分離しているとはしない)、および二重引用符で囲まれた文字という2つの条件で定義されます。そのため、3桁を区切るカンマを含む数列は、最初にカンマを削除しないかぎり別々のセルに分割されます。

3. 二重引用符で囲まれない数字以外の文字は無視されますが、数字の直前のマイナス記号のみは数字とともに同じTEXTセルにコピーされます。(ソース・ファイルでマイナス記号と数字の間に空白がないことを確認してください。)

ソース・ファイルの空白行は、対応するワークシートの行の最初のセルでNAになります。

ファイル形式が前述のパターンに従わない場合、TEXTSTART、TEXTENDおよびDELIMITERキーワードを使用します。これらの引数によって、各フィールドの先頭および末尾を識別するためにIMPORTが使用するデリミタをカスタマイズできます。

RULED

ソース・ファイルを様々なデータ型のワークシート・セルに対して列単位でインポートします。ソース・ファイルのすべての行が、長さも含めてファイルの他のすべての行と同じパターンのデータである必要があります。このデータ・パターンは、Oracle OLAPに対してRULERキーワードを使用して1行のruler-expで記述します。IMPORTはソース・ファイルの各行をループ処理し、その内容をターゲット・ワークシートの行のパターンが同じセルに1行ずつコピーします。ruler-expはソース・ファイルの後続の行をループ処理し、同じパターンのセルからなる複数の列が1行としてターゲット・ワークシートに縦に並べられていきます。20 rows processedから始まるステータス・メッセージが、20行ごとに現行の出力ファイルに送信されます。

文字グループのパターンがそれぞれ異なるレコードがソース・ファイルに含まれる場合、データをインポートするには、それほど厳密さを求められないオプションであるSTRUCTUREDまたはTEXTを使用します。

RULER ruler-exp

ソース・ファイルのレコード・パターンにおけるデータ型、長さおよび各文字グループの繰返し数を指定するために、RULEDキーワードのみとともに使用します。Ruler-expは文字グループ指定のリストです。各文字グループ指定は、カンマ(,)、バックスラッシュN(\n)または空白( )によって区切る必要があります。ソース・ファイルの基本となるレコード・パターン(行パターン)に、すべての文字を明らかにするほど多くの指定を含める必要はなく、RULERは、現行レコードの末尾までの距離にかかわらず、各行で指定がなくなるとすぐに次のレコードに進みます。リテラル・テキストは一重引用符で囲んでください。

文字グループの指定は、TEXTのT、数値(INTEGERまたはDECIMAL)のA、およびスキップまたは無視のSの3タイプあります。これらのタイプの形式を、表10-1「IMPORTに対するテキストの文字グループの指定」に示します。

表10-1 IMPORTに対するテキストの文字グループの指定

フォーマット

説明

[mm]Tnn

Oracle OLAPがそれぞれnn文字(バイト)のmm個のグループ(デフォルトは1)をTEXTとしてコピーすることを指定します。0文字グループを指定すると、ワークシートの対応する位置で空のセルになります。各グループは最大498文字です。後続の空白は削除されます。

[mm]Ann

Oracle OLAPがnn文字(バイト)のmm個のグループ(デフォルトは1)をそれぞれコピーし、各グループの数値への変換を試みることを指定します。文字グループが数値に変換できない場合、TEXTセルにコピーされ、後続の空白は削除されます。有効な数値は、NA以外のGET(DECIMAL)ファンクションに指定できる値などです。

ピリオド(小数点)の前の数値に埋め込まれたカンマは無視されます。そのため、カンマによってのみ区切られる複数の数字、または1つのピリオドによってのみ区切られる2つの数字は、単一の数値の一部として扱われます(これらの数字を分離して扱うには、ソース・ファイルで間に空白を挿入します)。先頭のドル記号($)および末尾のパーセント記号(%)は無視され、先頭および末尾の空白は削除されます。複数のピリオドは余分な小数点として扱われて無視されます(それらのピリオドは削除されます)。たとえば、...17...は17のフィールドとして扱われます。

1つのハイフンまたはハイフンと空白が先頭にある数値、およびカッコで囲まれた数値は負数として扱われます。0(ゼロ)文字グループを指定すると、ワークシートの対応する位置で空のセルになります。各グループは最大4,000文字です。

[mm]Snn

Oracle OLAPがnn文字(バイト)のmm個のグループをスキップまたは無視することを指定します。nnの制限は32,767です。(mmを使用するのは、通常、非常に長いレコードを処理するためにこの制限を拡張する場合のみです。)

FILE file-id

インポートするファイルを指定します。file-idはファイルの名前を表すテキスト式です。名前はファイル識別子の標準形式である必要があります。

STOPAFTER n

n個以下のレコードがファイルから読み取られることを指定します。STOPAFTERを省略すると、ファイル全体が読み取られます。

TEXTSTART schar

schar引数は、構造化ファイルでOracle OLAPがテキスト・フィールドの先頭として解釈する単一文字を指定するテキスト式です。デフォルト文字は二重引用符(")です。

TEXTEND echar

echar引数は、構造化ファイルでOracle OLAPがテキスト・フィールドの末尾として解釈する単一文字を指定するテキスト式です。デフォルト文字は二重引用符(")です。

DELIMITER dchar

dchar引数は、構造化ファイルでOracle OLAPが標準フィールド・デリミタとして解釈する単一文字を指定するテキスト式です。Oracle OLAPは、標準フィールド・デリミタを使用して数値フィールドおよびテキスト・フィールドを識別します。デフォルト文字はカンマ(,)です。

NLS_CHARSET charset-exp

file-idによって指定されるファイルからテキスト・データをインポートする際にOracle OLAPが使用するキャラクタ・セットを指定しますが、これによって、Oracle OLAPはデータをそのキャラクタ・セットから正確に変換できます。この引数は最後に指定する必要があります。この引数が省略されていて、Oracle OLAPがファイル自体からキャラクタ・セットを決定できない場合、Oracle OLAPは、NLS_LANGオプションに記録されているデータベース・キャラクタ・セットを使用してデータをインポートします。

使用上の注意

WKSROWディメンションとWKSCOLディメンション

Oracle OLAP WorksheetオブジェクトのWKSROW(デフォルトのワークシート行)ディメンションは、テキスト・ファイルの行に対応します。ワークシートのWKSCOL(デフォルトのワークシート列)ディメンションは、ソース・ファイルの各行に複数のデータ型がある場合に、ワークシートの各行を複数のセルに分割してデータ型を分けるために使用します。WKSROWおよびWKSCOLは、1、2、3などの値を持つINTEGERディメンションです。

最小ワークシート・サイズ

すべてのセルが使用されるかどうかにかかわらず、Oracle OLAPは縦横63セルの最小サイズのワークシートを設定します。ソース・テキスト・ファイルがこの最小サイズより大きなOracle OLAP Worksheetを必要とする場合、IMPORTは必要に応じて自動的にWKSCOLおよびWKSROWのディメンション値を増やします。

数値のインポート

テキスト・ファイルから数値をインポートする場合、IMPORTはINTEGERデータ型を与えます。

他のコンピュータへのファイル転送

別のコンピュータで作成したファイルをインポートする場合、キャラクタ・セットが適切であることを確認してください。テキスト・ファイルを別のコンピュータに転送する場合、転送を処理する通信プログラムが必要な文字変換(たとえば、ASCIIからEBCDICへの変換)を行います。結果のファイルを受け取るコンピュータに対して正しいキャラクタ・セットになるように、転送プログラムのパラメータを設定します。

例

例10-9 RULERキーワードを使用しない列のインポート

カレント・ディレクトリにabctxtという名前のファイルがあるとします。そのファイルには、5桁のINTEGER値のグループが10個と20文字のテキストのグループが1個あります。このファイルをsheet1という名前のOracle OLAP Worksheetにインポートするには、次の文を使用します。

IMPORT sheet1 FROM RULED PRN FILE 'abctxt' ruler '10a5, t20'

ファイル名の実際の形式は、オペレーティング・システムの規則に従う必要があります。

例10-10 RULERキーワードを使用する列のインポート

mixという名前のファイルには、行デリミタがなく、それぞれ100文字を含むレコードがあるとします。各レコードの文字配分は、次の表に示すとおりです。

文字

内容

1 - 10

無視

11 - 17

10進数

18 - 28

無視

29 - 30

2つの単一文字コード

31 - 35

整数

36 - 100

無視

このファイルをsheet2という名前のOracle OLAP Worksheetにインポートするには、次の文を使用します。

DEFINE sheet2 WORKSHEET temp
IMPORT sheet2 FROM RULED PRN FILE 'mix' RULER -
's10, a7, s11, 2t1, a5'

IMPORT(スプレッドシート)

IMPORT(スプレッドシートから)コマンドを使用すると、スプレッドシート・ファイルからOracle OLAP Worksheetオブジェクトにデータ(計算式ではない)をコピーできます。ワークシートのディメンションは、スプレッドシートの列および行と同じです。IMPORTは、常にスプレッドシート・ファイル全体を一度にコピーします。

IMPORTは、一般に、他のソフトウェア製品(たとえばLotusスプレッドシート)からOracle OLAPワークスペースにデータをコピーするために使用されます。

構文

IMPORT worksheetname FROM source [INTO workspace]

ここで、sourceは次のいずれかです。

WKS FILE file-id [NLS_CHARSET charset-exp]

WK1 FILE file-id [NLS_CHARSET charset-exp]

WRK FILE file-id [NLS_CHARSET charset-exp]

WR1 FILE file-id [NLS_CHARSET charset-exp]

DIF FILE file-id [NLS_CHARSET charset-exp]

CSV FILE file-id [STOPAFTER n|DELIMITER dchar|NLS_CHARSET charset-exp]

パラメータ

worksheetname

Oracle OLAP Worksheetオブジェクト。1つのIMPORT文で、1つのスプレッドシート・ファイルからインポートできるworksheetnameは1つのみです。ワークシートに修飾オブジェクト名を指定できますが、INTO worksheet引数を指定する場合、指定するターゲット・ワークスペースは同一である必要があります。ワークシート・オブジェクトがインポートされる場所については、INTO workspace引数を参照してください。

FROM WKS

FROM WK1

FROM WRK

FROM WR1

FROM DIF

Oracle OLAP Worksheetを1-2-3ファイルのバージョン1(WKS)またはバージョン2(WK1)、Symphonyファイルのバージョン1.0(WRK)またはバージョン1.1(WR1)、あるいはデータ交換フォーマット・ファイル(DIF)にインポートすることを示します。

Oracle OLAPは、DIFファイルのE形式(指数表現)の数値を認識しません。

INTO workspace

データのインポート先となるアタッチされたアナリティック・ワークスペースの名前。指定されたワークスペースにworksheetnameが存在する場合、そのデータはインポートされるデータによって上書きされます。worksheetnameが存在しない場合、IMPORTは指定されたワークスペースにそれを作成します。他のアタッチされたワークスペースに同じ名前のワークシートが存在する場合は無視されます。

この引数を指定しない場合は、次のように処理されます。

- アタッチされたワークスペースでworksheetnameを事前定義していない場合、IMPORTがデフォルト・ディメンションWKSCOLおよびWKSROWを使用して、現行のワークスペースに自動的に定義します。

- いずれかのアタッチされたワークスペースにworksheetnameがすでに存在する場合、IMPORTはそこに含まれるデータをインポートされるデータによって上書きします。

FILE file-id

インポートするファイルを指定します。file-id引数はファイルの名前を表すテキスト式です。名前はファイル識別子の標準形式である必要があります。

NLS_CHARSET charset-exp

file-idによって指定されるファイルからテキスト・データをインポートする際にOracle OLAPが使用するキャラクタ・セットを指定しますが、これによって、Oracle OLAPはデータをそのキャラクタ・セットから正確に変換できます。この引数は最後に指定する必要があります。この引数が省略されていて、Oracle OLAPがワークシート自体からキャラクタ・セットを決定できない場合、Oracle OLAPは、NLS_LANGオプションに記録されているデータベース・キャラクタ・セットを使用してデータをインポートします。

注意:
NTEXTデータ型は、ワークシートでサポートされていません。

FROM CSV FILE file-id [STOPAFTER n] [DELIMITER dchar]

ソース・ファイルからセル単位でインポートすることを示します。「CSVのインポート」を参照してください。

STOPAFTER nは、n個以下のレコードがファイルから読み取られることを指定します。STOPAFTERを省略すると、ファイル全体が読み取られます。

DELIMITER dcharは、Oracle OLAPが標準フィールド・デリミタとして解釈する単一の文字(dchar)を指定します。デフォルト値はカンマです。

使用上の注意

Oracle OLAP Worksheetオブジェクトのデフォルト・ディメンション

Oracle OLAP Worksheetのデフォルト・ディメンションは、スプレッドシートの列および行に対応するWKSCOLおよびWKSROWです。WKSCOLおよびWKSROWは、1、2、3などの値を持つINTEGERディメンションです。これらのディメンションがアタッチされたワークスペースにすでに存在するが、現行のワークスペースに存在しない場合、IMPORT文はこれらのディメンションを作成しようとする際に失敗します。この問題を回避するには、最初にワークシートを異なるディメンションで定義します。(詳細は、「ワークシート・ディメンション」を参照してください。)

必要に応じたセルの追加

ワークシートのディメンションによって定義されているより多くのセルがソース・スプレッドシートに含まれる場合、IMPORTは自動的にディメンション値を追加して必要数のセルを用意します。

空のセルとNAのセル

IMPORTは、ソース・ファイルをワークシートにセル単位でマージします。ソース・ファイルの空ではないセルは、NA値である場合も含めて、ワークシートの対応するセルの内容を上書きしますが、ソース・ファイルの空のセルは、ワークシートを上書きせず、現行ワークシートの末尾を超えるソース・ファイルのセルはワークシートに追加されるので、データが廃棄されることはありません。

DIFファイルの数値

DIFファイルから数値をインポートする場合、IMPORTはDECIMALデータ型を与えます。

CSVのインポート

CSVのインポート・オプションは、ソース・ファイルからワークシートのセルにインポートする際に、自動的に次の機能を実行します。

- ソース・ファイルの文字が含まれる各行を、ターゲット・ワークシートの単一行にコピーします。

- ソース・ファイルの行にあるそれぞれの文字グループを、ターゲット・ワークシートの行の別々のTEXTセルにコピーします。グループはデリミタ文字で区切られます。

文字グループが二重引用符で囲まれている場合、次のように処理されます。

- グループ内にあるデリミタ文字はリテラルとして扱われます。

- グループ内に二重引用符が含まれる場合、その後にさらに二重引用符を付ける必要があります。

- グループ内にある改行(\n)は無視されます。

- 開始引用符の前および終了引用符の後にある空白またはタブは無視されます。

例

例10-11 DIFファイルのインポート

この例は、DIF形式のスプレッドシートをmortgage.difという名前のファイルにインポートする方法を示します。メモリーおよび記憶領域を節約するために、最初に一時オブジェクトとしてワークシートを定義します。ワークシートsheet1が存在しない場合、IMPORTが自動的に定義します。このワークシートが前のIMPORT文で使用されていた場合、そのデータは新しいデータによって上書きされます。

DEFINE sheet1 WORKSHEET TEMP
IMPORT sheet1 FROM DIF FILE 'mortgage.dif'

INFILE

INFILEコマンドによって、Oracle OLAPは指定されたファイルから文入力を読み取ります。

関連項目:
「ファイルの読取りと書込みのオプション」

構文

INFILE {file-id|EOF} [NOW] [NLS_CHARSET charset-exp]

パラメータ

file-id

入力の読取り元のファイルの名前。file-idはファイルの名前を表すテキスト式です。名前はファイル識別子の標準形式である必要があります。

入力ファイルには、OLAP DML文と、その文によって生成されるプロンプトに対応する応答のみが含まれる必要があります。各文または各応答は、ファイルで別々の行にある必要があります。

EOF

現行ファイルからの入力の読取りを終了し、INFILE文の実行元の場所から入力の読取りをOracle OLAPが再開します。INFILE EOFの使用はオプションです。「入力ファイルについて」および「NOWとEOFの両方を指定したINFILE」を参照してください。

NOW

Oracle OLAPが、INFILEを含むプログラムが終了するまで待機せずにINFILEが見つかるとすぐに、INFILEで指定される入力ファイルを開いて文を読み取ることを示しますが、これには、プログラム内で入力ファイルの文をネストする効果があります。「NOWとEOFの両方を指定したINFILE」を参照してください。この引数はfile-idの後に指定する必要があります。

NLS_CHARSET charset-exp

file-idによって指定されるファイルからデータを読み取る際にOracle OLAPが使用するキャラクタ・セットを指定しますが、これによって、NLS_LANGオプションによる指定の場合と同様に、Oracle OLAPはデータを現行キャラクタ・セットに正確に変換できます。この引数はfile-idの後に指定する必要があります。この引数を省略すると、Oracle OLAPでは、ファイルのデータは、NLS_LANGオプションに記録されているデータベース・キャラクタ・セットを持つものとして処理されます。

使用上の注意

入力ファイルについて

入力ファイルの末尾に達すると、Oracle OLAPはINFILE文の実行元の場所から入力の読取りを再開します(これは別の入力ファイルの場合もあります)。文INFILE EOFによって入力ファイルを終了する必要はありません。

INFILEは、行の最後にある末尾の空白、および行の最後のテキストと継続マークの間の空白を無視します。さらに、INFILEは空白行を無視します。

NOWキーワードを使用している場合に、入力ファイルが継続文で終了すると、その文は無視されます。たとえば、ファイルが「show -」で終了すると、Oracle OLAPはSHOW文を無視します。

プログラムでのINFILEの使用

NOWキーワードを付けずにINFILE文をプログラムに含めた場合、プログラムが実行を終了するまでINFILE文は実行されません。ネストしたプログラムでは、関連のすべてのプログラムが実行を終了するまでこれが実行されません。また、複数のINFILEコマンドが1つのプログラムによって実行される場合、入力ファイルは指定された順番とは逆に読み取られます。

たとえば、program.aはprogram.cをコールするprogram.bをコールし、各プログラムには2つのINFILEコマンドが含まれ、1つは次のプログラムのコールの前、もう1つはそのコールの後にあるとします(次のコードを参照)。この場合、実行順序はa2、b2、c2、c1、b1、a1になります。

program.a
INFILE a1
"
program.b
INFILE b1
"
program.c
INFILE c1
INFILE c2
"
INFILE b2
"
INFILE a2

NOWキーワードを付けてINFILE文をプログラムに含めた場合、INFILE文は即座に実行されます。ただし、NOWキーワードを付けたINFILEには、プログラム・スタックに通常よりも大きな領域が必要です。スタック領域を節約するために、必要な場合にのみNOWキーワードを使用してください。

プログラム以外でのNOWを指定したINFILE

NOWキーワードはプログラム内での使用を想定していますが、他の場合も使用できます。入力ファイルが通常で遅延されていない場合にNOWキーワードを使用しても目立った効果はありません。NOWには余分なスタック領域が必要なので、このような場合は使用しないでください。

NOWとEOFの両方を指定したINFILE

NOWとEOFの両方のキーワードを使用した場合、NOWキーワードは無視されます。

ファイル入力された文および応答の表示

ディスク・ファイルからの文を実行に伴ってデバッグ・ファイルにコピーするには、DBGOUTFILEコマンドを参照してください。

例

例10-12 入力ファイルの即座の読取り

プログラム内の次の行によって、newdefsという名前のファイルが即座に読み取られます。

INFILE 'newdefs' NOW

LD

LDコマンドは、現行オブジェクト定義に説明を追加するコマンドです。説明は、オブジェクトを説明するために指定するテキストで構成されます。任意の定義に説明を割り当てることができます。

ヒント:
現行オブジェクト定義は、最も新しく定義したオブジェクト、または現行セッションで検討しているオブジェクトの定義です。オブジェクト定義を現行定義にするには、CONSIDER文を使用します。

構文

LD [text]

パラメータ

text

定義に割り当てる説明のテキスト。textを省略した場合、現行定義の既存の説明が削除されます。

継続文字としてハイフンを使用することによって、複数行の説明を作成できます。ただし、LD文で空白行を先頭にして説明を作成することはできません。

例

例10-13 変数の定義への説明の追加

この例では、変数unitsに関連付けられている説明を変更します。最初に、CONSIDER文を実行してunitsを現行定義にします。次に、LD文を使用して新しい説明を割り当てます。units変数の定義は、次のとおりです。

DEFINE units VARIABLE INTEGER <month product district>
LD Actual Unit Shipments

次の文

CONSIDER units
ld Actual Unit Shipments for Each Division
DESCRIBE units

この文によって、次のようなunitsの定義が生成されます。

DEFINE units VARIABLE INTEGER <month product district>
LD Actual Unit Shipments for Each Division

LIMITコマンド

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

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

関連項目:
LIMITファンクション、DEFINE VALUESET

構文

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

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

TO

ADD

INSERT [FIRST|LAST|BEFORE position|AFTER position]

KEE

REMOVE

KEEP REORDER

COMPLEMENT

SORT [NAFIRST]

パラメータ

dimension

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

valueset

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

concat-component

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

TO

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

ADD

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

INSERT

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

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

FIRST

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

LAST

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

BEFORE

AFTER

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

position

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

KEEP

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

KEEP REORDER

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

REMOVE

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

COMPLEMENT

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

SORT

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

NAFIRST

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

limit-clause

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

LIMITコマンド(値を使用)

LIMITコマンド(LEVELRELを使用)

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

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

LIMITコマンド(NOCONVERTを使用)

LIMITコマンド(POSLISTを使用)

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

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

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

使用上の注意

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

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

<base-dimension: value>

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

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

一意の値

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

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

によって、次の出力が生成されます。

The current status of TIME is:
JAN97, FEB97

存在しない値

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

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

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

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

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

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

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

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

結合の制限

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

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

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

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

prodname = 'Canoes'
distname = 'Seattle'
LIMIT proddist To <prodname, distname>

- 各行の組合せを山カッコで囲んだ複数行のリストを作成します。

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

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

LIMIT proddist TO product 'Canoes'

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

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

連結の制限

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

LIMIT concatdim TO <base-dim: value>

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

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

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

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

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

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

例

例10-14 値の追加と削除

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

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

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

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

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

LIMIT month REMOVE 'Jan96' TO 'Mar96'

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

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

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

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

たとえば、store_idというNUMBERディメンションがあり、このディメンションには値25、410、150、205、310および10があるとします。また、このディメンションは、store_idのINTEGERディメンション・サロゲートstoreposも使用します。ディメンション・サロゲートstoreposには値1、2、3、4、5および6があります。store_idのTEXTディメンション・サロゲートはstorenameです。このディメンション・サロゲートには、テキスト値Raoul's - Boston、Poldy's Potpourri、Molly's Emporium、Raoul's - Atlanta、Kinch's Kitchen SuppliesおよびRaoul's - Chicagoがあります。次のすべての文は等価です。

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

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

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

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

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

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

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

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

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

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

The current status of REG.DIST.CCDIM is:
<DISTRICT: BOSTON>, <DISTRICT: DALLAS>, <DISTRICT: DENVER>

- 次の文では、連結ディメンションを直接、連結ディメンションの位置で指定した値に制限します。

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

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

The current status of REG.DIST.CCDIM is:
<REGION: EAST>, <DISTRICT: BOSTON>, <DISTRICT: ATLANTA>

- 次の文では、まずdistrictのステータスを設定してから、reg.dist.ccdimをdistrictのステータスに制限します。

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

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

REG.DIST.CCDIM
----------------------
<district: Dallas>
<district: Denver>
<district: Seattle>

- 次の文では、limit-clause引数は連結ディメンションの値のリストです。

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

- 次の文では、reg.dist.ccdimの値セットを定義して、値セットに連結ディメンションの現行のステータスを格納し、連結のステータスをALLにリセットしてから、連結を値セットに制限して、ステータスにある連結の値をレポートします。

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

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

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

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

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

LIMIT reg.dist.ccdim TO BASEVAL(reg.dist.ccdim) EQ 'New York'

- 次の例では、連結ディメンションgeogが、そのベース・ディメンションとして単純なディメンションregionと結合ディメンションcityandstateを持つとします。次の文で、結合ベース・ディメンションを制限して連結ディメンションのステータスを設定します。

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

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

The current status of GEOG is:
<CITYANDSTATE: <PRINCETON, NEW JERSEY>, <CITYANDSTATE: <PATTERSON, NEW JERSEY>>

- 次の文では、結合ディメンションのベース・ディメンションの値を指定することで結合ベース・ディメンションを制限し、連結ディメンションのステータスを設定します。

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

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

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

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

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

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

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

LIMIT month TO CHARLIST(workitem)

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

The current status of MONTH is:
Jan96 TO Dec96

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

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

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

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

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

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

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

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

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

LIMIT product KEEP units GT 500 IFNONE novals

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

LIMITコマンド(値を使用)

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

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

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

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

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

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

- 値セット

- ブール式がTRUEである値

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

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

構文

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

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

ここで、

- inclusive-val-argsは、次のいずれか1つ以上で構成されます。
intvaluelist
text-expression
value1 TO value2
valuelist
valueset

- exclusive-val-argsは、次のいずれか1つです。
ALL
boolean-expression
{BOTTOM|TOP} n BASEDON expression
{BOTTOM|TOP} n-percent PERCENTOF expression
{FIRST|LAST} n
NTH {n |n TO n}...
LONGLIST
LONGLIST
SESSION
STATUS
NULL

パラメータ

dimension

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

valueset

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

concat-component

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

limit-type

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

intvaluelist

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

text-expression

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

value1TOvalue2

ディメンション値の範囲を指定しますが、ここで、value1およびvalue2は、INTEGER値またはディメンション値のいずれかです。範囲は、昇順(1から10までなど)または降順(10から1までなど)のどちらでも指定できます。INTEGER値を指定すると、その値がディメンションのデフォルトのステータス・リストにおける値の論理位置となります。ディメンション値を指定すると、コマンドによってその値がディメンションのデフォルトのステータス・リストにおける値の論理位置に変換されます。これに従って、ディメンションまたは値セットの現行のステータスが割り当てられます。

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

valuelist

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

valueset

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

ALL

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

boolean-expression

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

BOTTOM  n BASEDON expression

TOP n BASEDON expression

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

BOTTOM n-percent PERCENTOF expression

TOP n-percent PERCENTOF expression

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

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

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

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

FIRST n

LAST n

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

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

NTH {n |n TO n}

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

LONGLIST

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

SESSION

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

STATUS

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

NULL

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

IFNONE label

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

使用上の注意

値を指定する際の注意点

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

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

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

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

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

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

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

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

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

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

LIMIT month TO 'Jan95'
LIMIT district TO 'Boston'
LIMIT product TO sales GT 90000
STATUS product

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

The current status of PRODUCT is:
Footwear

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

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

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

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

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

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

LIMIT product TO sales GT 90000
STATUS product

The current status of PRODUCT is:
Footwear

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

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

LIMIT product TO ANY(sales GT 90000, product)

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

The current status of product is:
Canoes, Footwear

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

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

LIMIT month TO quarter year

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

例

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

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

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

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

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

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

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

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

LIMIT geog TO 'Boston' 'Springfield'

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

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

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

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

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

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

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

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

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

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

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

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

LIMIT product TO TOTAL(sales product) GT 12000000

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

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

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

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

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

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

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

The current status of DISTRICT is:
ATLANTA TO DENVER

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

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

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

次のREPORT文を使用します。

REPORT DOWN district sales

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

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

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

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

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

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

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

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

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

--------------PROD.REGDIST---------------
PRODUCT           REG.DIST.CCDIM
-------------------- --------------------
Tents                <district: Atlanta>
Canoes               <district: Atlanta>

- また、それ自体の値を指定することでも、結合のステータスを設定できます。次のLIMIT文では、この方法によりprod.regdistのステータスが設定されます。

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

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

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

LIMITコマンド(LEVELRELを使用)

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

構文

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

LEVELREL level-relation-clause [IFNONE label]

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

- 多次元のレベル・リレーションを指定するには、次の構文を使用する必要があります。
RELATION level-relation-name [QUALIFY relation-dimension-name [inclusive-val-args...]...]

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

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

パラメータ

dimension

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

valueset

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

concat-component

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

limit-type

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

LEVELREL

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

RELATION

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

level-relation-name

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

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

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

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

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

valueset2

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

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

IFNONE label

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

例

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

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

LIMIT time TO LEVELREL timelevelsrel

これは、次の文を発行するのと同等です。

LIMIT time TO RELATION timelevelsrel QUALIFY time CURRENT

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

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

構文

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

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

- リレーションを指定する際の構文は次のとおりです。
RELATION relation-name [QUALIFY relation-dimension-name [inclusive-val-args...]...]

- 制限対象のディメンションに関連するディメンションを指定する際の構文は次のとおりです。
related-dimension-name [related-dimension-valuelist]

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

パラメータ

dimension

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

valueset

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

concat-component

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

limit-type

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

RELATION relation-name

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

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

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

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

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

related-dimension-name

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

LIMIT dim1 TO dimsurr dsv1 dsv3

related-dimension-valuelist

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

IFNONE label

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

使用上の注意

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

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

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

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

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

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

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

例

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

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

LIMIT district TO region 'East'

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

LIMIT product TO division LAST 1

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

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

参照:
「LIMITのループ動作(親リレーションを使用)」

構文

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

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

ここで、

- family-keywordは次の構成のいずれかです。
PARENTS
CHILDREN
ANCESTORS [DISTANCE generation ]
DESCENDANTS [DISTANCE generation ]
SIBLINGS
TOPANCESTORS
BOTTOMDESCENDANTS
HIERARCHY [INVERTED] [NOORIGIN] [SKIP n] [DEPTH n] [RUN textexp]]

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

- 親リレーションが多次元の場合は、次の構文を使用します。
RELATION parentrel [QUALIFY relation-dimension-name [inclusive-val-args... | CURRENT]...]

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

- 親リレーションが1次元の場合、次の簡素化された構文を使用できます。
parentrel [inclusive-val-args | CURRENT]

パラメータ

dimension

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

valueset

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

concat-component

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

limit-type

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

PARENTS

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

CHILDREN

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

ANCESTORS [DISTANCE generation]

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

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

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

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

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

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

DESCENDANTS [DISTANCE generation]

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

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

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

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

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

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

SIBLINGS

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

TOPANCESTORS

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

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

BOTTOMDESCENDANTS

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

HIERARCHY

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

INVERTED

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

NOORIGIN

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

SKIP

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

DEPTH

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

RUN

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

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

market.market

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

USING

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

parentrel

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

関連項目:
「parentrelリレーション」および「LIMITのループ動作(親リレーションを使用)」

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

RELATION

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

QUALIFY relation-dimension-name

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

inclusive-val-args

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

CURENT

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

IFNONE label

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

使用上の注意

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

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

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

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

例

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

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

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

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

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

LIMIT market TO mlv.market 'Region'
STATUS market

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

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

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

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

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

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

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

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

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

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

次の文があるとします。

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

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

Totus
Boston
Atlanta
Chicago
Dallas
Denver
Seattle

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

LIMIT NOCONVERTコマンド

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

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

構文

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

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

[IFNONE label]

パラメータ

dimension

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

valueset

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

concat-component

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

limit-type

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

NOCONVERT

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

unrelated-dimension

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

numeric-valueset

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

IFNONE label

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

LIMITコマンド(POSLISTを使用)

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

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

構文

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

POSLIST poslist-exp [IFNONE label]

パラメータ

dimension

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

valueset

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

concat-component

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

limit-type

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

POSLIST poslist-textexp

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

IFNONE label

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

LIMIT BASEDIMS

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

LIMIT BASEDIMSは、スパースなオブジェクトのタプルに存在する各ディメンションについてディメンション値のステータスを生成する場合に使用します(一部の任意の入力ステータスでフィルタを適用する場合もあります)。また、このコマンドは、ベース・ディメンションの1つ以上の値セットに値を割り当てる場合にも使用できます。

ディメンションの現行のステータス・リストに存在する値は、「ステータスにある」と言われます。コンポジット、結合ディメンション、連結ディメンション、またはパーティション・テンプレートのベース・ディメンションのステータスは、そのベース・ディメンションの現行のステータスにより決まります。

関連項目:
ディメンション・ステータスに関する処理の詳細は、「すべてのデータ・オブジェクトの値に対するOLAP DML文の適用」およびLIMITコマンドを参照してください。

構文

LIMIT BASEDIMS {<dimlist>}TO object [ [KEEP] limit-clause ]

パラメータ

dimlist

Oracle OLAPでステータスを変更するベース・ディメンションおよび値を追加する値セットを識別するオブジェクトについてのスペース区切りリストです。dimlistには、次の値を指定できます。

base-dimension-name

objectのベース・ディメンションの名前。

relation-name

リレーションの名前。リレーションを指定すると、関連するディメンションのステータスが設定されます。

valueset-name

ベース・ディメンションの値セットの名前、またはLIMITファンクション。値セットの名前を指定すると、指定された値セットに値が1つ割り当てられます。

dimlistでは、最大限に拡張されたobjectのベース・ディメンションのリストが、デフォルトの値となります。

object
コンポジット、結合ディメンション、連結ディメンションまたはパーティション・テンプレート・オブジェクトの名前。

KEEP
オブジェクトのベース・ディメンションに対する現行のディメンション・ステータスに基づいて値を選択するように指定します。KEEPによってステータス内に残される値は、現行の値順序で維持されます。

limit-clause
ベース・ディメンションに対する現行のステータス・リストを変更する際に、objectの値を選択する方法を指定します。

limit-clauseの構文は、各種LIMITコマンドにおける、位置に関係しない任意のlimit-clause引数の構文(つまり、LIMITコマンドの「TO」などのlimit-type引数の後の構文)と同じです。これらの引数の構文については、LIMITコマンド(値を使用)、LIMITコマンド(LEVELRELを使用)、LIMIT(親リレーションを使用)、LIMITコマンド(関連ディメンションを使用)、LIMITコマンド(NOCONVERTを使用)およびLIMITコマンド(POSLISTを使用)を参照してください。

このオプション引数を指定しない場合、ベース・ディメンションのステータスは、ディメンションの現行のステータスに設定されます。

LISTBY

LISTBYプログラムは、指定した1つ以上のディメンションまたはコンポジットによってディメンション化されているか、それらに関連している、アナリティック・ワークスペース内のすべてのオブジェクトの名前をレポートするプログラムです。LISTBYは、アタッチした任意のワークスペースのディメンションまたはコンポジットで使用できます。

構文

LISTBY dimensions

パラメータ

dimensions

スペースで区切った1つ以上のディメンションまたはコンポジットのリスト。複数のディメンションをリストする場合、それらのディメンションはすべて同じワークスペース内のものである必要があります。LISTBYは、ここで指定するすべてのディメンションによってディメンション化されているオブジェクトのリストを返します。名前のないコンポジットを指定する場合は、次の形式を使用します。

LISTBY SPARSE dim1 dim2 ...

使用上の注意

コンポジットと結合ディメンション

LISTBYによって生成されるレポートには、指定したディメンションがベース・ディメンション・リストにある名前付きコンポジット、名前のないコンポジットまたは結合ディメンションが含まれます。

また、そのリストには、指定したディメンションをベース・ディメンションとする名前付きコンポジットまたは名前のないコンポジットを、そのディメンション・リスト内に含むオブジェクトも含まれます。

例

例10-30 LISTBYの使用

ここでは、LISTBYを使用して、productによってディメンション化されているか、またはproductに関連しているすべてのオブジェクトの名前をリストします。このLISTBY product文によって生成される出力は、次のとおりです。

15 objects dimensioned by or related to PRODUCT
----------------------------------------------------------------
ADVERTISING          DIVISION.PRODUCT     EXPENSE
INDUSTRY.SALES       NAME.PRODUCT         NATIONAL.SALES
PRICE                PRODUCT.MEMO         PRODUCTSET
SALES                SALES.FORECAST       SALES.PLAN
SHARE                UNITS                UNITS.M

例10-31 複数のディメンションの指定

この例では、LISTBYを使用して、productおよびmarketの両方によってディメンション化されているか、またはこの両方に関連しているすべてのオブジェクトの名前をリストします。

LISTBY product market

1 objects dimensioned by or related to PRODUCT, MARKET
----------------------------------------------------------
UNITS.M

LISTFILES

LISTFILESコマンドは、FILEQUERYファンクションで参照可能なすべてのオープン・ファイルをリストするコマンドです。このリストには、FILEOPEN、OUTFILEおよびLOGコマンドで開いたすべてのファイルが含まれます。

構文

LISTFILES

例

例10-32 オープン・ファイルのリスト

次の例では、LISTFILESを使用してFILEQUERYファンクションで参照可能なオープン・ファイルを確認する方法を示します。

DEFINE fil.unit VARIABLE INTEGER
fil.unit = FILEOPEN('report' WRITE)
LISTFILES

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

10 w  D:\WINNT35\SYSTEM32\report

LISTNAMES

LISTNAMESプログラムは、アナリティック・ワークスペース内のオブジェクトの名前をリストするレポートを生成するプログラムです。リストの対象を特定の型のオブジェクトに制限し、各オブジェクト型の名前をアルファベット順にリストできます。

構文

LISTNAMES [AW workspace|'*'] [objtype-list|ALL] -

[SORTED|UNSORTED] [LIKE 'pattern']

パラメータ

AW workspace

AW '*'

リストする対象のオブジェクトがあるアタッチしたワークスペースの名前を指定します。ワークスペース名を指定しない場合、LISTNAMESは現行のワークスペースのオブジェクトをリストします。アナリティック・ワークスペース名のかわりに'*'(アスタリスク)を引数として使用すると、アタッチした各ワークスペースのレポートが個別に生成されます。

objtype-list

ALL

名前をリストする1つ以上のオブジェクトの型(AGGMAP、COMPOSITE、DIMENSION、FORMULA、MODEL、OPTION、PROGRAM、RELATION、VALUESET、VARIABLEおよびWORKSHEET)を指定します。どのオブジェクト型でも、DIMENSIONSなどのように、末尾にSを付加できます。これらのオブジェクト型の順序は任意に指定できます。ALL(デフォルト)を指定すると、これらすべての型のオブジェクトの名前がリストされます。

SORTED

UNSORTED

SORTED(デフォルト、省略形はSORT)を指定すると、オブジェクト名がアルファベット順にソートされます。UNSORTED(省略形はUNSORT)を指定すると、オブジェクト名はアルファベット順にソートされません。

LIKE 'pattern'

アナリティック・ワークスペースの定義の名前と指定したテキスト・パターンを比較して、一致する名前をリストします。対応する文字が一致すると、定義名はテキスト・パターンに類似していると判断されます。リテラルな一致に加えて、LIKEでは文字列の複数の文字に一致するワイルドカード文字を使用できます。パターン内のアンダースコア(_)文字は、任意の1文字に一致します。パターン内のパーセント(%)記号は、任意の数(ゼロ個も含む)の文字に一致します。

使用上の注意

NAMEディメンション

NAMEは、アナリティック・ワークスペース内のオブジェクトのリストの編成に使用される特殊なディメンションです。この値は、現行のワークスペースに定義されているオブジェクトの名前です。

NAMEディメンションの値は明示的に変更できません。この値を変更するには、DEFINE、DELETE、MOVEまたはRENAMEのいずれかの文を実行します。また、現行のワークスペース以外のアナリティック・ワークスペースのNAMEディメンションを指定するために修飾オブジェクト名を使用することはできません。

関連項目:
LISTNAMESプログラム

例10-33 ディメンションのリスト表示

アナリティック・ワークスペースのすべてのディメンションをリスト表示するとします。最初に、LIMITコマンドおよびOBJファンクションを使用して、NAMEディメンションのステータスを制限します。次に、STATUS文を使用して、ディメンションのリストを生成します。OBJ(TYPE)によって返される値は常に大文字なので、それに合せるためにLIMIT文に'dimension'ではなく'DIMENSION'を使用する必要があります。次の文

LIMIT NAME TO OBJ(TYPE) EQ 'DIMENSION'
STATUS NAME

によって、次の出力が生成されます。

The current status of NAME is:
PRODUCT, DISTRICT, DIVISION, LINE, REGION, MARKETLEVEL, MARKET,
MONTH, YEAR, QUARTER

例10-34 リレーションのリスト表示

アナリティック・ワークスペースのすべてのリレーションの定義を参照するとします。LIMITコマンドおよびOBJファンクションを使用して、その名前を選択します。次に、DESCRIBEコマンドを使用して、その定義のリストを生成します。次の文

LIMIT NAME TO OBJ(TYPE) EQ 'RELATION'
DESCRIBE

によって、次の出力が生成されます。

DEFINE REGION.DISTRICT RELATION REGION <DISTRICT>
LD REGION for each DISTRICT

DEFINE DIVISION.PRODUCT RELATION DIVISION <PRODUCT>
LD DIVISION for each PRODUCT

DEFINE MLV.MARKET RELATION MARKETLEVEL <MARKET>

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

例

例10-35 DEMOワークスペース・オブジェクトのリスト

この例では、現行のワークスペースのディメンション、変数およびリレーションをリストします。次の文

LISTNAMES dimension variable relation

DEMOワークスペースに関する次の出力が生成されます。

10 DIMENSIONs      18 VARIABLEs       4 RELATIONs
----------------   ----------------   ----------------
DISTRICT           ACTUAL             DIVISION.PRODUCT
DIVISION           ADVERTISING        MARKET.MARKET
LINE               BUDGET             MLV.MARKET
MARKET             DEMOVER            REGION.DISTRICT
MARKETLEVEL        EXPENSE
MONTH              FCST
PRODUCT            INDUSTRY.SALES
QUARTER            NAME.LINE
REGION             NAME.PRODUCT
YEAR               NATIONAL.SALES
PRICE
PRODUCT.MEMO
SALES
SALES.FORECAST
SALES.PLAN
SHARE
UNITS
UNITS.M

LOAD

LOADコマンドは、プログラム、計算式またはモデルの各定義をメモリーにロードします。通常、起動プログラムで使用され、セッションで最初にプログラムを使用する際の時間が短縮されます。

構文

LOAD object. . .

パラメータ

object. . .

プログラム、計算式またはモデルの名前。

使用上の注意

最初に使用する時点でロードされる定義

プログラム、計算式およびモデル以外のアナリティック・ワークスペースのオブジェクトは、アナリティック・ワークスペースをアタッチする時点で、メモリーにロードされます。プログラム、モデルおよび計算式は、最初に使用する時点またはLOADコマンドを使用して要求した時点でメモリーにロードします。ロードにはさほど時間がかからないが多少気になる場合、システムを微調整するアプリケーション・ビルダーでオブジェクトを起動プログラムに事前ロードすると、アプリケーションをセッションの最初から高速で稼動できます。

多量のオブジェクトのロードによる影響

メモリーにロードするオブジェクトが多すぎると、Oracle OLAPで長い文を処理する際に、メモリー不足が起こる可能性があります。LOADを使用する場合は必要最低限にし、効率が最大限になるようにオブジェクトを選択してください。

プログラムのコンパイルの必要性

LOADでは、コンパイルされていないプログラムを自動ではコンパイルしません。最善のパフォーマンスを得るには、プログラムは常にコンパイルし、ワークスペースを更新してコンパイル済コードを保存します。これによって、AUTOGOプログラムなどで別のセッションにプログラムをロードした際に、プログラムをすぐに実行できます。コンパイルの詳細は、COMPILEコマンドを参照してください。

例

例10-36 2つのプログラムのロード

次の文によって、choose.monthsおよびsales.rptの2つのプログラムがロードされます。

LOAD choose.months sales.rpt

例10-37 アナリティック・ワークスペース内のすべてのプログラムのロード

次の文によって、アナリティック・ワークスペース内のすべてのプログラムがロードされます。

LIMIT NAME TO OBJ(TYPE) EQ 'program'
LOAD &VALUES(NAME)

LOGコマンド

LOGコマンドは、ディスク・ファイルへのセッションの記録を開始または停止するコマンドです。入力および出力するすべての行が記録されます。

注意:
LOGコマンドを、同じ名前の算術ファンクションと混同しないでください。

構文

LOG EOF | TRACEFILE | SAVE | {[APPEND] file-name}

パラメータ

EOF

セッションの記録を停止し、開いているすべてのログ記録ファイルを閉じます。

TRACEFILE

TRACEFILEUNITオプションによって識別されるOracleトレース・ファイルにセッション情報が送信されることを指定します。

SAVE

Oracle OLAPによってログ・ファイルが強制的に更新されます。入力行および出力行は、常に生成された時点でディスクに書き込まれるとは限りません。かわりに、それらの行は一時的に格納され、定期的にディスクに書き込まれます。LOG SAVEを指定すると、実際には、LOG EOFおよびLOG APPEND file-nameコマンドが発行され、ログ・ファイルを閉じて再度開くことで、適切なすべての行がディスクに確実に書き込まれます。追加の入力行および出力行はファイルに追加されます。

APPEND

セッションの記録を既存のディスク・ファイルの末尾に追加することを指定します。この引数を省略すると、ファイルの現在の内容は新しい出力によって置き換えられます。

file-name

セッション情報が書き込まれるファイルの名前を表すテキスト式。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。

注意:
ディレクトリ・オブジェクトはデータベースで定義され、ディレクトリおよびディレクトリ内のファイルへのアクセスを制御します。CDA文を使用して、カレント・ディレクトリ・オブジェクトを特定および指定できます。使用するデータベース・ユーザー名で読取りおよび書込み可能なファイルがあるディレクトリ・オブジェクトへのアクセス権については、Oracle DBAに問い合せてください。

使用上の注意

ログ・ファイルを自動で閉じる場合

LOG file-nameを使用してディスク・ファイルへの記録を開始すると、その時点で開いていたすべてのログ記録ファイルを閉じます。この閉じる動作は、新しいファイルが実際には開いていない場合にも実行されます(LOG文に無効なfile-nameを指定した場合と同様です)。

例

例10-38 ログ・ファイルの保持

session.logというファイルにセッションを記録するには、次のような文を使用します。

LOG 'session.log'

MAINTAIN

MAINTAINコマンドは、ディメンションの値、コンポジットの値およびパーティション・テンプレート・オブジェクトの値を入力し、メンテナンスするコマンドです。

注意:
MAINTAIN文は、Maintainトリガーを持つサロゲート・ディメンションにも発行できます。この場合、Oracle OLAPでは、Maintainトリガー・プログラムのみが実行され、それ以外のアクションは行われません。詳細は、「トリガー・プログラム」を参照してください。Maintainトリガーのないサロゲート・ディメンションに対してMAINTAIN文を発行すると、エラーが返されます。

構文

MAINTAIN object {ADD|DELETE|RENAME|MOVE|MERGE} args

MAINTAINコマンドで使用できるキーワードは、オブジェクトごとに次のように異なります。

- MAINTAIN dimension {ADD|DELETE|RENAME|MOVE|MERGE} args
使用できるキーワードは、メンテナンスするディメンションの型によって、次のように異なります。

- 非連結ディメンションでは、ADD、DELETE、RENAME、MOVEまたはMERGEキーワードを使用して、非連結ディメンション値を追加、削除、名前の変更、移動またはマージできます。また、ADDキーワードを使用して、一時計算メンバーをディメンションに追加することもできます。

- 連結ディメンションで使用できるのは、連結ディメンション値を移動するMOVEキーワードのみです。

- MAINTAIN composite {ADD|DELETE|MERGE} args

- MAINTAIN partition-template {ADD|DELETE|MOVE} args

具体的な構文はキーワードによって異なります。したがって、MAINTAINコマンドの各キーワードについては、次のように個別に説明します。

MAINTAIN ADD

MAINTAIN DELETE

MAINTAIN MERGE

MAINTAIN MOVE

MAINTAIN RENAME

MAINTAINコマンド全般に関する情報は、このトピックの使用上の注意を参照してください。

使用上の注意

MAINTAINを実行した際のトリガー・プログラムの実行

TRIGGERコマンドを使用すると、MAINTAIN文の実行を、OLAP DMLプログラムを自動的に実行するイベントにすることができます。詳細は、「トリガー・プログラム」を参照してください。

ステータスの自動リセット

現行のステータスがALLでないディメンションまたはコンポジットをADD、DELETE、MERGEまたはMOVEキーワードでメンテナンスすると、MAINTAINコマンドによって、メンテナンスを実行する前にステータスが自動でALLにリセットされます。ただし、現行のステータスがALLでないディメンションをRENAMEキーワードでメンテナンスする場合には、ディメンションのステータスはMAINTAINコマンドによって変更されません。

メンテナンス権限

PERMIT MAINTAIN文によってディメンションのメンテナンス権限が拒否される場合は、ディメンションに対するメンテナンスは実行できません。ディメンションの読取り権限が制限されていると、そのディメンションのメンテナンス権限を指定しても、メンテナンス権限は常に暗黙的に拒否されます。(PERMITコマンドを参照してください。)

マルチライタ・モードのアナリティック・ワークスペースにおけるディメンションのメンテナンス

マルチライタ・モードでアタッチしたアナリティック・ワークスペース内のディメンションをメンテナンスする際は、次の点に注意してください。

- ディメンションのいずれかがすでに取得および変更された場合は、変数を更新できません。

- ディメンション値を追加してからディメンションを元に戻すと、そのディメンションによってディメンション化された変数の領域割当てが最適ではなくなることがあるためお薦めしません。

- 取得済変数がメンテナンス済の取得したディメンションによってディメンション化されている場合、そのディメンションが更新または解放されるまで変数を更新できません。

- メンテナンスのためにコンポジットを取得する必要はありません。コンポジットのディメンションには、Oracle OLAPによって自動で同時にディメンションのメンテナンスが実行されます。

マルチライタ・モードでアタッチしたアナリティック・ワークスペース内のディメンションをメンテナンスするには、まずACQUIRE文を使用してディメンションを取得する必要があります。

たとえば、ユーザーAとユーザーBが、actualsとbudgetの両方についてそれぞれwhat-if計算を実行する必要があるとします。what-if計算の実行後、ユーザーAはactualsを、ユーザーBはbudgetを変更する必要があります。最後に、ユーザーAとユーザーBはどちらも、新しいtimeディメンション値を追加し、その新しいディメンション値に対応するデータをactualsまたはbudgetに追加する必要があります。

ユーザーAが次のOLAP DML文を発行します。

AW ATTACH myworkspace MULTI
...make modifications
ACQUIRE actuals
...make more modifications
ACQUIRE time
MAINTAIN time ADD 'Y2002'
actuals (time 'Y2002', ...) = ...
UPDATE MULTI actuals, time
COMMIT
RELEASE actuals, time
AW DETACH myworkspace

ユーザーBが次のOLAP DML文を発行します。

AW ATTACH myworkspace MULTI
...make modifications
ACQUIRE budget
...make more modifications
ACQUIRE time--> failed
ACQUIRE RESYNC time WAIT
MAINTAIN time ADD 'Y2003'
budget (time 'Y2003', ...) = ...
UPDATE MULTI budget, time
COMMIT
RELEASE budget, time
AW DETACH myworkspace

MAINTAINとディメンション・サロゲート

ディメンション・サロゲートでは、MAINTAIN文を使用できません。MAINTAINは、ディメンションへの値の追加や、ディメンションからの値の削除でのみ使用できます。ただし、ディメンション値を追加または削除すると、Oracle OLAPは、自動でそのディメンションのサロゲートに位置を追加またはサロゲートから位置を削除します。ディメンションに位置を追加すると、そのディメンションのサロゲートの対応する位置にNA値が追加されます。

連結ディメンションのメンテナンス

連結ディメンションには、そのコンポーネントのディメンションの値が含まれます。連結ディメンションの値は、直接MAINTAIN文で追加、マージまたは削除されません。かわりに、連結のコンポーネントのディメンションに対し値を追加、マージまたは削除すると、連結ディメンションに値が自動で追加またはディメンションから値が削除されます。ただし、MAINTAINコマンドでMOVEキーワードを指定し、連結ディメンションの値の順序を変更することは可能です。

MAINTAIN ADD

MAINTAINコマンドでADDキーワードを使用すると、非連結ディメンション、コンポジットまたはパーティションに新しいTEXT値、ID値およびINTEGER値を追加したり、ディメンションに新しい一時計算メンバーを追加したりできます。

注意:
TEXT値、ID値およびINTEGER値に対するMAINTAIN ADD文は、Maintainトリガーを持つサロゲート・ディメンションにも発行できます。この場合、Oracle OLAPでは、Maintainトリガー・プログラムが各値に対して1回ずつ実行され、それ以外のアクションは行われません。詳細は、「トリガー・プログラム」を参照してください。Maintainトリガーのないサロゲート・ディメンションに対してMAINTAIN文を発行すると、エラーが返されます。

構文

ADDキーワードを使用するMAINTAINコマンドの構文は、メンテナンスするオブジェクトの型、および追加するメンバーが永続的か一時的かによって異なります。

そのため、MAINTAIN ADDについては、次のように個別に説明します。

- TEXT値、ID値およびINTEGER値に対するMAINTAIN ADD

- DAY値、WEEK値、MONTH値、QUARTER値およびYEAR値に対するMAINTAIN ADD

- MAINTAIN ADD SESSION

- MAINTAIN ADD TO PARTITION

TEXT値、ID値およびINTEGER値に対するMAINTAIN ADD

MAINTAINコマンドでADDキーワードを使用すると、非連結ディメンションまたはコンポジットに新しいTEXT値、ID値またはINTEGER値を追加できます。

注意:
MAINTAIN ADD文は、Maintainトリガーを持つサロゲート・ディメンションにも発行できます。この場合、Oracle OLAPでは、Maintainトリガー・プログラムがvaluelistの各値に対して1回ずつ実行され、それ以外のアクションは行われません。詳細は、「トリガー・プログラム」を参照してください。Maintainトリガーのないサロゲート・ディメンションに対してMAINTAIN文を発行すると、エラーが返されます。

構文

MAINTAIN composite|dimension ADD valuelist [FIRST|LAST|BEFORE position|AFTER position]

パラメータ

dimension

アタッチしたアナリティック・ワークスペースで定義されている非連結ディメンション。

composite

コンポジット。コンポジットが名前付きコンポジットの場合、アタッチしたアナリティック・ワークスペースで定義されている必要があります。コンポジットが名前のないコンポジットの場合は、アタッチしたアナリティック・ワークスペースでオブジェクトの定義に使用されている必要があります。名前のないコンポジットを参照するには、SPARSEキーワードを使用します(SPARSE <market product>など)。

ADD valuelist

ディメンションまたはコンポジットにvaluelistの値を追加することを指定します。

- この引数を使用してTEXT型またはID型のコンポジットまたはディメンションに値を追加する場合、valuelistはテキスト・リテラル、TEXT式、ID式のいずれかになります。複数行のテキスト式の場合は、各要素(行)は個別の値として処理されます。nullディメンション値(空の一重引用符)または空白のみの値は、後でその値を参照できないので、追加しないでください。

- dimensionがINTEGERの場合、valuelistは5や100などのINTEGERになります。

FIRST

LAST

ディメンション値を追加する論理位置を指定します。FIRSTは、新しい値を既存値の前に挿入することを示します。LASTは、新しい値を現行の値の後に追加することを示します。LASTがデフォルトです。INTEGERディメンションに一定量のINTEGER値を追加すると、それらのINTEGER値は(仕様に応じて)既存のINTEGER値の前または後に追加され、それら一連のすべてのINTEGER値が自動で数字順にソートされます。

指定した値は、文のキーワードの直前にある値のみではなく、キーワードFIRSTまたはLASTの前に指定したすべての値がその位置に配置されます。

BEFORE position

AFTER position

値を前または後に追加する基準の位置を指定します。positionには、既存のディメンション値、既存のディメンション値を値とする文字式、またはディメンション値の位置を表すINTEGER式を指定できます。INTEGERディメンションに一定量のINTEGER値を追加すると、それらのINTEGER値は指定したINTEGER位置の前または後に追加され、それら一連のすべてのINTEGER値が自動で数字順にソートされます。

指定した値は、文のキーワードの直前にある値のみではなく、キーワードBEFOREまたはAFTERの前に指定したすべての値がその位置に配置されます。

使用上の注意

MAINTAIN ADD BEFOREまたはAFTER positionを使用する場合のパフォーマンス

MAINTAIN ADD BEFORE文またはMAINTAIN MOVE AFTER文を使用する場合のコスト・パフォーマンスは、追加される値の数ではなく、ディメンション内の値の数によって異なります。したがって、これらの文を多く連ねて発行するかわりに、次のようにします。

1. 単純なMAINTAIN ADD文を使用して値を追加します。

2. ディメンション・ステータスのステータスを目的の値に設定します。

3. 単独のMAINTAIN MOVE dimension value文を発行して、追加した値を並べ替えます。

INTEGERディメンションへの値の追加

MAINTAINを使用してINTEGERディメンションの値を追加すると、INTEGER値の通常の順序(1、2、3...)になるように値の位置番号が変更されます。

結合ディメンションとコンポジット

結合ディメンションまたはコンポジットの各値は、そのディメンション・リストの各ディメンション(および存在する場合はコンポジット)からの値の組合せです。結合ディメンションまたはコンポジットに値を追加するには、各値の組合せを山カッコで囲んで指定します。指定した組合せの値は、結合ディメンションまたはコンポジットの定義にあるディメンションおよびコンポジットと同じ順序である必要があります。また、組合せの各ディメンション値は、対応するベース・ディメンションに値としてすでに存在している必要があります。ただし、組合せにコンポジット値が存在しない場合、Oracle OLAPによって、その値は適切なコンポジットに自動で追加されます。

例

例10-39 TEXTディメンションへの値の追加

次の文では、cityディメンションのディメンション値の最後にOmahaおよびSeattleが追加されます。

MAINTAIN city ADD 'Omaha' 'Seattle'

次の文では、cityリストの最初にAtlantaが追加され、Omahaの後にPeoriaが挿入されます。

MAINTAIN city ADD 'Atlanta' FIRST, 'Peoria' AFTER 'Omaha'

ここでは、TEXT変数textvarの値を、cityの5番目のディメンション値の前に挿入します。ディメンション値を大文字と小文字を区別する表記にしているため、値Columbusをtextvarに代入する際は、大文字と小文字を使用した表記とすることに注意してください。

textvar = 'Columbus'
MAINTAIN city ADD textvar BEFORE 5

例10-40 結合ディメンションへの値の追加

次の文は、結合ディメンションに値を追加する例です。

DEFINE proddist DIMENSION <product, district>
MAINTAIN proddist ADD <'Tents' 'Boston'> <'Footwear' 'Denver'>

ベース・ディメンションの値をテキスト変数に代入し、山カッコ内の変数の名前を使用することもできます。

prodname = 'Canoes'
distname = 'Seattle'
MAINTAIN proddist ADD <prodname, distname>

DAY値、WEEK値、MONTH値、QUARTER値およびYEAR値に対するMAINTAIN ADD

MAINTAINコマンドでADDキーワードを使用して、DAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンションに新しい値を追加できます。

構文

MAINTAIN dimension ADD {valuelist|{n PERIODS FIRST}|{n PERIODS LAST}}

パラメータ

dimension

アタッチしたアナリティック・ワークスペースで定義されている非連結ディメンション。

ADD valuelist

ディメンションにvaluelistの値を追加することを指定します。dimensionがDAY、WEEK、MONTH、QUARTER、YEAR型の場合、valuelistはテキスト定数、TEXT式、ID式、DATE式のいずれかになります。値がTEXTの場合、ディメンションのVNF(値名書式)で指定されている書式(ディメンションにVNFがない場合は、メンテナンスするディメンションの型に対するデフォルト書式)または日付値の有効な入力形式で指定します。値をTEXT式として指定する場合は、各要素または各行は個別の値として処理されます。

値がVNFの書式またはディメンションの型に対するデフォルト書式で指定されている場合、各値は追加する期間を明示的に示します。たとえば、monthディメンションのVNFが'<MTXT><YY>'だとします。この場合、値JAN99は1999年の1月を表します。

DAY、WEEK、MONTH、QUARTER、YEAR型のディメンションの値を日付として指定する際は、メンテナンスするディメンションの型に適した日付コンポーネントのみを指定する必要があります。DAYまたはWEEKディメンションでは、日、月および年の各コンポーネントを指定する必要があります。MONTHまたはQUARTERディメンションでは、月および年のみを指定します(1998年6月の場合は'JUN98'または'0698'など)。YEARディメンションでは、年のみを指定します(1998年の場合は'98'など)。日付の有効な入力形式の詳細は、DATEORDERオプションを参照してください。

完全な日付を表すDATE式またはTEXT値を指定してディメンション値を追加する場合は、追加する期間内にある任意の日付を指定できます。たとえば、1999年の1月を追加するには、'01JAN99'から'31JAN99までのどの日付でも指定できます。指定された値があいまいな場合、Oracle OLAPでは、DATEORDERオプションを使用して解決します。

値が指定されていないDAY、WEEK、MONTH、QUARTER、YEAR型のディメンションに値を追加する際は、ディメンションに追加する最初の値および最後の値のみを指定します。Oracle OLAPによって、その期間内を埋める適切な値が自動で代入されます。

DAY、WEEK、MONTH、QUARTER、YEAR型のディメンションにすでに値がある場合は、既存のリストの先頭または末尾にのみ値を追加できます。値を追加する際は、追加する最初の値または最後の値のみを指定します。Oracle OLAPによって、既存のリストと指定した値の間の期間を埋める適切な値が自動で代入されます。

n PERIODS FIRST

n PERIODS LAST

ディメンション値の先頭または末尾に追加する期間の数を指定します。

例

例10-41 QUARTER型のディメンションへの値の追加

この例では、qtrという名前の新しいQUARTERディメンションを定義し、1998年および1999年の四半期のディメンション値を追加します。最初と最後のディメンション値のみを追加します。その間の値はOracle OLAPによって自動で代入されます。最初と最後の四半期を追加するには、それらの四半期内の任意の日付を指定します。

DEFINE qtr DIMENSION QUARTER
MAINTAIN qtr ADD '01jan98' '31dec99'

MAINTAIN ADD SESSION

MAINTAINコマンドでADD SESSIONキーワードを使用すると、ディメンションに一時計算メンバーを追加し、指定したオブジェクトにそのメンバーを適用したり、指定したオブジェクトに事前定義されている計算メンバーを適用できます。あるセッションで作成された計算メンバーとその定義は、そのセッション後に削除されるため、他のセッションでは継続されません。

構文

MAINTAIN dimension ADD SESSION member_name [= calculation] -

[STEP DIMENSION (stepdim...)][apply-to]

ここで、

- calculationは次のいずれかです。

model-equation

AGGREGATION (dimension-members....)

- apply-toは、次のいずれかの句を使用して、カスタム集計を追加する際の基礎を指定します。

APPLY TO AGGMAP aggmaps

APPLY FOR VARIABLE variables

APPLY WITH RELATION relations

パラメータ

dimension

アタッチしたアナリティック・ワークスペースで定義されているディメンション。dimensionには、一意でない連結ディメンション、または一意および一意でない連結ディメンションのベース・ディメンション以外のすべての型のディメンションを指定できます。

ADD SESSION

ADD SESSIONは、一時計算メンバーのメンテナンスを示します。

member-name

一時計算メンバーの名前を指定します。

=

新しい計算メンバーを定義することを示します。

model-equation

カスタム・メンバー値を計算するための動的モデルとして使用する計算を指定するテキスト式。(モデル方程式の詳細は、SETコマンドを参照してください。)

AGGREGATION

指定したディメンション・メンバーを使用するカスタム集計として、一時計算メンバーを追加することを示します。この句は、dimensionでディメンション化した変数の集計仕様であるaggmapオブジェクトのRELATION文を変更します。したがって、AGGREGATION句を含むMAINTAIN ADD SESSION文には、APPLY WITH RELATION句も含まれている必要があります。

dimension-members

カスタム集計で使用する1つ以上のディメンション値を指定するテキスト式。リテラルで複数のディメンション・メンバーを指定する場合は、値をカンマで区切ります。

STEP DIMENSIONS

計算が時系列のファンクションであることを示します。

stepdim

時系列ファンクションの計算を行うディメンションを指定するテキスト式。リテラルで複数のディメンション名を指定する場合は、名前をカンマで区切ります。

APPLY TO AGGMAP

指定したaggmapオブジェクトで使用されるディメンションにのみ、一時計算メンバーを追加することを示します。

aggmaps

一時計算メンバーを追加する先の1つ以上のaggmapオブジェクトの名前を指定するテキスト式。リテラルで複数のaggmapオブジェクトを指定する場合は、名前をカンマで区切ります。一時計算メンバーは、指定したaggmapオブジェクトのそれぞれに追加されます。

APPLY FOR VARIABLE

指定したvariablesのデフォルトaggmapオブジェクトで使用されるディメンションにのみ、一時計算メンバーを追加することを示します。

variables

一時計算メンバーを追加する先の1つ以上の変数名を指定するテキスト式。リテラルで複数の変数名を指定する場合は、名前をカンマで区切ります。一時計算メンバーは、指定した変数のそれぞれのデフォルトaggmapオブジェクトに追加されます。

重要:
指定した変数にデフォルトのaggmapがない場合、この句を使用するとエラーが発生します。変数にデフォルトのaggmapを指定するには、AGGMAP SETまたは$AGGMAPを使用します。

APPLY WITH RELATION

指定したrelationのRELATION文を含む集計仕様で使用されるディメンションに、一時計算メンバーが追加されることを示します。

relation

AGGMAP文にRELATION文があるリレーションの名前を指定するテキスト式。

使用上の注意

一時計算メンバーについての情報の検索

MAINTAIN文で一時計算メンバーを追加した後、AGGMAPINFOを使用すると、追加した一時計算メンバー、メンバーの計算に使用される方程式、カスタム・メンバーを計算する方程式の右側で使用されるディメンション・メンバーをそれぞれ確認できます。

例

例10-42 集計値を使用した計算ディメンション・メンバーの作成

アナリティック・ワークスペースに、次の定義と永続値を持つletterというディメンションおよびmy_quantityという変数があるとします。

DEFINE letter DIMENSION TEXT
DEFINE my_quantity VARIABLE DECIMAL <letter>

LETTER                  MY_QUANTITY
-------------- ------------------------------
A                                       10.00
B                                      100.00

次の手順で、letterディメンションに一時ディメンション・メンバーを定義し、これらのメンバーのmy_quantityのデータを集計できます。

1. 実行する集計を決定し、必要な補助オブジェクトを定義および移入します。

1. letterディメンションに空の親子関係を作成します。

DEFINE letter.parentrel RELATION letter <letter>

LETTER                LETTER.PARENTREL
-------------- ------------------------------
A              NA
B              NA

2. letterディメンションと関連付けられている値を計算するために使用する簡単なモデルを定義します。

DEFINE my_model MODEL
MODEL
DIMENSION letter
END

3. letterディメンションと関連付けられているmy_quantity値を計算するために使用する簡単なaggmapを定義し、そのaggmapをコンパイルします。

DEFINE my_aggmap AGGMAP
AGGMAP
RELATION letter.parentrel PRECOMPUTE(NA)
MODEL my_model PRECOMPUTE(NA)
END

COMPILE my_aggmap

4. 変数を定義し、カスタム集計の定義を含めます。この新しい変数は、デフォルトのaggmapとしてmy_aggmapを持つことを除き、my_quantityと同一です。

DEFINE my_quantity_definition VARIABLE DECIMAL <letter>

CONSIDER my_quantity_definition
PROPERTY '$AGGMAP' 'my_aggmap'

REPORT my_quantity_definition

LETTER             MY_QUANTITY_DEFINITION
-------------- ------------------------------
A                                          NA
B                                          NA

2. letterディメンションに一時メンバーを追加し、それらのメンバーに対する変数値の計算方法を指定します。

MAINTAIN letter ADD SESSION 'C' = 'A' * 'B'
MAINTAIN letter ADD SESSION 'D' = AGGREGATION('A', 'B') -
APPLY TO AGGMAP my_aggmap
MAINTAIN letter ADD SESSION 'E' = 'C' + 'D' -
APPLY WITH RELATION letter.parentrel
MAINTAIN letter ADD SESSION 'F' = 10 * 'E' -
APPLY FOR VARIABLE my_quantity_definition

letterディメンションのレポートに、新しいディメンション・メンバーが表示されます。

LETTER
--------------
A
B
C
D
E
F

3. my_aggmapというaggmapオブジェクトを使用してmy_quantityを集計します。

REPORT AGGREGATE(my_quantity USING my_aggmap)

AGGREGATE(MY_QUANTITY USING
LETTER                   MY_AGGMAP)
-------------- ------------------------------
A                                       10.00
B                                      100.00
C                                    1,000.00
D                                      110.00
E                                    1,110.00
F                                   11,100.00

ここで、UPDATE文とCOMMIT文を発行して、アナリティック・ワークスペースを更新およびコミットするとします。次に、アナリティック・ワークスペースをデタッチし、セッションを終了します。

その後、新しいセッションを開始し、同じアナリティック・ワークスペースをアタッチします。アナリティック・ワークスペースの説明を確認すると、UPDATEを発行した時点でアナリティック・ワークスペースにあったオブジェクトがすべてそのまま維持されていることがわかります。

DEFINE LETTER DIMENSION TEXT

DEFINE LETTER.PARENTREL RELATION LETTER <LETTER>

DEFINE MY_QUANTITY VARIABLE DECIMAL <LETTER>

DEFINE MY_MODEL MODEL
MODEL
DIMENSION letter
END

DEFINE MY_AGGMAP AGGMAP
AGGMAP
RELATION letter.parentrel PRECOMPUTE(NA)
MODEL my_model PRECOMPUTE(NA)
END

DEFINE MY_QUANTITY_DEFINITION VARIABLE DECIMAL <LETTER>

しかし、letterディメンションおよびmy_quantity変数についてのレポートを見ると、前のセッションで追加した一時ディメンション・メンバーと、それらのメンバーと関連するmy_quantity変数の値は存在していません。

LETTER
--------------
A
B

REPORT letter.parentrel

LETTER                LETTER.PARENTREL
-------------- ------------------------------
A              NA
B              NA

REPORT my_quantity

LETTER                  MY_QUANTITY
-------------- ------------------------------
A                                       10.00
B                                      100.00

LETTER             MY_QUANTITY_DEFINITION
-------------- ------------------------------
A                                          NA
B                                          NA

REPORT AGGREGATE(my_quantity USING my_aggmap)

AGGREGATE(MY_QUANTITY USING
LETTER                   MY_AGGMAP)
-------------- ------------------------------
A                                       10.00
B                                      100.00

MAINTAIN ADD TO PARTITION

MAINTAIN ADD TO PARTITION文は、事前移入されたディメンション値またはコンポジット値を、事前定義されたパーティション・テンプレート・オブジェクトのパーティションに追加する文です。

ヒント:
パーティション変数がすでに移入されている場合は、MAINTAIN MOVE TO PARTITIONを使用してパーティション値をメンテナンスします。

構文

MAINTAIN partition-template ADD TO PARTITION partition valuelist

パラメータ

partition-template

事前定義されたパーティション・テンプレート・オブジェクトの名前を示すテキスト式。

ADD TO PARTITION

値をパーティションに追加することを指定します。

partition

partition-templateで指定したパーティション・テンプレートにある事前定義されたパーティションの名前を示すテキスト式。

valuelist

追加する値を指定するテキスト・リテラル、TEXT式またはID式。TEXT式の場合、各要素(行)は個別の値として処理されます。式の値は、入力したとおりに追加されます。

連結ディメンションの場合、連結ディメンションの値、もしくはコンポーネント・ディメンションの名前とそのディメンションの値または位置を指定できます。valueの値として、ディメンション・サロゲートの値を使用できます。

INTEGERディメンションのパーティション化はできないことに注意してください。

TO

値の範囲を示します。

例

パーティションへの値の追加の例は、例10-48「パーティション値の追加と削除」を参照してください。

MAINTAIN DELETE

MAINTAINコマンドでDELETEキーワードを使用すると、非連結ディメンションおよびコンポジットからメンバーを削除できます。または、変数をディメンション化するパーティション・テンプレートのパーティションに定義されているディメンション値またはコンポジット値を変更するために、事前にパーティション化した変数のデータをパーティションから削除します。

注意:
MAINTAIN DELETE文は、Maintainトリガーを持つサロゲート・ディメンションにも発行できます。この場合、Oracle OLAPでは、Maintainトリガー・プログラムのみが実行され、それ以外のアクションは行われません。詳細は、「トリガー・プログラム」を参照してください。Maintainトリガーのないサロゲート・ディメンションに対してMAINTAIN文を発行すると、エラーが返されます。

構文

MAINTAINコマンドのDELETEキーワードを使用してメンバーを削除する際の構文は、メンバーを削除するオブジェクトのタイプによって異なります。そのため、MAINTAIN DELETEについては、次のように個別に説明します。

- ディメンションのMAINTAIN DELETE

- コンポジットのMAINTAIN DELETE

- MAINTAIN DELETE FROM PARTITION

ディメンションのMAINTAIN DELETE

MAINTAINコマンドでDELETEキーワードを使用すると、非連結ディメンションからディメンション・メンバーを削除できます。

注意:
MAINTAIN DELETE文は、Maintainトリガーを持つサロゲート・ディメンションにも発行できます。この場合、Oracle OLAPでは、Maintainトリガー・プログラムのみが実行され、それ以外のアクションは行われません。詳細は、「トリガー・プログラム」を参照してください。Maintainトリガーのないサロゲート・ディメンションに対してMAINTAIN文を発行すると、エラーが返されます。

関連項目:
コンポジットのMAINTAIN DELETE

構文

MAINTAIN dimension DELETE limit-clause

パラメータ

dimension

値が削除されるアタッチしたアナリティック・ワークスペースで定義されている非連結ディメンション。

注意:
MAINTAIN DELETEコマンドのdimension引数として、ディメンション・サロゲートは使用できません。ただし、limit-clauseパラメータ内で値としてディメンション・サロゲートを使用することは可能です。

limit-clause

ディメンションから削除する値を指定します。

limit-clauseの構文は、各種LIMITコマンドにおけるlimit-clause引数の構文(つまり、LIMITコマンドの「TO」などのlimit-type引数の後の構文)と同じです。これらの引数の構文については、LIMITコマンド(値を使用)、LIMITコマンド(LEVELRELを使用)、LIMIT(親リレーションを使用)、LIMITコマンド(関連ディメンションを使用)、LIMITコマンド(NOCONVERTを使用)およびLIMITコマンド(POSLISTを使用)を参照してください。

使用上の注意

ディメンションからの一時計算メンバーの削除

MAINTAIN DELETE文を使用して一時計算メンバーを削除すると、Oracle OLAPによって次の処理が実行されます。

1. ディメンションからメンバーが削除されます。

2. 対応する計算を含むすべてのaggmapオブジェクトから計算が削除されます。

INTEGERディメンションの値の削除

MAINTAINを使用してINTEGERディメンションの値を削除すると、INTEGER値の通常の順序(1、2、3...)になるように値の位置番号が変更されます。

例

例10-43 値によるディメンション値の削除

次の文では、cityの値からOmahaおよびNewarkを削除します。

MAINTAIN city DELETE 'Omaha' 'Newark'

例10-44 最初の5つのディメンション値の削除

この例では、INTEGER変数intvarを使用して、ディメンションcityから最初の5都市を削除します。

intvar = 5
MAINTAIN city DELETE FIRST intvar

例10-45 ブール式に基づくディメンション値の削除

ここでは、cityから、人口が75,000人より少ないすべての都市を削除します。各都市の人口のデータが含まれている、変数population.cを使用します。

MAINTAIN city DELETE population.c LT 75000

例10-46 サロゲートを使用して値を指定したディメンション値の削除

prodidがNUMBERディメンションで、prodtypeがprodidのTEXTディメンション・サロゲートであるとします。また、prodidの値が、17、40および56であるとします。prodtypeの値は、Two-Person Tent、Three-person TentおよびFour-person Tentです。次の文で、prodidおよびそのサロゲートから値を削除します。

MAINTAIN prodid DELETE prodid(prodtype 'Three-Person Tent')

例10-47 関連するMONTH値の削除

この例では、関連ディメンションquarterを使用して、ディメンションmonthの値を削除します。現行のステータス内にある月で、quarterの値に関連するすべての月を削除します。

LIMIT quarter TO FIRST 1

MAINTAIN month DELETE quarter

コンポジットのMAINTAIN DELETE

MAINTAINコマンドでDELETEキーワードを使用すると、コンポジットからディメンション・メンバーを削除できます。

関連項目:
ディメンションのMAINTAIN DELETE

構文

MAINTAIN composite DELETE comp-arg

ここで、comp-argは次のいずれか1つです。

valuelist

ALL

base-dim [valuelist]

boolean-expression

{TOP | BOTTOM} n BASEDON exp

{TOP | BOTTOM} n-percent PERCENTOF expression

LONGLIST

パラメータ

composite

値を削除するコンポジット。コンポジットが名前付きコンポジットの場合、アタッチしたアナリティック・ワークスペースで定義されている必要があります。コンポジットが名前のないコンポジットの場合は、アタッチしたアナリティック・ワークスペースでオブジェクトの定義に使用されている必要があります。

名前のないコンポジットを参照するには、SPARSEキーワードを使用します(SPARSE <market product>など)。

valuelist

コンポジットから削除する1つ以上の値を指定します。valuelistは、テキスト定数またはテキスト式です。

ALL

すべてのコンポジット値を削除しますが、コンポジット自体の定義は削除しません。

base-dim [valuelist]

リストしたコンポジットのベース・ディメンション値を含む値を削除します。引数valuelistには、単一の値、値のリスト、または値の範囲(TOを使用して値範囲を指定)を指定できます。値の範囲の指定には、位置番号は使用できません。valuelistを指定しない場合、Oracle OLAPでは、現行のステータスにあるbase-dim値を含むすべての値が削除されます。

boolean-expression

ブール式がTRUEのすべてのコンポジット値を削除します。boolean-expressionは、値を削除するdimensionまたはcompositeによってディメンション化されている必要があります。また、他にもディメンションがある場合は、それらのステータスがそれぞれ1つの値に制限されている必要があります。

TOP n BASEDON exp

BOTTOM n BASEDON exp

expの最上位(TOP)または最下位(BOTTOM)に基づいて、上位または下位n個の値を削除します。式は、値を削除するcompositeによってディメンション化されている必要があります。また、他にもディメンションがある場合は、それらのステータスがそれぞれ1つの値に制限されている必要があります。

BOTTOM n-percent PERCENTOF expression

TOP n-percent PERCENTOF expression

ある基準に基づいて最上位または最下位の値を検索し、値を削除します。この構成では、値は式に対する占有率に基づいてソートされ、削除されます。

LONGLIST

削除する対象の個別の値の長いリスト(2,000値まで)を示します。値が300より少ない場合、LONGLISTは必要ありません。

MAINTAIN DELETE FROM PARTITION

MAINTAIN DELETE FROM PARTITIONコマンドは、変数をディメンション化するパーティション・テンプレートのパーティションに定義されているディメンション値またはコンポジット値を変更するために、事前にパーティション化した変数のデータをパーティションから削除するコマンドです。

ヒント:
パーティション変数がすでに移入されている場合は、MAINTAIN MOVE TO PARTITIONを使用してパーティション値をメンテナンスします。

構文

MAINTAIN partition-template DELETE FROM PARTITION partition { dim-arg| comp-arg}

パラメータ

partition-template

事前定義されたパーティション・テンプレート・オブジェクトの名前を示すテキスト式。

partition

partition-templateで指定したパーティション・テンプレートにある事前定義されたパーティションの名前を示すテキスト式。

DELETE FROM PARTITION

パーティションおよびそのパーティションを含むパーティション・テンプレートを使用してディメンション化したパーティション変数から削除する値を指定します。

dim-args

パーティション変数の値を削除して、パーティションの値を再定義する際に使用するディメンション値を指定します。ディメンションのMAINTAIN DELETEで使用するdim-arg引数に指定する構成を使用できます。

comp--args

パーティション変数の値を削除して、パーティションの値を再定義する際に使用するコンポジット値を指定します。コンポジットのMAINTAIN DELETEで使用するcomp-arg引数に指定する構成を使用できます。

例

例10-48 パーティション値の追加と削除

アナリティック・ワークスペースに次のオブジェクトが定義されているとします。

DEFINE time DIMENSION TEXT
DEFINE time_parentrel RELATION time <time>
DEFINE product DIMENSION TEXT
DEFINE partition_sales_by_year PARTITION TEMPLATE <time product> -
PARTITION BY LIST (time) -
(PARTITION time_2004 VALUES ('2004', 'Dec2004', 'Jan2004', '31Dec2004', -
'01Dec2004', '31Jan2004', '01Jan2004') <TIME PRODUCT> -
PARTITION time_2003 VALUES ('2003', 'Dec2003', 'Jan2003', '31Dec2003', -
'01Dec2003', '31Jan2003', '01Jan2003') <TIME PRODUCT> -
PARTITION time_2002 VALUES ('2002', 'Dec2002', 'Jan2002', '31Dec2002', -
'01Dec2002', '31Jan2002', '01Jan2002') <TIME PRODUCT>)

sales値がある年のすべての時刻値でディメンションされている値をパーティション内に含めるのではなく、各日付値およびサマリーの時刻値(月および年)ごとのパーティションが必要だとします。この新しいパーティション・スキーマが反映されるようにpartition_sales_by_yearを変更するには、次の文を発行します。

"Create the new partition
CHGDFN partition_sales_by_year DEFINE -
(PARTITION partition_month_years VALUES () <time product>)
"Delete the values for months and years from the partitions for years
MAINTAIN partition_sales_by_year DELETE FROM PARTITION time_2004 '2004'-
'Dec2004' 'Jan2004'
MAINTAIN partition_sales_by_year DELETE FROM PARTITION time_2003 '2003'-
'Dec2003''Jan2003'
MAINTAIN partition_sales_by_year DELETE FROM PARTITION time_2002 '2002'-
'Dec2002' 'Jan2002'
"Add the month and year values to the new partition for summary values
MAINTAIN partition_sales_by_year ADD TO PARTITION partition_month_years '2004'-
'Dec2004' 'Jan2004' '2003' 'Dec2003''Jan2003' '2002' 'Dec2002' 'Jan2002'

これによって、partition_sales_by_yearパーティション・テンプレート・オブジェクトの定義は次のようになります。

DEFINE PARTITION_SALES_BY_YEAR PARTITION TEMPLATE <TIME PRODUCT> -
PARTITION BY LIST (TIME) -
(PARTITION TIME_2004 VALUES ('31Dec2004', '01Dec2004', '31Jan2004', -
'01Jan2004') <TIME PRODUCT> -
PARTITION TIME_2003 VALUES ('31Dec2003', '01Dec2003', '31Jan2003', -
'01Jan2003') <TIME PRODUCT> -
PARTITION TIME_2002 VALUES ('31Dec2002', '01Dec2002', '31Jan2002', -
'01Jan2002') <TIME PRODUCT> -
PARTITION PARTITION_MONTH_YEARS VALUES ('2004', 'Dec2004', 'Jan2004', -
'2003', 'Dec2003', 'Jan2003', '2002', 'Dec2002', 'Jan2002')-
<TIME PRODUCT>)

MAINTAIN MERGE

MAINTAINコマンドでMERGEキーワードを使用すると、別のリスト上のすべてディメンション値またはコンポジット値を、非連結ディメンションまたはコンポジットに簡単かつ確実にまとめることができます。MAINTAINコマンドでMERGEキーワードを使用すると、自動でリストから新しい値のみが追加され、重複する値は無視されます。大量のディメンション値を入力する際、この方法で入力すると、時間を大幅に節約できます。

MERGEは、DAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンションを含む、あらゆるデータ型のディメンションで使用できます。ただし、Oracle OLAPでは、DAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンションの値の追加はADDキーワードでも簡単にできるため、これらのディメンションでは、MERGEキーワードはTEXTまたはID型のディメンションでの場合ほど有用でない場合もあります。

ディメンションに値をマージすると同時に、そのディメンションに関連するリレーションを更新することもできます。

注意:
MAINTAIN MERGE文は、Maintainトリガーを持つサロゲート・ディメンションにも発行できます。この場合、Oracle OLAPでは、Maintainトリガー・プログラムがexpの各値に対して1回ずつ実行され、それ以外のアクションは行われません。詳細は、「トリガー・プログラム」を参照してください。Maintainトリガーのないサロゲート・ディメンションに対してMAINTAIN文を発行すると、エラーが返されます。

構文

MAINTAIN dimension|composite MERGE exp [RELATE relation]

dimension

値を入力または変更するアタッチしたアナリティック・ワークスペースで定義されている非連結ディメンション。

composite

値を追加、削除またはマージするコンポジット。コンポジットが名前付きコンポジットの場合、アタッチしたアナリティック・ワークスペースで定義されている必要があります。コンポジットが名前のないコンポジットの場合は、アタッチしたアナリティック・ワークスペースでオブジェクトの定義に使用されている必要があります。名前のないコンポジットを参照するには、SPARSEキーワードを使用します(SPARSE <market product>など)。

exp

dimensionとマージする値の式を指定しますが、たとえば、ディメンション値を含むディメンション化されたテキスト変数の名前や、ディメンション値の複数行のリストを値とする単一セルのテキスト変数の名前などです。MAINTAIN MERGEでは、expのNAは無視されます。dimensionがINTEGERディメンションの場合は、expにはディメンションに必要な値の数を指定します。実際の合計数がそれより小さいと、MAINTAIN MERGEによって、指定した合計に達するまで値が追加されます。たとえば、INTEGERディメンションに位置が10ある場合、MERGE 5では操作は何も行われませんが、MERGE 15では値が5つ追加されます。

RELATE relation

expから新しい値をdimensionにマージする際に更新するリレーションを指定します。expのディメンションのうち1つ以上のディメンションが、relationの定義で定義されている必要があります。expが単一セル値の場合は、RELATE句は使用できません。

例

例10-49 コンポジットでのMERGEキーワードの使用

productディメンションの最初の3つの値とdistrictディメンションの最初の5つの値のすべての組合せで構成されるコンポジットを定義するとします。次の文を使用して、15個の値すべてを効率よくまとめることができます。

DEFINE comp_proddist COMPOSITE <product district>
LIMIT product TO FIRST 3
LIMIT district TO FIRST 5
MAINTAIN comp_proddist MERGE <product district>

この方法は、結合ディメンションでも利用できます。

MAINTAIN MOVE

MOVEキーワードを使用したMAINTAINコマンドの結果は、操作するオブジェクトによって異なります。

- ディメンションをメンテナンスする場合、MAINTAIN MOVEによって、非連結ディメンションまたはTEXT型、ID型、INTEGER型のディメンションの1つ以上の値の位置が変更されるか、事前移入したディメンション値またはコンポジット値がパーティションに追加されます。

注意:
ディメンション値のMAINTAIN MOVE文は、Maintainトリガーを持つサロゲート・ディメンションにも発行できます。この場合、Oracle OLAPでは、Maintainトリガー・プログラムのみが実行され、それ以外のアクションは行われません。詳細は、「トリガー・プログラム」を参照してください。Maintainトリガーのないサロゲート・ディメンションに対してMAINTAIN文を発行すると、エラーが返されます。

- パーティションをメンテナンスする場合は、MAINTAIN MOVEによって、変数をディメンション化するパーティション・テンプレートのパーティションに定義されているディメンション値またはコンポジット値を変更するために、事前にパーティション化した変数のデータがあるパーティションから別のパーティションに移動されます。

構文

MOVEキーワードを使用するMAINTAINコマンドの構文は、メンテナンスするオブジェクトのタイプによって異なります。

そのため、MAINTAIN MOVEについては、次のように個別に説明します。

- ディメンション値のMAINTAIN MOVE

- MAINTAIN MOVE TO PARTITION

ディメンション値のMAINTAIN MOVE

単純なMAINTAIN MOVE文で、非連結ディメンションまたはTEXT型、ID型、INTEGER型のディメンションの1つ以上の値の位置を変更できます。MAINTAINコマンドのMOVEキーワードは、コンポジットまたはDAY、WEEK、MONTH、QUARTER、YEAR型のディメンションでは使用できません。

注意:
MAINTAIN MOVE文は、Maintainトリガーを持つサロゲート・ディメンションにも発行できます。この場合、Oracle OLAPでは、Maintainトリガー・プログラムのみが実行され、それ以外のアクションは行われません。詳細は、「トリガー・プログラム」を参照してください。Maintainトリガーのないサロゲート・ディメンションに対してMAINTAIN文を発行すると、エラーが返されます。

構文

MAINTAIN dimension MOVE limit-clause

パラメータ

dimension

値を入力または変更するアタッチしたアナリティック・ワークスペースで定義されている非連結ディメンション。TEXT型、ID型またはINTEGER型のディメンションを指定する必要があります。DAY、WEEK、MONTH、QUARTER、YEAR型のディメンションは指定できません。

limit-clause

移動する値を指定します。

limit-clauseの構文は、各種LIMITコマンドにおけるlimit-clause引数の構文(つまり、LIMITコマンドの「TO」などのlimit-type引数の後の構文)と同じです。これらの引数の構文については、LIMITコマンド(値を使用)、LIMITコマンド(LEVELRELを使用)、LIMIT(親リレーションを使用)、LIMITコマンド(関連ディメンションを使用)、LIMITコマンド(NOCONVERTを使用)およびLIMITコマンド(POSLISTを使用)を参照してください。

使用上の注意

MAINTAIN MOVEのパフォーマンスに影響を与える要因

MAINTAIN MOVEコマンドを発行する場合のコスト・パフォーマンスは、移動される値の数ではなく、ディメンションの長さによって異なります。したがって、大きなディメンション内の値を移動する場合は、複数のMAINTAIN MOVE文を連ねて発行するかわりに、ディメンション・ステータスを目的の値に設定してから単独のMAINTAIN MOVEコマンドを発行してください。

ディメンション内の値の並べなおしまたはソート

MAINTAIN MOVE文を使用してディメンションの値を並べなおしたりソートしたりする場合、ステータスにあるディメンションの値すべてを使用するように指定するには、VALUESコマンドではなく、LIMIT(値を使用)コマンドのlimit-clause引数のSTATUSキーワードを使用します。

例

例10-50 特定の位置へのディメンション値の移動

次の文によって、都市Houstonの位置が5番目の値の後に移動されます。

MAINTAIN city MOVE 'Houston' AFTER 5

例10-51 ステータス・リストの末尾へのディメンション値の移動

この例では、TEXT変数textvarを使用してSeattleを都市のリストの最後に移動します。

textvar = 'Seattle'
MAINTAIN city MOVE textvar LAST

例10-52 連結ディメンションの値の移動

次の文では、reg.dist.ccdimという連結ディメンションの値<district: 'Denver'>を、連結ディメンション値<region: 'West'>の後に移動します。

MAINTAIN reg.dist.ccdim MOVE <district: 'Denver'> AFTER <region: 'West'>

次の文では、連結ディメンション値<district: 'Denver'>を、コンポーネントのdistrictディメンションの最初の値に対応する位置の後に移動します。districtのステータスにある最初の値がAtlantaの場合、<district: 'Denver'>は、連結ディメンションの値<district: 'Atlanta'>の後に移動されます。

MAINTAIN reg.dist.ccdim MOVE <district: 'Denver'> AFTER <district: 1>

次の文では、連結ディメンション値<district: 'Dallas'>を連結ディメンションの3番目の値の後に移動します。

MAINTAIN reg.dist.ccdim MOVE <district: 'Dallas'> AFTER 3

MAINTAIN MOVE TO PARTITION

MAINTAIN MOVE TO PARTITION文は、追加機能と移動機能の両方を併せ持ちます。MAINTAIN MOVE TO PARTITION文を使用すると、次のことを実行できます。

- MAINTAIN ADD TO PARTITIONと同様に、事前移入したディメンション値またはコンポジット値をパーティションに追加します。

- 変数をディメンション化するパーティション・テンプレートのパーティションに対して定義されたディメンション値またはコンポジット値を変更し、同時に、それらのディメンションおよびコンポジットによってディメンション化されている事前にパーティション化した変数のデータを、あるパーティションから別のパーティションへ移動します。

構文

MAINTAIN partition-template MOVE TO PARTITION partition value [TO value]

パラメータ

partition-template

事前定義されたパーティション・テンプレート・オブジェクトの名前を示すテキスト式。

MOVE TO PARTITION

パーティションに追加される値、またはあるパーティションから別のパーティションに移動する値を指定します。

partition

partition-templateで指定したパーティション・テンプレートにある事前定義されたパーティションの名前を示すテキスト式。

value

事前移入したディメンションまたはコンポジットの1つ以上の値を指定します。これらの値には、次のものを指定できます。

- リテラル値

- ディメンション値を値とする式

- NUMBERディメンション以外のディメンションの場合、ディメンション値の位置を表す値のINTEGER式

- 値セット、またはLIMITファンクション

連結ディメンションの場合、連結ディメンションの値、もしくはコンポーネント・ディメンションの名前とそのディメンションの値または位置を指定できます。valueの値として、ディメンション・サロゲートの値を使用できます。

TO

値の範囲を示します。

例

例10-53 値セットを使用したパーティションの値の指定

各パーティションに実際のディメンション値を指定しない、次のような定義を使用して、パーティション・テンプレート・オブジェクトを定義したとします。

DEFINE PARTITION_SALES_BY_YEAR PARTITION TEMPLATE <TIME PRODUCT> -
PARTITION BY LIST (TIME) -
(PARTITION TIME_2004 VALUES () <TIME PRODUCT> -
PARTITION TIME_2003 VALUES () <TIME PRODUCT> -
PARTITION TIME_2002 VALUES () <TIME PRODUCT>)

値セットを使用して各パーティションの値を指定するには、次の手順に従います。

1. 各年の値の値セットを定義します。

DEFINE vs_2004 VALUESET time
LIMIT vs_2004 to '01Dec2004' '31Dec2004' '01Jan2004''31Jan2004' -
'Jan2004' 'Dec2004' '2004'
DEFINE vs_2003 VALUESET time
LIMIT vs_2003 to '01Dec2003' '31Dec2003' '01Jan2003''31Jan2003' -
'Jan2003' 'Dec2003' '2003'
DEFINE vs_2002 VALUESET time
LIMIT vs_2002 to '01Dec2002' '31Dec2002' '01Jan2002''31Jan2002' -
'Jan2002' 'Dec2002' '2002'

2. MAINTAIN MOVE文を使用して、パーティション・テンプレートのパーティションの値を指定します。

MAINTAIN partition_sales_by_year MOVE TO PARTITION time_2004 vs_2004
MAINTAIN partition_sales_by_year MOVE TO PARTITION time_2003 vs_2003
MAINTAIN partition_sales_by_year MOVE TO PARTITION time_2002 vs_2002

DESCRIBE文を発行してpartition_sales_by_yearパーティション・テンプレートの説明を見ると、各パーティション定義に適切なtimeの値が含まれていることがわかります。

DEFINE PARTITION_SALES_BY_YEAR PARTITION TEMPLATE <TIME PRODUCT> -
PARTITION BY LIST (TIME) -
(PARTITION TIME_2004 VALUES -
('2004','Dec2004','Jan2004', 31Dec2004',01Dec2004','31Jan2004','01Jan2004')-
PARTITION TIME_2003 VALUES -
('2003','Dec2003','Jan2003', 31Dec2003',01Dec2003','31Jan2003','01Jan2003')-
PARTITION TIME_2002 VALUES -
('2002','Dec2002','Jan2002', 31Dec2002',01Dec2002','31Jan2002','01Jan2002'))

MAINTAIN RENAME

MAINTAINコマンドでRENAMEキーワードを使用すると、1つ以上のディメンション値のスペルを変更できます。RENAMEキーワードは、コンポジットまたはINTEGER、DAY、WEEK、MONTH、QUARTER、YEAR型のディメンションでは使用できません。

注意:
MAINTAIN RENAME文は、Maintainトリガーを持つサロゲート・ディメンションにも発行できます。この場合、Oracle OLAPでは、Maintainトリガー・プログラムのみが実行され、それ以外のアクションは行われません。詳細は、「トリガー・プログラム」を参照してください。Maintainトリガーのないサロゲート・ディメンションに対してMAINTAIN文を発行すると、エラーが返されます。

構文

MAINTAIN dimension RENAME {value new-value}...

パラメータ

dimension

値の名前の変更対象になるアタッチしたアナリティック・ワークスペースにすでに定義されているTEXT型またはID型の非連結ディメンション。INTEGER、DAY、WEEK、MONTH、QUARTER、YEAR型のディメンションは指定できません。

value

名前を変更する既存のディメンション値を指定します。ディメンション値、ディメンション値を値とする文字式、またはディメンション値の位置を表すINTEGER式を指定できます。

new-value

ディメンション値の新しいスペルを示すテキスト定数、TEXT式またはID式。

例

例10-54 TEXTディメンションの値の名前変更

次の文では、都市ChicおよびBostのスペルをChicagoおよびBostonに変更します。

MAINTAIN city RENAME 'Chic' 'Chicago' 'Bost' 'Boston'

この例では、TEXT変数textvarを使用して、2番目の都市をAtlantaに変更します。

textvar = 'Atlanta'
MAINTAIN city RENAME 2 textvar

MODEL

MODELコマンドは、新規または既存のモデル・オブジェクトにまったく新しい仕様を入力するコマンドです。モデルに既存の仕様がある場合、その仕様は上書きされます。MODELを使用して、モデル・オブジェクトにモデル仕様を割り当てるには、定義は最新のもの、または現行のセッション中に検討されたものにする必要があります。そうでない場合は、最初にCONSIDER文を使用し、現行の定義にする必要があります。

MODEL文の代替文はEDIT MODEL文であり、OLAP Worksheet内でのみ使用できます。EDIT MODEL文を実行すると、modelオブジェクトの仕様を追加、削除または変更できる編集ウィンドウが開きます。

モデル・オブジェクトへの仕様の追加は、データをモデリングする際の一処理です。モデルの詳細は、「OLAP DMLモデル・オブジェクト」を参照してください。

構文

MODEL specification

パラメータ

specification

次のOLAP DML文を1つ以上含む複数行のテキスト式。

SET(=)コマンド

DIMENSION(モデル内)文

INCLUDE文

モデルの最大行数は、4,000行です。各文は、複数行のテキスト式で構成されています。コマンドライン・レベルでALLOCMAP文をコード化する際は、改行デリミタ(\n)で文を区切るか、JOINLINESを使用します。

モデルの仕様設計の詳細は、「モデルの仕様」を参照してください。

使用上の注意

モデルの仕様

モデルの仕様は、次のOLAP DML文で構成されます。

1. 次のいずれかです。

- モデルに含める別のモデルの名前を指定するINCLUDE文(1文のみ)。詳細は、「モデルのネスト」を参照してください。

- 「モデルにおけるDIMENSION文作成のガイドライン」に従ってコーディングした1つ以上のDIMENSION(モデル内)文。

注意:
モデルにINCLUDE文が含まれる場合、DIMENSION文を含めることはできません。ただし、INCLUDE文で参照されているモデルまたは階層のルート・モデルには、親モデルで必要なDIMENSION文が含まれている必要があります。

2. 1つ以上のSETコマンドまたは「モデルでの方程式のルール」に従って記述した方程式。

関連項目:
Oracle OLAPによるモデルの方程式の処理方法については、「ディメンション・ステータスおよびモデル方程式」を参照してください。

3. モデルの仕様の終わりを示す最後のEND文。(OLAP Worksheetの編集ウィンドウで仕様をコーディングする場合は不要です。)

モデルの最大行数は、32,000行です。

集計仕様におけるMODEL文

aggmapで、特別なMODEL文を使用して、事前定義したモデルを実行できます。(詳細は、AGGMAPコマンドのMODEL(集計内)文を参照してください。)

変数のデータの計算方法

モデル・オブジェクトおよびaggmapオブジェクトは、どちらもディメンション・メンバー間の関係に基づいて変数のデータ値を計算します。ディメンション・メンバー間に親子関係が存在し(つまり、ディメンションに階層構造があり)、すべての集計値を同じ方法で計算できる場合は、集計仕様でRELATION文を使用して値を計算できます。しかし、ディメンションが階層ではなく、値の計算に異なる方程式を必要とする場合は、モデルを定義する必要があります。MODEL(集計内)を使用して集計仕様でモデルを実行するか、「モデルの実行」に示されている構文を使用してコマンドラインでモデルを実行できます。

モデルの仕様の削除

モデルの定義を削除せずに、モデルの仕様を削除できます。CONSIDER文で、モデルを現行の定義として指定します。その後、MODEL文を発行し、モデルの仕様にENDを入力します。

例

例10-55 プログラムに指定されたモデル

次の例では、myprogというプログラムに単純なモデルを作成(または上書き)します。プログラムの最初の行で、モデルを定義または現行の定義として指定します。2番目の行には、モデルの行を指定するMODEL文が含まれています。

このモデルは、予算の明細項目を計算します。モデル方程式は、lineディメンションを基礎としています。

DEFINE myprog PROGRAM
PROGRAM
IF NOT EXISTS('myModel')
THEN DEFINE myModel
ELSE CONSIDER myModel
MODEL JOINLINES(-
'DIMENSION line month' -
'Opr.Income = Gross.Margin - Marketing' -
'Gross.Margin = Revenue - Cogs' -
'Revenue = LAG(Revenue, 1, month) * 1.02' -
'Cogs = LAG(Cogs, 1, MONTH) * 1.01' -
'Marketing = LAG(Opr.Income, 1, month) * 0.20' -
'END')
END

例10-56 入力ファイルを基にしたモデル

この例は、前の例と同じ単純なモデルのテキストを示すものですが、ここでは、モデルはbudget.txtというASCIIディスク・ファイルに格納されています。

DEFINE income.budget MODEL
MODEL
DIMENSION line month
Opr.Income = Gross.Margin - Marketing
Gross.Margin = Revenue - Cogs
Revenue = LAG(Revenue, 1, month) * 1.02
Cogs = LAG(Cogs, 1, month) * 1.01
Marketing = LAG(Opr.Income, 1, month) * 0.20
END

income.budgetモデルをアナリティック・ワークスペースに含めるには、次の文を実行します。このとき、myinpfilesはディレクトリ・オブジェクトです。

INFILE 'myinpfiles/budget.txt'

例10-57 モデルの作成

損益計算書の明細項目を計算するincome.calcというモデルを定義するとします。

define income.calc model
ld Calculate line items in income statement

モデルを定義した後、MODEL文またはOLAP Worksheetエディタを使用して、モデルの仕様を入力します。モデルの仕様には、DIMENSIONコマンド、代入文およびコメントを含めることができます。すべてのDIMENSIONコマンドは、最初の方程式の前に配置する必要があります。この例では、次のモデル内に示されている行を指定します。

DEFINE INCOME.CALC MODEL
LD Calculate line items in income statement
MODEL
DIMENSION line
net.income = opr.income - taxes
opr.income = gross.margin - (marketing + selling + r.d)
gross.margin = revenue - cogs
END

モデルに方程式を記述する際は、任意の順序で配置できます。COMPILE文を発行するかモデルを実行することによりモデルをコンパイルする時点で、モデル方程式の解決順序が決定されます。1つの方程式の計算結果が別の方程式への入力データとして使用される場合、方程式は要求される順序で解決されます。

income.calcモデルを実行して、actualをソリューション変数として使用するには、次の文を実行します。

income.calc actual

ソリューション変数にモデル方程式が基礎とするディメンション以外のディメンションがある場合は、それらの各ディメンションの現行のステータス・リストに対して自動でループ処理が実行されます。たとえば、actualは、month、divisionおよびlineによってディメンション化されているとします。divisionがALLに制限され、monthがOCT96からDEC96までに制限されている場合、各部門のステータスにある3か月についてincome.calcモデルが解決されます。

例10-58 シナリオ・モデルの作成

たとえば、各部門の楽観的な収入額、悲観的な収入額および最良予測の収入額に基づいて収益額を計算するとします。次の例で、このシナリオ・モデルを作成する手順を説明します。

シナリオ・ディメンションscenarioをコールして、計算するシナリオの値を指定します。

次のコマンドで、scenarioに値optimistic、pessimisticおよびbestguessを指定します。

DEFINE scenario DIMENSION TEXT
LD Names of scenarios
MAINTAIN scenario ADD optimistic pessimistic bestguess

次のコマンドで、scenarioディメンションとは別に、他の3つのディメンション(month、lineおよびdivision)でディメンション化されるplanという変数を作成します。

DEFINE plan DECIMAL <month line division scenario>
LD Scenarios for financials

たとえば、収入や売上原価などの入力データをplan変数に入力する必要があるとします。

最良予測のデータの場合、budget変数のデータを使用できます。lineディメンションを入力明細項目に制限し、budgetデータをplan変数にコピーします。

LIMIT scenario TO 'BESTGUESS'
LIMIT line TO 'REVENUE' 'COGS' 'MARKETING' 'SELLING' 'R.D'
plan = budget

楽観的なデータと悲観的なデータは、最良予測のデータに基づいて設定する場合があります。たとえば、楽観的なデータを最良予測のデータより15%高く設定し、悲観的なデータを最良予測のデータより12%低く設定するなどです。この場合、lineを入力明細項目に制限したまま、次のコマンドを実行します。

plan(scenario 'OPTIMISTIC') = 1.15 * plan(scenario 'BESTGUESS')
plan(scenario 'PESSIMISTIC') = .88 * plan(scenario 'BESTGUESS')

最後に、入力データに基づいて結果を計算するモデルを記述してシナリオ・モデルを作成します。モデルには、この章の前述の項で示したbudget.calcモデルの計算と非常に似ている計算が含まれる可能性があります。

各シナリオには、同じ方程式を使用することも、異なる方程式を使用することもできます。たとえば、売上原価を計算する場合、各シナリオの計算で異なる定数要素を使用するとします。各シナリオで異なる定数要素を使用するには、scenarioでディメンション化した変数を定義し、変数に適切な値を指定します。変数の名前がcogsvalであるとすると、モデルにcogs明細項目を計算するための次の方程式を含めることができます。

cogs = cogsval * revenue

scenarioでディメンション化した変数を使用することで、シナリオ・モデルの柔軟性を大幅に向上できます。

同様に、各部門ごとに異なる定数要素を使用することもあります。この場合、divisionでディメンション化した変数を定義し、各ディメンションの値を保持できます。たとえば、部門によって人件費が異なる場合、cogsvalをdivisionとscenarioでディメンション化します。

モデルを実行する際、ソリューション変数としてplanを指定します。たとえば、scenario.calcというモデルの場合、次の文でモデルを解決します。

scenario.calc plan

planの各ディメンションの現行のステータス・リストに対して自動でループ処理が実行されます。したがって、scenario.calcモデルの実行時にscenarioディメンションがALLに制限されている場合、optimistic、pessimistic、bestguessの3つのシナリオすべてに対してモデルが解決されます。

DIMENSION(モデル内)

モデルの先頭のDIMENSION文は、モデルがデータを代入する1つ以上のディメンションの名前、またはディメンションベースの方程式で参照する1つ以上のディメンションの名前を指定します。ディメンションベースの方程式は、1つ以上のディメンション値によって表されるターゲットに計算の結果を代入します。

構文

DIMENSION dimension1 [, dimensionN]

パラメータ

dimension

モデル方程式が基礎とする、コンポジットのベース・ディメンションを含む1つ以上のディメンション。サロゲートの作成元のディメンションのかわりに、ディメンション・サロゲートの名前を指定できます。その後、ディメンションの値のかわりにサロゲートの値を使用できます。

使用上の注意

モデルのディメンションベースの方程式

方程式(SET)がデータをディメンション値に代入するか計算でディメンション値を参照する場合、その方程式はディメンションベースの方程式と呼ばれます。ディメンションベースの方程式は、ディメンション自体を参照する必要はなく、ディメンションの値のみを参照することに注意してください。したがって、モデルにディメンションベースの方程式が含まれる場合、モデルの先頭のDIMENSION文でこれらの各ディメンションの名前を指定する必要があり、これによってOracle OLAPでは、この指定によって、各ディメンション値がどのディメンションに属しているかを判定できます。サロゲートの作成元のディメンションのかわりに、ディメンション・サロゲートの名前を指定できます。その後、ディメンションの値のかわりにサロゲートの値を使用できます。

また、モデルにディメンションベースの方程式が含まれている場合、モデルを実行する際にソリューション変数の名前を指定する必要があります。ソリューション変数は、モデルのデータのソースであるとともにターゲットでもあります。ディメンションベースの方程式で使用する入力データはソリューション変数が保持しており、また、計算結果はOracle OLAPによってソリューション変数の指定された値に格納されます。ソリューション変数は、通常、モデル方程式が基礎とするすべてのディメンションによってディメンション化されています。たとえば、財務アプリケーションにおいて、モデルがlineディメンションを基礎とし、ソリューション変数actualがそのディメンションの1つとしてlineを持つ場合などです。

ディメンションベースの方程式によって、モデリングには柔軟性があります。モデルを解決するまでモデリング変数を指定する必要がないため、同じモデルを異なるソリューション変数で実行できます。たとえば、同じモデルを、実績額(actual)の変数、最良ケース予算額の変数および最悪ケース予算額の変数で実行することもできます。

ディメンションベースの方程式が、計算で使用するデータのソースまたは結果を代入するターゲットとしてディメンション値を参照する場合は、ディメンションをDIMENSION文に指定する必要があります。次の例では、Gross.Margin、RevenueおよびCogsはlineディメンションの値であり、そのため、DIMENSION文にlineが指定されています。

DIMENSION line
Gross.Margin = Revenue - Cogs

ディメンションがファンクション引数の場合

ディメンションが、データソースとしてディメンション値を使用するファンクションに対する引数の場合は、そのディメンションもDIMENSION文に指定する必要があります。次の例では、monthをDIMENSION文に指定する必要があります。

DIMENSION line, month
Revenue = lag(Revenue, 1, month) * 1.05

前述のモデルの作成者は、lineおよびmonthによってディメンション化されたソリューション変数の使用を想定しています。そのため、モデルの実行時に、指定した時間ディメンション(month)をディメンションの1つとして持つソリューション変数について、LAGファンクションが操作を行います。ただし、モデル・コンパイラではソリューション変数の時間ディメンションを予想できないため、DIMENSION文でそれを指定する必要があります。DIMENSION文にmonthを含めない場合、モデルのコンパイルを試行した際にエラーが発生します。

時系列のデータを操作するファンクション(MOVINGTOTALまたはLAGなど)では、ディメンションがDAY、WEEK、MONTH、QUARTER、YEAR型の場合、dimension引数はオプションです。たとえば、前述の例では、LAGファンクションの指定でmonthを省略できます。ただし、その場合でも、DIMENSION文には適切な時間ディメンションを指定する必要があります。

ソリューション変数

ディメンションベースの方程式を含むモデルを実行する場合、モデルのデータのソースであり、ターゲットでもある、ソリューション変数を指定します。通常、ソリューション変数は、モデルで使用するDIMENSIONコマンドにリストされたすべてのディメンションによってディメンション化されています。または、ソリューション変数がコンポジットでディメンション化されている場合は、DIMENSIONコマンドによってコンポジットのベース・ディメンションがリストされます。DIMENSIONコマンドはモデルで明示的に指定するか、含まれるモデルから継承できます。「INCLUDEとの非互換性」を参照してください。

コンポジットでの処理

ディメンション・リストにあるコンポジットのソリューション変数を使用してモデルを実行する必要がある場合は、DIMENSION文にコンポジットのベース・ディメンションを指定します。モデル方程式は、結果をベース・ディメンションの値に代入します。コンポジットで必要になる新しい値は、Oracle OLAPによって自動で作成されます。

複数のDIMENSIONコマンド

ディメンションベースの方程式で参照または使用されている各ディメンションについて、それぞれ別個のDIMENSION文を指定するか、単一のDIMENSION文にすべてのディメンションを指定できます。

コマンドの位置

すべてのDIMENSIONコマンドは、モデルの先頭で指定し、方程式より前の位置に指定する必要があります。

INCLUDEとの非互換性

モデルにINCLUDE文が含まれる場合、DIMENSIONコマンドを含めることはできません。INCLUDE文は、現行のモデルに別のモデルを含めることを指定する文です。この場合、現行のモデルは、含められたモデルからそのDIMENSIONコマンド(存在する場合)を継承します。モデルを含める際の詳細は、MODELコマンドのINCLUDE文を参照してください。

継承されたDIMENSIONコマンドは、明示的なDIMENSIONコマンドに対し規定されているすべての要件を満たす必要があります。「モデルにおけるDIMENSION文作成のガイドライン」を参照してください。

ディメンションの順序

モデルでDIMENSIONコマンドに複数のディメンションを指定する場合、ディメンションをリストする順序は重要です。

- モデル方程式にディメンション値である可能性がある名前が含まれている場合、Oracle OLAPでは、モデルの明示的なDIMENSIONコマンドまたは継承されたDIMENSIONコマンドに出現するディメンションを、ディメンションがリストされている順序で検索し、その名前が、リストされているディメンションのディメンション値と一致するかどうかを確認します。検索は、一致する値が検出された時点で終了します。したがって、リストされている2つ以上のディメンションに同じ名前のディメンション値がある場合、Oracle OLAPでは、その値は、DIMENSION文で最初にリストされているディメンションに属するものと判断されます。名前が、リストされているディメンションの値と一致しない場合は、Oracle OLAPは、アタッチしたワークスペースの変数全体で検索します。

- モデル方程式が結果をターゲット・ディメンションの値に代入する際、Oracle OLAPによって、DIMENSIONコマンドにリストされている他の(ターゲット以外の)ディメンションの値をループ処理するコードが作成されます。DIMENSIONコマンドに最初にリストされているターゲット以外のディメンションは、最も変化の遅いディメンションとして扱われます。たとえば、DIMENSION文にリストされているターゲット以外の最初のディメンションがMONTHであり、2番目のディメンションがDIVISIONであるとすると、まず、最初の月のすべての部門がループされ、その後、2番目の月のすべての部門がループされるというように続きます。

モデルにおけるDIMENSION文作成のガイドライン

DIMENSION文を作成する場合、次の点に注意してください。

- DIMENSION文には、モデル方程式が基礎とするすべてのディメンションの名前をリストする必要があります。次の例では、gross.margin、revenueおよびcogsはlineディメンションの値であり、そのため、DIMENSION文にlineが指定されています。

DIMENSION line
gross.margin = revenue - cogs

- DIMENSION文には、ディメンション値を参照するファンクションの引数であるディメンションもリストする必要があります。次の例では、monthをDIMENSIONコマンドに指定する必要があります。

DIMENSION line, month
revenue = LAG(revenue, 1, month) * 1.05

- モデル方程式が結果をディメンション値に代入する際、DIMENSION文にリストされているターゲット以外のディメンションの値をループするコードが作成されます。DIMENSION文に最初にリストされているターゲット以外のディメンションは、最も変化の遅いディメンションとして扱われます。

- 次のガイドラインに従ってDIMENSION文のディメンションおよびソリューション変数のディメンションを指定すると、モデルは最も効率よく実行されます。

- モデルのターゲット・ディメンションは、DIMENSION文では最初のディメンションとしてリストし、ソリューション変数のディメンションでは最後のディメンションとしてリストします。

- DIMENSION文では、ターゲット以外のディメンションは、ソリューション変数の定義に指定されている順序とは逆の順序でリストします。したがって、モデルおよびソリューション変数で、最も変化の早いディメンションと最も変化の遅いディメンションが同じ順序となります。

- ソリューション変数にモデル方程式で使用または参照されないディメンションがある場合は、それらのディメンションはDIMENSION文には含めません。

- アナリティック・ワークスペースにディメンション値と同じ名前を持つ変数が含まれるか、同じディメンション値が異なる2つのディメンションに存在する場合は、モデル方程式にあいまいさが生じる可能性があります。モデル方程式では変数とディメンション値は同じ方法で使用できるため、名前は変数の名前であることもあり、アナリティック・ワークスペース内のディメンションの値であることもあります。

- DIMENSION文は、代入文の各名前参照が変数またはディメンション値のいずれであるかを判定するために使用されます。名前参照の解決方法の説明は、「モデルのコンパイル」を参照してください。

関連項目:
次の事項に関する情報は、「OLAP DMLモデル・オブジェクト」、SETおよびMODELを参照してください。

- モデルへの文の入力

- ディメンションの値の参照方法

- 文からコードが作成される方法の説明

- ソリューション変数がDIMENSIONコマンドにリストされているよりも多いまたは少ないディメンションを持つ場合の、Oracle OLAPの対処方法の説明

例

例10-59 予算予測のための単純なモデル

次の文では、損益計算書の項目についての予算額を予測する単純なモデルを定義します。

DEFINE income.budget MODEL
LD Model for estimating budget line items
MODEL
dimension line, month
Revenue = 1.05 * LAG(Revenue 1 month)
Gross.Margin = Revenue - Cogs
Opr.Income = Gross.Margin - (Marketing + Selling + R.D)
Net.Income = Opr.Income - Taxes
END

モデル方程式はlineディメンションを基礎とするため、DIMENSION文にはlineが指定されています。ディメンションmonthは、REVENUE値に対し操作を行うLAGファンクション内の時間ディメンションであるため、DIMENSION文にはmonthも指定されています。

モデルを実行すると、monthディメンションの現行のステータスにある値がループ処理されます。

INCLUDE

INCLUDE文は、あるモデルを別のモデルに含める文です。INCLUDE文はモデル内でのみ使用できます。

INCLUDEを使用すると、複数のモデルで共通する方程式を配置して、別個のモデルにモジュール・モデルを作成し、必要に応じてそのモデルを他のモデルに含めることができます。さらに、INCLUDE文によりwhat-if分析が容易になります。実験的なモデルでは、ベース・モデルから方程式を流用し、それを選択的に新しい方程式に置き換えることが可能です。

構文

INCLUDE model

パラメータ

model

現行のモデルに含めるモデルの名前。現行のモデルは親モデルと呼ばれます。含めるモデルはベース・モデルと呼ばれます。

使用上の注意

モデルにおけるINCLUDE文コード化のガイドライン

モデルでINCLUDE文を使用するには、次のガイドラインに従ってください。

- モデルに指定できるINCLUDE文は1つのみです。

- INCLUDE文は、モデルのいずれの方程式よりも前の位置に指定する必要があります。

- モデルにINCLUDE文が含まれる場合、DIMENSION文を含めることはできません。

モデルのネスト方法

INCLUDE文をベース・モデルで使用することにより、モデルをネストできます。たとえば、モデルmyModel1がモデルmyModel2を含み、モデルmyModel2がモデルmyModel3を含むことが可能です。ネストしたモデルは階層形式になります。この例では、myModel1が一番上の階層になり、myModel3がルートになります。ベース・モデルは、階層内でそれより上位にあるモデルを含むことができません。前述の例では、myModel2はmyModel1を含むことができず、myModel3はmyModel1またはmyModel2を含むことができません。

方程式間の依存関係

INCLUDE文を含むモデルをコンパイルする場合、コンパイラは、方程式を順序付けたりブロックに構成したりする際に、含まれているすべてのモデルにある方程式間の依存関係を考慮します。したがって、MODEL.COMPRPTプログラムを実行してコンパイルの結果を確認する、または親モデルの実行前にMODTRACEオプションをYESに設定すると、含まれているモデルの階層の異なるレベルの方程式が散在している場合があります。例10-61「コンパイル・レポートの生成」を参照してください。

含まれているモデルの方程式間に依存関係が見つからない場合、コンパイラはルート・モデルの方程式を最初に実行し、親モデル内の方程式を最後に実行します。

親モデルのコンパイル

親モデルをコンパイルすると、コンパイル済コードがまだ存在していない場合、コンパイラによって、含まれている階層でその親モデルの下にあるすべてのベース・モデルがコンパイルされます。特定のモデルでエラーが検出されると、そのモデルおよび階層でそれより上にあるモデルはコンパイルされません。階層のルート・モデルにエラーがあると、上位のモデルはルート・モデルからDIMENSION文を継承できません。この場合、エラーの実際の発生箇所がルート・モデルでも、コンパイラは親モデルにおけるエラーとしてレポートすることがあります。たとえば、アタッチしたアナリティック・ワークスペースにターゲット・ディメンション値が存在しないとして、コンパイラによってレポートされる可能性があります。一方、コンパイラが親モデル内でエラーを検出し、そこに含まれているモデル内にはエラーが見つからない場合、親モデルがコンパイルされなくても、含まれているモデルはコンパイルされます。

方程式のマスク

what-if分析をサポートするために、モデルの方程式で前の方程式をマスクできます。以前の方程式は、同じモデルまたはそれに含まれているモデルにあります。マスクされた方程式は実行されません。モデルのコンパイル後にMODEL.COMPRPTプログラムを実行すると、マスクされた方程式は、コンパイルしたモデルについてのレポートには表示されません。

ある方程式が、前の方程式のターゲットでもある変数またはディメンション値に値を代入する場合、マスクを実行できます。マスクのルールは次のとおりです。

- 前の方程式のターゲットが、後の方程式のターゲットと同じように限定されている場合、前の方程式はマスクされ、後の方程式が実行されます。次の例では、完全に同じように限定されたターゲットを持つ2つの方程式が示されています。

Equation from a base model:      BUDGET(LINE REVENUE) = 5000
Equation from the parent model:  BUDGET(LINE REVENUE) = 3500

この例では、ベース・モデルの方程式はマスクされ、親モデルの方程式が実行されます。

- 前の方程式のターゲットが後の方程式のターゲットよりもさらに限定されている場合、前の方程式はマスクされます。後の方程式が実行されます。
より限定されたターゲットとは、より少ないディメンション値に影響を与えるターゲットです。ベース・モデルおよび親モデルに次のような方程式があるとします。

Equation from a base model:      BUDGET(LINE REVENUE) = 2500
Equation from the parent model:  BUDGET = 4000

ベース・モデルの方程式は、LINEディメンションのREVENUE値に対してのみ値を代入するため、より限定されています。親モデルの方程式は、LINEディメンションのすべての値にデータを代入します。この例では、ベース・モデルの方程式はマスクされ、親モデルの方程式が実行されます。

- 前の方程式のターゲットが後の方程式のターゲットよりも限定されていない場合、マスクは行われません。方程式は両方とも実行されます。
ベース・モデルおよび親モデルに次のような方程式があるとします。

Equation from a base model:      BUDGET = LAG(ACTUAL, 1, MONTH)
Equation from the parent model:  BUDGET(LINE REVENUE) = 6500
Equation from the parent model:  BUDGET(LINE COGS) = 4000

ベース・モデルの方程式は、LINEディメンションのすべての値にデータを代入します。親モデルの方程式は、それぞれLINEディメンションの単一の値に対してのみ値を代入するため、より限定されています。この例では、ベース・モデルの方程式が最初に実行され、その後、親モデルの方程式が実行されます。

この機能によって、多数の値を1つの方程式で代入し、後続の方程式で個々の値の置換やテストが可能になります。

- 前の方程式のターゲットが後の方程式のターゲットとは異なって限定されている場合、マスクは行われません。方程式は両方とも実行されます。次の例では、方程式はどちらも実行されます。

Equation from a base model:      BUDGET(LINE REVENUE) = 5000
Equation from the parent model:  BUDGET(LINE COGS) = 4500

例

例10-60 モデルを含むモデル

この例は、base.linesというベース・モデルを含むincome.planという親モデルを示しています。

DEFINE income.plan MODEL
MODEL
INCLUDE base.lines
revenue = LAG(revenue, 1, month) * 1.02
cogs = LAG(cogs, 1, month) * 1.01
taxes = 0.3 * opr.income
END

DEFINE BASE.LINES MODEL
MODEL
DIMENSION line month
net.income = opr.income - taxes
opr.income = gross.margin - marketing
gross.margin = revenue - cogs
END

例10-61 コンパイル・レポートの生成

次の文を使用して、親モデルをコンパイルし、コンパイル・レポートを生成します。

COMPILE income.plan
MODEL.COMPRPT income.plan

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

MODEL INCOME.PLAN <LINE MONTH>
BLOCK 1 (SIMPLE)
INCOME.PLAN     2:    revenue = lag(revenue, 1, month) * 1.02
INCOME.PLAN     3:    cogs = lag(cogs, 1, month) * 1.01
BASE.LINES      4:    gross.margin = revenue - cogs
BASE.LINES      3:    opr.income = gross.margin - marketing
INCOME.PLAN     4:    taxes = 0.3 * opr.income
BASE.LINES      2:    net.income = opr.income - taxes
END BLOCK 1

MODEL.COMPRPT

MODEL.COMPRPTプログラムは、モデルの方程式がどのようにブロックにグループ化されたかを示すレポートを生成するプログラムです。このレポートでは、ディメンション間の依存があるステップ・ブロックおよび連立ブロックについて、依存に関与するディメンションがリストされます。

構文

MODEL.COMPRPT

例

例10-62 income.budgetモデルのコンパイル・レポート

MODEL.COMPRPTプログラムは、プログラム引数として指定したモデルのブロック構成と各ブロックの方程式の順序を示すコンパイル・レポートを生成します。各方程式は、モデルの名前とそのモデル内での文番号で識別されます。

次の文で、モデルをコンパイルし、MODEL.COMPRPTを起動します。

COMPILE income.budget
MODEL.COMPRPT income.budget

MODEL.COMPRPT文によって生成されるコンパイル・レポートは次のとおりです。

MODEL INCOME.BUDGET <LINE MONTH>
BLOCK 1 (SIMPLE)
INCOME.BUDGET  4:  revenue = lag(revenue, 1, month) * 1.02
INCOME.BUDGET  5:  cogs = lag(cogs, 1, month) * 1.01
INCOME.BUDGET  3:  gross.margin = revenue - cogs
BLOCK 2 (STEP-FORWARD <MONTH>)
INCOME.BUDGET  6:   marketing = lag(opr.income, 1, month) * 0.20
INCOME.BUDGET  2:   opr.income = gross.margin - marketing
END BLOCK 2
END BLOCK 1

例10-63 income.estモデルのコンパイル・レポート

次の文を使用して、MODEL.COMPRPTプログラムを実行し、income.estというモデルのコンパイル・レポートを作成します。

MODEL.COMPRPT income.est

この文によって生成されるコンパイル・レポートは次のとおりです。

MODEL INCOME.EST <LINE MONTH>
BLOCK 1 (STEP-FORWARD <MONTH>)
INCOME.EST 5: revenue = lag(revenue,1,month)+2*lag(marketing,1,month)
INCOME.EST 4: gross.margin = revenue - cogs
BLOCK 2 (SIMULTANEOUS)
INCOME.EST 2:  net.income = opr.income - taxes
INCOME.EST 3:  opr.income = gross.margin - marketing - selling - r.d
INCOME.EST 6:  marketing = .15 * net.income
INCOME.EST 7:  taxes = .3 * opr.income
END BLOCK 2
END BLOCK 1

MODEL.DEPRT

MODEL.DEPRTプログラムは、各モデル方程式が依存する変数およびディメンション値がリストされるレポートを生成するプログラムです。ディメンションに依存している場合、レポートにはディメンションの名前が示されます。

構文

MODEL.DEPRT

例

例10-64 依存関係レポートの生成

MODEL.DEPRPTプログラムは、各モデル方程式に対する代入ターゲットおよびデータソースである変数とディメンション値がリストされた依存関係レポートを生成します。各方程式に対する代入ターゲットとそれぞれのデータソースが、個別の行にリストされます。ターゲットまたはデータソースがディメンション値の場合は、その行に角カッコで囲まれたアスタリスク([*])が付きます。

ターゲットまたはデータソースが修飾子に依存する場合は、レポートで修飾子のディメンションが特定され、依存のタイプが示されます。依存のタイプは、次のいずれかです。

- LAG: 以前のディメンション値への一方向の依存

- LEAD: 以後のディメンション値への一方向の依存

- BOTH: 以前および以後の両方の値への双方向の依存

- VARIABLE: モデルを実行したときの変数値に基づいて、以前または以後のいずれかの値への依存

- QDR: 修飾データ参照

income.budgetモデルの依存関係レポートを生成する必要があるとします。次の文とレポートは生成のプロセスを示しています。

MODEL.DEPRPT income.budget

MODEL INCOME.BUDGET <LINE MONTH>
2    [*](LINE OPR.INCOME):
[*](LINE GROSS.MARGIN)
[*](LINE MARKETING)
3    [*](LINE GROSS.MARGIN):
[*](LINE REVENUE)
[*](LINE COGS)
4    [*](LINE REVENUE):
[*](LINE REVENUE)(LAG <MONTH>)
5    [*](LINE COGS):
[*](LINE COGS)(LAG <MONTH>)
6    [*](LINE MARKETING):
[*](LINE OPR.INCOME)(LAG <MONTH>)

文4、5および6のデータソースには、monthディメンションに対するLAGの依存関係があります。

MODEL.XEQRPT

MODEL.XEQRPTプログラムは、モデルの実行に関するレポートを生成するプログラムです。レポートには、解決に失敗したブロックが示され、連立ブロックの解決に使用されたモデル・オプションの値が表示されます。

構文

MODEL.XEQRPT

使用上の注意

MODEL.XEQRPTの実行

MODEL.XEQRPTを実行する前に、次の操作を行う必要があります。

1. MODERRORオプションをSTOPまたはCONTINUEに設定します。

2. モデルを実行します。

エラーのためにモデルの実行が停止した場合は、MODEL.XEQRPTプログラムを実行します。

MODEL.XEQRPTへのMODERRORの影響

MODEL.XEQRPTから返される結果は、MODERRORオプションの設定によって次のように異なります。

- MODERRORがSTOPに設定されており、エラーが原因でモデルの実行が停止した場合、MODEL.XEQRPTプログラムを実行すると、モデルの実行についてのレポートを生成できます。レポートには、解決に失敗したブロックが示され、連立ブロックの解決に使用されたモデル・オプションの値が表示されます。

- MODERRORがCONTINUEに設定されており、モデルの1つのブロックが連立ブロックで、そのブロックが発散するかまたは収束に失敗した場合、Oracle OLAPによって、モデルの残りのブロックが実行されます。
さらに、モデルのディメンションではないソリューション変数の追加のディメンションのステータスにある残りの値に対しても、Oracle OLAPによってモデルが実行されます。この場合、モデルの実行の終了後にMODEL.XEQRPTプログラムを実行すると、この追加のディメンションの最後の値の解決に関するレポートが生成されます。

モデルが追加のディメンションの最後の値に対して実行されたときに、モデルの連立ブロックが収束した場合は、それ以前に別のディメンション値に対するモデルの実行が失敗していても、MODEL.XEQRPTは、ブロックが解決されたとしてレポートします。エラーが発生したディメンション値についてのMODEL.XEQRPTを参照するには、MODERRORをSTOPに設定し、モデルを再実行します。

例

例10-65 income.estモデルについての実行レポートの生成

income.estモデルを実行した後、MODEL.XEQRPTプログラムを使用すると、モデルの実行に関するレポートを生成できます。

次の文で、MODEL.XEQRPTプログラムを実行し、モデルの実行レポートを生成します。

MODEL.XEQRPT income.est

この文によって生成される実行レポートは次のとおりです。

MODEL INCOME.EST <LINE MONTH>
Solution status:     SOLVED
Model options in use:
MODSIMULTYPE:     AITKENS
MODMAXITERS:      50
MODTOLERANCE:     3
MODOVERFLOW:      3
MODGAMMA:         1
BLOCK 1 (STEP-FORWARD <MONTH>)
Solution status:   SOLVED
BLOCK 2 (SIMULTANEOUS)
Solution status:   SOLVED
Iterations:        15

レポートには、連立ブロックの解決に使用されたモデル・オプションの値と、各ブロックの解決の成否が示されます。

MONITOR

MONITORコマンドは、指定されたプログラムの各行のパフォーマンス・コストを記録します。MONITORから有効な情報を得るには、現行セッションがOracle OLAPで実行されている唯一のセッションである必要があります。さらに、ホスト・コンピュータ上で起動されるプロセスの数が増えるにつれて、MONITORの実行結果の精度は低下します。

最初にMONITOR文を使用して監視対象のプログラムを指定し、次にプログラムを実行してMONITORを再度使用し結果を取得します。プログラムの特定の行が繰り返し実行されると、そのプログラム行を対象とするモニター・リストの1行に、実行に要した全累積コストがMONITORによって記録されます。

1行のコードの実行時間が長い場合、パフォーマンス・コストが高いとみなされます。TRACKPRG文で比較的コストが高いプログラムを特定し、MONITORを使用してそのプログラム内で所要時間の長い行を特定します。必要な場合は、TRACKPRGとMONITORを同時に使用できます。

構文

MONITOR ON [programs] | OFF | INIT | FILE [[APPEND] file-name] | RESET

ここで、programsは次のいずれかです。

ALL [awlist]

program-name

パラメータ

ON

Oracle OLAPがタイミング・データをモニター・リストに1行ずつ収集できるように、実行される指定プログラムの検索を開始します。(監視がすでにオンになっている場合は、中断せずに現行の監視を継続し、監視がオフになっている場合は間隔を置いて再開します。)

programsに値を指定しなかった場合は、最後に実行されたMONITOR ON文で指定したプログラム(または複数のプログラム)がデフォルトになります。現行セッションに該当する文がなかった場合、データは収集されず、エラーも発生しません。

ALL

1つ以上のアナリティック・ワークスペースにあるすべてのプログラムを監視対象として指定します。

awlist

監視するプログラムがある1つ以上のアナリティック・ワークスペースの名前(必要に応じてカンマで区切る)。この引数を省略した場合、アタッチされているすべてのアナリティック・ワークスペースにあるすべてのプログラムがOracle OLAPによって監視されます。

program-name

監視対象の特定のプログラムの名前。

OFF

プログラムの監視を停止し、現在モニター・リストにあるすべてのタイミング・データを固定します。これによりすぐに、またはセッションの後半で、リストを現行の出力ファイルまたはテキスト・ファイルに送信できます。

RESET

(監視がオンの場合にのみ有効)現在監視の対象となっているプログラムに関する情報、および現行モニター・リストに割り当てられているOracle OLAPメモリーを保持します。ただし、リストに現在格納されているタイミング・データは破棄されます。また、RESETにより、MONITORは同じプログラムが再び実行されるのを待機します。同じプログラムを実行すると、前と同じメモリー割当てのその同じプログラムに関して新しいタイミング・データが新しいモニター・リストに自動的に収集されます。

INIT

(監視がオンの場合にのみ有効)監視の環境を初期化します。初期化では、現行モニター・リストに関連付けられているプログラム名とタイミング・データが破棄され、そのリストのために前に使用されていたOracle OLAPメモリーが解放されます。これにより、メモリーを他の目的や、新しいモニター・リストへの新しいデータの収集に使用できます。

FILE

現行モニター・リストにあるタイミング・データをファイルに送ることを指定します。

APPEND

タイミング・データを既存のファイルに追加することを指定します。この引数を省略すると、ファイルの現在の内容は新しい出力によって置き換えられます。

file-name

出力を受け取るファイルの名前を表すテキスト式。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。file-nameを指定すると、データは指定のテキスト・ファイルに送られます。モニター・リストはFILEの影響を受けないため、同じリストを異なる宛先に繰り返し送ることができます。file-nameを省略すると、現行モニター・リストにあるタイミング・データが現行の出力ファイルに送られます。

注意:
ディレクトリ・オブジェクトはデータベースで定義され、ディレクトリおよびディレクトリ内のファイルへのアクセスを制御します。CDA文を使用して、カレント・ディレクトリ・オブジェクトを特定および指定できます。使用するデータベース・ユーザー名で読取りおよび書込み可能なファイルがあるディレクトリ・オブジェクトへのアクセス権については、Oracle DBAに問い合せてください。

使用上の注意

モニター・リスト

モニター・リスト内の各エントリ(つまり、行)は、実行回数にかかわらず、プログラムの1行を対象にします。各エントリは次の4つのセクションに分けられます。

- すべての実行時間の合計時間(ミリ秒単位。最も近い10ミリ秒に丸める): 列1から11

- 実行回数: 列12から18

- 行番号: 列19から23

- 行の本文: 列24以降

次にMONITOR出力のサンプルを示します。参考のために列番号を付けます。

12345678901234567890123456789012345678901234567890

60              1    1 push name
30              1    2 trap on GETOUT noprint
51              1    3 limit name to obj(type) eq 'DIMENSION'
0               1    4 for name
0               0    5    do
450             6    6    limit &name to ALL ifnone BYPASS
0               0    7 BYPASS:
0               0    8    doend
0               0    9 GETOUT:
0               1   10 pop name

次に示すのは、この出力を得るために使用したプログラムの完全な詳細です。出力では、LIMITコマンドの行は長すぎるために切り捨てられています。

DEFINE allstat PROGRAM
LD Program to set the status of all dimensions in the analytic workspace to ALL
PROGRAM
PUSH NAME
TRAP ON getout NOPRINT
LIMIT NAME TO OBJ(TYPE) EQ 'Dimension' IFNONE getout
FOR NAME
DO
LIMIT &NAME TO ALL IFNONE bypass
bypass:
DOEND
getout:
POP NAME
END

アナリティック・ワークスペースのアタッチ、デタッチおよび再アタッチ

アタッチ、デタッチおよび再アタッチされたアナリティック・ワークスペースでOracle OLAPがプログラムを実行すると、新しいデータ・ブロックが収集されます。

ステートメント行の切捨て

プログラム行は、長すぎるとMONITOR出力から切り捨てられます。継続行は出力に表示されません。

レポートの生成

MONITORファイルのタイミング・データからOracle OLAPレポートを生成する場合は、FILEREAD文を使用してデータをOracle OLAP変数に読み取るプログラムを作成してから、Oracle OLAPレポート生成機能を使用してレポートを生成できます。TRACKREPORTプログラムをモデルとして使用できます。ただし、TRACKREPORTプログラムは、MONITOR出力ではなくTRACKPRG出力に対するレポートの生成のために作成されています。

複数の行の一括化

プログラム内の特定の行または行のグループの実行時間を測定する場合は、プログラムにMONITOR ON文およびMONITOR OFF文を挿入して目的の行のみを囲みます。

ネストしたプログラムでのMONITORの使用

ネストしたプログラムが単独で実行されないようにする場合は、そのプログラムの名前をMONITOR ON文に指定してからこの文をコールするプログラムを実行します。MONITORによって収集されるタイミング・データは、(ネストした)指定のプログラムのみを対象とします。指定のプログラムが複数回コールされると、MONITORは、プログラム行ごとにその行が実行された全回数に要した秒数を累計し、その行の実行回数を示します。

複数回コールされるネストしたプログラムの特定の回の実行時間を測定する場合は、コール側のプログラムにMONITOR ON文およびMONITOR OFF文を挿入して目的の1回のコールを囲みます。

非常に小さなプログラムでのMONITORの使用

非常に小さいプログラムは、結果を正確に再現できないことがあります。CPUが処理を中断して他のタスクを実行すると、実行時間の合計に占めるその時間の割合が大きくなるからです。

MONITORの測定単位

MONITORコマンドおよびTRACKPRGコマンドでは、実行時間を記録する単位としてミリ秒を使用します。実行時間には、I/Oの所要時間および次の文の待機時間は含まれません。

例

例10-66 MONITORによるタイミング・データの収集

この例では、MONITORを使用して、prog1の各コード行の実行に関するタイミング・データを収集し、そのデータをテキスト・ファイルに送ります。次に、MONITOR ON文を使用してprog1タイミング・データを破棄してprog2に関するデータの収集を開始します。prog2のデータを2番目のファイルに送ったら、MONITOR INITを使用して現行モニター・リストを破棄し、このために使用していたメモリーを解放します。

MONITOR ON prog1
prog1
MONITOR FILE prog1.mon
MONITOR ON prog2
prog2
MONITOR OFF
MONITOR FILE prog2.mon
MONITOR INIT

MOVE

MOVEコマンドは、アナリティック・ワークスペースのNAMEディメンションの新しい位置にオブジェクト名を移動するコマンドです。ワークスペース上でのMOVEコマンドによる効果は、表面的な再編成です。つまり、ワークスペース記憶域内での物理的な変更は行われません。多くの場合、ワークスペース・オブジェクトを再編成することによって、DESCRIBEからの出力を読み取りやすくします。

構文

MOVE name... {FIRST|LAST|{BEFORE|AFTER} name2} [AW workspace]

パラメータ

name...

移動する1つ以上のオブジェクトの名前。名前は個別に指定するか、次のいずれかの形式を使用して名前のグループを指定します。

name TO name

FIRST n

LAST n

boolean-expression(NAMEによるディメンション化)

修飾オブジェクト名を指定して、オブジェクトが存在するアタッチされたワークスペースを指定できます。別の方法として、AW引数を使用してワークスペースを指定することもできます。両方を一緒には使用できません。

修飾オブジェクト名またはAW引数を使用してアナリティック・ワークスペースを指定しない場合、Oracle OLAPは現行のワークスペースでオブジェクトを検索します。

FIRST LAST
name引数で指定されるオブジェクトの移動先となるNAMEディメンションの論理位置。FIRSTを指定すると、オブジェクトはNAMEディメンションの先頭に移動します。LAST(デフォルト)を指定すると、オブジェクトはNAMEディメンションの末尾に移動します。

BEFORE name2 AFTER name2
name引数で指定されるオブジェクトの移動先となる特定オブジェクト(name2)の前後の位置。

AW workspace
オブジェクトの移動先のアタッチされたワークスペースの名前。修飾オブジェクト名またはAW引数を使用してアナリティック・ワークスペースを指定しない場合、オブジェクトは現行のワークスペース内に移動します。

使用上の注意

オブジェクトのアルファベット順の整列

NAMEディメンションに対して機能する次の文を使用すると、ワークスペース・オブジェクトをアルファベット順に整列できます。

SORT NAME A NAME
MOVE CHARLIST(NAME) FIRST

例

例10-67 リレーションの移動

この例は、リレーションdesc.productをproductの後に移動する方法を示します。OLAP DML文

SHOW CHARLIST(NAME)

によって、次のリストが生成されます(注釈が追加されています)。

product           <--- Position of product
district
division
line
region
marketlevel
market
month
year
quarter
desc.product      <--- Old position of desc.product
region.district
division.product
...

次の文

MOVE desc.product AFTER product
SHOW CHARLIST(NAME)

ワークスペースの順序が変更され、次のリストが生成されます(注釈が追加されています)。

product           <--- Position of product
desc.product      <--- New position of desc.product
district
division
line
region
marketlevel
market
month
year
quarter
region.district
division.product
...

OUTFILE

OUTFILEコマンドによって、文のテキスト出力をファイルにリダイレクトできます。

関連項目:
「ファイルの読取りと書込みのオプション」

構文

OUTFILE {EOF | TRACEFILE | [APPEND] file-name [NOCACHE] [NLS_CHARSET charset-exp]}

パラメータ

EOF

現行の出力ファイルは閉じられ、出力がデフォルトの出力ファイルにリダイレクトされます。

TRACEFILE

出力をOracleのトレース・ファイルに送信するよう指定します。トレース・ファイルはTRACEFILEUNITオプションにより識別されます。

APPEND

出力を既存のディスク・ファイルの末尾に追加することを指定します。この引数を省略すると、ファイルの現在の内容は新しい出力によって置き換えられます。

file-name

出力が書き込まれるファイルの名前を表すテキスト式。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。

注意:
ディレクトリ・オブジェクトはデータベースで定義され、ディレクトリおよびディレクトリ内のファイルへのアクセスを制御します。CDA文を使用して、カレント・ディレクトリ・オブジェクトを特定および指定できます。使用するデータベース・ユーザー名で読取りおよび書込み可能なファイルがあるディレクトリ・オブジェクトへのアクセス権については、Oracle DBAに問い合せてください。

NOCACHE

行が生成されるたびにOracle OLAPが出力ファイルに行を書き込むことを指定します。このキーワードを指定しなかった場合、Oracle OLAPでは、ファイルのI/Oアクティビティを軽減するため、テキストの保存およびファイルへの書込みが定期的に実行されます。NOCACHEキーワードを指定するとパフォーマンスが大幅に低下しますが、各行が出力ファイルに即座に記録されます。この引数はfile-nameの後に指定する必要があります。

NLS_CHARSET charset-exp

file-nameによって指定されるファイルにテキスト・データを書き込む際にOracle OLAPが使用するキャラクタ・セットを指定しますが、これによって、Oracle OLAPはデータをそのキャラクタ・セットに正確に変換できます。この引数はfile-nameの後に指定する必要があります。この引数を省略すると、Oracle OLAPはNLS_LANGオプションに記録されているデータベース・キャラクタ・セットでデータをファイルに書き込みます。

使用上の注意

PERMIT_READまたはPERMIT_WRITEプログラムのファイル出力

PERMIT_READプログラムまたはPERMIT_WRITEプログラムの内容は、ファイル出力時に空になります。これらのプログラムの内容を正常にアナリティック・ワークスペースにコピーしたりアナリティック・ワークスペースからコピーするには、OUTFILEを使用する前にプログラムの名前を変更し、INFILEを使用してプログラムをアナリティック・ワークスペースにコピーした後に、再度PERMIT_READまたはPERMIT_WRITEという名前を付けます。

現行の出力ファイル識別子

OUTFILE文は実行されるたびに、最初の手順として現行の出力ファイルを閉じます。OUTFILEによってディスク上の新しいファイルが開かれると、このファイルにはファイル・ユニット番号として不定のINTEGERが自動的に割り当てられます。現行ファイル・ユニット番号は、OUTFILEUNITオプションで保持されます。

出力ファイルへの追加

出力をあるファイルに送信後、2番目のファイルに送信すると、最初のファイルは開いたままにはなりません。最初のファイルへの出力の送信を再開するには、別のOUTFILE文を実行してAPPEND file-name句を指定する必要があります。

出力ファイルの自動クローズ

OUTFILE file-nameを使用して出力をディスク・ファイルへ送ると、現在開いている出力ファイルはすべて閉じられます。この閉じる動作は、新しいファイルが実際には開いていない場合にも実行されます(OUTFILE文に無効なfile-nameを指定した場合と同様です)。

ページング・オプションとリダイレクトされる出力

ページング・オプションは、各ページのテキスト出力の編成を制御します。このオプションには、BMARGIN、LINENUM、LINELEFT、PAGESIZE、PAGENUM、PAGEPRG、PAGING、TMARGINおよびLSIZEがあります。これらのページング・オプションは、出力ファイルごとに個別の値を持ちます。ディスク・ファイルへの出力を制御するためにページング・オプションを設定した場合、OUTFILE文を再度使用して出力をリダイレクトするまで、その新しい値が有効です。コマンドを再度使用すると、ページング・オプションはデフォルト値に戻ります。したがって、ディスク・ファイルに対してページング・オプションを特定の値にする場合、通常、OUTFILE文を実行してからそのオプションを設定します。

現行の出力ファイルとデフォルトの出力ファイル

現行の出力ファイルとは、REPORTやDESCRIBEなど、テキストを生成する文の出力先となるファイルです。OUTFILE文を使用せずに出力をファイルに送ると、Oracle OLAPはデフォルトの出力ファイルを使用します。

例

例10-68 レポートの出力ファイルへの送信

この例では、REPORT文の出力を出力ファイルに送信します。

OUTFILE 'budget.rpt'
REPORT budget
OUTFILE EOF

例10-69 出力のファイルへの送信

year.end.salesという名前のプログラムがあり、このプログラムが作成するレポートをファイルに保存するとします。次のコマンドを入力してレポートをファイルに書き込みます。この例では、userfilesがディレクトリ・オブジェクトであり、yearend.txtがファイル名です。

OUTFILE 'userfiles/yearend.txt'
year.end.sales
OUTFILE EOF

これにより、ファイルにyear.end.salesレポートが格納されます。OUTFILEのAPPENDキーワードを使用すると、同じファイルにレポートを追加できます。year.end.expensesという名前の別のプログラムがあるとします。次のコマンドを使用して、このプログラムのレポートをファイルに追加します。APPENDを指定しないでOUTFILE文を実行すると、このexpensesレポートが上書きされます。

OUTFILE APPEND 'userfiles/yearend.txt'
year.end.expenses
OUTFILE EOF

PAGE

PAGEプログラムは、PAGINGの設定がYESである場合、出力に改ページを挿入するプログラムです。PAGEに対するオプションの引数は、ページの残りの行数を条件とする改ページを指定します。

PAGEプログラムは、レポート・プログラムで一般的に使用されます。これは、PAGINGがYESに設定されている場合にのみ有効で、REPORTやLISTNAMESなどの文の出力に対してのみ適用されます。

構文

PAGE [n]

パラメータ

n

現行ページの残りの行数がnより少ない場合にのみ改ページが発生することを示す正のINTEGER式。残りの行数がn以上の場合、改ページは発生しません。例10-70「まとまった行の保持」を参照してください。

使用上の注意

ページの先頭

PAGE文が実行されるときにすでにページの先頭が表示されている場合、改ページは発生しません。

ヘッダーの生成

PAGEプログラムからは、追加の出力が新しいページに生成されることが通知されますが、追加の出力が存在しないかぎり、新しいページにヘッダーは生成されません。追加の出力が存在する場合は、現在のPAGEPRGプログラムによって定義されるヘッダーが生成され、出力の生成が開始されます。

例

例10-70 まとまった行の保持

12行のデータがあり、改ページによって中断されると読み取りづらくなるため、中断されないようにするとします。12行のデータを生成する複数の文の直前にPAGE 12という文を使用します。12行のデータの前に改ページが発生するのは、ページの残りの行数が12行未満の場合のみです。その時点で12行以上残っている場合、出力は同じページ上で続行されます。

例10-71 改ページの挿入

レポート・プログラムの次の抜粋は、districtのループが開始されるたびに改ページが挿入されます。これにより、地区ごとのレポートがページの先頭から開始されます (レポート・プログラムでは、report.headというヘッダー・プログラムを使用して、カスタマイズされたヘッダーを作成します。カスタマイズされたヘッダー・プログラムについては、PAGEPRGオプションを参照)。

PUSH PAGING PAGEPRG
PAGING = YES
PAGEPRG = 'report.head'
FOR district
DO
PAGE
ROW district
BLANK
FOR month
ROW WIDTH 8 month sales sales.plan
DOEND
PAGE
POP PAGING PAGEPRG

PARSE

指定したグループの式を解析するには、PARSEコマンドを使用します。引数の解析が可能な場合、引数の中の式の数、式のテキスト、オブジェクト型、データ型、式のディメンションの数と名前がPARSEによって確認されます。この情報はOracle OLAPの内部に格納され、INFOファンクションを使用すると取得できます。

PARSE文は、式をプログラムへの引数として使用する場合に特に役立ちます。

構文

PARSE text-expression

パラメータ

text-expression

解析される1つ以上の比較的小さな式が含まれるテキスト式。プログラム引数を処理する場合、プログラムのすべての引数が含まれるテキスト式としてARGSファンクションを指定できます。

使用上の注意

PARSE文によって生成される情報の取得

PARSE文によって生成される情報を取得する方法の詳細は、INFO (PARSE)ファンクションを参照してください。

例

例10-72 プログラムへの引数の解析

単純なレポート・プログラムで、レポートされるデータをプログラムへの引数として指定するとします。式およびデータ変数の名前を指定できるようにします。

引数をそれぞれ異なる列幅で表示するには、引数を個別に処理する必要があります。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など)、あるいはそれぞれの1つを引数として指定できます。次のREPORT文によって、その後に示すレポートが生成されます。

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

PERMIT

PERMITコマンドを使用すると、ワークスペース・オブジェクト、およびディメンションやディメンション化されたオブジェクトの特定の値について、読取り専用アクセス権および読取り/書込みアクセス権を付与または拒否できます。さらにPERMITによって、ディメンションのメンテナンス権限の付与または拒否、ワークスペース・オブジェクトに対する権限の変更が可能です。

通常、あるディメンションに対して設定したアクセス権は、そのディメンションのみでなく、そのディメンションによってディメンション化されるオブジェクトに対しても適用されます(「ディメンション権限と他のオブジェクトに対する権限の相互作用」を参照)。他のオブジェクトに対して設定したアクセス権は、その特定のオブジェクトについてのみ適用されます。権限の変更がどの時点で有効になるかは、様々な条件に応じて決まります(「権限の変更が有効となるケース」を参照)。

関連項目:
「オブジェクトの権限を変更する前の重要な注意事項」、「起動プログラム」、「権限プログラム」、PERMITERRORオプションおよびPERMITRESETコマンド

ヒント:
PERMITコマンドは、直近に定義または検討されたオブジェクトに対して権限を割り当てます。オブジェクトの定義が現行の定義と異なる場合、そのオブジェクトに対して最初にCONSIDER文を使用してからPERMITコマンドを発行します。

構文

PERMIT {READ|WRITE|MNT|PERMIT} [WHEN permission-condition...]

パラメータ

READ

権限条件に応じて、オブジェクトのすべての値を読み取る権限、またはディメンションやディメンション化されたオブジェクトの特定の値のみを読み取る権限を付与または制限します。

ディメンションに対する読取り権限を制限すると、そのディメンションに対するメンテナンス権限も制限されるので注意してください。また、オブジェクトの読取り権限を付与すると、明示的なPERMIT WRITE文で書込み権限を拒否しないかぎり、読取り可能な値に対する書込み権限も許可されます。

WRITE

権限条件に応じて、オブジェクトの任意の値を変更する権限、またはディメンション化されたオブジェクトの特定の値のみを変更する権限を付与または制限します。

オブジェクトに対する書込み権限を制限しても、そのオブジェクトが完全に利用できないというわけではありません。たとえば、計算仕様(aggmapオブジェクト、プログラム、モデル、計算式など)に対する書込み権限を制限した場合、その計算仕様の内容は編集できなくなりますが、そのオブジェクトを実行することは可能です。

Oracle OLAPでは、ディメンション化されたオブジェクト内の読み取りできない値に対する書込み権限を付与することに制約はありません。ディメンション化されたオブジェクトに対するPERMIT READ文とPERMIT WRITE文の両方があり、書込みの権限条件を満たす値のいくつかが読取りの権限条件を満たす値のサブセットに含まれない場合、これらの値は変更できますが読み取ることはできません。

ヒント:
ディメンションによってディメンション化されたオブジェクトに対する書込みアクセスを許可する場合を除き、ディメンションに対する書込み権限を設定しても意味がありません。ディメンションに値を追加する権限を付与または制限するには、かわりに、そのディメンションに対するPERMIT MNT文を発行します。

関連項目:
「オブジェクトに対する唯一のPERMIT文がPERMIT WRITE文の場合」

MNT

権限条件に応じて、ディメンションをメンテナンスする権限を付与または制限します。

読取り権限を制限したディメンションのメンテナンス権限を付与することはできません。ディメンションの読取り権限が制限されている場合、そのディメンションのメンテナンス権限は自動的に拒否されます。

PERMIT

権限条件に応じて、オブジェクトに対する読取り、書込み、メンテナンスまたは許可権限を変更するためにPERMITコマンドを使用する権限を付与または制限します。

オブジェクトの許可権限を明示的に拒否しないかぎり、そのオブジェクトに対して他にどの権限が設定されていても、そのオブジェクトの許可権限は許可されます。

WHEN permission-condition...

WHEN句を省略してPERMIT READ文、PERMIT WRITE文またはPERMIT MNT文を実行すると、オブジェクトに対して完全な読取り、書込みまたはメンテナンス権限が回復されます。

WHEN句を指定する場合、読取り、書込み、メンテナンスまたは許可権限を付与する条件は、1つ以上のブール式で構成されます。これは、オブジェクトにディメンション性があるかどうかや設定する権限の種類によって、また、読取り権限と書き込み権限の場合はオブジェクトにディメンション性があるかどうかによって決まります。

- ディメンション性を持たないオブジェクトに適用する許可権限、メンテナンス権限または読取り/書込み権限を指定する場合、またはディメンション化されたオブジェクトのすべての値に読取りまたは書込み権限を適用する場合は、1つの値に評価されるブール式として権限条件を指定します。(ディメンション性のないオブジェクトに対する権限を指定するために、ディメンション化されたブール式を指定したり、許可権限やメンテナンス権限を指定すると、ステータスにある最初の値がPERMITによって使用されます。)

ヒント:
PERMIT PERMIT文に対する権限条件としてブール値(たとえばYESまたはNO)を指定するのは避けてください。そのかわりに、権限条件をブール変数、ブール値の結果を返すファンクション、または比較演算子で計算するブール値として指定します。このようにすると、許可権限が拒否された場合、ブール値を設定してPERMITRESET文を実行することにより、この許可権限をリストアできます。オブジェクトをロックしたためにその権限を変更できない場合、該当するワークスペースのワークスペース権限プログラムでオブジェクトの許可権限を指定し、ワークスペースをデタッチしてから再アタッチします。

- 個々のディメンション値またはディメンション化オブジェクトのスライスに適用する読取り権限または書き込み権限を指定する場合は、関連する各ディメンションに対し権限条件を1つ指定します。この場合、WHEN句には次の構文が含まれ、それぞれのディメンション化された権限条件は、オブジェクトのディメンションによってディメンション化されたブール式で構成されます。

WHEN dimensioned_permission_condition1

[BY dimensioned_permission_condition2

[UNION dimensioned_permission_condition2A]...

UNION句を使用すると、多次元変数のいくつかの対称サブキューブの結合に効率的にアクセスできます。

ディメンション化された権限条件を表すブール式に、オブジェクト・ディメンションの他に追加のディメンションが存在する場合、PERMITは、使用するブール値の列を判別するためにステータスにある最初の値を受け取る点に注意してください。ディメンションごとのYES値の共通部分(条件の論理AND)は、権限の適用先オブジェクト内の値のサブセットです。ディメンション化された権限条件では表現できないオブジェクト・ディメンションが存在する場合、これらのディメンション値のすべてがYESであるとみなされます。

使用上の注意

オブジェクトの権限を変更する前の重要な注意事項

オブジェクトの権限を変更するときは、次の重要な注意点を念頭に置いて行ってください。

- オブジェクトに対するPERMITコマンドを発行するには、そのオブジェクトに対する許可権限を持っている必要があります。

- DBAユーザーをロック・アウトしないでください。DBAユーザーはワークスペース内のすべてのオブジェクトにアクセスできる必要があります。

- INTEGERディメンションに対してPERMIT文を発行すると、望ましくない動作が生じることがあります。INTEGERデータ型のディメンションには、その番号の位置で識別できる値があります。PERMITは、INTEGERの通常の順序(1、2、3、...)が保持されるようにINTEGERディメンションの番号を付け替えます。INTEGERディメンションに対するデフォルトのアクセス権を変更するためPERMITを使用する必要がある場合は、データ型がINTEGERでないディメンションとして再定義してください。

権限の変更が有効となるケース

PERMIT_READプログラムおよびPERMIT_WRITEプログラム内で権限が評価されるのは、PERMIT文またはPERMITRESET文を明示的に発行してからターゲット・オブジェクトを参照したときのみです。

注意:
PERMITRESETは、アナリティック・ワークスペース権限プログラムの実行直後にAW ATTACHによって自動的に実行されます。PERMITRESETの実行により、ワークスペースはすべての権限が実装されてアタッチされます。

アナリティック・ワークスペースがアタッチされてPERMIT_READプログラムまたはPERMIT_WRITEプログラムが実行されると、PERMIT文で指定した権限変更は次の場合に有効になります。

- PERMITRESET文が実行された場合。

- いずれかのオブジェクト(ディメンションを除く)を対象とし、権限条件が単一のブール変数で構成される場合、そのブール変数に対する変更は権限に即座に反映されます。(この場合、PERMITRESETを実行する必要はありません。)

- その他の状況では、PERMITRESET文を発行しない場合、権限はオブジェクトを次回参照するときに評価されます。

注意:
OBJファンクションはこのルールの例外です。OBJではオブジェクトがメモリーにロードされないので、オブジェクトの権限に対して前回のロード時以降に加えられた変更は反映されません。新しい権限基準に基づいた情報がOBJから返されるようにするには、OBJ文の前にLOAD文を実行します。

オブジェクトに対する唯一のPERMIT文がPERMIT WRITE文の場合

オブジェクトに対する唯一のPERMIT文がPERMIT WRITEの場合、そのオブジェクトにはデフォルトで読取り権限が付与されます。デフォルトの読取り権限は、PERMIT WRITE文の権限条件の値とは関係なく付与されます。したがって、単一セルの権限条件を持つPERMIT_WRITEの評価結果がNOであっても、ディメンション化されたオブジェクトのすべての値、またはディメンション化されないオブジェクトに対する読取り専用アクセスは可能です。

オブジェクトに対する唯一のPERMIT文が、ディメンション化された権限条件を持つPERMIT WRITEの場合、この文によって、読取り/書込みアクセスが指定される値、および読取り専用アクセスが指定される値があります。例10-73「変数の権限」を参照してください。

ディメンション権限と他のオブジェクトに対する権限の相互作用

ディメンション化されたすべてのデータは、そのディメンションの読取り権限に影響されます。読取り権限条件を満たすディメンション値によって、ディメンションのデフォルトのステータスが決まります。読取り権限のないディメンション値に対応するディメンション化されたオブジェクトの値にはアクセスできません。

ただし、ディメンションに関連付けられている書込み権限をそのディメンションによってディメンション化された他のオブジェクトに適用するには、そのディメンション化オブジェクトに関連付けられているPERMIT文が1つ以上存在する必要があります。

- ディメンション化オブジェクトにディメンションの書込み権限を継承させたいが、そのオブジェクト自体の権限は設定したくない場合は(ディメンション権限と相互作用する可能性があるため)、評価結果がYESとなる単一セルの権限条件を指定したPERMIT READを使用します。

- ディメンション化オブジェクトにディメンションの書込み権限を継承させると同時にそのオブジェクト自体の権限も設定する場合は、ディメンションの権限とオブジェクトの権限がどのように影響し合うかを理解した上でオブジェクトの権限を設定してください。

ディメンション権限と、そのディメンションによってディメンション化された大部分のオブジェクトの権限は、次のように相互作用します。

- ディメンションのアクセス権が、ディメンションに定義されているすべてのディメンション・サロゲートに適用されます。ディメンション・サロゲートでは、PERMIT文を使用できません。

- ディメンションと関連付けられている読取り権限または書込み権限が存在するが、そのディメンションによってディメンション化されたオブジェクトに関連付けられている権限の制限はない場合、ディメンション化されたオブジェクトの権限は、ディメンションの権限と同じになります。

- ディメンションとディメンション化されたオブジェクトの両方に関連付けられている読取り権限が存在する場合、ディメンション内にある読取り権限を持つ値およびオブジェクト内にある読取り権限を持つ値との共通部分を取ることにより、オブジェクト内にある読取り権限を持つ値が決定されます。

- ディメンションとディメンション化されたオブジェクトの両方に関連付けられている書込み権限が存在する場合、ディメンション内にある読取り権限を持つ値、ディメンション内にある書込み権限を持つ値、およびオブジェクト内にある書込み権限を持つ値の共通部分を取ることにより、オブジェクト内にある書込み権限を持つ値が決定されます。

ただし、リレーションと値セットについてはこれは当てはまりません。リレーションまたは値セットのディメンションに対して制限付きの書込み権限が設定されていても、そのディメンションによってディメンション化されるリレーションおよび値セットには影響しません。

権限の判別

DESCRIBE文を使用してオブジェクトを記述する場合、LDのように、オブジェクトに関連付けられている権限が表示されます。唯一の例外は、オブジェクトの許可権限を拒否される場合です。この場合は、オブジェクトを記述しても権限は表示されません。

スコーピング・ツールとしてのPERMITのLIMITに対するメリット

アプリケーション・プログラム内のスコーピング・ツールとして、PERMITにはLIMITコマンドよりも有利な点がいくつかあります。ブール式に従ってディメンション化されたオブジェクトのスコープを制限するには、LIMITおよびLIMITKEEPという2つのLIMIT文を使用する必要があります。同じ処理を実行するために必要なPERMIT文は1つのみです。さらに、アプリケーションのユーザーはアプリケーション・プログラム内のPERMITコマンドで設定された制限付きスコープを変更できません。アプリケーション・プログラム内のLIMITコマンドによって設定されたスコープは、アプリケーションのユーザーが多くのLIMITコマンドを実行するのみで簡単に変更できます。

権限違反の処理

PERMITERRORオプションを使用すると、PERMITコマンドによって設定された変数への権限に違反した場合のOracle OLAPによる処理方法を制御できます。PERMITERRORのデフォルト値はYESで、権限が拒否されている値にユーザーがアクセスしようとするとOracle OLAPによってエラーが通知されることを意味します。PERMITERRORをNOに設定すると、エラー条件が通知されることなくアクセスが拒否されるため、この設定は、ディメンションを許可される値にあらかじめ制限することなく、部分的な権限を持つディメンション化された変数のレポートを作成する場合に役立ちます。PERMITERRORの設定がNOである場合、読取り権限のない値はレポートにNA値として表示されます。

例

例10-73 変数の権限

month、productおよびdistrictによってディメンション化される変数salesに対して、次のレポートに示すように、3つの変数の形式のディメンション化された3つの権限条件があるとします。

MONTH.BOOL<MONTH>  PROD.BOOL<PRODUCT>  DISTRICT.BOOL<DISTRICT>
-----------------  ------------------  -----------------------
Jan95    NO        Tents     YES       Boston     NO
Feb95    YES       Canoes    YES       Atlanta    NO
Mar95    NO        Racquets   NO       Chicago    YES
...      ...       ...        ...      ...        ...

この例で示すYESの値が権限条件に存在するYESの値としてはすべてである場合、次のPERMIT文は、95年2月にシカゴで販売したテントおよびカヌーのsalesデータに対する読取り/書込み権限を付与します。salesに対してPERMIT READ文を指定しなかった場合、Oracle OLAPは他のすべてのsalesの値に対して読取り専用権限を付与します。

PERMIT WRITE WHEN district.bool BY prod.bool BY month.bool

完全な書込み権限にリストアするには、次のPERMIT文を実行します。

PERMIT WRITE

salesに対する制限付き書込み権限が存在しない場合、次のPERMIT文は、95年2月にシカゴで販売したテントとカヌーの販売データに対する読取り/書込み権限を付与し、他の販売データの値をすべて非表示にします。

PERMIT READ WHEN district.bool BY prod.bool BY month.bool

例10-74 ディメンション化された権限条件

productディメンションへのアクセスを制限するには、productによってディメンション化された権限条件が必要です。ただし、権限条件に2番目のディメンション、たとえばauthorityが存在する場合、PERMITは、authorityのステータスにある最初の値に基づいてproductに関するBOOLEAN値を選択します。authorityディメンションの読取り権限を1つの値に制限すると、PERMITは、その値を使用してproductに対する権限条件のBOOLEAN値を判別します。REPORTコマンドによって、その後に出力が生成されます。

DEFINE authority DIMENSION TEXT
MAINTAIN authority ADD OTHER DBA
DEFINE prod_authority VARIABLE BOOLEAN <product authority>
...
" Assign values to the variable
...
REPORT prod_authority

-----------------PROD_AUTHORITY------------------
--------------------PRODUCT----------------------
AUTHORITY     Tents   Canoes   Racquets   Sportswear   Footwear
---------     -----   ------   --------   ----------   --------
Other            NO       NO        YES          YES        YES
Dba             YES      YES        YES          YES        YES

CONSIDER product
PERMIT READ WHEN prod_authority
PERMITERROR = NO
RPEPORT product

PRODUCT
-------------
Racquets
Sportswear
Footwear

CONSIDER authority
PERMIT READ WHEN AUTHORITY EQ 'dba'
PERMITRESET
Report product

PRODUCT
-------------
Tents
Canoes
Racquets
Sportswear
Footwear

例10-75 ユーザー定義のブール・ファンクション

次の例のusercheckは、変数thisuserの現行値をユーザーIDのリストと照合するユーザー定義のブール・ファンクションです。thisuserの現行値がリストに存在しない場合、usercheckはNOを返します。sales変数に適用される次のPERMIT文は、usercheckの戻り値がNOである場合、salesのすべての値に対する読取り専用権限を付与します。usercheckの戻り値がYESである場合、salesのすべての値に対する読取り/書込み権限を付与します。

PERMIT WRITE WHEN usercheck(thisuser)

price変数に適用される次のPERMIT文は、usercheckの戻り値がYESである場合、priceのすべての値に対する完全な権限を付与します。戻り値がNOである場合、price変数に対するすべての権限を拒否します。

PERMIT READ WHEN usercheck(thisuser)

例10-76 個々のセル

特定の販売数量データ、たとえば、1997年3月のボストンのラケットの販売数量にアクセスできないようにする場合、ブール変数を作成し、これをPERMIT文で次の文に示すように使用します。

DEFINE sales.bool VARIABLE BOOLEAN <month product district>
sales.bool = yes
LIMIT month TO 'Mar97'
LIMIT product TO 'Racquets'
LIMIT district TO 'Boston'
sales.bool = no
CONSIDER sales
PERMIT READ WHEN sales.bool

例10-77 個々のディメンション値

districtディメンションに適用される次のPERMITコマンドは、BostonおよびAtlantaを除くすべてのディメンション値にアクセスできなくします。このコマンドにより、Bostonに関連するすべてのデータに対する読取り/書込み権限が付与され、Atlantaに関連するすべてのデータに対する読取り専用権限が付与されます。また、ファンクションusercheck(例10-75「ユーザー定義のブール・ファンクション」を参照)によって許可されるユーザーIDを持たないユーザーがdistrictの権限を変更できないようにします。

PERMIT READ WHEN district EQ 'Boston' OR district EQ 'Atlanta'
PERMIT WRITE WHEN district EQ 'Boston'
PERMIT PERMIT WHEN usercheck(thisuser)

PERMITRESET

PERMITRESETコマンドは、権限条件の値を再評価するコマンドです。権限条件は、オブジェクトに関連付けられたPERMITコマンドによって使用される基準を指定する、1つ以上のブール式で構成されます。

権限条件は、ディメンション化される場合、権限のターゲットになるディメンション化されたオブジェクトのPERMITの値を示します。単一セルの権限条件では、特定のユーザーがオブジェクトにアクセスできるかどうかなどのブール基準を示すことができます。

あるオブジェクトについて既存のPERMITコマンドを維持するが、PERMITコマンドと関連付けられている権限条件を再評価する場合、PERMITRESET文を発行します。そのオブジェクトの権限は、オブジェクトをOLAP DML文で次回使用するときに、権限条件の新しい値が基準になります。

関連項目:
「起動プログラム」、PERMITコマンドおよびPERMITERRORオプション

構文

PERMITRESET  [object_name]  [READ|WRITE]

パラメータ

object_name

権限条件を再評価するオブジェクトの名前を指定します。オブジェクト名を指定しないと、すべてのオブジェクトの権限条件が再評価されます。

READ

権限条件の再評価を、PERMIT READコマンドのみについて、または指定したオブジェクトのPERMIT READ文について実行します。

WRITE

権限条件の再評価を、PERMIT WRITEコマンドのみについて、または指定したオブジェクトのPERMIT WRITE文について実行します。

例

例10-78 権限のリセット

次の例では、ユーザー定義のブール・ファンクションusercheckによって変数thisuserの現行値が確認され、その値が100より大きい場合にのみYESが返されます。変数uservarへのアクセスは、thisuserが100より大きい場合にのみ許可されます。ただし、uservarの権限をリセットせずにthisuserの値を100以下に変更した場合でも、アクセスが許可されます。

次の文

DESCRIBE uservar

によって、次の出力が生成されます。

DEFINE USERVAR VARIABLE INTEGER
PERMIT READ WHEN usercheck(thisuser)

次の文

SHOW uservar

によって、次の出力が生成されます。

5

次の文

DESCRIBE usercheck

によって、次の出力が生成されます。

DEFINE USERCHECK PROGRAM BOOLEAN
PROGRAM
ARG thisuser INT
TRAP ON errorexit NOPRINT
IF thisuser GT 100
THEN RETURN YES
ELSE RETURN NO
errorexit:
RETURN NO
END

次の文

DESCRIBE thisuser

によって、次の出力が生成されます。

DEFINE THISUSER VARIABLE INTEGER

次の文

SHOW thisuser

によって、次の出力が生成されます。

101

次の文

thisuser = 100
SHOW uservar

によって、次の出力が生成されます。

5

次の文

PERMITRESET luservar READ
SHOW uservar

によって、次のエラーが生成されます。

ERROR: You do not have permission to read this value of USERVAR

POP

POPコマンドは、直前のPUSH文で保存したディメンションのステータス(NAMEディメンションを含む)、値セットのステータス、オプションの値または単一セル変数の値をリストアするコマンドです。

一般にPUSHおよびPOPは、プログラムの実行時にのみ適用されるオプションおよびディメンション・ステータスを変更するときに、プログラム内で使用されます。その後、オプションおよびステータスはプログラムの実行前と同じになります。

関連項目:
POPLEVEL、PUSH、PUSHLEVELおよびCONTEXTコマンド

構文

POP name1 [nameN]

パラメータ

name

保存値をリストアする、直前のPUSH文で指定されたディメンション、値セット、変数またはオプションの名前。

例

POPの使用例は、例10-84「値の保存とリストア」を参照してください。

POPLEVEL

POPLEVELコマンド(省略形はPPL)は、前回のPOPLEVEL文以降に実行された、同じマーカーを指定するPUSHコマンドによって保存されたすべての値をリストアするコマンドです。

POPLEVELを使用して保存値をリストアするには、先にPUSHLEVELを使用して一連のPUSHコマンドの始点をマークしておく必要があります。一連のコマンドの終点は、POPLEVELによってマークされます。POPLEVELは、プログラム内でのみ使用できます

関連項目:
「PUSHLEVELとPOPLEVEL文の作成時の注意事項」、POP、PUSH、PUSHLEVELおよびCONTEXTコマンド

構文

POPLEVEL marker-expression [DISCARD]

パラメータ

marker-expression

マーカーとして使用するテキスト値。この値は、ポップする一連の保存値の始点をマークするために対応するPUSHLEVEL文で使用されている値と一致する必要があります。

DISCARD

POPLEVEL文の発行時に、同じレベルでプッシュされた値が破棄されることを指定します。DISCARDを指定しなかった場合、プッシュされたオブジェクトをリセットするために、プッシュされた値が使用されます。

使用上の注意

POP LEVEL文の可能な使用方法

POPLEVEL文の使用法として考えられるのは、次の2つです。

- 範囲をいっそう広げているか狭めている一連のLIMITコマンドの後。それぞれ対応するPUSHが組み合せて指定されている場合。

- きわめて長く複雑な単独のPUSH文の後、またはプログラム全体に記述されている一連の短いPUSH文の後で、編集に手間がかかる可能性のある場合。PUSHLEVELおよびPOPLEVELを使用すると、長く複雑なPUSH文の引数を編集でき、対応する長く複雑なPOP文を編集する必要もありません。

例

POPLEVELを使用するサンプル・プログラムは、PUSHLEVELコマンドの例を参照してください。

PROGRAM

PROGRAMコマンドは、新規または既存のプログラムにまったく新しい内容を入力するコマンドです。プログラムに複数行のコードがすでに存在する場合、これらは上書きされます。

PROGRAMを使用して、プログラム・オブジェクトの内容を入力するには、プログラム・オブジェクトの定義は最新のもの、または現行のセッション中に検討されたものにする必要があります。そうでない場合は、最初にCONSIDER文を使用し、現行の定義にする必要があります。

PROGRAM文の代替文はEDIT PROGRAM文であり、OLAP Worksheet内でのみ使用できます。EDIT PROGRAM文を実行すると、programオブジェクトの仕様を追加、削除または変更できる編集ウィンドウが開きます。

関連項目:
OLAP DMLプログラムの記述、コンパイルおよびデバッグの詳細は、第6章「OLAP DMLプログラム」を参照してください。

構文

PROGRAM [contents]

パラメータ

contents

プログラムの行を構成するOLAP DML文を表すテキスト式。プログラム内には、ほとんどのOLAP DML文を使用できます。OLAP DMLプログラムの記述、コンパイルおよびデバッグの詳細は、第6章「OLAP DMLプログラム」を参照してください。

プログラム内に記述できる最大の行数は32,000です。コマンドライン・レベルでPROGRAM文をコード化する際は、改行デリミタ(\n)でプログラムの行を分けるか、「即時実行のプログラム」に示すJOINLINESファンクションを使用します。

例

例10-79 引数を持つユーザー定義ファンクション

アナリティック・ワークスペースにunits.planという名前の変数が含まれ、この変数はproduct、districtおよびmonthディメンションによってディメンション化されているとします。この変数は販売予定の製品数を示すINTEGERデータを保持します。

また、units_goals_metという名前のプログラムを定義するとします。このプログラムはユーザー定義ファンクションです。これは、units.plan変数の特定のセルを指定する3つのディメンション値の引数を受け取り、さらに、実際に販売された数量をそのセルに指定する4番目の引数を受け取ります。このプログラムは、コール側プログラムにブール値を返します。実際の販売数量が予定販売数量の10%以内である場合はYESを返し、そうでない場合はNOを返します。

units_goals_metプログラムの定義は、次のとおりです。

DEFINE units_goal_met PROGRAM BOOLEAN
LD Tests whether actual units met the planned estimate
"Program Initialization
ARGUMENT userprod  TEXT
ARGUMENT userdist  TEXT
ARGUMENT usermonth TEXT
ARGUMENT userunits INTEGER
VARIABLE answer boolean
TRAP ON errorlabel
PUSH product district month
"Program Body
LIMIT product TO userprod
LIMIT district TO userdist
LIMIT month TO usermonth
IF (units.plan - userunits) / units.plan GT .10
THEN answer = NO
ELSE answer = YES
"Normal Exit
POP product district month
RETURN answer
"Abnormal Exit
errorlabel:
POP product district month
SIGNAL ERRORNAME ERRORTEXT
END

units_goal_metプログラムを実行し、successという名前の変数に戻り値を格納するには、代入文(SET)を使用します。

success = units_goal_met('TENTS' 'BOSTON' 'JUN96' 2000)

例10-80 即時実行のプログラム

この例は、柔軟な即時実行のレポート・プログラムを作成して、アンパサンド置換を使用した従来型のプログラムの非能率性を回避します。従来型のプログラムには、次のようなループが存在します。

FOR &dimname
ROW &dimname &varname

アンパサンド置換を回避するには、たとえば、STANDARDREPというプログラムを定義し、内部にコードを記述しないままにするか、破棄しても差し支えないコードを記述しておきます。次に、レポート・プログラムに次のような行を挿入します。

DEFINE myreport PROGRAM
LD Program to produce my report
PROGRAM
ARGUMENT dimname TEXT
ARGUMENT varname TEXT
...
CONSIDER standardrep
PROGRAM JOINLINES(JOINCHARS('FOR ', dimname) -
JOINCHARS('   ROW ', dimname, ' ', varname) )
COMPILE standardrep
standardrep
...

例10-81 入力ファイルを基にしたプログラム

この例は、salesrep.infという名前のASCIIディスク・ファイルに記述された簡単なプログラムの本文です。ファイルの最初の行にはプログラムが定義され、2番目の行にはPROGRAM文が含まれ、後続の行にはプログラムの行が記述されています。

DEFINE salesrep PROGRAM
PROGRAM
PUSH month product district
TRAP ON haderror
LIMIT month TO FIRST 3
LIMIT product TO FIRST 3
LIMIT district TO ALL
REPORT grandtotals sales
haderror:
POP month product district
END

salesrepプログラムをアナリティック・ワークスペースに含めるには、次の文を実行します。

INFILE 'salesrep.inf'

既存のプログラムを基にして入力ファイルを作成するには、OUTFILE文を使用します。

例10-82 PROGRAM文のかわりにOLAP Worksheetを使用する場合

OLAP Worksheetを使用してプログラムを作成する場合、EDIT文を使用して、内容を入力できる「編集」ウィンドウを表示できます。たとえば、salesrepという名前の新規プログラムを定義して、これを「編集」ウィンドウに表示するには、次の文を使用します。

DEFINE salesrep PROGRAM
EDIT salesrep

PROPERTY

PROPERTYコマンドは、直近に定義または検討されたオブジェクトに対して、プロパティを追加または削除するコマンドです(DEFINE PROGRAMコマンドおよびCONSIDERコマンドを参照)。プロパティは、特定の定義に関連付けられた名前付きの値です。あらゆる種類の定義に対して、1つ以上のプロパティを割り当てることができます。たとえば、プロパティはオブジェクトに割り当てることができるので、オブジェクトのレポートを準備する場合、使用する小数点以下の桁数を確認できます。

構文

PROPERTY { name value | DELETE {ALL | name} }

パラメータ

name

プロパティの名前が含まれるテキスト式。プロパティ名の長さは1から256バイトです。

重要:
$(ドル記号)で始まる名前を持つ独自のプロパティは作成しないでください。Oracle OLAPでは、$(ドル記号)で始まる名前を持つプロパティは、あらかじめ定められた方法で解釈されるシステム・プロパティとして使用されるため、システムに予約されています。

プロパティ名のデータ型はTEXTです。ただし、名前に指定する値にUnicodeエスケープ・シーケンスを含める場合や、指定した値をCONVERTまたはTO_NCHARファンクションを使用して明示的にNTEXTに変換した場合は異なります。

value

プロパティの値が含まれる式。プロパティ値のデータ型は、NUMBER、INTEGER、LONGINTEGER、DECIMAL、SHORTDECIMAL、TEXT、NTEXT、ID、BOOLEAN、DATEまたはDATETIMEです。Oracle OLAPでは、指定した値に基づいてデータ型が判別されます。たとえば、YESを指定すると、データ型はBOOLEANであるとみなされます。データ型DATEの変数に格納される日付値を指定すると、そのプロパティのデータ型はDATEであるとみなされます。

DELETE ALL

DELETE name

オブジェクトのプロパティをすべて削除するか、nameに指定したプロパティのみを削除します。一度に指定できるnameは1つのみです。

使用上の注意

PROPERTYの実行時におけるプログラム実行のトリガー

TRIGGERコマンドを使用すると、PROPERTY文を、OLAP DMLプログラムを自動的に実行するイベントにすることができます。詳細は、「トリガー・プログラム」を参照してください。

プロパティ値の変更

新しい値を既存のプロパティ名に割り当てるPROPERTY文を実行すると、以前の値は新しい値によって上書きされます。

OBJによるプロパティ値の判別

プロパティをOLAP DML文で使用するには、OBJファンクションのプロパティ関連キーワードを使用して、プロパティの値を取得する必要があります。たとえば、オブジェクトのレポート時に使用するために小数点以下の桁数を格納するdecplaceという名前のプロパティがあるとします。REPORT文を実行する場合、OBJファンクションとPROPERTYキーワードを組み合せて使用することによってdecplaceプロパティの値を取得し、その値をREPORT文のDECIMAL属性と組み合せて使用できます。

FULLDSCによるプロパティ値のリスト表示

オブジェクトのプロパティをリスト表示するには、FULLDSC文を使用します。FULLDSCからの出力を使用すると、新しいオブジェクトを作成できます。詳細は、FULLDSCプログラムを参照してください。

例

例10-83 変数へのプロパティの追加

次の文は、プロパティdecplaceおよびprgnameをactual変数に追加し、decplaceプロパティの値としてdecimal 4を割り当て、prgnameプロパティの値としてテキストrepprgを割り当てます。

CONSIDER actual
PROPERTY 'decplace' 4
PROPERTY 'prgname' 'repprg'

PUSH

PUSHコマンドは、ディメンション(NAMEディメンションを含む)の現行のステータス、値セットのステータス、オプションの値または単一セル変数の値を保存するコマンドです。これらの保存値およびステータスは、POP文によって後でリストアできます。

一般にPUSHおよびPOPは、プログラムの実行時にのみ適用されるオプションおよびディメンション・ステータスを変更するときに、プログラム内で使用されます。その後、オプションおよびステータスはプログラムの実行前と同じになります。

関連項目:
POP、POPLEVEL、PUSHLEVELおよびCONTEXTコマンド

構文

PUSH name1 [name]

パラメータ

name

ステータスまたは値を保存する、ディメンション、値セット、オプションまたは変数の名前。

使用上の注意

ディメンションのプッシュされたステータスでのMAINTAIN文の効果

ディメンションを指定してMAINTAIN文を使用すると、ディメンションのプッシュされたステータス・リストが消去されます。たとえば、毎回異なる制限値を使用してディメンションmonthを数回プッシュしたとします。MAINTAIN文を使用してmonthディメンションのメンテナンス・アクティビティを実行すると、monthのステータスはALL(デフォルト)にリセットされ、monthディメンションをポップしても効果がなくなります。

例

例10-84 値の保存とリストア

次のプログラムは、PUSHおよびPOPを使用して、特定の製品、地区および月に関して小数桁のない売上高を表示し、その後、ステータスの設定およびDECIMALSの値をプログラム実行前の状態にリストアします。

DEFINE report1 PROGRAM
PROGRAM
TRAP ON cleanup
PUSH DECIMALS product district month

DECIMALS = 0
LIMIT product TO 'Sportswear' 'Footwear'
LIMIT district TO 'Atlanta' 'Dallas'
LIMIT month TO 'Jan96' TO 'Jun96'
REPORT sales

cleanup:
POP DECIMALS product district month
END

PUSHLEVEL

PUSHLEVELコマンドは、一連のPUSHコマンドの始点をマークするコマンドです。対応するPOPLEVEL文を使用すると、PUSHLEVELの後に実行したPUSHコマンドで保存したすべての値をリストアできます。POPLEVELは、一連のコマンドを開始するPUSHLEVEL文と同じマーカーを指定する必要があります。PUSHLEVELは、プログラム内でのみ使用できます。

関連項目:
「PUSHLEVELとPOPLEVEL文の作成時の注意事項」、POP、PUSH、POPLEVELおよびCONTEXTコマンド

構文

PUSHLEVEL marker-expression

パラメータ

marker-expression

すべての保存値が即座にポップされる一連のPUSHコマンドの始点をマークするためのテキスト値。まったく同じmarker-expressionを指定するPOPLEVEL文によって、一連の保存値全体がリストアされます。

使用上の注意

PUSHLEVELとPOPLEVEL文の作成時の注意事項

PUSHLEVEL文をコーディングする際は、次の点に注意してください。

- PUSHLEVELとPOPLEVELのペアは、次のコードに示すように、ペアごとに異なるマーカーを指定するとネストできます。

PUSHLEVEL 'firstlevel'
PUSH PAGESIZE DECIMALS       < saves values in FIRSTLEVEL
...
PUSHLEVEL 'secondlevel'
PUSH month product           < Saves values in SECONDLEVEL
...
POPLEVEL 'secondlevel'       < Restores values in SECONDLEVEL
...
POPLEVEL 'firstlevel'        < Restores values in FIRSTLEVEL

通常は1つのプログラムに複数のレベルは必要ありません。ただし、1つのプログラムが別のプログラムをコールし、それぞれのプログラムに1組のPUSHLEVELおよびPOPLEVELコマンドが含まれる場合、ネストしたレベルが自動的に作成されます。

- 複数のPUSHLEVELコマンドに対して同じマーカーを指定すると、同じマーカーを指定しているPOPLEVEL文によって、最後のPUSHLEVEL文以降に保存された値のみがリストアされます。

- 複数のPUSHLEVELコマンドに対して異なるマーカーを指定すると、いずれかのPUSHLEVEL文のマーカーを指定するPOPLEVEL文によって、そのPUSHLEVEL文以降に保存されたすべての値がリストアされます。この場合、そのPUSHLEVELコマンド以降のPUSHLEVELコマンドの後に保存された値も含みます。

例

例10-85 レベル・マーカーの作成

PUSHLEVEL文を使用して、firstlevelという名前のレベル・マーカーを作成できます。その後でPUSHを使用すると、現行値を保存できます。

PUSHLEVEL 'firstlevel'
PUSH month DECIMALS ZSPELL

レベル・マーカーは、一重引用符で囲まれた任意のテキストです。値がレベル・マーカーの名前になる単一セルのID変数またはTEXT変数の名前を指定することもできます。プログラムの終了処理の部分にPOPLEVEL文を使用すると、firstlevelマーカーの作成以降に保存したすべての値をリストアできます。

POPLEVEL 'firstlevel'

例10-86 PUSHLEVELおよびPOPLEVELコマンドのネスト

PUSHLEVELおよびPOP LEVELコマンドをネストすると、特定の値のグループをプログラム内の一定の場所に保存し、他の値のグループをプログラム内の別の場所に保存できます。次の例は、2組のネストしたPUSHLEVELコマンドとPOPLEVELコマンドを示します。

PUSHLEVEL 'firstlevel'
PUSH PAGESIZE DECIMALS "Saves values in FIRSTLEVEL
...
PUSHLEVEL 'secondlevel'
PUSH month product     "Saves values in SECONDLEVEL
...
POPLEVEL 'secondlevel' "Restores values in SECONDLEVEL
...
POPLEVEL 'firstlevel'  "Restores values in FIRSTLEVEL

通常は、1つのプログラム内でPUSHLEVELおよびPOPLEVELコマンドの複数のペアを使用することはありません。ただし、1つのプログラムが別のプログラムをコールし、それぞれのプログラムにPUSHLEVELおよびPOPLEVELコマンドのペアが1組ずつ含まれる場合、ネスト機能が自動的に働きます。

例10-87 ワンステップの復元とネスト・レベル

次のプログラムは、PUSHLEVEL 'rpt1'を使用して、プログラム内で個別にプッシュされているDECIMALSの元の値やmonth、productおよびdistrictの元のステータスをワンステップで復元するためにマークします。

ネストを実際に示すため、このプログラムには、'rpt2'をマーカーとするネストしたPUSHLEVELとPOPLEVELのペア、および様々な箇所にあるいくつかのSTATUSコマンドが含まれています。プログラムの出力とプログラムを比較することにより、ステータスがどのように影響を受けているかがわかります。

DEFINE sales.RPT PROGRAM
PROGRAM
STATUS month product district

PUSHLEVEL 'rpt1'
PUSH DECIMALS month
DECIMALS = 0
LIMIT month TO 'Jan96'
REPORT WIDTH 8 DOWN district WIDTH 9 ACROSS product: expense
PUSH product
LIMIT product TO 'Racquets' 'Sportswear'
REPORT DOWN district ACROSS product: advertising

PUSHLEVEL 'rpt2'
PUSH district
LIMIT district TO 'Atlanta' 'Dallas' 'Chicago'
REPORT DOWN district ACROSS product: sales
BLANK
STATUS month product district
BLANK

POPLEVEL 'rpt2'
STATUS month product district
BLANK
POPLEVEL 'rpt1'

STATUS month product district
END

sales.rptプログラムによって生成される出力は、次のとおりです。

The current status of MONTH is:
ALL
The current status of PRODUCT is:
ALL
The current status of DISTRICT is:
ALL
MONTH: JAN96
---------------------EXPENSE---------------------
---------------------PRODUCT---------------------
DISTRICT   Tents    Canoes   Racquets  Sportswear  Footwear
-------- --------- --------- --------- ---------- ----------
Boston      31,299    67,527    52,942     49,668    80,565
Atlanta     41,139    53,186    57,159    108,047    99,758
Chicago     27,768    45,621    53,756     65,055    81,639
Dallas      47,063    34,072   118,807    113,629    19,785
Denver      33,177    42,975    89,144     63,380    36,960
Seattle     41,043    64,009    26,719     38,970    46,900
Month: JAN96
-----ADVERTISING-----
-------PRODUCT-------
DISTRICT        RAcquets  Sportswear
-------------- ---------- ----------
Boston              3,784      3,352
Atlanta             4,384      9,509
Chicago             3,351      5,283
Dallas              8,700      8,340
Denver              6,215      4,654
Seattle             2,344      3,726
MONTH: Jan96
--------SALES--------
-------PRODUCT-------
DISTRICT        Racquets  Sportswear
-------------- ---------- ----------
Atlanta            61,895    129,616
Dallas            125,880    128,115
Chicago            58,649     77,490
The current status of MONTH is:
JAN96
The current status of PRODUCT is:
RACQUETS, SPORTSWEAR
The current status of DISTRICT is:
ATLANTA, DALLAS, CHICAGO

The current status of MONTH is:
JAN96
The current status of PRODUCT is:
RACQUETS, SPORTSWEAR
The current status of DISTRICT is:
ALL

The current status of MONTH is:
ALL
The current status of PRODUCT is:
ALL
The current status of DISTRICT is:
ALL

RECAP

RECAPコマンドは、現行セッション中に以前に入力した文を現行の出力ファイルまたは指定したファイルに送信するコマンドです。この文は、現在のセッション中の最後に入力した最大256の文のリストであるコマンド・ログからコピーされます。

注意:
RECAP文は、コマンド・ログには含まれません。

構文

RECAP [number|ALL] [ 'search-text' ] [ FILE file-name ]

パラメータ

number

送信される文の数を示す正のINTEGER。search-textを指定した場合、search-text文字列が含まれるサブセットからこの数の文が送信されます。search-textを指定しなかった場合、コマンド・ログのうち最近実行された部分からこの数の文が送信されます。デフォルトの数は10です。

ALL

search-textを指定した場合、ALLを指定すると検索要件を満たす文がすべて要求されます。search-textを指定しなかった場合、ALLを指定するとコマンド・ログ内のすべての文が要求されます。

search-text

引用符で囲まれたテキスト・リテラル。この引数を指定すると、search-textが含まれる文がコマンド・ログ内の文の中から検索されます。検索では、大/小文字は区別されません。その後、これらの文はサブセットを構成し、そこからRECAPはnumberまたはALLに指定される数の文を送信します。

FILE file-name

RECAP文の出力を指定のファイルに書き込みます。file-nameは出力が書き込まれるファイルの名前を表すテキスト式を指定します。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。

注意:
ディレクトリ・オブジェクトはデータベースで定義され、ディレクトリおよびディレクトリ内のファイルへのアクセスを制御します。CDA文を使用して、カレント・ディレクトリ・オブジェクトを特定および指定できます。使用するデータベース・ユーザー名で読取りおよび書込み可能なファイルがあるディレクトリ・オブジェクトへのアクセス権については、Oracle DBAに問い合せてください。

使用上の注意

search-textパラメータの順序

search-text引数に加えてALL引数またはnumber引数を使用する場合、search-textは2番目に指定する必要があります。

パラメータを指定しないRECAP

引数のないRECAPを指定した場合、最近の10の文が送信されます。

文の再実行

以前に実行した文をREEDITによって編集するため、または以前に実行した文をREDOによって再実行するため、RECAPの出力を使用できます。

ファイルとディレクトリの指定

OLAP DML文でファイルやディレクトリを指定する場合、必ず一重引用符で囲むことをお薦めします。

例

例10-88 「actual」を含む最新の3つの文の取得

次のRECAP文は、テキスト・リテラル「actual」を含む最新の3つの文を要求します。

RECAP 3 'actual'

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

COMMAND LOG
3: dsc actual
5: report total(actual)
8: report average(actual)

REDO

REDOコマンドは、セッション内で以前に入力した文を再度実行するコマンドです。この文は、現在のセッション中に最近入力した最大256の文のリストであるコマンド・ログから取り出されます。REDOでは、文を再実行する前に文を変更できます。

注意:
REDO文自身はコマンド・ログに含まれませんが、REDOによって再実行された文は含まれます。

構文

REDO [number|index] 'original' 'replacement' [specifier]

パラメータ

number

再実行される文の数を示す正のINTEGER。文とその番号を表示するには、RECAP文を使用します。

index

コマンド・ログの末尾を基準とする、再実行される文の位置を示す負のINTEGERまたは0(ゼロ)。最新の文は0、その1つ前は-1です(以降同様)。デフォルト値は0です。

original

再実行される文の一部を表すテキスト・リテラル。

replacement

文が再実行されるときにoriginalを置換するテキスト・リテラル。

specifier

表10-2「REDO指定子の有効な値」に示す指定子。各指定子は、再実行される文でテキスト置換が行われる場所を示します。

表10-2 REDO指定子の有効な値

指定子

意味

FIRST

originalの最初の出現箇所のみをreplacementに変更することを指定する。

LAST

originalの最後の出現箇所のみをreplacementに変更することを指定する。

n

replacementに変更するoriginalの出現箇所を示す数。たとえば、3は3番目の出現箇所を示す。

ALL

originalのすべての出現箇所をreplacementに変更することを指定する。

*

originalのすべての出現箇所をreplacementに変更することを指定する。

デフォルトはALLです。指定子を指定しなかった場合、originalのすべての出現箇所がreplacementに変更されます。

使用上の注意

引数を指定しないREDO

引数のないREDOを指定した場合は、最新の文が再実行されます。

大文字と小文字の区別

再実行される文のテキストとoriginalの比較では、REDOは大文字と小文字を区別しません。たとえば、originalとしてATを指定すると、REDOでは、文中のat、At、aT、ATのいずれにも一致します。

originalをreplacementと置換する場合、REDOではreplacementのすべての文字について大文字と小文字の違いが維持されます。たとえば、ShOwをreplacementとして指定すると、再実行される文でもこれと同じです。

例

例10-89 レポートの再実行

次の出力は、recap 2文の結果です。

COMMAND LOG
6: fetch w 20 down division total(actual)
7: listnames

次のREDO文は、異なる変数でFETCH文を再実行します。

REDO 6 'actual' 'budget'

REEDIT

REEDITコマンドは、セッション内で以前に入力した文を編集するコマンドです。この文は、現在のセッション中に最近入力した最大256の文のリストであるコマンド・ログから取り出されます。REEDITを使用すると、文を実行せずに変更できるので、順次編集が可能になります。

REDOコマンドは、REEDITに似ていますが、文の編集後にその文が実行されます。

注意:
REEDIT文自身はコマンド・ログに含まれませんが、REEDITによって再実行された文は含まれます。

構文

REEDIT [number|index] 'original' 'replacement' [specifier]

パラメータ

number

編集される文の番号を示す正のINTEGER。文とその番号を表示するには、RECAP文を使用します。

index

コマンド・ログの末尾を基準とする、編集される文の位置を示す負のINTEGERまたは0(ゼロ)。最新の文は0、その1つ前は-1です(以降同様)。デフォルト値は0です。

original

編集される文の一部を表すテキスト・リテラル。

replacement

文が編集されるときにoriginalを置換するテキスト・リテラル。

specifier

表10-3「REEDIT指定子の有効な値」に示す指定子。各指定子は、編集される文でテキスト置換が行われる場所を示します。

表10-3 REEDIT指定子の有効な値

指定子

意味

FIRST

originalの最初の出現箇所のみをreplacementに変更することを指定する。

LAST

originalの最後の出現箇所のみをreplacementに変更することを指定する。

n

replacementに変更するoriginalの出現箇所を示す数。たとえば、3は3番目の出現箇所を示す。

ALL

originalのすべての出現箇所をreplacementに変更することを指定する。

*

originalのすべての出現箇所をreplacementに変更することを指定する。

デフォルトはALLです。指定子を指定しなかった場合、originalのすべての出現箇所がreplacementに変更されます。

使用上の注意

number引数またはindex引数を指定しないREEDIT

numberまたはindexのないREEDITを指定した場合、最新の文が編集されます。

大文字と小文字の区別

編集される文のテキストとoriginalの比較では、REEDITは大文字と小文字を区別しません。たとえば、originalとしてATを指定すると、REEDITでは、文中のat、At、aT、ATのいずれにも一致します。

originalをreplacementと置換する場合、REEDITではreplacementのすべての文字について大文字と小文字の違いが維持されます。たとえば、ShOwをreplacementとして指定すると、編集される文でもこれと同じです。

例

例10-90 LIMITコマンドの複数の値の編集

次の例は、REEDIT文を使用して文を複数回編集してから実行する効果を示します。REEDITコマンドを使用すると、LIMITコマンドを実行する前にその複数の値を編集できます。LIMITコマンドは、REDO文を入力すると実行されます。

次の出力は、recap 1という文の結果です。

COMMAND LOG
6: limit mydim to 1 to 10, 15 to 20, 24 to 28, 33 to 40

次の文

REEDIT 6 '1' '2' FIRST

によって、次の出力が生成されます。

7: limit mydim to 2 to 10 , 15 to 20, 24 to 28, 33 to 40

次の文

REEDIT 7 '15' '18'

によって、次の出力が生成されます。

8: limit mydim to 2 to 10 , 18 to 20, 24 to 28, 33 to 40

次の文

REDO 8 '40' '41'

もう一度変更され、新しい値のLIMITコマンドが再実行されます。また、この文によって次の出力が生成されます。

9: limit mydim to 2 to 10 , 18 to 20, 24 to 28, 33 to 41

REGRESS

REGRESSコマンドは、単純な多重線形回帰を計算するコマンドです。オプションのWEIGHTBYキーワードを指定すると、一部のデータ・ポイントがその他のデータ・ポイントよりも信頼性が高い場合に加重回帰を計算できます。

その後、REGRESS.REPORTを実行すると、回帰の標準レポートを作成できます。また、INFOファンクションを使用して、独自にカスタマイズしたレポートまたはさらに詳細な分析に使用するために結果を部分的に取得することもできます。

ヒント:
より複雑な回帰分析を実行するには、「予測プログラム」に示す予測コンテキストを使用します。

構文

REGRESS [NOINTERCEPT] dependent independent... [WEIGHTBY weight]

パラメータ

NOINTERCEPT

回帰方程式の定数項(切片)を抑制します。デフォルトは定数項を計算します。

dependent

回帰の従属変数として使用する式。

REGRESSでは、結果の計算中に従属変数と独立変数のすべてのディメンションをループします。

independent

回帰分析の独立変数(リグレッサ)として使用する1つ以上の式。

WEIGHTBY weight

加重回帰を指定します。数式weightには、データ・ポイント(測定値)ごとの加重を指定します。信頼性のある測定値に大きな加重を付けると、品質の高い回帰結果が得られます。WEIGHTBYは、REGRESSコマンドの最後に置く必要があります。

すべての測定値のweightがゼロ未満の場合は、エラーが発生します。いずれかの測定値でweightがゼロに等しい場合、その測定値は計算から除外されます。WEIGHTBYを省略すると、加重されない回帰が計算されます。

使用上の注意

NA値の無視

REGRESSコマンドでは、その計算中、NA値である測定値が無視されます。

標準レポートの生成

回帰の標準レポートには、独立変数ごとに係数、標準誤差およびT-比率が示され、さらに、R-2乗値、F-統計量、測定値の数、回帰の予測の標準誤差も示されます。このレポートを生成するには、次のように入力します。

REGRESS.REPORT

結果の取得

独自のレポート作成またはさらに詳細な分析のためにREGRESSの結果の一部を取得する方法については、INFO文を参照してください。

例

例10-91 単純な回帰

次の文は、productディメンションをCanoesに制限し、回帰を使用してカヌーの販売に対する広告、価格および経費の影響を調べます。

LIMIT product TO 'Canoes'
REGRESS NOINTERCEPT sales advertising price expense

次に、例10-93「単純な回帰のレポート」に示すようにREGRESS.REPORTを実行すると、この回帰の結果を参照できます。

例10-92 加重回帰

次の文は、加重回帰を使用します。この場合、次の定義と値を持つreliabilityという名前の変数を使用して地区が加重されます。

DEFINE reliability VARIABLE DECIMAL <district>

DISTRICT       RELIABILITY
-------------- -----------
Boston                1.00
Atlanta               0.90
Chicago               1.00
Dallas                0.80
Denver                0.90
Seattle               0.60

次の文により回帰が実行されます。

REGRESS NOINTERCEPT sales advertising price expense -
WEIGHTBY reliability

次に、例10-93「単純な回帰のレポート」に示すようにREGRESS.REPORTを実行すると、この回帰の結果を参照できます。

REGRESS.REPORT

REGRESS.REPORTプログラムは、REGRESSコマンドを使用して実行した回帰の標準レポートを生成するプログラムです。

構文

REGRESS.REPORT

例

例10-93 単純な回帰のレポート

例10-91「単純な回帰」に示す単純な回帰を実行したとします。REGRESS.REPORTを実行すると、回帰の結果を参照できます。

Regression Analysis
===================

Dependent Variable: SALES
WEIGHTBY Variable: NONE

Regressor                Coefficient      Std. Error     T-ratio
--------------------    ------------    ------------    --------
ADVERTISING                     0.36            0.16        2.24
PRICE                          -8.66            1.80       -4.82
EXPENSE                         1.05            0.01       79.69

Corrected R-square                   1.00
F-Statistic (2, 141)                   NA
Number of observations                144
Standard error of estimate       1,477.16

例10-94 加重回帰のレポート

例10-92「加重回帰」に示す単純な回帰を実行したとします。REGRESS.REPORTを実行すると、回帰の結果を参照できます。

Regression Analysis
===================

Dependent Variable: SALES
WEIGHTBY Variable: RELIABILITY

Regressor                Coefficient      Std. Error     T-ratio
--------------------    ------------    ------------    --------
ADVERTISING                     0.44            0.17        2.64
PRICE                          -8.03            1.92       -4.19
EXPENSE                         1.04            0.01       76.45

Corrected R-square                   1.00
F-Statistic (2, 141)                   NA
Number of observations                144
Standard error of estimate       1,373.15

RELATIONコマンド

RELATIONコマンドは、任意のリレーションを現行オブジェクトの指定ディメンションのデフォルト・リレーションとして指定したり、現行オブジェクトからデフォルト・リレーション情報を削除するコマンドです。デフォルトのリレーションの詳細は、「式における関連ディメンションの使用方法」を参照してください。

注意:
RELATIONコマンドと、ALLOCMAPやAGGMAPのRELATION文とを混同しないでください。

構文

RELATION {dimension-name relation-name }| DELETE { ALL | dimension-name}

パラメータ

dimension-name

事前定義のディメンションの名前。dimension-name引数で指定するディメンションは、デフォルトのリレーションを指定または削除する現在検討中のオブジェクトのディメンションである必要があります。

注意:
dimension-name引数で指定するディメンションは、現在検討中のオブジェクトのディメンションである必要があります。現行オブジェクトは、現行セッションで最も新しく定義したオブジェクトか検討しているオブジェクトです。オブジェクト定義を現行定義にするには、CONSIDER文を使用します。

relation-name

dimension-nameで指定されたディメンションのデフォルト・リレーションとして使用される事前定義のリレーションの名前。

DELETE

事前に指定したデフォルト・リレーション情報の削除を指定します。

ALL

事前に定義したデフォルト・リレーション情報をすべて削除します。

使用上の注意

Oracle OLAPでの複数リレーション間の選択方法

2つのディメンション間で複数のリレーションが存在し、関連ディメンションに基づいてそれらのディメンションの1つで計算を実行する場合、Oracle OLAPでは、文の実行時に使用するリレーションが次のように選択されます。

1. 文に指定されているリレーションが使用されます(ある場合)。

2. ディメンションのデフォルトのリレーションが使用されます。Oracle OLAPでは、デフォルトのリレーションは次のように決定されます。

1. RELATIONコマンドを使用してデフォルトのリレーションを指定した場合、Oracle OLAPでは、そのリレーションがデフォルトのリレーションとして認識されます。

2. RELATIONコマンドを使用してデフォルトのリレーションを指定していない場合、Oracle OLAPでは、最初に定義したリレーションがデフォルトのリレーションとして認識されます。

デフォルトのリレーションの確認

OBJファンクションをRELATIONキーワードとともに使用すると、オブジェクトのデフォルト・リレーション情報を確認できます。

同じオブジェクトに対する複数のRELATIONコマンド

最後に検討されたオブジェクトに対して処理を行う文(LD文など)とは異なり、RELATIONコマンドを新たに発行しても、事前に発行されたRELATIONコマンドは置き換えられません。かわりに、同じオブジェクトに対して複数のRELATIONコマンドが発行されることになり、累積的な効果が得られます。

例

例10-95 RELATIONコマンドを使用したデフォルト・リレーションの指定

次のアナリティック・ワークスペース・オブジェクトを(次の順序で)定義したとします。

DEFINE CITY DIMENSION TEXT
DEFINE DISTRICT DIMENSION TEXT
DEFINE CITY_DISTRICT RELATION DISTRICT <CITY>
DEFINE CITY_REDISTRICT_1 RELATION DISTRICT <CITY>

REPORT city_district
CITY                    CITY_DISTRICT
-------------------- --------------------
Annapolis            Southern
Bethesda             Southern
Charlotte            Southern
Gettysburg           Southern
Greensboro           Southern
Raleigh              Southern
Reston               Southern
Rochester            Southern
Virginia Beach       Southern
Washington           Capital

REPORT city_redistrict_1
CITY                  CITY_REDISTRICT_1
-------------------- --------------------
Annapolis            Capital
Bethesda             Capital
Charlotte            Southern
Gettysburg           Southern
Greensboro           Southern
Raleigh              Southern
Reston               Southern
Rochester            Southern
Virginia Beach       Capital
Washington           Capital

次のOBJ文が示すように、city_districtリレーションがcityとdistrictとの間のデフォルトのリレーションです。これは、city_districtリレーションがcityとdistrictとの間で定義された最初のリレーションであり、RELATION文でデフォルトのリレーションが指定されていないためです。

SHOW OBJ (RELATION ACTUAL 'city' 'district')
CITY_DISTRICT

SHOW OBJ (RELATION SPECIFIED 'city' 'district')
NA

ここで、次の文を発行し、districtをWashingtonに制限し、city_redistrict_1リレーションをデフォルトのリレーションにするとします。

LIMIT city TO district
CONSIDER city
RELATION city city_redistrict_1

次のOBJ文が示すように、ここで、RELATION文で指定したcity_redistrict_1リレーションがcityとdistrictとの間のデフォルトのリレーションになります。

SHOW OBJ (RELATION ACTUAL 'city' 'district')
CITY_REDISTRICT_1
SHOW OBJ (RELATION SPECIFIED 'city' 'district')
CITY_REDISTRICT_1

また、次の文が示すように、cityをdistrictに制限すると、cityをcity_redistrict_1リレーションに制限したのと同じ結果が得られます。

LIMIT city TO district

REPORT city
CITY
--------------------
Annapolis
Bethesda
Virginia Beach
Washington

LIMIT city to ALL
LIMIT city to city_redistrict_1

REPORT city
CITY
--------------------
Annapolis
Bethesda
Virginia Beach
Washington

RELEASE

アナリティック・ワークスペースがマルチライタ・モードでアタッチされている場合、RELEASEコマンドは、指定の変数、リレーション、値セット、ディメンションまたは変数の1つ以上のパーティションのアクセス・モードを読取り/書込み(取得)アクセスから読取り専用アクセスに変更します。

ヒント:
「マルチライタ・モードでアタッチされたアナリティック・ワークスペースの管理」

構文

RELEASE objects

パラメータ

objects

解放する1つ以上の変数、リレーション、値セット、ディメンションの名前またはアナリティック・ワークスペースの名前(カンマ区切り)。パーティション変数の個々のパーティションを指定するには、次の構文を使用します。

variable_name (PARTITION partition_name [, PARTITION partition_name ]...)

各アナリティック・ワークスペース名の前にはAWを付けます(次の構文を使用)。

AW analytic workspace name

このリストから1つのアナリティック・ワークスペースを指定すると、そのアナリティック・ワークスペースのすべての取得済オブジェクトは、保留されているすべての変更が適用された後に解放されます。RELEASE文の実行前の変数、リレーション、値セットまたはディメンションに加えられたすべての変更は、RELEASE文の実行後にプライベートな変更として保存されます。

使用上の注意

未更新または未コミットのオブジェクトの解放

更新されているアナリティック・ワークスペースに対してAW DETACH文を使用するのと似ています。更新したオブジェクトに対してRELEASEを使用しても、そのトランザクションをコミットまたはロールバックするまで、他のユーザーはそのオブジェクトを取得できません。what-if変更をさらに進め、後でUPDATEを使用して取得済のすべての変数を更新する場合に、更新済のオブジェクトをコミット前に解放するのには役立ちます。

ディメンションの解放によるディメンションの回復

取得済のディメンションを解放すると、そのディメンションは自動的に回復します(ディメンションの回復の意味については、REVERTコマンドを参照)。

次のコードに示すように、取得済のディメンションを解放すると自動回復されます。

ユーザーAが次のOLAP DML文を発行します。

AW ATTACH myworkspace MULTI
ACQUIRE RESYNC time WAIT
MAINTAIN time ADD 'Y2002'
actuals (time 'Y2002', ...) = 37
REPORT time --> ..., 'Y2002'
... report
SHOW actuals (time 'Y2002', ...) --> 37
RELEASE time
REPORT time --> ... (no 'Y2002')
AW ATTACH myworkspace MULTI
... report
ACQUIRE RESYNC actuals, time WAIT
MAINTAIN time ADD 'Y2002'
actuals (time 'Y2002', ...) = 37
REPORT time --> ..., 'Y2002'
SHOW actuals (time 'Y2002', ...) --> 37
... report
REVERT time
REPORT time --> ... (no 'Y2002')
MAINTAIN time ADD 'Y2002'
... report
REPORT time --> ..., 'Y2002'
SHOW actuals (time 'Y2002', ...) --> NA
... report

例

例10-96 2人のユーザーによる同じアナリティック・ワークスペースの異なるオブジェクトの変更

マルチライタ・アタッチ・モードの従来の使用法では、2人のユーザーが同じアナリティック・ワークスペース内にある異なる2つのオブジェクトを変更できます。たとえば、アナリティック・ワークスペースに2つの変数actualsおよびbudgetがあるとします。ユーザーAがactualsを変更し、ユーザーBがbudgetを変更しようとします。この場合、アナリティック・ワークスペースをマルチライタ・モードでアタッチした後、各ユーザーは必要な変数を取得して必要な変更を行い、変更を更新およびコミットしてから、ワークスペースをデタッチするか、取得した変数を解放します。

ユーザーAは次の文を実行します。

AW ATTACH myworkspace MULTI
ACQUIRE actuals
... make modifications
UPDATE MULTI actuals
COMMIT
RELEASE actuals
AW DETACH myworkspace

一方で、ユーザーBは同時に次の文を実行します。

AW ATTACH myworkspace MULTI
ACQUIRE budget
... make modifications
UPDATE MULTI budget
COMMIT
RELEASE budget
AW DETACH myworkspace

例10-97 UPDATE後のCOMMIT前に使用するRELEASE

RELEASE文を使用しても、解放済の変数を必ずしも他のユーザーが取得できるとは限りません。たとえば、変数を更新したが変更をコミットしなかった場合、RELEASE文を実行してもコミットが実行されるまでは他のユーザーにとって効果はありません。ただし、単純なUPDATEを使用して取得済のすべての変数を更新すると、変数の更新後ではあるがコミットより前に変数を解放するのに役立ちます。最初の更新後に変数を解放すると、この変数は2回目の更新時には更新済変数のリストに含まれなくなります。次のコードでは、ユーザーB1が様々なタイミングでbudgetを解放する状況を示しています。

ユーザーB1が次の文を発行するとします。

AW ATTACH myworkspace MULTI
ACQUIRE RESYNC budget WAIT
make changes C1
RELEASE budget
UPDATE
make changes C2
UPDATE
COMMIT

ユーザーB2が次の文を発行します。

AW ATTACH myworkspace MULTI
ACQUIRE RESYNC budget WAIT

ユーザーB2はbudgetを取得して変更がないことを確認し、次の文を発行します。

...
AW ATTACH myworkspace MULTI
ACQUIRE RESYNC budget WAIT
make changes C1
UPDATE
RELEASE budget
make changes C2
UPDATE
COMMIT
...
AW ATTACH myworkspace MULTI
ACQUIRE RESYNC budget WAIT

あるいは、ユーザーB2はbudgetを取得して変更C1を確認し、次の文を発行します。

AW ATTACH myworkspace MULTI
ACQUIRE RESYNC budget WAIT
make changes C1
UPDATE
make changes C2
RELEASE budget
UPDATE
COMMIT
...
AW ATTACH myworkspace MULTI
ACQUIRE RESYNC budget WAIT

または、もう1つの可能性として、ユーザーB2はbudgetを取得して変更C1を確認し、次の文を発行します。

AW ATTACH myworkspace MULTI
ACQUIRE RESYNC budget WAIT
make changes C1
UPDATE
make changes C2
UPDATE
COMMIT
RELEASE budget
...
AW ATTACH myworkspace MULTI
ACQUIRE RESYNC budget WAIT

この時点で、ユーザーB2はbudgetを取得し、変更C2を確認します。

REMOVE_CUBE_MODEL

指定したモデル(キューブ・ディメンションのサブオブジェクト)のMODEL(集計内)文を、そのキューブ・ディメンションの集計マップから削除します。このプログラムの実行で行われる変更はトランザクショナルではなく、プログラムの一部としてCOMMITが自動的に実行されます。

注意:
キューブ・ディメンションまたはそのキューブ・ディメンションを含むキューブに対してマテリアライズド・ビューが存在する場合は、キューブ・ディメンションの変更に、このプログラムを使用できません。

関連項目:
「キューブ対応のOLAP DML文」

構文

CALL REMOVE_CUBE_MODEL(logical_cube, logical_dim, model_name, is_static_model)

パラメータ

CALL

REMOVE_CUBE_MODELは引数を持つOLAP DMLプログラムであるため、OLAP DML CALL文を使用して起動します。

logical_cube

Oracleデータ・ディクショナリで定義されたキューブの名前を示すテキスト式。

関連項目:
「OLAP論理オブジェクトの名前の値を指定する場合のガイドライン」

logical_dim

変更するキューブ・ディメンションのOracleデータ・ディクショナリ名を示すテキスト式。

model_name

logical_dimに関連付けられている論理モデルの名前を表すテキスト式。

is_static_model

削除するMODEL文がlogical_cubeのaggmapにあるRELATION(集計用)文の前または後ろのどちらにあるのかを指定するブール式。

デフォルト値はTRUEです。これは、削除するMODEL文がRELATION文の前にある(model_nameは静的モデルである)ことを意味します。

削除するMODEL文がRELATION文の後ろにある(model_nameが動的モデルである)場合は、FALSEを指定します。

REMOVE_DIMENSION_MEMBER

REMOVE_DIMENSION_MEMBERプログラムを実行すると、1つ以上の階層からOLAPキューブ・ディメンション・メンバーが削除されるか、またはキューブ・ディメンションからOLAPキューブ・ディメンション・メンバーが完全に削除されます。

注意:
キューブ・ディメンションまたはそのキューブ・ディメンションを含むキューブに対してマテリアライズド・ビューが存在する場合は、キューブ・ディメンションの変更に、このプログラムを使用できません。

関連項目:
「キューブ対応のOLAP DML文」

構文

CALL REMOVE_DIMENSION_MEMBER(member_id, logical_dim, hier_list, [ auto_compile ])

パラメータ

CALL

REMOVE_DIMENSION_MEMBERは引数を持つOLAP DMLプログラムであるため、OLAP DML CALL文を使用して起動します。

member_id

キューブ・ディメンション階層から削除するメンバーを示すテキスト式。

logical_dim

変更するキューブ・ディメンションのOracleデータ・ディクショナリ名を示すテキスト式。

関連項目:
「OLAP論理オブジェクトの名前の値を指定する場合のガイドライン」

hier_list

キューブ・ディメンション・メンバーの削除元となるすべての階層のOracleデータ・ディクショナリ名で構成された複数行のテキスト式。1行ごとに1つの階層を指定します。

ディメンションからメンバーを完全に削除するには、NAを指定します。

auto_compile

関連するアナリティック・ワークスペース・オブジェクト(親リレーションの変更など)を即時更新するかどうかを指定するブール式。

デフォルト値はTRUEです。この値を指定すると、アナリティック・ワークスペースの変更内容のうち、キューブ・ディメンション・メンバーの削除に必要のあるものはすべて即座に更新されます。

パフォーマンス上の理由から、FALSEはコンパイルの実行前に大量の変更を行う場合のみ指定してください。この場合、アナリティック・ワークスペース・オブジェクトの値が有効になる前に、キューブ・ディメンションを明示的にコンパイルする必要があります(「キューブ・ディメンションの明示的なコンパイル」を参照)。

注意:
この引数に対して指定した値に関係なく、新しいメンバーは常にディメンションから即時に削除されます。これは、コンパイル中にエラーが通知された場合でも同様です。

例

例10-98 階層からのOLAPキューブ・ディメンション・メンバーの削除

1. my_timeキューブ・ディメンションの値についてレポートする次のSQL文を実行します。

select dim_key||'  '||level_name||'  '||parent
from my_time_lvl_hier_view
order by dim_key asc;

この文によって返される値は次のとおりです。

DIM_KEY||''||LEVEL_NAME||''||PARENT
-------------------------------------------------------------------------------
L1_0  L1
L1_1  L1
L1_2  L1
L2_1  L2  L1_1
L2_2  L2  L1_1
L2_3  L2  L1_2
L3_1  L3  L2_1
L3_2  L3  L2_1
L3_3  L3  L2_2
L3_4  L3  L2_2
L3_5  L3  L2_2
L3_6  L3  L2_3

12 rows selected.

2. remove_12_1 OLAP DMLプログラムという名前のユーザー作成プログラムをコールする次のSQL文を実行します。

exec dbms_aw.execute('call my_util_aw!remove_l2_1');

ユーザー作成のremove_12_1プログラムの内容を次に示します。

注意:
このプログラムでは次を使用します。

- OBJORGファンクション。このファンクションを使用して、my_timeキューブ・ディメンションを物理的に実装するOLAP DMLオブジェクトを指定します。

- OLAP DMLから提供されるREMOVE_DIMENSION_MEMBERプログラム。このプログラムを使用して、my_timeキューブ・ディメンションからL2_1およびその子孫を削除します。

DEFINE REMOVE_L2_1 PROGRAM
PROGRAM

VARIABLE _aw_dim       text
VARIABLE _parentrel    text
VARIABLE _members      text
VARIABLE _member       text
VARIABLE _i            integer

" Removes L2_1 and descendants
_aw_dim = OBJORG(DIM 'my_time')
_parentrel = OBJORG(PARENTREL 'my_time')

LIMIT &_aw_dim TO 'L2_1'
LIMIT &_aw_dim ADD DESCENDANTS USING &_parentrel
_members = VALUES(&_aw_dim)
_i = 1
WHILE _i LE NUMLINES(_members)
DO
_member = EXTLINES(_members, _i, 1)
_i = _i + 1
CALL REMOVE_DIMENSION_MEMBER(_member, 'my_time', NA, NO)
DOEND

UPDATE
COMMIT
END

3. 削除後のmy_timeキューブ・ディメンションの値を表示する次のSQL文(手順1で使用した文と同じ)を実行します。

select dim_key||'  '||level_name||'  '||parent
from my_time_lvl_hier_view
order by dim_key asc;

削除後の値は次のとおりです。

DIM_KEY||''||LEVEL_NAME||''||PARENT
--------------------------------------------------------------------------------
L1_0  L1
L1_1  L1
L1_2  L1
L2_2  L2  L1_1
L2_3  L2  L1_2
L3_3  L3  L2_2
L3_4  L3  L2_2
L3_5  L3  L2_2
L3_6  L3  L2_3

9 rows selected.

REMOVE_MODEL_DIMENSION

REMOVE_MODEL_DIMENSIONプログラムを実行すると、キューブ・ディメンションのモデルからDIMENSION(モデル内)文が削除されます。このプログラムの実行で行われる変更はトランザクショナルではなく、プログラムの一部としてCOMMITが自動的に実行されます。

関連項目:
「キューブ対応のOLAP DML文」

構文

CALL REMOVE_MODEL_DIMENSION(logical_dim, model_name, explicit_dim)

パラメータ

CALL

REMOVE_MODEL_DIMENSIONは引数を持つOLAP DMLプログラムであるため、OLAP DML CALL文を使用して起動します。

logical_dim

変更するキューブ・ディメンションのOracleデータ・ディクショナリ名を示すテキスト式。

関連項目:
「OLAP論理オブジェクトの名前の値を指定する場合のガイドライン」

model_name

logical_dimに関連付けられている論理モデルの名前を表すテキスト式。

explicit_dim

キューブ・ディメンションのモデルから削除するディメンションの識別子を示すテキスト式。

RENAME

RENAMEコマンドは、アナリティック・ワークスペース内にあるオブジェクトの名前を変更するコマンドです。

構文

RENAME oldname newname [AW workspace]

パラメータ

oldname

アナリティック・ワークスペース内にある既存のオブジェクトの名前。修飾オブジェクト名を指定して、オブジェクトが存在するアタッチされたワークスペースを指定できます。別の方法として、AWキーワードを使用してワークスペースを指定することもできます。両方を一緒には使用できません。

修飾オブジェクト名またはAWキーワードを使用してアナリティック・ワークスペースを指定しない場合、現行のワークスペース内のオブジェクトの名前が変更されます。

名前のないコンポジットの場合、その作成時に使用したのと同じ構文を使用します。「名前のないコンポジットの名前付け」を参照してください。

newname

新しい名前。アナリティック・ワークスペース・オブジェクトの新しい名前は、オブジェクトが存在するワークスペース内の他の名前とは重複できません。アナリティック・ワークスペース・オブジェクトのネーミングのルールに従って名前を選択します(詳細はDEFINEコマンドを参照)。名前付きコンポジットを名前のないコンポジットに変更するには、newname引数としてSPARSEキーワードを使用します。「名前付きコンポジットの名前解除」を参照してください。

AW workspace

オブジェクトの名前を変更するアタッチされたワークスペースの名前。修飾オブジェクト名またはAWキーワードを使用してアナリティック・ワークスペースを指定しない場合、現行のワークスペース内のオブジェクトの名前が変更されます。

使用上の注意

関連付けられたオブジェクトの更新

変数の名前を変更しても、その変数を使用するオブジェクト(計算式など)は自動的には更新されません。

ディメンションの名前を変更すると、そのディメンションによってディメンション化されるすべてのオブジェクトの定義は自動的に更新されます。さらに、名前が変更されたディメンションのすべての値セットは、新しい名前に自動的に更新されます。

RENAMEとPERMIT

オブジェクトのアクセス権を変更する権限がPERMIT文によって拒否されている場合、そのオブジェクトの名前は変更できません。オブジェクトの名前を変更しても、オブジェクトに関連付けられている権限には影響しません。

名前のないコンポジットの名前付け

RENAME文を使用すると、名前のないコンポジットに名前を付けることができます。次の例は、marketおよびproductによってディメンション化される名前のないコンポジットに対して名前m.prodを割り当てます。

RENAME SPARSE <market product> m.prod

名前付きコンポジットの名前解除

名前付きコンポジットにプロパティおよびアクセス権制限がない場合、および名前付きコンポジットによってディメンション化されるオブジェクトが1つ以上存在する場合、そのコンポジットを名前のないコンポジットに変更できます。また、名前付きコンポジットと同じ順序のディメンションを持つ名前のないコンポジットは存在できず、名前付きコンポジットは、名前のないコンポジットのディメンション・リストでは使用できません。名前付きコンポジットを名前のないコンポジットに変更するには、newname引数としてSPARSEキーワードを使用します。次の例は、名前付きコンポジットm.prodを名前のないコンポジットに変更します。

RENAME m.prod SPARSE

コンポジットの名前変更の制限

コンポジットが名前のないコンポジットのベース・ディメンションである場合、またはコンポジットのベース・ディメンションのいずれかが名前のないコンポジットである場合、そのコンポジットの名前は変更できません。

例

例10-99 プログラムの名前変更

次の文は、プログラムtestreportの名前をsales.reportに変更します。

RENAME testreport sales.report

REPORT

REPORTコマンドは、1つ以上のデータ式のレポートを書式付きで生成するコマンドです。REPORTは、式のディメンションに対して自動的にループ処理します。結果は現行の出力ファイルに送信されます。

構文

REPORT [NOHEAD] [GRANDTOTALS] [[SUBTOTALS] {GROUP group-dimension}...] -

[[SUBTOTALS] [attributes] DOWN down-dimension] -

[[ROWTOTALS] { ACROSS across- dimension [limit-clause]: }... ] -

[SUBTOTALS] [attributes] expression(s)

パラメータ

expression引数のみを指定した場合、REPORTは、「デフォルトのレイアウト」に説明するレイアウトを使用してレポートを生成します。GROUP、DOWNまたはACROSS句に式のディメンションのいくつか(すべてではない)を指定すると、指定されないディメンションを持つデフォルトのレイアウトに可能なかぎり近いレイアウトになります。

NOHEAD

レポートに初期空白行およびヘッダーが含まれないことを指定します。NOHEADは、attributes引数で指定したすべてのHEADING引数より優先され、REPORTコマンドが通常自動的に生成するすべてのヘッダーを非表示にします。

GRANDTOTALS

数値列ごとの総計をレポートの末尾に挿入します。

SUBTOTALS

数値列の小計を挿入します。小計の各行の上にはダッシュの列が挿入されます。式またはDOWN句に対してSUBTOTALSを指定すると、GROUPディメンション(またはコンポジット)ごとの小計が得られます。GROUP句に対してSUBTOTALSを指定すると、指定したディメンションおよび変化の遅いGROUPディメンションの小計が得られます。グループの小計はグループの最後のスライスの下部に表示されます。

GROUP

group-dimensionの値ごとに、データの個別group、つまり2次元スライスを生成します。GROUP句を複数回使用すると、複数のGROUPディメンション(またはコンポジット)を指定できます。この場合、GROUPディメンションの値の組合せごとに異なるスライスが生成されます。

group-dimension

グループ・ラベルとして使用する値の取得元のディメンションまたはコンポジットの名前。または、グループ・ラベルとして使用する実際の値である1つ以上のTEXT式。

- group-dimensionにコンポジットまたは結合ディメンションの名前を指定すると、各ベース・ディメンションに別々のグループが作成されます。

- group-dimensionにTEXT式を指定する場合、その式は、目的のGROUPディメンションのみによってディメンション化される必要があり、式の各値は、関連ディメンション値に対応する説明テキストにする必要があります。

GROUP句に指定したディメンションは、それらがループ処理するデータに関連する必要はありません。「追加ディメンションの指定」を参照してください。

DOWN

行のラベル、つまり、レポートの左側に、その他の値をラベル付けする1つ以上の列が含まれるように指定します。使用できるDOWN句は1つのみです。

down-dimension

行のラベルとして使用する値の取得元のディメンションまたはコンポジットの名前。または、行のラベルとして使用する実際の値である1つ以上のTEXT式。

- down-dimensionに非結合ディメンションの名前を指定すると、行のラベルとして1列のみ生成されます。

- down-dimensionにコンポジットまたは結合ディメンションの名前を指定すると、各ベース・ディメンションに別々の列が作成されます。

- down-dimensionにTEXT式を指定する場合、その式は、目的のDOWNディメンションのみによってディメンション化される必要があり、式の各値は、関連ディメンション値に対応する説明テキストにする必要があります。

DOWN句に指定したディメンションは、それらがループ処理するデータに関連する必要はありません。「追加ディメンションの指定」を参照してください。

ROWTOTALS

「TOTAL」のヘッダーの列を、数値行ごとの合計とともにレポートの右側に挿入します。レポートに行の合計を挿入するのは、列の小計または総計を挿入するのと異なります。

ACROSS

列ヘッダーの行をレポート上部にdimensionの値ごとに生成します。各ヘッダーの下には、指定したデータ式のためのデータの列がREPORTによって生成されます。レポートには、複数のACROSS句(またはコンポジット)を入れることができます。

across-dimension

列ヘッダーとして使用する値の取得元のディメンションまたはコンポジットの名前。または、列ヘッダーとして使用する実際の値である1つ以上のTEXT式。

- across-dimensionにコンポジットまたは結合ディメンションの名前を指定すると、各ベース・ディメンションに別々のヘッダー列が作成されます。

- across-dimensionにTEXT式を指定する場合、その式は、目的のacross-dimensionのみによってディメンション化される必要があり、式の各値は、関連ディメンション値に対応する説明テキストにする必要があります。DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションに対する書式設定済ラベルの指定の詳細は、「DAY、WEEK、MONTH、QUARTERおよびYEARのディメンション値の書式設定」を参照してください。

ACROSS句に指定したディメンションは、それらがループ処理するデータに関連する必要はありません。「追加ディメンションの指定」を参照してください。

limit-clause

REPORT文の実行時のディメンションの一時的なステータス。ACROSS句にディメンションを指定する場合に使用します。(ACROSS句にコンポジットを指定する場合、limit-clause引数を含めることはできません。)

limit-clauseの構文は、各種LIMITコマンドにおけるlimit-clause引数の構文(つまり、LIMITコマンドの「TO」などのlimit-type引数の後の構文)と同じです。これらの引数の構文については、LIMITコマンド(値を使用)、LIMITコマンド(LEVELRELを使用)、LIMIT(親リレーションを使用)、LIMITコマンド(関連ディメンションを使用)、LIMITコマンド(NOCONVERTを使用)およびLIMITコマンド(POSLISTを使用)を参照してください。

指定した制限による結果としてディメンションが空のステータスになると、OKNULLSTATUSオプションの設定に関係なくエラーが発生します。ただし、IFNONE label句を指定すると、エラーは表示されずにプログラムの実行は指定のラベルに分岐するため、ここでエラーに対処できます。

attributes

データの書式設定の方法を指定する表10-4「レポートのデータ値の書式属性」に示す1つ以上の書式属性。DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションに対する書式設定済ラベルの指定の詳細は、「DAY、WEEK、MONTH、QUARTERおよびYEARのディメンション値の書式設定」を参照してください。

ヒント:
変数の定義に属する書式設定プロパティが変数に存在する場合、OBJファンクションを使用してこのプロパティの値を取得し、これをREPORT文の属性の値として使用できます。

属性を指定しなかった場合、データ値の書式設定には、「デフォルトのレイアウト」に説明するデフォルトの書式が使用されます。この場合、Oracle OLAPでは、列の幅、小数点以下の桁数、数値の3桁区切りにカンマを使用するかどうかなどが自動的に決定されます。

表10-4 レポートのデータ値の書式属性

属性

意味

HEADING 'text'

デフォルトの列ヘッダーのかわりに使用するテキストを指定。HEADING属性を使用する場合、指定するヘッダーの位置は、レポート内でこの属性の適用が必要な式の数に応じて変わる。つまり、指定のヘッダーは、デフォルトのヘッダーを置き換える場合とそうでない場合がある。また、HEADING属性を使用して列幅より広い列タイトルを指定すると、タイトルのテキストは、その列の幅の範囲内で折り返される。

WIDTH n

(省略形はW。)列の幅を空白n個分にする。最大幅は4,000文字。幅が0(ゼロ)の列は表示されない。(「Width属性のデフォルト値」も参照。)

TRUNCATE

(省略形はTRUNC。)文字値が列に収まらない場合、文字値を列幅に合せて切り捨てる。

NOTRUNCATE

(省略形はNOTRUNC)文字値が列に収まらない場合、追加の行を生成。(デフォルト。)

CENTER

(省略形はC。)列内で値を中央揃え。

LEFT

(省略形はL。)列内で値を左揃え。(テキスト・データのデフォルト。)

RIGHT

(省略形はR。)列内で値を右揃え。(数値データおよびブール・データのデフォルト。)

SPACE n

(省略形はSP。)指定した数の空白を列の前に挿入。

(デフォルトで、最初の列の前には0個の空白が挿入され、残りの列の前には1個の空白が挿入される。)

FILL 'char'

列の未使用の位置にcharを置く。(デフォルトの埋込み文字は空白。)

COMMA

カンマ、またはTHOUSANDSCHARオプションに現在記録されている文字で、3桁および6桁を区切る。COMMASオプションの設定に優先。

NOCOMMA

3桁および6桁を文字で区切らない。COMMASオプションの設定に優先。

PAREN

カッコを使用して負の数を表す。PARENSオプションの設定に優先。

NOPAREN

マイナス符号を使用して負の数を表す。PARENSオプションの設定に優先。

DECIMAL n

(省略形はD)小数桁をn桁表示。小数桁は、DECIMALCHARオプションに現在記録されている文字で区切られる。DECIMALSオプションの値に優先。

注意: REPORTでは、合計の式に対してDECIMAL属性を指定しないかぎり、整数データの行合計や列合計での小数点以下の桁は非表示になる。また、DECIMAL属性を0に設定し、NOLEADINGZEROキーワードを使用すると、0に丸められる-1から1までの小数値は表示されない。

MDECIMAL n

M表記法で書式化された値の小数点以下の桁をn桁まで表示。nの値は0から16または255。

NODECIMAL

DECIMALSオプションの設定で指示された小数桁の桁数を表示。(デフォルト。)

EDECIMAL n

E表記法で書式化された値の小数点以下の桁をn桁まで表示。nの値は0から16または255。

ENOTATION

指数表記法またはE表記法とも呼ばれる科学表記法を使用(値の後にEを、指数の前に符号を付加。たとえば、.230E+2、.230E-2など)。

NOENOTATION

E表記法を使用しない。かわりに、条件付きのM表記法を使用。

CENOTATION

値が列の中に収まるために必要な場合、条件付きでE表記法を使用。

MNOTATION

常にM表記法を使用(百万で除算した値にMを付加)。

NOMNOTATION

M表記法を使用しない。かわりに、サイズの大きすぎる値にはアスタリスクを使用。

CMNOTATION

値が列の中に収まるために必要な場合、条件付きでM表記法を使用。(デフォルト。)

FOLDDOWN

複数行の文字値の場合、最初の行を他の値と並べて表示し、それ以外の行をその下に配置。また、先行または後続の空白を削除。(デフォルト。)

FOLDUP

複数行の文字値の場合、最後の行のみを他の値と並べて表示し、それ以外の行は上部に配置。また、先行または後続の空白を削除。

INDENT n

列内で、値を空白n個分インデント。デフォルトは0です。

LEADINGZERO

-1から1までの小数部の前にゼロを付加。

NOLEADINGZERO

-1から1までの小数部の前のゼロを非表示にする。

CNLEADINGZERO

有効桁を切り捨てない場合、-1から1までの小数部の前にゼロを付加。(デフォルト。)

LSET 'text'

textを値の左側に追加。NA値を含む式とともにLSETを使用すると、LSETで指定したテキストは、NA値の左側に挿入されない

NOLSET

値の左側に何も追加しない。(デフォルト。)

RSET 'text'

textを値の右側に追加。NA値を含む式とともにRSETを使用すると、RSETで指定したテキストは、NA値の右側に挿入されない。

NORSET

値の右側に何も追加しない。(デフォルト。)

NASPELL 'text'

NA値のかわりにtextを使用。NASPELLオプションの設定に優先。

NONASPELL

NASPELLオプションに指定した内容でNA値を表示。(デフォルト。)

YESSPELL 'text'

TRUEブール値としてtextを使用。デフォルト値はYESSPELLオプションで記録。

NOSPELL 'text'

FALSEブール値としてtextを使用。NOSPELLオプションの設定に優先。

ZSPELL 'text'

ゼロの数値のかわりにtextを使用。ZSPELLオプションの設定に優先。

NOZSPELL

ZSPELLオプションで指定した内容でゼロ数値を表示。(デフォルト。)

OVER textexp

文字式(textexp)の値を持つ値に上線を引く。textexpがリテラル値の場合は、一重引用符で囲まなければならない。有効なリテラル値は、値または列に上線を引く'-'、値または列に二重上線を引く'='、値または列に上線を引かないことを指定する''。

条件が一致した場合にのみ上線を引くには、textexpに次の文を使用する。

IF boolean-expression THEN '-' ELSE ''

UNDER textexp

文字式(textexp)の値を持つ値に下線を引く。textexpがリテラル値の場合は、一重引用符で囲まなければならない。有効なリテラル値は、値または列に下線を引く'-'、値または列に二重下線を引く'='、値または列に下線を引かないことを指定する''。

条件を満たした場合にのみ下線を引くには、textexpに次の文を使用する。IF boolean-expression THEN '-' ELSE ''

VALONLY

UNDERおよびOVER属性とともに使用し、値に対してのみ下線または上線を引く。

NOVALONLY

UNDERおよびOVER属性とともに使用し、列の幅全体に下線または上線を引く。(デフォルト。)

expression . . .

レポートに表示されるデータ。データの表示は、そのデータ型と指定した属性に依存します。

注意:
REPORTコマンドにはNTEXT値を処理する機能はありません。レポートのどの部分にもこれを使用しないでください。

複数の式を指定できます。それらの式が同じディメンションを持つ必要はありません。

- REPORT文に複数のデータ式がある場合、それぞれの前に異なる書式を指定できます。属性を2つ以上のデータ式に適用する場合、式を山カッコ(< >)で囲みます。
attributes <expression1, expression2>

- カッコの外側の属性が、カッコの内側のすべての式に適用されます。ただし、カッコ内にある1つの式にのみ対してその直前に属性を指定すれば、グループに適用される属性と矛盾する属性の場合でも、その式のみに別の属性を指定することもできます。
attributes0 <attributes1 expression1, expression2>

この場合、attributes0はexpression1とexpression2の両方に適用されますが、attributes1はexpression1にのみ適用されます。

ヒント:
現在までの合計を作成するには、RUNTOTALファンクションを使用します。

使用上の注意

レポートのオプション

OLAP DMLを使用して作成されるレポートには、複数のオプションによる効果が適用されます。これらのオプションは、「レポートのオプション」に記載されています。

デフォルトのレイアウト

どのレイアウト句(GROUP、DOWNまたはACROSS)も指定しない場合、REPORTではコンパクトな書式で出力されます(通常は、一方のディメンションがサイドを上下に沿い、他方のディメンションが上部を左右に沿う、スプレッドシートに似た2次元のデータ・レポートです)。データのディメンションを追加した場合は、一連のスプレッドシートのように、スライス、つまり異なる2次元のセグメントが形成されます。デフォルトでは、次のルールが適用されてレイアウトが決まります。

- 式の中で最も変化の速いディメンション(その式の定義のうちで先頭に置かれているディメンション)は横方向に表示され、次に変化するディメンションは縦方向に表示されます。それ以降に変化するディメンションはGROUPスライスになります。

- 2つ以上の式のリストにおけるディメンションの順序は、コンポーネント式の定義に記述されているディメンションの単純な組合せです。元の順序が可能なかぎり保持されますが、同じディメンションが繰り返し記述されている場合は削除されるというルールに従います。たとえば、変数priceがディメンション<month product>を持ち、変数industry.salesがディメンション<quarter product region>を持つ場合、priceとindustry.salesの組合せのディメンションは<month product quarter region>です。

コンポジットによってディメンション化される変数についてデータのレポートを作成すると、REPORTは、変数の定義に使用されているコンポジットのベース・ディメンション別に、データを自動的に取り出します。ベース・ディメンション値の特定の組合せがコンポジットに存在しない場合、レポートには、これに対応するデータ・セルに対してNAが表示されます。例10-104「コンポジットによってディメンション化されたデータのレポート」を参照してください。

Width属性のデフォルト値

ACROSS句でWIDTH属性を指定しない場合、デフォルトの幅はCOLWIDTHオプションの値となります(デフォルトは10)。

DOWN句でWIDTH属性を指定しない場合、またはDOWN句で単純なディメンションを指定した場合、デフォルトの幅はLCOLWIDTHオプションの値となります(デフォルトは14)。

結合ディメンションまたはコンポジットを指定するDOWN句でWIDTH属性を指定しない場合、デフォルトのラベル幅はCOLWIDTHオプションの幅となり、各ベース・ディメンションに別個の列が生成されます。KEYファンクションを使用すると、ベース・ディメンション列ごとに異なる幅を設定できます。KEYファンクションによって、ベース・ディメンションごとにラベル列を生成し、列ごとに異なるWIDTH属性を使用できます。たとえば、ベース・ディメンションproductおよびdistrictを持つproddistという名前のコンポジットがあるとします。この場合、次のような文を使用できます。

REPORT DOWN < W 8 KEY(proddist, product) -
W 12 KEY(proddist, district) > . . .

デフォルトの行幅である80文字(LSIZEオプションで指定)およびデフォルトの列幅設定(14文字のラベル列が1つ)を使用すると、出力の1行にはラベル列と6つのデータ列が収まります。

レポートのすべての列を合せた幅は、4,000文字を超えることはできません。

数値が大きすぎてデータ列に収まらない場合、数値は百万の位に四捨五入され、セルの右側に記号Mが付きます。この処理をしても値が大きすぎる場合、値は1列のアスタリスクに置き換えられます。

DAY、WEEK、MONTH、QUARTERおよびYEARのディメンション値の書式設定

DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションをACROSS、DOWNまたはGROUP句のdimensionとして使用した場合、CONVERTファンクションを使用してディメンションのVNF(またはデフォルトのVNF)を変更し、ディメンション値の名前に独自の書式を適用できます。VNFを変更するには、ACROSS、DOWNまたはGROUPキーワードに対して、dimension引数のかわりにvnf引数を指定してCONVERTファンクションを使用します。たとえば、unitsデータのレポートでは、次の文を使用してmonthディメンションのラベルを書式設定できます。

REPORT HEADING 'Month' DOWN -
CONVERT(month TEXT '<mtextl> <yyyy>') units

追加ディメンションの指定

REPORTコマンドは、表示される式がどのディメンションによってディメンション化されるかにかかわらず、レポートのレイアウトで指定したすべてのディメンションを使用します。式が指定された1つ以上のディメンションによってディメンション化されない場合、その式の値は追加のディメンションの値ごとに繰り返されます。比較の際に効果があることがあります。例10-103「価格データの繰返し」を参照してください。

例

例10-100 デフォルトのレポートの作成

この例は、1996年の最初の3か月間の製品価格を参照する方法を示します。デフォルトのレイアウトを変更することなく、最も簡単な形式のREPORTを使用します。

LIMIT month TO 'Jan96' TO 'Mar96'
REPORT price

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

--------------PRICE-------------
--------------MONTH-------------
PRODUCT           Jan96       Feb96      Mar96
--------------- ---------- ---------- ----------
Tents               165.50     165.75     165.13
Canoes              200.25     200.09     200.05
Racquets             55.02      55.03      55.00
Sportswear           50.03      50.02      50.00
Footwear             38.01      38.01      38.01

例10-101 列合計の追加

この例は、1996年前半における3つの地区の売上数量を表示し、レポートの横方向にdistrictを示し、列ごとに小計を示します。(デフォルトでは、レポートの横方向には月が並べられますが、これは、monthがunitsの最も変化の速いディメンションであるためです。)レポートをよりコンパクトにするため、狭い列幅として8文字を指定します。

LIMIT month TO 'Jan96' TO 'Jun96'
LIMIT district TO 'Boston' 'Chicago' 'Dallas'
REPORT SUBTOTALS W 8 DOWN month -
ACROSS district: W 8 units

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

PRODUCT: TENTS
----------UNITS-----------
---------DISTRICT---------
MONTH    Boston   Chicago  Dallas
-------- -------- -------- --------
Jan96         307      189      308
Feb96         209      190      324
Mar96         277      257      436
Apr96         372      318      560
May96         525      433      744
Jun96         576      466      838
-------- -------- -------- --------
TOTAL       2,266    1,853    3,210
...

REPORTでは、製品ごとに同様なスライスを生成できます。

例10-102 2つの変数の比較

この例は、スポーツウェア販売実績と販売計画予測とを比較し、ドル単位の整数値のみで示します。1996年5月および6月の実績と予測値を横に並べてレポートし、すべての地区の販売実績と販売予測の総計を表示します。

LIMIT product TO 'Sportswear'
LIMIT month TO 'May96' 'Jun96'
LIMIT district TO ALL
REPORT GRANDTOTALS W 12 DOWN district ACROSS month: -
DECIMAL 0 <sales sales.plan>

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

PRODUCT: SPORTSWEAR
-------------------MONTH-------------------
--------May96-------- --------Jun96--------
DISTRICT       SALES    SALES.PLAN   SALES    SALES.PLAN
------------ ---------- ---------- ---------- ----------
Boston           72,617     69,623     79,630     73,569
Atlanta         161,537    148,823    177,967    157,939
Chicago         101,873     94,545    112,793     97,427
Dallas          170,939    165,449    175,066    164,192
Denver           89,971     91,880     97,237     94,729
Seattle          57,713     55,905     60,323     56,808
---------- ---------- ---------- ----------
654,651    626,224    703,017    644,664
========== ========== ========== ==========

例10-103 価格データの繰返し

この例は、3つの地区にわたる販売実績を比較し、各地区で綿密な比較ができるように販売数量の横にそれぞれ単価を表示します。REPORT文では、2つの式(salesおよびprice)を指定します。salesには3つのディメンション(month、productおよびdistrict)があるため、レポートにはこれら3つのディメンションを表示します。ただし、priceはdistrictによってディメンション化されません。したがって、レポートはdistrictごとにpriceの値を繰り返します。1995年1月のレポートを表示します。

LIMIT district TO FIRST 3
LIMIT product TO ALL
LIMIT month TO 'Jan95'
REPORT GROUP month W 10 DOWN product ACROSS district: -
<W 9 sales W 6 price>

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

MONTH: Jan95
-------------------DISTRICT------------------------
-----Boston-----  ----Atlanta----- -----Chicago----
PRODUCT      SALES    PRICE   SALES    PRICE   SALES    PRICE
---------- --------- ------  --------- ------ --------- ------
Tents      32,153.52 160.77  40,674.20 160.77 29,098.94 160.77
Canoes     66,013.92 190.24  49,462.88 190.24 45,277.56 190.24
Racquets   52,420.86  52.84  54,798.82  52.84 54,270.39  52.84
Sportswear 53,194.70  48.54 114,446.26  48.54 72,123.47  48.54
Footwear   91,406.82  36.10 100,540.28  36.10 90,287.70  36.10

例10-104 コンポジットによってディメンション化されたデータのレポート

この例では、d.salesは、ディメンション・リストにディメンションmonthおよび名前のないコンポジットSPARSE <product district>が含まれる変数です。名前のないコンポジットには、Boston、Chicagoの各地区、およびTents、Racquets、Footwearの各製品に対するベース・ディメンションの組合せについて値が存在しません。REPORTコマンドのデフォルトの形式を使用してd.salesデータのレポートを生成すると、month別および名前のないコンポジットのベース・ディメンション(productおよびdistrict)別にレポートが出力されます。コンポジットに存在しないベース・ディメンション値の組合せの場合、レポートではこれに対応するデータ・セルにNAが表示されます。

LIMIT month TO 'Jan96' TO 'Mar96'
LIMIT district TO 'Boston' 'Chicago'
REPORT d.sales

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

DISTRICT: Boston
------------D.SALES-------------
-------------MONTH--------------
PRODUCT          Jan96      Feb96      Mar96
-------------- ---------- ---------- ----------
Tents                  NA         NA         NA
Canoes             70,489     82,238     97,622
Racquets               NA         NA         NA
Sportswear         57,079     63,122     67,006
Footwear               NA         NA         NA

DISTRICT: Chicago
------------D.SALES-------------
-------------MONTH--------------
PRODUCT          Jan96      Feb96      Mar96
-------------- ---------- ---------- ----------
Tents                  NA         NA         NA
Canoes             48,662     54,425     68,816
Racquets               NA         NA         NA
Sportswear         77,490     85,879     85,308
Footwear               NA         NA         NA

GROUP、DOWNまたはACROSS句にコンポジットを指定すると、REPORTのデフォルトの書式を無効にし、d.salesデータをそのコンポジット別に取り出すことができます。この場合、レポートの内容はコンポジットに値が格納されているデータ・セルのみになります。

REPORT DOWN SPARSE <product district> d.sales

この文によって生成されるレポートは、次のとおりです。

------------D.SALES-------------
-------------MONTH--------------
PRODUCT    DISTRICT    Jan96      Feb96      Mar96
---------- ---------- ---------- ---------- ----------
Canoes     Boston         70,489     82,238     97,622
Sportswear Boston         57,079     63,122     67,006
Canoes     Chicago        48,662     54,425     68,816
Sportswear Chicago        77,490     85,879     85,308

RESYNC

アナリティック・ワークスペースがマルチライタ・モードでアタッチされている場合、RESYNCコマンドは、指定された読取り専用オブジェクトのプライベートな変更を削除し、表示可能な最新の世代のデータを取得します。

RESYNCは読取り専用オブジェクトを再同期化します。取得済オブジェクトの再同期化を行うには、ACQUIREを使用します。

ヒント:
「マルチライタ・モードでアタッチされたアナリティック・ワークスペースの管理」

構文

RESYNC objects

パラメータ

objects

再同期化する1つ以上の変数、リレーション、値セットまたはディメンションの名前のリスト(カンマ区切り)。このリスト内の取得済オブジェクトはすべて無視されます。

objectsには値としてNameを指定し、他のユーザーが定義した最新のオブジェクトを再同期化することを指定します。

使用上の注意

オブジェクトの論理的関係の保持

RESYNCを使用する場合、異なるオブジェクト間の論理的関係に留意し、一部のオブジェクトのみを新しい世代にプロモートしたために、データの論理的一貫性が失われないようにしてください。

コンポジット・ディメンションを共有するオブジェクトの再同期化

コンポジット・ディメンションを共有するオブジェクトは別々に再同期化できます。ただし、これらの再同期化されていないオブジェクトはすべて、変更されていないか取得済である必要があります。

例

例10-105 オブジェクトの再同期化

この例では、ユーザーAが定期的にactualsを更新し、ユーザーRは定期的にデータの最新ビューをチェックする必要があります。それぞれ次のOLAP DML文を実行します。

ユーザーAは次のOLAP DML文を実行します。

AW ATTACH myworkspace MULTI
ACQUIRE actuals
...make modifications
UPDATE MULTI actuals
COMMIT
...make modification
UPDATE MULTI actuals
COMMIT

同時に、ユーザーRも次のOLAP DML文を実行します。

AW ATTACH myworkspace MULTI
...
RESYNC actuals
...
RESYNC actuals
...
RESYNC actuals
...

RETURN

OLAP DMLプログラムのRETURNコマンドは、最後の行より前でプログラムの実行を終了します。オプションとして、プログラムがファンクションとしてコールされた場合に返す値を指定できます。この値は、プログラムを定義したときに指定したのと同じデータ型またはディメンションである必要があります。

関連項目:
「ユーザー定義ファンクションの作成」およびARGUMENT、CALL、DEFINE PROGRAMコマンド

構文

RETURN [expression]

パラメータ

expression

コールされたプログラムの終了時にコール側プログラムに返される式。

使用上の注意

戻り値のディメンション性

プログラムによる戻り値は、ディメンションを持たない単一の値です。ただし、ユーザー定義ファンクションをコールする文のコンテキスト内では、ファンクションの式はその引数のディメンションを持ちます。この場合、ファンクションの式に含まれるディメンション値の組合せごとにプログラムがコールされます。

戻り値のデータ型

プログラムを定義するときにデータ型を指定すると、戻り値はそのデータ型になります。プログラムを定義するときにディメンションを指定すると、戻り値はそのディメンションの単一の値になります。RETURN文の式が、宣言されているデータ型またはディメンションと一致しない場合、Oracle OLAPは宣言されているデータ型に式を変換します。

プログラムの定義でデータ型またはディメンションを指定しない場合、戻り値はワークシート・データとして処理され、すべての戻り値がOracle OLAPによってコール側のコンテキストで必要とされるデータ型に変換されるため、予期しない結果になる場合があります。

ディメンションの位置

プログラムがディメンションの値を返す場合、そのディメンションはプログラムと同じアナリティック・ワークスペースで宣言されている必要があります。そのプログラムは、LISTBYプログラムの出力に含まれ、ディメンションに対するOBJ(ISBY)は、TRUEになります。

戻り値なし

ファンクションとして起動したプログラムが戻り値を返さない場合、コール側プログラムへの戻り値はNAになります。

例

例10-106 プログラムの早期終了

この例では、newfiguresという名前の変数が現行のアナリティック・ワークスペースに存在する場合にのみレポートを生成するレポート・プログラムを必要とするとします。このプログラムでは、IF文を使用してnewfiguresの存在を確認し、存在しない場合はRETURNで実行を停止します。

DEFINE sales.report PROGRAM
PROGRAM
IF NOT EXISTS('newfigures')
THEN DO
SHOW 'The new data is not yet available.'
RETURN
DOEND
PUSH month
TRAP ON cleanup
LIMIT month TO LAST 3
REPORT ACROSS month: newfigures

cleanup:
POP month
END

newfiguresがアナリティック・ワークスペースに存在しない場合にこのプログラムを実行すると、プログラムはメッセージを生成し、RETURN文でプログラムの実行をその時点で終了します。

例10-107 戻り値

次のプログラムは、actual変数から来年の予算額を取得します。これは一時的な計算です。このプログラムをREPORT文でコールすると、予算額が計算およびレポートされますが、アナリティック・ワークスペースには保存されません。

DEFINE budget.growth PROGRAM DECIMAL
PROGRAM
VARIABLE growth DECIMAL
VARIABLE factor DECIMAL
growth = TOTAL(actual(year 'Yr97') year) - TOTAL(actual(year -
'Yr96') year)
factor = ( 1 + growth ) / TOTAL(actual(year 'Yr96') year)
RETURN TOTAL(actual(year 'Yr97') year) * (factor * factor/2)
END

REVERT

REVERTコマンドは、指定したオブジェクトについて、最後に更新、再同期化(RESYNC文を使用)、またはACQUIREのRESYNC句で取得されてから行われたすべての変更、あるいはアナリティック・ワークスペースがアタッチされてから行われたすべての変更を削除するコマンドです。

ヒント:
「マルチライタ・モードでアタッチされたアナリティック・ワークスペースの管理」

構文

REVERT objects

パラメータ

objects

マルチライタ・モードでアタッチされているアナリティック・ワークスペースの取得された変数、値セット、リレーションまたはディメンションの名前のリスト(カンマ区切り)。または、読取り専用モードでアタッチされているアナリティック・ワークスペースの変数、値セット、リレーションまたはディメンションのリスト。

使用上の注意

ディメンション値の追加後のディメンションの回復

ディメンション値を追加してからディメンションを元に戻すと、そのディメンションによってディメンション化された変数の領域割当てが最適ではなくなる場合があるためお薦めしません。

例

例10-108 REVERTによる変更の取消し

budgetという名前の変数がmyworkspaceという名前のアナリティック・ワークスペースにあるとします。また、複数のステップでbudgetを変更する必要があり、すべてのステップが完了するまでアナリティック・ワークスペースのデータは更新しません。各ステップで複数のモデルを実行し、必要な結果が得られるモデルを見つけます。このタスクを実行するには、次の手順を実行します。

1. アナリティック・ワークスペースをマルチライタ・モードでアタッチします。

2. budgetを取得します。

3. 各ステップで次の手順を実行します。

1. 適切なモデルを実行し、必要なモデルが見つかるまで実行ごとに操作を元に戻して繰り返します。

2. budgetを更新します。

4. budgetをコミットして解放します。

次のコードによってこれらのタスクが実行されます。

AW ATTACH myworkspace MULTI
ACQUIRE RESYNC budget
...try model 1a --> not acceptable
REVERT budget
...try model 1b --> ok. Done with Step 1
UPDATE MULTI budget
...try model 2a --> not acceptable
REVERT budget
...try model 2b --> not acceptable
REVERT budget
...try model 2c --> ok. Done with Step 2
UPDATE MULTI budget
...try model 3a --> ok. Done with Step 3. Done with all steps.
UPDATE MULTI budget
COMMIT
RELEASE budget
AW DETACH myworkspace

ROWコマンド

ROWコマンドは、単一の行のセルに一連のデータを連続して生成するコマンドです。一連のROWコマンドは、対応するセルをそれぞれ生成し、これによりデータの列が作成されます。このため、通常、ROWコマンドは一連の列を生成するコマンドと言えます。ROWコマンドによる出力は、現行の出力ファイルに送信されます。

一般にROWコマンドは、レポート書込み文としてまとめて考えることができる他のコマンド、ファンクションおよびオプションとともに使用されます。

ROWコマンドは、生成するデータおよびデータの出力書式(オプション)を指定する一連の列説明で構成されます。

さらに、ROWには行および列の計算を実行するための幅広い機能があります。計算を実行して計算結果を出力に含めることができます。あらゆる種類の計算式を列説明で使用でき、行および列の合計ファンクションを利用できます(表10-6「行と列の計算」を参照)。

ROWは、主にレポート・プログラムで使用してレポートの行を生成します。レポートにおける行の最大幅は4,000文字です。

ヒント:
ROWコマンドの小計機能を必要としないことが前もって明らかな場合、ROWコマンドのかわりにHEADING文を使用してレポートの行を生成すると、この場合、Oracle OLAPは小計を管理しないので時間を節約できます。

関連項目:
ROWファンクション

構文

ROW [attributes] [ACROSS dimension [limit-clause]:] {exp1|SKIP } -

[[attributes] [ACROSS dimension [limit-clause]:] {expn|SKIP }]

パラメータ

引数を持たないROWは、空白行を生成します。

attributes

列に関する1つ以上の属性。属性とは、列内でデータ値を書式化する方法を決定する書式指定です。列書式の記述に使用できる属性の数に制限はありません。(使用できる属性については、表10-5「ROWの列属性」を参照。)一部の書式属性のデフォルトは、Oracle OLAPオプションの現在の設定に依存しています(これらのオプションのリストについては、表10-7「レポート関連のオプション」を参照)。

ACROSS

ACROSS句では、式の1つのディメンション(またはコンポジット)をループし、ディメンション化された式の複数の値を単一行に挿入します。通常のROWは、現在の制限内で最初のディメンション値に対応する値を表示するのみです。ACROSS句を使用すると、ROWは現在ステータスにある各ディメンション値について1つのデータ列を生成します。

複数のデータ式に同じACROSS句を適用することも、異なるデータ式ごとに別のACROSS句を適用することもできます。「複数式」および「個別のACROSS句」を参照してください。

dimension

文をループさせるディメンションまたはコンポジットの名前。

コンポジットでディメンション化された変数のデータを表示するときにACROSS句を含めない場合、ROWはコンポジットのベース・ディメンション値に対応するすべてのデータ・セルの出力を表示します。ベース・ディメンション値の特定の組合せがコンポジットに存在しない場合、ROWは、対応するデータ・セルにNAを表示します。同様に、ACROSS句で1つのコンポジットのベース・ディメンションを指定すると、コンポジットに値が存在しないデータ・セルにNAを表示します。ただし、ACROSS句でコンポジットを指定すると、ROWはコンポジットにベース・ディメンション値の組合せが存在するデータ・セルにのみ出力を表示しますが、この場合、データをより的確に反映する簡潔なレポートが生成されます。

ACROSS句で指定されたディメンションがNULLステータスである場合、ROWはそのACROSS句に対してデータ列を生成しません。

limit-clause

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コマンドでコンポジットのベース・ディメンションを目的の値に制限する必要があります。

SKIP

式のかわりに使用され、その列を空白のままにすることを示します。

表10-5 ROWの列属性

属性

意味

WIDTH n

(W n)

列の幅を空白n個分にする。最初の列のデフォルトの幅は、LCOLWIDTHオプションの値。他の列は、COLWIDTHオプションの値。最大幅は4,000文字。幅が0の列は表示されない。

SPACE n

(SP n)

n個の空白を列の前に挿入。最初の列のデフォルト値は0、他の列は1。

INDENT n

列内で、値を空白n個分インデント。デフォルトは0です。

LEFT

(L)

列内で値を左揃え。(TEXTデータのデフォルト)

RIGHT

(R)

列内で値を右揃え。(数値データおよびブール・データのデフォルト)

CENTER

(C)

列内で値を中央揃え。

LSET 'text'

textを値の左側に追加。NA値を含む式で使用した場合、指定したテキストがNA値の左側に追加されることはない。

NOLSET

値の左側に何も追加しない。

RSET 'text'

textを値の右側に追加。NA値を含む式で使用した場合、指定したテキストがNA値の右側に追加されることはない

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

-1から1までの小数部の前にゼロを付加。

NOLEADINGZERO

-1から1までの小数部の前のゼロを非表示にする。DECIMAL属性を0に設定し、NOLEADINGZEROキーワードを使用した場合、0に丸められる-1から1までの小数値は表示されない

CNLEADINGZERO

有効桁を切り捨てない場合、-1から1までの小数部の前にゼロを付加。

MNOTATION

常にM表記法を使用(百万で除算した値にMを付加)。

CMNOTATION

値が列の中に収まるために必要な場合、条件付きでM表記法を使用。

NOMNOTATION

M表記法を使用しない(サイズの大きすぎる値にはアスタリスクを使用)。

MDECIMAL n

M表記法で書式化された値の小数点以下の桁をn桁まで表示。nの値は0から16または255。

ENOTATION

指数表記法またはE表記法とも呼ばれる科学表記法を使用(値の後にEを、指数の前に符号を付加。たとえば、.230E+2、.230E-2など)。

CENOTATION

値が列の中に収まるために必要な場合、条件付きでE表記法を使用。

NOENOTATION

E表記法を使用しない(デフォルトの設定は条件付きのM表記法)。

EDECIMAL n

E表記法で書式化された値の小数点以下の桁をn桁まで表示。nの値は0から16または255。

NASPELL 'text'

NA値のかわりにtextを使用。デフォルト値はNASPELLオプションで制御される。

NONASPELL

NASPELLオプションに指定した内容でNA値を表示。

ZSPELL 'text'

ゼロの数値のかわりにtextを使用。デフォルト値はZSPELLオプションで制御される。

NOZSPELL

ZSPELLオプションで指定した内容でゼロ値を表示。

YESSPELL 'text'

TRUEブール値として使用するテキスト。デフォルト値はYESSPELLオプションで記録。

NOSPELL 'text'

FALSEブール値として使用するテキスト。デフォルト値はNOSPELLオプションで記録。

TRUNCATE

(TRUNC)

文字値が列に収まらない場合、文字値を列幅に合せて切り捨てる。

NOTRUNCATE

(NOTRUNC)

文字値が列に収まらない場合、追加の行を生成。

FOLDUP

複数行の文字値の場合、最後の行のみを他の値と並べて表示し、それ以外の行は上部に配置。また、先行または後続の空白を削除。

FOLDDOWN

複数行の文字値の場合、最初の行を他の値と並べて表示し、それ以外の行をその下に配置。また、先行または後続の空白を削除。

VALONLY

値に対してのみ下線または上線を引く。(UNDERおよびOVERと組み合せて使用。)

NOVALONLY

列の幅全体に下線または上線を引く。(UNDERおよびOVERと組み合せて使用。)

UNDER textexp

文字式(textexp)の値を持つ値に下線を引く。textexpがリテラル値の場合は、一重引用符で囲まなければならない。有効なリテラル値は、値または列に下線を引く'-'、値または列に二重下線を引く'='、値または列に下線を引かないことを指定する''。

条件が一致した場合にのみ下線を引くには、textexpに次の文を使用する。

IF boolean-expression THEN '-' ELSE ''

OVER textexp

文字式(textexp)の値を持つ値に上線を引く。textexpがリテラル値の場合は、一重引用符で囲まなければならない。有効なリテラル値は、値または列に上線を引く'-'、値または列に二重上線を引く'='、値または列に上線を引かないことを指定する''。

条件が一致した場合にのみ上線を引くには、textexpに次の文を使用する。

IF boolean-expression THEN '-' ELSE ''

表10-6「行と列の計算」に示すファンクションを使用すると、すでにレポートに生成されている値に対して計算を実行できます。

表10-6 行と列の計算

ファンクション

データ型

戻り値

COLVAL(n)

DECIMAL

現行の行のn番目の列の値。n > 0の場合、絶対的な列番号(左マージンから右に向かって)。n < 0の場合、相対的な列番号(現行の列から左に)。

RUNTOTAL(n)

ここで、

n = 1、2、...32

DECIMAL

nについて、SUBTOTALまたはZEROTOTALが最後に実行されてから現行の列で生成されたすべての数字の合計。nの合計を0にリセットしない。

SUBTOTAL(n)

ここで、

n = 1、2、...32

DECIMAL

nについて、SUBTOTALまたはZEROTOTALが最後に実行されてから現行の列で生成されたすべての数字の合計。nの合計を0にリセット。

表10-7「レポート関連のオプション」に示すオプションは、ROWコマンドのデフォルトの書式に影響を与えます。

表10-7 レポート関連のオプション

オプション

意味

COLWIDTH

WIDTH属性を使用しない場合の最初の列以外の列幅。デフォルト値は10です。

COMMAS

COMMA属性およびNOCOMMA属性を使用しない場合に3桁区切り文字を使用するかどうかを指定します。デフォルトはYES(区切り文字を使用)です。

DECIMALS

DECIMAL属性を使用しない場合の小数点以下の桁数。デフォルト値は2です。

LCOLWIDTH

WIDTH属性を使用しない場合の最初の列の列幅。デフォルト値は14です。

LSIZE

STDHDRプログラムが標準ヘッダーを中央揃えする行サイズを定義します。デフォルトは80文字です。

NASPELL

NASPELL属性を使用しない場合にNA値に使用するテキスト。デフォルト・テキストはNAです。

NLS_LANGUAGE

TRUEおよびFALSEのブール値に使用するテキストを指定します。これらの値は、YESSPELLおよびNOSPELLオプションに反映されます。

NLS_TERRITORY

小数点および3桁を区切る文字を指定します。これらの値は、DECIMALCHARおよびTHOUSANDSCHARオプションに反映されます。

PARENS

PAREN属性およびNOPAREN属性を使用しない場合に、負の数にカッコを使用します。デフォルトはNO(カッコを使用せず、マイナス符号を使用)です。

ZEROROW

すべての数値がゼロの行の生成または非表示を制御します。デフォルトはNO(ゼロの行を生成)です。

ZSPELL

ZSPELL属性を使用しない場合にゼロ値に使用するテキスト。デフォルトのテキストはOFFで、ゼロ(0)を表示します。

表10-8「ROWコマンドと互換性のあるOLAP DML文」に示す文をROWコマンドとともに使用します。

表10-8 ROWコマンドと互換性のあるOLAP DML文

コマンド

アクション

BLANK n

n行の空白行を生成します。デフォルトは1行です。

HEADING column-

description(s)

レポートのタイトルおよび列ヘッダーを生成します。ヘッダーの数値は列合計に加算されません。

PAGE

PAGINGの設定がYESの場合、出力に改ページを挿入します。

ZEROTOTAL

すべての列について、32の合計をすべて0にリセットします。

ZEROTOTAL ALL col(s)

指定した列について、または列引数がない場合はすべての列について、32の合計をすべて0にリセットします。

ZEROTOTAL n col(s)

指定した列について、または列引数がない場合はすべての列について、指定された合計(n)を0にリセットします。

使用上の注意

レポート書込みのコマンド

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を付けて最も近い百万の単位にその数値を丸めます。それでも値が大きすぎる場合、値はアスタリスクに置き換えられます。

例

例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

SET

SETコマンド(代入文または=コマンドともいう)は、1つ以上の値を変数、オプション、リレーションまたはディメンション・サロゲートに代入するコマンドです。オブジェクトに1つ以上のディメンションがある場合、SETコマンドはターゲット・オブジェクトの各ディメンションについてステータスにある値をループ処理し、ターゲット・オブジェクトの対応するセルにデータ値を代入します。

ターゲット・オブジェクトがディメンション・リストのコンポジットで定義されている場合、非NA値が代入されるターゲット・セルが欠落していると、Oracle OLAPはそれを自動的に作成します。このステップでは、その新しいセルに対応するすべてのディメンション値の組合せもコンポジットに追加されます。したがって、ターゲット・オブジェクトおよびコンポジットは、代入後にサイズが大きくなることがあります。ターゲットにすでに存在しているセルにのみ値を代入する場合は、ACROSSキーワードを使用します。

注意:
SETとともにUNRAVELを使用すると、式のディメンションが変数のディメンションと異なる場合に、その式の値を変数のセルに代入できます。

構文

[SET] target-name [=] expression [ACROSS composite]

パラメータ

SET

SETはオプションです。この機能の古いコマンド形式であり、互換性を維持するために対応しています。

target-name

データを代入して格納するターゲット・オブジェクトの名前。ターゲット・オブジェクトにすることができるアナリティック・ワークスペース・オブジェクトのリストは、表10-9「代入文でのオブジェクトの使用」を参照してください。

=

=(代入または等号)演算子は、1つ以上の値を変数、オプションまたはリレーションに代入します。「代入演算子」も参照してください。

expression

ターゲット・オブジェクトに代入するデータ値のソース。表10-9「代入文でのオブジェクトの使用」を参照してください。

ACROSS composite

コンポジットでディメンション化された変数にデータを代入する場合、デフォルトの動作はオブジェクトの各ベース・ディメンションのステータスにあるすべての値をループ処理します。Oracle OLAPは、非NA値が代入されるターゲット・セルが欠落している場合、それを自動的に作成し、必要なディメンション値の組合せをコンポジットに追加します。

コンポジットで定義されている変数の既存のセルにのみ値を代入する場合は、ACROSSキーワードを使用しますが、このキーワードは、コンポジットの一部であるターゲットのディメンションに対して=がループを実行する方法を変更します。=は、そのディメンションのステータスにある値の可能なすべての組合せをループするのではなく、コンポジットにすでに存在するステータスにある値の組合せのみをループします。

ACROSSキーワードは、コンポジットを指定するために使用します。ただし、コンポジットではなく、コンポジットのベース・ディメンションを指定する場合は、代入文によってコンポジットに多数の値が追加されることがあるので注意してください。

使用上の注意

代入文実行時におけるプログラム実行のトリガー

TRIGGERコマンドを使用すると、SET文を、OLAP DMLプログラムを自動的に実行するイベントにすることができます。詳細は、「トリガー・プログラム」を参照してください。

ディメンション性とパフォーマンス

ターゲットに複数のディメンションがある場合、=文は、デフォルトのステータスで反映される論理的な順序に関係なく、追加された順序でディメンション値をループします。多次元の場合、複合ディメンションに対してループされます。定義にリストされている最初のディメンションが最も速く変化します。ターゲットを式の値に設定する場合、ソースの式がターゲットと同じディメンションで同じ順序であると、Oracle OLAPのパフォーマンスはさらに向上します。

式中の異なるディメンションの変数

代入文に異なるディメンションのオブジェクトが複数含まれる場合、計算が複雑になります。複雑な代入文の処理を次にまとめます。A = Bという文において、Aは式Bに設定されるオブジェクトですが、Oracle OLAPは最初にAのディメンションを判別します。次にそのディメンションのステータスを判別します。ディメンションのステータスにあるディメンション値の組合せごとに、次のように処理されます。

1. Oracle OLAPは、設定するAの単一の値(セルともいう)を決定します。

2. 式Bの各構成要素(変数、計算式、ファンクション、修飾データ参照またはリテラル)について、Oracle OLAPは設定するAのセルに対応する単一の値を決定します。式の構成要素がディメンション化されていない場合またはリテラルである場合、Oracle OLAPは単純にその値を使用します。式の構成要素がAとは異なるディメンションを持つ場合、Oracle OLAPはそのディメンションのステータスにある最初の値を使用します。

3. Oracle OLAPは、手順2で取得された単一の値に対して指定された計算を実行し、手順1で選択したAのセルにその結果を格納します。

代入文でのオブジェクトの使用

表10-9「代入文でのオブジェクトの使用」に、代入文で使用できるオブジェクトと、それらがターゲット式またはソース式として使用可能かどうかを示します。

表10-9 代入文でのオブジェクトの使用

オブジェクト

ターゲット

ソース

コンポジット

なし

あり

ディメンション

モデルでのみ可

あり

計算式

あり

あり

ファンクション(ファンクションとしてのOLAP DMLプログラムを含む)

なし

あり

リレーション

あり

あり

サロゲート

あり

あり

値セット

なし

あり

変数

あり

あり

ワークシート

あり

あり

関連項目:
「変数への値の代入」、「リレーションへの値の代入」、「モデルでの方程式のルール」、「結合ディメンションでディメンション化された式」および「ディメンション・サロゲートへの値の代入」

変数への値の代入

=(SET)文を使用して単一セル式の値を単一セルに代入すると、単一の値が格納されます。ただし、=文を使用して1つ以上のディメンションを持つターゲット変数に単一セル式の値を代入すると、ターゲット変数の各ディメンションのステータスにある値に対して代入がループ処理され、その変数の対応するセルにデータ値が代入されます。

複数行の値を固定幅のテキスト変数に代入する場合、変数は最初の行にのみ設定されます。複数行の値を固定幅のテキスト変数に代入するには、JOINCHARSファンクションを使用して複数行の値を1行の長さに変更します。たとえば、非固定幅のテキスト変数textvarがあるとします。次の文

SHOW textvar

次の出力が生成され、textvarの値の各行が改行して表示されます。

This is a variable
that has a multiline
text value.

この値を60バイトの固定幅のfixedtextという変数に代入して値を表示するには、次の文を使用します。

fixedtext = JOINCHARS(textvar)
SHOW fixedtext

次の出力が生成され、textvarの値が1行で表示されます。

This is a variable that has a multiline text value.

textvar変数の値の実際のバイト数がfixedtext変数の幅を超過する場合、textvarの値はfixedtextに格納されるときに切り捨てられます。

リレーションへの値の代入

例10-114「リレーションへの値の代入」に示すように、SET文を使用してリレーションに値を代入できます。代入文を実行すると、ターゲット・リレーションの各ディメンションのステータスにある値に対してループ処理され、ターゲット・リレーションの対応するセルにデータ値が代入されます。

次のいずれかを代入して、テキスト・ディメンションを含むリレーションに値を代入できます。

- ディメンションのテキスト値

- ディメンションのデフォルトのステータス・リストに含まれるディメンション値の位置を示すINTEGER

ディメンションへの値の代入

モデル方程式での計算の結果が数値である場合にのみ、ディメンションの値の代入に=文を使用できます。この場合、=演算子を使用してその結果をディメンション値に代入できます。ただし、モデルの方程式(つまり、式)は、他のコンテキストで使用される式とはいくつかの点で異なります。モデル内での代入文の使用方法については、「モデルでの方程式のルール」を参照してください。それ以外のケースでのディメンションへの値の追加方法については、MAINTAINコマンドを参照してください。

ディメンション・サロゲートへの値の代入

ディメンション・サロゲートへの値の代入では、=(SET)文を使用します。たとえば、次の文はディメンション・サロゲートstorenameを定義しますが、これはNUMBER型のディメンションstore_idのTEXT型のサロゲートであり、storenameの4番目の位置に値を代入し、store_idの4番目の値、つまり100のサロゲートの値をレポートします。

DEFINE storename SURROGATE store_id TEXT
storename(storename 4) = 'Molly\'s Emporium'
REPORT W 25 storename(store_id 100)

STORENAME(STORE_ID 100)
-------------------------
Molly's Emporium

たとえば、5つの値を持つNUMBERディメンションnumdimにINTEGERディメンション・サロゲートintsurrを定義すると、intsurrのレポートは次のようになります。

INTSURR
-------
1
2
3
4
5

ディメンションと同様に、ディメンション・サロゲートの値は一意である必要があります。ただし、ディメンションと異なり、ディメンション・サロゲートはINTEGER型でないかぎり、NA値を持つことができます。ディメンションの値とサロゲートのいずれかの値が同じでもかまいません。

代入文のターゲットでのQDRの使用

=(SET)文のターゲットでQDRを使用できます。これによって、変数またはリレーションの特定のセルに値を代入できます。

次の例は、修飾データ参照で指定されているsales変数のデータ・セルに値10200を代入します。salesという名前の変数の値がBoston、TentsおよびJan99に関連付けられたセルに存在しない場合、このセルに値が代入され、変数に追加されます。セルに値が存在する場合、値10200によってその値が上書きされます。

sales(market 'Boston' product 'Tents' month 'Jan99')= 1020

結合ディメンションでディメンション化された式

式が結合ディメンションでディメンション化されている場合、Oracle OLAPはそのディメンションのベース・ディメンション値に対する関係を使用してデータを正しいセルに代入します。結合ディメンションでディメンション化されている変数の値は、ベース・ディメンションのいずれかでディメンション化されている式に代入できます。その逆も当てはまります。「データの緻密化」を参照してください。

モデルでの方程式のルール

モデルの方程式は、OLAP DML代入文を使用して変数またはディメンション値に値を代入します。モデルの方程式は、Oracle OLAPの他のコンテキストで使用される方程式といくつかの点で異なります。

- モデル方程式では、通常に変数の名前を使用するかぎり、どこででもディメンション値の名前を使用できます。ディメンション値に基づいた計算を実行でき、計算の結果をディメンション値に代入できます。1つ以上のディメンション値を直接参照する方程式は、ディメンションベースの方程式と呼ばれます。

- モデル方程式では、アンパサンド置換を使用できません。

- ファンクションとして使用する場合にのみ、プログラムを構成要素として計算に含めることができます。

- 1つのディメンションベースの方程式内では、すべてのディメンション値が同じディメンションに属している必要があります。

- 計算の結果をディメンション値に代入する場合、その結果は数値である必要があります。

- モデル方程式が基準にする各ディメンションは、DIMENSION文にリストされている必要があります。モデルにINCLUDE文が含まれている場合は、インクルードされるモデルから適切なDIMENSION文が継承される必要があります。モデルにINCLUDE文が含まれていない場合は、適切なDIMENSION文が含まれている必要があります。モデルをコンパイルまたは実行すると、Oracle OLAPは明示的にリストされているディメンションまたはDIMENSION文で継承されたディメンションを検索し、各ディメンション値が属するディメンションを特定します。

ディメンション・ステータスおよびモデル方程式: モデルに、データをディメンション値に代入する代入文が含まれている場合、ディメンションは一時的にその値に制限されます。その状態で計算を実行してから、ディメンションの初期ステータスにリストアします。

結合ディメンション値の書式化: ディメンションベースの方程式が結合ディメンションの値を参照する場合、特別な書式が必要です。

- ディメンション値の指定全体を山カッコで囲み、さらに一重引用符で全体を囲みます。各値を個別に一重引用符で囲まないでください。

- ベース・ディメンション値には、大文字と小文字を正しく使用します。

- ディメンション値の指定に空白が埋め込まれたテキスト値が含まれる場合、それらのディメンション値をカンマで区切る必要があります。

たとえば、item.orgがベース・ディメンションitemおよびorgを持つ結合ディメンションであるとします。この場合、次の書式を使用してitem.orgの値を参照します。

'<Expenses, Direct Sales>'

テキスト・ディメンション値の書式化: ディメンションベースの方程式が、空白が埋め込まれた、または大文字と小文字が混在したテキスト・ディメンション値を参照する場合、そのディメンション値は一重引用符で囲みます。ディメンション値には、大文字と小文字を正しく使用します。

たとえば、lineitemという名前のテキスト・ディメンションに、空白が埋め込まれている値があるとします。この場合、次の書式を使用します。

'Software Revenue'

モデル方程式のDAY、WEEK、MONTH、QUARTER、YEAR値の指定: モデル方程式がDAY、WEEK、MONTH、QUARTER、YEAR型のディメンションに基づいている場合、日付書式ではなくディメンションのVNF(値名書式)を使用して、ディメンションの値を指定する必要があります。また、VNFはディメンション値を次のように書式化する必要があります。

- 値は文字で始まります。

- 値は、文字、数字、アンダースコア、ピリオドのみで構成します。

DAY、WEEK、MONTH、QUARTER、YEAR型のディメンションにVNFが割り当てられていない場合、そのディメンションのデフォルトのVNFを使用できます。VNFコマンドに関する説明に、各ディメンション型のデフォルトのVNFのリスト、およびVNFをディメンションに割り当てる方法が示されています。

DAYディメンションのデフォルトのVNFは、各ディメンション値の最初の文字に数字が指定されているため受け入れられません。DAYディメンションの場合は、ディメンション名を指定してその値をカッコと一重引用符で囲みます。

たとえば、daydimという名前のDAYディメンションの場合、次の書式を使用できます。

daydim('01jul97')

INTEGERディメンション値の書式設定: ディメンションベースの方程式がINTEGERディメンションの値を参照する場合、そのディメンション値は一重引用符で囲みます。

たとえば、intdimという名前のINTEGERディメンションの場合、次の書式を使用して最初のディメンション値を参照します。

'1'

モデルが複数のディメンションに基づいている場合、モデル・コンパイラはリテラルなINTEGER値が属するディメンションを正しく特定できない場合があります。この場合、ディメンションの名前を指定し、「あいまいなディメンション値の書式設定」で説明するように値をカッコおよび一重引用符で囲みます。

あいまいなディメンション値の書式設定: モデル・コンパイラは、ディメンション値が属するディメンションを正しく特定できない場合があります。たとえば、次のような場合に生じます。

- 2つ以上のディメンションが同じ名前のディメンション値を持つ場合

- DAYディメンションがデフォルトのVNF(数字で始まる)を使用している場合

- INTEGER値がディメンション内の位置、またはディメンションのリテラルなINTEGER値として解釈できる場合。

このような場合、次のルールに従うことでモデルベースの方程式の不明瞭性を回避できます。

- ディメンション値を一重引用符で囲みます。

- 引用符付きの値をカッコで囲みます。

- カッコの前にディメンションの名前を付けます。

たとえば、intdimという名前のINTEGERディメンションの場合、次の書式を使用して最初のディメンション値を参照します。

intdim('1')

例

例10-113 変数への値の代入

最初の例では、2つの変数unitsおよびpriceを定義し、どちらもproductでディメンション化されているとします。次の例は、productディメンションの各値について、売上金額(units*price)を計算します。代入文を使用して、結果を変数salesに格納しますが、この変数も、productでディメンション化されています。

sales = units*price

次の例では、choicedesc変数がchoiceでディメンション化されているとします。変数にデータを入力する前、変数のセルにはNA値のみが含まれています。

CHOICE           CHOICEDESC
-------------- --------------------
Report         NA
Graph          NA
Analyze        NA
Data           NA
Quit           NA

次の文を使用してchoicedesc変数を初期化します。

choicedesc =  JOINCHARS ('Description for ' choice)

これにより、変数のすべてのchoicedescセルに適切な値が含まれます。

CHOICE             CHOICEDESC
-------------- -------------------------
Report         Description for Report
Graph          Description for Graph
Analyze        Description for Analyze
Data           Description for Data
Quit           Description for Quit

次の例は、time、productおよびdistrictで式をディメンション化し、この式を新しい変数に割り当てます。この式は、2001年の売上数量に基づいて2002年の売上計画を計算します。

DEFINE units.plan INTEGER <month product district>
LIMIT month TO 'DEC02'
units.plan = LAG(units 12 month) * 1.15

例10-114 リレーションへの値の代入

アナリティック・ワークスペースには、次に示すように、geogという名前の地理の階層ディメンションに関する定義、および地理階層の親子関係を表す値を含むgeog_parentrelという名前のリレーションに関する定義が含まれているとします。

DEFINE geog DIMENSION TEXT
DEFINE geog_parentrel RELATION geog <geog>

階層ディメンションは、次のMAINTAIN ADD文を使用して移入できます。

" Populate the geog dimension with values for all levels
MAINTAIN geog ADD 'North America' 'Europe' 'United States' 'Canada' 'France' 'Germany'
MAINTAIN geog ADD 'Massachusetts' 'California' 'Quebec' 'Ontario'
MAINTAIN geog ADD 'Boston''Springfield' 'San Francisco''Los Angeles' 'Toronto' 'Ottawa'
MAINTAIN geog ADD 'Montreal''Quebec City' 'Paris' 'Marseilles' 'Bonn' 'Berlin'

次の代入文を使用してgeog_parentrelを移入します。geog_parentrelに値を代入する前に、geogを適切な値に制限する必要があります。

"  Limit geog (and therefore geog_parentrel) to countries and assign
"   parent value (continent name) to those countries in geog_parentrel
LIMIT geog to 'United States' 'Canada'
geog_parentrel = 'North America'
LIMIT geog to ALL
LIMIT geog to 'France' 'Germany'
geog_parentrel = 'Europe'

"  Limit geog (and therefore geog_parentrel) to states or provinces and assign
"   parent value (country name) to those states or provinces in geog_parentrel
LIMIT geog to ALL
LIMIT geog to 'Massachusetts' 'California'
geog_parentrel = 'United States'
LIMIT geog to ALL
LIMIT geog to 'Quebec' 'Ontario'
geog_Chapter 9, "OLAP DML Commands: A-G" = 'Canada'

"  Limit geog (and therefore geog_parentrel) to cities and assign
"   parent value (state, province, or country) to those cities in geog_parentrel
LIMIT geog to ALL
LIMIT geog to 'Boston' 'Springfield'
geog_parentrel = 'Massachusetts'
LIMIT geog to ALL
LIMIT geog to 'San Francisco' 'Los Angeles'
geog_parentrel = 'California'
LIMIT geog to ALL
LIMIT geog to 'Montreal' 'Quebec City'
geog_parentrel = 'Quebec'
LIMIT geog to ALL
LIMIT geog to 'Toronto' 'Ottawa'
geog_parentrel = 'Ontario'
LIMIT geog to ALL
LIMIT geog to 'Paris' 'Marseilles'
geog_parentrel = 'France'
LIMIT geog to ALL
LIMIT geog to 'Bonn' 'Berlin'
geog_parentrel = 'Germany'
LIMIT geog to ALL

geog_parentrelのレポートには、代入された値が表示されます。

COLWIDTH = 20
REPORT geog_parentrel
REPORT geog_parentrel

GEOG                GEOG_PARENTREL
---------------- --------------------
North America    NA
Europe           NA
United States    North America
Canada           North America
France           Europe
Germany          Europe
Massachusetts    United States
California       United States
Quebec           Canada
Ontario          Canada
Boston           Massachusetts
Springfield      Massachusetts
San Francisco    California
Los Angeles      California
Toronto          Ontario
Ottawa           Ontario
Montreal         Quebec
Quebec City      Quebec
Paris            France
Marseilles       France
Bonn             Germany
Berlin           Germany

例10-115 修飾データ参照の使用

この例は、代入文を修飾データ参照とともに使用して変数budgetに値を代入します。予算明細項目(Net.Income)に代入する値は、2つの他の明細項目(Opr.IncomeおよびTaxes)の差として計算されるため、正しいデータ値を取得するには、修飾データ参照を使用する必要があります。

budget(line Net.Income)= budget(line Opr.Income) - budget(line Taxes)

例10-116 コンポジットを含む変数への値の代入

salesのデータを、sparse_salesの既存のデータ・セル、つまり関連付けられているディメンション値がステータスにあるセルにのみ代入するには、次の文を使用します。

sparse_sales = sales ACROSS SPARSE<product market>

ソース式が単一の値である場合、ACROSSキーワードが特に有効です。sparse_salesのディメンションに制限がない場合、次のような代入文では、ソース式がNAになることはないため、ディメンション値のすべての組合せについてセルが作成されます。

sparse_sales = 0

これは、コンポジットを含む変数をディメンション化する目的に反します。

これに対し、次の文ではsparse_salesの既存のセルにのみ0(ゼロ)が設定されます。

sparse_sales = 0 ACROSS SPARSE<product market>

例10-117 データの緻密化

地区ごとに、一部の製品のみが販売されているとします。現在、地区と製品の特定の組合せにはデータがあるが、それ以外はNA値である変数salesがあります。コンポジットまたは結合ディメンションを定義し、それを新しい変数のディメンションとして使用すると、salesデータに関して稠密な配列を作成できます。新しい変数にデータを直接代入するには、代入文を使用します。コンポジットまたは結合ディメンションの値にすべての組合せとデータが含まれる場合、元の変数を削除してアナリティック・ワークスペースの領域を節約できます。

DEFINE proddist DIMENSION <product district>
MAINTAIN proddist ADD <'Tents' 'Boston'> <'Canoes' 'Seattle'> -
<'Sportswear' 'Atlanta'>
DEFINE sales.dense DECIMAL <month proddist>
sales.dense = sales
LIMIT month TO FIRST 4

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

----------------SALES.DENSE----------------
-----PRODDIST------ -------------------MONTH-------------------
PRODUCT    DISTRICT   Jan95      Feb95      Mar95      Apr95
-------- ---------- ---------- ---------- ---------- ----------
Tents      Boston    32,153.52  32,536.30  43,062.75  57,608.39
Canoes     Seattle   64,111.50  71,899.23  83,943.86  14,383.90
Sportswear Atlanta  114,446.26 123,164.92 138,601.64 141,365.66

別の方法として、結合ディメンションのかわりにコンポジットを使用できます。この場合、次の文を使用します。

DEFINE sales.compact DECIMAL <month SPARSE <product district>>
sales.compact = sales

sales.compactを定義するときには、名前のないコンポジットがOracle OLAPによって自動的に作成され、代入文を使用するときには、そのコンポジットにディメンション値の組合せが自動的に追加されます。Oracle OLAPは、非NA値のsalesについてのみディメンション値の組合せを作成します。

SET1

SET1コマンドは、単一の値を変数、オプション、リレーションまたはディメンション・サロゲートに代入するコマンドです。オブジェクトに1つ以上のディメンションがある場合、SET1コマンドは現行のステータスにあるオブジェクト・セルにその値を代入します。

SET1コマンドは、ディメンション化されたオブジェクトをループしないため、ASSIGNトリガー・プログラムで使用して1つのオブジェクトに値を代入できます。

構文

SET1 target-name = expression

パラメータ

target-name

データを代入して格納するターゲット・オブジェクトの名前。ターゲット・オブジェクトにすることができるアナリティック・ワークスペース・オブジェクトのリストは、表10-9「代入文でのオブジェクトの使用」を参照してください。

expression

ターゲット・オブジェクトに代入するデータ値のソース。表10-9「代入文でのオブジェクトの使用」を参照してください。

例

SET1の使用例は、例10-164「ASSIGNトリガー・プログラムでの値の設定」を参照してください。

SET_INCLUDED_MODEL

SET_INCLUDED_MODEL プログラムを実行すると、事前定義されたキューブ・ディメンションのモデルへのINCLUDEモデル文の追加、または事前定義されたキューブ・ディメンションのモデルからのINCLUDEモデル文の削除が行われます。このプログラムの実行で行われる変更はトランザクショナルではなく、プログラムの一部としてCOMMITが自動的に実行されます。

関連項目:
「キューブ対応のOLAP DML文」

構文

CALL SET_INCLUDED_MODEL(logical_dim, model_name, custom_model)

パラメータ

CALL

SET_INCLUDED_MODELは引数を持つOLAP DMLプログラムであるため、OLAP DML CALL文を使用して起動します。

logical_dim

変更するキューブ・ディメンションのOracleデータ・ディクショナリ名を示すテキスト式。

関連項目:
「OLAP論理オブジェクトの名前の値を指定する場合のガイドライン」

model_name

キューブ・ディメンションに関連付けられている論理モデルの名前を示すテキスト式。

custom_model

INCLUDE文を追加するOLAP DML作成のモデルを示すテキスト式。

参照:
CREATE_LOGICAL_MODEL

INCLUDE文を削除するには、NAを指定します。

例

例10-118 OLAPキューブの静的および動的モデルの作成

my_cubeという名前のOLAPキューブをディメンション化する、my_timeという名前のOLAPキューブ・ディメンションが作成されているとします。my_cube内には、2つのメジャー(salesおよびmoving_sales)があります。次に、my_cubeの静的および動的モデルを作成します。

1. 静的モデルを作成するには、次のPL/SQL文を実行して、setup_pre_modelという名前のユーザー作成のOLAP DMLプログラムを実行します。

exec dbms_aw.execute('call my_util_aw!setup_pre_model');

次のsetup_pre_modelプログラムの定義からわかるように、モデルは実際にはSET_INCLUDED_MODELプログラムを使用して定義され、ADD_CUBE_MODELプログラムを使用して追加されます。これらのプログラムはどちらもOLAP DMLから提供されるプログラムです。

DEFINE SETUP_PRE_MODEL PROGRAM
PROGRAM

VARIABLE _pre_model    text
VARIABLE _aw_dim       text

_pre_model = 'my_aw!my_pre_model'
_aw_dim = OBJORG(DIM 'my_time')

DEFINE &_pre_model model
CONSIDER &_pre_model
MODEL JOINLINES(JOINCHARS('dimension ' _aw_dim) -
JOINCHARS(_aw_dim '(\'L3_3\')=10') -
'end')

CALL SET_INCLUDED_MODEL('my_time', 'pre_model', _pre_model)
CALL ADD_CUBE_MODEL('my_cube', 'my_time', 'pre_model', YES)
END

2. 次のPL/SQL文を実行して、my_timeディメンションをロードし、my_cubeをロードして解決します。

exec dbms_cube.build('MY_CUBE');

3. これで、次の文を発行することにより、静的モデルを使用したsalesおよびmoving salesの初期値についてのレポートを生成できます。

select my_time||'  '||lpad(sales, 2)||'  '||lpad(moving_sales, 2)
from my_cube_view
order by my_time asc;

MY_TIME||''||LPAD(SALES,2)||''||LPAD(MOVING_SALES,2)
--------------------------------------------------------------------
L1_1  14  14
L2_1  12  12
L2_2   2  14
L3_1   1   1
L3_2   1   2
L3_3  10  11
L3_4   1  11
L3_5   1   2

8 rows selected.

4. L1_2 = (L2_2' * 2)となる動的モデルを作成するには、次のPL/SQL文を実行して、SETUP_POST_MODELという名前のユーザー作成のOLAP DMLプログラムをコールします。

exec dbms_aw.execute('call my_util_aw!setup_post_model');

次に示すユーザー作成のsetup_post_modelプログラムの定義からわかるように、モデルは実際にはSET_INCLUDED_MODELプログラムを使用して定義され、ADD_CUBE_MODELプログラムを使用して追加されます。これらのプログラムはどちらもOLAP DMLから提供されるプログラムです。

DEFINE SETUP_POST_MODEL PROGRAM
PROGRAM

VARIABLE _post_model   text
VARIABLE _aw_dim       text
VARIABLE _start_date   text
VARIABLE _timespan     text
VARIABLE _member       text

_post_model = 'my_aw!my_post_model'
_aw_dim = OBJORG(DIM 'my_time')
_start_date = OBJORG(ATTRIBUTE 'my_time' 'start_date')
_timespan = OBJORG(ATTRIBUTE 'my_time' 'timespan')
_member = 'L1_0'

DEFINE &_post_model model
CONSIDER &_post_model
MODEL JOINLINES( -
JOINCHARS('dimension ' _aw_dim) -
JOINCHARS(_aw_dim '(\'' _member '\')=' _aw_dim '(\'L2_2\')*2') -
'end')

CALL SET_INCLUDED_MODEL('my_time', 'post_model', _post_model)
CALL ADD_CUBE_MODEL('my_cube', 'my_time', 'post_model', NO)

" Add _member to the dimension
CALL ADD_DIMENSION_MEMBER(_member, 'my_time', NA, 'L1', NA, NO)
CALL UPDATE_ATTRIBUTE_VALEU(_member, 'my_time', 'start_date', -
&_start_date(&_aw_dim 'L1_1')-365, NO)
CALL UPDATE_ATTRIBUTE_VALUE(_member, 'my_time', 'timespan', -
&_timespan(&_aw_dim 'L1_1'))
UPDATE
COMMIT
END

5. 次の文を実行して、my_time、salesおよびmoving_salesの新しい値についてのレポートを生成します。

select my_time||'  '||lpad(sales, 2)||'  '||lpad(moving_sales, 2)
from my_cube_view
order by my_time asc;

MY_TIME||''||LPAD(SALES,2)||''||LPAD(MOVING_SALES,2)
--------------------------------------------------------------------
L1_0   4   4
L1_1  14  18
L2_1  12  12
L2_2   2  14
L3_1   1   1
L3_2   1   2
L3_3  10  11
L3_4   1  11
L3_5   1   2

9 rows selected.

SET_PROPERTY

SET_PROPERTYプログラムを実行すると、Oracleデータ・ディクショナリで定義されたキューブの導出メジャーが持つ$LOOP_DENSEプロパティまたは$LOOP_VARプロパティの値が変更されます。このプログラムの実行で行われる変更はトランザクショナルではなく、プログラムの一部としてCOMMITが自動的に実行されます。

関連項目:
「キューブ対応のOLAP DML文」

構文

CALL SET_PROPERTY(property_name, logical_cube, meas_name, property_value)

パラメータ

CALL

SET_PROPERTYは引数を持つOLAP DMLプログラムであるため、OLAP DML CALL文を使用して起動します。

property_name

$LOOP_VARまたは$LOOP_DENSEを示すテキスト式。

logical_cube

meas_nameを含むキューブのOracleデータ・ディクショナリ名を示すテキスト式。

関連項目:
「OLAP論理オブジェクトの名前の値を指定する場合のガイドライン」

meas_name

$LOOP_VARまたは$LOOP_DENSEプロパティの値を変更する導出メジャーのOracleデータ・ディクショナリ名を示すテキスト式。

property_value

property_nameで指定したプロパティに対して有効な値を示すテキスト式。有効な値については、$LOOP_DENSEまたは$LOOP_VARを参照してください。

SHOW

SHOWコマンドは、式の単一の値を表示するコマンドです。通常、SHOWは、単一セルの変数の値またはメッセージを表示するのに使用します。SHOWは、エラー条件が発生せずに、エラーに似たメッセージを生成するプログラムで便利です。SHOWの出力は現行の出力ファイルに送信されます。

構文

SHOW expression [NONL]

パラメータ

expression

表示する値。expressionがディメンション化されている場合は、ディメンションの現行のステータスに基づいてその式の最初の値のみが表示されます。テキスト・リテラルを表示する場合は、一重引用符で値を囲む必要があります。

NONL

値の最後に改行文字を付加しないことを示します。デフォルトでは、SHOWは改行文字を付加します。

使用上の注意

出力行の連結

SHOWに付けるNONL引数は、プログラムで便利です。この引数を使用すると、複数の値を単一の出力行に連結できます。このためには、NONL引数を持つ1つ以上のSHOWコマンドの後に、NONL引数を持たない1つのSHOW文を続けます。すべてのSHOWコマンドから得られた値は、指定した順序で単一の出力値に連結されます。行の長さによって、実際には、この値が複数行の出力として生成される場合があります。

エラー・メッセージの生成

プログラムからエラー・メッセージを生成する場合、SHOWをSIGNALのかわりとして使用できます。SIGNALはエラー状態を知らせてプログラムの実行を停止しますが、SHOWはこれを実行せずにメッセージを生成します。エラー・メッセージは、デバッグ・ファイルに送信して活用できます。DBGOUTFILE文を使用してメッセージをデバッグ・ファイルに送るように指定すると、SHOWの出力はデバッグ・ファイルおよび現行の出力ファイルに送信されます。

コンポジットの値の表示

SHOWを名前付きまたは名前のないコンポジットとともに使用すると、コンポジットにそのベース・ディメンションのステータスの最初の値に対応する値がない場合はNA値が表示されます。たとえば、次の文を発行します。

SHOW SPARSE <market product>

marketおよびproductの現行値の組合せがコンポジットに存在しない場合、NA値を生成します。

テキストの行の分割

テキスト式を出力テキストで2つ以上の行に分割するには、改行デリミタ(\n)をテキストの適切な場所に挿入します。

NTEXT値に対するSHOWの使用

SHOWコマンドはNTEXT値を出力ファイルのキャラクタ・セットに変換します。NTEXT値を出力ファイルのキャラクタ・セットで表示できない場合、その文字は正しく表示されません。

例

例10-119 オプションの値の表示

この例では、SHOWを使用してDECIMALSオプションの現行値をレポートします。OLAP DML文

SHOW DECIMALS

によって、次の出力が生成されます。

2

例10-120 データ値の表示

SHOWを使用してディメンション化された変数の値をレポートする場合、そのディメンションの現行のステータスに基づいて変数の最初の値のみが表示されます。OLAP DML文

SHOW JOINCHARS('Actual = ' actual)

によって、次の出力が生成されます。

Actual = 533,362,88

例10-121 SHOWによるエラー・メッセージの作成

エラー・ラベルに分岐させずに警告メッセージを表示する場合、SHOW文を使用できます。

select:
LIMIT month TO nummonths
IF STATLEN(month) GT 9
THEN DO
SHOW 'You can select no more than 9 months.'
GOTO finish
DOEND
REPORT DOWN district W 6 units
finish:
POP month
RETURN

例10-122 値セットの値の表示

アナリティック・ワークスペースに、値Jan95、May95およびDec95を持つ、monthsetという値セットが格納されているとします。SHOWを使用すると、この値セットの値を表示できます。

SHOW monthset
Jan95
May95
Dec95

SIGNAL

SIGNALコマンドは、プログラム内部からユーザー定義のエラー・メッセージを生成します。TRAPがオンのときにOracle OLAPによってSIGNAL文が実行されると、実行はトラップ・ラベルに分岐します。そして、プログラム内のトラップ・ラベルに続く文が実行されます。プログラムにアクティブなトラップ・ラベルがある場合、プログラムの実行はそのラベルに分岐します。トラップ・ラベルがない場合、プログラムの実行は終了し、そのプログラムが他のプログラムによってコールされていた場合は、コール側プログラムに実行の制御が戻ります。

構文

SIGNAL {errname [message]|STOP}

パラメータ

errname

生成されるエラー・メッセージの名前を示すTEXT式。errnameは、SIGNAL文の実行時にOracle OLAPによってERRORNAMEオプションに格納されます。通常、エラーの名前はエラー・メッセージに表示されません。ただし、messageを省略すると、message引数に示すストック・メッセージとともにエラー名(errname)が表示されます。

特別な名前PRGERRを使用すると、エラーが発生したコール側プログラムと通信できます。SIGNAL PRGERR文は、ERRORNAMEを空白値に設定し、別のエラー・メッセージを表示せずにエラー状態をコール側プログラムに渡します。ネストしたプログラムの連鎖をさかのぼってSIGNALでエラーを渡す方法については、TRAPコマンドを参照してください。

message

生成するエラー・メッセージを指定するTEXT式。長い行のエラー・メッセージを作成する場合、自分で改行を追加してテキストを書式設定する必要があります。各行の終わりに改行のエスケープ・シーケンス(\n)を入力します。入力できるテキストは、最大で6行または4,000文字のいずれか先に達した方です。1行で4,000文字を超過するテキストを入力しようとすると、エラーが発生します。

この引数を省略すると、SIGNALは次のメッセージを生成します。

ERROR: (errname) Please contact the administrator of your
Oracle Oracle OLAP application.

messageは、SIGNAL文の実行時にOracle OLAPによってERRORTEXTオプションに格納されます。

STOP

現在実行しているすべてのプログラムの実行を即座に停止します。エラー・メッセージは生成されません。このエラー状態は、アクティブなTRAPラベルではトラップされません。

例

例10-123 エラーの通知

1つの引数を必要とするプログラムを記述したとします。引数を指定しないと、プログラムを実行する目的がなくなります。このため、最初にプログラムは引数が渡されたかどうかを確認します。引数が渡されていない場合、プログラムはエラー・メッセージを現行の出力ファイルに送信してから終了します。

次のプログラム行は、引数の有無を確認し、見つからない場合はエラーを通知します。

IF ARGS EQ ''
THEN SIGNAL msg1 'You must supply an argument.'

SIGNALは、次のメッセージを現行の出力ファイルに送信します。

ERROR: You must supply an argument.

例10-124 引数の値が無効な場合のエラーの通知

プログラムで、1から9か月までのデータを表示できるレポートを作成するとします。プログラムが9より大きな引数でコールされる場合、エラーを通知できます。この例では、nummonthsが、9より大きいとエラーになる引数の名前です。

select:
TRAP ON error
PUSH month
LIMIT month TO nummonths
IF STATLEN(month) GT 9
THEN SIGNAL toomany -
'You can specify no more than 9 months.'
REPORT DOWN district W 6 units
finish:
POP month
RETURN
error:
POP month
IF ERRORNAME EQ 'TOOMANY'
THEN SHOW 'No report produced'

SLEEP

OLAP DMLプログラム内で、SLEEPコマンドは少なくとも指定した秒数の間、プログラムの実行を一時停止します。

注意:
プログラムの実行を一時停止する必要がほとんどないため、SLEEPがOracle OLAPプログラムで使用されることはほとんどありません。

構文

SLEEP n

パラメータ

n

Oracle OLAPをスリープにする秒数を指定する数式。プログラムの実行は、少なくともこの秒数の間一時停止されます。

例

例10-125 プログラムの実行の一時停止

あるプログラムで、完了に10秒かかる文を実行するとします。この文の後に次のSLEEP文を続けると、プログラムの実行を10秒間一時停止できます。

SLEEP 10

SORTコマンド

SORTコマンドは、ディメンションまたはディメンション・サロゲートの現行のステータス・リストの値、あるいは値セットの値の順序を並べ替えるコマンドです。

関連項目:
SORTファンクション

構文

SORT dimension [byhierarchy] [bycriterion...]

ここで、

- byhierarchyはオプションの句で、階層内のファミリ・リレーションに基づき、親リレーションを使用して、階層ディメンションまたはそのディメンション・サロゲートの現行のステータス・リストの値の順序を並べ替えたり、値セットに値を代入します。SORT文に指定できるbyhierarchy句は1つのみです。この句は、SORT文の最初の句である必要があります。
HIERARCHY parent-relation [INVERT] [DEPTH n] [SORTORPHANS]

- bycriterionは、明示的に指定された基準を使用して、ディメンションまたはそのディメンション・サロゲートの現行のステータス・リストの値の順序を並べ替えたり、値セットに値を代入したりします。SORT文に指定できるbycriterion句の数に制限はありません。
{A|D} [NAFIRST] criterion

パラメータ

dimension

値がディメンション、ディメンション・サロゲートまたは値セットの名前であるテキスト式。

HIERARCHY

parent-relationでの値位置に基づいてdimensionの値をソートするように指定します。

parent-relation

dimensionの親子セルフ・リレーションの名前を指定します。このリレーションは、各ディメンション値に対して、その親ディメンション値(特定の階層におけるすぐ上位の値)である、ディメンション内の別の値を保持します。この親リレーションは、複数のディメンションを持つことが可能です。

ヒント:
単一値の指定には、parent-relationのQDRを使用できます。

INVERT

Oracle OLAPが階層内の子を親の前に配置するように指定します。(デフォルトでは、子は親の後に配置されます。)

DEPTH n

ステータスに配置される世代の数(結果に含まれる値の数)を、階層の最上位からの数で指定します。nのデフォルト値は99です。結果に値を含めない場合(つまり、NULLのステータスが必要な場合)は、nに-1を指定します。階層の最上位のみがステータスに必要な場合(つまり、親を持たないディメンション値のみが必要な場合)は、0(ゼロ)を指定します。

SORTORPHANS

ステータスに親が存在しない最初の従兄弟をすべてまとめてソートするように指定します。デフォルトでは、子をソートする際、その親がステータスに存在しない場合でも、階層構造は維持されます。

A

D

値をソートする順序。Aは昇順(ソート基準がTEXT、IDまたはリレーションの場合はアルファベット順)、Dは降順(ソート基準がTEXT、IDまたはリレーションの場合は逆アルファベット順)を意味します。

NAFIRST

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

criterion

ソート基準として使用する式。各criterionは、dimensionでディメンション化する必要があります。最初の式は主要なソート基準です。式が多次元の場合、SORTはソートするディメンション以外のすべてのディメンションのステータスにある最初の値を使用します。値セットは、ソート基準として使用できません。

使用上の注意

ディメンションと値セットのソート

Oracle OLAPはディメンションをソートするとき、ディメンションの一時ステータス・リストをソートし、ディメンション化されたデータをソートしません。多くのOLAP DML文はデータをそのディメンションの現行のステータスに従って操作するため、ディメンションをソートすると、データをソートしたように見えます。ディメンションとそのディメンション・サロゲートは、同じステータスを共有します。このため、ディメンションまたはそのサロゲートに対するSORT文は、それらすべてをソートします。

Oracle OLAPが値セットをソートする場合、値セット内の実際の値をソートします。値セットをソートしてからUPDATEコマンドおよびCOMMITコマンドを実行すると、値セットの値はソートされた順序で格納されます。

アルファベット順のソート

TEXTまたはIDディメンション、あるいはその値セットをアルファベット順にソートするには、ディメンション自体をソート基準として使用します。

SORT district A district

テキスト・データのソート順

アルファベット順によるテキスト・データのソート順は、NLS_SORTオプションで制御します。

時間ディメンションのソート

DAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンションの値は、内部では数字として格納されます。このため、DAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンションまたはその値セットをディメンション自体をソート基準にして昇順でソートする場合、ステータス・リストまたは値セットの値は時間順に配置されます。DAY、WEEK、MONTH、QUARTERおよびYEAR型のディメンションまたはその値セットを降順でソートすると、値は時間の逆順で配置されます。

リレーションを基準とするソート

リレーションをソート基準にすると、アルファベット順でソートされますが、つまり、ディメンションや値セットが関連ディメンション値のアルファベット順リストに従ってソートされます。リレーションをソート基準として使用し、関連ディメンション値を元の順序のままにするには、ソート基準に次の式を使用する必要があります。

CONVERT(relation, INTEGER)

例10-126「リレーションを基準とするソート」を参照してください。

結合ディメンションのソート

結合ディメンションまたはその値セットは、結合ディメンション自体またはそのベース・ディメンションのいずれかでディメンション化された基準によってソートできます。

連結ディメンションのソート

連結ディメンションまたはその値セットは、連結ディメンション自体またはそのコンポーネントのディメンションのいずれかでディメンション化された基準によってソートできます。例10-127「連結に基づくソート」および例10-128「コンポーネントに基づくソート」を参照してください。

ワークシートのソート

ワークシートはソート基準として使用できません。まずCONVERTを使用して、ワークシートの値を変換するデータ型を指定する必要があります。

例

例10-126 リレーションを基準とするソート

次の例は、1996年7月のテントの売上数量に従って地区をソートします。まず、各地区が属する地域でソートしてから売上金額を降順にソートします。次のSORT文では、第1のソート基準としてリレーションを使用します。したがって、地区はアルファベット順の地域によってソートされます。

LIMIT month TO 'Jul96'
LIMIT product TO 'Tents'
SORT district A Region.District D sales

次のREPORT文を発行します。

REPORT DOWN district HEADING 'Region' region.district sales

この文によって、SORT文の動作が反映された次のレポートが生成されます。

PRODUCT: Tents
--------MONTH--------
--------JUL96--------
DISTRICT         Region     SALES
-------------- ---------- ----------
Dallas         Central    154,914.23
Chicago        Central     79,934.42
Atlanta        East       140,711.00
Boston         East        93,972.49
Seattle        West       123,700.17
Denver         West       100,413.49

次のSORT文では、CONVERTを使用して地域を元の順序のままにします。

SORT district A CONVERT(region.district INTEGER) D sales

次のREPORT文を発行します。

REPORT DOWN district HEADING 'Region' region.district sales

この文によって、最後のSORT文の動作が反映された次のレポートが生成されます。

PRODUCT: Tents
--------MONTH--------
--------JUL96--------
DISTRICT         Region     SALES
-------------- ---------- ----------
Atlanta        East       140,711.00
Boston         East        93,972.49
Dallas         Central    154,914.23
Chicago        Central     79,934.42
Seattle        West       123,700.17
Denver         West       100,413.49

ディメンションで値をソートした順序を永続的に維持する場合は、ディメンションをソートしてからMAINTAIN文を使用します。

SORT district A district
MAINTAIN district MOVE STATUS FIRST

例10-127 連結に基づくソート

次の文は、連結ディメンションのreg.dist.ccdimをその値のすべてについて昇順にソートし、結果をレポートします。

sort reg.dist.ccdim d reg.dist.ccdim
report reg.dist.ccdim

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

REG.DIST.CCDIM
--------------------
<Region: West>
<Region: East>
<Region: Central>
<District: Seattle>
<District: Denver>
<District: Dallas>
<District: Chicago>
<District: Boston>
<District: Atlanta>

次の文は、連結ディメンションのreg.dist.ccdimをその値のすべてについて昇順にソートし、結果をレポートします。

SORT reg.dist.ccdim A reg.dist.ccdim
REPORT reg.dist.ccdim

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

REG.DIST.CCDIM
--------------------
<District: Atlanta>
<District: Boston>
<District: Chicago>
<District: Dallas>
<District: Denver>
<District: Seattle>
<Region: Central>
<Region: East>
<Region: West>

例10-128 コンポーネントに基づくソート

次の文は、連結ディメンションのreg.dist.ccdimをいずれかのベース・ディメンションの値に基づいて昇順でソートし、その他のベース・ディメンションの値については降順にソートし、その結果をレポートします。

SORT reg.dist.ccdim A region D district
REPORT reg.dist.ccdim

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

REG.DIST.CCDIM
--------------------
<REGION: CENTRAL>
<REGION: EAST>
<REGION: WEST>
<DISTRICT: SEATTLE>
<DISTRICT: DENVER>
<DISTRICT: DALLAS>
<DISTRICT: CHICAGO>
<DISTRICT: BOSTON>
<DISTRICT: ATLANTA>

例10-129 階層によるソート

アナリティック・ワークスペースに、ディメンションが2つ(geogおよびtime)、リレーションが1つ(geogparent)および変数が1つ(sales)あり、それぞれ次のように定義されているとします。

DEFINE GEOG DIMENSION TEXT
DEFINE TIME DIMENSION TEXT
DEFINE GEOGPARENT RELATION GEOG <GEOG>
DEFINE SALES VARIABLE INTEGER <TIME GEOG>

geogのすべての値がステータスにある状態でsalesに対するREPORT文を発行すると、次のようなレポートが生成されます。このレポートでは、geogの値は、アナリティック・ワークスペースに追加されたときの順序で表示されています。

REPORT sales
--------SALES--------
--------TIME---------
GEOG              2004       2005
-------------- ---------- ----------
USA                 1,300         NA
Massachusetts       3,881         NA
Florida             3,479         NA
Boston              2,644         NA
Orlando             4,398         NA
Miami               3,294         NA
Pembroke            4,268         NA
California          1,899         NA
Texas               2,115         NA
Los Angeles         2,394         NA
San Francisco       1,334         NA
Dallas                839         NA
Houston               997         NA

ここで、(1)geogparentと(2)sales(降順)を基準にしてgeogの値をソートするSORT文を発行します。このソートを実行した後、salesに対するREPORT文を発行すると、次のようなレポートが生成されます。このレポートでは、geogの値は、salesを基準に降順でソートされた州と、それらの州の都市(各都市はそれらが属する州の下に示されている)の両方で表示されています。

SORT geog HIERARCHY geogparent D sales
REPORT SALES

--------SALES--------
--------TIME---------
GEOG              2004       2005
-------------- ---------- ----------
USA                 1,300         NA
Massachusetts       3,881         NA
Pembroke            4,268         NA
Boston              2,644         NA
Florida             3,479         NA
Orlando             4,398         NA
Miami               3,294         NA
Texas               2,115         NA
Houston               997         NA
Dallas                839         NA
California          1,899         NA
Los Angeles         2,394         NA
San Francisco       1,334         NA

例10-130 階層内で親を持たない子のソート

例10-129「階層によるソート」で説明したものと同じオブジェクトがあるとします。また、フロリダ州(Florida)とマサチューセッツ州(Massachusetts)はステータスにないものとします。

ここで、SORT文にSORTORPHANSキーワードを指定すると、マサチューセッツ州の都市とフロリダ州の都市はまとめてソートされます。

SORT geog HIERARCHY geogparent SORTORPHANS D sales
REPORT sales
------------------SALES------------------
------------------TIME-------------------
GEOG                   2004                 2005
-------------- -------------------- --------------------
USA                           1,300                   NA
Orlando                       4,398                   NA
Pembroke                      4,268                   NA
Miami                         3,294                   NA
Boston                        2,644                   NA
Texas                         2,115                   NA
Houston                         997                   NA
Dallas                          839                   NA
California                    1,899                   NA
Los Angeles                   2,394                   NA
San Francisco                 1,334                   NA

同じ文からSORTORPHANSキーワードを除外すると、マサチューセッツ州の都市とフロリダ州の都市は別々にソートされます。

LIMIT geog COMPLEMENT 'Florida' 'Massachusetts'
SORT geog HIERARCHY geogparent D sales
REPORT SALES

--------SALES--------
--------TIME---------
GEOG              2004       2005
-------------- ---------- ----------
USA                 1,300         NA
Pembroke            4,268         NA
Boston              2,644         NA
Orlando             4,398         NA
Miami               3,294         NA
Texas               2,115         NA
Houston               997         NA
Dallas                839         NA
California          1,899         NA
Los Angeles         2,394         NA
San Francisco       1,334         NA

SQL

SQLコマンドは、Structured Query Language(SQL)で記述された命令をOracle OLAPからリレーショナル・マネージャに渡すコマンドです。SQLコマンドを使用すると、リレーショナル表のデータの挿入および更新、リレーショナル表からアナリティック・ワークスペース・オブジェクトへのデータの取得、およびストアド・プロシージャの実行ができます。

SQLコマンドを使用するには、SQL構文およびリレーショナル・データベース内のデータ構造を理解している必要があります。また、対象のリレーショナル表に対する適切なアクセス権も必要です。

最初に一般的なOLAP DML SQLコマンドについて説明し、続いて、次に示す特定のSQL文としてOLAP DML SQLコマンドを使用する方法について説明します。

- SQL CLEANUP

- SQL CLOSE

- SQL DECLARE CURSOR

- SQL EXECUTE

- SQL FETCH

- SQL IMPORT

- SQL OPEN

- SQL PREPARE

- SQL PROCEDURE

- SQL SELECT

構文

SQL sql-statement

パラメータ

sql-statement

sql-statementには、動的に実行可能なほとんどのSQL文に加えて、関連付けられた非動的な文も指定できます。また、PROCEDUREでストアド・プロシージャを指定することもできます(SQL PROCEDUREの説明を参照)。SQL文は、すべての非テキストのOLAP DML入力式の値を含め、128KB以内に収める必要があります。

次のSQL文はsql-statementに指定できません。

- COMMIT: 変更をコミットするには、OLAP DML COMMIT文を発行します。

- ROLLBACK: OLAP DMLではロールバックできません。SQL ROLLBACKを指定すると、ROLLBACKはOLAP DML SQL文の引数としてサポートされていないというエラー・メッセージが返されます。

重要:
OLAP DML SQL文を使用して他の方法でロールバックを要求すると(たとえば、SQL EXECUTEを使用するなど)、Oracle OLAPはシステム・エラー・メッセージを発行し、その文を発行したOLAP DMLプログラムを異常終了します。また、Oracle OLAPは不確定な状態となり、ロールバックを要求したOLAP DMLプログラムを含むアナリティック・ワークスペース、およびコミットされていない更新があるアタッチされている他のアナリティック・ワークスペースをデタッチします。

一部のSQL文は、リレーショナル・マネージャに送信される前にOracle OLAPによって評価されます。たとえば、Oracle OLAPはSQL PREPARE、SQL EXECUTE、およびリレーショナル表のデータをアナリティック・ワークスペース・オブジェクトにコピーするSQL文を評価します(これらの文のリストは、「アナリティック・ワークスペース・オブジェクトへのリレーショナル・データのコピー」を参照)。

使用上の注意

アナリティック・ワークスペース・オブジェクトへのリレーショナル・データのコピー

リレーショナル・データは、次のように暗黙カーソルまたは明示カーソルのいずれかを使用してアナリティック・ワークスペース・オブジェクトにコピーできます。

- 暗黙カーソルを使用してリレーショナル表からアナリティック・ワークスペース・オブジェクトにデータをコピーするには、SQL SELECT文を使用します。このOLAP DML文は、OLAP Worksheetで対話的に使用できる他、OLAP DMLプログラム内で使用することもできます。

- 明示カーソルを使用してリレーショナル表からアナリティック・ワークスペース・オブジェクトにデータをコピーするには、OLAP DMLプログラム内で次のコマンドを次に示す順序で使用します。

1. SQL DECLARE CURSORを使用して、SQLカーソルをSELECT文またはプロシージャに関連付けて定義します。

2. SQL OPENを使用して、SQLカーソルをアクティブ化します。

3. SQL FETCHまたはSQL IMPORTを使用して、カーソルで指定されたデータを取得および処理します。

ヒント:
SQL FETCHは機能性に優れ、SQL IMPORTは大量のデータをリレーショナル表からアナリティック・ワークスペース・オブジェクトにコピーする際のパフォーマンスに優れています。

4. SQL CLOSEを使用して、SQLカーソルをクローズします。

5. SQL CLEANUPを使用して、すべてのSQLカーソルの宣言を取り消し、SQLカーソルのメモリー・リソースを解放します。

Oracle OLAPは、これらのすべての文をリレーショナル・マネージャに送信する前に評価します。

これらの文の構文については、それぞれの項を参照してください。他のSQL文の構文については、『Oracle Database SQL言語リファレンス』を参照してください。

リレーショナル表へのデータの挿入

アナリティック・ワークスペースのデータをリレーショナル表に挿入する際は、SQL INSERT文のためのSQL PREPARE文を使用し(通常はDIRECT= YESに設定)、SQL EXECUTEを使用してこの文を実行します。

OLAP DML SQL文に関連するオプション

SQLをOLAP DMLに埋め込む際には、いくつかのオプションが使用できます。これらのオプションは、「SQLの埋込みオプション」に記載されています。

OLAP DML SQL文でのOLAP DML式の使用

多くのOLAP DML SQL文では、OLAP DML式(OLAP DML変数など)を引数として使用できます。OLAP DML入力式は、SQL文へのパラメータとしてOracle OLAPにより提供されている値です。これらは、選択するデータを指定したり、変更するデータの値を提供したりするために使用します。OLAP DML入力式は、SQL WHERE句、プロシージャのパラメータ・リスト、UPDATE文、およびINSERTのVALUE句で使用できます。

OLAP DML SQL文でOLAP DML式を使用する場合は、次の点に注意してください。

- OLAP DML式の先頭にはコロンを付けます(:myvarなど)。

- OLAP DML入力式としてディメンションまたはディメンション変数を指定すると、ステータスにある最初の値が使用され、FORまたはACROSS文を使用してすべての値をループ処理することは可能ですが、暗黙的ループは行われません。適切なデータ型を持つ式であれば、OLAP DML入力式とすることができます。OLAP DML入力式の値は、カーソルがオープンされていれば、宣言されていなくても受け付けられます。例10-131「表へのデータの挿入」を参照してください。

- CLOBまたはNCLOBデータ型のリレーショナル表に対してデータの更新または挿入を行うには、OLAP DML入力式でWIDEを使用します(「CLOB列またはNCLOB列への大きなテキスト値の挿入」を参照)。

エラー・チェック

Oracle OLAPは、SQL文の引数における構文エラーの一部を検出できますが、ほとんどのエラーはOracle RDBMSで検出されます。エラー・コードおよびメッセージはOracle OLAPに返されます。SQL文ごとにSQLCODEの値をチェックして、どこでエラーが発生したかを判別します。エラーが発生している場合(つまり、SQLCODE EQ -1)、エラーの原因に関する情報としてSQLERRMの値をチェックします。

Oracle RDBMSデータ型のOracle OLAP DMLデータ型への変換

表10－10「RDBMSデータ型のOLAP DMLデータ型への変換」に、自動的にOracle OLAP DMLデータ型に変換できるOracle RDBMSデータ型を示します。その他のデータ型は、SQL DECLARE CURSOR文のSELECT文で明示的に変換するかキャストする必要があります。

表10-10 RDBMSデータ型のOLAP DMLデータ型への変換

Oracle RDBMSデータ型

OLAP DMLディメンション型

OLAP DML変数データ型

CHAR、NCHAR、NVARCHAR2、VARCHAR2

TEXT [WIDTH n]、ID、NTEXT

TEXT、NTEXT

NUMBER

NUMBER、INTEGER、SHORTINTEGER、LONGINTEGER

NUMBER、INTEGER、BOOLEAN、SHORTINTEGER、LONGINTEGER、DECIMAL、SHORTDECIMAL

CLOB(SQL FETCHおよびSQL SELECT文内のみ)

TEXT

TEXT

NCLOB(SQL FETCHおよびSQL SELECT文内のみ)

NTEXT

NTEXT

DATE

-

DATE、DATETIME

SQL UPDATE文

SQL UPDATE文には、特定の検索条件を指定するWHERE句を含めることができます。単一表、および1つの表の列のみを含むビューでは、SQLで通常使用される検索条件に加えて、WHERE CURRENT OF cursor句がサポートされています。カーソルはFOR UPDATE句で定義しておく必要があります(SQL DECLARE CURSORを参照)。

例

例10-131 表へのデータの挿入

次のようなSQL文を使用して表を作成し、その表に行を追加できます。SQL INSERT文は、ディメンションsalespersonおよび変数dollarsの値を使用してsales表に行を追加します。ステータスにあるsalespersonの最初の値を使用して1行が追加されます。

SQL CREATE TABLE sales (name CHAR(12), dollars INTEGER)
SQL INSERT INTO sales VALUES (:salesperson, :dollars)

SQL CLEANUP

SQL CLEANUPコマンドは、すべてのSQLカーソルの宣言を取り消し、すべてのSQLカーソルのメモリー・リソースを解放します。SQL CLEANUPコマンドは、「アナリティック・ワークスペース・オブジェクトへのリレーショナル・データのコピー」で説明したように、リレーショナル表からアナリティック・ワークスペース・オブジェクトにデータをコピーするために他のSQLコマンドと組み合せて使用します。

構文

SQL CLEANUP

例

SQL CLEANUPの使用例は、例10-141「連結ディメンションへのデータのフェッチ」を参照してください。

SQL CLOSE

SQL CLOSEコマンドはSQLカーソルをクローズします。SQL OPENコマンドは、「アナリティック・ワークスペース・オブジェクトへのリレーショナル・データのコピー」で説明したように、リレーショナル表からアナリティック・ワークスペース・オブジェクトにデータをコピーするために他のSQLコマンドと組み合せて使用します。

構文

SQL CLOSE cursor

パラメータ

cursor

前にSQL OPEN文でオープンしたカーソルの名前。

使用上の注意

結果セットの再定義

カーソルに関連付けられている結果セットは、カーソルをクローズし、OLAP DML入力式の値を設定し、新しくSQL OPEN文を発行することによって変更できます。カーソルを解放して宣言しなおす必要はありません。

SQL DECLARE CURSOR

SQL DECLARE CURSORコマンドは、SELECT文またはプロシージャに関連付けることによって、明示的なSQLカーソルを定義します。SELECT文は、データの有効範囲(行および列)をカーソルで選択して指定します。SQL DECLARE CURSORコマンドは、「アナリティック・ワークスペース・オブジェクトへのリレーショナル・データのコピー」で説明したように、リレーショナル表からアナリティック・ワークスペース・オブジェクトにデータをコピーする際、明示カーソルを使用するために他のSQLコマンドと組み合せて使用します。

SQLTABLESとSQLCOLUMNSの2つの疑似プロシージャで、表と列に関する情報を取得できます。

構文

SQL DECLARE cursor CURSOR FOR {select-statement [FOR UPDATE]|table-info}

ここで、table-infoは次のいずれかです。

PROCEDURE SQLTABLES [owner, table]

PROCEDURE SQLCOLUMNS [owner, table, column]

注意:
table-infoは、select-statementがSQL FETCH文である場合にカーソルを宣言するときのみ指定します。

パラメータ

cursor

定義するカーソルの名前。カーソル名は、1から18個のアルファベット文字および記号@、_、$、#で構成されます。記号@、$、#を含む名前は、一重引用符で囲む必要があります。最初の文字は、数字およびアンダースコア以外でなければなりません。カーソル名はOracle OLAP内部で使用されます。SQL CLEANUP文を発行せずに、以前に宣言したカーソルと同じ名前のカーソルを別のSQL SELECT文で宣言しようとすると、エラーが発生します。

select-statement

カーソルに関連付けるデータを特定するSQL SELECT文。SQL SELECT文の構文については、『Oracle Database SQL言語リファレンス』を参照してください。

ヒント:
ANDおよびORは、OLAP DML構文とSQL構文のどちらでも使用できるため、Oracle OLAPがOLAP DML入力式の末尾を認識できるように句を記述します。Oracle OLAPが認識できないSQL演算子を使用する場合および、こうした状況では構文を明確にするためにカッコを使用します。

FOR UPDATE

SQL FETCHを使用して表にデータを書き込むことを示します。この句は、WHERE CURRENT OF cursor句を持つUPDATE文でカーソルを使用する場合に必要です。更新される列の名前は、OF句(たとえば、FOR UPDATE OF COL1, COL2, COL3)で指定できます。

注意:
FOR UPDATE句は、SQL IMPORTおよびSQL SELECTには無視されます。

PROCEDURE SQLTABLES

SQL FETCHで使用するカーソルを宣言する場合は、疑似プロシージャSQLTABLESをコールします。このプロシージャは、検索基準に一致する表ごとに次の値を返します(例10-133「リレーショナル表に関する情報の検出」を参照)。

- tableowner: 表の所有者を特定するテキスト値

- tablename: 表の名前を特定するテキスト値

- tabletype: TABLE、VIEW、SYSTEM TABLE、ALIAS、SYNONYM、LOCAL TEMPORARY、GLOBAL TEMPORARYまたはNA(認識されていない種類を指す)のいずれかで表の種類を特定するテキスト値

SQL IMPORTで使用するカーソルを宣言する場合は、この句を使用できません。

PROCEDURE SQLCOLUMNS

SQL FETCHで使用するカーソルを宣言する場合は、疑似プロシージャSQLCOLUMNSをコールします。このプロシージャは、検索基準に一致する列ごとに次の値を返します(例10-134「リレーショナル表の列に関する情報の検出」を参照)。

- tableowner: 表の所有者を特定するテキスト値

- tablename: 表の名前を特定するテキスト値

- colname: 列の名前を特定するテキスト値

- coltype: 列のデータ型を特定するテキスト値

- olaptype: coltypeと最も一致するデータ型を特定するテキスト値

- length: 列の値の長さを特定するINTEGER値

- precision: 数値列の値の精度を特定するINTEGER値

- scale: 列の値のスケールを特定するINTEGER値

- nullable: 列がNULL値を含むことができるかどうかを示すYまたはNのテキスト値

SQL IMPORTで使用するカーソルを宣言する場合、PROCEDURE SQLCOLUMNS句は使用できません。

owner

リテラル・テキスト、または1つ以上の所有者を指定する値を持つOLAP DML変数の名前。この式はフィルタとして機能し、指定した所有者に属する表にのみ結果を制限します。キーワードNULL、またはNA値を持つOLAP DML変数では、すべての表の所有者が結果に含まれます。

式は、'SCOTT'などのように具体的に示すことも、'S%T'(Sで始まりTで終わる名前のすべての所有者)のようにワイルドカード文字で示すこともできます。この値は、大文字と小文字を維持したままデータベースに渡されるため、値の大文字と小文字が正しく入力されているか確認してください。たとえば、Oracleのリレーショナル・データベースは、デフォルトですべての値を大文字で格納するため、'scott'や'Scott'は'SCOTT'とは一致しません。

table

リテラル・テキスト、または1つ以上の表を指定する値を持つOLAP DML変数の名前。この式はフィルタとして機能し、指定した名前を持つ表にのみ結果を制限します。キーワードNULL、またはNA値を持つOLAP DML変数では、すべての表が結果に含まれます。

式は'PAYROLL'などのように具体的に示すことも、'%ROLL'(ROLLで終わる名前を持つすべての表)のようにワイルドカード文字で示すこともできます。この値は、大文字と小文字を維持したままデータベースに渡されるため、値の大文字と小文字が正しく入力されているか確認してください。たとえば、Oracleのリレーショナル・データベースは、デフォルトですべての値を大文字で格納するため、'payroll'や'Payroll'は'PAYROLL'とは一致しません。

column

リテラル・テキスト、または1つ以上の列を指定する値を持つOLAP DML変数の名前。この式はフィルタとして機能し、指定した名前を持つ列にのみ結果を制限します。キーワードNULL、またはNA値を持つOLAP DML変数では、すべての列が結果に含まれます。

式は'SALARY'などのように具体的に示すことも、'SAL%'(SALで始まる名前を持つすべての列)のようにワイルドカード文字で示すこともできます。この値は、大文字と小文字を維持したままデータベースに渡されるため、値の大文字と小文字が正しく入力されているか確認してください。たとえば、Oracleのリレーショナル・データベースは、デフォルトですべての値を大文字で格納するため、'salary'や'Salary'は'SALARY'とは一致しません。

使用上の注意

SQL DECLARE CURSORに関する一般的な制約

SQL DECLARE CURSORコマンドには、次の制約があります。

- プログラムでのみ使用できる

- アンパサンド置換を使用できない。

SQL IMPORTで使用するカーソルを宣言する際の制約

SQL IMPORT文で使用するカーソルを宣言する場合は、次の簡略化構文のみを使用できます。

SQL DECLARE cursor CURSOR FOR select-statement

ここで、select-statementはカーソルに関連付けるデータを特定するSQL SELECT文です。FOR UPDATE句およびtable-info句は使用できません。

カーソルの結果セット

カーソルの結果セットは、カーソルがオープンされるときに決定され、後からは更新されません。このため、カーソルをオープンしてからOLAP DML入力式の値を変更しても、その変更はカーソルの結果セットに影響しません。カーソルはSQL CLOSE文が実行されるまで、またはSQL CLEANUP文ですべてのカーソルがクローズされるまでオープンのままです。カーソルは、オープンしたプログラムが終了しても自動的にクローズされません。

フェッチの最適化

値を多次元の入力変数にフェッチする場合は、SQL DECLARE CURSOR文の引数select-statementにORDER BY句でディメンションに対応する列を指定するとき、最も変化の遅いディメンションを最初に指定します。これにより、パフォーマンスが最適化されます。

例

例10-132 SQLCODEの値のテスト

カーソルc1が、ユーザーsqldbaが所有する表mktの3列について宣言されています。この3列から3つのアナリティック・ワークスペース・オブジェクトに値がフェッチされます。最初のOLAP DMLオブジェクトはmarketディメンションで、一時的に取得値に制限されています。marketの一時ステータスのため、他の列の値は他のOLAP DMLオブジェクトの適切なセルに割り当てられます。

この例では、SQLCODEの値を2か所でテストしています。完全なプログラムほど、多くのエラー・チェックが実行されます。

DEFINE market DIMENSION TEXT
DEFINE mkt.desc TEXT <market>
DEFINE mkt.abbrev ID <market>
DEFINE sql.market PROGRAM
PROGRAM
TRAP ON ERROR
SQL DECLARE c1 cursor FOR -
SELECT mktcode, mktabbrev, mktdesc FROM sqldba.mkt
SQL OPEN c1
IF SQLCODE NE 0
THEN SIGNAL SQLERR 'open cursor failed.'
WHILE SQLCODE EQ 0
SQL FETCH c1 INTO :APPEND market, :mkt.abbrev, :mkt.desc
SQL CLOSE c1
...
RETURN
error:
...
END

例10-133 リレーショナル表に関する情報の検出

次のプログラムは、Scottが所有するすべての表に関する情報をフェッチします。ownername変数の値は、SQL DECLAREカーソル文の後で設定されていますが、これは、SQL OPEN文の前であればどこでも設定できます。tablename変数は設定されていませんが、自動的にNAに初期化されてNULL値として渡されます。

DEFINE ownername TEXT     "Search criteria
DEFINE tablename TEXT     "Search criteria
DEFINE tblowner TEXT      "Search results
DEFINE tblname TEXT       "Search results
DEFINE tbltype TEXT       "Search results

SQL DECLARE c1 CURSOR FOR PROCEDURE sqltables(:ownername, :tablename)
ownername = 'Scott'
SQL OPEN c1
WHILE SQLCODE EQ 0
DO
SQL FETCH c1 INTO :tblowner, :tblname, :tbltype
...     "Process fetched values
DOEND

例10-134 リレーショナル表の列に関する情報の検出

次のプログラムは、Scottが所有するemployee表のすべての列に関する情報をフェッチします。SQLCOLUMNSの3番目の引数の値には、NULL(NAではない)が使用されていますが、これはOracle OLAPではなく、リレーショナル・マネージャで処理されるためです。

DEFINE tblname TEXT             "Search results
DEFINE tblowner TEXT            "Search results
DEFINE colname TEXT             "Search results
DEFINE coltype TEXT             "Search results
DEFINE olaptype TEXT            "Search results
DEFINE length INTEGER           "Search results
DEFINE precision INTEGER        "Search results
DEFINE scale INTEGER            "Search results
DEFINE nullable TEXT            "Search results

SQL DECLARE c1 CURSOR FOR PROCEDURE sqlcolumns('Scott', -
'Employee', NULL)
SQL OPEN c1
WHILE SQLCODE EQ 0
DO
SQL FETCH c1 INTO :tblowner, :tblname, :colname, :coltype, -
:olaptype, :length, :precision, :scale, :nullable
...  "Process fetched values
DOEND

SQL EXECUTE

SQL EXECUTEコマンドは、SQL PREPAREでコンパイルされたSQL文を実行します。一般に、プリコンパイルするSQL文は繰り返し実行される文であり、特に、OLAP DML入力式を含むINSERT、UPDATE、DELETEなどの文です。

注意:
SQL PREPAREおよびSQL EXECUTEコマンドは、同じDMLプログラム内でのみ使用できます。

構文

SQL EXECUTE statement-name

パラメータ

statement-name

SQL PREPAREを使用してプリコンパイルしたときに実行コードに付けた名前。

例

例10-135 アナリティック・ワークスペース・データによるリレーショナル表の更新

次の例は、Oracle OLAPに格納されているデータを使用した表の単純な更新を示します。marketディメンションは、FORループで一度に1つの値に制限されています。SQL句のWHERE s.market=:marketは、そのmarketの行にある売上値を変更する値として指定します。

FOR market
SQL UPDATE mkt SET sales=:mkt.sales WHERE s.market=:market

UPDATE文は、SQL PREPARE文で使用し、FORループで実行します。

SQL PREPARE s2 FROM UPDATE mkt -
SET sales=:mkt.sales WHERE s.market=:market
FOR market
DO
SQL EXECUTE s2
IF SQLCODE NE 0
THEN BREAK
DOEND

SQL FETCH

SQL FETCHコマンドは、名前付きSQLカーソルで指定されたデータを取得して処理します。SQL FETCHは、取得したデータをOLAPオブジェクトに割り当てます。SQL FETCHコマンドは、「アナリティック・ワークスペース・オブジェクトへのリレーショナル・データのコピー」で説明したように、リレーショナル表からアナリティック・ワークスペース・オブジェクトにデータをコピーするために他のSQLコマンドと組み合せて使用します。

構文

SQL FETCH cursor [LOOP [loopcount]] -

INTO :targets... [THEN action-statements...]

ここで、

- targetsは、次のいずれか1つ以上です。

[MATCH] dimension|surrogate

APPEND [position] dimension

ASSIGN surrogate

variable | qualified data reference | relation | composite

- positionは、次のいずれか1つです。

AFTER dimension-value

BEFORE dimension-value

FIRST

LAST

パラメータ

cursor

宣言してオープンするカーソルの名前。

LOOP

リレーショナル表から取得した行に対してOracle OLAPが暗黙的にループ処理するように指定します。Oracle OLAPは、行ごとに、各フィールドのデータをターゲット・アナリティック・ワークスペース・オブジェクトとして指定されているオブジェクトにコピーします。LOOP句が含まれている場合、カーソルで指定されたアクティブ・セットの最後に達するまで、エラーが発生するまで、またはloopcountに達するまで、SQL FETCHは行処理を継続します。SQL FETCHのパフォーマンスを改善するために、ほとんどの場合でLOOP句を使用します。

LOOP句を指定しないときに、カーソルが指定するアクティブ・セットに複数の行が含まれている場合、SQL FETCH文はWHILEループ内でコーディングする必要があります。このループは、データの終了またはエラーを示す場合にゼロ以外の値を返すSQLCODEオプションの値に基づくようにします。

loopcount

LOOPキーワードに対するオプションのINTEGERの引数。loopcountは、SQL FETCHがリレーショナル表の行に対するループ処理の方法を制御します。loopcountには、リテラル値、OLAP DML変数またはNAを使用できます。loopcountが0以下の場合、ループは実行されず、データもフェッチされません。

loopcountの値を付けずにLOOP句を指定すると、SQL FETCHは行の読取りおよびその内容のターゲット・アナリティック・ワークスペース・オブジェクトへのコピーを、読み取る行がなくなるかエラーが発生するまで続けます。内部では、SQLCODEがゼロ以外の値になるまで各行が処理されます。

loopcountにリテラル値を指定すると、SQL FETCHはloopcountで指定された行数を、またはSQLCODEがゼロ以外の値になるまで処理を続けます。

loopcountに変数を指定する場合は、OLAP DML変数の形式にする必要があります(前にコロンを付けます)。この変数は、入力変数としても、出力変数としても機能します。loopcountの初期値は、SQL FETCHで処理しようとする行数を指定します。SQL FETCHを完了すると、loopcountには実際に処理された行数が含まれます。

loopcountにNAを指定すると、SQL FETCHはSQLCODEがゼロ以外の値になるまで行を処理します。ただし、SQL FETCHを完了すると、loopcountには実際に処理した行数が含まれます。

targets

リレーショナル表から取得したデータを格納するアナリティック・ワークスペース・オブジェクトを特定します。このターゲット・アナリティック・ワークスペース・オブジェクトのリストは、その数およびデータ型が、カーソルを宣言するSQL DECLARE CURSORコマンドの引数select-statementで指定された表の列のリストに対応している必要があります。変数、修飾データ参照、リレーション、ディメンション、コンポジットまたは結合をターゲットにできます。

重要:
ターゲット・アナリティック・ワークスペース・オブジェクトを指定する順序は、ディメンション・ステータスに影響します。Oracle OLAPは、ディメンション値ごとに、ディメンションのステータスをフェッチされた値に一時的に制限します。値が次に割り当てられるアナリティック・ワークスペース・オブジェクトは、この一時的なステータスに従います。「ターゲット・アナリティック・ワークスペース・オブジェクトにする結合ディメンション」と「ターゲット・アナリティック・ワークスペース・オブジェクトにするコンポジット・ディメンション」を参照してください。

ターゲットには、前にコロンを付ける必要があります。ターゲットがディメンションの場合、MATCHおよびAPPENDキーワードでディメンションの処理を指定できますが、この場合、コロンはキーワードの前に付けます。

[MATCH] {dimension|surrogate}

(デフォルト)Oracle OLAPは、ターゲットのディメンションやサロゲートに対してディメンション・メンテナンスを実行しません。ディメンション化されたオブジェクトにフェッチされるデータの整列では、受け取る値を使用します。リレーショナル・データベースから受け取る値が、ディメンションまたはサロゲートの値に一致しない場合、エラーが通知されます。

APPEND [position] dimension

Oracle OLAPは、新しい値をディメンションに追加して、ターゲットのディメンションにディメンション・メンテナンスを実行します。ディメンション化されたオブジェクトにフェッチされるデータの整列には、新旧両方のディメンション値を使用します。デフォルトでは、新しい値がディメンションまたはサロゲートの最後に追加されます。

positionは、次のいずれか1つです。

- AFTER dimension-value
新しい値は、ステータス・リストのdimension-valueの後ろに追加されます。

- BEFORE dimension-value
新しい値は、ステータス・リストのdimension-valueの直前に追加されます。

- FIRST
新しい値はステータス・リストの最初に追加されます。

- LAST
新しい値はステータス・リストの最後に追加されます。

また、アクション文でディメンション値を処理する方法は、positionを使用しても制御できます。

ASSIGN surrogate

指定されたサロゲートに値を割り当てます。

THEN action-statements...

データの行をフェッチしてターゲット・アナリティック・ワークスペース・オブジェクトに割り当てるたびに実行するaction-statementsを必要なだけ指定します。action-statementは、次のいずれかです。

assignment-statement

IF statement

SELECT-statement

ACROSS statement: action-statement

<action-statement-group>

action-statementsの構文の詳細は、SQL IMPORTコマンドを参照してください。

使用上の注意

SQL FETCHのターゲットの順序がディメンション・ステータスに与える影響

Oracle OLAPは、ディメンション値ごとに、ディメンションのステータスをフェッチされた値に一時的に制限します。値が次に割り当てられるアナリティック・ワークスペース・オブジェクトは、この一時的なステータスに従います。

ターゲット・アナリティック・ワークスペース・オブジェクトにする結合ディメンション

結合ディメンションをターゲット・アナリティック・ワークスペース・オブジェクトとして使用できますが、必ず単純なベース・ディメンションと同じ数の列をリレーショナル表から選択する必要があります。Oracle OLAPが結合ディメンションであるターゲットにSQL FETCH文を実行する場合、その結合ディメンションが定義されたときに指定されたディメンション順を使用します。

ターゲット・アナリティック・ワークスペース・オブジェクトにするコンポジット・ディメンション

ディメンション化された変数と同じように、コンポジットとしてアナリティック・ワークスペース・オブジェクトを指定できます。たとえば、dim1およびdim2でディメンション化された変数var1にデータをフェッチするためには、次のようなターゲット・アナリティック・ワークスペース・オブジェクトのリストを指定します。

:dim1 :dim2 :var1

ディメンションdim1およびdim2を持つコンポジット・ディメンションでディメンション化された変数var2にデータをフェッチするためには、次のようなターゲット・アナリティック・ワークスペース・オブジェクトのリストを指定します。

:dim1 :dim2 :var2

NULL値

SQLのNULL値は、Oracle OLAPのNA値と同等であるため、ターゲット・アナリティック・ワークスペース・オブジェクトにフェッチされたNULL値はNA値になります。Oracle OLAPではこのようにNULL値を処理するため、SQLコマンドはSQL FETCH文のINTO句にあるINDICATOR変数をサポートしません。ただし、NULL値をディメンションにフェッチすると、Oracle OLAPはその行全体の値を破棄します。

入力およびターゲット・オブジェクトとしてのブール変数の使用

OLAP SQLコマンドの入力およびターゲットのアナリティック・ワークスペース・オブジェクトにブール変数を使用できます。OLAP DML入力式の場合、Oracle OLAPはブール値を1(TRUE)または0(FALSE)の値を持つINTEGER値として扱います。

ターゲット・アナリティック・ワークスペース・オブジェクトの場合、ブール変数はリレーショナル表のあらゆる数値(またはビット)列の値を受け取ることができます。

テキスト・データのDATE変数へのフェッチ

テキスト・データをDATE変数にフェッチすると、DATEORDERオプションの現行の設定で値が解釈されます。たとえば、テキスト値12-08-96は、DATEORDERの設定によって、1996年12月8日にも1996年8月12日にも解釈できます。

転送できないデータ型

データ型がLONG RAW、ROWID、UROWID、BLOBおよびBFILEのデータは転送できません。

例

例10-136 リレーショナル表からのデータのフェッチ -- 単純なSQL FETCH

次のプログラムの抜粋では、カーソルを宣言してオープンする基本的なステップとデータのフェッチを示します。Products表のProd_ID列およびProd_Name列のリレーショナル・データを、prodディメンションおよびprod_label変数にフェッチします。変数prod_labelは、prodでディメンション化されています。この例のSQL FETCH文にはLOOP句が含まれていないため、コールのたびに単一のデータ行が取得されます。

VARIABLE set_price SHORT
set_price = 20
...
SQL DECLARE highprice CURSOR FOR SELECT Prod_ID, Prod_Name -
FROM Products WHERE suggested_price > :set_price
SQL OPEN highprice
WHILE SQLCODE EQ 0
SQL FETCH highprice INTO :prod, :prod_label

例10-137 THEN句を使用したリレーショナル表からのデータのフェッチ

次のプログラムの抜粋は、前の例のSQL FETCH文にLOOPキーワードおよびTHEN句を追加しています。LOOPキーワードがあるため、このSQL FETCH文はWHILEループ内で実行する必要がありません。THENキーワードの後ろのアクション文は、文字Aで始まるprod_labelに格納されている製品名をa_productという複数行のテキスト変数にコピーします。

SQL FETCH highprice LOOP INTO :prod, :prod_label -
THEN IF UPCASE(EXTCHARS(prod_label, 1, 1)) EQ 'a' -
THEN a_product = JOINLINES(a_product prod_label)

例10-138 結合ディメンションをメンテナンスしながらのリレーショナル・データの移入

この例では、ターゲット・アナリティック・ワークスペース・オブジェクトとして(mptという名前の)結合ディメンションを使用します。結合ディメンションを移入するには、そのベース・ディメンションごとにリレーショナル・データベースから値を選択する必要があります。ここでは、3つのベース・ディメンション、market、productおよびtimeがあります。このため、SELECT文は3つに対応する列(Mktcode、PrdcodeおよびPercode)を指定します。このプログラムは、market、productおよびtimeディメンションがすでに最新の値で移入済であるとするため、それらがターゲット・アナリティック・ワークスペース・オブジェクトとして明示的に指定されないかぎり、Oracle OLAPがベース・ディメンションを更新することはありません。

DEFINE mpt DIMENSION <market product time>
DEFINE sql.mpt PROGRAM
PROGRAM
...
SQL DECLARE c1 CURSOR FOR -
SELECT Mktcode, Prdcode, Percode FROM Sqldba.Data
IF SQLCODE NE 0
THEN SIGNAL sqlerrm
SQL OPEN c1
SQL FETCH c1 LOOP INTO :append mpt
SQL CLOSE c1
...
END

例10-139 ベース・ディメンションと結合ディメンションをメンテナンスしながらのデータの移入

ベース・ディメンションおよび結合ディメンションに現行値を取得する場合、または初めて値を取得する場合、ベース・ディメンションの値に続けて結合ディメンションの値をフェッチできます。次の例で、SQL DECLARE CURSORおよびSQL FETCHコマンドはベース・ディメンションおよび結合ディメンションの両方の値をフェッチするように変更されています。リレーショナル表から選択する列の数は、フェッチされたベース・ディメンションの数と一致する必要があります。このSELECT文では6つの列が指定されています。最初の3列が3つのベース・ディメンション、最後の3つが結合ディメンションに相当します。

SQL DECLARE c1 CURSOR FOR -
SELECT Mktcode, Prdcode, Percode, Mktcode,  -
Prdcode, Percode FROM Sqldba.Data
...
SQL FETCH c1 LOOP INTO :APPEND market, :APPEND product, -
:APPEND time, :APPEND mpt

例10-140 ディメンションをメンテナンスしながらの変数へのリレーショナル表データの移入

次の例で、変数dollars.mptは結合ディメンションmptでディメンション化され、その値には同じSQL FETCH文でディメンション値が移入されます。SQL DECLARE CURSORおよびSQL FETCHコマンドは再度変更され、新しい列とターゲット・アナリティック・ワークスペース・オブジェクトが追加されています。

DEFINE dollars.mpt DECIMAL <mpt>
SQL DECLARE c1 CURSOR FOR -
SELECT Mktcode, Prdcode, Percode, Mktcode, Prdcode, -
Percode, Dollars FROM Sqldba.Data
...
SQL FETCH c1 LOOP INTO :APPEND market, :APPEND product, -
:APPEND time, :APPEND mpt, :DOLLARS.mpt

例10-141 連結ディメンションへのデータのフェッチ

リレーショナル表に製品データの列が4つあるため、このデータを格納するProductという4レベルの階層をアナリティック・ワークスペースで作成するとします。階層の各レベル(prod_id、prod_subcategory、prod_categoryおよびproducts_all)は、products表の列にマップされます。階層の最下位レベルはprod_id、最上位レベルはproducts_allです。また、表にはサプライヤ情報を含む列もあります。

アナリティック・ワークスペースでデータを保持するために、Product階層の各レベルについて定義したディメンション、階層自体の連結ディメンション、および階層の値間の親子関係を定義します。また、次の定義によって、サプライヤ・データのディメンション、およびサプライヤと製品の関係を保持するリレーションを定義します。

DEFINE aw_prod_id DIMENSION NUMBER (6)
DEFINE aw_prod_subcategory DIMENSION TEXT
DEFINE aw_prod_category DIMENSION TEXT
DEFINE aw_products_all DIMENSION TEXT
DEFINE aw_products DIMENSION CONCAT (aw_products_all -
aw_prod_category -
aw_prod_subcategory -
aw_prod_id)
DEFINE aw_products.parents RELATION aw_products <aw_products>
DEFINE aw_supplier_id DIMENSION NUMBER (6)
DEFINE aw_prod_id.aw_supplier_id RELATION aw_supplier_id <aw_prod_id>

次のコードで構成されるget_products_hierというプログラムを記述します。

' get_products_hier Program
ALLSTAT
" Fetch values into the products hierarchy
SQL DECLARE grabprods CURSOR FOR SELECT prod_total, -
prod_category, -
prod_subcategory, -
prod_id -
FROM sh.products
SQL OPEN grabprods
SQL IMPORT grabprods INTO :APPEND aw_products_all -
:APPEND aw_prod_category -
:APPEND aw_prod_subcategory -
:APPEND aw_prod_id

SQL CLOSE grabprods
SQL CLEANUP
" Update the analytic workspace and make the updates permanent
UPDATE
COMMIT
" Fetch values into supplier_id
SQL DECLARE grabsupid CURSOR FOR SELECT supplier_id -
FROM sh.products
SQL OPEN grabsupid
SQL IMPORT grabsupid INTO :APPEND aw_supplier_id
SQL CLOSE grabsupid
SQL CLEANUP
" Update the analytic workspace and make the updates permanent
UPDATE
COMMIT

" Populate self-relation for concat dimension
" and relation between aw_prod_id and aw_supplier_id
SQL DECLARE makerels CURSOR FOR SELECT prod_total, -
prod_category, -
prod_subcategory, -
prod_id, -
supplier_id -
FROM sh.products
SQL OPEN makerels
SQL FETCH makerels LOOP INTO :MATCH aw_products_all -
:MATCH aw_prod_category -
:MATCH aw_prod_subcategory -
:MATCH aw_prod_id -
:MATCH aw_supplier_id -
THEN aw_products.parents(aw_products aw_prod_id) -
= aw_products(aw_prod_subcategory aw_prod_subcategory) -
aw_products.parents(aw_products aw_prod_subcategory) -
= aw_products(aw_prod_category aw_prod_category) -
aw_products.parents(aw_products aw_prod_category) -
= aw_products(aw_products_all aw_products_all) -
aw_prod_id.aw_supplier_id = aw_supplier_id
SQL CLOSE makerels
SQL CLEANUP
" Update the analytic workspace and make the updates permanent
UPDATE
COMMIT

get_products_hierプログラムは、SQL FETCHコマンドおよびAPPENDキーワードを使用して、ディメンション表のデータをaw_products連結ディメンションのベース・ディメンションにコピーします。aw_productsのベース・ディメンションが移入されると、aw_productsそのものもOracle OLAPにより自動的に移入されます。SQL FETCH文のTHEN句が実行されると、Oracle OLAPはaw_productsの親子セルフ・リレーションにデータをフェッチします。このプログラムでは、aw_supplier_idディメンションおよびそのリレーションの移入も行われます。

SQL IMPORT

SQL IMPORTコマンドは、明示的なSQLカーソルで指定されたデータを取得して処理します。SQL IMPORTは、取得したデータをOLAPオブジェクトに割り当てます。SQL IMPORTコマンドは、「アナリティック・ワークスペース・オブジェクトへのリレーショナル・データのコピー」で説明したように、リレーショナル表からアナリティック・ワークスペース・オブジェクトにデータをコピーするために他のSQLコマンドと組み合せて使用します。SQL IMPORTは、リレーショナル表のファクト・データをアナリティック・ワークスペースの変数にコピーする場合に特に有効です。

注意:
データ型がLONG、BLOBおよびBFILEのデータは転送できません。

構文

SQL IMPORT cursor [:var-num-of-rows |num-of-rows[:var-num-of-processed-rows]]-

INTO :targets... [THEN action-statements...]

ここで、

- targetsは、次のいずれか1つ以上です。

MATCH | MATCHSKIPERR [position] {dimension | surrogate | valueset | relation}

APPEND dimension

ASSIGN surrogate

variable | relation | qualified data reference

- action-statementsは、次のいずれか1つです。

assignment-statement

IF-statement

SELECT-statement

ACROSS-statement: action-statement

<action-statement-group>

パラメータ

cursor

宣言されたカーソルの名前。

var-num-of-rows

SQL IMPORTによりインポートする行数を指定するための変数の名前。

num-of-rows

SQL IMPORTによりインポートする行数を指定する数値定数。

var-num-of-processed-rows

targetsパラメータにMATCHSKIPERRキーワードが含まれる場合に、SQL IMPORTによりアナリティック・ワークスペース・オブジェクトへインポートする実際の行数を指定するための変数の名前。

targets

リレーショナル表から取得したデータを格納するアナリティック・ワークスペース・オブジェクトを特定します。このターゲット・アナリティック・ワークスペース・オブジェクトのリストは、その数およびデータ型が、カーソルを宣言するSQL DECLARE CURSORコマンドの引数select-statementで指定された表の列のリストに対応している必要があります。変数、修飾データ参照、リレーション、ディメンションまたはコンポジットをターゲットにできます。

重要:
アナリティック・ワークスペース・オブジェクトを指定する順序は、ディメンション・ステータスに影響します。Oracle OLAPは、ディメンション値ごとに、ディメンションのステータスをフェッチされた値に一時的に制限します。値が次に割り当てられるアナリティック・ワークスペース・オブジェクトは、この一時的なステータスに従います。

MATCH

(デフォルト)Oracle OLAPは、対応するリレーショナル表の列からターゲットのディメンションまたはサロゲートに値をコピーしません。ディメンション化されたオブジェクトにフェッチされるデータの整列では、値のみを使用します。リレーショナル・データベースから受け取る値が、ディメンション値に一致しない場合、エラーが通知されます。

MATCHSKIPERR

Oracle OLAPは、対応するリレーショナル表の列からターゲットのディメンションまたはサロゲートに値をコピーしません。ディメンション化されたオブジェクトにフェッチされるデータの整列では、値のみを使用します。リレーショナル・データベースから受け取る値が、ディメンション値に一致しない場合、その値は無視されて処理が継続し、エラーは通知されません。

position

1から始まる数値で示す論理的な位置。

APPEND

Oracle OLAPは、対応するリレーショナル表の列から新しい値をディメンションに追加して、ターゲットのディメンションにディメンション・メンテナンスを実行します。ディメンション化されたオブジェクトにフェッチされるデータの整列には、新旧両方のディメンション値を使用します。新しい値はディメンションの最後に追加されます。

ASSIGN

Oracle OLAPは、対応するリレーショナル表の値を指定したサロゲートに割り当てます。

dimension

アナリティック・ワークスペース・ディメンションの名前。

surrogate

アナリティック・ワークスペース・サロゲートの名前。

valueset

アナリティック・ワークスペース値セットの名前。

relation

アナリティック・ワークスペース・リレーションの名前。

variable

変数の名前。

qualified_data_reference

QDRは、変数またはリレーションの1つ以上のディメンションを単一の値に制限する修飾子です。Oracle OLAPは、次のようにSQL IMPORT文のQDRを評価します。

- QDRに式が含まれている場合、その式はデータを取得する前に1回のみ評価されます。つまり、この式は本質的に定数と言えます。

- QDRがリレーション名として指定されている場合、QDRの値はそのリレーションのディメンションのステータスによって変化します。

THEN action-statements...

データの行をインポートしてアナリティック・ワークスペース・オブジェクトに割り当てるたびに実行するaction-statementsを必要なだけ指定します。アクション文には、単純な代入文、条件付き代入文および複数のディメンションに及ぶ代入文を含むことができます。

アクション文では、行ごとにフェッチされたデータを確認して処理できます。たとえば、一時オブジェクトをアナリティック・ワークスペース・オブジェクトに指定し、フェッチしたデータの行に対して一定のアクションを実行した後、永続オブジェクトのみを更新できます。ただし、アクション文がインポートされたデータを参照する必要はありません。たとえば、アクション文のいずれかをユーザー定義ファンクション(つまり、プログラム)を実行する代入文にして、複雑な処理を実行してから単純にカウンタを増分できます。

THEN句によって、SQL IMPORTの完了時に実行する後処理の必要がなくなるため、SQLのロード・パフォーマンスを向上できます。

注意:
SQL IMPORT内のアクション文の構文は、FILEREAD内のアクション文の構文と基本的に同じです。ただし、代入文の構文とVALUEキーワードの使用については例外があります。SQL IMPORTアクション文では、代入を明示的に行い、ソース、ターゲットおよび等号を含める必要があります。FILEREADアクション文では、暗黙的に代入を実行でき、ターゲットを指定するのみでかまいません。VALUEキーワードは、FILEREADアクション文ではサポートされていますが、SQL IMPORTアクション文ではサポートされていません。FILEREADに指定されたアクション文がすでにある場合は、代入文を修正し、必要に応じてVALUEキーワードを削除すると、そのコードをSQL IMPORTで再利用できます。ディメンション処理を制御する属性を除く大部分のFILEREAD属性は、SQLロードに対して意味がなく、SQL IMPORT内での実行の際に無視されます。
パフォーマンスの向上のために、THEN句ではインポートされた行内のデータのみを参照してください。

アクション文のリストでは、必ず変数の前にディメンションを処理してください。Oracle OLAPは、リレーショナル表の各行について左から右にアクション文を1つずつ処理します。アクション文でディメンション処理を実行すると、その結果得られたステータスは次のアクション文にも有効になります。変数のディメンションを制限するアクション文を最初に指定しない場合、Oracle OLAPはステータスにある最初の値を使用して変数のセルのターゲットとします。ACROSS句を指定しないかぎり、Oracle OLAPは行の単一の値をOracle OLAP変数の単一のセルに割り当てます。デフォルトでは、Oracle OLAPはデータを変数に割り当てる際に変数のディメンションをループ処理しません。

assignment-statement

式の結果である値をOracle OLAPオブジェクトに代入する代入文(SET)。

IF-statement

ブール式がTRUEまたはFALSEのいずれであるかに従ってアクションを実行するIF...THEN...ELSEコマンド文。

SELECT-statement

SQL SELECT文では、式の値に基づいてアクションが実行されます。SELECT文の形式は次のとおりです。

SELECT select-expression

[WHEN expression1 action]

[WHEN expression2 action . . .]

[ELSE action]

SELECTはSELECT式を評価し、その結果をWHEN式と順次比較します。最初に一致が見つかったところで、関連付けられたactionが発生します。一致が見つからない場合、ELSE actionが指定されていれば発生します。

ACROSS-statement: action-statement
ACROSS文では、後に続くアクション文がACROSSディメンションのステータスにあるすべての値に対して1回ずつ実行されます。ループを複数のアクション文に適用するには、アクション文を山カッコで囲みます。ACROSS文の形式は次のとおりです。

ACROSS dimension [limit]:

action-statement

ACROSS文のlimitは、dimensionに対するFORループ時以外の場合、dimensionのステータスを一時的に変更します。新しいステータスはSQL FETCH文の間のみ有効です。limit-clauseの形式は、次のとおりです。

[ADD|COMPLEMENT|KEEP|REMOVE|TO] limit-clause

一時的なステータスを指定するには、ディメンション値の適切なリストまたは関連ディメンションとともに、LIMITコマンドのキーワードのいずれか(デフォルトはTO)を挿入します。有効な制限句を使用できます(詳細は、LIMITコマンドを参照)。次の例は、monthの現行のステータスにかかわらず、monthを最近の6つの値に制限します。

ACROSS month last 6: units

<action-statement-group>
複数のアクション文は山カッコで囲んでグループ化できます。action-statement-groupの形式は次のとおりです。

<action-statement1 -

[action-statement2 . . .]>

アクション文のグループが使用されるのは、通常、ACROSS文の後です。山カッコの構文によって、ACROSSディメンションのステータスにあるすべての値に対して複数のアクション文を実行できます。

使用上の注意

SQL SELECTのターゲットの順序がディメンション・ステータスに与える影響

Oracle OLAPは、ディメンション値ごとに、ディメンションのステータスをフェッチされた値に一時的に制限します。値が次に割り当てられるアナリティック・ワークスペース・オブジェクトは、この一時的なステータスに従います。

ブール・データ型の変数の使用

OLAP SQLコマンドの入力およびターゲットのアナリティック・ワークスペース・オブジェクトにブール変数を使用できます。OLAP DML入力式の場合、Oracle OLAPはブール値を1(TRUE)または0(FALSE)の値を持つINTEGER値として扱います。

ターゲット・アナリティック・ワークスペース・オブジェクトの場合、ブール変数はリレーショナル表のあらゆる数値(またはビット)列の値を受け取ることができます。

テキスト・データのDATE変数へのインポート

テキスト・データをDATE変数にインポートすると、DATEORDERオプションの現行の設定で値が解釈されます。たとえば、テキスト値12-08-96は、DATEORDERの設定によって、1996年12月8日にも1996年8月12日にも解釈できます。

例

例10-142 単純なインポート

次のプログラムの抜粋では、カーソルを宣言してデータをインポートする基本的なステップを示します。販売履歴(sh)データベースのProductsリレーショナル表のProd_ID列およびProd_Name列の値を、prod_idディメンションおよびprod_labelアナリティック・ワークスペース変数にフェッチします。prod_label変数は、prod_idでディメンション化されています。

SQL DECLARE productcur CURSOR FOR SELECT Prod_ID, Prod_Name FROM sh.Products
SQL OPEN productdur
SQL IMPORT productcur INTO :prod_id, :prod_label
SQL CLOSE productcur
SQL CLEANUP

SQL OPEN

SQL OPENコマンドは、明示的に宣言されたSQLカーソルをアクティブ化します。カーソルがオープンされると、SQLは指定されたカーソルの定義で使用されるOLAP DML入力式を判別し、カーソルの結果セットを確認し、SQL FETCHまたはSQL IMPORTが使用できるようにカーソルをオープン状態のままにします。カーソルは、結果セットの最初の行の前に配置されます。

SQL OPENコマンドは、「アナリティック・ワークスペース・オブジェクトへのリレーショナル・データのコピー」で説明したように、リレーショナル表からアナリティック・ワークスペース・オブジェクトにデータをコピーするために他のSQLコマンドと組み合せて使用します。

構文

SQL OPEN cursor

パラメータ

cursor

同じプログラム内で先に宣言されているカーソルの名前。アンパサンド置換は使用できません。

例

例10-143 SQL OPENによるカーソルのオープン

次のプログラムの抜粋は、geolabelsというカーソルを宣言してオープンします。

SQL DECLARE geolabels CURSOR FOR -
SELECT Store_ID, Store_Name, City FROM Stores
IF SQLCODE NE 0
THEN SIGNAL dclerror 'SQLERRM'
SQL OPEN geolabels
IF SQLCODE NE 0
THEN SIGNAL operror 'SQLERRM'

SQL PREPARE

SQL PREPAREコマンドは、後でプログラム内でSQL EXECUTEを使用して実行するSQL文を、同じプログラム内でプリコンパイルします。通常、SQL PREPAREは、何度も実行されるSQL文、特にOLAP DML入力式を含むINSERT、UPDATE、DELETEなどの文の処理を最適化するためにプログラム内で使用されます。

構文

SQL PREPARE statement-name FROM sql-statement [insert-options]

パラメータ

statement-name

sql-statementから生成された実行コードに付ける名前。statement-nameは、別のSQL PREPARE文を発行するのみで再定義できます。

sql-statement

実行効率を高めるためにプリコンパイルするSQL文。プログラムのコンパイル時にアンパサンド置換や未定義の変数を含むことはできません。

insert-options

次のオプションは、sql-statementがINSERT文である場合に使用できます。

DIRECT=YES|NOでは、ダイレクト・パスINSERTを実行するかどうかを指定します。このオプションは、INSERT文のvalues句のすぐ後に最初に指定する必要があります。

YESに設定すると、ダイレクト・パスINSERTが実行されます。ダイレクト・パスINSERTを使用すると、INSERT操作時のパフォーマンスが向上します(これは、Oracleのダイレクト・パス・ローダー・ユーティリティのSQL*Loaderと同様の機能です)。

デフォルト値はNOで、通常のINSERTが実行されます。

NOLOG=YES|NOは、ログを記録するかどうかを指定します。YESに設定すると、REDO情報がREDOログ・ファイルに記録されないため、ロード時間が速くなります。デフォルト値はNOで、ロギング・モードを指定します。

PARTITION=(sub)partition-nameは、名前付きパーティションまたはサブパーティションに関連するセグメントのみをロックするように指定します。このオプションを指定すると、同じ表の関係のないセグメントに別のセッションからデータを挿入できます。このオプションを指定しない場合(デフォルト)は、他のセッションから同じ表にデータを挿入できません。

使用上の注意

ダイレクト・パスINSERTの使用

ダイレクト・パスINSERTを実行すると、データは、バッファ・キャッシュを経由せず直接データ・ファイルに書き込まれます。既存データの空き領域は再利用されないため、挿入データは表の既存データの後ろに追加されます。

ダイレクト・パスINSERT使用時の制約: ダイレクト・パスINSERTには、いくつかの制約が適用されます。OLAP DMLを使用してダイレクト・パスINSERTを実行する場合、INSERTを正常に実行するには、ダイレクト・パスINSERTを発行するセッションのトランザクションをコミットする必要があります。(トランザクションは、SQLまたはOLAP DML COMMITを使用してコミットできます。)

さらに、SQLでダイレクト・パスINSERTを使用する際に適用される次の一般的な制約は、OLAP DML PREPARE文によるダイレクト・パスINSERTのプリコンパイルにも適用されます。

- ターゲット表は、索引編成およびクラスタ化ができない。

- ターゲット表には、オブジェクト型列およびLOB列を含むことができない。

- ターゲット表には、トリガーおよび参照整合性制約を定義できない。

ダイレクト・パスINSERTを使用する際の制約の詳細は、『Oracle Database SQL言語リファレンス』のINSERT文の説明を参照してください。

ダイレクト・パスINSERTによるデータ型の変換: 表10-11「ダイレクト・パスINSERTによるデータ型の自動変換」に、ダイレクト・パスINSERTの実行時に自動的に変換されるデータ型を示します。

表10-11 ダイレクト・パスINSERTによるデータ型の自動変換

Oracle RDBMS

Oracle OLAP DML

CHAR(n)、VARCHAR(n)

TEXT

LONG

WIDEオプションを持つTEXT

CHAR(8)、VARCHAR(8)

ID

DATE

DATE

NUMBER(x,x)

DECIMAL(SHORTDECIMAL)

INTEGER(またはNUMBER(38))

INTEGER(SHORTINTEGER)

NUMBER(1)

BOOLEAN

DATEデータ型の列へのOLAPテキスト・データの挿入: Oracle OLAPのテキスト・データをDATEデータ型の列に挿入する場合は、デフォルトの日付書式であるDD MMM YYを使用する必要があります。セパレータとして、スラッシュ(/)、ハイフン(-)または空白を使用できます。データが異なる書式の場合、SQL INSERT文でOracle TO_DATEファンクションを使用できます。

CLOB列またはNCLOB列への大きなテキスト値の挿入: アナリティック・ワークスペースから2KBを超えるテキスト・データをCLOBまたはNCLOB列に挿入するには、OLAP DML入力式の名前の前にWIDEキーワードを使用します。OLAP DML入力式のデータ型がTEXTである場合、ターゲットのデータ型はCLOBです。入力式のデータ型がNTEXTである場合、ターゲットのデータ型はNCLOBです。

次に、WIDEキーワードを持つOLAP DML入力式の構文を示します。記述例は、例10-146「WIDEキーワードの使用」を参照してください。

:WIDE input-expression

記述例は、例10-146「WIDEキーワードの使用」を参照してください。

ターゲット表は、次のガイドラインに従う必要があります。

- CLOBとNCLOB列の数と組合せが自由

- LONG列がない

RDBMSでは、大きなデータ型にいくつかの制約があります。Oracle OLAPは、これらの制約に違反してもエラーを通知しません。ただし、予期しない結果になることがあります。ラージ・データ型に関する制約については、『Oracleアプリケーション開発者ガイド』を参照してください。

文字数の計算

Oracle OLAP変数からデータベース表に送信される文字数は、次の計算式で計算できます。

NUMCHARS(variable) + 2 * (NUMLINES(variable) - 1)

この計算式は、Oracle OLAPがデータベースにテキストを渡す際に行間に挿入する余分な改行およびライン・フィードをカウントします。

例

例10-144 FORループのプリコンパイル

salespersonディメンションからリレーショナル表に営業社員を自動的に追加する場合、FORループ内にSQL INSERT文を含むプログラムを記述できます。

FOR salesperson
SQL INSERT INTO Sales VALUES (:Salesperson, :Dollars) DIRECT=YES

OLAP DML入力式が含まれる文をFORループなどで何度も実行する場合、SQL文を最初にプリコンパイルしておくと効率的にその文を実行できます。INSERT文はPREPARE文の一部になります。

SQL PREPARE s1 FROM INSERT INTO Sales VALUES -
(:Salesperson, :Dollars) DIRECT=YES
FOR Salesperson
DO
SQL EXECUTE s1
IF SQLCODE NE 0
THEN BREAK
DOEND

例10-145 表の更新

次の例は、アナリティック・ワークスペースに格納されているデータを使用した表の単純な更新を示します。marketディメンションは、FORループで一度に1つの値に制限されます。SQL句のWHERE S.Market=:marketは、そのmarketの行にある売上値を変更する値として指定します。

FOR market
SQL UPDATE Mkt SET Sales=:Mkt.Sales WHERE S.Market=:market

前の例のINSERT文と同様に、UPDATE文はPREPARE文で使用し、ACROSS文またはFORループで実行します。

SQL PREPARE s2 FROM UPDATE mkt -
SET Sales=:mkt.sales WHERE s.market=:market
ACROSS market DO 'SQL EXECUTE s1'

例10-146 WIDEキーワードの使用

次の両方の文で、WIDEはターゲット値について、var1がTEXTの場合はCLOB、var1がNTEXTの場合はNCLOBであることを示します。

SQL INSERT INTO CLOB_TEST values (:dim1 :WIDE var1)
SQL UPDATE CLOB_TEXT SET clob_col = :WIDE var1 WHERE key = 1

SQL PROCEDURE

SQL PROCEDUREコマンドは、RDBMSに格納されているプロシージャを実行します。

注意:
OLAP DMLを使用して、SQLストアド・プロシージャも作成できます。参照:

- 「OLAP DMLによるSQLプロシージャの作成」

- 例10-147「ストアド・プロシージャの作成」

構文

SQL PROCEDURE procedure-name (parameters)

ここで、parametersは次のいずれか1つ以上で、複数の場合はカンマで区切ります。

sql-parameter

:dml-parameter

パラメータ

procedure-name

SQLストアド・プロシージャの名前。

sql-parameter

RDBMSの変数の名前。

:dml-parameter

OLAP DML式(OLAP DML変数など)。OLAP DML SQL文でのOLAP DML式の使用方法については、「OLAP DML SQL文でのOLAP DML式の使用」を参照してください。

使用上の注意

OLAP DMLによるSQLプロシージャの作成

OLAP DMLを使用してストアド・プロシージャを作成するには、SQL CREATE PROCEDURE文を引数としたOLAP DMLのSQL文を発行します。OLAP DMLのSQL文内でCREATE PROCEDUREを引数としてコーディングする構文は、本来のSQLでCREATE PROCEDUREをコーディングする構文と若干異なります。OLAP DML文の引数としてコーディングする場合、終端文字としてセミコロンのかわりにティルド(~)を、また代入文では1つではなく2つのコロンを使用します。例10-147「ストアド・プロシージャの作成」を参照してください。

OLAP DMLでSQLプロシージャをコールする際の制約

OLAP DML SQL PROCEDURE文でコールされるストアド・プロシージャには、出力変数またはトランザクションを含むことができません。

例

例10-147 ストアド・プロシージャの作成

次の例は、new_productsというプロシージャを作成する構文を示します。

SQL CREATE OR REPLACE PROCEDURE new_products -
(id CHAR, name CHAR, cost NUMBER) AS -
price NUMBER~ -
BEGIN -
price ::= cost * 2.5~ -
INSERT INTO products -
VALUES(id, name, price)~ -
END~

例10-148 ストアド・プロシージャの実行

次のFORループは、new_productsというSQLストアド・プロシージャを実行し、ディメンションおよび変数に格納されたデータをリレーショナル表に挿入します。この例で、prodはOracle OLAPディメンション、labels.pおよびcost.pはprodでディメンション化された変数です。

FOR prod
DO
SQL PROCEDURE new_products(:prod, :labels.p, :cost.p)
IF SQLCODE NE 0
THEN BREAK
DOEND

SQL SELECT

SQL SELECTコマンドは暗黙カーソルを使用してリレーショナル表からアナリティック・ワークスペース・オブジェクトにデータをコピーします。暗黙カーソルを使用して、リレーショナル表からアナリティック・ワークスペース・オブジェクトにデータをコピーするには、SQL SELECTコマンドを使用します。また、「アナリティック・ワークスペース・オブジェクトへのリレーショナル・データのコピー」で説明したように、OLAP DMLコマンドで明示カーソルを使用してデータをコピーすることも可能です。

構文

SQL SELECT expressions FROM tables -

[WHERE predicates] [GROUP BY expressions] -

[ORDER BY expressions] [HAVING predicates] -

INTO :targets... [THEN action-statements...]

targetsは、次のいずれか1つ以上です。

[MATCH] dimension|surrogate

APPEND [position] dimension

ASSIGN surrogate

variable|qualified data reference|relation|composite

パラメータ

SELECT expressions FROM tables-

[WHERE predicates] [GROUP BY expressions] -

[ORDER BY expressions] [HAVING predicates]

カーソルに関連付けるデータを特定するSQL SELECT文。SQL SELECT文の構文については、『Oracle Database SQL言語リファレンス』を参照してください。

targets

リレーショナル表から取得したデータを格納するアナリティック・ワークスペース・オブジェクトを特定します。このターゲット・アナリティック・ワークスペース・オブジェクトのリストは、その数とデータ型がSELECT文で指定された表の列のリストに対応している必要があります。変数、修飾データ参照、リレーション、ディメンションまたはコンポジットをターゲットにできます。

重要:
アナリティック・ワークスペース・オブジェクトを指定する順序は、ディメンション・ステータスに影響します。Oracle OLAPは、ディメンション値ごとに、ディメンションのステータスをフェッチされた値に一時的に制限します。値が次に割り当てられるアナリティック・ワークスペース・オブジェクトは、この一時的なステータスに従います。「ターゲット・アナリティック・ワークスペース・オブジェクトにする結合ディメンション」と「ターゲット・アナリティック・ワークスペース・オブジェクトにするコンポジット・ディメンション」を参照してください。

ターゲットには、前にコロンを付ける必要があります。ターゲットがディメンションの場合、MATCHおよびAPPENDキーワードでディメンションの処理を指定できますが、この場合、コロンはキーワードの前に付けます。

ヒント:
ANDおよびORは、OLAP DML構文とSQL WHERE句のどちらでも使用できるため、Oracle OLAPがOLAP DML入力式の末尾を認識できるようにtargets句を記述します。

[MATCH] {dimension|surrogate}

(デフォルト)Oracle OLAPは、ターゲットのディメンションやサロゲートに対してディメンション・メンテナンスを実行しません。ディメンション化されたオブジェクトにフェッチされるデータの整列では、受け取る値を使用します。リレーショナル・データベースから受け取る値が、ディメンションまたはサロゲートの値に一致しない場合、エラーが通知されます。

APPEND [position] dimension

Oracle OLAPは、新しい値をディメンションに追加して、ターゲットのディメンションにディメンション・メンテナンスを実行します。ディメンション化されたオブジェクトにフェッチされるデータの整列には、新旧両方のディメンション値を使用します。デフォルトでは、新しい値がディメンションまたはサロゲートの最後に追加されます。また、アクション文でディメンション値を処理する方法は、positionを使用しても制御できます。

ASSIGN surrogate

指定されたサロゲートに値を割り当てます。

THEN action-statements

オプションでTHEN句を使用すると、データの行をフェッチしてアナリティック・ワークスペース・オブジェクトに割り当てるたびに実行するaction-statementをいくつでも指定できます。action-statementは、次のいずれかです。

assignment-statement

IF-statement

SELECT-statement

ACROSS-statement: action-statement

<action-statement-group>

action-statementの構文の詳細は、SQL IMPORTコマンドを参照してください。

使用上の注意

SQL SELECTに関する一般的な制約

SQL SELECT文にアンパサンド置換を含めることはできません。

コピーの最適化

値をリレーショナル表から多次元の入力変数にコピーする場合は、SQL SELECT文の引数select-statementのORDER BY句でディメンションに対応する列を指定するとき、最も変化の遅いディメンションを最初に指定します。これにより、パフォーマンスが最適化されます。

例

例10-149 単純な選択

たとえば、次の記述を持つsalesという名前のリレーショナル表があるとします。

PROD_ID                     NOT NULL NUMBER(6)
CUST_ID                     NOT NULL NUMBER
TIME_ID                     NOT NULL DATE
CHANNEL_ID                  NOT NULL CHAR(1)
PROMO_ID                    NOT NULL NUMBER(6)
QUANTITY_SOLD               NOT NULL NUMBER(3)
AMOUNT_SOLD                 NOT NULL NUMBER(10,2)

また、アナリティック・ワークスペースに、対応するアナリティック・ワークスペース・オブジェクトに関する次の定義があるとします。

DEFINE aw_prod_id DIMENSION NUMBER (6)
DEFINE aw_cust_id DIMENSION NUMBER (6)
DEFINE aw_date DIMENSION TEXT
DEFINE aw_channel_id DIMENSION TEXT
DEFINE aw_promo_id DIMENSION NUMBER (6)
DEFINE aw_sales_dims COMPOSITE <aw_prod_id aw_cust_id -
aw_channel_id aw_promo_id>
DEFINE aw_sales_quantity_sold VARIABLE NUMBER (3) <aw_date aw_sales_dims -
<aw_prod_id aw_cust_id aw_date aw_channel_id aw_promo_id>>
DEFINE aw_sales_amount_sold VARIABLE NUMBER (10,2) <aw_date aw_sales_dims -
<aw_prod_id aw_cust_id aw_date aw_channel_id aw_promo_id>>

製品415のデータをsales表からアナリティック・ワークスペース・オブジェクトにコピーするには、次の文をOLAP Worksheetで実行します。

SQL SELECT prod_id cust_id time_id channel_id promo_id quantity_sold -

amount_sold WHERE prod_id = 415 -
INTO :aw_prod_id, :aw_cust_id, :aw_date,  -
:aw_channel_id, :aw_promo_id, :aw_sales_quantity_sold, :aw_sales_amount_sold

STATUS

STATUSプログラムは、1つ以上のディメンション、ディメンション・サロゲートまたは値セットのステータス、あるいはアナリティック・ワークスペースのすべてのディメンションのステータスを現行の出力ファイルに送信するプログラムです。

1つ以上のディメンション、ディメンション・サロゲート、値セット名を指定する場合、Oracle OLAPはそれらのオブジェクトのみのステータスを生成します。AWキーワードを使用してアタッチされているアナリティック・ワークスペースの名前を指定すると、Oracle OLAPはそのアナリティック・ワークスペースのすべてのディメンションのステータスを生成します。引数を指定しない場合、STATUSは、現行アナリティック・ワークスペースにあるすべてのディメンション(ディメンション・サロゲートおよび値セットではない)の現行のステータスを生成します。ただし、STATUSは、STATUS NAMEを指定しないかぎり、NAMEディメンションのステータスを表示しません。

ヒント:
表示する幅または位置を制御する場合は、STATUSではなくSTATLISTを使用します。

戻り値

TEXT

構文

STATUS name... | AW [workspace-name]

パラメータ

name

アナリティック・ワークスペースのディメンションまたは値セットの名前。変数、計算式、リレーション、名前付きコンポジットなど、ディメンション化されたアナリティック・ワークスペース・オブジェクトの名前を指定することもできます。この場合、ディメンションが名前のないコンポジットに含まれないかぎり、nameの各ディメンションのステータスが生成されます。

AW [workspace-name]

workspace-nameに含まれるすべてのディメンションのステータスをSTATUSが生成するように指定します。workspace-nameは、アナリティック・ワークスペースの名前です。

使用上の注意

STATUSの出力

ディメンションのすべての値が現行のステータスまたは値セットに元の順序で存在する場合、STATUSはALLを表示します。元の順序で3つ以上の値が並んでいる場合、STATUSはvalue-1 TO value-nのように省略します。ただし、NAMEディメンションの場合、STATUSは3つ以上の値が並んでいても省略しません。

オブジェクトに値がない場合のSTATUS

ディメンション、ディメンション・サロゲートまたは値セットに値がない場合(たとえば、定義したばかりのオブジェクトでまだ値を入力していないなど)、STATUSはそのディメンション、ディメンション・サロゲートまたは値セットに対してNULLを返します。オブジェクトが定義されていないアナリティック・ワークスペースの場合、STATUSは「There are no dimensions in your current analytic workspace.」というメッセージを返します。

例

例10-150 ディメンションの現行のステータスの検出

STATUSを使用して、ディメンションmonthおよびdistrictの現行のステータスを生成します。

次の文

STATUS month district

によって、次の出力が生成されます。

The current status of MONTH is:
Jan95 TO Dec96
The current status of DISTRICT is:
Boston, Chicago, Denver

例10-151 変数のディメンションのステータスの検出

STATUSを使用して、変数salesのすべてのディメンションの現行のステータスを生成します。

次の文

STATUS sales

によって、次の出力が生成されます。

The current status of MONTH is:
Jan95 TO Dec96
The current status of PRODUCT is:
ALL
The current status of DISTRICT is:
Boston, Chicago, Denver

STDHDR

STDHDRプログラムは、レポート出力の各ページの上部に、Oracle OLAP標準ヘッダーを生成するプログラムです。

現行のページの標準ヘッダーは、2つの行で構成されています。最初の行には、左側に日付と時刻が、右側にページ番号が含まれます。2行目は空白です。

ヘッダー出力は、現行の出力ファイルに送信されます。

構文

STDHDR

使用上の注意

LSIZEの設定

LSIZEは、STDHDRを使用する前に最低でも値を29に設定する必要があります。設定しない場合は、ヘッダーが完全に表示されません。26より小さい値を設定すると、エラーが生成されます。LSIZEのデフォルトは、80です。

カスタム・ヘッダーの作成

PAGINGがYESに設定されている場合、Oracle OLAPは標準ヘッダーを出力の各ページの上部に自動的に挿入します。別のヘッダーを使用するには、ヘッダーを生成するプログラムを作成し、PAGEPRGオプションをそのプログラムの名前に設定する必要があります。標準ヘッダーに戻すには、PAGEPRGを'STDHDR'に設定します。(詳細は、PAGEPRGオプションを参照してください。)

ヘッダー・プログラムにおけるSTDHDRの使用

PAGEPRGを使用してヘッダー・プログラムを指定する場合でも、プログラムの一部としてSTDHDRを実行することにより、カスタム・ヘッダーで標準ヘッダーを使用できます。通常、STDHDRはカスタマイズしたヘッダーを生成する文の前に配置します。例10-152「レポートのカスタム・ヘッダーの作成」を参照してください。

STDHDRプログラム

STDHDRでは、次のようにHEADINGコマンドとCONVERTコマンドを使用します。

HEADING L W 8 <CONVERT(TODAY, TEXT,'<DD><MTXTL><YY>') TOD> -
R W LSIZE-25 'Page ' L W 6 D 0 PAGENUM
BLANK

例

例10-152 レポートのカスタム・ヘッダーの作成

レポートの各ページに、標準ヘッダーとカスタマイズしたタイトル「Annual Sales Report」を含めるとします。このために、report.headという小さいPAGEPRGプログラムを定義します。

DEFINE report.head PROGRAM
PROGRAM
CALL STDHDR
HEADING WIDTH LSIZE CENTER 'Annual Sales Report'
BLANK
END

レポート・プログラムで、PAGINGをYESに設定し、PAGEPRGオプションを'REPORT.HEAD'に設定することにより改ページごとにこのプログラムを実行するように指定します(詳細は、PAGEPRGオプションを参照)。レポートを実行すると、標準ヘッダーとカスタム・ヘッダーの次の組合せが各ページに生成されます。

18Jan97  15:05:16                                   PAGE 1

Annual Sales Report

SWITCHコマンド

SWITCHコマンドは、プログラムに複数のパスを持つブランチを設定するコマンドです。プログラムの実行中に使用される特定のパスは、SWITCHにより指定される制御式の値によって決まる。SWITCH文は、プログラム内でのみ使用できます。

注意:
単独のSWITCHコマンドと、式の条件演算子として使用されるSWITCHを混同しないでください。「SWITCH式」を参照してください。

構文

SWITCH control-expression

DO

CASE case-expression1:

statement 1.1

...

statement 1.n

BREAK

CASE case-expression2:

statement 2.1

...

statement 2.n

BREAK

[DEFAULT:

statement n.1

...

statement n.n

BREAK]

DOEND

パラメータ

control-expression

control-expression引数は、SWITCH文によりプログラム制御を移行する先のCASEラベルを指定する引数です。SWITCH文が実行されると、control-expressionが評価され、プログラムの各CASEラベル式と比較されます。一致が見つかると、制御はそのCASEラベルに移行されます。一致が見つからない場合、制御はDEFAULTラベル(存在する場合)またはSWITCHのDOENDに続く文に移行されます。

CASE case-expression1, CASE case-expression2, ...

その式(case-expression1、case-expression2、...)により、処理を行う複数のCASEを指定するCASEラベルです。control-expressionがcase-expressionに一致する場合、プログラム制御はそのCASEラベルに移行されます。CASEラベル式はプログラムの実行時に、記述されている順序で、一致が見つかるまで評価されます。

DEFAULTラベルはオプションです。case-expressionsに一致するcontrol-expressionがない場合に制御が移行される、特別なCASEを指定します。DEFAULTを省略し、一致が見つからない場合は、制御はSWITCHのDOENDに続く文に移行されます。

SWITCH文のすべてのCASEラベル(DEFAULTを含む)は、SWITCH文の直後のDOとDOENDの間に含める必要があります。case-expressionはラベルであるため、末尾にコロン(:)を付ける必要があります。特定のCASEで実行する文は、ラベルの後に記述する必要があります。通常、CASEの最後の文はBREAKにしますが、これは、SWITCHからの制御を、SWITCHのDOENDに続く文に移行します。

CASEの終わりでBREAK(またはRETURN、SIGNALなど)を省略した場合、プログラムは次のCASEの文を同様に実行し始めます。通常、このような処理は必要ありません。しかし、2つのCASEで同じ文を実行する必要がある場合は、文の前に両方のCASEラベルを配置することによりこの処理方法を活用できます。

使用上の注意

control-expressionおよびcase-expression

SWITCH control-expressionには任意のデータ型を指定でき、case-expressionsも同様です。様々なcase-expressionsに、種々のデータ型を指定できます。control-expressionまたはcase-expressionとしてディメンションの名前(リテラル、非引用テキスト式として)を指定する場合、Oracle OLAPは一致を検索する際に、ディメンション名ではなくディメンションの現行のステータス・リストにある最初の値を使用します。ディメンションのステータス・リストに値がない場合、Oracle OLAPは値NAを使用します。NAのcontrol-expressionは、最初のNAのcase-expressionに一致します。

SWITCHでのアンパサンド置換

SWITCH control-expressionまたはCASEラベルcase-expressionでは、アンパサンド置換を使用しないようにします。アンパサンドは予測不可能な結果を生成し、その結果は多くの場合に適切ではありません。

複数のSWITCHコマンド

プログラムには、複数のSWITCH文を含めることができます。さらに、SWITCHコマンドをネストすることもできます。プログラムに複数のSWITCHコマンドが含まれている場合、SWITCHコマンドがネストされている場合でも、各コマンドにそれぞれのDEFAULTラベルを指定できます。

制御の移行

BREAKは、SWITCH文内でのプログラム制御の移行に一般的に使用される文ですが、他にも同じ目的で使用できる文があります。CONTINUE、GOTO、RETURNおよびSIGNALなどの文も使用できます。SWITCH文がFORまたはWHILEループ内にある場合は、CONTINUEのみを使用できることに注意してください。それらの文や、DO ... DOENDの項も参照してください。

例

例10-153 プログラムにおけるSWITCHを使用した複数パスへの分岐

次のプログラム行では、複数タイプのレポートの中から1つのタイプのレポートが生成されます。SWITCH文の前で、プログラムはユーザーが必要とするレポートのタイプを判断し、変数userchoiceにMarketまたはFinanceの値を配置します。プログラムは、その名前に一致するCASEラベルに切り替わり、レポートを生成します。レポートが完了すると、BREAK文によって制御がDOENDの後のクリーンアップ・セクションに移行されます。

SWITCH userchoice
DO
CASE 'Market':
...
BREAK
CASE 'Finance':
...
BREAK
DEFAULT:
...
BREAK
DOEND
cleanup:
...

TEMPSTAT

TEMPSTATコマンドは、FORループ内またはREPORT文によって生成されるループ内でループ処理されているディメンションを制限するコマンドです。ステータスはTEMPSTATに続く文の実行後にリストアされる。DO ...DOEND句がTEMPSTATの後に続く場合、ステータスは、一致するDOENDか、BREAK文またはGOTO文が検出された時点でリストアされます。TEMPSTATは、プログラム内でのみ使用できます。

構文

TEMPSTAT dimension...

statement block

パラメータ

dimension(s)

FORループまたはREPORT文によって生成される自動ループ内でそのステータスが一時的に変更される1つ以上のディメンション。

statement block

ディメンションのステータスを変更する1つ以上の文。一時的なステータスの下で複数の文を実行するには、それらをDO ... DOENDで囲みます。

使用上の注意

TEMPSTAT文のネスト

TEMPSTATコマンドは、一方のコマンド内にもう一方のコマンドをネストでき、ネストされたTEMPSTATコマンド内では同じディメンションを繰り返すことができます。

TEMPSTATの配置

REPORTがループ処理する間にディメンションのステータスを変更する場合、TEMPSTAT文は、REPORT文の前ではなくそのREPORTのループ内に配置する必要があります。たとえば、monthのステータスを変更するmonthly_salesというユーザー定義ファンクションを作成し、monthly_salesがmonthをループ処理するREPORT文の一部であるとします。この場合、ステータスの変更が行われるように、TEMPSTAT文をmonthly_salesファンクション内に配置する必要があります。(TEMPSTATEはmonthly_sales内に配置する必要があり、これは、REPORT文がMONTHをループ処理するFORループ内のTEMPSTAT DO/DOENDの間にある場合でも同様です。)

POPおよびPOPLEVELコマンド

TEMPSTAT文ブロックのDO/DOENDの間では、対応するPUSH文がブロックにないかぎり、POP文を使用してブロックのTEMPSTATで保護されているディメンションをポップすることはできません。

同様にTEMPSTAT文ブロックのDO/DOENDの間では、次の2つの条件のいずれかが満たされないかぎり、POPLEVEL文を使用してブロックのTEMPSTATが保護しているディメンションをポップできません。1つは、対応するPUSHLEVEL文もブロックにある場合、もう1つはPUSHLEVEL文の指定以降にディメンションのプッシュのみがブロック内にある場合です。

LIMITおよびCONTEXTコマンドのみの使用

TEMPSTAT文のDO/DOENDの間において、ディメンションのループ処理の中でディメンションのステータスを変更する唯一の方法は、LIMITまたはCONTEXT APPLYコマンドを使用することです。(詳細はLIMITコマンドおよびCONTEXTコマンドを参照してください。)POPまたはPOPLEVELを使用して、ディメンションのステータスを変更することはできません。さらに、値の追加によってもディメンションのステータスがALLに変更されるため、ディメンションに値を追加する演算を実行することもできません。たとえば、MAINTAIN ADD、FILEREAD APPENDおよびIMPORT(EIFファイルの新しい値を使用)は、ディメンションに値を追加します。

例

FORループ内のTEMPSTAT

次のプログラムの抜粋では、TEMPSTAT文を使用してFOR marketループ内のmarketディメンションが制限されています。

FOR market
DO
TEMPSTAT market
DO
LIMIT market TO CHILDREN USING market.market
REPORT market
DOEND
DOEND

TRACE

TRACEコマンドは、個々のプログラム、モデルおよび計算式の実行中に、これらの開始、終了および実行に関する情報を現行の出力ファイルに記録するかどうかを指定します。

- プログラムとモデルについては、各コード行の開始、終了および実行をトレースし、PRGTRACEまたはMODTRACEオプションがYESに設定されている場合と同様の出力を生成します。

- 計算式については、開始時に名前とディメンション値を、また終了時には戻り値を出力します。

構文

TRACE [?|{object-name|*} [OFF] [begin-arguments] [end-arguments] [ TRACELINES | NOTRACELINES]]

ここで、

begin-argumentsには次の構文が必要です。

IN [ARGS | NOARGS]

end-argumentsには次の構文が必要です。

OUT [VALUE | NOVALUE]

パラメータ

?

?(疑問符)は、現行のTRACEリストを表示しますが、このリストには、実行時にトレースする各プログラム、モデルおよび計算式の名前が含まれます。また、グローバル・トレースがある場合は、TRACE ALLが含まれます。リストでは、各プログラム、モデルおよび計算式、さらにTRACE ALLに対して、現行のTRACE設定(begin-argumentsおよびend-argumentsの値)が表示されます。

object_name

トレースするプログラム、モデルまたは計算式の修飾されていない名前。アタッチされているデータベースに存在しない名前でも、プログラム、モデルまたは計算式の名前を指定できます。OFFキーワードを指定しないと、この引数によってオブジェクト固有のトレースが有効化され、指定したプログラム、モデルまたは計算式が実行されると、TRACEがこれらをトレースします。プログラム、モデルまたは計算式のTRACE設定を変更するために、これらのオブジェクト固有のトレースは複数回有効化できます。OFFキーワードを指定すると、この引数によってオブジェクト固有のトレースが無効化されます。

*[OFF]

*(アスタリスク)は、プログラムとモデルでのみ使用します。

- OFFキーワードを指定しないかぎり、*(アスタリスク)によりTRACEリストにTRACE ALLが追加され、グローバル・トレースが有効になります。これは、実行するすべてのプログラムおよびモデル(express.dbの一部であるLISTNAMESなどのプログラムも含む)の実行をトレースすることを意味します。オブジェクト固有のトレースとグローバル・トレースの両方を指定した場合、指定したプログラムまたはモデルの実行時には、オブジェクト固有のトレース設定が優先されます。

- OFFキーワードを指定すると、*(アスタリスク)によりTRACEリストからすべてのプログラム名、モデル名およびTRACE ALLが削除され、リストが空になります。これにより、グローバル・トレースが無効化されます。

ARGS

NOARGS

ARGSおよびNOARGSは、プログラムと計算式でのみ使用します。これらのキーワードは、プログラムの入力時または計算式のディメンション値の入力時に、TRACEが引数の値を表示する必要があるのかどうかを示します。デフォルトはARGSです。

VALUE

NOVALUE

VALUEおよびNOVALUEは、プログラムでのみ使用します。これらのキーワードは、プログラムの最後の行を実行した後にプログラムの戻り値を表示するかどうかを示します。戻り値のないプログラムの場合、値は表示されません。デフォルトはVALUEです。

TRACELINES

NOTRACELINES

TRACELINESおよびNOTRACELINESは、プログラムとモデルでのみ使用します。これらのキーワードは、プログラムまたはモデルの行を出力するかどうかを示します。デフォルトはTRACELINESです。

使用上の注意

ネストしたプログラムおよびモデル

ネストしたプログラム(1つのプログラムが別のプログラムをコールする)を実行する場合で、さらにすべてのネストしたプログラムをトレースする場合、TRACEはネストされたレベルをトラッキングします。プログラムの1つがモデルをコールする場合は、モデルもトレースでき、TRACEはネストしたプログラムのスタック内にあるモデルもトラッキングします。

TRACE設定の変更

プログラムやモデルのTRACE設定を変更するには、新しいTRACEコマンドを実行します。設定のうち1つだけを変更した場合、他の設定は以前の設定値のまま維持されます。

モデルのトレース

モデル内の連立方程式のブロックが指定した反復回数内で解決できない場合は、エラーが発生します。このような場合にTRACEが実行するアクションは、MODERRORオプションの値で決まります。

TRACKPRG

TRACKPRGコマンドは、トラッキングをオンにしている間に実行されるすべてのプログラムのパフォーマンス・コストを追跡するコマンドです。TRACKPRGによって意味のある情報を得るためには、Oracle OLAPで実行するセッションは1つのみにする必要があります。さらに、ホスト・コンピュータで多くのプロセスが起動されるほど、TRACKPRGの結果の精度が低下します。

TRACKPRGをオンにして、追跡するプログラムを実行し、再度TRACKPRGを使用して結果を取得します。各プログラムが実行されるたびに、TRACKPRGはそのコスト・データを1つのエントリとして、そのトラッキング・リストに格納します。別のプログラムを実行すると、新しいエントリがリストに追加され、Oracle OLAPメモリー(未使用の記憶域)に保持されます。

プログラムまたはコードの行は、実行に時間がかかる場合はパフォーマンス・コストが高いとみなされます。TRACKPRGで相対的にコストが高いプログラムを特定し、さらにMONITOR文を使用してそのプログラム内で所要時間の長い行を特定します。必要な場合は、両方のコマンドを同時に使用できます。

構文

TRACKPRG {ON|OFF|file|INIT}

ここで、fileの構文は次のとおりです。

FILE [APPEND] [file-name]

パラメータ

ON

実行するプログラムの検索を開始して、トラッキング・リストにタイミング・データを収集できるようにします。(トラッキングがすでにオンになっている場合は、中断せずに現行のトラッキング処理を継続し、トラッキングがオフになっている場合は間隔を置いて再開します。)

OFF

プログラムのトラッキングを停止し、現在トラッキング・リストにあるすべてのタイミング・データを固定します。これによりすぐに、またはセッションの後半で、リストを現行の出力ファイルまたはテキスト・ファイルに送信できます。

FILE

トラッキング・リストを送信する場所を指定します。TRACKPRG FILEはトラッキング・リストには影響を与えないため、異なる送信先に同じリストを繰返し送信できます。

APPEND

Oracle OLAPがトラッキング・リストを、file-nameにより示されるファイルと置き換えるのではなく、その内容に追加するように指定します。

file-name

Oracle OLAPがデータを送信する先のテキスト式。そのファイルがカレント・ディレクトリにない場合、ファイルの名前にディレクトリ・オブジェクトの名前を含める必要があります。

注意:
ディレクトリ・オブジェクトはデータベースで定義され、ディレクトリおよびディレクトリ内のファイルへのアクセスを制御します。CDA文を使用して、カレント・ディレクトリ・オブジェクトを特定および指定できます。使用するデータベース・ユーザー名で読取りおよび書込み可能なファイルがあるディレクトリ・オブジェクトへのアクセス権については、Oracle DBAに問い合せてください。

file-nameを省略すると、Oracle OLAPは現在トラッキング・リストにあるタイミング・データを現行の出力ファイルに送信します。

INIT

現行のトラッキング・リストにあるタイミング・データを廃棄し、そのリストに使用されていたOracle OLAPメモリーを解放します(メモリーを他の目的で使用する場合に役立ちます)。さらに、トラッキングがオンになっている場合は、プログラムの実行の待機を再開し、それらのデータを完全に新しいトラッキング・リストに収集できるようになります。

使用上の注意

単一の実行

トラッキング・リストの各エントリ(つまり、行)には、単一のプログラムの単一の実行に関する情報が記録されます。

コールの深さ

各エントリには、現行のプログラムに対するコール(存在する場合)の深さ、つまり現行の行で報告されたプログラムに対して行われたプログラム・コールの数が記録されます。TRACKPRGの出力では、コールの深さはプログラム名のインデントにより示されます。TRACKPRGは、インデントされた各プログラムについて、そのプログラムに対するコールを行ったプログラムの名前もエントリの終わりに記録します。

タイミング・データのタイプ

各エントリで、TRACKPRGは2つのタイプのタイミング・データを記録します。

- 限定的コスト: プログラムによってコールされた他のプログラムで消費された時間を除く、そのプログラムで消費された時間

- 包括的コスト: プログラムによってコールされた他のプログラムで消費された時間を含む、そのプログラムで消費された時間

これにより、両方のタイプのコストに関するレポートを生成するオプションを選択できます。

エントリのセクション

TRACKPRGの出力では、各エントリ(行)は次の4つのセクションに分けられます。

- プログラム名: 文字の列1から38

- 限定的な時間: 列39から49

- 包括的な時間: 列50から60

- コール側プログラムの名前: 列61から77

(MAINプログラムの)TRACKPRG出力のサンプルは次のとおりです。参照用の列番号が付いています。

1234567890123456789012345678901234567890123456789012345678901234567890

MAIN                                  39.6198425 225.551453
COMM                                  43.793808  185.93161 MAIN
_C.SYS.INFO                         .112533569 .112533569 COMM
_C.SYS.INFO                         .087173462 .087173462 COMM
_C.MAIN                             61.414505  141.938095 COMM
_C.CON                             66.7147064 80.5235901 _C.MAIN
_C.SYS.DORETURN                   .032287598 .032287598 _C.CON

TRACKREPORTプログラム

Oracle OLAPのレポート機能を使用して、TRACKPRGによって作成されるテキスト・ファイルのタイミング・データからレポートを生成する場合、TRACKREPORTプログラムを使用できます。構文は次のとおりです。

TRACKREPORT textfile-name

textfile-name引数は、レポート作成の元となる、TRACKPRGにより作成されたテキスト・ファイルのファイル名です。TRACKREPORTは、FILEREAD文を使用してデータをOracle OLAP変数に読み込んだ後、Oracle OLAPのレポート機能を使用して次のサンプルのようなレポートを生成します。

Exclusive  Inclusive  Number of
Program name        cost       cost      calls
____________________ __________ __________ __________

COMM                 43.793808   185.93161          1
MAIN                 39.6198425 225.551453          1
_C.CON               66.7147064 80.5235901          1
_C.ENV.PUTOPTS       1.15296936 1.15296936          1
_C.ENV.XLATEIN       6.32765198 6.32765198          1
_C.MAIN               61.414505 141.938095          1
_C.SYS.DORETURN      .032287598 .032287598          1
_C.SYS.INFO          .289932251 .289932251          3
_C.SYS.NOF10         .038269043 .038269043          1
_CONNECT              5.3609314 6.16748047          1
_CONNNONE            .806549072 .806549072          1

TRACKPRGファイルからのデータをさらに処理する場合、モデルとしてTRACKREPORTプログラムを使用して独自のプログラムを作成できます。

対象外のサブプログラム

タイミング・データを収集しているプログラムがコールするすべてのサブプログラムについての個別のパフォーマンス・データが必要ない場合、プログラム全体で、対象外にするサブプログラムをコールする前にトラッキングをオフにし、対象とするプログラムをコールする前にトラッキングを再びオンにします。この操作は繰返し実行できます。ただし、TRACKPRGは対象外のサブプログラムを個別に追跡しないため、対象外のサブプログラムが消費する時間はプログラム全体の包括的な時間だけでなく、限定的な時間の合計にも割り当てられる点に注意してください。

非常に小さなプログラムでのTRACKPRGの使用

非常に小さいプログラムは、結果を正確に再現できないことがあります。CPUが処理を中断して他のタスクを実行すると、実行時間の合計に占めるその時間の割合が大きくなるからです。

TRACKPRGの測定単位

MONITORコマンドおよびTRACKPRGコマンドでは、実行時間を記録する単位としてミリ秒を使用します。実行時間には、I/Oの所要時間および次の文の待機時間は含まれません。

例

例10-154 TRCKPRGを使用したタイミング・データの収集

この例では、mybjtプログラムとそのプログラムがコールするすべてのプログラムのタイミング・データが、mybjttim.datというファイルに収集されます。

TRACKPRG ON
mybjt
TRACKPRG OFF
TRACKPRG FILE mybjttim.dat
TRACKPRG INIT
TRACKREPORT mybjttim.dat

例10-155 INITキーワードおよびTRACKREPORTの使用

この例では、トラッキングをオンにしてprog1の実行に関するタイミング・データを収集し、データをprog1.trkという名前のファイルに送信します。その後、INITキーワードを使用して既存のトラッキング・リストを廃棄し、2番目のプログラムのデータを収集してファイルに送信できるようにします。過程の全体で、トラッキングはオンのままです。最後に、トラッキングをオフにし、INITキーワードを使用してトラッキング・リストで使用されていたメモリーを解放した後、TRACKREPORTプログラムをコールして2つのファイルに格納されたデータから生成された2つのレポートを出力します。

TRACKPRG ON
prog1
TRACKPRG FILE prog1.trk
TRACKPRG INIT
prog2
TRACKPRG FILE prog2.trk
TRACKPRG OFF
TRACKPRG INIT
TRACKREPORT prog1.trk
TRACKREPORT prog2.trk

TRAP

TRAPコマンドをOLAP DMLプログラムの内部で使用すると、プログラムにエラーが発生した場合やユーザーがプログラムを中断した場合に、プログラムの実行がラベルに分岐されます。実行がトラップ・ラベルに分岐した場合、そのトラップ・ラベルは非アクティブ化される。

関連項目:
プログラムおよびモデル内の宣言エラーがOracle OLAPによってどのように処理されるかについては、「宣言エラー」を参照してください。

構文

TRAP {OFF|ON errorlabel [NOPRINT|PRINT]}

パラメータ

OFF

トラップ・ラベルを非アクティブ化します。一度にアクティブ化できるトラップ・ラベルは1つのみであるため、TRAP OFFを設定する場合には、errorlabelは指定しないでください。ラベルとOFFを組み合せて指定すると、エラーが発生します。

注意:
トラップ・ラベルがあるプログラムでエラーが発生すると、実行はラベルに分岐し、トラップは非アクティブ化されます。TRAP OFF文を明示的に実行する必要はありません。したがって、実行がラベルに分岐した後でエラーが発生した場合は、同じラベルに再度分岐されることはありません。

ON errorlabel

トラップ・ラベル(errorlabel)をアクティブ化します。TRAPがアクティブになっている場合、プログラム内でエラーが発生すると実行はerrorlabelに分岐します。

errorlabel

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

注意:
ONで指定するerrorlabelの後にはコロンを記述しないでください。ただし、プログラムの他の位置にある実際のラベルの後にはコロンを付けます。
errorlabelに対応する実際のトラップ・ラベルが同じプログラム内に存在しない場合は、エラーが発生して実行は停止します。

NOPRINT

PRINT

エラー・メッセージの出力を抑止するかどうかを指定します。NOPRINTを指定すると、エラー・メッセージは抑止されます。PRINT(デフォルト)を指定した場合は、エラー・メッセージが現行の出力ファイルに送られた後に実行がトラップ・ラベルに分岐します。OFFキーワードが指定されている場合、NOPRINTとPRINTを指定しても意味はなく、エラーが発生します。

例

例10-156 プログラムのエラー・トラップ

次のプログラムの抜粋では、TRAP文によって制御をラベルに移行できます。このラベルでは、オプションやディメンション・ステータスの設定値がプログラムの実行前に保持されていた値に戻り、エラーが通知されます。

PUSH month DECIMALS LSIZE PAGESIZE
TRAP ON haderror NOPRINT
LIMIT month TO LAST 1
...
POP month DECIMALS LSIZE PAGESIZE
RETURN

haderror:
POP month DECIMALS LSIZE PAGESIZE
SIGNAL ERRORNAME ERRORTEXT

例10-157 プログラム・エラー・メッセージの即時の表示

エラー・メッセージを即時に生成するには、ネストした各プログラムでTRAP文を使用しますが、NOPRINTキーワードは使用しないでください。エラーが発生すると、エラー・メッセージが即座に生成され、実行はトラップ・ラベルに分岐します。

トラップ・ラベルでは、内容を問わず必要なエラー処理コマンドを実行し、環境をリストアします。次に、PRGERRキーワードを指定したSIGNAL文を実行します。

SIGNAL PRGERR

PRGERRキーワードをSIGNAL文で使用すると、エラー・メッセージは生成されず、名前PRGERRがERRORNAMEに格納されません。SIGNAL文により、現行のプログラムの実行元であったプログラムに渡されるエラー状態が通知されます。コール側のプログラムにトラップ・ラベルがある場合、プログラムの実行はそのラベルに分岐します。

ネストしたプログラムの連鎖内の各プログラムがTRAPコマンドおよびSIGNALコマンドをこのように使用する場合は、エラー状態をプログラムの連鎖全体を経由して渡すことができます。各プログラムには、次のようなコマンドが記述されています。

TRAP ON error
...       "Body of program and normal exit commands
RETURN
error:
...       "Error-handling and exit commands
SIGNAL PRGERR

例10-158 連鎖の最後でのプログラム・エラー・メッセージの生成

ネストしたプログラムの連鎖の最後にエラー・メッセージを生成するには、NOPRINTキーワードを指定したTRAP文を使用します。ネストしたプログラムでエラーが発生すると、実行はトラップ・ラベルに分岐しますが、エラー・メッセージは生成されません。

トラップ・ラベルでは、内容を問わず必要なエラー処理コマンドを実行し、環境をリストアします。その後、次のSIGNAL文を実行します。

SIGNAL ERRORNAME ERRORTEXT

このSIGNAL文には、ERRORNAMEとERRORTEXTが指定されています。ERRORNAMEオプションには、元のエラーの名前が記録され、ERRORTEXTオプションには、元のエラーのエラー・メッセージが記録されています。コール側のプログラムにトラップ・ラベルがあると、プログラムの実行はこのラベルに分岐します。その結果、元のエラー名とエラー・テキストは、SIGNAL文によってコール側のプログラムに渡されます。

ネストしたプログラムの連鎖内の各プログラムがTRAPコマンドおよびSIGNALコマンドをこのように使用する場合、元のエラー・メッセージはプログラムの連鎖の最後に生成されます。各プログラムには、次のようなコマンドが記述されています。

TRAP ON error NOPRINT
...       "Body of program and normal exit commands
RETURN
error:
...       "Error-handling and exit commands
SIGNAL ERRORNAME ERRORTEXT

TRIGGERコマンド

TRIGGERコマンドは、作成済のプログラムをオブジェクトに関連付け、プログラムを自動で実行するオブジェクト・イベントを識別したり、オブジェクトとトリガー・プログラムの関連付けを解除したりするコマンドです。

トリガー・プログラムをオブジェクトに割り当てるには、オブジェクトは最新の定義のもの、または現行のセッション中に検討されたものにする必要があります。そうでない場合は、最初にCONSIDER文を使用し、現行の定義にする必要があります。

関連項目:
「トリガー・プログラム」およびTRIGGERファンクション

構文

TRIGGER {event-name [program-name] }... | {DELETE event-name}... | DELETE ALL

ここで、event-nameは次のいずれかです。

MAINTAIN

DELETE

PROPERTY

ASSIGN

BEFORE_UPDATE

AFTER_UPDATE

1つのTRIGGER文には同じキーワードを何回でも使用できますが、この場合、Oracle OLAPは最後に使用したキーワード以外はすべて無視します。詳細は、「同じキーワードの複数回の記述」を参照してください。

パラメータ

MAINTAIN

プログラムのトリガーをMaintainイベントにすることを指定します。Maintainイベントとは、MAINTAIN文の実行のことです。表8-19「MAINTAINイベントのサブイベント」に概要を示すように、Maintainイベントには、MAINTAINコマンドの主要キーワードに対応する複数のサブイベントがあります。Maintainイベントによってトリガーされるプログラムが実行される正確なタイミングは、プログラムをトリガーするMaintainサブイベントと、Maintainイベントの定義の対象となるオブジェクト・タイプによって決まります。

- ディメンションおよびコンポジットのMaintain AddイベントおよびMaintain Mergeイベントによってトリガーされるプログラムは、全体のMAINTAIN文が実行された後に実行されます。

- ディメンション・サロゲートのMaintain AddイベントおよびMaintain Mergeイベントによってトリガーされるプログラムは複数回、つまりそれぞれの値が追加またはマージされた後に1回ずつ実行されます。

- その他のMaintainサブイベントによってトリガーされるプログラムは、MAINTAIN文の実行前に実行されます。

DELETE

プログラムのトリガーをDeleteイベントにすることを指定します。Deleteイベントとは、オブジェクトに対するDELETE文のことです。Oracle OLAPでは、DELETE文によってオブジェクトが削除される直前に、指定のプログラムが実行されます。

PROPERTY

Oracle OLAPがPropertyイベントに応答して指定のプログラムを実行することを指定します。Propertyイベントとは、オブジェクト・プロパティの作成、変更または削除を目的とするPROPERTY文の実行のことです。Propertyイベントによってトリガーされたプログラムは、このプログラムをトリガーした文より先に実行されます。

ASSIGN

Oracle OLAPがAssignイベントに応答して指定のプログラムを実行することを指定します。Assignイベントは、SETによって値が変数、リレーション、ワークシート・オブジェクトまたは計算式に代入されると実行されます。SETによってトリガーされるプログラムは、イベントが定義されたオブジェクトにOracle OLAPが値を代入するたびに実行されます。このため、Assignイベントでトリガーされるプログラムは通常、代入文がオブジェクトをループ処理して値を代入するときに繰り返し実行されます。

UPDATE

マルチライタ・モードでアタッチされているアナリティック・ワークスペースで、ACQUIREを使用してオブジェクトを取得した場合は、このオブジェクトの更新後、指定のプログラムがOracle OLAPによってただちに実行されることを指定します。

ヒント:
アナリティック・ワークスペース全体を更新するときの処理を指定するには、TRIGGER_AFTER_UPDATEプログラムまたはTRIGGER_BEFORE_UPDATEプログラムを作成します。

program-name

トリガー・プログラムの名前。イベントに対してこの名前を省略した場合、そのイベントはアクションをトリガーしません。

DELETE event-name

指定したオブジェクト・イベントのトリガーを削除します。Oracle OLAPは、指定したオブジェクト・イベントとトリガー・プログラムとの関連付けを解除します。

DELETE ALL

指定したオブジェクトのトリガーをすべて削除します。Oracle OLAPは、オブジェクトのすべてのイベントとトリガー・プログラムとの関連付けを解除します。

使用上の注意

同じキーワードの複数回の記述

1つのTRIGGER文には、すべてのキーワードを使用できます。ただし、1つのTRIGGER文に同じキーワードを2回使用すると、最後に使用したキーワードのみが認識され、もう一方のキーワードは無視されます。

たとえば、次のTRIGGER文を記述した場合を考えます。

TRIGGER PROPERTY progname1 PROPERTY progname2 PROPERTY progname3

このTRIGGER文を実行すると、Oracle OLAPは、オブジェクトのプロパティが作成、変更または削除される直前にprogname3を実行します。つまり、Oracle OLAPはprogname1とprogname2のいずれも実行しません。

例

例10-159 トリガーの作成

アナリティック・ワークスペースにcityというTEXTディメンションが格納されており、cityに対してMAINTAIN文が実行されるか、cityのプロパティが作成または削除されると自動的に実行されるプログラムを作成するとします。これらのトリガーを作成するには、次の文を発行します。

"Define the trigger programs
DEFINE trigger_maintain_move_city PROGRAM BOOLEAN
DEFINE trigger_property_city PROGRAM BOOLEAN
"Associate the trigger programs to events for the city dimension
CONSIDER city
TRIGGER PROPERTY trigger_property_city
TRIGGER MAINTAIN trigger_maintain_move_city

例10-160 トリガーの説明

例10-159「トリガーの作成」で説明したように、cityに対してトリガーを作成した場合を考えます。後でトリガーの説明を参照するため、アナリティック・ワークスペースに対してDESCRIBE文を発行することはできません。そうではなく、FULLDSC文を発行する必要があります。

DEFINE CITY DIMENSION TEXT
TRIGGER MAINTAIN TRIGGER_MAINTAIN_MOVE_CITY -
PROPERTY TRIGGER_PROPERTY_CITY

DEFINE TRIGGER_MAINTAIN_MOVE_CITY PROGRAM BOOLEAN

DEFINE TRIGGER_PROPERTY_CITY PROGRAM BOOLEAN

例10-161 トリガーの削除

例10-159「トリガーの作成」で説明したトリガーを作成した場合を考えます。今度はcityのMAINTAINトリガーを削除します。このトリガーを削除するには、次の文を発行します。

CONSIDER city
TRIGGER DELETE MAINTAIN

FULLDSC文を発行したら、cityのMAINTAINトリガーは削除されているが、trigger_maintain_move_cityプログラムは残っていることを確認します。

DEFINE CITY DIMENSION TEXT
TRIGGER PROPERTY TRIGGER_PROPERTY_CITY

DEFINE TRIGGER_MAINTAIN_MOVE_CITY PROGRAM BOOLEAN

DEFINE TRIGGER_PROPERTY_CITY PROGRAM BOOLEAN

trigger_maintain_move_cityプログラムを実際に削除するには、次の文を発行する必要があります。

DELETE TRIGGER_MAINTAIN_MOVE_CITY

例10-162 MAINTAINトリガー・プログラム

アナリティック・ワークスペースに、次のような定義を持つディメンションがあるとします。

DEFINE CITY DIMENSION TEXT

cityに対してMaintainトリガーを作成する手順は、次のとおりです。

1. トリガー・プログラムをユーザー定義ファンクションとして定義します。このプログラムには、名前を自由に付けることができます。次の文では、trigger_maintain_cityという名前のプログラムが定義されます。

DEFINE trigger_maintain_city PROGRAM BOOLEAN

2. プログラムの内容を指定します。

PROGRAM
SHOW JOINCHARS ('calltype = ' CALLTYPE)
SHOW JOINCHARS ('triggering event = ' TRIGGER(EVENT))
SHOW JOINCHARS ('triggering subevent = ' TRIGGER(SUBEVENT))
RETURN TRUE
END

3. TRIGGER文を発行し、Maintainイベントが発生したら実行されるプログラムとして、トリガー・プログラムとcityディメンションを関連付けます。CONSIDER文を使用して、cityの定義を現行の定義にすることを忘れないでください。

CONSIDER city
TRIGGER MAINTAIN TRIGGER_MAINTAIN_CITY

アナリティック・ワークスペースの完全な詳細を参照するためにFULLDSC文を発行すると、cityの定義(そのMaintainトリガーを含む)やtrigger_maintain_cityプログラムを参照できます。

DEFINE CITY DIMENSION TEXT
TRIGGER MAINTAIN TRIGGER_MAINTAIN_CITY

DEFINE TRIGGER_MAINTAIN_CITY PROGRAM BOOLEAN
PROGRAM
SHOW JOINCHARS ('calltype = ' CALLTYPE)
SHOW JOINCHARS ('triggering event = ' TRIGGER(EVENT))
SHOW JOINCHARS ('triggering subevent = ' TRIGGER(SUBEVENT))
RETURN TRUE
END

次の文および出力に示すように、cityに対してMAINTAIN文を発行すると、trigger_maintain_cityプログラムが実行されます。

MAINTAIN city ADD 'Boston' 'Houston' 'Dallas'

calltype = TRIGGER
triggering event = MAINTAIN
triggering subevent = ADD

REPORT city

CITY
--------------
Boston
Houston
Dallas

MAINTAIN city MOVE 'Dallas' to 2

calltype = TRIGGER
triggering event = MAINTAIN
triggering subevent = MOVE

REPORT city

CITY
--------------
Boston
Dallas
Houston

例10-163 変数のASSIGNトリガー

アナリティック・ワークスペースに次の定義を持つオブジェクトが格納されているとします。

DEFINE geog DIMENSION TEXT
DEFINE sales VARIABLE DECIMAL <geog>
DEFINE percent_sales VARIABLE INTEGER <geog>

sales変数には、次の値が格納されています。

GEOG             SALES
-------------- ----------
North America        0.59
Europe               9.35
Asia                   NA

percent_sales変数は空です。

値をpercent_salesに代入したら、値に特殊な処理をするとします。この処理を自動化するには、次の手順に従って、percent_salesのAssignトリガー・プログラムを作成します。

1. 値をpercent_salesに代入するたびに実行されるトリガー・プログラムを作成します。

DEFINE TRIGGER_EQ PROGRAM BOOLEAN
PROGRAM
ARGUMENT datavalue WORKSHEET
show 'description of triggering object = '
FULLDESCRIBE &TRIGGER(NAME)
SHOW JOINCHARS ('calltype = ' CALLTYPE)
SHOW JOINCHARS ('triggering event = ' TRIGGER(EVENT))
SHOW JOINCHARS ('triggering subevent = ' TRIGGER(SUBEVENT))
SHOW JOINCHARS ('value being assigned = ' datavalue)
SHOW '  '
END

2. TRIGGER文を使用して、Assignトリガーをpercent_salesに追加します。最初にCONSIDER文を発行して、percent_sales変数の定義を現行の定義にすることを忘れないでください。

CONSIDER percent_sales
TRIGGER ASSIGN TRIGGER_EQ

3. 値をpercent_salesに代入します。

percent_sales = (sales/TOTAL(sales))*100

値をpercent_salesに代入すると、trigger_eqプログラムの実行がトリガーされ、次の出力行が生成されます。

description of triggering object =
DEFINE PERCENT_SALES VARIABLE INTEGER <GEOG>
TRIGGER ASSIGN TRIGGER_EQ
calltype = TRIGGER
triggering event = ASSIGN
triggering subevent =
value being assigned = 6

description of triggering object =
DEFINE PERCENT_SALES VARIABLE INTEGER <GEOG>
TRIGGER ASSIGN TRIGGER_EQ
calltype = TRIGGER
triggering event = ASSIGN
triggering subevent =
value being assigned = 94

description of triggering object =
DEFINE PERCENT_SALES VARIABLE INTEGER <GEOG>
TRIGGER ASSIGN TRIGGER_EQ
calltype = TRIGGER
triggering event = ASSIGN
triggering subevent =
value being assigned =

注意:
出力から、Oracle OLAPがtrigger_eqプログラムを3回コールしていることがわかります。そのたびに値がpercent_salesに代入されます。

4. salesおよびpercent_salesに対してREPORTコマンドを発行すると、計算の結果を参照できます。percent_sales変数には、大陸ごとの売上比率を表す値が格納されています。

GEOG                  SALES
-------------- --------------------
North America                  0.59
Europe                         9.35
Asia                             NA

GEOG              PERCENT_SALES
-------------- --------------------
North America                     6
Europe                           94
Asia                             NA

例10-164 ASSIGNトリガー・プログラムでの値の設定

アナリティック・ワークスペースに次のオブジェクトがあるとします。

DEFINE GEOGRAPHY DIMENSION TEXT WIDTH 12
LD Geography Dimension Values

DEFINE PRODUCT DIMENSION TEXT WIDTH 12
LD Product Dimension Values

DEFINE TIME DIMENSION TEXT WIDTH 12
LD Time Dimension Values

DEFINE CHANNEL DIMENSION TEXT WIDTH 12
LD Channel Dimension Values

DEFINE F.MARGIN FORMULA DECIMAL <CHANNEL GEOGRAPHY PRODUCT TIME>
LD Margin
EQ f.sales-f.costs

DEFINE F.COSTS VARIABLE SHORT <GEOGRAPHY PRODUCT CHANNEL TIME>
LD Costs

DEFINE F.SALES VARIABLE SHORT <GEOGRAPHY PRODUCT CHANNEL TIME>
LD Sales

f.costs、f.salesおよびf.marginのディメンションは、すべて同じです。

ここで、t.marginというプログラムを実行するf.marginにAssignトリガーを追加します。f.marginの定義は次の定義に変更されます。

DEFINE F.MARGIN FORMULA DECIMAL <CHANNEL GEOGRAPHY PRODUCT TIME>
LD Margin
TRIGGER ASSIGN T.MARGIN
EQ f.sales-f.costs

今度は、t.marginプログラムを実際に作成します。f.margin計算式に式を代入すると、このプログラム(計算式)は、この値を使用してf.costsおよびf.salesの新しい値を計算します。

DEFINE T.MARGIN PROGRAM
PROGRAM
ARG newVal DECIMAL       " The value passed to the program by the Assign trigger
VARIABLE t.valDiff DECIMAL     " Difference between newVal and old value
VARIABLE t.costInc DECIMAL     " Amount the difference makes to costs
"show the value of newVal
SHOW 'newVal = ' NONL
SHOW newVal
" Compute the difference between the current value and the new one
t.valDiff = newVal - f.margin
" Now increase costs proportional to their existing amounts
t.costInc = (newVal - f.margin) * (f.costs/f.sales)
" Adjust the values of sales and costs to get the new value
SET1 f.costs = f.costs + t.costInc

SET1 f.sales =  f.sales + t.valDiff + t.costInc

SHOW geography NONL
SHOW ' ' NONL
SHOW product NONL
SHOW ' ' NONL
SHOW channel NONL
SHOW ' ' NONL
SHOW time NONL
SHOW ' f.costs = 'NONL
SHOW f.costs NONL
SHOW ' f.sales = 'NONL
SHOW f.sales
END

ここで、次のLIMIT文を発行してデータのサブセットを指定し、REPORT文を発行してf.marginの値に関するレポートを作成するとします。

LIMIT t0.hierdim TO 'STANDARD'
LIMIT time TO t0.levelrel EQ 'L2'
LIMIT geography TO FIRST 1
LIMIT channel TO FIRST 1
LIMIT product TO FIRST 5
REPORT DOWN time ACROSS product: f.margin

GEOGRAPHY: WORLD
CHANNEL: TOTALCHANNEL
-----------------------F.MARGIN-----------------------
-----------------------PRODUCT------------------------
TIME           TOTALPROD   AUDIODIV  PORTAUDIO    PORTCD     PORTST
-------------- ---------- ---------- ---------- ---------- ----------
Q1.96          54,713,974 29,603,546  5,379,661  2,480,914  1,615,708
Q2.96          63,919,784 34,594,087  6,331,848  2,869,265  1,931,785
Q3.96          58,303,490 31,543,152  5,792,725  2,616,515  1,795,701
Q4.96          71,197,892 38,383,878  7,059,581  3,163,804  2,232,880
Q1.97          55,489,723 29,989,262  5,368,237  2,491,475  1,607,344
Q2.97          41,687,908 22,532,979  4,070,725  1,855,992  1,245,161

今度は、f.marginの値を10%ずつ増加する次の代入文を発行し、レポートを作成します。

f.margin = f.margin * 1.1

この代入文の実行により、t.marginというAssignトリガー・プログラムの実行がトリガーされます。このプログラムの出力は次のとおりです。

newVal = 60,185,371.40
WORLD TOTALPROD TOTALCHANNEL Q1.96 f.costs = 1,298,474.00 f.sales = 61,483,840.00
newVal = 32,563,900.67
WORLD AUDIODIV TOTALCHANNEL Q1.96 f.costs = 664,226.90 f.sales = 33,228,130.00
newVal = 5,917,626.67
WORLD PORTAUDIO TOTALCHANNEL Q1.96 f.costs = 97,976.04 f.sales = 6,015,603.00
newVal = 2,729,005.43
WORLD PORTCD TOTALCHANNEL Q1.96 f.costs = 34,301.53 f.sales = 2,763,307.00
newVal = 1,777,278.95
WORLD PORTST TOTALCHANNEL Q1.96 f.costs = 25,160.72 f.sales = 1,802,440.00
newVal = 70,311,762.13
WORLD TOTALPROD TOTALCHANNEL Q2.96 f.costs = 1,504,051.00 f.sales = 71,815,820.00
newVal = 38,053,495.70
WORLD AUDIODIV TOTALCHANNEL Q2.96 f.costs = 768,788.10 f.sales = 38,822,280.00
newVal = 6,965,032.86
WORLD PORTAUDIO TOTALCHANNEL Q2.96 f.costs = 114,558.20 f.sales = 7,079,591.00
newVal = 3,156,191.20
WORLD PORTCD TOTALCHANNEL Q2.96 f.costs = 39,256.88 f.sales = 3,195,448.00
newVal = 2,124,963.02
WORLD PORTST TOTALCHANNEL Q2.96 f.costs = 29,780.54 f.sales = 2,154,744.00
newVal = 64,133,838.86
WORLD TOTALPROD TOTALCHANNEL Q3.96 f.costs = 1,350,733.00 f.sales = 65,484,570.00
newVal = 34,697,467.06
WORLD AUDIODIV TOTALCHANNEL Q3.96 f.costs = 691,887.10 f.sales = 35,389,360.00
newVal = 6,371,997.63
WORLD PORTAUDIO TOTALCHANNEL Q3.96 f.costs = 103,203.70 f.sales = 6,475,202.00
newVal = 2,878,166.40
WORLD PORTCD TOTALCHANNEL Q3.96 f.costs = 35,358.18 f.sales = 2,913,525.00
newVal = 1,975,270.68
WORLD PORTST TOTALCHANNEL Q3.96 f.costs = 27,339.77 f.sales = 2,002,611.00
newVal = 78,317,681.06
WORLD TOTALPROD TOTALCHANNEL Q4.96 f.costs = 1,618,915.00 f.sales = 79,936,590.00
newVal = 42,222,265.94
WORLD AUDIODIV TOTALCHANNEL Q4.96 f.costs = 826,923.40 f.sales = 43,049,190.00
newVal = 7,765,539.34
WORLD PORTAUDIO TOTALCHANNEL Q4.96 f.costs = 123,269.50 f.sales = 7,888,809.00
newVal = 3,480,184.35
WORLD PORTCD TOTALCHANNEL Q4.96 f.costs = 41,998.90 f.sales = 3,522,183.00
newVal = 2,456,168.00
WORLD PORTST TOTALCHANNEL Q4.96 f.costs = 33,357.19 f.sales = 2,489,525.00
newVal = 61,038,695.03
WORLD TOTALPROD TOTALCHANNEL Q1.97 f.costs = 1,423,963.00 f.sales = 62,462,660.00
newVal = 32,988,187.65
WORLD AUDIODIV TOTALCHANNEL Q1.97 f.costs = 679,477.80 f.sales = 33,667,660.00
newVal = 5,905,060.56
WORLD PORTAUDIO TOTALCHANNEL Q1.97 f.costs = 158,854.40 f.sales = 6,063,915.00
newVal = 2,740,622.56
WORLD PORTCD TOTALCHANNEL Q1.97 f.costs = 53,144.41 f.sales = 2,793,767.00
newVal = 1,768,078.14
WORLD PORTST TOTALCHANNEL Q1.97 f.costs = 40,784.62 f.sales = 1,808,863.00
newVal = 45,856,698.46
WORLD TOTALPROD TOTALCHANNEL Q2.97 f.costs = 1,070,465.00 f.sales = 46,927,160.00
newVal = 24,786,276.35
WORLD AUDIODIV TOTALCHANNEL Q2.97 f.costs = 512,435.60 f.sales = 25,298,710.00
newVal = 4,477,797.64
WORLD PORTAUDIO TOTALCHANNEL Q2.97 f.costs = 118,791.70 f.sales = 4,596,590.00
newVal = 2,041,591.56
WORLD PORTCD TOTALCHANNEL Q2.97 f.costs = 39,287.77 f.sales = 2,080,879.00
newVal = 1,369,677.57
WORLD PORTST TOTALCHANNEL Q2.97 f.costs = 30,038.08 f.sales = 1,399,716.00

例10-165 計算式に関するASSIGNトリガー

Oracle OLAPが値の計算式への代入をどのように処理するかは、Assignトリガーが計算式の定義の一部として計算式に存在するかどうかによって異なります。

アナリティック・ワークスペースに次の定義と値を持つオブジェクトが格納されているとします。

DEFINE geog.d DIMENSION TEXT
DEFINE time.d DIMENSION TEXT
DEFINE sales VARIABLE DECIMAL <time.d geog.d>
DEFINE f_modified_sales FORMULA DECIMAL <time.d geog.d>
EQ sales+20

salesのレポートでは、ベース値が表示されます。

-------------------SALES-------------------
------------------TIME.D-------------------
GEOG.D          Jan2004    Feb2004    Mar2004      2004
-------------- ---------- ---------- ---------- ----------
Boston               4.00       4.66       5.91       NA
Medford              4.37       5.80       4.45       NA
San Diego            4.97       5.95       4.75       NA
Sunnydale            5.85       5.26       4.08       NA

f_modified_sales計算式のレポートでは、この計算式によって計算された値が含まれる次のレポートが表示されます。

-------------F_MODIFIED_SALES--------------
------------------TIME.D-------------------
GEOG.D          Jan2004    Feb2004    Mar2004      2004
-------------- ---------- ---------- ---------- ----------
Boston              24.00      24.66      25.91         NA
Medford             24.37      25.80      24.45         NA
San Diego           24.97      25.95      24.75         NA
Sunnydale           25.85      25.26      24.08         NA

f_modified_sales計算式には、現在、これに関するAssignトリガーは存在しません。したがって、次のコードに示すように、f_modified_salesに値を代入しようとすると、エラーが発生します。

f_modified_sales = 3
ORA-34142: You cannot assign values to a FORMULA.

f_modified_salesのAssignトリガーを作成する手順は、次のとおりです。

1. トリガー・プログラムを定義します。

DEFINE TRIGGER_ASSIGN_MODIFIED_SALES PROGRAM
PROGRAM
ARGUMENT datavalue NUMBER
SHOW 'description of triggering object = '
DESCRIBE &TRIGGER(NAME)
SHOW JOINCHARS ('calltype = ' CALLTYPE)
SHOW JOINCHARS ('triggering event = ' TRIGGER(EVENT))
SHOW JOINCHARS ('value being assigned = ' datavalue)
SHOW '  '
END

2. 次の文を使用して、Assignトリガーを計算式の定義に追加します。

CONSIDER f_modified_sales
TRIGGER ASSIGN trigger_assign_modified_sales

FULLDSC f_modified_sales文を発行すると、f_modified_salesの新しい定義がすべて表示されます。

DEFINE F_MODIFIED_SALES FORMULA DECIMAL <TIME.D GEOG.D>
TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES
EQ sales+20

3. 次の文を発行してf_modified_salesに値を代入しても、今度はエラーが発生しません。かわりに、trigger_assign_modified_salesトリガー・プログラムが、salesのディメンション値ごとに1回ずつ、計16回実行されます。

f_modified_sales = 3

description of triggering object =
DEFINE F_MODIFIED_SALES FORMULA DECIMAL <TIME.D GEOG.D>
TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES
EQ sales+20
calltype = TRIGGER
triggering event = ASSIGN
value being assigned = 3.00
description of triggering object =
...
description of triggering object =
...
description of triggering object =
...
description of triggering object =
...
description of triggering object =
...
description of triggering object =
...
description of triggering object =
...
description of triggering object =
...
description of triggering object =
...
description of triggering object =
...
description of triggering object =
...
description of triggering object =
...
description of triggering object =
...
description of triggering object =
...
description of triggering object =
...

4. ただし、次に示すように、f_modified_salesについてREPORT文を発行すると、計算式を単純に実行することによって計算される値は変更されていないことがわかります。

report f_modified_sales

-------------F_MODIFIED_SALES--------------
------------------TIME.D-------------------
GEOG.D          Jan2004    Feb2004    Mar2004      2004
-------------- ---------- ---------- ---------- ----------
Boston              24.00      24.66      25.91         NA
Medford             24.37      25.80      24.45         NA
San Diego           24.97      25.95      24.75         NA
Sunnydale           25.85      25.26      24.08         NA

TRIGGERASSIGN

オブジェクトのAssignイベントによってトリガーされたプログラムの内部で、トリガー・オブジェクトに値を代入します。

注意:
TRIGGERASSIGNを実行するには、USETRIGGERSオプションをそのデフォルト値であるTRUEに設定する必要があります。

関連項目:
「トリガー・プログラム」

データ型

Oracle OLAPによる値の代入先となるオブジェクトのデータ型。

構文

TRIGGERASSIGN value

パラメータ

value

代入する値。

例

例10-166 Assignトリガーを使用した代替値の代入

アナリティック・ワークスペースに、次のような記述を持つオブジェクトがあるとします。

DEFINE GEOG.D DIMENSION TEXT
DEFINE TIME.D DIMENSION TEXT
DEFINE TIME.PARENTREL RELATION TIME.D <TIME.D>
DEFINE SALES VARIABLE DECIMAL <GEOG.D TIME.D>
DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D>

次のレポートに示す値をsales変数に移入したが、modified_sales変数にはまだ移入していないとします。

-----------------------SALES-----------------------
----------------------GEOG.D-----------------------
TIME.D          Boston      Medford     San Diego    Sunnydale
------------ ------------ ------------ ------------ ------------
Jan76            1,000.00     2,000.00     3,000.00     4,000.00
Feb76            2,000.00     4,000.00     6,000.00     8,000.00
Mar76            3,000.00     6,000.00     9,000.00    12,000.00
76Q1                   NA           NA           NA           NA

ここで、様々な式を使用して、modified_sales変数に値を代入しますが、値は1,000以下にならないようにします。この処理を確実に実行するには、次の手順に従います。

1. 1000以下の値という条件を調べる次のプログラムを作成します。

DEFINE TRIGGER_ASSIGN_MODIFIED_SALES PROGRAM
PROGRAM
ARGUMENT datavalue DECIMAL
IF datavalue LE 1000
THEN TRIGGERASSIGN 1000
show 'description of triggering object = '
DESCRIBE &TRIGGER(NAME)
SHOW JOINCHARS ('calltype = ' CALLTYPE)
SHOW JOINCHARS ('triggering event = ' TRIGGER(EVENT))
SHOW JOINCHARS ('triggering subevent = ' TRIGGER(SUBEVENT))
SHOW JOINCHARS ('value passed to program = ' datavalue)
SHOW '  '
END

2. 次の文を発行して、Assignトリガーをmodified_sales変数に追加します。trigger_assign_modified_salesプログラムはトリガー・プログラムです。

CONSIDER modified_sales
TRIGGER ASSIGN trigger_assign_modified_sales

3. 値をmodified_salesに代入します。

modified_sales = sales - 1000

4. この文は、Oracle OLAPによって代入された値ごとにtrigger_assign_modified_salesプログラムの実行をトリガーします。

description of triggering object =
DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D>
TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES
calltype = TRIGGER
triggering event = ASSIGN
triggering subevent =
value passed to program = 0.00

description of triggering object =
DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D>
TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES
calltype = TRIGGER
triggering event = ASSIGN
triggering subevent =
value passed to program = 1,000.00

description of triggering object =
DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D>
TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES
calltype = TRIGGER
triggering event = ASSIGN
triggering subevent =
value passed to program = 2,000.00

description of triggering object =
DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D>
TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES
calltype = TRIGGER
triggering event = ASSIGN
triggering subevent =
value passed to program = 3,000.00

description of triggering object =
DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D>
TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES
calltype = TRIGGER
triggering event = ASSIGN
triggering subevent =
value passed to program = 1,000.00

description of triggering object =
DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D>
TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES
calltype = TRIGGER
triggering event = ASSIGN
triggering subevent =
value passed to program = 3,000.00

description of triggering object =
DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D>
TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES
calltype = TRIGGER
triggering event = ASSIGN
triggering subevent =
value passed to program = 5,000.00

description of triggering object =
DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D>
TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES
calltype = TRIGGER
triggering event = ASSIGN
triggering subevent =
value passed to program = 7,000.00

description of triggering object =
DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D>
TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES
calltype = TRIGGER
triggering event = ASSIGN
triggering subevent =
value passed to program = 2,000.00

description of triggering object =
DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D>
TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES
calltype = TRIGGER
triggering event = ASSIGN
triggering subevent =
value passed to program = 5,000.00

description of triggering object =
DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D>
TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES
calltype = TRIGGER
triggering event = ASSIGN
triggering subevent =
value passed to program = 8,000.00

description of triggering object =
DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D>
TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES
calltype = TRIGGER
triggering event = ASSIGN
triggering subevent =
value passed to program = 11,000.00

description of triggering object =
DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D>
TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES
calltype = TRIGGER
triggering event = ASSIGN
triggering subevent =
value passed to program =

description of triggering object =
DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D>
TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES
calltype = TRIGGER
triggering event = ASSIGN
triggering subevent =
value passed to program =

description of triggering object =
DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D>
TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES
calltype = TRIGGER
triggering event = ASSIGN
triggering subevent =
value passed to program =

description of triggering object =
DEFINE MODIFIED_SALES VARIABLE DECIMAL <GEOG.D TIME.D>
TRIGGER ASSIGN TRIGGER_ASSIGN_MODIFIED_SALES
calltype = TRIGGER
triggering event = ASSIGN
triggering subevent =
value passed to program =

5. modified_salesの次のレポートでは、すべての値が1,000以上になっています。

------------------MODIFIED_SALES-------------------
----------------------GEOG.D-----------------------
TIME.D          Boston      Medford     San Diego    Sunnydale
------------ ------------ ------------ ------------ ------------
Jan76            1,000.00     1,000.00     2,000.00     3,000.00
Feb76            1,000.00     3,000.00     5,000.00     7,000.00
Mar76            2,000.00     5,000.00     8,000.00    11,000.00
76Q1                   NA           NA           NA           NA

UNHIDE

UNHIDEコマンドは、HIDE文によって非表示になっていたプログラムのテキストを表示するように設定するコマンドです。UNHIDEを使用するには、プログラムを非表示にしたときに、HIDE文とともに使用したシード式がわかっている必要があります。

注意:
HIDEコマンドは、単純なエンコードを実行します。セキュアな暗号化の使用方法や、その他のOracleのセキュリティ機能については、『Oracle Databaseセキュリティ・ガイド』を参照してください。

構文

UNHIDE prog-name seed-exp

パラメータ

prog-name

テキストがHIDE文によって非表示になっているプログラムの名前。プログラム名は引用符で囲まないでください。

seed-exp

「prog-name」が非表示になっていたときにHIDE文に使用した1行のテキスト式。シード式は、HIDE文で使用した式と1バイト単位で同じ値にする必要があります。さらに、シード式は大文字と小文字を区別するため、大文字と小文字は慎重に指定してください。

使用上の注意

シード式を忘れた場合

UNHIDE文をプログラムに対して使用するときにシード式を忘れてしまった場合は、Oracleサポート・サービスに連絡して、問題の解決に役立ててください。連絡する前にOLAP WorksheetからOracle OLAPに接続し、そこで非表示のプログラムが格納されているアナリティック・ワークスペースをアタッチしてください。

例

例10-167 プログラム・テキストの再表示

次の例では、sales_rptというプログラムのテキストを表示するように設定します。シード式crystalは、このプログラムをHIDEを使用して非表示にしたときに使用したものです。

UNHIDE sales_rpt 'crystal'

UPDATE

UPDATEコマンドは、アナリティック・ワークスペースの変更内容を、一時領域からワークスペースが格納されているデータベース表に移動するコマンドです。通常、UPDATE文は、アナリティック・ワークスペースでの変更作業が終了してから使用しますが、進捗に応じて定期的に指定することもできます。

変更内容は、Oracle OLAPまたはSQLのどちらかでCOMMIT文を実行するまで保存されません。UPDATEおよびCOMMITコマンドを使用しなかった場合、セッション中に行ったアナリティック・ワークスペースの変更内容は、Oracleセッションの終了時に廃棄されます。

注意:
変更がコミットされていない場合でも、その変更を維持したままでアナリティック・ワークスペースをデタッチおよび再アタッチできます。これは、デタッチおよび再アタッチが単一のデータベース・セッション内で行われるためです。

構文

UPDATE [MULTI [acquired_objects]] [analytic_workspaces]

パラメータ

パラメータを指定しなかった場合、このコマンドによって更新されるのは、読取り/書込み非排他モードおよび読取り/書込み排他モードでアタッチされているすべてのアナリティック・ワークスペース、マルチライタ・モードでアタッチされているすべてのアナリティック・ワークスペースに存在するすべての取得したオブジェクト(つまり、取得したすべての変数、リレーション、値セットおよびディメンション)です。

acquired_objects

マルチライタ・モードでアタッチされているアナリティック・ワークスペースに存在する、取得済オブジェクトの名前をカンマで区切ったリスト。これらのオブジェクトは、ACQUIRE文を使用して取得した任意のオブジェクトです。

パーティション変数の個々のパーティションを指定するには、次の構文を使用します。

variable_name (PARTITION partition_name [, PARTITION partition_name ]...)

重要:
取得して保持したディメンションによってオブジェクトをディメンション化した場合は、このディメンションを最初に更新しないかぎり、オブジェクトを更新することはできません。

workspaces

読取り/書込みモードまたはマルチライタ・モードでアタッチした1つ以上のワークスペースの、カンマで区切られた名前のリスト。

使用上の注意

自動によるCOMMIT

ユーザーの多くは、SQL*PlusまたはOLAP Worksheetを使用してDML文を実行します。これらのツールはどちらも、セッションの終了時に自動でCOMMIT文を実行します。

UPDATE実行時におけるプログラム実行のトリガー

TRIGGERコマンドを使用すると、UPDATE文を、OLAP DMLプログラムを自動的に実行するイベントにすることができます。詳細は、「トリガー・プログラム」を参照してください。

共有ワークスペース

共有ワークスペースをアタッチし、別のユーザーが読取り/書込みアクセス権を保持している場合、別のユーザーのUPDATEおよびCOMMITコマンドは、使用中のワークスペース・ビューには影響しません。データのビューは、ワークスペースをアタッチした時点と同じままです。別のユーザーが行った変更にアクセスするには、ワークスペースをいったんデタッチしてから再アタッチします。

ROLLBACK文の影響

OLAP DMLには、SQL ROLLBACK文を発行するための手段が用意されていませんが、セッション中にOracle OLAPの外部から(たとえば、PL/SQLを介して)これを実行できます。セッション中にROLLBACK文を実行すると、Oracle OLAPは、アタッチされたワークスペースに未コミット状態の更新内容があるかどうかを確認します。

- 未コミット状態の更新内容があると(つまり、変更してUPDATE文を実行したが、その後にCOMMIT文を実行していない場合)、Oracle OLAPは変更内容を廃棄してワークスペースをデタッチします。

- 未コミット状態の更新内容がない場合、Oracle OLAPはROLLBACK文に応答した処理を行いません。そのため、最後に発行したCOMMIT文以降にUPDATE文を発行していない場合、Oracle OLAPでは何の処理も実行されず、セッション中の変更内容はすべてワークスペースに保持されます。

セーブポイントにロールバックし、このセーブポイント以降に発生した未コミット状態の更新内容がある場合、Oracle OLAPはこれらの更新内容を廃棄して、ワークスペースをデタッチします。セーブポイント以前に発生した未コミット状態の更新内容はワークスペース内に保持されているため、同じセッションでワークスペースを再アタッチすると、これらの更新内容を参照できます。

例

例10-168 アナリティック・ワークスペースの変更内容の保存

次の文では、現行のワークスペース・セッションの変更内容を、ワークスペースが格納されているデータベース表に移動します。

UPDATE

変更内容をデータベースに保存するには、UPDATE文の後にCOMMIT文を発行する必要があります。

UPDATE_ATTRIBUTE_VALUE

UPDATE_ATTRIBUTE_VALUEプログラムを実行すると、OLAPキューブ・ディメンション・メンバーの属性が変更されます。

このプログラムは、次のような属性を更新する場合に特に役立ちます。

- 基礎となるリレーションまたは索引付けされたディメンションを持つ属性では、指定する必要があるのはディメンション・メンバーと値のみです。索引付けされたディメンションの管理は、リレーション内での値の設定とともに行われます。

- 複数のレベルに適用される属性。すべてのレベルに適用される属性に対して属性値を設定した場合、その値はコンパイル時に下位レベルに広がります。

注意:
キューブ・ディメンションまたはそのキューブ・ディメンションを含むキューブに対してマテリアライズド・ビューが存在する場合は、キューブ・ディメンションの変更に、このプログラムを使用できません。

関連項目:
「キューブ対応のOLAP DML文」

構文

CALL UPDATE_ATTRIBUTE_MEMBER(dim_member_id, attribute_name, attribute_value -

[, auto_compile ])

パラメータ

CALL

UPDATE_ATTRIBUTE_VALUEは引数を持つOLAP DMLプログラムであるため、OLAP DML CALL文を使用して起動します。

dim_member_id

属性を変更するキューブ・ディメンション・メンバーの値を示すテキスト式。

logical_dim

dim_member_idがメンバーとなっているキューブ・ディメンションのOracleデータ・ディクショナリ名を示すテキスト式。

関連項目:
「OLAP論理オブジェクトの名前の値を指定する場合のガイドライン」

attribute_name

属性のOracleデータ・ディクショナリ名を示すテキスト式。

attribute_value

attribute_nameの値を指定するテキスト式。

auto_compile

関連するアナリティック・ワークスペース・オブジェクトを即時更新するかどうかを指定するブール式。

デフォルト値はTRUEです。この値を指定すると、アナリティック・ワークスペースの変更内容のうち、キューブ・ディメンション・メンバーの属性の更新に必要のあるものはすべて即座に更新されます。

パフォーマンス上の理由から、FALSEはコンパイルの実行前に大量の変更を行う場合のみ指定してください。この場合、アナリティック・ワークスペース・オブジェクトの値が有効になる前に、キューブ・ディメンションを明示的にコンパイルする必要があります(「キューブ・ディメンションの明示的なコンパイル」を参照)。

注意:
この引数に対して指定した値に関係なく、ディメンション・メンバーの属性は常に即時更新されます。これは、コンパイル中にエラーが通知された場合でも同様です。

例

例10-169 OLAPキューブ・ディメンションの属性の更新

この例では、OLAP DMLで提供されているUPDATE_ATTRIBUTE_VALUEプログラムを使用し、L1-2およびL1-2の子孫に対してmy_timeキューブ・ディメンションの属性を更新します。OLAP DMLで提供されているUPDATE_ATTRIBUTE_VALUEプログラムへのコールは、ユーザー作成のADD_L1_2_DATEというOLAP DMLプログラム内にあります。

1. 次のPL/SQL文を発行して、ADD_L1_2_DATEというユーザー作成のOLAP DMLプログラムを実行し、L1_2およびその子孫のtime属性値を設定します

exec dbms_aw.execute('call my_util_aw!add_l1_2_dates');

ユーザー作成のOLAP DMLプログラムADD_L1_2_DATEの定義を次に示します。OLAP DMLから提供されるUPDATE_ATTRIBUTE_VALUEプログラムへのコールに注意してください。

DEFINE ADD_L1_2_DATES PROGRAM
PROGRAM
VARIABLE _aw_dim       text
VARIABLE _start_date   text
VARIABLE _timespan     text

_aw_dim = OBJORG(DIM 'my_time')
_start_date = OBJORG(ATTRIBUTE 'my_time' 'start_date')
_timespan = OBJORG(ATTRIBUTE 'MY_TIME' 'timespan')

" Updates the time attribute of L1_2, L2_3, L3_6, but does not compile
CALL UPDATE_ATTRIBUTE_VALUE('L1_2', 'my_time', 'start_date', -
&_start_date(&_aw_dim 'L1_1')+365, NO)
CALL UPDATE_ATTRIBUTE_VALUE('L1_2', 'my_time', 'timespan', -
&_timespan(&_aw_dim 'L1_1'), NO)

CALL UPDATE_ATTRIBUTE_VALUE('L2_3', 'my_time', 'start_date', -
&_start_date(&_aw_dim 'L1_2'), NO)
CALL UPDATE_ATTRIBUTE_VALUE('L2_3', 'my_time', 'timespan', -
&_timespan(&_aw_dim 'L2_1'), NO)

CALL UPDATE_ATTRIBUTE_VALUE('L3_6', 'my_time', 'start_date', -
&_start_date(&_aw_dim 'L1_2'), NO)
CALL UPDATE_ATTRIBUTE_VALUE('L3_6', 'my_time', 'timespan', -
&_timespan(&_aw_dim 'L3_1'), NO)
UPDATE
COMMIT
END

2. 次のSQL文を発行して、my_timeキューブ・ディメンションの属性を確認します。

select dim_key||'  '||start_date||'  '||lpad(timespan, 3)
from my_time_view
order by dim_key asc;

DIM_KEY||''||START_DATE||''||LPAD(TIMESPAN,3)
----------------------------------------------------------------------------
L1_0  01-JAN-09  365
L1_1  01-JAN-10  365
L1_2  01-JAN-11  365
L2_1  01-JAN-10   90
L2_2  01-APR-10   61
L2_3  01-JAN-11   90
L3_1  01-JAN-10   31
L3_2  01-FEB-10   28
L3_3  01-MAR-10   31
L3_4  01-APR-10   30
L3_5  01-MAY-10   31
L3_6  01-JAN-11   31

12 rows selected.

3. 次のSQL文を発行して、my_timeキューブ・ディメンションのコンパイル前のsalesおよびmoving_salesメジャーの値に関するレポートを生成します。メジャーの計算ではmy_timeキューブ・ディメンションの新しい属性が計算対象とならないことに注意します。

select my_time||'  '||lpad(sales, 2)||'  '||lpad(moving_sales, 2)
from my_cube_view
order by my_time asc;

MY_TIME||''||LPAD(SALES,2)||''||LPAD(MOVING_SALES,2)
--------------------------------------------------------------------
L1_0  24  27
L1_1  14  38
L1_2   3   3
L2_1   2   5
L2_2  12  14
L2_3   3   3
L3_1   1   4
L3_2   1   2
L3_3  10  11
L3_4   1  11
L3_5   1   2
L3_6   3   3

12 rows selected.

4. 次のSQL文を発行し、my_timeキューブ・ディメンションをコンパイルします。

exec dbms_cube.build('MY_TIME USING (COMPILE)');

5. 次のSQL文を発行して、my_timeキューブ・ディメンションのコンパイル後のsalesおよびmoving_salesメジャーの値に関するレポートを生成します。今回のメジャーの計算ではmy_timeキューブ・ディメンションの新しい属性が計算対象となることに注意します。

select my_time||'  '||lpad(sales, 2)||'  '||lpad(moving_sales, 2)
from my_cube_view
order by my_time asc;

MY_TIME||''||LPAD(SALES,2)||''||LPAD(MOVING_SALES,2)
--------------------------------------------------------------------
L1_0  24  24
L1_1  14  38
L1_2   3  17
L2_1   2   2
L2_2  12  14
L2_3   3  15
L3_1   1   1
L3_2   1   2
L3_3  10  11
L3_4   1  11
L3_5   1   2
L3_6   3   4

12 rows selected.

UPDATE_DIMENSION_MEMBER

UPDATE_DIMENSION_MEMBERプログラムを実行すると、1つ以上の階層でOLAPキューブ・ディメンション・メンバーのレベルと親が設定されます。

注意:
キューブ・ディメンションまたはそのキューブ・ディメンションを含むキューブに対してマテリアライズド・ビューが存在する場合は、キューブ・ディメンションの変更に、このプログラムを使用できません。

関連項目:
「キューブ対応のOLAP DML文」

構文

CALL UPDATE_DIMENSION_MEMBER(member_id, logical_dim, hier_list, level_name, -

parent-member_id [, auto_compile ])

パラメータ

CALL

UPDATE_DIMENSION_MEMBERは引数を持つOLAP DMLプログラムであるため、OLAP DML CALL文を使用して起動します。

member_id

レベルと親の情報を設定するメンバーを示すテキスト式。

logical_dim

変更するキューブ・ディメンションのOracleデータ・ディクショナリ名を示すテキスト式。

関連項目:
「OLAP論理オブジェクトの名前の値を指定する場合のガイドライン」

hier_list

ディメンション・メンバーのレベルと親を設定する全階層のOracleデータ・ディクショナリ名で構成された複数行のテキスト式。1行ごとに1つの階層を指定します。

キューブ・ディメンションの全階層でメンバーの情報を指定する場合は、NAを指定します。

level_name

レベル階層の場合に、プログラムによってキューブ・ディメンションのメンバーが設定される階層レベルを指定するテキスト値。レベル階層の場合、level_nameに指定する値は、次の条件を満たしている必要があります。

- parent_member_idに指定する値と互換性があること。

- 既存のキューブ・ディメンション・メンバーと同じ階層レベルであること(キューブ・ディメンション・メンバーはすべての階層で同じレベルに追加する必要があります)。

メンバーが値階層に含まれている場合(つまりレベルが存在しない場合)は、NAを指定します。

関連項目:
「キューブ対応のOLAP DML文で無効なレベル名」

parent_member_id

キューブ・ディメンションの階層に追加するディメンション・メンバーの親メンバーの値を指定するテキスト式。ディメンション・メンバーを最上位メンバーとして追加する場合は、NAを指定します。

auto_compile

変更をすぐに有効にするかどうかを指定するブール式。デフォルト値であるTRUEを指定すると、アナリティック・ワークスペースの変更内容のうち、キューブ・ディメンション・メンバーに追加する必要のあるものはすべて即座に更新されます。パフォーマンス上の理由から、FALSEはコンパイルの実行前に大量の変更を行う場合のみ指定してください。この場合、アナリティック・ワークスペース・オブジェクトの値が有効になる前(たとえば、属性値が下位レベルに広がる前や時間ディメンションの値セットを更新する前など)に、キューブ・ディメンションを明示的にコンパイルする必要があります(「キューブ・ディメンションの明示的なコンパイル」を参照)。

例

例10-170 OLAPキューブ・ディメンションの階層の変更

my_timeという階層キューブ・ディメンションがあり、その階層を変更するために値L3_2を最上位レベルからL2_2の子になるレベルに移動するとします。

1. 次のSQL文を実行して、移動前のmy_timeキューブ・ディメンションの値についてレポートを生成します。

select dim_key||'  '||level_name||'  '||parent
from my_time_lvl_hier_view
order by dim_key asc;

DIM_KEY||''||LEVEL_NAME||''||PARENT
--------------------------------------------------------------------------------
L1_0  L1
L1_1  L1
L2_1  L2  L1_1
L2_2  L2  L1_1
L3_1  L3  L2_1
L3_2  L3  L2_1
L3_3  L3  L2_1
L3_4  L3  L2_2
L3_5  L3  L2_2

9 rows selected.

2. 次のPL/SQL文を発行し、ユーザー作成のMOVE_L3_3プログラムをコールして移動を実行します。

exec dbms_aw.execute('call my_util_aw!move_l3_3');

次に示すMOVE_L3_3プログラムの定義から確認できるように、実際の移動はOLAP DMLから提供されるPDATE_DIMENSION_MEMBERプログラムをコールすることで実行されます。

DEFINE MOVE_L3_3 PROGRAM
PROGRAM

" Change the parent of L3_2 to L2_2
CALL UPDATE_DIMENSION_MEMBER('L3_3', 'my_time', NA, 'L3', 'L2_2')
UPDATE
C0MMIT
END

3. 次の文を発行して、移動後のmy_timeディメンションの値についてレポートを生成します。

select dim_key||'  '||level_name||'  '||parent
from my_time_lvl_hier_view
order by dim_key asc;

DIM_KEY||''||LEVEL_NAME||''||PARENT
--------------------------------------------------------------------------------
L1_0  L1
L1_1  L1
L2_1  L2  L1_1
L2_2  L2  L1_1
L3_1  L3  L2_1
L3_2  L3  L2_1
L3_3  L3  L2_2
L3_4  L3  L2_2
L3_5  L3  L2_2

9 rows selected.

4. 次の文を発行し、my_timeの新しい階層でmy_cubeを解決します。

exec dbms_cube.build(script => 'MY_CUBE USING (SOLVE)', add_dimensions => false);

5. my_timeの階層が新しくなったので、次の文を発行して、salesおよびmoving_sales(my_cubeのメジャー)の値に関するレポートを生成します。

select my_time||'  '||lpad(sales, 2)||'  '||lpad(moving_sales, 2)
from my_cube_view
order by my_time asc;

MY_TIME||''||LPAD(SALES,2)||''||LPAD(MOVING_SALES,2)
--------------------------------------------------------------------
L1_0  24  24
L1_1  14  38
L2_1   2   2
L2_2  12  14
L3_1   1   1
L3_2   1   2
L3_3  10  11
L3_4   1  11
L3_5   1   2

9 rows selected.

VARIABLE

OLAP DMLプログラムの内部では、VARIABLEコマンドは、OLAP DMLプログラムの内部で使用するローカル変数や値セットを宣言するコマンドです。ローカル変数はディメンションを保持できず、プログラムの実行中にのみ存在します。

関連項目:
DEFINE VARIABLEコマンド

構文

VARIABLE name {datatype|dimension|VALUESET dim}

パラメータ

name

ローカル変数または値セットの名前。既存のアナリティック・ワークスペース・オブジェクトと同じ名前を使用すると、アナリティック・ワークスペース・オブジェクトよりもローカル変数や値セットの方が優先されます。変数または値セットに値を割り当てると、その値はVARIABLE文が出現するプログラムの内部で使用できるようになります。変数または値セットに名前を付ける場合は、アナリティック・ワークスペース・オブジェクトのネーミング規則に従います(DEFINEコマンドを参照)。

datatype

格納されるデータの種類を示す変数のデータ型。DEFINE VARIABLEの項にリストおよび説明されている任意のデータ型を指定できます。また、プログラムが引数を特定のデータ型に変換することなく受け取ることができるようにする場合、そのデータ型のWORKSHEETを指定することもできます。

dimension

nameが、指定したディメンションの単一の値を保持するリレーション変数であることを示します。この変数には、ディメンションの値または指定したディメンションの位置(INTEGER)を格納できます。現在ディメンションに存在しない値を代入すると、エラーが発生します。

VALUESET dim

nameが値セットであることを示します。dim引数には、値セットが値を保持するディメンションの名前を指定します。

使用上の注意

ローカル変数の永続性

ローカル変数または値セットは、これを指定したプログラムが実行されている間のみ存在します。プログラムが終了すると、変数または値セットは存在しなくなり、その値は失われます。プログラムが終了するのは、RETURN文、SIGNAL文、プログラムの最後の行のいずれかが実行されたときです。プログラムが別のプログラムをコールすると、元のプログラムは一時的に停止しますが、変数や値セットはコールされたプログラムが終了しても存在し続け、元のプログラムに制御が戻されます。自身を再帰的にコールするプログラムには、プログラムの実行時コピーごとに個別のローカル変数または値セットがあります。

プログラム開始時の宣言

ローカル変数または値セットは、すべてプログラムの先頭、つまり実行可能な文の前に指定する必要があります。

ローカル変数または値セットの初期値

ローカル変数または値セットの初期値はNAです。

アナリティック・ワークスペース・オブジェクト名との重複

ローカル変数または値セットにアナリティック・ワークスペース・オブジェクトと同じ名前を付けると、プログラムの内部でローカル変数または値セットを参照しているものとみなされます。アナリティック・ワークスペース・オブジェクトが優先されるのは、アナリティック・ワークスペース・オブジェクトを引数として要求する文の場合のみです。

OBJファンクションおよびEXISTSファンクションは、引数としてアナリティック・ワークスペース・オブジェクトを必要としますが、ローカル・テキスト変数または値セットを使用してオブジェクトの名前を指定できます。

計算式およびモデル

計算式またはモデルではローカル変数や値セットを使用できません。

EXPORTコマンドとIMPORTコマンド

プログラム内でEXPORT(EIF)文を使用するとEIFファイルにローカル変数や値セットの値を格納できます。変数や値セットにアナリティック・ワークスペース・オブジェクトの名前を付けるには、ASキーワードを使用する必要があります。この名前は、ローカル変数や値セットの名前と同じでも構いません。IMPORT(EIF)を使用して値を取得すると、値はアナリティック・ワークスペース・オブジェクトとして格納されます。値をローカル変数や値セットにインポートすることはできません。

例

例10-171 ファイル・ユニット番号の保存

Data Reader文を使用して入力ファイルからデータを読み取るためのプログラムを作成するとします。最初にファイルを開いて、ファイルに割り当てられたファイル・ユニット番号の値を保存する必要があります。プログラムの先頭でunitというローカル変数を指定すると、ファイル・ユニット番号を保持できます。

DEFINE read.file PROGRAM
LD Read monthly sales data into the analytic workspace
PROGRAM
VARIABLE unit INTEGER
TRAP ON error
unit = FILEOPEN('sales.data' READ)
...

例10-172 ディメンション値を戻すプログラム

各地区の売上を分析し、売上が最高の地域の名前を返すプログラムを作成するとします。分析のために、このプログラムでは地区名を格納するローカル変数を定義します。プログラムが終了すると、ローカル変数の値が返されます。

DEFINE highsales PROGRAM
PROGRAM
VARIABLE districtname district
... "(statements that find the highest district)
RETURN districtname
END

VNF

VNFコマンドは、日付のみのデータ型(DATE)を持つオブジェクト(DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションを含む)の定義に値名書式(VNF)を割り当てるコマンドです。VNFは、日付のみの値の入力書式および表示書式を制御するテンプレートです。テンプレートには、期間を特定する構成要素(日、月、暦年、会計年度および会計年度内の期間)の書式を指定できます。

重要:
この文は、DATEデータ型のディメンション(つまり、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンション)についてのみ使用できます。SQLの日時データ型に対応する日時データ型を持つ時間ディメンションや、TEXT型の階層ディメンションとして実装されているディメンションには使用できません。

VNFを割り当てる定義は、最新の定義または現行のセッション中に検討された定義である必要があります。そうでない場合は、最初にCONSIDER文を使用し、現行の定義にする必要があります。

構文

VNF [template]

パラメータ

template

現行のディメンションの値を入力および表示するための書式を指定するテキスト式。templateを省略すると、現行の定義の既存のVNFは削除され、デフォルトのVNFが適用されます(表2-5「DWMQYディメンションに対するデフォルトのVNF」を参照)。

注意:
VNFに準拠しないディメンション値を入力すると、Oracle OLAPは値を日付として解釈しようとします。「ディメンション値の日付としての入力」を参照してください。

テンプレートには、現行のディメンションの期間を説明するために使用する構成要素ごとにコードが記述されています。各構成要素のコードは、左の山カッコと右の山カッコで囲む必要があります。テンプレートのコーディングに関する基本的な情報は、表10-12「VNFテンプレートの構成要素の基本コード」、表10-13「VNFテンプレートで許可されている構成要素の組合せ」および表10-14「VNFテンプレートで使用可能な日の書式スタイル」を参照してください。

表10-12「VNFテンプレートの構成要素の基本コード」には、期間の構成要素に関する基本コードが記載されています。6月に終了するQUARTERディメンションである、MYQTRというサンプル・ディメンションを使用しています。この例は、1995年7月1日から9月30日までの四半期を基にしています。期間コード(P)は、会計年度内の期間の数値的な位置を指定します。Pコードはすべてのディメンションに使用できますが、FFコードまたはFFBコードと組み合せて使用する場合に限定されます。Bコードは、開始期間を指定します。

表10-12 VNFテンプレートの構成要素の基本コード

コード

意味

サンプル値

<D>

期間が終了する日付

30

<M>

期間が終了する月

9

<YY>

期間が終了する暦年

95

<FF>

会計年度が終了する暦年で指定する、対象期間を含む会計年度

96

<DB>

期間が開始される日付

1

<MB>

期間が開始される月

7

<YYB>

期間が開始される暦年

95

<FFB>

会計年度が開始される暦年で指定する、対象期間を含む会計年度

95

<P>

対象期間の会計年度内における数値的な位置

1

<NAME>

ディメンションの名前

MYQTR

表10-13「VNFテンプレートで許可されている構成要素の組合せ」には、DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションごとに、VNFで組み合せることが可能な構成要素の組合せが記載されています。会計年度コード(FFまたはFFB)は、DAY、WEEK、MONTH、QUARTERまたはYEAR型のどのディメンションのテンプレートにも使用できます。ただし、会計年度コードは、WEEKディメンションや、フェーズ化されたMONTH、QUARTERおよびYEARディメンションでは特別な意味を持っています。その他のディメンションの場合、会計年度は暦年と同一です。「WEEK型のディメンションの会計年度」、「MONTH、QUARTERまたはYEAR型のディメンションの会計年度」および「DAY型のディメンションの会計年度」を参照してください。

表10-13 VNFテンプレートで許可されている構成要素の組合せ

ディメンションの型

構成要素の組合せ

サンプル値

DAY、WEEK、MONTH、QUARTER、YEAR

<D> <M> <YY>

<DB> <MB> <YYB>

<P> <FF>

<P> <FFB>

31 3 96

1 4 95

1 96

1 95

MONTH、QUARTER、YEAR

<M> <YY>

<MB> <YYB>

<M> <FF>

<M> <FFB>

<MB> <FF>

<MB <FFB>

3 96

4 95

3 96

3 95

4 96

4 95

YEAR

<YY>

<FF>

<FFB>

96

96

95

表10-13「VNFテンプレートで許可されている構成要素の組合せ」に記載されている基本コードのかわりに、表10-14「VNFテンプレートで使用可能な日の書式スタイル」に記載されているいずれかの書式スタイルを代用できます。表10-13に記載されている構成要素のすべての組合せに<NAME>構成要素を追加できます。

構成要素の数が少なすぎるか多すぎるテンプレートは指定できません。VNFには、あいまいな部分のないディメンション値を入力できるようにする必要があります。「あいまいさを排除するためのVNFのコーディング」を参照してください。

ただし、特定の型のディメンションに使用できる構成要素の組合せのみを指定し、VNFで入力値の明確な解釈が可能な場合は、次に示すようにかなり柔軟にVNFテンプレートを指定できます。

- 構成要素を任意の順序で指定できます。

- 構成要素の前後や構成要素間にテキストを挿入できます。

表10-13「VNFテンプレートで許可されている構成要素の組合せ」に記載されている日、月、暦年、会計年度および期間の基本コードのかわりに、表10-14「VNFテンプレートで使用可能な日の書式スタイル」、表10-15「VNFテンプレートで使用可能な月の書式スタイル」、表10-16「VNFテンプレートで使用可能な年の書式スタイル」および表10-17「VNFテンプレートで使用可能な期間の書式スタイル」に記載されている書式スタイルを代用できます。

表10-14 VNFテンプレートで使用可能な日の書式スタイル

フォーマット

意味

1995年1月3日

2051年11月12日

<D>

1桁または2桁

3

12

<DD>

2桁

03

12

<DS>

空白詰め、2桁

3

12

表10-15 VNFテンプレートで使用可能な月の書式スタイル

フォーマット

意味

1995年1月3日

2051年11月12日

<M>

1桁または2桁

1

11

<MM>

2桁

01

11

<MS>

空白詰め、2桁

1

11

<MTXT>

先頭の3文字、大文字

JAN

NOV

<MTXTL>

先頭の3文字、小文字

jan

nov

<MTEXT>

完全名、大文字

JANUARY

NOVEMBER

<MTEXTL>

完全名、小文字

january

november

MTXT、MTXTL、MTEXTおよびMTEXTLの場合、表示される実際の値は、次に示すようにMONTHNAMESオプションで指定した値によって異なります。

- MTXTおよびMTEXTでは、MONTHNAMESオプションで指定した名前がすべて小文字の場合、名前全体が大文字に変換されます。そうでない場合は、最初の文字が大文字に変換され、2番目以降の文字は元のままです。

- MTXTLおよびMTEXTLでは、MONTHNAMESオプションで指定した名前がすべて大文字の場合、名前全体が小文字に変換されます。そうでない場合は、最初の文字が小文字に変換され、2番目以降の文字は元のままです。

表10-16 VNFテンプレートで使用可能な年の書式スタイル

フォーマット

意味

1995年1月3日

2051年11月12日

<YY>

2桁または4桁

95

2051

<YYYY>

4桁

1995

2051

<FF>

2桁または4桁

95

2051

<FFFF>

4桁

1995

2051

表10-17 VNFテンプレートで使用可能な期間の書式スタイル

フォーマット

意味

1995年1月3日

2051年11月12日

<P>

1桁、2桁または3桁

3

316

<PP>

2桁または3桁

03

316

<PS>

空白詰め、2桁または3桁

3

316

<PPP>

3桁

003

316

<PPS>

空白詰め、3桁

3

316

使用上の注意

VNFの廃棄

あるディメンションのVNFを廃棄してデフォルトのVNFを使用するには、CONSIDER文を使用してディメンションの定義を現行の定義に設定してから、引数を指定せずにVNF文を使用します。

VNFテンプレートで山カッコをテキストとして指定する方法

テンプレート内に追加テキストとして山カッコを挿入するには、テキストとして挿入する山カッコごとに2つの山カッコを追加して指定します(たとえば、値全体を山カッコで囲んで表示するには、<<<D> <M> <YY>>>と指定します)。

月の名前

MTXT、MTXTL、MTEXTおよびMTEXTL書式の月の構成要素に使用される名前は、MONTHNAMESオプションの現行の設定から読み取ります。

会計年度コード

会計年度コード(FFまたはFFB)は、DAY、WEEK、MONTH、QUARTERまたはYEAR型のどのディメンションのテンプレートにも使用できます。

WEEK型のディメンションの会計年度

WEEK型のディメンションの場合、会計年度は、新しい暦年に終了する最初の期間(単一週または複数週)の開始日に始まります。会計年度は、期間全体が暦年に含まれる最終期間の最終日に終了します。

この定義は、WEEKディメンションの定義時にこのディメンションに指定した開始日または終了日にかかわらず有効です。ただし、会計年度では、(曜日または日付として)指定した開始日または終了日の曜日が考慮されます。

たとえば、myweekというWEEK型のディメンションを定義し、これに終了日が1995年6月2日(金曜日)の単一週の期間を設定したとします。1995年6月2日を含む会計年度は、1994年12月31日(日曜日)に始まり、1995年12月29日(金曜日)に終わります。myweekのVNFにFFコードがある場合、この会計年度は1995年と認識されます。VNFにFFBコードがある場合、会計年度は1994年と認識されます。

MONTH、QUARTERまたはYEAR型のディメンションの会計年度

開始フェーズや終了フェーズのないMONTH、QUARTERまたはYEAR型のディメンションの場合、会計年度は暦年と同一です。

開始フェーズや終了フェーズの設定されているMONTH、QUARTERまたはYEAR型のディメンションの場合、ディメンションの各会計年度は、開始フェーズの開始月から始まり、終了フェーズの終了月に終わります。

たとえば、MONTH型のディメンションであるmymonthを、3月に終了する4か月の期間と定義したとすると、各会計年度は4月1日に始まり3月31日に終わります。MYMONTHのVNFにFFコードを使用すると、1995年4月1日に始まり1996年3月31日に終わる会計年度は1996年と認識されます。FFBコードを使用すると、この会計年度は1995年と認識されます。

DAY型のディメンションの会計年度

DAY型のディメンションの場合、会計年度は暦年と同一です。

VNFにおける有効範囲外の年

VNFにYY、YYB、FF、FFBのいずれかの書式が指定され、1950から2049年の範囲外となる年が表示の対象になっている場合、該当する年は4桁で表示されます。年を入力するときも、4桁すべてを入力する必要があります。

あいまいさを排除するためのVNFのコーディング

VNFテンプレートには、あいまいさを排除したディメンション値を入力できる必要があります。あいまいさを排除するには、VNFテンプレートをコーディングするときに次の制限事項を順守する必要があります。

- 長さが指定されていないテキスト構成要素(たとえば、任意の長さの月の完全名を指定する<MTEXT>)の直後に文字を配置することは(構成要素のコードとリテラル・テキストのどちらの場合でも)できません。

- 長さが指定されていない数値の構成要素(たとえば、1桁または2桁になる<M>や、2桁または4桁になる<YY>)の直後に数字を配置することは(構成要素のコードとリテラル・テキストのどちらの場合でも)できません。

モデル・ディメンションに対するVNFのコーディング

DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションに基づく方程式を含むモデルを定義した場合、このディメンションのVNFには、次の書式特性(値は文字で始まり、値には文字、数字、アンダースコアおよびピリオドのみが使用できる)を持つディメンション値を指定する必要があります。

ディメンション値の入力

VNFをDAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションに割り当てると、このディメンションに値を入力するためにデフォルトのVNFを使用することはできなくなります。設定したVNFの書式か、または日付として値を入力する必要があります。

VNF書式でのディメンション値の入力

VNF書式でディメンション値を入力する場合は、次のような柔軟性があります。

- 文字は、(構成要素のコードとリテラル・テキストのどちらの場合でも)VNFに指定されている大文字の使用法に厳密に合せる必要はなく、大文字と小文字を自由に使用できます。

- 月の名前の先頭の3文字を示す<MTXT>または<MTXTL>をテンプレートに指定した場合は、先頭の3文字から完全名まで、必要な文字数の月の名前を入力できます。長さが不定の月の名前を示す<MTEXT>または<MTEXTL>をテンプレートに指定した場合は、先頭の文字から完全名まで、必要な文字数の月の名前を入力できます。ただし、いずれの場合も、MONTHNAMESオプションで名前を一意に識別するために十分な文字数を入力する必要があります。たとえば、AprilとAugustを区別するには、少なくともこれらの名前の先頭の2文字を入力する必要があります。

- ディメンション値の構成要素間やテキスト要素間には、空白を必要なだけ挿入できます。

- 特定のディメンションの期間を指定するために必須ではない日付の構成要素がテンプレートに含まれる場合は、目的の期間内の任意の日付を指定できます。たとえば、テンプレート<DD><MTXT><YY>の<DD>構成要素は、MONTHディメンションの期間を指定するために必須の構成要素ではありません。したがって、1995年6月の場合、01JUN95から30JUN95までの任意の日付を指定できます。

ディメンション値の日付としての入力

DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションの値を日付として入力する場合は、DATEORDERの項に記載されているいずれかの入力スタイルを使用できます。日付として年月日をすべて指定すると、Oracle OLAPはDATEORDERオプションを使用してあいまいさを解消します。ただし、指定する必要があるのは、使用しているディメンションの型に該当する日付構成要素のみです。

- DAYまたはWEEKディメンションの場合は、すべての構成要素(年、月、日)を入力する必要があります。

- MONTHまたはQUARTERディメンションの場合は、月と年の構成要素のみを入力する必要があります。'0106'のようなあいまいな値を入力すると、あいまいさを解消するために、DATEORDERオプションの先頭の2文字が使用されます。したがってこの状況では、DATEORDERオプションをMYDまたはYMDにする必要があります。

- YEARディメンションの場合、入力する必要があるのは年のみです。

VNFの変更

DAY、WEEK、MONTH、QUARTERまたはYEAR型のディメンションの値を表示する場合の柔軟性として、VNF引数を指定したCONVERTファンクションを使用して、ディメンションのVNF(およびディメンションに独自のVNFがない場合はデフォルトのVNF)を変更できることがあげられます。

CONVERTにVNF引数を指定すると、VNF文のテンプレート内で使用できるすべてのテンプレート・コードを記述できますが、この引数を指定しても、値の識別に必要な数よりも構成要素を過度に少なく指定したり多く指定したりすることができなくなるわけではありません。さらに、VNF引数を指定すると、VNFテンプレートでは許可されない追加コードを使用できます。

例

例10-173 MONTH型のディメンションへのVNFの割当て

次の文を実行すると、monthというMONTH型の既存のディメンションに対してVNFが割り当てられます。

CONSIDER month
VNF <mtextl>, <yyyy>

例10-174 MONTH型のディメンションへの値の追加

次の文を実行すると、VNFの<MTEXTL>コードで指定した完全名ではなく、月の名前を識別するのに必要十分な文字数を使用して、新しいVNFのスタイルでディメンション値が追加されます。

MAINTAIN month ADD 'JA, 1995' 'MAR, 1995'
Limit month TO LAST 3
REPORT month

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

MONTH
--------------
January, 1995
February, 1995
March, 1995

Oracle OLAPでは、MAINTAIN文で指定した期間の間にある期間が自動的に追加されます。

例10-175 VNFのWEEKへの割当て

次の文を実行すると、weekというWEEK型のディメンションが定義され、VNFがweekの定義に追加されて、値がweekディメンションに追加されます。

DEFINE week DIMENSION WEEK
VNF Week <p>.<ff>
MAINTAIN week ADD '01JAN95' '30JAN95'
REPORT week

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

WEEK
--------------
Week 1.95
Week 2.95
Week 3.95
Week 4.95
Week 5.95

MAINTAIN文を使用して値をweekディメンションに追加する場合は、新しい値をVNFに準拠する値ではなく、日付として指定できます。ただし、目的の書式で出力を表示するためにVNFが使用されます。

WHILE

WHILEコマンドは、ブール式が返す値がTRUEの間、文を繰り返し実行するコマンドです。WHILEは、プログラムの内部でのみ使用できます。

構文

WHILE boolean-expression

statement block

パラメータ

boolean-expression

文を実行するための条件として機能します。この式がTRUEの間、文は繰り返し実行されます。この式がFALSEになると、文の実行は終了し、プログラムは引き続き次の行の実行に移ります。文(または複数の文)の記述によって、ブール式が最終的にはFALSEになる必要がありますが、そうしないと、このコードは無限ループになります。

statement block

ブール式がTRUEの間に実行される1つ以上の文。DO ... DOENDの間に文を記述することにより、複数の文を実行できます。DO文はWHILE文の直後に記述する必要があります。

使用上の注意

WHILEとIFとの比較

WHILE文は、主にIF...THEN...ELSEコマンドのかわりに使用されます。ブール式がTRUEの間、プログラム内の1つ以上の文を繰り返し実行する場合は、WHILEを使用します。ブール式がTRUEのときに一度のみ実行する場合は、IFを使用します。

ブール定数

ブール式には定数を指定できます。文がWHILE TRUEの場合は、プログラムがループを終了できるように、DO ... DOENDの間にBREAK、RETURNまたはEXIT文を必ず記述してください。

ループ内での分岐

BREAK、CONTINUE、GOTOの各コマンドを使用すると、WHILEループの内部または外部に分岐し、それによって文の実行順序を変更できます。

例

例10-176 プログラム内でのWHILEループの使用

次のプログラム行では、DOの後の文は、ブール式count LT 10がTRUEである場合に実行されます。ループの内部で、このコードはある条件のインスタンスを検索し、見つかるとcountに1を追加します。countが10に到達すると、ループは終了します。ループ内のコードでは、countがいつかは必ず10になるようにします。そうしないと、ループは永遠に終了しません。

WHILE count LT 10
DO
..." (statements)
IF ....
count = count + 1
DOEND

ZEROTOTAL

ZEROTOTALコマンドは、指定したレポート列の1つまたはすべての小計をゼロにリセットするコマンドです。ZEROTOTALコマンドは、ROWコマンドを使用してレポートを生成するときに使用します。

注意:
ZEROTOTALは、RUNTOTALファンクションおよびSUBSTRファンクションから返される結果に影響します。

構文

ZEROTOTAL [{n|ALL} [column1 columnN]]

パラメータ

引数を指定しないでZEROTOTALを実行すると、すべての列のすべての小計がゼロにリセットされます。

n

レポートの数値列ごとに累計された32の小計(1から32まで)のうち1つを指定するINTEGER式。指定した列では、この小計はゼロに設定されます。

ALL

指定した列の32の小計すべてをゼロに設定します。引数が指定されていない場合、ALLはデフォルトになります。特定の列のすべての小計をゼロにリセットするには、文にALLを記述する必要があります。

ZEROTOTAL ALL 1 4 7

column

レポート列の列数。列番号1とは、その列に格納されているデータの型にかかわらず、レポートの左端列のことを指します。列番号の引数を指定しなかった場合、レポートのすべての列を対象に、指定した小計(またはすべての小計)がゼロに設定されます。

使用上の注意

列の小計の初期化

ROWコマンドを使用してレポートを作成する場合は、レポート・プログラムの冒頭にZEROTOTAL文を使用して、すべての列の32の小計すべてをゼロに初期化してください。REPORT文は、出力を生成する前に、自動的にすべての小計をゼロにリセットします。

列の小計のリセット

一部の小計のみをリセットする場合や、これまでに累計した小計を挿入せずに新しい小計の累計を開始する場合にも、レポート・プログラムにZEROTOTALを使用できます。SUBSTRファンクションを使用して小計自体の列で小計にアクセスすると、小計は自動的にゼロにリセットされます。ただし、RUNTOTALファンクションを使用して小計にアクセスした場合は、ゼロにリセットされません。

例

例10-177 すべてのレポート列の小計のリセット

あるレポートで、総売上高(ドル単位)と、その後に各地区ごとの売上数量の詳細サマリーを表示するとします。さらに、レポートの最後に売上数量の合計を表示しますが、この合計には売上高(ドル単位)の数字は含まれないようにします。総売上高(ドル単位)を算出したら、ZEROTOTALを使用してすべての小計をゼロにリセットします。こうすると、後でこのレポートでSUBTOTAL(1)を使用したときに、地区ごとの売上数量のみが合計されます。

次のステートメント行がプログラムにあるとします。

LIMIT product TO 'Footwear'
LIMIT month TO 'Jul96' TO 'Sep96'
ROW 'Total Dollar Sales' ACROSS month: -
DECIMAL 0 TOTAL(sales month)
BLANK
ROW 'Unit Sales'
ZEROTOTAL ALL
FOR district
ROW INDENT 5 district ACROSS month: units
ROW 'Total Unit Sales' ACROSS month: -
OVER '-' SUBTOTAL(1)

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

Total Dollar Sales      607,552    581,229    658,850

Unit Sales
Boston               3,538      3,369      3,875
Atlanta              4,058      3,866      4,251
Chicago              3,943      3,509      4,058
Dallas                 814        824        867
Denver               1,581      1,532      1,667
Seattle              2,053      2,193      2,617
---------- ---------- ----------
Total Unit Sales      15,987.00  15,293.00  17,335.00

A OLAP_TABLE SQLファンクション

この付録では、アナリティック・ワークスペースから多次元データを抽出して2次元のリレーショナル表の形式で表示できる次のSQLファンクションについて説明します。

- OLAP_TABLEを使用したリレーショナル・ビューの作成

- SELECT FROM OLAP_TABLE文でのOLAP DML式の使用

- OLAP_TABLE

- OLAP_CONDITION

- OLAP_EXPRESSION

- OLAP_EXPRESSION_BOOL

- OLAP_EXPRESSION_DATE

- OLAP_EXPRESSION_TEXT

OLAP_TABLEを使用したリレーショナル・ビューの作成

OLAP_TABLEは、リレーショナル表およびビューに結合可能なオブジェクトの表、またはOLAP_TABLEによって移入された別のオブジェクトの表に結合可能なオブジェクトの表を返すSQLファンクションです。SQL文の中で、表またはビューの名前を指定したい任意の部分にOLAP_TABLEファンクション・コールを指定できます

OLAP_TABLEは、制限マップを使用して、アナリティック・ワークスペース内で定義されているディメンションやメジャーを、論理表の列にマップします。制限マップとSQL SELECT文のWHERE句が組み合されて、アナリティック・ワークスペース内で実行される一連のOLAP DML LIMITコマンドが生成されます。

OLAP_TABLEでは、制限マップと事前定義された論理表を一緒に使用したり、制限マップの情報を使用して実行時に論理表を動的に生成したりできます。

関連項目:
OLAP_TABLEのlimit_mapパラメータに関する説明、「OLAP_TABLEで使用する論理表の作成」、「必須のOLAP DMLオブジェクト」、「OLAP_TABLEで使用する論理表の作成」、「OLAP_TABLEで使用する論理表の作成」、「OLAP_TABLEで使用する論理表の作成」

必須のOLAP DMLオブジェクト

制限マップでのディメンション階層のマッピングをサポートするためには、アナリティック・ワークスペース内で次のオブジェクトが事前定義されている必要があります。

- 親リレーション: 階層内の各ディメンション・メンバーの親を識別します。詳細は、「parentrelリレーション」を参照してください。

- 階層ディメンション: ディメンションの階層を表します。詳細は、「hierlistディメンション」を参照してください。

- 階層内変数または値セット: 階層の各レベルに属するディメンション・メンバーを表します。詳細は、「inhier値セットまたは変数」を参照してください。

- グルーピングID変数: 各ディメンション・メンバーの階層内の深さを識別します。詳細は、「gidrelリレーション」を参照してください。

- ファミリ・リレーション: 階層内の各ディメンション・メンバーの完全な親子関係を表します。詳細は、「familyrelリレーション」を参照してください。

- レベル・ディメンション: ディメンションのレベルを表します。詳細は、「levellistディメンション」を参照してください。

OLAP_TABLEで使用する論理表の作成

OLAP_TABLEによって移入される論理表は、実際には表型です。また、その行は、抽象データ型またはADTとも呼ばれるユーザー定義のオブジェクト型です。

ユーザー定義のオブジェクト型は、表の各列に相当する属性で構成されます。行を定義するための基本的な構文は次のとおりです。

CREATE TYPE object_name AS OBJECT (
attribute1      datatype,
attribute2      datatype,
attributen      datatype);

表型はオブジェクト型の集合で、この集合は表の各行に相当します。表型を作成するための基本的な構文は次のとおりです。

CREATE TYPE table_name AS TABLE OF object_name;

OLAP_TABLEでは、制限マップと事前定義された論理表を一緒に使用したり、制限マップの情報を使用して実行時に論理表を動的に生成したりできます。

関連項目:

- 「事前定義されたADTを使用したOLAP_TABLEの使用」

- 「自動ADTを使用したOLAP_TABLEの使用」

- オブジェクト型については、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。

- 『Oracle Database SQL言語リファレンス』のCREATE TYPEに関する項

事前定義されたADTを使用したOLAP_TABLEの使用

オブジェクトを格納する表は、事前に定義することも、動的に生成することもできます。表型を事前にデータベース内に作成しておけば、その表はOLAP_TABLEをコールしたときにいつでも使用できます。一般に、動的にオブジェクトを生成する問合せよりも、事前定義されたオブジェクトを使用する問合せの方がパフォーマンスに優れています。

例A-1「事前定義されたADTを使用してビューを作成するためのテンプレート」は、事前定義されたADTを使用してアナリティック・ワークスペースのビューを作成する方法を示しています。

例A-1 事前定義されたADTを使用してビューを作成するためのテンプレート

SET ECHO ON
SET SERVEROUT ON

DROP TYPE table_obj;
DROP TYPE row_obj;

CREATE TYPE row_obj AS OBJECT (
column_first     datatype,
column_next      datatype,
column_n         datatype);
/
CREATE TYPE table_obj AS TABLE OF row_obj;
/
CREATE OR REPLACE VIEW view_name AS
SELECT column_first, column_next, column_n
FROM TABLE(OLAP_TABLE(
'analytic_workspace',
'table_obj',
'olap_command',
'limit_map'));
/
COMMIT;
/
GRANT SELECT ON view_name TO PUBLIC;

例A-2「事前定義されたADTを使用するTIMEディメンションのサンプル・ビュー」では、OLAP_TABLEと事前定義された表型を使用して、MYAW_AWスキーマ内のMYAWというアナリティック・ワークスぺースのTIMEディメンションのリレーショナル・ビューを作成します。

OLAP_TABLEコールの1番目のパラメータはアナリティック・ワークスペースの名前です。2番目は事前定義された表型の名前です。4番目は、ワークスペース・ディメンションと事前定義された表型の列とのマッピングを指定する制限マップです。3番目のパラメータは指定されていません。

例A-2 事前定義されたADTを使用するTIMEディメンションのサンプル・ビュー

CREATE TYPE time_cal_row AS OBJECT (
time_id           varchar2(32),
cal_short_label   varchar2(32),
cal_end_date      date,
cal_timespan      number(6));

CREATE TYPE time_cal_table AS TABLE OF time_cal_row;

CREATE OR REPLACE VIEW time_cal_view AS
SELECT time_id, cal_short_label, cal_end_date, cal_timespan
FROM TABLE(OLAP_TABLE(
'myaw_aw.myaw duration session',
'time_cal_table',
'',
'DIMENSION time_id from time with
HIERARCHY time_parentrel
INHIERARCHY time_inhier
ATTRIBUTE cal_short_label from time_short_description
ATTRIBUTE cal_end_date    from time_end_date
ATTRIBUTE cal_timespan    from time_time_span'));

自動ADTを使用したOLAP_TABLEの使用

表型の名前が引数として指定されていない場合、OLAP_TABLEは、制限マップの情報を使用して自動的に論理表を生成します。この場合、その表型は、SQL SELECT文をコールするコンテキスト内で、実行時にしか使用できません。

例A-3「自動ADTを使用してビューを作成するためのテンプレート」は、自動ADTを使用してアナリティック・ワークスペースのビューを作成する方法を示しています。

例A-3 自動ADTを使用してビューを作成するためのテンプレート

SET ECHO ON
SET SERVEROUT ON

CREATE OR REPLACE VIEW view_name AS
SELECT column_first, column_next, column_n
FROM TABLE(OLAP_TABLE(
'analytic_workspace',
'',
'olap_command',
'limit_map'));
/
COMMIT;
/
GRANT SELECT ON view_name TO PUBLIC;

例A-4「自動ADTを使用するTIMEディメンションのビュー」では例A-2「事前定義されたADTを使用するTIMEディメンションのサンプル・ビュー」と同じビューが作成されますが、事前定義された表型を使用するかわりに、自動的にADTを生成します。ここでは、制限マップでAS句を使用してターゲット列のデータ型を指定しています。

例A-4 自動ADTを使用するTIMEディメンションのビュー

CREATE OR REPLACE VIEW time_cal_view AS
SELECT time_id, cal_short_label, cal_end_date, cal_timespan
FROM TABLE(OLAP_TABLE(
'myaw_aw.myaw duration session',
null,
null,
'DIMENSION time_id AS varchar2(32) FROM time WITH
HIERARCHY time_parentrel
INHIERARCHY time_inhier
ATTRIBUTE cal_short_label AS VARCHAR2(32) from time_short_description
ATTRIBUTE cal_end_date AS DATE            from time_end_date
ATTRIBUTE cal_timespan AS NUMBER(6)       from time_time_span'));

ユーザーが制限マップのAS句でデータ型を指定しなかった場合、OLAP_TABLEがADTを自動生成する際にはターゲット列に対してデフォルトのリレーショナル・データ型が使用されます。OLAP_TABLEで使用されるデフォルトのデータ型変換については、表A-2「デフォルトのデータ型変換」を参照してください。

リレーショナル・ビューへの計算された列の追加

OLAP_TABLEでは、アナリティック・ワークスペースの多次元データを表形式で表すために制限マップを使用します。制限マップによって、論理表の列が特定されます。OLAP_EXPRESSIONファンクションを指定するか、または問合せのSELECT構文のリストにブール・ファンクション、テキスト・ファンクション、日付ファンクションのいずれかを指定することによって、計算された列をリレーショナル・ビューに追加できます。SELECT構文のリストにいずれかのファンクションを指定した場合は、そのファンクションの結果に対応する追加の列がOLAP_TABLEによって生成されます。

これらの式のいずれかを使用する前に、OLAP_TABLEで使用される制限マップにROW2CELL句を指定して、OLAP単一行ファンクションによって使用される情報を移入するRAW列を指定する必要があります。

関連項目:
「単一行ファンクションとして使用するOLAP DML式」および「ROW2CELL句」

SELECT FROM OLAP_TABLE文でのOLAP DML式の使用

OLAP DMLコマンドは、SELECT FROM OLAP_TABLE文内で使用できます。詳細は次の項で説明します。

- 「単一行ファンクションとして使用するOLAP DML式」

- 「SELECT FROM OLAP_TABLE文からのアナリティック・ワークスペースの変更」

単一行ファンクションとして使用するOLAP DML式

一般に、SQLファンクションは、問い合された表またはビューのすべての行について単独の結果行を返す単一行ファンクションです。Oracleでは、事前定義された複数のSQL単一行ファンクションをサポートしており、たとえば、数値データを返すCOS、LOG、ROUND、文字データを返すUPPERやLOWERなどがあります。

SELECT FROM OLAP_TABLE文のコンテキストには、OLAP DMLファンクションが単一行ファンクションとして機能するようにOLAP DMLファンクションをラップするための、4つのSQLファンクションがあります。これらのファンクションは、それぞれデータ型が異なる4種類のOLAP DML式の結果を戻しますが、具体的には、Oracle OLAPの数式に使用するOLAP_EXPRESSION、Oracle OLAPのブール式に使用するOLAP_EXPRESSION_BOOL、Oracle OLAPの日時式に使用するOLAP_EXPRESSION_DATE、Oracle OLAPのテキスト式に使用するOLAP_EXPRESSION_TEXTです。これらの各SQLファンクションの引数の1つが、OLAP DMLファンクションです。

OLAP_EXPRESSIONファンクションおよびこれに類するファンクションは、他のOracle単一行ファンクションと同じ方法で(特にSELECT構文のリスト内や、WHERE句およびORDER BY句内で)指定できます。

SELECT FROM OLAP_TABLE文からのアナリティック・ワークスペースの変更

OLAP_TABLEの実行中にアナリティック・ワークスペースを即時に変更するためのメカニズムは複数あります。

OLAP_CONDITION SQLファンクションを使用すると、SELECT FROM OLAP_TABLE文のコンテキスト内でアナリティック・ワークスペースを変更できます。OLAP_CONDITIONは、(特にWHERE句で)他のOracleファンクションと同じように指定できます。OLAP_CONDITIONを使用して、オプションを設定したり、LIMITコマンドを実行したり、OLAPのモデルや予測を実行したり、プログラムを実行したりできます。ワークスペースに対する変更は、一時的なものにすることも、問合せの完了時にセッションに残しておくこともできます。

OLAP_CONDITION以外にも、たとえば、制限マップでのPREDMLCMD句やPOSTDMLCMD句、olap_commandパラメータなどのOLAP_TABLEファンクション自体によってサポートされている構文が使用できます。OLAP_CONDITIONはOLAP_TABLE内に埋め込まれていないため移植が可能で、様々な入力ポイントで適用できるので汎用性があります。

OLAP_TABLEは、問合せの結果セットを生成するLIMITコマンドの実行前に、制限マップ内のディメンションのステータスを保存します。データがフェッチされた後、OLAP_TABLEはディメンションのステータスをリストアします。ディメンションのステータスが保存される前にOLAP DMLコマンドが実行されるようにするには、制限マップでPREDMLCMD句を指定します。PREDMLCMD句による変更は、OLAP_TABLEの実行後もワークスペース内に保持されます(POSTDMLCMD句で変更を無効にする場合を除く)。詳細は、limit_mapを参照してください。

OLAP_TABLEのolap_commandパラメータには、結果セットがフェッチされる直前に実行されるOLAP DMLコマンドを指定します。一部の環境では、olap_commandパラメータにOLAP DML FETCHコマンドが含まれていることがあり、その場合はこのコマンドによってフェッチが管理されます。olap_commandパラメータによって設定された制限は、OLAP_TABLEの実行中のみ有効です。詳細は、olap_commandを参照してください。

OLAP_TABLE

OLAP_TABLEは、アナリティック・ワークスペースから多次元データを抽出し、そのデータを2次元のリレーショナル表に表示するSQLファンクションです。

関連項目:
「OLAP_TABLEを使用したリレーショナル・ビューの作成」および「SELECT FROM OLAP_TABLE文でのOLAP DML式の使用」

OLAP_TABLEファンクションは、アナリティック・ワークスペースの多次元データを論理表として返します。

OLAP_TABLEが入力パラメータに指定された情報を処理する順番については、「OLAP_TABLEにおける処理順序」で説明します。

OLAP_TABLEは、アナリティック・ワークスペースに対して問合せを発行するための、データベースの基本的メカニズムです。SQL文の中で、表またはビューの名前を指定したい任意の部分にOLAP_TABLEファンクション・コールを指定できます。

OLAP_TABLEは、リレーショナル表およびビューに結合可能なオブジェクトの表、またはOLAP_TABLEによって移入された別のオブジェクトの表に結合可能なオブジェクトの表を返します。

注意:
OLAPワークシート内からはこのファンクションを実行できません。SQLワークシートなどのSQLツール内で実行してください。

戻り値

表型で、この表の行は、選択したワークスペース・データに対応するオブジェクト(ADT)です。「OLAP_TABLEを使用したリレーショナル・ビューの作成」を参照してください。

構文

OLAP_TABLE(
analytic_workspace    IN   VARCHAR2,
table_object          IN   VARCHAR2,
olap_command          IN   VARCHAR2,
limit_map1            IN   VARCHAR2,
limit_map2            IN   VARCHAR2,
.
.
.
limit_map8            IN   VARCHAR2)
RETURN TYPE;

パラメータ

analytic_workspace

ソース・データが格納されているアナリティック・ワークスペースの名前を指定します。また、OLAP_TABLEへの最初のコールで開かれるOLAPセッションにアナリティック・ワークスペースをアタッチしておく期間も指定します。

このパラメータは、OLAP_TABLEに必須です。

このパラメータの構文は次のとおりです。

'[owner.]aw_name DURATION QUERY | SESSION'

次に例を示します。

'olapuser.xademo DURATION SESSION'

- owner
ownerは、他のユーザーによってアクセスされるビューを作成する場合に指定します。それ以外の場合で、アナリティック・ワークスペースを所有している場合は、ownerを省略できます。このパラメータは、所有者以外のユーザー名でログインしている場合にのみ必要です。

- QUERY
単独の問合せを実行している間、アナリティック・ワークスペースをアタッチします。QUERYは、他のセッションで行われたアナリティック・ワークスペースに対する更新を確認する必要がある場合にのみ使用します。

- SESSION
アナリティック・ワークスペースをアタッチし、問合せ後もアタッチしたままにします。OLAPセッションを開いた状態で維持するため、QUERYよりもパフォーマンスが向上します。このパフォーマンスの向上が顕著になるのは、制限マップにtable_objectパラメータやAS句を指定しないでファンクションをコールする場合ですが、これは、OLAP_TABLEファンクションが適切な表定義を判断する必要があるためです。「自動ADTを使用したOLAP_TABLEの使用」を参照してください。

table_object

事前定義されたオブジェクトの表の名前(「事前定義されたADTを使用したOLAP_TABLEの使用」を参照)。

このパラメータはオプションです。自動ADTを使用する場合、このパラメータは省略します。

このパラメータの構文は次のとおりです。

'table_name'

次に例を示します。

'product_dim_tbl'

table_nameパラメータを指定する場合、返されるデータの列のデータ型は事前定義されたものになります。この場合は、制限マップでAS句を使用できません。

table_nameパラメータを省略する場合、返されるデータの列のデータ型は実行時に生成されます。ターゲットのデータ型は、制限マップのAS句で指定するか、またはデフォルトのデータ型(表A-2「デフォルトのデータ型変換」を参照)を使用します。「自動ADTを使用したOLAP_TABLEの使用」を参照してください。

olap_command

単独のOLAP DMLコマンド。複数のコマンドを実行する場合は、アナリティック・ワークスペース内にプログラムを作成し、そのプログラムをこのパラメータでコールする必要があります。このパラメータは、OLAP DMLで使用できるほとんどのデータ操作コマンドを処理することが可能で、柔軟かつ機能的です。

OLAP_TABLEがolap_commandパラメータを処理する順番については、「OLAP_TABLEにおける処理順序」で説明します。

このパラメータの構文は次のとおりです。

'olap_command'

olap_commandパラメータは、次の2つの用途に使用できます。

- ワークスペース・セッションでデータがフェッチされる直前(すべての制限が適用された後)に変更を行う(「olap_commandパラメータでのFETCHの使用」を参照)。

- 制限マップを使用するかわりにソース・データを直接指定する(「olap_commandでの制限マップの使用」を参照)。

limit_map

ワークスペース・オブジェクトをリレーショナル列にマップして、各オブジェクトのロールを指定します。「OLAP_TABLEを使用したリレーショナル・ビューの作成」を参照してください。

制限マップでは、OLAP_TABLEに実行させる特別な命令を指定することもできます。たとえば、制限マップの実行前または実行後にOLAP DMLコマンドが実行されるようにしたり、OLAP_CONDITIONおよびOLAP_EXPRESSIONファンクションにROW2CELL列を指定することができます。(「OLAP_CONDITION」および「OLAP_EXPRESSION」を参照してください。)

OLAP_TABLEが制限マップの情報を処理する順番については、「OLAP_TABLEにおける処理順序」で説明します。

limit_mapパラメータは、通常は必ず指定する必要があります。olap_commandパラメータにFETCHコマンドを指定する場合にのみ省略できます。olap_commandの説明を参照してください。

制限マップのテキスト全体をOLAP_TABLEへのパラメータとして指定したり、制限マップの全体または一部をアナリティック・ワークスペース内のテキスト変数に格納し、アンパサンド置換を使用してその変数を参照したりできます。たとえば、次のOLAP_TABLE問合せは、MYAW_AWスキーマのMYAWアナリティック・ワークスペース内にあるlimitmapvarという変数に格納された制限マップを使用しています。

SELECT * FROM TABLE(OLAP_TABLE(
'myaw_aw.myaw DURATION SESSION',
'',
'',
'&(myaw_aw.myaw!limitmapvar)');

OLAP_TABLEへのコールの中で制限マップをテキストとして指定する場合、その最大文字数は4000となりますが、これはPL/SQLの制限によるものです。制限マップをアナリティック・ワークスペースに格納する場合は、文字数の制限はありません。

注意:
制限マップでのディメンション階層のマッピングをサポートするためには、いくつかのアナリティック・ワークスペース・オブジェクトをワークスペース内で事前定義しておく必要があります。詳細は、「必須のOLAP DMLオブジェクト」を参照してください。

制限マップの構文には、主にディメンション階層を定義するために、多くの句があります。構文エラーがあると制限マップが解析されないため、カンマの有無に注意してください。

'[MEASURE column [AS datatype] FROM {measure | AW_EXPR expression}]
.
.
DIMENSION [column [AS datatype] FROM] dimension
[WITH
[HIERARCHY [column [AS datatype] FROM] parent_relation
[(hierarchy_dimension ''hierarchy_name'')]
[INHIERARCHY inhierarchy_obj]
[GID column [AS datatype] FROM gid_relation]
[PARENTGID column [AS datatype] FROM gid_relation]
[FAMILYREL column1 [AS datatype],
column2 [AS datatype],
... columnn [AS datatype]
FROM {expression1, expression2, ... expressionn |
family_relation USING level_dimension }
[LABEL label_variable]]
[HATTRIBUTE column [AS datatype] FROM hier_attribute_variable]
.
.
]
[ATTRIBUTE column [AS datatype] FROM attribute_variable]
.
.
]
[ROW2CELL column]
[LOOP  loop-clause]
[PREDMLCMD olap_command]
[POSTDMLCMD olap_command]'

説明:

columnは、ターゲット表の列の名前です。

datatypeは、columnのデータ型です。

measureは、アナリティック・ワークスペース内の変数、式またはリレーションです。

expressionは、アナリティック・ワークスペース内のオブジェクトに対する式または修飾データ参照です。

dimensionは、アナリティック・ワークスペース内のディメンションです。

parent_relationは、dimensionの階層を定義するアナリティック・ワークスペース内のセルフ・リレーションです。詳細は、「parentrelリレーション」を参照してください。

hierarchy_dimensionは、dimensionの階層の名前を含むアナリティック・ワークスペース内のディメンションです。詳細は、「hierlistディメンション」を参照してください。

hierarchy_nameは、hierarchy_dimensionのメンバーです。

inhierarchy_objは、階層の各レベルにどのディメンション・メンバーが属しているかを示すアナリティック・ワークスペース内の変数または値セットです。詳細は、「inhier値セットまたは変数」を参照してください。

gid_relationは、階層内の各ディメンション・メンバーのグルーピングIDを含むアナリティック・ワークスペース内のリレーションです。詳細は、「gidrelリレーション」を参照してください。

family_relationは、階層内の各ディメンション・メンバーの完全な親子関係を示すセルフ・リレーションです。詳細は、「familyrelリレーション」を参照してください。

level_dimensionは、階層のレベルの名前を含むアナリティック・ワークスペース内のディメンションです。詳細は、「levellistディメンション」を参照してください。

label_variableは、dimensionを説明するテキスト値を格納するアナリティック・ワークスペース内の変数です。

hier_attribute_variableは、hierarchy_nameの属性値を格納するアナリティック・ワークスペース内の変数です。

attribute_variableは、dimensionの属性値を格納するアナリティック・ワークスペース内の変数です。

loop_clauseには、データ値のループ処理およびリレーショナル表に作成する行をOracle OLAPがどのように決定するかを指定します。LOOP句を使用しない場合は、制限マップのDIMENSION句内のディメンションで識別されるすべてのデータ値がループされます。

LOOP句の構文の詳細は、「LOOP句」を参照してください。

olap_commandは、OLAP DMLコマンドです。

limit_mapパラメータの各句の構文について、次に詳しく説明します。

- MEASURE句

MEASURE句は、アナリティック・ワークスペース内の変数、式またはリレーションをターゲット表の列にマップします。MEASURE句はいくつでも指定できます。ディメンション・ビューを作成する場合などは、この句の指定は任意です。

AS副次句では、ターゲット列のデータ型を指定します。AS副次句は、オブジェクトの表が事前定義されていない場合に指定できます。「自動ADTを使用したOLAP_TABLEの使用」を参照してください。

FROM副次句では、変数、式またはリレーションの名前、あるいはこれらのオブジェクトの1つを評価するOLAP式のいずれかを指定できます。次に例を示します。

AW_EXPR analytic_cube_sales - analytic_cube_cost
or
AW_EXPR LOGDIF(analytic_cube_sales, 1, time, LEVELREL time.lvlrel)

- DIMENSION句

DIMENSION句には、1つ以上のメジャーや属性をディメンション化するアナリティック・ワークスペース内のディメンションまたは結合ディメンションを指定するか、制限マップの1つ以上の階層に対するディメンション・メンバーを指定します。

ディメンション・メンバー自体を表に含めないようにするときは、column副次句の指定は任意です。この場合は、データの選択に使用できるディメンション属性を含めてください。

AS副次句については、「MEASURE句」を参照してください。

制限マップには、少なくとも1つのDIMENSION句を必ず含めます。制限マップにMEASURE句を指定した場合は、ディメンションが1つの値に制限されていないかぎり、メジャーの各ディメンションに対してDIMENSION句を1つ指定する必要があります。メジャーがコンポジットによってディメンション化されている場合は、DIMENSION句を使用してコンポジットの各ディメンションを指定する必要があります。大量の結果セットをフェッチする際のパフォーマンスを最適化するには、LOOP句にコンポジットを指定します。「LOOP句」を参照してください。

1つのDIMENSION句に指定できるディメンションは1つのみです。DIMENSION句の副次句では、ディメンションの階層や属性を指定できます。

- ディメンションの階層および属性用のWITH副次句
WITH副次句は、HIERARCHYまたはATTRIBUTE副次句を導きます。階層または属性を指定しない場合は、WITHキーワードを省略します。階層と属性の両方を指定する場合は、これらの副次句の前にWITHキーワードを1つのみ使用します。

- WITH HIERARCHY副次句

HIERARCHY副次句には、ディメンションの階層を定義するアナリティック・ワークスペース内の親セルフ・リレーションを指定します。詳細は、「parentrelリレーション」を参照してください。

ディメンションに階層がない場合、またはディメンションのステータスが階層の1つのレベルに制限されている場合は、HIERARCHY副次句の指定は任意です。ディメンションに複数の階層がある場合は、各階層に対して1つのHIERARCHY副次句を指定し、さらにhierarchy_dimension句を指定します。hierarchy_dimensionには、このディメンションの階層の名前を含むアナリティック・ワークスペース内のディメンションを指定します。詳細は、「hierlistディメンション」を参照してください。

hierarchy_nameは、hierarchy_dimensionのメンバーです。hierarchy_dimensionは、その階層に対する後続の副次句(INHIERARCHY、GID、PARENTGID、FAMILYRELおよびHATTRIBUTE)で参照されるすべてのワークスペース・オブジェクトのhierarchy_nameに限定されます。

column副次句については、「DIMENSION句」を参照してください。

表A-1に、HIERARCHY副句のキーワードを示します。

表A-1 HIERARCHY副句のキーワード

キーワード

説明

INHIERARCHY

INHIERARCHY副次句には、階層の各レベルのディメンション・メンバーを示す、アナリティック・ワークスペース内のブール変数または値セットを指定します。詳細は、「inhier値セットまたは変数」を参照してください。

OLAP_TABLEは、制限マップの処理時に、INHIERARCHY副次句が指定されているすべてのディメンションのステータスを保存するため、INHIERARCHY副次句を指定することをお薦めします。階層から除外されているディメンション・メンバーがある場合は、必ず指定してください。

GID

GID副次句は、各ディメンション・メンバーのグルーピングIDを格納するアナリティック・ワークスペース内の整数値の変数を、ターゲット表の列にマップします。グルーピングID変数は、OLAP DML GROUPINGIDコマンドによって移入されます。詳細は、「gidrelリレーション」を参照してください。

OLAP APIを使用するJavaアプリケーションの場合、GID副次句は必須です。

AS副次句については、「MEASURE句」を参照してください。

PARENTGID

PARENTGID副次句は、アナリティック・ワークスペース内のGID変数を使用して親リレーションのグルーピングIDを計算します。親のGIDはアナリティック・ワークスペースに格納されていません。かわりに、GID句で使用したのと同じGID変数をPARENTGID句に指定します。OLAP APIを使用するJavaアプリケーションの場合は、PARENTGID句を指定してください。

AS副次句については、「MEASURE句」を参照してください。

FAMILYREL

FAMILYREL句は、主に、アナリティック・ワークスペース内のファミリ・リレーションをターゲット表の複数の列にマップするために使用します。詳細は、「familyrelリレーション」を参照してください。各階層に対して複数のFAMILYREL句を使用できます。

これらの列は、level_dimension(アナリティック・ワークスペース内にある、すべてのディメンション・レベルの名前を格納しているディメンション)の順序に従って指定します。詳細は、「levellistディメンション」を参照してください。

特定のレベルを除外するには、対象の列にNULLを指定します。AS副次句については、「MEASURE句」を参照してください。

LABELキーワードには、ディメンション・メンバーについてわかりやすい名前を表すテキスト属性を指定します。

FAMILYREL句によって返される表形式のデータは、ロールアップ形式で表されますが、つまり、階層の各レベルは別々の列で表され、各ディメンション・メンバーの完全な親子関係が、行内で表現されます。例A-7「OLAP_TABLEを使用してPRODUCTのロールアップ・ビューを作成するスクリプト」を参照してください。

HATTRIBUTE

HATTRIBUTE副次句は、アナリティック・ワークスペース内のhierarchy_dimensionによってディメンション化される階層固有の属性変数を、ターゲット表の列にマップします。

- WITH ATTRIBUTE副次句
ATTRIBUTE副次句は、アナリティック・ワークスペース内の属性変数をターゲット表の列にマップします。

attribute_variableに複数のディメンションがある場合、dimensionについてはすべてのメンバーに関して値のマッピングが行われますが、その他のディメンションについては現在のステータスにある最初のメンバーに関してのみマッピングが行われます。たとえば、複数の属性に言語ディメンションがある場合、そのディメンションのステータスを特定の言語に設定する必要があります。ディメンションのステータスは、PREDMLCMDで設定できます。

- ROW2CELL句

ROW2CELL句は、文字長が16から32のRAW列をターゲット表に作成し、OLAP_EXPRESSIONファンクションで使用される情報をその列に移入します。ROW2CELL列はOLAP_CONDITIONファンクションでも使用されます。これらのファンクションで使用されるビューを作成するときに、ROW2CELL列を指定する必要があります。「SELECT FROM OLAP_TABLE文でのOLAP DML式の使用」および「リレーショナル・ビューへの計算された列の追加」を参照してください。

- LOOP句

LOOP句には、値の取得時にOracle OLAPがどのようにデータをループするかを指定します。制限マップでLOOP句を省略すると、Oracle OLAPはその制限マップのDIMENSION句を使用して、ループする値を決定します。Oracle OLAPはNAまたはnullを含まないメジャー・セルを識別するタプルのみをループします。LOOP句を含める場合、次のタイプの副句のいずれかを指定します。optimized_subclauseまたはunion_subclause。

optimized_subclauseを指定すると、Oracle OLAPによってunion_subclauseが自動的に作成され、これを基にデータがループされます。作成されたunion_subclauseにはDENSE句は含まれません。したがって、optimized_subclauseを指定したときは、NAでもNULLでもないメジャー・セルであるタプルのみがループ対象となります。optimized_subclauseの構文は次のとおりです。

OPTIMIZED [MEASURES]

オプションのMEASURESキーワードを指定すると、Oracle OLAPは、ループ対象のタプルを特定した後、制限マップのMEASURES句に指定されたオブジェクトのディメンションではないディメンションの値を削除します。

ヒント:
$LOOP_AGGMAP、$LOOP_DENSEおよび$LOOP_VARプロパティを使用すると、OLAP_TABLEによる式のループ処理についてより詳しく指定できます。

union_subclauseでは、Oracle OLAPがループ対象のデータ値を識別するために使用するベース・ディメンションをどのように決定するかを正確に指定します。正確な結合が行われるためには、この副次句で参照されるオブジェクトのベース・ディメンションが一致する必要があります。union_subclauseの構文は次のとおりです。

[ignore_phrase] [dense_phrase] UNION ({aggmap_phrase | list_phrase }...)]

ここで、

aggmap_phraseにはOracle OLAPで集計変数の値をどのようにループするかを指定します。構文は次のとおりです。

AGGMAP (ignore_phrase] [dense_phrase] aggmap {variable | dimension_list})

list_phraseには、Oracle OLAPでコンポジット、パーティション・テンプレートまたはディメンションの値をどのようにループするかを指定します。構文は次のとおりです。

LIST ([ignore_phrase] [dense_phrase] dimension_list)

- ignore_phraseには、Oracle OLAPでループの対象外にするディメンション値を指定します。構文は次のとおりです。
IGNORE (ignore_list )

ignore_listには、次のいずれか1つ以上を(複数の場合はカンマで区切って)指定できます。

dimension_name
valueset_name
COMPLEMENT (valueset_name)

単独のignore_list内には、複数の方法でのディメンションの指定はできません。つまり、あるディメンションとそのディメンションの値セットを両方とも指定したり、1つのディメンションにつき2つの値セットを指定したりすることはできません。

注意:
IGNORE valueset-nameを指定した場合の結果は、LIMIT REMOVE valueset-nameを指定した場合と同様になります(LIMITコマンドを参照)。

- dense_phraseには、Oracle OLAPでループの対象となる値を指定します(その値によって識別されるメジャー・セルにNAまたはNULLが含まれる場合でもループ対象となります)。DENSE句にディメンションを指定するのは、リレーショナルの外部結合を要求することと似ています。通常は、時系列処理を実行するために(期間の相対位置を変更する場合など)、DENSE句にディメンション値を含めます。DENSE句の構文は次のとおりです。
DENSE (dense_list )

dense_listには、次のいずれか1つ以上を(複数の場合はカンマで区切って)指定できます。

dimension_name
valueset_name
COMPLEMENT (valueset_name)

単独のdense_list内には、複数の方法でのディメンションの指定はできません。つまり、あるディメンションとそのディメンションの値セットを両方とも指定したり、1つのディメンションにつき2つの値セットを指定したりすることはできません。

ただし、外側のDENSE句にディメンションの値セットを1つ指定し、内側のDENSEに同じディメンションの別の値セットを指定することは可能です。ディメンションまたはディメンションの値セットを、内側と外側両方のDENSE句に指定すると、Oracle OLAPはこの稠密な領域の結合全体をループします。ディメンション自体がどちらかの領域に現れた場合は、ディメンション全体を隈なくループします。

- aggmapはaggmapオブジェクトの名前です。aggmapオブジェクトの名前のみを指定した場合、Oracle OLAPはそのaggmapのPRECOMPUTE句の値を基にしてループ対象の値を特定します。

- variableはaggmap_nameによって集計される変数の名前です。

- dimension_listは1つ以上のコンポジット、パーティション・テンプレートまたはディメンションのリストです。

- PREDMLCMD句
PREDMLCMD句には、アナリティック・ワークスペースのデータがターゲット表にフェッチされる前に実行されるOLAP DMLコマンドを指定します。たとえば、結果が表にフェッチされるOLAPモデルまたは予測を実行する場合に使用できます。コマンドの結果は、制限マップを実行している間有効で、OLAP_TABLEの実行が完了した後のセッションにも引き継がれます。「OLAP_TABLEにおける処理順序」を参照してください。

- POSTDMLCMD句
POSTDMLCMD句には、アナリティック・ワークスペースのデータがターゲット表にフェッチされた後に実行されるOLAP DMLコマンドを指定します。たとえば、PREDMLCMD句のコマンドによって作成されたオブジェクトまたはデータを削除する場合や、PREDMLCMD句で変更されたディメンションのステータスをリストアする場合に使用できます。「OLAP_TABLEにおける処理順序」を参照してください。

使用上の注意

制限マップ

OLAP_TABLEは、制限マップを使用して、アナリティック・ワークスペース内で定義されているディメンションやメジャーを、論理表の列にマップします。制限マップとSQL SELECT文のWHERE句が組み合されて、アナリティック・ワークスペース内で実行される一連のOLAP DML LIMITコマンドが生成されます。

OLAP_TABLEでは、制限マップと事前定義された論理表を一緒に使用したり、制限マップの情報を使用して実行時に論理表を動的に生成したりできます。

関連項目:
limit_mapパラメータに関する説明

論理表

OLAP_TABLEによって移入される論理表は、実際には表型です。また、その行は、抽象データ型またはADTとも呼ばれるユーザー定義のオブジェクト型です。

ユーザー定義のオブジェクト型は、表の各列に相当する属性で構成されます。行を定義するための基本的な構文は次のとおりです。

CREATE TYPE object_name AS OBJECT (
attribute1      datatype,
attribute2      datatype,
attributen      datatype);

表型はオブジェクト型の集合で、この集合は表の各行に相当します。表型を作成するための基本的な構文は次のとおりです。

CREATE TYPE table_name AS TABLE OF object_name;

関連項目:

- オブジェクト型については、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。

- 『Oracle Database SQL言語リファレンス』のCREATE TYPEに関する項

事前定義されたADTを使用したOLAP_TABLEの使用

オブジェクトを格納する表は、事前に定義することも、動的に生成することもできます。表型を事前にデータベース内に作成しておけば、その表はOLAP_TABLEをコールしたときにいつでも使用できます。一般に、動的にオブジェクトを生成する問合せよりも、事前定義されたオブジェクトを使用する問合せの方がパフォーマンスに優れています。「事前定義されたADTを使用したOLAP_TABLEの使用」を参照してください。

自動ADTを使用したOLAP_TABLEの使用

表型の名前が引数として指定されていない場合、OLAP_TABLEは、制限マップの情報を使用して自動的に論理表を生成します。この場合、その表型は、SQL SELECT文をコールするコンテキスト内で、実行時にしか使用できません。「自動ADTを使用したOLAP_TABLEの使用」を参照してください。

ユーザーが制限マップのAS句でデータ型を指定しなかった場合、OLAP_TABLEがADTを自動生成する際にはターゲット列に対してデフォルトのリレーショナル・データ型が使用されます。表A-2に、OLAP_TABLEで使用されるデフォルトのデータ型変換を示します。

表A-2 デフォルトのデータ型変換

アナリティック・ワークスペースのデータ型

SQLデータ型

ID

CHAR(8)

TEXT

VARCHAR2(4000)

TEXT(n)

VARCHAR2(n)

NTEXT

NVARCHAR2(4000)

NTEXT(n)

NVARCHAR2(n)

NUMBER

NUMBER

NUMBER(p,s)

NUMBER(p,s)

LONGINTEGER

NUMBER(19)

INTEGER

NUMBER(10)

SHORTINTEGER

NUMBER(5)

INTEGER WIDTH 1

NUMBER(3)

BOOLEAN

NUMBER(1)

DECIMAL

BINARY_DOUBLE

SHORTDECIMAL

BINARY_FLOAT

DATE

DATE

DAY、WEEK、MONTH、QUARTER、YEAR

DATE

DATETIME

TIMESTAMP

COMPOSITE

VARCHAR2(4000)

その他

VARCHAR2(4000)

olap_commandでの制限マップの使用

OLAP_TABLEの実行中に、アプリケーションでアナリティック・ワークスペースを即時に変更することが必要となる場合があります。

通常、olap_commandパラメータは、1つ以上のディメンションを制限するために使用します。制限マップでINHIERARCHY句を含むディメンションを制限する場合、該当するディメンションのステータスは、OLAP_TABLEコールの実行時にのみ変更されますが、この制限は、OLAPセッションの他の部分には影響しません。ただし、その他のコマンド(INHIERARCHY句で参照されていないディメンションを制限するコマンドなど)はセッションに影響します。

制限マップでのディメンションに対する制限を、コマンド実行時以外でもセッション全体を通して有効にするには、制限マップのPREDMLCMD句にそのコマンドを指定するか、またはSQL SELECT文にOLAP_CONDITIONファンクションを指定します。

olap_commandパラメータでLIMITコマンドを使用する例を次に示します。

'LIMIT product TO product_member_levelrel ''L2'''

関連項目:
「OLAP_CONDITION」

olap_commandパラメータでのFETCHの使用

olap_commandパラメータにOLAP DML FETCHコマンドを指定すると、OLAP_TABLEでは、制限マップでの指定ではなくこのコマンドを使用して、表オブジェクトのソース・データをフェッチします。このような使用方法から、olap_commandパラメータはデータ・マップと呼ばれることもあります。通常、FETCHコマンドを指定する場合は、制限マップを指定しないでください。

注意:
通常、SNAPI用にFETCHコマンドを使用していたExpressアプリケーションをアップグレードする場合にのみ、OLAP_TABLEでFETCHコマンドを使用します。アップグレードする場合、Oracleでの完全な構文はExpress 6.3の構文と同じです。SNAPIで従来使用していたのと同じFETCHコマンドを、OLAP_TABLEでも使用できます。FETCHコマンドの構文については、「FETCH」を参照してください。

FETCHでは、アナリティック・ワークスペースのデータをどのように表オブジェクトにマップするかを明示的に指定します。基本の構文は次のとおりです。

FETCH expression...

各ターゲット列に対し1つの式を、行定義に指定されているとおりの順序で入力します。式は、空白またはカンマで区切ります。改行や継続マークを付けずに、文全体を1行で入力する必要があります。

関連項目:
「olap_commandパラメータでのFETCHの使用」

OLAP_TABLEにおける処理順序

アナリティック・ワークスペースのディメンションのステータスを変更する制限マップ内の指定について、OLAP_TABLEファンクションが処理する順序を次に示します。

1. 制限マップのPREDMLCMDパラメータに指定されているOLAP DMLコマンドを実行します。

2. 後でリストアできるように、制限マップのすべてのディメンションの現在のステータスを保存します(ステータスのPUSH)。

3. 制限マップのINHIERARCHY副次句で指定されているディメンション・メンバーのみステータスを保持します(LIMIT KEEP)。

4. 手順3で設定されたステータスのうち、OLAP_TABLEファンクションを含むSELECT文のWHERE句の条件を満たすディメンション・メンバーのみを保持します(LIMIT KEEP)。

5. OLAP_TABLEファンクションのolap_commandパラメータに指定されているOLAP DMLコマンドを実行します。(olap_commandにFETCHが含まれている場合は、データをフェッチします。)

6. データをフェッチします(olap_commandパラメータにOLAP DML FETCHコマンドが指定されていなかった場合)。

7. 制限マップ内のすべてのディメンションのステータスをリストアします(ステータスのPOP)。

8. 制限マップのPOSTDMLCMDパラメータに指定されているOLAP DMLコマンドを実行します。

例

アプリケーションにはそれぞれ固有の要件があるため、アナリティック・ワークスペースのデータをSQLにフェッチする方法としていくつかの一般的な形式があります。この項の例では、様々な形式を使用してビューを作成する方法を紹介します。

これらの例はビューの作成用として示されていますが、例の中のSELECT文は、アナリティック・ワークスペースのデータをアプリケーションにフェッチするためにそのまま使用できます。

注意:
この項の例では、事前定義されたADTを使用しています。自動ADTを使用するようにコードを修正することもできます。「自動ADTを使用したOLAP_TABLEの使用」を参照してください。

例A-5 OLAP_TABLEを使用して埋込み合計のディメンション・ビューを作成するスクリプト

この例のスクリプトは、MYAWというアナリティック・ワークスペースのTIMEディメンションの埋込み合計ビューを作成するPL/SQLスクリプトです。この例は、例A-2「事前定義されたADTを使用するTIMEディメンションのサンプル・ビュー」と似ていますが、ここではCalendar階層とFiscal階層を指定し、階層固有のEnd Date属性に対してHATTRIBUTE副次句を指定しています。

INHIERARCHY副次句には、ディメンションの各階層のすべてのディメンション・メンバーを示す、アナリティック・ワークスペース内の値セットを指定しています。OLAP_TABLEは、制限マップの処理時に、INHIERARCHY副次句が指定された制限マップ内のすべてのディメンションのステータスを保存します。「OLAP_TABLEにおける処理順序」を参照してください。

CREATE TYPE awtime_row AS OBJECT (
awtime_id               VARCHAR2(12),
awtime_short_label      VARCHAR2(12),
awtime_cal_end_date     DATE,
awtime_fis_end_date     DATE);
/
CREATE TYPE awtime_table AS TABLE OF awtime_row;
/
CREATE OR REPLACE VIEW awtime_view AS
SELECT awtime_id, awtime_short_label,
awtime_cal_end_date, awtime_fis_end_date
FROM TABLE(OLAP_TABLE(
'myaw DURATION SESSION',
'awtime_table',
'',
'DIMENSION awtime_id FROM time WITH
HIERARCHY time_parentrel
(time_hierlist ''CALENDAR'')
INHIERARCHY time_inhier
HATTRIBUTE awtime_cal_end_date  FROM time_cal_end_date
HIERARCHY time_parentrel
(time_hierlist ''FISCAL'')
INHIERARCHY time_inhier
HATTRIBUTE awtime_fis_end_date  FROM time_fis_end_date
ATTRIBUTE awtime_short_label  FROM time_short_description'));
/
SQL>SELECT * FROM awtime_view;

AWTIME_ID  AWTIME_SHORT_LABEL  AWTIME_CAL_END_DATE  AWTIME_FIS_END_DATE
---------  ------------------  -------------------  -------------------
19         Jan-98              31-JAN-98            31-JAN-98
20         Feb-98              28-FEB-98            28-FEB-98
21         Mar-98              31-MAR-98            31-MAR-98
22         Apr-98              30-APR-98            30-APR-98
23         May-98              31-MAY-98            31-MAY-98
24         Jun-98              30-JUN-98            30-JUN-98
.
.
.
.
98         Q1-03               31-MAR-03            30-SEP-03
99         Q2-03               30-JUN-03            31-DEC-03
1          1998                31-DEC-98            30-JUN-99
102        2003                31-DEC-03            30-JUN-04
119        2004                31-DEC-04            30-JUN-05
2          1999                31-DEC-99            30-JUN-00
3          2000                31-DEC-00            30-JUN-01
4          2001                31-DEC-01            30-JUN-02
85         2002                31-DEC-02            30-JUN-03

作成されたビューに対してSELECT文を発行し、そのビューが正しく作成されたかどうか確認してください。OLAP_TABLEコールにエラーがあった場合は、このときにそのエラーが表示されます。

例A-6 OLAP_TABLEを使用して埋込み合計のメジャー・ビューを作成するスクリプト

スター・スキーマには、各ディメンション・ビューに結合可能な列を持つ個別のメジャー・ビューが必要です。この例では、ROW2CELL句によって移入された列を持つ、カスタム・メジャーをサポートするためのメジャー・ビューを作成するPL/SQLスクリプトを示します。ROW2CELLについては、「ROW2CELL句」を参照してください。

CREATE TYPE awunits_row AS OBJECT (
awtime                  VARCHAR2(12),
awcustomer              VARCHAR2(30),
awproduct               VARCHAR2(30),
awchannel               VARCHAR2(30),
awunits                 NUMBER(16),
r2c                     RAW(32));
/
CREATE TYPE awunits_table AS TABLE OF awunits_row;
/
CREATE OR REPLACE VIEW awunits_view AS
SELECT awunits,
awtime, awcustomer, awproduct, awchannel, r2c
FROM TABLE(OLAP_TABLE(
'myaw DURATION SESSION',
'awunits_table',
'',
'MEASURE awunits FROM units_cube_units
DIMENSION awtime FROM time WITH
HIERARCHY time_parentrel
DIMENSION awcustomer FROM customer WITH
HIERARCHY customer_parentrel
(customer_hierlist ''MARKET_ROLLUP'')
INHIERARCHY customer_inhier
DIMENSION awproduct FROM product WITH
HIERARCHY product_parentrel
DIMENSION channel WITH
HIERARCHY channel_parentrel
ATTRIBUTE  awchannel FROM channel_short_description
ROW2CELL r2c'))
WHERE awunits IS NOT NULL;

SQL>SELECT awchannel, awunits FROM awunits_view
WHERE    awproduct = '1'
AND      awcustomer = '7'
AND      awtime = '4';

AWCHANNEL            AWUNITS
---------            -------
All Channels         415392
Direct Sales         43783
Catalog              315737
Internet             55872

例A-7 OLAP_TABLEを使用してPRODUCTのロールアップ・ビューを作成するスクリプト

ロールアップ形式では、各階層レベルの列を使用して、各ディメンション・メンバーの完全な親子関係が表されます。ロールアップ形式の構文と埋込み合計形式の構文の唯一の違いは、制限マップ内の各ディメンションの定義にFAMILYREL句が追加されることです。FAMILYRELについては、「WITH HIERARCHY副次句」を参照してください。

この例は、PRODUCTディメンションのロールアップ形式のビューを作成するためのPL/SQLスクリプトを示します。ここでは、例A-5「OLAP_TABLEを使用して埋込み合計のディメンション・ビューを作成するスクリプト」の埋込み合計形式で使用した構文と制限マップの構文との違いを明らかにするためのディメンション・ビューが示されています。これらのレベルに対応するターゲット列は、最大集計レベル(CLASS)から最小集計レベル(ITEM)の順でFAMILYREL句に列記されていますが、これは、levellistディメンションにリストされる順序です。このファミリ・リレーションは、4つの列を返します。最大集計レベル(全商品)はNULLにマッピングされ、ビューでは省略されます。

例A-8「OLAP_TABLEのFAMILYREL句でQDRを使用するスクリプト」では、FAMILYREL句に対して別の構文を使用しています。この構文では、QDRを使用して、ファミリ・リレーションからマップされる各列を正確に指定しています。

例A-7と例A-8の制限マップは、まったく同じビューを生成します。

CREATE TYPE awproduct_row AS OBJECT (
class       VARCHAR2(50),
family      VARCHAR2(50),
item        VARCHAR2(50));
/
CREATE TYPE awproduct_table AS TABLE OF awproduct_row;
/
CREATE OR REPLACE VIEW awproduct_view AS
SELECT class, family, item
FROM TABLE(OLAP_TABLE(
'myaw DURATION QUERY',
'awproduct_table',
'',
'DIMENSION product WITH
HIERARCHY product_parentrel
FAMILYREL null, class, family, item
FROM product_familyrel USING product_levellist
LABEL product_short_description'));

SQL> SELECT * FROM awproduct_view
ORDER BY class, family, item;

CLASS            FAMILY             ITEM
--------------   ----------------   ------------------------
Hardware          CD-ROM             Envoy External 6X CD-ROM
Hardware          CD-ROM             Envoy External 8X CD-ROM
Hardware          CD-ROM             External 6X CD-ROM
Hardware          CD-ROM             External 8X CD-ROM
Hardware          CD-ROM             Internal 6X CD-ROM
Hardware          CD-ROM             Internal 8X CD-ROM
Hardware          CD-ROM
Hardware          Desktop PCs        Sentinel Financial
Hardware          Desktop PCs        Sentinel Multimedia
.
.
.
Software/Other   Operating Systems  UNIX/Windows 1-user pack
Software/Other   Operating Systems  UNIX/Windows 5-user pack
Software/Other   Operating Systems
Software/Other

例A-8 OLAP_TABLEのFAMILYREL句でQDRを使用するスクリプト

CREATE OR REPLACE TYPE awproduct_row AS OBJECT (
class       VARCHAR2(50),
family      VARCHAR2(50),
item        VARCHAR2(50));
/
CREATE TYPE awproduct_table AS TABLE OF awproduct_row;
/
CREATE OR REPLACE VIEW awproduct_view AS
SELECT class, family, item
FROM TABLE(OLAP_TABLE(
'myaw DURATION QUERY',
'awproduct_table',
'',
'DIMENSION product WITH
HIERARCHY product_parentrel
FAMILYREL class, family, item FROM
product_familyrel(product_levellist ''CLASS''),
product_familyrel(product_levellist ''FAMILY''),
product_familyrel(product_levellist ''ITEM'')
LABEL product_short_description'));

SQL> SELECT * FROM awproduct_view
ORDER BY by class, family, item;

CLASS            FAMILY             ITEM
--------------   ----------------   ------------------------
Hardware          CD-ROM             Envoy External 6X CD-ROM
Hardware          CD-ROM             Envoy External 8X CD-ROM
Hardware          CD-ROM             External 6X CD-ROM
Hardware          CD-ROM             External 8X CD-ROM
Hardware          CD-ROM             Internal 6X CD-ROM
Hardware          CD-ROM             Internal 8X CD-ROM
Hardware          CD-ROM
Hardware          Desktop PCs        Sentinel Financial
Hardware          Desktop PCs        Sentinel Multimedia
.
.
.
Software/Other   Operating Systems  UNIX/Windows 1-user pack
Software/Other   Operating Systems  UNIX/Windows 5-user pack
Software/Other   Operating Systems
Software/Other

例A-9 OLAP_TABLEでFETCHを使用するスクリプト

Oracle Databaseと連携するように変更されているOracle OLAP Serverアプリケーションでは、制限マップのかわりにOLAP DML FETCHコマンドを使用して、ワークスペース・オブジェクトをリレーショナル列にマップできます。

FETCHコマンドはOLAP_TABLEの3番目のパラメータに指定し、このパラメータでは、OLAP DMLコマンドを1つ指定します。olap_commandを参照してください。

次のスクリプトは、MYAWアナリティック・ワークスペース内の2つの変数(SALESとCOST)からデータをフェッチして、2つのカスタム・メジャー(COST_PRIOR_PERIODとPROFIT)を計算します。この例では、ビューを作成せずにアプリケーションで直接OLAP_TABLEを使用する方法も示します。

次の例のFETCH文は、見やすくするためにインデントされています。実際にはFETCH文全体を1行で記述し、改行や継続記号は使用しないでください。

CREATE TYPE measure_row AS OBJECT (
time                       VARCHAR2(20),
geography                  VARCHAR2(30),
product                    VARCHAR2(30),
channel                    VARCHAR2(30),
sales                      NUMBER(16),
cost                       NUMBER(16),
cost_prior_period          NUMBER(16),
profit                     NUMBER(16));
/
CREATE TYPE measure_table AS TABLE OF measure_row;
/
SELECT time, geography, product, channel,
sales, cost, cost_prior_period, profit
FROM TABLE(OLAP_TABLE(
'xademo DURATION SESSION',
'measure_table',
'FETCH time, geography, product, channel, analytic_cube_f.sales,
analytic_cube_f.costs,
LAG(analytic_cube_f.costs, 1, time, LEVELREL time_member_levelrel),
analytic_cube_f.sales - analytic_cube_f.costs',
''))
WHERE channel =    'STANDARD_2.TOTALCHANNEL' AND
product =    'L1.TOTALPROD' AND
geography =  'L1.WORLD'
ORDER BY time;

このSQL SELECT文は、次の結果セットを返します。

TIME      GEOGRAPHY PRODUCT      CHANNEL                 SALES       COST    COST_PRIOR_PERIOD    PROFIT
--------- --------- ------------ ----------------------- --------- --------- ------------------ --------
L1.1996   L1.WORLD  L1.TOTALPROD STANDARD_2.TOTALCHANNEL 118247112   2490243                   115756869
L1.1997   L1.WORLD  L1.TOTALPROD STANDARD_2.TOTALCHANNEL  46412113   1078031          2490243   45334082
L2.Q1.96  L1.WORLD  L1.TOTALPROD STANDARD_2.TOTALCHANNEL  26084848    560379                    25524469
L2.Q1.97  L1.WORLD  L1.TOTALPROD STANDARD_2.TOTALCHANNEL  26501765    615399           560379   25886367
L2.Q2.96  L1.WORLD  L1.TOTALPROD STANDARD_2.TOTALCHANNEL  30468054    649004           615399   29819049
L2.Q2.97  L1.WORLD  L1.TOTALPROD STANDARD_2.TOTALCHANNEL  19910347    462632           649004   19447715
L2.Q3.96  L1.WORLD  L1.TOTALPROD STANDARD_2.TOTALCHANNEL  27781702    582693           462632   27199009
L2.Q4.96  L1.WORLD  L1.TOTALPROD STANDARD_2.TOTALCHANNEL  33912508    698166           582693   33214342
L3.APR96  L1.WORLD  L1.TOTALPROD STANDARD_2.TOTALCHANNEL   8859808    188851                     8670957
.
.
.
27 rows selected.

OLAP_CONDITION

OLAP_CONDITIONは、アナリティック・ワークスペースの問合せ中にOLAP DMLコマンドを動的に実行するSQLファンクションです。

関連項目:

- OLAP_TABLEおよび「SELECT FROM OLAP_TABLE文からのアナリティック・ワークスペースの変更」

OLAP_CONDITIONファンクションは、OLAP_TABLEのコールで使用される制限マップの3つの入力ポイントのうちの1つでOLAP DMLコマンドを実行します(「OLAP_TABLE制限マップ内のOLAP_CONDITIONの入力ポイント」を参照)。

注意:
OLAPワークシート内からはこのファンクションを実行できません。SQLワークシートなどのSQLツール内で実行してください。

戻り値

OLAP_CONDITIONの呼出しが成功した場合、数値1が返されます。

構文

OLAP_CONDITION(
r2c          IN   RAW(32),
expression   IN   VARCHAR2,
event        IN   NUMBER DEFAULT 1);
RETURN NUMBER;

パラメータ

r2c

制限マップのROW2CELL句で指定された列の名前。このパラメータは、OLAP_TABLEの特定の呼出しを識別するためにOLAP_CONDITIONによって使用されます。

ROW2CELL列は、単一行ファンクションの処理で使用されます。(「OLAP_EXPRESSION」を参照) OLAP_CONDITIONでは、単に識別子として使用されます。

ROW2CELL列の作成方法については、「ROW2CELL句」を参照してください。

expression

r2cパラメータによって特定される、OLAP_TABLEファンクションのコンテキスト内で実行される単独のOLAP DMLコマンド。

event

OLAP_TABLEの処理中に、expressionパラメータで指定されたOLAP DMLコマンドの実行をトリガーするイベント。このパラメータに指定できる値は、0、1または2です(表A-3を参照)。

使用上の注意

OLAP_TABLE制限マップ内のOLAP_CONDITIONの入力ポイント

OLAP_CONDITIONのパラメータでは、OLAP_TABLEの呼出し、制限マップの入力ポイント、その入力ポイントで実行されるOLAP DMLコマンドが特定されます。

対象の制限マップにはROW2CELL列を含める必要があります。OLAP_CONDITIONは、この列を使用してOLAP_TABLEのインスタンスを識別します。そのインスタンス内で、OLAP_CONDITIONは3つの入力ポイントのいずれかでOLAP DMLコマンドを実行します。ユーザーが指定した入力ポイントによって、問合せで返されたデータに条件が影響するかどうか、および問合せの完了時にも条件が有効なままかどうかが決まります。

OLAP_CONDITIONは、次のいずれかの時点でトリガーされます。

- 制限マップ内のディメンションのステータスが保存される前(結果セットが計算される前)

- 結果セットが計算された後、フェッチされる前(デフォルト)

- 結果セットがフェッチされ、制限マップ内のディメンションのステータスがリストアされた後

OLAP_CONDITIONの入力ポイントを表A-3で説明します。各入力ポイントの発生時点を確認するには、「OLAP_TABLEにおける処理順序」を参照してください。

表A-3 OLAP_TABLE制限マップ内のOLAP_CONDITIONの入力ポイント

入力ポイント

説明

0

制限マップのPREDMLCMD句が処理された後、制限マップ内のディメンションのステータスが保存される前に、OLAP DMLコマンドを実行する。

この入力ポイントは、「OLAP_TABLEにおける処理順序」の1と2の間。

OLAP_CONDITIONが制限マップのいずれかのディメンションを制限する場合、その制限はOLAP_TABLEの実行後もワークスペースに維持される(ただし、制限マップのPOSTDMLCMD句に指定したコマンドによってステータスが変更されない場合)。

1

WHERE句の条件が満たされた後、データがフェッチされる前に、OLAP DMLコマンドを実行する。(デフォルト。)

この入力ポイントは、「OLAP_TABLEにおける処理順序」の4と5の間。

FETCH以外のOLAP DMLコマンドをOLAP_TABLEのolap_commandパラメータに指定した場合は、OLAP_CONDITIONの後、データがフェッチされる前に実行される。(olap_commandパラメータ、またはOLAP_CONDITION自体にFETCHコマンドを使用することは、一般的にはお薦めされない。「olap_commandパラメータでのFETCHの使用」を参照。)

OLAP_CONDITIONが制限マップのいずれかのディメンションを制限する場合、その制限は問合せの実行中のみ有効。

2

データがフェッチされ、制限マップ内のディメンションのステータスがリストアされた後に、OLAP DMLコマンドを実行する。

この入力ポイントは、「OLAP_TABLEにおける処理順序」の8の後。

OLAP_CONDITIONがいずれかのディメンションを制限する場合、その制限は問合せが完了した後もアナリティック・ワークスペースに維持される。

例

OLAP_CONDITIONを使用する問合せの例を、例A-11「OLAP_CONDITIONを使用したUNIT_COST_PRICE_VIEWの問合せ」に示します。これらの例では、MYAWというアナリティック・ワークスペースのPRICE_CUBEを使用しています。このキューブには、時間ディメンションと製品ディメンションがあり、単位原価と単位価格のメジャーが格納されています。

これらの例は、unit_cost_price_viewというビューを基にしています。このビューを作成するためのSQLを、例A-10「PRICE_CUBEのビュー」に示します。アナリティック・ワークスペースのビューの作成方法については、「OLAP_TABLEを使用したリレーショナル・ビューの作成」を参照してください。

例A-10 PRICE_CUBEのビュー

-- Create the logical row
SQL>CREATE TYPE unit_cost_price_row AS OBJECT (
aw_unit_cost          NUMBER,
aw_unit_price         NUMBER,
aw_product            VARCHAR2(50),
aw_product_gid        NUMBER(10),
aw_time               VARCHAR2(20),
aw_time_gid           NUMBER(10),
r2c                   RAW(32));

-- Create the logical table
SQL>CREATE TYPE unit_cost_price_table AS TABLE OF unit_cost_price_row;

-- Create the view
SQL>CREATE OR REPLACE VIEW unit_cost_price_view AS
SELECT aw_unit_cost, aw_unit_price, aw_product, aw_product_gid,
aw_time, aw_time_gid, r2c
FROM TABLE(OLAP_TABLE(
'myaw DURATION SESSION',
'unit_cost_price_table',
'',
'MEASURE aw_unit_cost  FROM price_cube_unit_cost
MEASURE aw_unit_price FROM price_cube_unit_price
DIMENSION product WITH
HIERARCHY product_parentrel
INHIERARCHY product_inhier
GID aw_product_gid FROM product_gid
ATTRIBUTE aw_product FROM product_short_description
DIMENSION time WITH
HIERARCHY time_parentrel
INHIERARCHY time_inhier
GID aw_time_gid FROM time_gid
ATTRIBUTE aw_time FROM time_short_description
ROW2CELL r2c'));

-- query the view
SQL>SELECT * FROM unit_cost_price_view
WHERE aw_product = 'Hardware'
AND aw_time in ('2000', '2001', '2002', '2003')
ORDER BY aw_time;

AW_UNIT_COST AW_UNIT_PRICE AW_PRODUCT AW_PRODUCT_GID AW_TIME AW_TIME_GID R2C
------------ ------------- ---------- -------------- ------- ----------- -----
211680.12    224713.71  Hardware                3 2000             3  00...
195591.60    207513.16  Hardware                3 2001             3  00...
184413.05    194773.78  Hardware                3 2002             3  00...
73457.31     77275.06  Hardware                3 2003             3  00...

例A-11 OLAP_CONDITIONを使用したUNIT_COST_PRICE_VIEWの問合せ

この例の問合せでは、OLAP_CONDITIONを使用して、例A-10「PRICE_CUBEのビュー」のUNIT_COST_PRICE_VIEWの問合せを変更します。それぞれの問合せのOLAP_CONDITIONでは、異なる入力ポイントを使用してTIMEディメンションを2000年に制限しています。

最初の問合せでは、OLAP_CONDIITONで入力ポイント0を使用しています。制限されたデータがOLAP_TABLEによって返され、この制限はアナリティック・ワークスペースでも有効なままです。

SQL>SELECT * FROM unit_cost_price_view
WHERE aw_product = 'Hardware'
AND aw_time in ('2000', '2001', '2002', '2003')
AND OLAP_CONDITION(r2c,
'limit time to time_short_description eq ''2000''', 0)=1
ORDER BY aw_time;

AW_UNIT_COST AW_UNIT_PRICE AW_PRODUCT AW_PRODUCT_GID AW_TIME AW_TIME_GID R2C
------------ ------------- ---------- -------------- ------- ----------- -----
211680.12    224713.71  Hardware                3 2000             3  00...

--Check status in the analytic workspace
SQL>exec dbms_aw.execute('rpr time_short_description');

TIME     TIME_SHORT_DESCRIPTION
----     ----------------------
3      2000

-- Reset status
SQL>exec dbms_aw.execute('allstat');

次の問合せでは、OLAP_CONDIITONで入力ポイント1を使用しています。制限されたデータがOLAP_TABLEによって返されますが、この制限はアナリティック・ワークスペースでは有効ではありません。

この場合、入力ポイント1がデフォルトであるため、3番目のパラメータは指定しなくてもかまいません。

SQL>SELECT * FROM unit_cost_price_view
WHERE aw_product = 'Hardware'
AND aw_time in ('2000', '2001', '2002', '2003')
AND OLAP_CONDITION(r2c,
'limit time to time_short_description eq ''2000''', 1)=1
ORDER BY aw_time;

AW_UNIT_COST AW_UNIT_PRICE AW_PRODUCT AW_PRODUCT_GID AW_TIME AW_TIME_GID R2C
------------ ------------- ---------- -------------- ------- ----------- -----
211680.12    224713.71  Hardware                3 2000             3  00...

--Check status in the analytic workspace
SQL>exec dbms_aw.execute('rpr time_short_description');

TIME     TIME_SHORT_DESCRIPTION
----     ----------------------
19      Jan-98
20      Feb-98
21      Mar-98
22      Apr-98
.
.
.
1      1998
2      1999
3      2000
4      2001
85      2002
102      2003
119      2004

-- Reset status
SQL>exec dbms_aw.execute('allstat');

最後の問合せでは、OLAP_CONDIITONで入力ポイント2を使用しています。この制限はOLAP_TABLEによって返されたデータには影響しませんが、アナリティック・ワークスペースでは有効なままです。

SQL>SELECT * FROM unit_cost_price_view
WHERE aw_product = 'Hardware'
AND aw_time in ('2000', '2001', '2002', '2003')
AND OLAP_CONDITION(r2c,
'limit time to time_short_description eq ''2000''', 2)=1
ORDER BY aw_time;

AW_UNIT_COST AW_UNIT_PRICE AW_PRODUCT AW_PRODUCT_GID AW_TIME AW_TIME_GID R2C
------------ ------------- ---------- -------------- ------- ----------- -----
211680.12    224713.71  Hardware                3 2000             3  00...
195591.60    207513.16  Hardware                3 2001             3  00...
184413.05    194773.78  Hardware                3 2002             3  00...
73457.31     77275.06  Hardware                3 2003             3  00...

--Check status in the analytic workspace
SQL>exec dbms_aw.execute('rpr time_short_description');

TIME     TIME_SHORT_DESCRIPTION
----     ----------------------
3      2000

OLAP_EXPRESSION

OLAP_EXPRESSIONは、OLAP_TABLEファンクションのコンテキスト内でOLAP DMLブール式を動的に実行するSQLファンクションです。このファンクションを使用すると、戻り値としてカスタム・メジャーを取得できる他、WHERE句やORDER BY句内で使用してアナリティック・ワークスペースの問合せで返される結果セットを変更することもできます。

関連項目:
「SELECT FROM OLAP_TABLE文でのOLAP DML式の使用」および「リレーショナル・ビューへの計算された列の追加」

OLAP_EXPRESSION_TEXTは文字データを返します。テキスト・データ、ブール・データ、日付データを返すには、OLAP_EXPRESSION_TEXT、OLAP_EXPRESSION_BOOLまたはOLAP_EXPRESSION_DATE SQLファンクションを使用します。

このファンクションを使用するときは、OLAP_TABLEで使用される制限マップにROW2CELL句を指定しておく必要があります。ROW2CELLには、OLAP単一行ファンクションで使用される情報をOLAP_TABLEが移入するRAW列を指定します。

注意:
OLAPワークシート内からはこのファンクションを実行できません。SQLワークシートなどのSQLツール内で実行してください。

戻り値

OLAP_TABLEによって返された表オブジェクトの各行に対するnumeric_expressionの評価。

OLAP_EXPRESSIONは数値データを返します。テキスト・データ、ブール・データ、日付データを返すには、OLAP_EXPRESSION_TEXT、OLAP_EXPRESSION_BOOLまたはOLAP_EXPRESSION_DATEファンクションを使用します。

構文

OLAP_EXPRESSION(
r2c                  IN   RAW(32),
numeric_expression   IN   VARCHAR2)
RETURN NUMBER;

パラメータ

r2c

制限マップのROW2CELL句で指定された列の名前。OLAP_TABLEの「ROW2CELL句」を参照してください。

numeric_expression

数値を結果として返すOLAP DML式。

関連項目:
「数式」、第7章「OLAP DMLファンクション: AからK」、第8章「OLAP DMLファンクション: LからZ」、「OLAP DMLコマンドで引用符を使用する場合のガイドライン」

例

次のスクリプトは、unit_cost_price_viewを作成するためのもので、このビューは、OLAP_EXPRESSIONの使用例を示すために例A-12「OLAP_EXPRESSION: WHERE句内の時系列ファンクション」および例A-13「OLAP_EXPRESSION: ORDER BY句内での数値計算」で使用されます。アナリティック・ワークスペースのビューの作成方法については、「OLAP_TABLEを使用したリレーショナル・ビューの作成」を参照してください。

サンプル・ビュー: MYAW.UNIT_COST_PRICE_VIEW

-- Create the logical row
CREATE TYPE unit_cost_price_row AS OBJECT (
aw_unit_cost          NUMBER,
aw_unit_price         NUMBER,
aw_product            VARCHAR2(50),
aw_time               VARCHAR2(20),
r2c                   RAW(32));
/
-- Create the logical table
CREATE TYPE unit_cost_price_table AS TABLE OF unit_cost_price_row;
/
-- Create the view
CREATE OR REPLACE VIEW unit_cost_price_view AS
SELECT aw_unit_cost, aw_unit_price, aw_product, aw_time, r2c
FROM TABLE(OLAP_TABLE(
'myaw DURATION SESSION',
'unit_cost_price_table',
'',
'MEASURE aw_unit_cost  FROM price_cube_unit_cost
MEASURE aw_unit_price FROM price_cube_unit_price
DIMENSION product WITH
HIERARCHY product_parentrel
INHIERARCHY product_inhier
ATTRIBUTE aw_product FROM product_short_description
DIMENSION time WITH
HIERARCHY time_parentrel
INHIERARCHY time_inhier
ATTRIBUTE aw_time FROM time_short_description
ROW2CELL r2c'));
/

次の問合せは、このビューの集計データの一部を返します。

SQL>SELECT * FROM unit_cost_price_view
WHERE aw_product = 'Hardware'
AND aw_time in ('2000', '2001', '2002', '2003')
ORDER BY aw_time;

AW_UNIT_COST    AW_UNIT_PRICE    AW_PRODUCT    AW_TIME    R2C
------------    -------------    ----------    -------    -----
211680.12        224713.71      Hardware       2000    00...
195591.60        207513.16      Hardware       2001    00...
184413.05        194773.78      Hardware       2002    00...
73457.31         77275.06      Hardware       2003    00...

例A-12 OLAP_EXPRESSION: WHERE句内の時系列ファンクション

この例では、「サンプル・ビュー: MYAW.UNIT_COST_PRICE_VIEW」のビューを使用します。

次のSELECT文は、PERIODAGOという別名の付いた式を計算し、結果セットを、計算後の値が50,000より大きいものに制限します。この計算は、LAGファンクションを使用して、1つ前の期間の値を返します。

SQL>SELECT aw_time time, aw_unit_cost unit_cost,
OLAP_EXPRESSION(r2c,
'LAG(price_cube_unit_cost, 1, time,
LEVELREL time_levelrel)') periodago
FROM unit_cost_price_view
WHERE aw_product = 'Hardware'
AND OLAP_EXPRESSION(r2c,
'LAG(price_cube_unit_cost, 1, time,
LEVELREL time_levelrel)') > 50000;

このSELECT文は次の結果を返します。

TIME                  UNIT_COST  PERIODAGO
-------------------- ---------- ----------
2003                   73457.31  184413.05
2004                              73457.31
1999                   231095.4  162526.92
2000                  211680.12   231095.4
2001                   195591.6  211680.12
2002                  184413.05   195591.6
Q2-99                  57587.34   57856.76
Q3-99                  59464.25   57587.34
Q4-99                  56187.05   59464.25
Q1-00                  53982.32   56187.05
Q2-00                  53629.74   53982.32
Q3-00                  53010.65   53629.74
Q4-00                  51057.41   53010.65
Q1-01                  49691.22   51057.41

例A-13 OLAP_EXPRESSION: ORDER BY句内での数値計算

この例では、「サンプル・ビュー: MYAW.UNIT_COST_PRICE_VIEW」のビューを使用します。

この例では、価格からコストを引いて、その式にMARKUPという別名を付けます。返される行は、利幅(MARKUP)の高い順に並べられます。

SQL>SELECT aw_time time, aw_unit_cost unit_cost, aw_unit_price unit_price,
OLAP_EXPRESSION(r2c,
'PRICE_CUBE_UNIT_PRICE - PRICE_CUBE_UNIT_COST') markup
FROM unit_cost_price_view
WHERE aw_product = 'Hardware'
AND aw_time in ('1998', '1999', '2000', '2001')
ORDER BY OLAP_EXPRESSION(r2c,
'PRICE_CUBE_UNIT_PRICE - PRICE_CUBE_UNIT_COST') DESC;

このSELECT文は次の結果を返します。

TIME                  UNIT_COST   UNIT_PRICE  MARKUP
-------------------- ----------  ----------  ---------
1999                  231095.40   245412.91   14317.51
2000                  211680.12   224713.71   13033.59
2001                  195591.60   207513.16   11921.56
1998                  162526.92   173094.41   10567.49

OLAP_EXPRESSION_BOOL

OLAP_EXPRESSION_BOOLは、OLAP_TABLEファンクションのコンテキスト内でOLAP DMLブール式を動的に実行するSQLファンクションです。このファンクションを使用すると、戻り値としてカスタム・メジャーを取得できる他、WHERE句やORDER BY句内で使用してアナリティック・ワークスペースの問合せで返される結果セットを変更することもできます。

関連項目:
「SELECT FROM OLAP_TABLE文でのOLAP DML式の使用」および「リレーショナル・ビューへの計算された列の追加」

OLAP_EXPRESSION_TEXTは文字データを返します。数値データ、テキスト・データ、日付データを返すには、OLAP_EXPRESSION、OLAP_EXPRESSION_TEXTまたはOLAP_EXPRESSION_DATE SQLファンクションを使用します。

このファンクションを使用するときは、OLAP_TABLEで使用される制限マップにROW2CELL句を指定しておく必要があります。ROW2CELLには、OLAP単一行ファンクションで使用される情報をOLAP_TABLEが移入するRAW列を指定します。

注意:
OLAPワークシート内からはこのファンクションを実行できません。SQLワークシートなどのSQLツール内で実行してください。

戻り値

OLAP_TABLEによって返された表オブジェクトの各行に対するboolean_expressionの評価。

OLAP_EXPRESSION_BOOLは、falseの場合は0を、trueの場合は1をブール・データとして返します。数値データ、日付データ、テキスト・データを返すには、OLAP_EXPRESSION、OLAP_EXPRESSION_DATEまたはOLAP_EXPRESSION_TEXTファンクションを使用します。

構文

OLAP_EXPRESSION_BOOL(
r2c                  IN   RAW(32),
boolean_expression   IN   VARCHAR2)
RETURN NUMBER;

パラメータ

r2c

制限マップのROW2CELL句で指定された列の名前。OLAP_TABLEの「ROW2CELL句」を参照してください。

boolean_expression

ブール値を結果として返すOLAP DML式。

関連項目:
「ブール式」、第7章「OLAP DMLファンクション: AからK」、第8章「OLAP DMLファンクション: LからZ」、「OLAP DMLコマンドで引用符を使用する場合のガイドライン」

例

次のスクリプトは、awunits_viewを作成するためのものです。このビューは、OLAP_EXPRESSION_BOOLの使用例を示すために例A-14で使用されます。

サンプル・ビュー: MYAW_AW.AWUNITS_VIEW

-- Create the logical row
CREATE TYPE awunits_row AS OBJECT (
awtime                  VARCHAR2(12),
awcustomer              VARCHAR2(30),
awproduct               VARCHAR2(30),
awchannel               VARCHAR2(30),
awunits                 NUMBER(16),
r2c                     RAW(32));
/
-- Create the logical table
CREATE TYPE awunits_table AS TABLE OF awunits_row;
/
-- Create the view
CREATE OR REPLACE VIEW awunits_view AS
SELECT awunits,
awtime, awcustomer, awproduct, awchannel, r2c
FROM TABLE(OLAP_TABLE(
'myaw_aw.myawaw DURATION SESSION',
'awunits_table',
'',
'MEASURE awunits FROM units_cube_aw_units_aw
DIMENSION awtime FROM time_aw WITH
HIERARCHY time_aw_parentrel
DIMENSION awcustomer FROM customer_aw WITH
HIERARCHY customer_aw_parentrel
(customer_aw_hierlist ''MARKET_ROLLUP_AW'')
INHIERARCHY customer_aw_inhier
DIMENSION awproduct FROM product_aw WITH
HIERARCHY product_aw_parentrel
DIMENSION channel_aw WITH
HIERARCHY channel_aw_parentrel
ATTRIBUTE  awchannel FROM channel_aw_short_description
ROW2CELL r2c'))
WHERE awunits IS NOT NULL;
/

次の問合せは、このビューの集計データの一部を返します。2001年の全市場での全商品の売上数量がチャネル別に示されます。

SQL> SELECT awchannel, awunits FROM awunits_view
WHERE    awproduct = '1'
AND      awcustomer = '7'
AND      awtime = '4';

AWCHANNEL            AWUNITS
---------            -------
All Channels         415392
Direct Sales         43783
Catalog              315737
Internet             55872

次の文は、この問合せで使用されているProduct、Customer、Timeの各ディメンション・メンバーの説明を表示します。

SQL>execute dbms_aw.execute('limit product_aw to ''1''');
SQL>execute dbms_aw.execute('rpr product_aw_short_description');

PRODUCT_AW                 PRODUCT_AW_SHORT_DESCRIPTION
--------------- --------------------------------------------------
1               Total Product

SQL>execute dbms_aw.execute('limit customer_aw to ''7''');
SQL>execute dbms_aw.execute('rpr customer_aw_short_description');

CUSTOMER_AW               CUSTOMER_AW_SHORT_DESCRIPTION
--------------- --------------------------------------------------
7               Total Market

SQL>execute dbms_aw.execute('limit time_aw to ''4''');
SQL>execute dbms_aw.execute('rpr time_aw_short_description');

TIME_AW                     TIME_AW_SHORT_DESCRIPTION
--------------- --------------------------------------------------
4               2001

例A-14 SELECT構文のリストに指定されたOLAP_EXPRESSION_BOOL

この例では、「サンプル・ビュー: MYAW_AW.AWUNITS_VIEW」のビューを使用します。次のSELECT文は、lowest_unitsという別名が付いた式を計算しますが、この式は、各商品の個数が500個未満かどうかを示します。

SQL>SELECT awproduct products,
olap_expression_bool(r2c, 'units_cube_aw_units_aw le 500') lowest_units
FROM awunits_view
WHERE     awproduct > 39
AND       awproduct < 46
AND       awcustomer = '7'
AND       awchannel = 'Internet'
AND       awtime = '4';

PRODUCTS        LOWEST_UNITS
--------------- ------------
40              0
41              1
42              1
43              1
44              1
45              0

この問合せにより、商品41から44はすべて500個未満だったことが示されます。これらの商品は、ドイツ語、フランス語、スペイン語およびイタリア語のドキュメント・セットです。選択された商品は次のとおりです。

SQL>execute dbms_aw.execute
('limit product_aw to product_aw gt 39 and product_aw lt 46');
SQL>execute dbms_aw.execute('rpr product_aw_short_description');

PRODUCT_AW                 PRODUCT_AW_SHORT_DESCRIPTION
--------------- --------------------------------------------------
40              O/S Documentation Set - English
41              O/S Documentation Set - German
42              O/S Documentation Set - French
43              O/S Documentation Set - Spanish
44              O/S Documentation Set - Italian
45              O/S Documentation Set - Kanji

OLAP_EXPRESSION_DATE

OLAP_EXPRESSION_DATEは、OLAP_TABLEファンクションのコンテキスト内でOLAP DML日時式を動的に実行するSQLファンクションです。このファンクションを使用すると、戻り値としてカスタム・メジャーを取得できる他、WHERE句やORDER BY句内で使用してアナリティック・ワークスペースの問合せで返される結果セットを変更することもできます。

関連項目:
「SELECT FROM OLAP_TABLE文でのOLAP DML式の使用」および「リレーショナル・ビューへの計算された列の追加」

OLAP_EXPRESSION_TEXTは文字データを返します。数値データ、ブール・データ、テキスト・データを返すには、OLAP_EXPRESSION、OLAP_EXPRESSION_BOOLまたはOLAP_EXPRESSION_TEXT SQLファンクションを使用します。

このファンクションを使用するときは、OLAP_TABLEで使用される制限マップにROW2CELL句を指定しておく必要があります。ROW2CELLには、OLAP単一行ファンクションで使用される情報をOLAP_TABLEが移入するRAW列を指定します。

注意:
OLAPワークシート内からはこのファンクションを実行できません。SQLワークシートなどのSQLツール内で実行してください。

戻り値

OLAP_TABLEによって返された表オブジェクトの各行に対するdate_expressionの評価。

OLAP_EXPRESSION_DATEは日付データを返します。数値データ、ブール・データ、テキスト・データを返すには、OLAP_EXPRESSION、OLAP_EXPRESSION_BOOLまたはOLAP_EXPRESSION_TEXTファンクションを使用します。

構文

OLAP_EXPRESSION_DATE(
r2c               IN   RAW(32),
date_expression   IN   VARCHAR2)
RETURN NUMBER;

パラメータ

r2c

制限マップのROW2CELL句で指定された列の名前。OLAP_TABLEの「ROW2CELL句」を参照してください。

date_expression

日時を結果として返すOLAP DML式。

関連項目:
「日時式と期間式」、第7章「OLAP DMLファンクション: AからK」、第8章「OLAP DMLファンクション: LからZ」、「OLAP DMLコマンドで引用符を使用する場合のガイドライン」

例

OLAP_EXPRESSIONおよびOLAP_EXPRESSION_BOOLで紹介されているOLAP単一行ファンクションの例を参照してください。

OLAP_EXPRESSION_TEXT

OLAP_EXPRESSION_TEXTは、OLAP_TABLEファンクションのコンテキスト内でOLAP DMLテキスト式を動的に実行するSQLファンクションです。このファンクションを使用すると、戻り値としてカスタム・メジャーを取得できる他、WHERE句やORDER BY句内で使用してアナリティック・ワークスペースの問合せで返される結果セットを変更することもできます。

関連項目:
「SELECT FROM OLAP_TABLE文でのOLAP DML式の使用」および「リレーショナル・ビューへの計算された列の追加」

OLAP_EXPRESSION_TEXTは文字データを返します。数値データ、ブール・データ、日付データを返すには、OLAP_EXPRESSION、OLAP_EXPRESSION_BOOLまたはOLAP_EXPRESSION_DATE SQLファンクションを使用します。

このファンクションを使用するときは、OLAP_TABLEで使用される制限マップにROW2CELL句を指定しておく必要があります。ROW2CELLには、OLAP単一行ファンクションで使用される情報をOLAP_TABLEが移入するRAW列を指定します。

注意:
OLAPワークシート内からはこのファンクションを実行できません。SQLワークシートなどのSQLツール内で実行してください。

戻り値

OLAP_TABLEによって返された表オブジェクトの各行に対するtext_expressionの評価。

構文

OLAP_EXPRESSION_TEXT(
r2c               IN   RAW(32),
text_expression   IN   VARCHAR2)
RETURN NUMBER;

パラメータ

r2c

制限マップのROW2CELL句で指定された列の名前。OLAP_TABLEの「ROW2CELL句」を参照してください。

text_expression

テキストを結果として返すOLAP DML式。

関連項目:
「テキスト式」、第7章「OLAP DMLファンクション: AからK」、第8章「OLAP DMLファンクション: LからZ」、「OLAP DMLコマンドで引用符を使用する場合のガイドライン」

例

OLAP_EXPRESSIONおよびOLAP_EXPRESSION_BOOLで紹介されているOLAP単一行ファンクションの例を参照してください。

B DBMS_AW PL/SQLパッケージ

DBMS_AW PL/SQLパッケージには、アナリティック・ワークスペースを操作するためのプロシージャおよびファンクションが含まれています。

この付録は、次の項目に分かれています。

- アナリティック・ワークスペースの管理

- SQL文へのOLAP DMLの埋込み

- スパース性アドバイザの使用

- 集計アドバイザの使用

- DBMS_AWサブプログラムの概要

- 各DBMS_AWサブプログラムに関するリファレンス項目

アナリティック・ワークスペースの管理

Oracle OLAPの操作を行うには、セッションにアナリティック・ワークスペースをアタッチする必要があります。DBMS_AW PL/SQLパッケージがインストールされている場合、SQL*Plusからこのタスクを実行できます。たとえば、次のコマンドを使用して、読取り専用アクセスでアナリティック・ワークスペースをアタッチすることが可能です。

EXECUTE dbms_aw.aw_attach ('awname');

各アナリティック・ワークスペースは、アナリティック・ワークスペースのリストに関連付けられています。読取り専用ワークスペースEXPRESS.AW(OLAPエンジン・コードを含む)は常に、このリストで最後にアタッチされます。ワークスペースを作成すると、デフォルトでこのリストの最初にアタッチされます。

FIRSTやLASTなどのキーワードを使用して、リスト内のアナリティック・ワークスペースの位置を変更できます。たとえば、次のコマンドは、MYAW.TEST2というアナリティック・ワークスペースをリストの2番目の位置から1番目の位置に移動する方法を示しています。

EXECUTE dbms_aw.execute ('AW LIST');

TEST1 R/O UNCHANGED GLOBAL.TEST1
TEST2 R/O UNCHANGED GLOBAL.TEST2
EXPRESS R/O UNCHANGED SYS.EXPRESS

EXECUTE dbms_aw.aw_attach ('test2', FALSE, FALSE, 'FIRST');
EXECUTE dbms_aw.execute ('AW LIST');

TEST2 R/O UNCHANGED GLOBAL.TEST2
TEST1 R/O UNCHANGED GLOBAL.TEST1
EXPRESS R/O UNCHANGED SYS.EXPRESS

SQL*Plusから、ワークスペースの名前を変更したり、ワークスペースのコピーを作成したりできます。読取り/書込みアクセスでアナリティック・ワークスペースをアタッチした場合、そのワークスペースを更新して、ワークスペースが格納されている永続データベース表に変更内容を保存できます。ワークスペースの変更内容をデータベース内に保存するには、SQL COMMITを実行する必要があります。

次のコマンドでは、ワークスペースtest2のオブジェクトおよびデータのコピーをtest3という新しいワークスペースに作成し、test3を更新して、変更内容をデータベースにコミットしています。

EXECUTE dbms_aw.aw_copy('test2', 'test3');
EXECUTE dbms_aw.aw_update('test3');
COMMIT;

SQL文へのOLAP DMLの埋込み

DBMS_AWパッケージにより、アナリティック・ワークスペース内であらゆるOLAP処理を実行できます。レガシー・ワークスペース、リレーショナル表またはフラット・ファイルから、データのインポートが可能です。OLAPオブジェクトの定義や、複雑な計算の実行もできます。

注意:
DBMS_AWパッケージを使用してアナリティック・ワークスペースを一から作成する場合、特定の構造のアナリティック・ワークスペースを必要とするOLAPユーティリティ(Analytic Workspace ManagerやDBMS_AW集計アドバイザなど)を使用できないことがあります。

OLAP DMLコマンドの実行方法

DBMS_AWパッケージには、非定型のOLAP DMLコマンドを実行するためのプロシージャが含まれています。EXECUTEプロシージャかINTERP_SILENTプロシージャ、またはINTERPファンクションかINTERCLOBファンクションを使用して、単一のOLAP DMLコマンドまたはセミコロンで区切られた一連のコマンドを実行できます。

使用するプロシージャは、出力の送信方法、および入力バッファと出力バッファのサイズによって異なります。たとえば、EXECUTEプロシージャは出力をプリンタ・バッファに送信し、INTERP_SILENTプロシージャは出力を抑止、INTERPファンクションはセッション・ログを返します。

また、DBMS_AWパッケージには、OLAP式を評価するためのファンクションも含まれています。EVAL_TEXTファンクションはテキスト式の結果を返し、EVAL_NUMBERは数式の結果を返します。

注意:
DBMS_AWのEVAL_NUMBERファンクションおよびEVAL_TEXTファンクションを、SQLのOLAP_EXPRESSIONファンクションと混同しないでください。詳細は、「OLAP_EXPRESSION」を参照してください。

OLAP DMLコマンドで引用符を使用する場合のガイドライン

SQLプロセッサは、処理する埋込みOLAP DMLコマンドをOracle OLAPへ送信する前に、そのコマンドの全体または一部を評価します。DBMS_AWプロシージャのolap-commandsパラメータでOLAP DMLコマンドの書式を設定する際には、次のガイドラインに従ってください。

- OLAP DMLコマンドで通常であれば一重引用符(')を使用する箇所は必ず、2つの一重引用符('')を使用します。SQLプロセッサにより、OLAP DMLコマンドをOracle OLAPに送信する前に、一重引用符が1つ削除されます。

- OLAP DMLでは、二重引用符(")はコメントの開始を示します。

スパーシティ・アドバイザの使用

データは、稠密、スパース、非常にスパースのいずれであるかに応じて、様々な形式でアナリティック・ワークスペースに格納できます。スパース性アドバイザはDBMS_AWのサブプログラムのグループであり、これを使用して、リレーショナル・ソース・データを分析し、そのデータをアナリティック・ワークスペースに格納する際の推奨事項を取得できます。

アナリティック・ワークスペースにおけるデータ格納オプション

アナリティック・ワークスペースでは、ディメンション・メンバーの組合せごとに1つのセルを割り当てる多次元形式でデータを分析および操作します。セルには、データ値またはNA(NULL)を含めることができます。セルのサイズは、その内容に関係なく、データ型によって定義されますが、たとえば、DECIMAL変数の各セルは8バイトです。

変数は、稠密(データ値を持つセルを30%以上含む)またはスパース(データ値が30%未満)のいずれかとなります。ほとんどの変数はスパースであり、その多くが非常にスパースです。

データは分析用の多次元形式で保存することもできますが、他の方法を使用してスパースな変数を格納することにより、ディスク領域を効率よく使用してパフォーマンスを向上させることが可能です。スパースなデータは、コンポジット・ディメンションで定義される変数に格納できます。コンポジットは、そのメンバーとして、データの存在するディメンション値の組合せ(タプルと呼ばれる)を持ちます。コンポジットによってディメンション化された変数にデータ値が追加されると、コンポジット・タプルが作成されます。コンポジット・ディメンションは、1つ以上のスパースなデータ変数を格納する索引で、スパースなデータを稠密に格納します。非常にスパースなデータは、圧縮コンポジットで定義された変数に格納でき、圧縮コンポジットでは、通常のコンポジットとは異なるアルゴリズムを使用してデータが格納されます。

最適なデータ格納方法の選択

次元データとは対照的に、リレーショナル・データは、実際のデータ値についてのみ行を持つ非常にコンパクトな形式の表に格納されます。アナリティック・ワークスペースを設計する際、ソース・データのスパース性を手動で識別して最適な格納方法を決定するのが難しい場合があります。スパース性アドバイザにより、リレーショナル表のソース・データが分析され、格納方法がお薦めされます。推奨事項には、データ変数のパーティション化およびコンポジットの定義も含まれます。

スパース性アドバイザは、次のプロシージャとファンクションから構成されます。

SPARSITY_ADVICE_TABLEプロシージャ
ADD_DIMENSION_SOURCEプロシージャ
ADVISE_SPARSITYプロシージャ
ADVISE_DIMENSIONALITYファンクション
ADVISE_DIMENSIONALITYプロシージャ

また、スパース性アドバイザは、分析されるファクトのディメンションに関する情報を格納するためのパブリックな表型も提供します。表型の定義には、次の3つのオブジェクトが使用されます。

DBMS_AW$_COLUMNLIST_T
DBMS_AW$_DIMENSION_SOURCE_T
DBMS_AW$_DIMENSION_SOURCES_T

次のSQL DESCRIBE文は、オブジェクト定義を示しています。

DESCRIBE dbms_aw$_columnlist_t
dbms_aw$_columnlist_t TABLE OF VARCHAR2(100)

DESCRIBE dbms_aw$_dimension_source_t
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
DIMNAME                                            VARCHAR2(100)
COLUMNNAME                                         VARCHAR2(100)
SOURCEVALUE                                        VARCHAR2(32767)
DIMTYPE                                            NUMBER(3)
HIERCOLS                                           DBMS_AW$_COLUMNLIST_T
PARTBY                                             NUMBER(9)

DESCRIBE dbms_aw$_dimension_sources_t
dbms_aw$_dimension_sources_t TABLE OF DBMS_AW$_DIMENSION_SOURCE_T

スパーシティ・アドバイザの使用

スパース性アドバイザを使用するには、次の手順を実行します。

1. SPARSITY_ADVICE_TABLEをコールして、スパース性アドバイザの評価を格納する表を作成します。

2. 1つ以上の列によって評価対象のファクト表に関連付けられた各ディメンションについて、ADD_DIMENSION_SOURCEをコールします。
これらのディメンションについて入力した情報は、DBMS_AW$_DIMENSION_SOURCES_T変数に格納されます。

3. ADVISE_SPARSITYをコールして、ファクト表を評価します。
その推奨事項は、SPARSITY_ADVICE_TABLEにより作成された表に格納されます。これらの推奨事項を使用して、アナリティック・ワークスペースでの変数の定義について判断を下すか、または次の手順を続行できます。

4. ADVISE_DIMENSIONALITYプロシージャをコールして、推奨されるコンポジット、パーティション化、変数の定義について、OLAP DMLオブジェクト定義を取得します。
または

ADVISE_DIMENSIONALITYファンクションを使用して、推奨されるコンポジットおよび特定のパーティションの変数定義に関するディメンションの順序について、OLAP DMLオブジェクト定義を取得します。

例: GLOBALスキーマでのスパース性の評価

例B-1「スパース性アドバイザのGLOBAL用スクリプト」に、GLOBALスキーマでUNITS_HISTORY_FACT表のスパース性を評価するためのSQLスクリプトを示します。GLOBALアナリティック・ワークスペースでは、UNITS_HISTORY_FACTがUnitsキューブを定義し、UNITS変数のソースとなります。UNITS_HISTORY_FACTは、4つのディメンション表からの外部キーで構成される主キーを持つファクト表です。5番目の列には、売上数量のファクトが含まれています。

CHANNEL_DIM表とCUSTOMER_DIM表には、基本的なスター構成のチャネルおよび顧客ディメンションの情報がすべて含まれます。スノーフレーク構成の3つの表により、時間ディメンションのデータとしてMONTH_DIM、QUARTER_DIMおよびYEAR_DIMが提供されます。PRODUCT_CHILD_PARENT表は、親子表であり、製品ディメンションを定義します。

例B-1 スパース性アドバイザのGLOBAL用スクリプト

CONNECT global/global
SET ECHO ON
SET LINESIZE 300
SET PAGESIZE 300
SET SERVEROUT ON FORMAT WRAPPED

-- Define and initialize an advice table named AW_SPARSITY_ADVICE
BEGIN
dbms_aw.sparsity_advice_table();
EXCEPTION
WHEN OTHERS THEN NULL;
END;
/

TRUNCATE TABLE aw_sparsity_advice;

DECLARE
dimsources dbms_aw$_dimension_sources_t;
dimlist VARCHAR2(500);
sparsedim VARCHAR2(500);
defs CLOB;
BEGIN
-- Provide information about all dimensions in the cube
dbms_aw.add_dimension_source('channel', 'channel_id', dimsources,
'channel_dim', dbms_aw.hier_levels,
dbms_aw$_columnlist_t('channel_id', 'total_channel_id'));
dbms_aw.add_dimension_source('product', 'item_id', dimsources,
'product_child_parent', dbms_aw.hier_parentchild,
dbms_aw$_columnlist_t('product_id', 'parent_id'));
dbms_aw.add_dimension_source('customer', 'ship_to_id', dimsources,
'customer_dim', dbms_aw.hier_levels,
dbms_aw$_columnlist_t('ship_to_id', 'warehouse_id', 'region_id',
'total_customer_id'));
dbms_aw.add_dimension_source('time', 'month_id', dimsources,
'SELECT m.month_id, q.quarter_id, y.year_id
FROM time_month_dim m, time_quarter_dim q, time_year_dim y
WHERE m.parent=q.quarter_id AND q.parent=y.year_id',
dbms_aw.hier_levels,
dbms_aw$_columnlist_t('month_id', 'quarter_id', 'year_id'));

-- Analyze fact table and provide advice without partitioning
dbms_aw.advise_sparsity('units_history_fact', 'units_cube',
dimsources, dbms_aw.advice_default, dbms_aw.partby_none);

COMMIT;

-- Generate OLAP DML for composite and variable definitions
dimlist := dbms_aw.advise_dimensionality('units_cube', sparsedim,
'units_cube_composite');
dbms_output.put_line('Dimension list:  ' || dimlist);
dbms_output.put_line('Sparse dimension:  ' || sparsedim);
dbms_aw.advise_dimensionality(defs, 'units_cube');
dbms_output.put_line('Definitions:  ');
dbms_aw.printlog(defs);

END;
/

サンプル・プログラムからのアドバイス

例B-1「スパース性アドバイザのGLOBAL用スクリプト」のスクリプトで次の情報が生成されます。

Dimension list:  <channel units_cube_composite<product customer time>>
Sparse dimension:  DEFINE units_cube_composite COMPOSITE <product customer time>
Definitions:
DEFINE units_cube.cp COMPOSITE <product customer time>
DEFINE units_cube NUMBER VARIABLE <channel units_cube.cp<product customer time>>
PL/SQL procedure successfully completed.

AW_SPARSITY_ADVICE表に格納される情報

このSQL SELECT文により、推奨されるOLAP DMLオブジェクト定義の基礎である、AW_SPARSITY_ADVICE表の列の一部が表示されます。

SELECT fact, dimension, dimcolumn, membercount nmem, leafcount nleaf,
advice, density
FROM aw_sparsity_advice
WHERE cubename='units_cube';

この問合せは、次の結果セットを返します。

FACT                 DIMENSION    DIMCOLUMN     NMEM  NLEAF ADVICE        DENSITY
-------------------- ------------ ------------ ----- ------ ------------ --------
units_history_fact   channel      channel_id       3      3 DENSE          .46182
units_history_fact   product      item_id         48     36 SPARSE         .94827
units_history_fact   customer     ship_to_id      61     61 SPARSE         .97031
units_history_fact   time         month_id        96     79 SPARSE         .97664

集計アドバイザの使用

アナリティック・ワークスペースでの集計データの管理は、パフォーマンスに大きく影響することがあります。DBMS_AWパッケージのADVISE_RELプロシージャおよびADVISE_CUBEプロシージャを使用すると、事前集計するディメンション・メンバーの最適な組合せを決定できます。これらのプロシージャは、集計アドバイザとして知られています。

指定した割合に基づき、ADVISE_RELは事前集計するディメンション・メンバーのセットを提示します。ADVISE_CUBEは、キューブの各ディメンションについてメンバーのセットを提示します。

ワークスペースの集計機能

集計データを格納する手順は、aggmapというアナリティック・ワークスペース・オブジェクトで指定されます。OLAP DML AGGREGATEコマンドは、aggmapを使用してデータを事前計算します。事前集計されないデータは、データの問合せ時にAGGREGATEファンクションで動的に集計されます。

静的な集計と動的な集計のバランスの選択は、ディスク領域、使用可能なメモリー、データに対して実行される問合せの特性と頻度など、多くの要素によって異なります。これらの要素を検討して、事前集計するデータの割合を決定します。

事前集計するデータの割合を決定したら、集計アドバイザを使用できます。これらのプロシージャで、階層内のディメンション・メンバーの分布を分析し、事前集計するディメンション・メンバーの最適な組合せを特定します。

例: ADVISE_RELプロシージャの使用

指定した事前計算の割合に基づいて、ADVISE_RELプロシージャは、すべての階層関係を持つディメンションを表すファミリ・リレーションを分析し、ディメンション・メンバーのリストを返します。

ADVISE_CUBEは、キューブのaggmapで各ディメンションに同様の経験則を適用します。

関連項目:

- ADVISE_RELプロシージャ

- ADVISE_CUBEプロシージャ

例B-2では、次に示す顧客ディメンションのサンプルを使用して、ADVISE_RELプロシージャを説明します。

サンプル・ディメンション: Globalアナリティック・ワークスペースの顧客

GLOBAL_AW.GLOBALの顧客ディメンションには、4つのレベルを持つSHIPMENTS_ROLLUPと3つのレベルを持つMARKET_ROLLUPの2つの階層があります。ディメンションは106のメンバーを持ちます。この数には、各レベルの全メンバーおよびすべてのレベル名が含まれています。

顧客ディメンションのメンバーは、テキスト値が詳細な説明および簡単な説明で定義された整数キーです。

次のOLAP DMLコマンドは、データベースの標準形式である顧客ディメンションの表現に関する情報を示しています。

SET serveroutput ON
---- Number of members of Customer dimension
EXECUTE dbms_aw.execute('SHOW STATLEN(customer)')
106

---- Hierarchies in Customer dimension;
EXECUTE dbms_aw.execute('REPORT W 40 customer_hierlist');
CUSTOMER_HIERLIST
----------------------------------------
MARKET_ROLLUP
SHIPMENTS_ROLLUP

---- Levels in Customer dimension
EXECUTE dbms_aw.execute('REPORT W 40 customer_levellist');

CUSTOMER_LEVELLIST
----------------------------------------
TOTAL_CUSTOMER
REGION
WAREHOUSE
TOTAL_MARKET
MARKET_SEGMENT
ACCOUNT
SHIP_TO
---- Levels in each hierarchy from leaf to highest
EXECUTE dbms_aw.execute('REPORT W 20 customer_hier_levels');

CUSTOMER_HIERL
IST            CUSTOMER_HIER_LEVELS
-------------- --------------------
SHIPMENTS      SHIP_TO
WAREHOUSE
REGION
TOTAL_CUSTOMER
MARKET_SEGMENT SHIP_TO
ACCOUNT
MARKET_SEGMENT
TOTAL_MARKET

---- Parent relation showing parent-child relationships in the Customer dimension
---- Only show the last 20 members
EXECUTE dbms_aw.execute('LIMIT customer TO LAST 20');
EXECUTE dbms_aw.execute('REPORT W 10 DOWN customer W 20 customer_parentrel');

-----------CUSTOMER_PARENTREL------------
------------CUSTOMER_HIERLIST------------
CUSTOMER      MARKET_ROLLUP       SHIPMENTS_ROLLUP
---------- -------------------- --------------------
103        44                   21
104        45                   21
105        45                   21
106        45                   21
7          NA                   NA
1          NA                   NA
8          NA                   1
9          NA                   1
10         NA                   1
11         NA                   8
12         NA                   10
13         NA                   9
14         NA                   9
15         NA                   8
16         NA                   9
17         NA                   8
18         NA                   8
19         NA                   9
20         NA                   9
21         NA                   10

---- Show text descriptions for the same twenty dimension members
EXECUTE dbms_aw.execute('REPORT W 15 DOWN customer W 35 ACROSS customer_hierlist: <customer_short_description>');
ALL_LANGUAGES: AMERICAN_AMERICA
---------------------------CUSTOMER_HIERLIST---------------------------
-----------MARKET_ROLLUP----------- ---------SHIPMENTS_ROLLUP----------
CUSTOMER            CUSTOMER_SHORT_DESCRIPTION          CUSTOMER_SHORT_DESCRIPTION
--------------- ----------------------------------- -----------------------------------
103             US Marine Svcs Washington           US Marine Svcs Washington
104             Warren Systems New York             Warren Systems New York
105             Warren Systems Philladelphia        Warren Systems Philladelphia
106             Warren Systems Boston               Warren Systems Boston
7               Total Market                        NA
1               NA                                  All Customers
8               NA                                  Asia Pacific
9               NA                                  Europe
10              NA                                  North America
11              NA                                  Australia
12              NA                                  Canada
13              NA                                  France
14              NA                                  Germany
15              NA                                  Hong Kong
16              NA                                  Italy
17              NA                                  Japan
18              NA                                  Singapore
19              NA                                  Spain
20              NA                                  United Kingdom
21              NA                                  United States

例B-2 ADVISE_REL: 推奨される顧客ディメンションの事前集計

この例では、サンプル・ディメンション: Globalアナリティック・ワークスペースの顧客で説明したGLOBAL顧客ディメンションを使用しています。

次のPL/SQL文は、顧客ディメンションの25%を事前集計することを前提としています。ADVISE_RELは、値セットで推奨されるメンバーのセットを返します。

SET serveroutput ON
EXECUTE dbms_aw.execute('AW ATTACH global_aw.global');
EXECUTE dbms_aw.execute('DEFINE customer_preagg VALUESET customer');
EXECUTE dbms_aw.advise_rel('customer_parentrel', 'customer_preagg', 25);
EXECUTE dbms_aw.execute('SHOW VALUES(customer_preagg)');
31
2
4
5
6
7
1
8
9
20
21

返される顧客メンバーと、説明文、関連するレベルおよび階層は、次に示すとおりです。

顧客メンバー

説明

階層

レベル

31

Kosh Enterprises

MARKET_ROLLUP

ACCOUNT

2

Consulting

MARKET_ROLLUP

MARKET_SEGMENT

4

Government

MARKET_ROLLUP

MARKET_SEGMENT

5

製造業

MARKET_ROLLUP

MARKET_SEGMENT

6

Reseller

MARKET_ROLLUP

MARKET_SEGMENT

7

TOTAL_MARKET

MARKET_ROLLUP

TOTAL_MARKET

1

TOTAL_CUSTOMER

SHIPMENTS_ROLLUP

TOTAL_CUSTOMER

8

Asia Pacific

SHIPMENTS_ROLLUP

REGION

9

Europe

SHIPMENTS_ROLLUP

REGION

20

United Kingdom

SHIPMENTS_ROLLUP

WAREHOUSE

21

United States

SHIPMENTS_ROLLUP

WAREHOUSE

DBMS_AWサブプログラムの概要

次の表は、DBMS_AWに含まれるサブプログラムを示しています。

表B-1 DBMS_AWサブプログラム

サブプログラム

説明

ADD_DIMENSION_SOURCEプロシージャ

DBMS_AW$_DIMENSION_SOURCES_Tという表型に、キューブのディメンションに関するパラメータで提供される情報を移入する。

ADVISE_CUBEプロシージャ

指定したキューブ・データの割合に基づいて、キューブの事前集計方法を提示する。

ADVISE_DIMENSIONALITYファンクション

推奨されるキューブのコンポジット定義およびディメンションの順序を返す。

ADVISE_DIMENSIONALITYプロシージャ

推奨されるキューブのコンポジットおよびメジャーを定義するOLAP DMLコマンドを生成する。

ADVISE_PARTITIONING_DIMENSIONファンクション

スパース性アドバイザによってパーティション化されたディメンションを識別する。

ADVISE_PARTITIONING_LEVELファンクション

ディメンションのパーティション化を行う際にスパース性アドバイザで使用されるレベルを返す。

ADVISE_RELプロシージャ

指定したディメンション・メンバーの割合に基づいて、ディメンションの事前集計方法を提示する。

ADVISE_SPARSITYプロシージャ

スパース性についてファクト表を分析し、その分析結果を表に移入する。

AW_ATTACHプロシージャ

アナリティック・ワークスペースをセッションにアタッチする。

AW_COPYプロシージャ

新しいアナリティック・ワークスペースを作成し、別のアナリティック・ワークスペースのオブジェクト定義およびデータを移入する。

AW_CREATEプロシージャ

空のアナリティック・ワークスペースを新規作成する。

AW_DELETEプロシージャ

アナリティック・ワークスペースを削除する。

AW_DETACHプロシージャ

アナリティック・ワークスペースをセッションからデタッチする。

AW_RENAMEプロシージャ

アナリティック・ワークスペースの名前を変更する。

AW_TABLESPACEファンクション

特定のアナリティック・ワークスペースが格納される表領域の名前を返す。

AW_UPDATEプロシージャ

アナリティック・ワークスペースに対する変更を保存する。

CONVERTプロシージャ

アナリティック・ワークスペースの格納フォーマットを9iから10gに変換する。

EVAL_NUMBERファンクション

アナリティック・ワークスペースの数式の結果を返す。

EVAL_TEXTファンクション

アナリティック・ワークスペースのテキスト式の結果を返す。

EXECUTEプロシージャ

1つ以上のOLAP DMLコマンドを実行する。入力および出力は4Kに制限されます。通常、アナリティック・ワークスペースを使用する対話型セッションで使用される。

GETLOGファンクション

最近実行したINTERPファンクションまたはINTERPCLOBファンクションのセッション・ログを返す。

INFILEプロシージャ

ファイルで指定されたOLAP DMLコマンドを実行する。

INTERPファンクション

1つ以上のOLAP DMLコマンドを実行する。入力は4K、出力は4Gに制限される。通常、EXECUTEプロシージャの出力制限4Kを超える出力が必要な場合にアプリケーションで使用される。

INTERPCLOBファンクション

1つ以上のOLAP DMLコマンドを実行する。入力および出力は4Gに制限される。通常、INTERPファンクションの入力制限4Kを超える入力が必要な場合にアプリケーションで使用される。

INTERP_SILENTプロシージャ

1つ以上のOLAP DMLコマンドを実行し、出力を抑止する。入力は4K、出力は4Gに制限される。

OLAP_ONファンクション

OLAPオプションがデータベースにインストールされているかどうかを示すブールを返す。

OLAP_RUNNINGファンクション

OLAPオプションが現行のセッションで初期化されているかどうかを示すブールを返す。

PRINTLOGプロシージャ

INTERP、INTERCLOBまたはGETLOGファンクションによって返されたセッション・ログを印刷する。

RUNプロシージャ

1つ以上のOLAP DMLコマンドを実行する。

SHUTDOWNプロシージャ

現行のOLAPセッションを停止する。

SPARSITY_ADVICE_TABLEプロシージャ

ADVISE_SPARSITYプロシージャで分析結果の格納に使用される表を作成する。

STARTUPプロシージャ

ユーザー定義のアナリティック・ワークスペースをアタッチせずにOLAPセッションを開始する。

ADD_DIMENSION_SOURCEプロシージャ

ADD_DIMENSION_SOURCEプロシージャは、DBMS_AW$_DIMENSION_SOURCES_Tという表型に、キューブのディメンションに関する情報を移入します。この情報は、ADVISE_SPARSITYプロシージャによって分析されます。

関連項目:
「スパース性アドバイザの使用」

注意:
OLAPワークシート内からはこのプロシージャを実行できません。SQL*PlusなどのSQLツール内で実行してください。

構文

ADD_DIMENSION_SOURCE (
dimname  IN      VARCHAR2,
colname  IN      VARCHAR2,
sources  IN OUT  dbms_aw$_dimension_sources_t,
srcval   IN      VARCHAR2     DEFAULT NULL,
dimtype  IN      NUMBER       DEFAULT NO_HIER,
hiercols IN      columnlist_t DEFAULT NULL,
partby   IN      NUMBER       DEFAULT PARTBY_DEFAULT);

パラメータ

表B-2 ADD_DIMENSION_SOURCEプロシージャのパラメータ

パラメータ

説明

dimname

ディメンションの名前。明確にするため、アナリティック・ワークスペースのディメンションの論理名を使用する。

colname

dimnameのディメンション・メンバーにマップするファクト表の列の名前。

sources

DBMS_AW$_DIMENSION_SOURCES_Tのデータ型で定義されるオブジェクト(PL/SQL変数など)の名前。他のパラメータによって提供される情報を格納する際に使用する。

srcval

ディメンション表の名前、またはディメンションを定義する列を返すSQL文。このパラメータを省略した場合、colnameが使用される。

dimtype

次に示す階層の型の1つ。

DBMS_AW.HIER_LEVELS: レベルベース階層
DBMS_AW.HIER_PARENTCHILD: 親子階層
DBMS_AW.MEASURE: メジャー・ディメンション
DBMS_AW.NO_HIER: 階層なし

hiercols

階層を定義する列の名前。

レベルベース階層の場合、ベースレベルの列を最初に、最上位レベルの列を最後に指定する。ディメンションに複数の階層がある場合、予測で最も頻繁に使用する階層を選択し、この階層のレベルを定義する列のみを指定する。

親子階層の場合、子の列を最初に指定し、その後に親の列を指定する。

メジャー・ディメンションの場合、ディメンション・メンバーとなるファクト表の列を指定する。

partby

パーティション化を制御するキーワード。次の値のいずれかを使用する。

- DBMS_AW.PARTBY_DEFAULT: スパース性アドバイザを使用して、このディメンションにパーティション化が適切であるかどうかを判断する。

- DBMS_AW.PARTBY_NONE: このディメンションのパーティション化を許可しない。

- DBMS_AW.PARTBY_FORCE: このディメンションのパーティション化を強制的に行う。
重要: 複数のディメンションについては、強制的なパーティション化は行わない。

- このディメンションについて作成するパーティションの数の整数値。

例

次のPL/SQLプログラムの抜粋は、スパース性アドバイザで使用されるTIMEディメンションに関する情報を示しています。このディメンションのソース・データは、TIME_DIMというディメンション表に格納されています。主キーの名前はMONTH_IDであり、ファクト表の外部キー列の名前もMONTH_IDです。ディメンション階層は、MONTH_ID列、QUARTER_ID列およびYEAR_ID列で定義されるレベルベースです。

このプログラムでは、情報を格納するために、DBMS_AW$_DIMENSION_SOURCES_Tの表型を持つDIMSOURCESというPL/SQL変数が宣言されています。

DECLARE
dimsources dbms_aw$_dimension_sources_t;
BEGIN
dbms_aw.add_dimension_source('time', 'month_id', dimsources,
'time_dim', dbms_aw.hier_levels,
dbms_aw$_columnlist_t('month_id', 'quarter_id', 'year_id'));
.
.
.
END;
/

ADVISE_CUBEプロシージャ

ADVISE_CUBEプロシージャは、アナリティック・ワークスペースでキューブを事前集計する方法を決定する際に役立ちます。事前集計するキューブ・データの割合を指定すると、ADVISE_CUBEにより、キューブの各ディメンションの事前集計するメンバーのセットがお薦めされます。

ADVISE_CUBEプロシージャは、入力としてaggmapと事前計算の割合をとります。aggmapは、各RELATION文にPRECOMPUTE句を含む必要があります。PRECOMPUTE句は値セットで構成されます。指定した事前計算の割合に基づき、ADVISE_CUBEは各値セットのディメンション・メンバーの組合せを返します。

注意:
OLAPワークシート内からはこのプロシージャを実行できません。SQL*PlusなどのSQLツール内で実行してください。

関連項目:
「集計アドバイザの使用」

構文

ADVISE_CUBE (
aggmap_name             IN   VARCHAR2,
precompute_percentage   IN   INTEGER DEFAULT 20,
compressed              IN   BOOLEAN DEFAULT FALSE);

パラメータ

表B-3 ADVISE_CUBEプロシージャのパラメータ

パラメータ

説明

aggmap_name

キューブに関連付けられたaggmapの名前。

aggmapの各RELATION文は、値セットを含むPRECOMPUTE句を持っている必要がある。ADVISE_CUBEは、各値セットのディメンション・メンバーのリストを返す。値セットが空でない場合、ADVISE_CUBEは新しい値を追加する前にその内容を削除する。

precompute_percentage

事前集計するキューブ・データの割合。デフォルトは20%。

圧縮

通常のコンポジット(FALSE)または圧縮コンポジット(TRUE)のいずれに関するアドバイスであるかを制御する。

例

この例では、ADVISE_CUBEプロシージャと、PRODUCTおよびTIMEでディメンション化されたUNITSというキューブについて説明します。ADVISE_CUBEは、キューブ・データの40%を事前集計する場合に必要なディメンションの組合せを返します。

SET SERVEROUTPUT ON
--- View valuesets
EXECUTE dbms_aw.execute('describe prodvals');
DEFINE PRODVALS VALUESET PRODUCT
EXECUTE dbms_aw.execute('describe timevals');
DEFINE TIMEVALS VALUESET TIME
--- View aggmap
EXECUTE dbms_aw.execute ('describe units_agg');
DEFINE UNITS_AGG AGGMAP
RELATION product_parentrel PRECOMPUTE (prodvals)
RELATION time_parentrel PRECOMPUTE (timevals)
EXECUTE dbms_aw.advise_cube ('units_agg', 40);

---- The results are returned in the prodvals and timevals valuesets

ADVISE_DIMENSIONALITYファンクション

ADVISE_DIMENSIONALITYファンクションは、特定のパーティションについてADVISE_SPARSITYプロシージャにより生成されたスパース性の推奨事項に基づき、キューブ内の変数のディメンション順序およびコンポジット・ディメンションのOLAP DML定義を返します。

注意:
OLAPワークシート内からはこのファンクションを実行できません。SQL*PlusなどのSQLツール内で実行してください。

関連項目:
「スパース性アドバイザの使用」

構文

ADVISE_DIMENSIONALITY (
cubename   IN     VARCHAR2,
sparsedfn  OUT    VARCHAR2
sparsename IN     VARCHAR2 DEFAULT NULL,
partnum    IN     NUMBER DEFAULT 1,
advtable   IN     VARCHAR2 DEFAULT NULL)
RETURN VARCHAR2;

パラメータ

表B-4 ADVISE_DIMENSIONALITYファンクションのパラメータ

パラメータ

説明

cubename

ADVISE_SPARSITYへのコールで提供されるものと同一のcubename値。

sparsedfn

コンポジット・ディメンションの定義が格納されるオブジェクト(PL/SQL変数など)の名前。

sparsename

コンポジットのオブジェクト名。デフォルト値はcubename.cp。

partnum

パーティションの数。デフォルトでは、最初のパーティションの定義のみが表示される。

advtable

分析結果を格納するためにSPARSITY_ADVICE_TABLEプロシージャで作成される表の名前。

例

次のPL/SQLプログラムの抜粋では、ADVISE_DIMENSIONALITYファンクションで返される推奨事項を格納する2つの変数を定義しています。SPARSEDIMは推奨されるコンポジットの定義を格納し、DIMLISTはキューブの推奨されるディメンションの順序を格納します。

DECLARE
sparsedim VARCHAR2(500);
dimlist VARCHAR2(500);
BEGIN
-- Calls to ADD_DIMENSION_SOURCE and ADVISE_SPARSITY omitted here
.
.
.
dimlist := dbms_aw.advise_dimensionality('units_cube', sparsedim);
dbms_output.put_line('Sparse dimension:  ' || sparsedim);
dbms_output.put_line('Dimension list:  ' || dimlist);
END;
/

このプログラムでは、DBMS_OUTPUT.PUT_LINEを使用して分析結果を表示します。スパース性アドバイザにより、スパースなディメンションであるPRODUCT、CUSTOMERおよびTIMEに対してコンポジット・ディメンションがお薦めされます。UNITS_CUBEの推奨されるディメンションの順序は、CHANNELの後にこのコンポジットが続きます。

Sparse dimension:  DEFINE units_cube.cp COMPOSITE <product customer time>
Dimension list:  channel units_cube.cp<product customer time>

次の例では、スパース性アドバイザを使用して、Sales Historyというサンプル・スキーマのSALES表を評価します。WHILEループにより、すべてのパーティションの推奨事項が表示されます。

DECLARE
dimlist VARCHAR2(500);
sparsedim VARCHAR2(500);
counter NUMBER(2) := 1;
maxpart NUMBER(2);
BEGIN
-- Calls to ADD_DIMENSION_SOURCE and ADVISE_SPARSITY omitted here
.
.
.

SELECT MAX(partnum) INTO maxpart FROM sh_sparsity_advice;
WHILE counter <= maxpart LOOP
dimlist := dbms_aw.advise_dimensionality('sales_cube', sparsedim,
'sales_cube_composite', counter, 'sh_sparsity_advice');
dbms_output.put_line('Dimension list:  ' || dimlist);
dbms_output.put_line('Sparse dimension:  ' || sparsedim);
counter := counter+1;
END LOOP;
dbms_aw.advise_dimensionality(defs,'sales_cube', 'sales_cube_composite',
'DECIMAL', 'sh_sparsity_advice');
dbms_output.put_line('Definitions:  ');
dbms_aw.printlog(defs);
END;
/

スパース性アドバイザでは11のパーティションがお薦めされ、最初の10のパーティションは同一のコンポジットを使用します。最後のパーティションは別のコンポジットを使用します。(SH_SPARSITY_ADVICE表には、TIME_IDが最後のパーティションでは稠密であるが、他のパーティションでは非常にスパースであることが示されます。)

Dimension list:  sales_cube_composite<time channel product promotion customer>
Sparse dimension:  DEFINE sales_cube_composite COMPOSITE COMPRESSED <time channel product promotion customer>
Dimension list:   sales_cube_composite<time channel product promotion customer>
Sparse dimension:  DEFINE sales_cube_composite COMPOSITE COMPRESSED <time channel product promotion customer>
.
.
.
Dimension list:  time sales_cube_composite<channel product promotion customer>
Sparse dimension:  DEFINE sales_cube_composite COMPOSITE COMPRESSED <channel product promotion customer>

ADVISE_DIMENSIONALITYプロシージャ

ADVISE_DIMENSIONALITYプロシージャは、ADVISE_SPARSITYプロシージャにより提供された情報を評価し、アナリティック・ワークスペースでコンポジットおよび変数を定義するためのOLAP DMLコマンドを生成します。

注意:
OLAPワークシート内からはこのプロシージャを実行できません。SQL*PlusなどのSQLツール内で実行してください。

関連項目:
「スパース性アドバイザの使用」

構文

ADVISE_DIMENSIONALITY (
output     OUT    CLOB,
cubename   IN     VARCHAR2,
sparsename IN     VARCHAR2 DEFAULT NULL,
dtype      IN     VARCHAR2 DEFAULT 'NUMBER',
advtable   IN     VARCHAR2 DEFAULT NULL);

パラメータ

表B-5 ADVISE_DIMENSIONALITYプロシージャのパラメータ

パラメータ

説明

output

プロシージャの推奨事項が格納されるオブジェクト(PL/SQL変数など)の名前。

cubename

ADVISE_SPARSITYへのコールで提供されるものと同一のcubename値。

sparsename

サンプル・コンポジットのオブジェクト名。デフォルト値はcubename.cp。

dtype

サンプルの変数のOLAP DMLデータ型。

advtable

分析結果を格納するためにSPARSITY_ADVICE_TABLEプロシージャで作成される表の名前。

例

次のPL/SQLプログラムの抜粋では、DEFSという変数を定義して、推奨される定義を格納しています。

DECLARE
defs CLOB;
BEGIN
-- Calls to ADD_DIMENSION_SOURCE and ADVISE_SPARSITY omitted here
.
.
.
dbms_aw.advise_dimensionality(defs, 'units_cube_measure_stored',
'units_cube_composite', 'DECIMAL');
dbms_output.put_line('Definitions:  ');
dbms_aw.printlog(defs);
END;
/

このプログラムでは、DBMS_OUTPUT.PUT_LINEプロシージャおよびDBMS_AW.PRINTLOGプロシージャを使用して、推奨されるオブジェクト定義を表示します。

Definitions:
DEFINE units_cube.cp COMPOSITE <product customer time>
DEFINE units_cube NUMBER VARIABLE <channel units_cube.cp<product customer time>>

小さくて稠密なGlobalスキーマとは対照的に、Sales Historyサンプル・スキーマのSalesキューブは大きくて非常にスパースであるため、スパース性アドバイザにより11のパーティションがお薦めされます。次の抜粋では、パーティション・テンプレートを定義し、様々なパーティションにTIMEディメンション・メンバーを移動するための、追加のOLAP DML定義の一部を示しています。

Definitions:
DEFINE sales_cube_composite_p1 COMPOSITE COMPRESSED <time channel product promotion customer>
DEFINE sales_cube_composite_p2 COMPOSITE COMPRESSED <time channel product promotion customer>
DEFINE sales_cube_composite_p3 COMPOSITE COMPRESSED <time channel product promotion customer>
DEFINE sales_cube_composite_p4 COMPOSITE COMPRESSED <time channel product promotion customer>
DEFINE sales_cube_composite_p5 COMPOSITE COMPRESSED <time channel product promotion customer>
DEFINE sales_cube_composite_p6 COMPOSITE COMPRESSED <time channel product promotion customer>
DEFINE sales_cube_composite_p7 COMPOSITE COMPRESSED <time channel product promotion customer>
DEFINE sales_cube_composite_p8 COMPOSITE COMPRESSED <time channel product promotion customer>
DEFINE sales_cube_composite_p9 COMPOSITE COMPRESSED <time channel product promotion customer>
DEFINE sales_cube_composite_p10 COMPOSITE COMPRESSED <time channel product promotion customer>
DEFINE sales_cube_composite_p11 COMPOSITE <channel product promotion customer>
DEFINE sales_cube_pt PARTITION TEMPLATE <time channel product promotion customer> -
PARTITION BY LIST (time) -
(PARTITION p1 VALUES () <sales_cube_composite_p1<>> -
PARTITION p2 VALUES () <sales_cube_composite_p2<>> -
PARTITION p3 VALUES () <sales_cube_composite_p3<>> -
PARTITION p4 VALUES () <sales_cube_composite_p4<>> -
PARTITION p5 VALUES () <sales_cube_composite_p5<>> -
PARTITION p6 VALUES () <sales_cube_composite_p6<>> -
PARTITION p7 VALUES () <sales_cube_composite_p7<>> -
PARTITION p8 VALUES () <sales_cube_composite_p8<>> -
PARTITION p9 VALUES () <sales_cube_composite_p9<>> -
PARTITION p10 VALUES () <sales_cube_composite_p10<>> -
PARTITION p11 VALUES () <time sales_cube_composite_p11<>>)
MAINTAIN sales_cube_pt MOVE TO PARTITION p1 -
'06-JAN-98', '07-JAN-98', '14-JAN-98', '21-JAN-98', -
'24-JAN-98', '28-JAN-98', '06-FEB-98', '07-FEB-98', -
'08-FEB-98', '16-FEB-98', '21-FEB-98', '08-MAR-98', -
'20-MAR-98', '03-JAN-98', '26-JAN-98', '27-JAN-98'
MAINTAIN sales_cube_pt MOVE TO PARTITION p1 -
'31-JAN-98', '11-FEB-98', '12-FEB-98', '13-FEB-98', -
'15-FEB-98', '17-FEB-98', '14-MAR-98', '18-MAR-98', -
'26-MAR-98', '30-MAR-98', '05-JAN-98', '08-JAN-98', -
'10-JAN-98', '16-JAN-98', '23-JAN-98', '01-FEB-98'
MAINTAIN sales_cube_pt MOVE TO PARTITION p1 -
'14-FEB-98', '28-FEB-98', '05-MAR-98', '07-MAR-98', -
'15-MAR-98', '19-MAR-98', '17-JAN-98', '18-JAN-98', -
'22-JAN-98', '25-JAN-98', '03-FEB-98', '10-FEB-98', -
'19-FEB-98', '22-FEB-98', '23-FEB-98', '26-FEB-98'
.
.
.

ADVISE_PARTITIONING_DIMENSIONファンクション

ADVISE_PARTITIONING_DIMENSIONファンクションは、スパース性アドバイザによってパーティション化されたディメンションがある場合は、それを識別します。スパース性アドバイザによってキューブがパーティション化されていない場合はNULLを返します。

注意:
OLAPワークシート内からはこのファンクションを実行できません。SQL*PlusなどのSQLツール内で実行してください。

関連項目:
「スパース性アドバイザの使用」

構文

ADVISE_PARTITIONING_DIMENSION (
cubename   IN  VARCHAR2,
sources    IN  dbms_aw$_dimension_sources_t,
advtable   IN  VARCHAR2 DEFAULT NULL)
RETURN VARCHAR2;

パラメータ

表B-6 ADVISE_PARTITIONING_DIMENSIONファンクションのパラメータ

パラメータ

説明

cubename

ADVISE_SPARSITYへのコールで提供されるものと同一のcubename値。

sources

ADVISE_SPARSITYでの使用のためにADD_DIMENSION_SOURCEによって移入された、DBMS_AW$_DIMENSION_SOURCES_Tのデータ型で定義されるオブジェクト(PL/SQL変数など)の名前。

advtable

分析結果を格納するためにSPARSITY_ADVICE_TABLEプロシージャで作成される表の名前。

例

次のプログラムの抜粋は、スパース性アドバイザの使用後に結果を問い合せる際に使用するADVISE_PARTITIONING_DIMENSIONファンクションを示しています。

DECLARE
dimsources dbms_aw$_dimension_sources_t;
BEGIN
-- Calls to ADD_DIMENSION_SOURCE and ADVISE_SPARSITY omitted here
.
.
.
dbms_output.put_line('Partitioning Dimension: ' ||
dbms_aw.advise_partitioning_dimension('units_cube', dimsources,
'aw_sparsity_advice'));
END;
/

このプログラムでは、DBMS_OUTPUTを使用して、パーティション化ディメンション(この場合はTIMEディメンション)を表示します。

Partitioning Dimension: time

ADVISE_PARTITIONING_LEVELファンクション

ADVISE_PARTITIONING_LEVELファンクションは、ディメンションのパーティション化を行う際にスパース性アドバイザで使用されたレベルを返します。スパース性アドバイザによってキューブがディメンション化されていない場合はNULLを返し、ディメンション階層がレベルベースでない場合は例外が発生します。

注意:
OLAPワークシート内からはこのファンクションを実行できません。SQL*PlusなどのSQLツール内で実行してください。

関連項目:
「スパース性アドバイザの使用」

構文

ADVISE_PARTITIONING_LEVEL (
cubename   IN  VARCHAR2,
sources    IN  dbms_aw$_dimension_sources_t,
advtable   IN  VARCHAR2 DEFAULT NULL)
RETURN VARCHAR2;

パラメータ

表B-7 ADVISE_PARTITIONING_LEVELファンクションのパラメータ

パラメータ

説明

cubename

ADVISE_SPARSITYへのコールで提供されるものと同一のcubename値。

sources

ADVISE_SPARSITYでの使用のためにADD_DIMENSION_SOURCEによって移入された、DBMS_AW$_DIMENSION_SOURCES_Tのデータ型で定義されるオブジェクト(PL/SQL変数など)の名前。

advtable

分析結果を格納するためにSPARSITY_ADVICE_TABLEプロシージャで作成される表の名前。

例

次のプログラムの抜粋は、スパース性アドバイザの使用後に結果を問い合せる際に使用するADVISE_PARTITIONING_LEVELファンクションを示しています。

DECLARE
dimsources dbms_aw$_dimension_sources_t;
BEGIN
-- Calls to ADD_DIMENSION_SOURCE and ADVISE_SPARSITY omitted here
.
.
.
dbms_output.put_line('Partitioning Level: ' ||
dbms_aw.advise_partitioning_level('units_cube', dimsources,
'aw_sparsity_advice'));
END;
/

このプログラムでは、DBMS_OUTPUTを使用して、パーティション化レベル(この場合はYEAR)を表示します。

Partitioning Level: year

ADVISE_RELプロシージャ

ADVISE_RELプロシージャは、アナリティック・ワークスペースでディメンションを事前集計する方法を決定する際に役立ちます。事前集計するディメンションの割合を指定すると、ADVISE_RELによりディメンション・メンバーのセットがお薦めされます。

ADVISE_RELプロシージャは、入力として、ファミリ・リレーション、値セット、事前計算の割合をとります。ファミリ・リレーションは、ディメンションのメンバー間の階層関係を指定するオブジェクトです。値セットは、分析されるディメンションから定義する必要があります。指定した事前計算の割合に基づき、ADVISE_RELは値セットのディメンション・メンバーの組合せを返します。

注意:
OLAPワークシート内からはこのプロシージャを実行できません。SQL*PlusなどのSQLツール内で実行してください。

関連項目:
「集計アドバイザの使用」

構文

ADVISE_REL (
family_relation_name    IN   VARCHAR2,
valueset_name           IN   VARCHAR2,
precompute_percentage   IN   INTEGER DEFAULT 20,
compressed              IN   BOOLEAN DEFAULT FALSE);

パラメータ

表B-8 ADVISE_RELプロシージャのパラメータ

パラメータ

説明

family_relation_name

ディメンション、およびディメンション・メンバー間の階層関係を指定する、ファミリ・リレーションの名前。

valueset_name

プロシージャの結果を格納する値セットの名前。値セットは、ファミリ・リレーションのディメンションから定義する必要がある。値セットが空でない場合、ADVISE_RELは新しい値を追加する前にその内容を削除する。

precompute_percentage

事前集計するディメンションの割合。デフォルトは20%。

圧縮

通常のコンポジット(FALSE)または圧縮コンポジット(TRUE)のいずれに関するアドバイスであるかを制御する。

ADVISE_SPARSITYプロシージャ

ADVISE_SPARSITYプロシージャは、ADD_DIMENSION_SOURCEプロシージャで提供されるディメンションに関する情報を使用し、スパース性についてファクト表を分析します。SPARSITY_ADVICE_TABLEプロシージャで作成される表に、分析結果を移入します。

注意:
OLAPワークシート内からはこのプロシージャを実行できません。SQL*PlusなどのSQLツール内で実行してください。

関連項目:
「スパース性アドバイザの使用」

出力の説明

表B-9で、ADVISE_SPARSITYによって生成される情報を説明します。

表B-9 出力列の説明

列

データ型

NULL

説明

CUBENAME

VARCHAR2(100)

NOT NULL

ADVISE_SPARSITYへのコールに含まれるcubenameの値。通常は論理キューブの名前。

FACT

VARCHAR2(4000)

NOT NULL

ADVISE_SPARSITYへのコールに含まれるファクトの値。1つ以上のアナリティック・ワークスペース変数のソース・データを提供するファクト表の名前。

DIMENSION

VARCHAR2(100)

NOT NULL

キューブのディメンションの論理名。ADVISE_DIMENSIONALITYへのコールで記述されるディメンション。

DIMCOLUMN

VARCHAR2(100)

ディメンション表に関連するファクト(ソース・ファクト表)のディメンション列の名前。

DIMSOURCE

VARCHAR2(4000)

ディメンション表の名前。

MEMBERCOUNT

NUMBER(12,0)

全レベルのディメンション・メンバーの総数。

LEAFCOUNT

NUMBER(12,0)

リーフ(または最小集計)レベルのディメンション・メンバーの数。

ADVICE

VARCHAR2(10)

NOT NULL

ディメンションのスパース性の評価(DENSE、SPARSEまたはCOMPRESSED)。

POSITION

NUMBER(4,0)

NOT NULL

ディメンションの推奨される順序。

DENSITY

NUMBER(11,8)

他のディメンションと比較したスパース性を示す数。この数が大きくなるほど、ディメンションはスパースになる。

PARTNUM

NUMBER(6,0)

NOT NULL

PARTBY列およびPARTTOPS列で記述されるパーティションの数。パーティション化がお薦めされない場合、パーティションの最大数は1。

PARTBY

CLOB

このパーティションに格納する必要のある全ディメンション・メンバーのリスト。このリストは、LONG設定のサイズを大幅に増やさないかぎり、SQL*Plusで切り捨てられる。

PARTTOPS

CLOB

このパーティションにおける最上位レベルのディメンション・メンバーのリスト。

構文

ADVISE_SPARSITY (
fact       IN      VARCHAR2,
cubename   IN      VARCHAR2,
dimsources IN      dbms_aw$_dimension_sources_t,
advmode    IN      BINARY_INTEGER DEFAULT ADVICE_DEFAULT,
partby     IN      BINARY_INTEGER DEFAULT PARTBY_DEFAULT,
advtable   IN      VARCHAR2 DEFAULT NULL);

パラメータ

表B-10 ADVISE_SPARSITYプロシージャのパラメータ

パラメータ

説明

fact

ソースのファクト表の名前。

cubename

アナリティック・ワークスペースの論理キューブの名前など、分析されるファクトの名前。

dimsources

ADD_DIMENSION_SOURCEプロシージャがキューブのディメンションに関する情報を格納するオブジェクト型の名前。

advmode

表示したいアドバイスのレベル。次の値のいずれかを選択する。

DBMS_AW.ADVICE_DEFAULT
DBMS_AW.ADVICE_FAST
DBMS_AW.ADVICE_FULL

partby

パーティション化を制御するキーワード。次の値のいずれかを使用する。

- DBMS_AW.PARTBY_DEFAULT: スパース性アドバイザを使用して、パーティション化が適切であるかどうかを判断する。

- DBMS_AW.PARTBY_NONE: パーティション化を許可しない。

- DBMS_AW.PARTBY_FORCE: パーティション化を強制的に行う。

advtable

分析結果を格納するためにプロシージャで作成される表の名前。

例

次のPL/SQLプログラムの抜粋では、UNITS_HISTORY_FACT表のスパース性を分析しています。

DECLARE
dimsources dbms_aw$_dimension_sources_t;
BEGIN
-- Calls to ADD_DIMENSION_SOURCE for each dimension in the cube
.
.
.
dbms_aw.advise_sparsity('units_history_fact', 'units_cube', dimsources,
dbms_aw.advice_default);

END;
/

次のSELECTコマンドは、分析結果を表示します。ここでは、1つの稠密なディメンション(CHANNEL)と3つの比較的スパースなディメンション(PRODUCT、CUSTOMER、TIME)があることが示されています。

SELECT fact, dimension, dimcolumn, membercount nmem, leafcount nleaf, advice, density
FROM aw_sparsity_advice
WHERE cubename='units_cube';

FACT                 DIMENSION    DIMCOLUMN     NMEM  NLEAF ADVICE          DENSITY
-------------------- ------------ ------------ ----- ------ ------------ ----------
units_history_fact   channel      channel_id       3      3 DENSE         .86545382
units_history_fact   product      item_id         36     36 SPARSE        .98706809
units_history_fact   customer     ship_to_id      61     62 SPARSE        .99257713
units_history_fact   time         month_id        96     80 SPARSE        .99415964

AW_ATTACHプロシージャ

AW_ATTACHプロシージャは、アナリティック・ワークスペースをSQLセッションにアタッチして、コンテンツにアクセスできるようにします。アタッチされたアナリティック・ワークスペースは、明示的にデタッチするかセッションを終了するまで、アタッチされたままとなります。

AW_ATTACHを使用してアナリティック・ワークスペースを作成することもできますが、アナリティック・ワークスペースの作成には専用のプロシージャAW_CREATEがあります。

注意:
OLAPワークシート内からはこのプロシージャを実行できません。SQL*PlusなどのSQLツール内で実行してください。

関連項目:
「アナリティック・ワークスペースの管理」

構文

AW_ATTACH (
awname        IN VARCHAR2,
forwrite      IN BOOLEAN DEFAULT FALSE,
createaw      IN BOOLEAN DEFAULT FALSE,
attargs       IN VARCHAR2 DEFAULT NULL,
tablespace    IN VARCHAR2 DEFAULT NULL);

AW_ATTACH (
schema        IN VARCHAR2,
awname        IN VARCHAR2,
forwrite      IN BOOLEAN DEFAULT FALSE,
createaw      IN BOOLEAN DEFAULT FALSE,
attargs       IN VARCHAR2 DEFAULT NULL,
tablespace    IN VARCHAR2 DEFAULT NULL);

パラメータ

表B-11 AW_ATTACHプロシージャのパラメータ

パラメータ

説明

schema

awnameを所有するスキーマ。

awname

createawがTRUEとして指定されていない場合、既存のアナリティック・ワークスペースの名前。createawの説明を参照。

forwrite

TRUEの場合、読取り/書込みモードでアナリティック・ワークスペースがアタッチされ、アナリティック・ワークスペースに対する排他アクセス権および完全な管理権限が付与される。FALSEの場合、読取り専用モードでアナリティック・ワークスペースがアタッチされる。

createaw

TRUEの場合、awnameという名前のアナリティック・ワークスペースが作成される。awnameがすでに存在する場合、エラーが発生する。FALSEの場合、awnameという名前の既存のアナリティック・ワークスペースがアタッチされる。

attargs

FIRSTやLASTなどの、アナリティック・ワークスペースをアタッチする際のキーワード(AWコマンドを参照)。

例

次のコマンドによって、GLOBAL_TRACKINGというアナリティック・ワークスペースが作成され、GLOBALの内容がコピーされます。ワークスペースは、AW$GLOBAL_TRACKINGという表に格納され、この表は3つのパーティションを持ち、ユーザーのデフォルトの表領域に格納されます。

EXECUTE dbms_aw.aw_attach('global');
EXECUTE dbms_aw.aw_copy('global', 'global_tracking', NULL, 3);

AW_COPYプロシージャ

AW_COPYプロシージャは、あるアナリティック・ワークスペースのオブジェクト定義およびデータを新しいアナリティック・ワークスペースにコピーします。

AW_COPYにより、元のワークスペースがデタッチされ、新しいワークスペースが最初に読取り/書込みアクセス権でアタッチされます。

注意:
OLAPワークシート内からはこのプロシージャを実行できません。SQL*PlusなどのSQLツール内で実行してください。

関連項目:
「アナリティック・ワークスペースの管理」

構文

AW_COPY (
oldname         IN VARCHAR2,
newname         IN VARCHAR2,
tablespace      IN VARCHAR2 DEFAULT NULL,
partnum         IN NUMBER DEFAULT 8);

パラメータ

表B-12 AW_COPYプロシージャのパラメータ

パラメータ

説明

oldname

オブジェクト定義を含む既存のアナリティック・ワークスペースの名前。ワークスペースは空にはできない。

newname

oldnameのコピーである新しいアナリティック・ワークスペースの名前。

tablespace

newnameが格納される表領域の名前。このパラメータを省略した場合、ユーザーのデフォルトの表領域でアナリティック・ワークスペースが作成される。

partnum

AW$newname表に作成されるパーティションの数。

例

次のコマンドによって、GLOBAL_TRACKINGというアナリティック・ワークスペースが作成され、GLOBALの内容がコピーされます。ワークスペースは、AW$GLOBAL_TRACKINGという表に格納され、この表は3つのパーティションを持ち、ユーザーのデフォルトの表領域に格納されます。

EXECUTE dbms_aw.aw_attach('global');
EXECUTE dbms_aw.aw_copy('global', 'global_tracking', NULL, 3);

AW_CREATEプロシージャ

AW_CREATEプロシージャは、空のアナリティック・ワークスペースを新規作成し、セッションにおける現行のワークスペースにします。

現行のワークスペースは、アタッチされたワークスペースのリストの最初に表示されます。

注意:
OLAPワークシート内からはこのプロシージャを実行できません。SQL*PlusなどのSQLツール内で実行してください。

構文

AW_CREATE (
awname        IN VARCHAR2 ,
tablespace    IN VARCHAR2 DEFAULT NULL ,
partnum       IN NUMBER DEFAULT 8 );

AW_CREATE (
schema        IN VARCHAR2 ,
awname        IN VARCHAR2 ,
tablespace    IN VARCHAR2 DEFAULT NULL);

パラメータ

表B-13 AW_CREATEプロシージャのパラメータ

パラメータ

説明

schema

awnameを所有するスキーマ。

awname

新しいアナリティック・ワークスペースの名前。この名前は、Oracle Databaseの表に関するネーミング要件に準拠する必要がある。このプロシージャは、アナリティック・ワークスペースを格納するAW$awnameという表を作成する。

tablespace

アナリティック・ワークスペースが作成される表領域。このパラメータを省略した場合、アナリティック・ワークスペースはデフォルトの表領域に作成される。

partnum

AW$awname表に作成されるパーティションの数。

例

次のコマンドにより、GLOBAL_FINANCEという空のアナリティック・ワークスペースを新規作成します。新しいアナリティック・ワークスペースは、ユーザーのデフォルトの表領域で8つのパーティションを持つAW$GLOBAL_FINANCEという表に格納されます。

EXECUTE dbms_aw.aw_create('global_finance');

次のコマンドにより、GLOBALスキーマにDEMOというアナリティック・ワークスペースが作成されます。AW$DEMOは、2つのパーティションを持ち、GLOBAL表領域に格納されます。

EXECUTE dbms_aw.aw_create('global.demo', 'global', 2);

AW_DELETEプロシージャ

AW_DELETEプロシージャは、既存のアナリティック・ワークスペースを削除します。

構文

AW_DELETE (
awname        IN VARCHAR2);

AW_DELETE (
schema        IN VARCHAR2,
awname        IN VARCHAR2);

パラメータ

表B-14 AW_DELETEプロシージャのパラメータ

パラメータ

説明

schema

awnameを所有するスキーマ。

awname

すべての内容とともに削除対象とする既存のアナリティック・ワークスペースの名前。削除するには、awnameの所有者であるか、DBA権限を持っている必要があり、対象のアナリティック・ワークスペースが現在セッションにアタッチされていてはならない。AW$awnameファイルがデータベースから削除される。

例

次のコマンドにより、ユーザーのデフォルトのスキーマにあるSALES_DEMOアナリティック・ワークスペースが削除されます。

EXECUTE dbms_aw.aw_delete('sales_demo');

AW_DETACHプロシージャ

AW_DETACHプロシージャは、セッションからアナリティック・ワークスペースをデタッチし、その内容にアクセスできないようにします。前回の更新以降に行った変更はすべて破棄されます。アナリティック・ワークスペースに対する変更の保存については、「AW_UPDATEプロシージャ」を参照してください。

構文

AW_DETACH (
awname        IN VARCHAR2);

AW_DETACH (
schema        IN VARCHAR2,
awname        IN VARCHAR2);

パラメータ

表B-15 AW_DETACHプロシージャのパラメータ

パラメータ

説明

schema

awnameを所有するスキーマ。

awname

セッションからデタッチする対象であるアタッチされたアナリティック・ワークスペースの名前。

例

次のコマンドにより、GLOBAL_FINANCEアナリティック・ワークスペースがデタッチされます。

EXECUTE dbms_aw.aw_detach('global_finance');

次のコマンドにより、SH_AWスキーマ内のSALES_HISTORYアナリティック・ワークスペースがデタッチされます。

EXECUTE dbms_aw.aw_detach('sh_aw', 'sales_history');

AW_RENAMEプロシージャ

AW_RENAMEプロシージャは、アナリティック・ワークスペースの名前を変更します。

注意:
OLAPワークシート内からはこのプロシージャを実行できません。SQL*PlusなどのSQLツール内で実行してください。

構文

AW_RENAME (
oldname       IN VARCHAR2,
newname       IN VARCHAR2 );

パラメータ

表B-16 AW_RENAMEプロシージャのパラメータ

パラメータ

説明

oldname

アナリティック・ワークスペースの現在の名前。このアナリティック・ワークスペースはいずれのセッションにもアタッチ不可。

newname

アナリティック・ワークスペースの新しい名前。

例

次のコマンドにより、DEMOアナリティック・ワークスペースがデタッチされ、その名前がSALES_DEMOに変更されます。

EXECUTE dbms_aw.aw_detach('demo');
EXECUTE dbms_aw.aw_rename('demo', 'sales_demo');

AW_TABLESPACEファンクション

AW_TABLESPACEファンクションは、特定のアナリティック・ワークスペースが格納される表領域の名前を返します。

注意:
OLAPワークシート内からはこのファンクションを実行できません。SQL*PlusなどのSQLツール内で実行してください。

構文

AW_TABLESPACE (
awname        IN VARCHAR2)
RETURN VARCHAR2;

AW_TABLESPACE (
schema        IN VARCHAR2,
awname        IN VARCHAR2)
RETURN VARCHAR2;

戻り値

表領域の名前。

パラメータ

表B-17 AW_TABLESPACEファンクションのパラメータ

パラメータ

説明

schema

awnameを所有するスキーマ。

awname

アナリティック・ワークスペースの名前。

例

次の例は、GLOBALアナリティック・ワークスペースが格納される表領域を示しています。

SET serveroutput ON

EXECUTE dbms_output.put_line('Sales History is stored in tablespace ' ||
dbms_aw.aw_tablespace('sh_aw', 'sales_history'));

このコマンドにより、次の文が生成されます。

Sales History is stored in tablespace SH_AW

AW_UPDATEプロシージャ

AW_UPDATEプロシージャは、永続データベース表のアナリティック・ワークスペースに対する変更を保存します。データベースに保存されるこの表の更新バージョンについては、セッションを終了する前にSQL COMMIT文を発行する必要があります。

更新対象のアナリティック・ワークスペースを指定しない場合、AW_UPDATEは、読取り/書込みアクセス権で現在アタッチされているユーザー定義のワークスペースをすべて更新します。

注意:
OLAPワークシート内からはこのプロシージャを実行できません。SQL*PlusなどのSQLツール内で実行してください。

関連項目:
「アナリティック・ワークスペースの管理」

構文

AW_UPDATE (
awname     IN VARCHAR2 DEFAULT NULL);

AW_UPDATE (
schema     IN VARCHAR2 DEFAULT NULL,
awname     IN VARCHAR2 DEFAULT NULL);

パラメータ

表B-18 AW_UPDATEプロシージャのパラメータ

パラメータ

説明

schema

awnameを所有するスキーマ。

awname

awnameに対する変更内容をAW$awnameという表にコピーして保存する。このパラメータを省略した場合、変更内容は、読取り/書込みモードでアタッチされたすべてのアナリティック・ワークスペースについて保存される。

例

次のコマンドにより、GLOBALアナリティック・ワークスペースに対する変更が一時表領域から永続表領域に保存された後、その変更内容がデータベースにコミットされます。

EXECUTE dbms_aw.aw_update('global');
COMMIT;

CONVERTプロシージャ

CONVERTプロシージャは、アナリティック・ワークスペースの格納フォーマットを9iから10gに変換します。OLAP Worksheet内からはこのプロシージャを実行できないため、SQL*PlusなどのSQLツール内で実行してください。

注意:
dbms_aw.convertプロシージャの発行は、Oracle 9iのアナリティック・ワークスペースをOracle 10gのワークスペースにアップグレードする際の小さな手順の1つにすぎません。Oracle 9iのアナリティック・ワークスペースをアップグレードする手順の詳細は、『Oracle OLAPアプリケーション開発者ガイド 10gリリース2(10.2)』を参照してください。

関連項目:
アナリスティック・ワークスペースをOracle 11gの格納フォーマットに変換する方法の詳細は、『Oracle OLAPユーザーズ・ガイド』を参照してください。

構文

CONVERT (
original_aw      IN VARCHAR2);

CONVERT (
original_aw      IN VARCHAR2,
converted_aw     IN VARCHAR2,
tablespace       IN NUMBER DEFAULT);

パラメータ

表B-19 CONVERTプロシージャのパラメータ

パラメータ

説明

original_aw

変換対象とするアナリティック・ワークスペース。

converted_aw

変換されたアナリティック・ワークスペース。

tablespace

変換したワークスペースが格納される表領域の名前。このパラメータを省略した場合、ユーザーのデフォルトの表領域でアナリティック・ワークスペースが作成される。

例

この例では、アナリティック・ワークスペースを変換のソースとターゲットの両方に使用し、1ステップで変換を実行しています。

EXECUTE dbms_aw.convert('global');

次の例では、複数のステップで変換を実行しています。ワークスペース内の完全修飾されたオブジェクト名にはワークスペース名が含まれるため、変換したワークスペースの名前は、元のワークスペースと同一である必要があります。

EXECUTE dbms_aw.rename('global', 'global_temp');
EXECUTE dbms_aw.convert('global_temp', 'global');
EXECUTE dbms_aw.delete('global_temp');

EVAL_NUMBERファンクション

EVAL_NUMBERファンクションは、アナリティック・ワークスペースの数式を評価し、結果の数を返します。

EVAL_NUMBERファンクションをSELECT from DUAL文に指定して、アナリティック・ワークスペースで定義される数値定数を返すことができます。詳細は、『Oracle Database SQL言語リファレンス』のDUAL表からの選択についての説明を参照してください。

注意:
OLAPワークシート内からはこのファンクションを実行できません。SQL*PlusなどのSQLツール内で実行してください。

構文

EVAL_NUMBER (
olap_numeric_expression     IN    VARCHAR2)
RETURN NUMBER;

パラメータ

表B-20 EVAL_NUMBERファンクションのパラメータ

パラメータ

説明

olap_numeric_expression

数値として評価されるOLAP DML式。第2章「OLAP DML式」を参照。

例

次の例では、現行のアナリティック・ワークスペースのDECIMALSオプションの値を返します。DECIMALSオプションは、数値出力に表示する小数点以下の桁数を制御するオプションです。この例では、DECIMALSの値はデフォルトの2です。

SET serveroutput ON
SELECT dbms_aw.eval_number('decimals') "Decimals" FROM dual;

Decimals
----------
2

EVAL_TEXTファンクション

EVAL_TEXTファンクションは、アナリティック・ワークスペースのテキスト式を評価し、結果の文字列を返します。

EVAL_TEXTファンクションをSELECT from DUAL文に指定して、アナリティック・ワークスペースで定義される文字定数を返すことができます。詳細は、『Oracle Database SQL言語リファレンス』のDUAL表からの選択についての説明を参照してください。

注意:
OLAPワークシート内からはこのファンクションを実行できません。SQL*PlusなどのSQLツール内で実行してください。

構文

EVAL_TEXT (
olap_text_expression     IN    VARCHAR2)
RETURN VARCHAR2;

パラメータ

表B-21 EVAL_TEXTファンクションのパラメータ

パラメータ

説明

olap_text_expression

文字列として評価されるOLAP DML式。第2章「OLAP DML式」を参照。

例

次の例では、セッションの現在の言語を指定するNLS_LANGUAGEオプションの値を返します。

SET serveroutput ON
SELECT dbms_aw.eval_text('nls_language') "NLS Language" FROM dual;

この例におけるNLS_LANGUAGEの値はAMERICANです。

NLS Language
---------------
AMERICAN

EXECUTEプロシージャ

EXECUTEプロシージャは、1つ以上のOLAP DMLコマンドを実行し、出力をプリンタ・バッファへ送信します。通常は、対話型のSQLセッションでアナリティック・ワークスペースのデータを操作する際に使用します。RUNプロシージャとは対照的に、EXECUTEはエラー発生後もコマンドの処理を続行します。

SQL*Plusを使用している場合、次のコマンドを発行することにより、プリンタ・バッファを画面に表示できます。

SET SERVEROUT ON

他のプログラムを使用している場合、同様の設定についてはマニュアルを参照してください。

入力および出力は4Kに制限されます。さらに大きい値については、このパッケージのINTERPファンクションおよびINTERPCLOBファンクションを参照してください。

OLAP DML OUTFILEコマンドを使用して出力をリダイレクトした場合、このプロシージャではDMLコマンドの出力は印刷されません。

注意:
OLAPワークシート内からはこのプロシージャを実行できません。SQL*PlusなどのSQLツール内で実行してください。

構文

EXECUTE (
olap_commands     IN    VARCHAR2
text              OUT   VARCHAR2);

パラメータ

表B-22 EXECUTEプロシージャのパラメータ

パラメータ

説明

olap-commands

セミコロンで区切られた1つ以上のOLAP DMLコマンド。「OLAP DMLコマンドで引用符を使用する場合のガイドライン」を参照。

text

OLAPコマンドに対するOLAPエンジンからの出力。

例

次の例では、GLOBALアナリティック・ワークスペースをアタッチしてTIMEのオブジェクト定義を示しています。

EXECUTE dbms_aw.aw_attach('global');
EXECUTE dbms_aw.execute('DESCRIBE time');

DEFINE TIME DIMENSION TEXT

次の例では、エラー発生後にEXECUTEがコマンドの処理を続行する方法を示しています。

EXECUTE dbms_aw.execute('SHOW DECIMALS');
2

EXECUTE dbms_aw.execute('CALL nothing; DECIMALS=0');
BEGIN dbms_aw.execute('CALL nothing; DECIMALS=0'); END;

*
ERROR at line 1:
ORA-34492: Analytic workspace object NOTHING does not exist.
ORA-06512: at "SYS.DBMS_AW", line 93
ORA-06512: at "SYS.DBMS_AW", line 122
ORA-06512: at line 1

EXECUTE dbms_aw.execute('SHOW DECIMALS');
0

次の例では、エラー発生後にEXECUTEがコマンドの処理を続行する方法を示しています。

SQL> execute dbms_aw.execute('call nothing; colwidth=20');
BEGIN dbms_aw.execute('call nothing; colwidth=20'); END;

*
ERROR at line 1:
ORA-34492: Analytic workspace object NOTHING does not exist.
ORA-06512: at "SYS.DBMS_AW", line 90
ORA-06512: at "SYS.DBMS_AW", line 119
ORA-06512: at line 1

SQL> execute dbms_aw.execute('show colwidth');
20

PL/SQL procedure successfully completed.

GETLOGファンクション

このファンクションは、最近実行したこのパッケージのINTERPファンクションまたはINTERPCLOBファンクションからセッション・ログを返します。

このファンクションで返されるセッション・ログを印刷するには、DBMS_AW.PRINTLOGプロシージャを使用します。

注意:
OLAPワークシート内からはこのファンクションを実行できません。SQL*PlusなどのSQLツール内で実行してください。

構文

GETLOG()
RETURN CLOB;

戻り値

INTERPまたはINTERPCLOBへの最近のコールからのセッション・ログ。

例

次の例では、INTERPへのコールによって返されるセッション・ログ、およびGETLOGによって返される同一のセッション・ログを示しています。

EXECUTE dbms_aw.printlog(dbms_aw.interp('AW ATTACH global; REPORT units_cube'));

UNITS_CUBE
--------------
TIME
CUSTOMER
PRODUCT
CHANNEL

EXECUTE dbms_aw.printlog(dbms_aw.getlog());

UNITS_CUBE
--------------
TIME
CUSTOMER
PRODUCT
CHANNEL

INFILEプロシージャ

INFILEプロシージャは、指定したファイルのOLAP DMLコマンドを評価し、そのコマンドを現行のアナリティック・ワークスペースで実行します。

注意:
OLAPワークシート内からはこのプロシージャを実行できません。SQL*PlusなどのSQLツール内で実行してください。

構文

INFILE (
filename     IN   VARCHAR2);

パラメータ

表B-23 INFILEプロシージャのパラメータ

パラメータ

説明

filename

OLAP DMLコマンドを含むファイルの名前。

ファイル・パスは、OLAPセッションのカレント・ディレクトリ・オブジェクトで指定する必要がある。OLAP DML CDAコマンドを使用して、カレント・ディレクトリ・オブジェクトを特定または変更する。

例

次の例では、finances.infファイルのOLAP DMLコマンドを実行しています。このファイルの場所は、WORK_DIRデータベース・ディレクトリによって識別されます。

EXECUTE dbms_aw.infile('work_dir/finances.inf');

INTERPファンクション

INTERPファンクションは、1つ以上のOLAP DMLコマンドを実行し、コマンドが実行されたセッションのログを返します。通常、EXECUTEプロシージャの出力制限4Kを超える出力が必要になりうる場合に、アプリケーションで使用されます。

INTERPファンクションへの入力は4Kに制限されます。さらに大きい入力値については、このパッケージのINTERPCLOBファンクションを参照してください。

OLAP DML OUTFILEコマンドを使用して出力をリダイレクトした場合、このファンクションではDMLコマンドの出力は返されません。

このパッケージのPRINTLOGプロシージャに対する引数としてINTERPファンクションを使用して、セッション・ログを表示できます。例を参照してください。

注意:
OLAPワークシート内からはこのファンクションを実行できません。SQL*PlusなどのSQLツール内で実行してください。

構文

INTERP (
olap-commands     IN   VARCHAR2)
RETURN CLOB;

パラメータ

表B-24 INTERPファンクションのパラメータ

パラメータ

説明

olap-commands

セミコロンで区切られた1つ以上のOLAP DMLコマンド。「OLAP DMLコマンドで引用符を使用する場合のガイドライン」を参照。

戻り値

OLAP DMLコマンドが実行されたOracle OLAPセッションのログ・ファイル。

例

次のSQL*Plusセッションのサンプルでは、GLOBALアナリティック・ワークスペースをアタッチし、UNITS_CUBEのメンバーを一覧表示します。

SET serverout ON
EXECUTE dbms_aw.printlog(dbms_aw.interp('AW ATTACH global; REPORT units_cube'));

UNITS_CUBE
--------------
TIME
CUSTOMER
PRODUCT
CHANNEL

INTERPCLOBファンクション

INTERPCLOBファンクションは、1つ以上のOLAP DMLコマンドを実行し、コマンドが実行されたセッションのログを返します。通常、INTERPファンクションの入力制限4Kを超える入力が必要になりうる場合に、アプリケーションで使用されます。

OLAP DML OUTFILEコマンドを使用して出力をリダイレクトした場合、このファンクションではOLAP DMLコマンドの出力は返されません。

このパッケージのPRINTLOGプロシージャに対する引数としてINTERPCLOBファンクションを使用して、セッション・ログを表示できます。例を参照してください。

構文

INTERPCLOB (
olap-commands     IN   CLOB)
RETURN CLOB;

パラメータ

表B-25 INTERPCLOBファンクションのパラメータ

パラメータ

説明

olap-commands

セミコロンで区切られた1つ以上のOLAP DMLコマンド。「OLAP DMLコマンドで引用符を使用する場合のガイドライン」を参照。

戻り値

OLAP DMLコマンドが実行されたOracle OLAPセッションのログ。

例

次のSQL*Plusセッションのサンプルでは、ELECTRONICSというアナリティック・ワークスペースを作成し、その内容をdbsディレクトリ・オブジェクトに格納されたEIFファイルからインポートして、アナリティック・ワークスペースの内容を表示します。

SET serverout ON size 1000000
EXECUTE dbms_aw.printlog(dbms_aw.interpclob('AW ATTACH global; DESCRIBE'));

DEFINE GEN_OBJ_ROLES DIMENSION TEXT

DEFINE GEN_AW_OBJS VARIABLE TEXT <GEN_OBJ_ROLES>

DEFINE ALL_DIMENSIONS DIMENSION TEXT

DEFINE DIM_OBJ_LIST DIMENSION TEXT

DEFINE DIM_AW_OBJS VARIABLE TEXT <ALL_DIMENSIONS DIM_OBJ_LIST>
.
.
.

INTERP_SILENTプロシージャ

INTERP_SILENTプロシージャは、1つ以上のOLAP DMLコマンドを実行し、コマンドからの出力をすべて抑止します。OLAPコマンド・インタプリタからのエラー・メッセージは抑止しません。

INTERP_SILENTファンクションへの入力は4Kに制限されます。OLAP DMLコマンドの出力を表示するには、EXECUTEプロシージャか、INTERPファンクションまたはINTERPCLOBファンクションを使用します。

注意:
OLAPワークシート内からはこのプロシージャを実行できません。SQL*PlusなどのSQLツール内で実行してください。

構文

INTERP_SILENT (
olap-commands     IN   VARCHAR2);

パラメータ

表B-26 INTERP_SILENTファンクションのパラメータ

パラメータ

説明

olap-commands

セミコロンで区切られた1つ以上のOLAP DMLコマンド。「OLAP DMLコマンドで引用符を使用する場合のガイドライン」を参照。

例

次のコマンドにより、EXECUTEとINTERP_SILENTのメッセージ処理の違いを示します。いずれのコマンドも、読取り専用モードでGLOBALアナリティック・ワークスペースをアタッチします。ただし、EXECUTEは警告メッセージを表示しますが、INTERP_SILENTは表示しません。

EXECUTE dbms_aw.execute('AW ATTACH global');
IMPORTANT: Analytic workspace GLOBAL is read-only. Therefore, you will not be able to use the UPDATE command to save changes to it.

EXECUTE dbms_aw.interp_silent('AW ATTACH global');

OLAP_ONファンクション

OLAP_ONファンクションは、OLAPオプションがデータベースにインストールされているかどうかを示すブールを返します。

注意:
OLAPワークシート内からはこのファンクションを実行できません。SQL*PlusなどのSQLツール内で実行してください。

構文

OLAP_ON ( )
RETURN BOOLEAN;

戻り値

V$OPTION表のOLAPパラメータの値。

例

次のPL/SQLコードにより、OLAP_ONで返される値がテストされ、ステータス・メッセージが返されます。

BEGIN
IF dbms_aw.olap_on() = true
THEN dbms_output.put_line('The OLAP option is installed');
ELSE dbms_output.put_line('The OLAP option is not installed');
END IF;
END;
/

The OLAP option is installed

OLAP_RUNNINGファンクション

OLAP_RUNNINGファンクションは、OLAPオプションが現行のセッションで初期化されているかどうかを示すブールを返します。初期化が行われるのは、OLAP DMLコマンドを(直接、またはOLAP PL/SQLかJavaパッケージを使用して)実行したり、アナリティック・ワークスペースを問い合せたり、STARTUPプロシージャを実行する場合です。

注意:
OLAPワークシート内からはこのファンクションを実行できません。SQL*PlusなどのSQLツール内で実行してください。

構文

OLAP_RUNNING( )
RETURN BOOLEAN;

戻り値

OLAPが現行のセッションで初期化されている場合はTRUE、初期化されていない場合はFALSE。

例

次のPL/SQLスクリプトでは、OLAP環境が初期化されているかどうかをテストし、されていない場合は初期化を開始します。

BEGIN
IF dbms_aw.olap_running() THEN
dbms_output.put_line('OLAP is already running');
ELSE
dbms_aw.startup;
IF dbms_aw.olap_running() THEN
dbms_output.put_line('OLAP started successfully');
ELSE
dbms_output.put_line('OLAP did not start. Is it installed?');
END IF;
END IF;
END;
/

OLAP started successfully

PRINTLOGプロシージャ

このプロシージャは、このパッケージのINTERPファンクション、INTERPCLOBファンクションまたはGETLOGファンクションで返されたセッション・ログを、PL/SQLのDBMS_OUTPUTパッケージを使用してプリンタ・バッファに送信します。

SQL*Plusを使用している場合、次のコマンドを発行することにより、プリンタ・バッファを画面に表示できます。

SET SERVEROUT ON SIZE 1000000

SIZE句により、デフォルト・サイズの4Kからバッファを増やします。

他のプログラムを使用している場合、同様の設定についてはマニュアルを参照してください。

注意:
OLAPワークシート内からはこのプロシージャを実行できません。SQL*PlusなどのSQLツール内で実行してください。

構文

PRINTLOG (
session-log     IN   CLOB);

パラメータ

表B-27 PRINTLOGプロシージャのパラメータ

パラメータ

説明

session-log

セッションのログ。

例

次の例は、INTERPファンクションによって返されるセッション・ログを示します。

SET serverout ON size 1000000

EXECUTE dbms_aw.printlog(dbms_aw.interp('REPORT W 30 all_dimensions'));

ALL_DIMENSIONS
------------------------------
TIME.DIMENSION
CUSTOMER.DIMENSION
PRODUCT.DIMENSION
CHANNEL.DIMENSION

RUNプロシージャ

RUNプロシージャは、1つ以上のOLAP DMLコマンドを実行し、出力をプリンタ・バッファへ送信します。通常は、対話型のSQLセッションでアナリティック・ワークスペースのデータを操作する際に使用します。EXECUTEプロシージャとは対照的に、RUNはエラーが発生した場合にはコマンドの処理を停止します。

SQL*Plusを使用している場合、次のコマンドを発行することにより、プリンタ・バッファを画面に表示できます。

SET SERVEROUT ON

他のプログラムを使用している場合、同様の設定についてはマニュアルを参照してください。

OLAP DML OUTFILEコマンドを使用して出力をリダイレクトした場合、このプロシージャではDMLコマンドの出力は印刷されません。

注意:
OLAPワークシート内からはこのプロシージャを実行できません。SQL*PlusなどのSQLツール内で実行してください。

構文

RUN (
olap_commands     IN      STRING,
silent            IN      BOOLEAN DEFAULT FALSE);
RUN (
olap_commands     IN      CLOB,
silent            IN      BOOLEAN DEFAULT FALSE);
RUN (
olap_commands     IN      STRING,
output            OUT     STRING);
RUN (
olap_commands     IN      STRING,
output            IN OUT  CLOB);
RUN (
olap_commands     IN      CLOB,
output            OUT     STRING);
RUN (
olap_commands     IN      CLOB,
output            IN OUT  CLOB);

パラメータ

表B-28 EXECUTEプロシージャのパラメータ

パラメータ

説明

olap-commands

セミコロンで区切られた1つ以上のOLAP DMLコマンド。「OLAP DMLコマンドで引用符を使用する場合のガイドライン」を参照。

silent

OLAP DMLコマンドからの出力を抑止する必要があるかどうかを通知するブール値。(OLAPエンジンからのエラー・メッセージは、この設定に関係なく、抑止されない。)

output

OLAPコマンドに対するOLAPエンジンからの出力。

例

次のSQL*Plusセッションのサンプルでは、XADEMOというアナリティック・ワークスペースをアタッチし、XADEMOにCOST_PPという計算式を作成して、新しい計算式の定義を表示しています。

EXECUTE dbms_aw.run('DESCRIBE time');

DEFINE TIME DIMENSION TEXT

次の例では、エラー発生後にRUNがコマンドの実行を停止する方法を示しています。

EXECUTE dbms_aw.run('SHOW DECIMALS');
0

EXECUTE dbms_aw.run('CALL nothing; DECIMALS=4');
BEGIN dbms_aw.run('CALL nothing; DECIMALS=4'); END;

*
ERROR at line 1:
ORA-34492: Analytic workspace object NOTHING does not exist.
ORA-06512: at "SYS.DBMS_AW", line 58
ORA-06512: at "SYS.DBMS_AW", line 134
ORA-06512: at line 1

EXECUTE dbms_aw.run('SHOW DECIMALS');
0

SHUTDOWNプロシージャ

SHUTDOWNプロシージャは、現行のOLAPセッションを終了します。

デフォルトでは、SHUTDOWNプロシージャは、アタッチされた読取り/書込み可能なワークスペースのいずれに対しても変更が途中でない場合にのみセッションを終了します。ワークスペースを更新せずにセッションを終了するには、forceパラメータを指定します。

注意:
OLAPワークシート内からはこのプロシージャを実行できません。SQL*PlusなどのSQLツール内で実行してください。

構文

SHUTDOWN (
force     IN    BOOLEAN  DEFAULT NO);

パラメータ

表B-29 SHUTDOWNプロシージャのパラメータ

パラメータ

説明

force

YESの場合、このパラメータは、1つ以上のアタッチされたワークスペースが更新されていなくても、OLAPセッションを強制的に停止する。デフォルトはNOです。

例

次のコマンドにより、GLOBALアナリティック・ワークスペースに対する変更がすべて保存され、ユーザーのOLAPセッションが終了します。

EXECUTE dbms_aw.aw_update('global_finance');
COMMIT;
EXECUTE dbms_aw.shutdown();

SPARSITY_ADVICE_TABLEプロシージャ

SPARSITY_ADVICE_TABLEプロシージャは、ADVISE_SPARSITYプロシージャによって生成されたアドバイスを格納する表を作成します。

注意:
OLAPワークシート内からはこのプロシージャを実行できません。SQL*PlusなどのSQLツール内で実行してください。

関連項目:
「スパース性アドバイザの使用」

構文

SPARSITY_ADVICE_TABLE (
tblname   IN    VARCHAR2 DEFAULT);

パラメータ

表B-30 SPARSITY_ADVICE_TABLEプロシージャのパラメータ

パラメータ

説明

tblname

表の名前。デフォルトの名前は、自身のスキーマで作成されるAW_SPARSITY_ADVICE。tblnameの列については、「ADVISE_SPARSITYプロシージャ」を参照。

例

次の例では、GLOBAL_SPARSITY_ADVICEという表を作成します。

EXECUTE dbms_aw.sparsity_advice_table('global_sparsity_advice');

STARTUPプロシージャ

STARTUPプロシージャは、ユーザー定義のワークスペースをアタッチせずにOLAPセッションを開始します。

STARTUPは、OLAP処理環境を初期化し、OLAPエンジンのプログラム・コードを含む読取り専用のEXPRESSワークスペースをアタッチします。

注意:
OLAPワークシート内からはこのプロシージャを実行できません。SQL*PlusなどのSQLツール内で実行してください。

構文

STARTUP ( );

例

次の例では、OLAPセッションを開始します。

EXECUTE dbms_aw.startup();

C OLAP_API_SESSION_INIT PL/SQLパッケージ

OLAP_API_SESSION_INIT PL/SQLパッケージには、OLAP APIの初期化パラメータの表をメンテナンスするためのプロシージャが含まれています。

この章では、次の項目について説明します。

- OLAP APIの初期化パラメータ

- 構成表の表示

- OLAP_API_SESSION_INITサブプログラムの概要

OLAP APIの初期化パラメータ

OLAP_API_SESSION_INITパッケージには、初期化パラメータの構成表をメンテナンスするためのプロシージャが含まれています。OLAP APIでセッションを開くと、指定したロールを持つユーザーに対して表にリストされているALTER SESSIONコマンドが実行されます。この表を使用するのはOLAP APIのみであり、他のアプリケーションではこの表に格納されたコマンドは実行されません。

この機能は、すべてのユーザーの環境を変更できるデータベース初期化ファイルやinit.oraファイルでこれらのパラメータを設定するかわりに使用できます。

構成表には、OLAP APIのパフォーマンスを向上できるALTER SESSIONコマンドがインストール時に移入されます。この構成表は、より有効な設定が新たに見つからないかぎり変更する必要はありません。

構成表内の情報は、この章で後述するALL_OLAP_ALTER_SESSIONビューの別名から問い合せることができます。

注意:
このパッケージの所有者は、SYSユーザーです。このパッケージを使用するには、実行権限が明示的に付与されている必要があります。

構成表の表示

ALL_OLAP_ALTER_SESSIONは、OLAP$ALTER_SESSION表のビューであるV$OLAP_ALTER_SESSIONのパブリック・シノニムです。ビューおよび表の所有者は、SYSユーザーです。

ALL_OLAP_ALTER_SESSIONビュー

ALL_OLAP_ALTER_SESSIONの各行により、ロールおよびセッション初期化パラメータが識別されます。ユーザーがOLAP APIを使用してセッションを開くと、そのセッションは、そのユーザーに付与されたロールのパラメータを使用して初期化されます。

表C-1 ALL_OLAP_ALTER_SESSIONの列の説明

列

データ型

NULL

説明

ROLE

VARCHAR2(30)

NOT NULL

データベース・ロール

CLAUSE_TEXT

VARCHAR2(3000)

ALTER SESSIONコマンド

OLAP_API_SESSION_INITサブプログラムの概要

次の表で、OLAP_API_SESSION_INITに含まれるサブプログラムを説明します。

表C-2 OLAP_API_SESSION_INITサブプログラム

サブプログラム

説明

ADD_ALTER_SESSIONプロシージャ

特定のデータベース・ロールを持つOLAP APIユーザーに対し、ALTER SESSIONパラメータを指定する。

CLEAN_ALTER_SESSIONプロシージャ

孤立データ(データベースに定義されていないロールに対するALTER SESSIONパラメータ)を削除する。

DELETE_ALTER_SESSIONプロシージャ

特定のデータベース・ロールを持つOLAP APIユーザーに対して事前に定義されたALTER SESSIONパラメータを削除する。

ADD_ALTER_SESSIONプロシージャ

このプロシージャは、特定のデータベース・ロールを持つOLAP APIユーザーに対し、ALTER SESSIONパラメータを指定します。OLAP$ALTER_SESSION表に行を追加します。

構文

ADD_ALTER_SESSION (
role_name           IN     VARCHAR2,
session_parameter   IN     VARCHAR2);

パラメータ

role_nameおよびsession_parameterが行としてOLAP$ALTER_SESSIONに追加されます。

表C-3 ADD_ALTER_SESSIONプロシージャのパラメータ

パラメータ

説明

role_name

データベースの有効なロールの名前。必須です。

session_parameter

SQLのALTER SESSIONコマンドで設定されるパラメータ。必須です。

例

次の例では、OLAP_DBAロールを持つユーザーに対するクエリー・リライトを有効にするOLAP$ALTER_SESSIONに行を挿入します。

EXECUTE olap_api_session_init.add_alter_session('OLAP_DBA',
'SET QUERY_REWRITE_ENABLED=TRUE');
Row inserted

SELECT * FROM all_olap_alter_session WHERE role='OLAP_DBA';

ROLE         CLAUSE_TEXT
------------ ------------------------------------------------------------
OLAP_DBA     ALTER SESSION SET QUERY_REWRITE_ENABLED=TRUE

CLEAN_ALTER_SESSIONプロシージャ

このプロシージャは、現在データベースに定義されていない任意のロールに対するALTER SESSIONパラメータをすべて削除します。それらのロールに対するOLAP$ALTER_SESSION表の孤立行をすべて削除します。

構文

CLEAN_ALTER_SESSION ();

例

次の例では、すべての孤立行を削除します。

EXECUTE olap_api_session_init.clean_alter_session();

DELETE_ALTER_SESSIONプロシージャ

このプロシージャは、特定のデータベース・ロールを持つOLAP APIユーザーに対して事前に定義されたALTER SESSIONパラメータを削除します。OLAP$ALTER_SESSION表から行を削除します。

構文

DELETE_ALTER_SESSION (
role_name           IN     VARCHAR2,
session_parameter   IN     VARCHAR2);

パラメータ

role_nameおよびsession_parameterの両方により、OLAP$ALTER_SESSIONの行が一意に識別されます。

表C-4 DELETE_ALTER_SESSIONプロシージャのパラメータ

パラメータ

説明

role_name

データベースの有効なロールの名前。必須です。

session_parameter

SQLのALTER SESSIONコマンドで設定されるパラメータ。必須です。

例

次のコールによって、1列目にOLAP_DBA、2列目にQUERY_REWRITE_ENABLED=TRUEという値を含むOLAP$ALTER_SESSIONの行が削除されます。

EXECUTE olap_api_session_init.delete_alter_session('OLAP_DBA',
'SET QUERY_REWRITE_ENABLED=TRUE');

SELECT * FROM all_olap_alter_session WHERE role='OLAP_DBA';

no rows selected

D 以前のリリースでの変更

この付録では、OLAP DMLにおける以前のリリースで行われた変更点について説明します。この付録には、次の項があります。

- Oracle Database 11gでのOLAP DML文の変更

- Oracle Database 10gでのOLAP DML文の変更

- Oracle Database 9iでのOLAP DML文の変更

Oracle Database 11gでのOLAP DML文の変更

この項では、Oracle Database 11gにおいて追加、変更、名前の変更または削除が行われたOLAP DML文をリストします。

- Oracle Database 11gで追加された文

- Oracle Database 11gで削除された文

- Oracle Database 11gで変更された文

- Oracle Database 11gで変更された文

Oracle Database 11gで追加された文

Oracle Database 11gでは、次の文がOLAP DMLに追加されました。カッコ内の番号は、文が追加されたリリースを示しています。

$GID_DEPTHシステム・プロパティ(11.0.0.0)
$GID_LISTシステム・プロパティ(11.0.0.0)
$GID_TYPEシステム・プロパティ(11.0.0.0)
$LOOP_AGGMAPシステム・プロパティ(11.0.0.0)
$LOOP_DENSEシステム・プロパティ(11.0.0.0)
$LOOP_VARシステム・プロパティ(11.0.0.0)
ADD_CUBE_MODELプログラム(11.2)
ADD_DIMENSION_MEMBERプログラム(11.2)
ADD_MODEL_DIMENSIONプログラム(11.2)
AW FREEZEコマンド(11.0.0.0)
AW PURGE CACHEコマンド(11.0.0.0)
AW THAWコマンド(11.0.0.0)
ASCIISTRファンクション(11.2)
BIN_TO_NUMファンクション(11.0.0.0)
CHANGEDRELATIONSファンクション(11.0.0.0)
CHANGEDVALUESファンクション(11.0.0.0)
CHARTOROWIDファンクション(11.0.0.0)
CREATE_LOGICAL_MODELプログラム(11.2)
CURRENT_DATEファンクション(11.0.0.0)
CURRENT_TIMESTAMPファンクション(11.0.0.0)
DATE_FORMATコマンド(11.0.0.0)
DBTIMEZONEファンクション(11.0.0.0)
EXTRACTファンクション(11.0.0.0)
FROM_TZファンクション(11.0.0.0)
GROUPINGIDファンクション (11.0.0.0)
HEXTORAWファンクション(11.2)
HIERDEPTHコマンド(11.0.0.0)
HIERSHAPEファンクション(11.2)
INSTRファンクション (11.0.0.0)
ISEMPTYファンクション(11.0.0.0)
ISINFINITEファンクション(11.2)
ISNANファンクション(11.2)
LENGTHファンクション (11.0.0.0)
LNNVLファンクション(11.0.0.0)
LOCALTIMESTAMPファンクション(11.0.0.0)
LOWERファンクション(11.2)
MODULOファンクション(11.0.0.0)
NA2ファンクション(11.0.0.0)
NAFLAGファンクション(11.0.0.0)
NLS_CHARSET_IDファンクション(11.2)
NLS_CHARSET_NAMEファンクション(11.2)
NLSSORTファンクション(11.0.0.0)
NUMTODSINTERVALファンクション(11.1.0.0)
NUMTOYMINTERVALファンクション(11.1.0.0)
OBJORGファンクション(11.2)
ORA_HASHファンクション(11.2)
PARTITIONファンクション(11.0.0.0)
PERMITREADERRORオプション(11.2)
RAWTOHEXファンクション(11.2)
REGEXP_COUNTファンクション(11.2)
REGEXP_INSTRファンクション(11.2)
REGEXP_REPLACEファンクション(11.2)
REGEXP_SUBSTRファンクション(11.2)
REMAINDERファンクション(11.0.0.0)
REMOVE_CUBE_MODELプログラム(11.2)
REMOVE_DIMENSION_MEMBERプログラム(11.2)
REMOVE_MODEL_DIMENSIONプログラム(11.2)
REPLACEファンクション(11.0.0.0)
ROWIDTOCHARファンクション(11.0.0.0)
ROWIDTONCHARファンクション(11.0.0.0)
SESSIONTIMEZONEファンクション(11.0.0.0)
SET_INCLUDED_MODELプログラム(11.2)
SET_PROPERTYプログラム(11.2)
SOUNDEXファンクション(11.2)
STATCURRファンクション(11.2)
SYS_CONTEXTファンクション(11.0.0.0)
SYSTIMESTAMPファンクション(11.0.0.0)
TO_BINARY_DOUBLEファンクション(11.2)
TO_BINARY_FLOATファンクション(11.2)
TO_DSINTERVALファンクション(11.0.0.0)
TO_TIMESTAMPファンクション(11.0.0.0)
TO_TIMESTAMP_TZファンクション(11.0.0.0)
TO_YMINTERVALファンクション(11.0.0.0)
TRACEコマンド(11.2)
TZ_OFFSETファンクション(11.0.0.0)
UPDATE_ATTRIBUTE_VALUEプログラム(11.2)
UPDATE_DIMENSION_MEMBERプログラム(11.2)
UPPERファンクション(11.2)
VSIZEファンクション(11.2)

Oracle Database 11gで削除された文

Oracle Database 11gでは、次の文がOLAP DMLから削除されました。カッコ内の番号は、文が削除されたリリースを示しています。

POUTFILEUNITオプション(11.2)
SORTCOMPOSITEオプション

Oracle Database 11gで変更された文

Oracle Database 11gでは、OLAP DMLの次の文が変更されました。カッコ内の番号は、文が変更された最新のリリースを示しています。

ACROSSコマンド(11.2)
AGGREGATEコマンド (11.0.0.0)
AWファンクション (11.0.0.0)
AW ATTACHコマンド(11.0.0.0)
AW DETACHコマンド(11.0.0.0)
AW LISTコマンド(11.0.0.0)
AW TRUNCATEコマンド(11.0.0.0)
CHGDFNコマンド(11.2)
CLEARコマンド(11.0.0.0)
CONVERTファンクション(11.0.0.0)
DEFINE COMPOSITE (11.0.0.0)
DEFINE DIMENSIONコマンド(11.0.0.0)
DEFINE PARTITION TEMPLATE (11.0.0.0)
DEFINE VARIABLEコマンド(11.0.0.0)
EXPORT (EIF)コマンド(11.2)
GROUPINGIDコマンド (11.0.0.0)
IMPORT (EIF)コマンド(11.2)
LOGファンクション (11.0.0.0)
OBJファンクション(11.2)

Oracle Database 11gで名前が変更された文

Oracle Database 11gで名前が変更されたOLAP DMLの文はありません。

Oracle Database 10gでのOLAP DML文の変更

この項では、Oracle Database 10gにおいて追加、変更、名前の変更または削除が行われたOLAP DML文をリストします。

- Oracle Database 10gで追加された文

- Oracle Database 10gで削除された文

- Oracle Database 10gで変更された文

- Oracle Database 10gで名前が変更された文

Oracle Database 10gで追加された文

Oracle Database 10gでは、次の文がOLAP DMLに追加されました。カッコ内の番号は、文が追加されたリリースを示しています。

$AGGMAPプロパティ(10.1.0.0)
$AGGREGATE_FORCECALCプロパティ(10.2.0.0)
$AGGREGATE_FORCEORDERプロパティ(10.2.0.0)
$AGGREGATE_FROMプロパティ(10.1.0.0)
$AGGREGATE_FROMVARプロパティ(10.1.0.0)
$ALLOCMAPプロパティ(10.1.0.0)
$COUNTVARプロパティ(10.1.0.0)
$DEFAULT_LANGUAGEプロパティ(10.2.0.0)
ACQUIREコマンド(10.1.0.0)
AGGCOUNTファンクション(10.2.0.0)
AGGMAPコマンド, DROP DIMENSION文(10.1.0.0)
AGGMAPコマンド, PRECOMPUTE文(10.2.0.0)
AGGROPSファンクション(10.2.0.0)
ALLOCMAPコマンド, VALUESET文(10.1.0.0)
ALLOCOPSファンクション(10.2.0.0)
ARCTANファンクション(10.1.0.0)
ASCIIファンクション(10.1.0.0)
AW TRUNCATEコマンド(10.1.0.3)
BITANDファンクション(10.1.0.0)
CHRファンクション(10.1.0.0)
COALESCEファンクション(10.1.0.0)
DECODEファンクション(10.1.0.0)
DEFINE PARTITION TEMPLATEコマンド(10.1.0.0)
AGGMAPコマンドのDROP DIMENSION文(10.1.0.0)
EXPファンクション(10.1.0.0)
GREATESTファンクション(10.1.0.0)
INF_STOP_ON_ERRORオプション(10.1.0.0)
INITCAPファンクション(10.1.0.0)
INSTRファンクション (INSTRおよびINSTRB) (10.1.0.0)
LEASTファンクション(10.1.0.0)
LPADファンクション(10.1.0.0)
LIMIT BASEDIMSコマンド(10.2.0.0)
LOCK_LANGUAGE_DIMSオプション(10.2.0.0)
LTRIMファンクション(10.1.0.0)
MAXFETCHオプション(10.1.0.0)
NULLIFファンクション(10.1.0.0)
NVLファンクション(10.1.0.0)
NVL2ファンクション(10.1.0.0)
ONATTACHプログラム(10.1.0.0)
PARTITIONCHECKファンクション(10.1.0.0)
AGGMAPコマンドのPRECOMPUTE文(10.2.0.0)
RANK_CALLSオプション(10.2.0.0)
RANK_CELLSオプション(10.2.0.0)
RANK_SORTSオプション(10.2.0.0)
RELATIONコマンド (10.2.0.0)
RELEASEコマンド(10.1.0.0)
RESYNCコマンド(10.1.0.0)
REVERTコマンド(10.1.0.0)
RPADファンクション(10.1.0.0)
RTRIMファンクション(10.1.0.0)
SESSION_NLS_LANGUAGEオプション(10.2.0.0)
SET1コマンド(10.1.0.0)
SIGNファンクション(10.1.0.0)
SORTファンクション (10.2.0.0)
SQLFETCHファンクション(10.2.0.0)
STATDEPTHファンクション(10.2.0.0)
STATEQUALファンクション(10.2.0.2)
STATIC_SESSION_LANGUAGEオプション(10.2.0.0)
SUBSTRファンクション, SUBSTRおよびSUBTRB (10.1.0.0)
SUBSTRファンクション, SUBSTRC, SUBSTR2, およびSUBSTR4 (10.2.0.4)
TRANSLATEファンクション(10.2.0.4)
TRIGGERコマンド (10.1.0.0)
TRIGGERファンクション (10.1.0.0)
TRIGGER_DEFINEプログラム(10.1.0.0)
TRIGGER_AFTER_UPDATEプログラム(10.1.0.0)
TRIGGER_BEFORE_UPDATEプログラム(10.1.0.0)
TRIGGERASSIGNコマンド(10.1.0.0)
TRIMファンクション(10.1.0.0)
USETRIGGERSオプション(10.1.0.0)
ALLOCMAPコマンドのVALUESET文 (10.1.0.0)
WIDTH_BUCKETファンクション(10.1.0.0)
WRAPERRORSオプション(10.2.0.0)
WRITABLEファンクション(10.2.0.0)

Oracle Database 10gで削除された文

Oracle Database 10gでは、次の文がOLAP DMLから削除されました。カッコ内の番号は、文が削除されたリリースを示しています。

AW ALLOCATE (10.1.0.0)
ROLLUP (10.2.0.0)

Oracle Database 10gで変更された文

Oracle Database 10gでは、次のOLAP DML文が大幅に変更されました。大幅な変更には、新しいキーワードの追加やデフォルト値の変更などがあります。カッコ内の番号は、文が大幅に変更された最新のリリースを示しています。

AGGMAPINFO (10.1.0.0)
AGGREGATEコマンド(10.2.0.0)
AGGREGATEファンクション(10.2.0.0)
ARGUMENT (10.1.0.0)
ANY (10.2.0.0)
AVERAGE (10.2.0.0)
AWファンクション(10.2.0.0)
AW ATTACH (10.1.0.0)
CACHE (10.2.0.0)
CHGDFN (10.2.0.0)
CHGDIMS (10.1.0.3)
COUNT (10.2.0.0)
DEFINE COMPOSITE (10.1.0.0)
DEFINE VARIABLE (10.2.0.0)
DEPRDECL (10.2.0.0)
DEPRDECLSW (10.2.0.0)
DEPRSL (10.2.0.0)
DEPRSOYD (10.2.0.0)
EVERY (10.2.0.0)
FINTSCHED (10.2.0.0)
FPMTSCHED (10.2.0.0)
HIERCHECK (10.2.0.2)
LARGEST (10.2.0.0)
LIMITコマンド(10.2.0.0)
LIMITファンクション(10.2.0.0)
MAINTAIN ADD SESSION (10.1.0.0)
MAINTAIN ADD TO PARTITION (10.1.0.0)
NONE (10.2.0.0)
OBJ (10.2.0.3)
RANK (10.2.0.0)
RELATION (集計用) (10.2.0.0)
SMALLEST (10.2.0.0)
SORTコマンド(10.1.0.3)
SQL (10.1.0.0)
STDDEV (10.2.0.0)
TALLY (10.2.0.0)
TOTAL (10.2.0.0)
UPDATE (10.1.0.0)
VARIABLE (10.1.0.0)
VALSPERPAGE (10.1.0.0)
VINTSCHED (10.2.0.0)
VPMTSCHED (10.2.0.0)

Oracle Database 10gで名前が変更された文

Oracle Database 10gでは、名前が変更されたOLAP DML文はありません。

Oracle Database 9iでのOLAP DML文の変更

この項では、Oracle Database 9iで変更が行われたOLAP DML文をリストします。

- Oracle Database 9iで追加された文

- Oracle Database 9iで削除された文

- Oracle Database 9iで変更された文

- Oracle Database 9iで名前が変更された文

Oracle Database 9iで追加された文

Oracle Database 9iでは、次の文がOLAP DMLに追加されました。カッコ内の番号は、文が追加されたリリースを示しています。

ADD_MONTHS(9.0.0.0)
ALLOCATE(9.2.0.0)
ALLOCERRLOGFORMAT(9.2.0.0)
ALLOCERRLOCHEADER(9.2.0.0)
ALLOCMAP(9.2.0.0)
BASEDIM(9.2.0.0)
BASEVAL(9.2.0.0)
CDA(9.2.0.0)
CEIL(9.0.0.0)
CHANGEBYTES(9.0.0.0)
CHGDIMS(9.2.0.0)
CHILDLOCK(9.2.0.0)
COMMIT(9.2.0.0)
DEADLOCK(9.2.0.0)
ERRORLOG(9.2.0.0)
ERRORMASK(9.2.0.0)
EXTBYTES(9.0.0.0)
FETCH(9.2.0.0)
FINDBYTES(9.0.0.0)
FLOOR(9.0.0.0)
GROUPINGID(9.2.0.0)
HIERHEIGHTコマンド(9.2.0.0)
HIERHEIGHTファンクション(9.2.0.0)
INSBYTES(9.0.0.0)
JOINBYTES(9.0.0.0)
LAST_DAY(9.0.0.0)
LIMITMAPINFO(9.2.0.2)
LIMITSTRICT(9.2.0.2)
MAXBYTES(9.0.0.0)
MAXFETCH(9.0.0.0)
MONTHS_BETWEEN(9.0.0.0)
MULTIPATHHIER(9.0.0.0)
NEW_TIME(9.0.0.0)
NEXT_DAY(9.0.0.0)
NLSオプション、特に

NLS_CALENDAR (9.0.0.0)

NLS_CURRENCY (9.0.0.0)

NLS_DATE_FORMAT (9.0.0.0)

NLS_DATE_LANGUAGE (9.0.0.0)

NLS_DUAL_CURRENCY (9.0.0.0)

NLS_ISO_CURRENCY (9.0.0.0)

NLS_LANG (9.0.0.0)

NLS_LANGUAGE (9.0.0.0)

NLS_NUMERIC_CHARACTERS (9.0.0.0)

NLS_SORT (9.0.0.0)

NLS_TERRITORY (9.0.0.0)

NULLIF (9.0.0.0)
POUTFILEUNIT (9.2.0.0)
REMBYTES (9.0.0.0)
REPLBYTES (9.0.0.0)
ROLE (9.0.0.0)
SOURCEVAL (9.2.0.0)
SYSDATE (9.0.0.0)
TO_CHAR (9.0.0.0)
TO_DATE (9.0.0.0)
TO_NCHAR (9.2.0.0)
TO_NUMBER (9.0.0.0)
TRACEFILEUNIT (9.2.0.0)
TRIM (9.0.0.0)
USERID (9.0.0.0)

Oracle Database 9iで削除された文

Oracle Database 9iでは、次の文がOLAP DMLから削除されました。カッコ内の番号は、文が削除されたリリースを示しています。

_UPDATEOLDVERS (9.2.0.0)
_XCALONGTIME (9.0.0.0)
_XCARETRIES (9.0.0.0)
_XCASHORTIME (9.0.0.0)
ALLOWQONS (9.2.0.0)
AW ALLOCATE (10.1.0.0)
CACHEHITS (9.2.0.0)
CACHEMISSES (9.2.0.0)
CACHETRIES (9.2.0.0)
CHARSET (9.0.0.0)
CHDIR (9.2.0.0)
CHDRIVE (9.2.0.0)
COMQUERY (9.0.0.0)
COMSET (9.0.0.0)
COMUNIT (9.0.0.0)
CONNECT (9.0.0.0)
DBEXTENDPATH (9.2.0.0)
DBGSESSION (9.2.0.0)
DBREPORT (9.2.0.0)
DBSEARCHPATH (9.2.0.0)
DBTEMPPATH (9.2.0.0)
DEFINE EXTCALL (9.0.0.0)
DGCART (9.2.0.0)
DIR (9.2.0.0)
DISCONNECT (9.0.0.0)
EPRODUCT (9.2.0.0)
ERELEASE (9.2.0.0)
EXECBREAK (9.0.0.0)
EXECSTART (9.0.0.0)
EXECSTATUS (9.0.0.0)
EXECUTE (9.0.0.0)
EXECWAIT (9.0.0.0)
EXTARGS (9.0.0.0)
FETCH (9.0.0.0) -- SNAPI
FILEMODEMASK (9.2.0.0)
IFCOPY (9.2.0.0)
LONGOBJNAMES (9.0.0.0)
MAXFETCH (9.0.0.0)
MKDIR (9.0.0.0)
NAPAGEFREE (9.2.0.0)
ODBC.CONNECTION (9.0.0.0)
ODBC.CONNLIST (9.0.0.0)
ODBC.DISCONN (9.0.0.0)
ODBC.SOURCE (9.0.0.0)
ODBC.SOURCELIST (9.0.0.0)
PGCACHEHITS (9.2.0.0)
PGCACHEMISSES (9.2.0.0)
PAGEPAUSE (9.2.0.0)
PAGEPROMPT (9.2.0.0)
PAUSE (9.2.0.0)
RETRIEVE (9.0.0.0)
RMDIR (9.0.0.0)
SESSIONQUERY (9.0.0.0)
SHARESESSION (9.0.0.0)
SHELL (9.0.0.0)
SQL CONNECT (9.0.0.0)
SQL DISCONNECT (9.0.0.0)
SQL.DMBS (9.0.0.0)
SQL.DMBSLIST (9.0.0.0)
STRIP (9.2.0.0)
THREADEXTCALL (9.0.0.0)
TRACE (9.2.0.0)
TRANSLATE (9.0.0.0)
TRANSPORT (9.0.0.0)
WATCH (9.2.0.0)
XABORT (9.0.0.0)
XCAPORTNUMBER (9.0.0.0)
XCLOSE (9.0.0.0)
XOPEN (9.0.0.0)

Oracle Database 9iで変更された文

次に示すのは、Oracle Database 9iで大幅に変更され、それ以降は変更されていないOLAP DML文です。大幅な変更には、新しいキーワードの追加やデフォルト値の変更などがあります。カッコ内の番号は、文が大幅に変更された最新のリリースを示しています。名前が変更された文のリストは、「Oracle Database 9iで名前が変更された文」を参照してください。

CONVERT (9.2.0.0)
DECIMALCHAR (9.2.0.0)
EXPORT (9.2.0.0)
FCQUERY (9.2.0.0)
FCSET (9.2.0.0)
FILEOPEN (9.0.0.0)
FILEQUERY (9.0.0.0)
FILEREAD (9.2.0.0)
HIERHEIGHTコマンド(9.2.0.0)
IMPORT (9.0.0.0)
INFILE (9.0.0.0)
LAG (9.2.0.2)
LAGABSPCT (9.2.0.2)
LAGDIF (9.2.0.2)
LAGPCT (9.2.0.2)
LEAD (9.2.0.2)
MODEL (9.2.0.2)
MOVINGAVERAGE (9.2.0.2)
MOVINGMAX (9.2.0.2)
MOVINGMIN (9.2.0.2)
MOVINGTOTAL (9.2.0.2)
NOSPELL (9.2.0.0)
OUTFILE (9.0.0.0)
PROGRAM (9.2.0.0)
PROPERTY (9.0.0.0)
RECURSIVE (9.0.0.0)
RELATION (集計用) (9.2.0.2)
RELATION (割当て用) (9.2.0.2)
ROUND (9.0.0.0)
SYSDATE (9.2.0.0)
SYSINFO (9.2.0.2)
SYSTEM (9.2.0.0)
TALLY (10.2.0.0)
THOUSANDSCHAR (9.2.0.0)
YESSPELL (9.2.0.0)

Oracle Database 9iで名前が変更された文

Oracle Database 9iでは、次のOLAP DML文の名前が変更されました。カッコ内の番号は、文の名前が変更されたリリースを示しています。

DATABASEコマンドからAWコマンド(9.2.0.0)
DATABASEファンクションからAWファンクション(9.2.0.0)
DBDESCRIBEからAWDESCRIBE(9.2.0.0)
DBWAITTIMEからAWWAITTIME(9.2.0.0)
DEFAULTDBFSIZEからDEFAULTAWSEGSIZE(9.2.0.0)
OESEIFVERSIONからEIFVERSION(9.2.0.0)

索引
A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  Y  Z

記号

_ワイルドカード, 2.3.8.6.1

&演算子, 2.3.10

%ワイルドカード, 2.3.8.6.1

=コマンド, 10

イベント, 10, 10, 10

トリガー, 10, 10, 10

$AGGMAPプロパティ, 4.3 $AGGREGATE_FORCECALCプロパティ, 4.3 $AGGREGATE_FORCEORDERプロパティ, 4.3, 4.3 $AGGREGATE_FROMプロパティ, 4.3, 9.3 $AGGREGATE_FROMVARプロパティ, 4.3 $ALLOCMAPプロパティ, 4.3 $COUNTVARプロパティ, 4.3 $DEFAULT_LANGUAGEプロパティ, 4.3 $GID_DEPTHプロパティ, 4.3 $GID_LISTプロパティ, 4.3 $GID_TYPEプロパティ, 4.3 $LOOP_AGGMAPプロパティ, 4.3 $LOOP_DENSEプロパティ, 4.3

キューブの導出メジャー, 10

$LOOP_TYPEプロパティ, 4.3 $LOOP_VARプロパティ, 4.3

キューブの導出メジャー

$NATRIGGERプロパティ

再帰的コール, 5.3

同時に実行, 5.3

$STORETRIGGERVALプロパティ, 4.3 $VARCACHEプロパティ, 4.3

数字

20世紀, 9.3

21世紀, 9.3

A

ABSファンクション, 7.3

抽象データ型, A.1.2, A.2.2

自動的, A.1.2.2, A.2.2

事前定義, A.1.2.1, A.2.2

ACQUIREコマンド, 9.3 ACROSSコマンド, 9.3 AD日時書式要素, 9.3, 9.3 ADD_ALTER_SESSIONプロシージャ(PL/SQL), C.2.1 ADD_CUBE_MODELプログラム, 9.3 ADD_DIMENSION_MEMBERプログラム, 9.3 ADD_DIMENSION_SOURCEプロシージャ(PL/SQL), B.4.2 ADD_MODEL_DIMENSIONプログラム, 9.3 ADD_MONTHSコマンド, 7.3 ADT

「抽象データ型」を参照

ADVISE_CUBEプロシージャ(PL/SQL), B.4.2, B.4.2 ADVISE_DIMENSIONALITYファンクション(PL/SQL), B.4.2 ADVISE_DIMENSIONALITYプロシージャ(PL/SQL), B.4.2 ADVISE_RELプロシージャ, B.4.2 ADVISE_RELプロシージャ(PL/SQL), B.4.2 ADVISE_SPARSITYプロシージャ(PL/SQL), B.4.2 Aggcount変数, 7.3, 8, 9.3, 9.3, 9.3, 9.3 AGGINDEX文, 9.3 AGGMAP ADDモデル・コマンド, 9.3 AGGMAPコマンド, 9.3 aggmapオブジェクト

変更の確認, 7.3

AGGMAP REMOVEモデル・コマンド, 9.3 AGGMAP SETコマンド, 9.3 AGGMAPINFOコマンド, 7.3 aggmap

コンパイル, 3.4.3, 9.3

定義, 9.3

削除, 9.3

計算式, 8

リスト, 7.3

キューブ・ディメンションからのモデルの削除, 10

「集計仕様」および「割当て仕様」も参照

集計アドバイザ, 3.4.4, 9.3, 9.3, 9.3, 9.3, B.4 AGGREGATEコマンド, 9.3 AGGREGATEファンクション, 7.3 データの集計

キャッシュ, 5.3

計算式, 7.3

即時計算, 3.4.4

パーティション変数, 8

事前計算, 3.4.4

リレーションの指定, 9.3

Aggcount変数の使用方法, 7.3

aggmapオブジェクトの使用方法, 3.4.1

TCONVERTの使用方法, 8

「集計仕様」も参照

集計

アナリティック・ワークスペース, B.4

AGGREGATIONファンクション, 7.3 集計仕様

コンパイル, 3.4.3

定義, 9.3

削除, 9.3

モデル, 9.3, 10, 10

書込み, 9.3

「データの集計」も参照

集計

変更の確認, 7.3, 7.3, 7.3

コンポジット値のアルゴリズム, 5.3 別名ディメンション

ベース・ディメンション(リスト), 8

定義, 9.3

削除, 9.3, 9.3

制限, 9.3

メンテナンス, 9.3

移入, 9.3

リストの取得, 8

別名

アナリティック・ワークスペース, 2.3.2.2

アナリティック・ワークスペース「アナリティック・ワークスペースの別名」を参照

ディメンション「別名ディメンション」を参照

ALLCOMPILEプログラム, 9.3 ALLOCATEコマンド, 9.3 データの割当て

aggmapオブジェクトの使用方法, 3.5

TCONVERTの使用方法, 8

「割当て仕様」も参照

割当て仕様

定義, 9.3

削除, 9.3

書込み, 9.3

「データの割当て」も参照

ALLOCERRLOGFORMATオプション, 5.3 ALLOCERRLOGHEADERオプション, 5.3 ALLOCMAPコマンド, 9.3 ALLSTATコマンド, 9.3 ALTER SESSIONコマンド, C.1 AM日時書式要素, 9.3, 9.3 アンパサンド&(amp;)演算子, 2.3.10 アンパサンド置換

例, 2.3.10

プログラムの引数, 6.3.2.3

QDRの使用, 2.3.2.5.6, 2.3.10

引数を渡すために使用, 6.3.2.3, 10

アナリティック・ワークスペースの別名

作成, 9.3

定義, 2.3.2.2

削除, 9.3

アナリティック・ワークスペース・オブジェクト

基礎となるキューブおよびキューブ・ディメンション, 8

アナリティック・ワークスペース

SQLからのアクセス, B

集計, B.4

アタッチ(リスト), 8

アタッチ, 5.3, 9.3

内容のサマリー、表示, 9.3

作成, 9.3

現行, 2.3.2.2

削除, 9.3, 9.3

オブジェクトの削除, 9.3

デタッチ, 6.7.6, 9.3

エクスポート, 6.7.6

アクティブの識別, 9.3

インポート, 6.7.6

名前, 2.3.2.2

情報の取得, 7.3

パーティション化, 9.3

セグメント, 9.3

共有, 5.3

更新, 10

別名「アナリティック・ワークスペースの別名」を参照

ANTILOGファンクション, 7.3 ANTILOG10ファンクション, 7.3 ANYファンクション, 7.3 逆正接の計算, 7.3 ARCCOSファンクション, 7.3 ARCSINファンクション, 7.3 ARCTANファンクション, 7.3 ARCTAN2ファンクション, 7.3 ARGコマンド

「ARGUMENTコマンド」を参照

ARGファンクション, 7.3 ARGCOUNTファンクション, 7.3 ARGFRファンクション, 7.3 ARGSファンクション, 7.3 ARGUMENTコマンド, 9.3 引数, 7.3

ユーザー定義ファンクション, 6.3.1

テキストとして渡す場合, 6.3.2.3, 10

プログラムに渡す場合, 7.3, 7.3, 7.3, 7.3, 9.3

アンパサンド置換の使用方法, 6.3.2.3

算術

DATE値の使用, 2.3.6.3

ASCIIファンクション, 7.3 ASCIISTRファンクション, 7.3 Assignイベント, 10 代入文

イベント, 10, 10, 10

トリガー, 10, 10, 10

ディメンション性が異なる場合, 8

QDRの使用, 2.3.2.5.2

認証, 8

テキスト式のエンコード, 8

Oracle OLAP, 10

AUTOGOプログラム, 6.7.6 AVERAGEファンクション, 7.3 AWコマンド, 9.3

AW ALIASLIST, 9.3

AW ATTACH, 9.3

AW CREATE, 9.3

AW DELETE, 9.3

AW DETACH, 9.3

AW FREEZE, 9.3

AW LIST, 9.3

AW PURGE, 9.3

AW ROLLBACK, 9.3

AW SEGMENTSIZE, 9.3

AW THAW, 9.3

イベント, 6.7.6

トリガー, 6.7.6

AWファンクション, 7.3 AW PURGE, 9.3 AW_ATTACHプロシージャ(PL/SQL), B.4.2 AW_COPYプロシージャ(PL/SQL), B.4.2 AW_CREATEプロシージャ(PL/SQL), B.4.2 AW_DELETEプロシージャ(PL/SQL), B.4.2 AW_DETACHプロシージャ(PL/SQL), B.4.2 AW_RENAMEプロシージャ(PL/SQL), B.4.2 AW_TABLESPACEファンクション(PL/SQL), B.4.2 AW_UPDATEプロシージャ(PL/SQL), B.4.2 AWDESCRIBEプログラム, 9.3 AWWAITTIMEオプション, 5.3

B

BACKファンクション, 7.3, 7.3, 7.3

BADLINEオプション, 5.3, 6.5.2

ベース・ディメンション

値の検索, 7.3, 7.3

識別, 7.3

ステータス・リストの設定, 10

BASEDIMファンクション, 7.3 BASEVALファンクション, 7.3 BC日時書式要素, 9.3, 9.3 BEGINDATE, 7.3 BIN_TO_NUMファンクション, 7.3 バイナリ・データ, 2.1.6, 2.1.6 BITANDファンクション, 7.3 ビット、追加, 7.3 BLANKコマンド, 9.3 レポートの空白行, 9.3 BLANKSTRIPファンクション, 7.3 BMARGINオプション, 5.3 ブール

データ型, 2.1.5

式, 2.3.8

演算子, 2.2.2

値, 5.3, 5.3

プログラムの分岐, 9.3, 9.3, 9.3, 10, 10, 10 BREAKコマンド, 9.3 バケット番号、取得, 8 Oracle OLAPのビルド番号, 7.3 バイト

式での使用, 8

バイト文字列, 2.1.6, 2.1.6

C

CACHE文, 9.3, 9.3, 9.3, 9.3, 9.3

キャッシュ

「OLAPセッション・キャッシュ」を参照

キャッシュ, 9.3 計算メンバー

ディメンションへの追加, 10

識別, 7.3

線形回帰の計算, 10 CALENDARWEEKオプション, 5.3 CALLコマンド, 9.3 CALLTYPEファンクション, 7.3 プログラムにおけるCASE文, 10 CATEGORIZEファンクション, 7.3 CDAコマンド, 9.3 CEILファンクション, 7.3 CHANGEBYTESファンクション, 7.3 CHANGECHARSファンクション, 7.3 CHANGEDRELATIONSファンクション, 7.3 CHANGEDVALIESファンクション, 7.3 キャラクタ・セット, 8, 8 文字

変換, 7.3

置換, 8

10進値で表示, 2.1.2.2

16進値で表示, 2.1.2.2

Unicodeで表示, 2.1.2.2

特殊, 2.1.2.2

CHARLISTファンクション, 7.3 CHGDFNコマンド, 9.3 CHGDIMSファンクション, 7.3 CHILDLOCK文, 9.3 CHRファンクション, 7.3 CLEAN_ALTER_SESSIONプロシージャ(PL/SQL), C.2.1 CLEANUPコマンド

「OLAP DMLのSQLコマンド」を参照

CLEARコマンド, 9.3 CLOSEコマンド

「OLAP DMLのSQLコマンド」を参照

COALESCEファンクション, 7.3 コード・コメント, 2.1.2.1 列

レポートのデフォルト幅, 5.3, 5.3

レポート列からの値の取得, 7.3

レポートのヘッダー, 10

レポート, 5.3

複数行のテキスト, 7.3

COLVALファンクション, 7.3 COLWIDTHファンクション, 5.3 COMMASオプション, 5.3 コメント

コード, 2.1.2.1

プログラムにおけるコメント, 6.3 COMMITコマンド, 9.3 比較

日付, 2.3.8.5

値, 2.3.8.2, 2.3.8.6

比較演算子, 2.2.2 コンパイル可能なオブジェクト, 5.3 COMPILEコマンド, 9.3 COMPILEMESSAGEオプション, 5.3 COMPILEWARNオプション, 5.3 コンパイル, 5.3

aggmap, 3.4.3

集計仕様, 3.4.3

モデル, 3.3.3

プログラム, 6.4

SQL文, 10

エラー・メッセージの抑止, 5.3

コンポジット, 2.3.2.4

ベース・ディメンション値, 7.3

結合ディメンションへの変更, 9.3

定義, 1.5.1.2, 9.3, 9.3

削除, 9.3, 9.3

値の削除, 10

索引アルゴリズム, 5.3, 5.3

索引タイプ(判別), 8

関連付けられたオブジェクトのリスト, 10

メンテナンス, 10

レポート, 10, 10

値の表示, 10

値の指定, 2.3.2.3.1

値の指定, 2.3.2.3.1, 2.3.2.3.2

値のテスト, 7.3

名前のない, 9.3

「名前のないコンポジット」も参照

コンポジット(通常および圧縮)

概要, B.3.1

連結ディメンション

定義, 9.3

削除, 9.3, 9.3

値の指定, 2.3.2.3.2, 2.3.2.3.2

「ディメンション」も参照

コマンドの条件付き実行, 9.3 条件式, 2.3.9

Boolean, 2.3.9.1

IF, 2.3.9.1

SWITCH, 2.3.9.2

条件演算子, 2.3.9, 2.3.9 結合ディメンション

ベース・ディメンション値, 7.3

コンポジットへの変更, 9.3

定義, 9.3

削除, 9.3, 9.3

索引タイプ(判別), 8

「ディメンション」も参照

CONSIDERコマンド, 9.3 CONTEXTコマンド, 6.3.4.6, 9.3 CONTEXTファンクション, 6.3.4.6, 7.3 CONTINUEコマンド, 9.3 制御されたスパース性, 9.3 変換

ルール、文字列から日付への変換, 2.1.4.3, 7.3

CONVERTファンクション, 7.3 CONVERTプロシージャ(PL/SQL), B.4.2 変換

文字, 7.3

16進数からRAW, 7.3

数値, 8, 8

RAW値, 8

ROWIDデータ型, 8, 8

ASCIIへの変換, 7.3

DSINTERVALへの変換, 8

YMINTERVALへの変換, 8

データ型の変換

小数から整数, 7.3

概要, 2.1.8

COPYDFNコマンド, 9.3 定義のコピー, 9.3 CORRELATIONファンクション, 7.3 COSファンクション, 7.3 COSHファンクション, 7.3 余弦の計算, 7.3, 7.3 COUNTファンクション, 7.3 CREATE_LOGICAL_MODELプログラム, 9.3 キューブ・ディメンション・メンバー

階層への追加, 10

削除, 10

階層からの削除, 10

キューブ・ディメンション

モデルへのディメンションの追加, 9.3

モデルの追加, 10

モデルの追加, 9.3

モデルの作成, 9.3

モデルの削除, 10

物理的な特長の確認, 8

モデルからのディメンションの削除, 10

aggmapからのモデルの削除, 10

キューブ

物理的な特長の確認, 8

CUMSUMファンクション, 7.3 累積合計, 7.3, 8 現行

アナリティック・ワークスペース, 2.3.2.2

カレント・ディレクトリ, 9.3

変更, 9.3

確認, 9.3

現行の出力ファイル, 5.3, 10 現行のステータス・リスト

設定, 10

CURRENT_DATEファンクション, 7.3, 7.3 CURRENT_TIMESTAMPファンクション, 7.3 カーソル, 10

クローズ(SQL), 10

インポート(SQL), 10

カスタム・メジャー, A.2.1

OLAP_EXPRESSIONの使用例, A.2.2

D

データ

バイナリ, 2.1.6, 2.1.6

データのエクスポート・プログラム, 6.7.2 データ・フェッチ(SQL), 10 データのインポート・プログラム, 6.7.2 データ型変換, A.2.2 データ型

ブール, 2.1.5

変換, 2.1.8

レポートの作成, 10, 10

日付, 2.1.4, 2.1.4, 2.1.4.4

DATE, 2.1.3

DATETIME, 2.1.4

オブジェクトのデータ型の判別, 8

DSINTERVAL, 2.1.4.9

変数, 9.3

数値, 2.1.1

式, 2.3.1.1

数式, 2.3.4.1

ユーザー定義ファンクション, 6.3.1

式のデータの修飾, 8

RAW, 2.1.6, 2.1.6

アクセスの制限, 10

ROWID, 2.1.7.1

単一の値の表示, 10

テキスト, 2.1.2

TIMESTAMP, 2.1.4.5

TIMESTAMP_LTZ, 2.1.4.7

TIMESTAMP_TZ, 2.1.4.6

異なる形式への変換, 8

UROWID, 2.1.7.2

YMINTERVAL, 2.1.4.8

DATABASEコマンド

名前の変更, D.3.4

「AWコマンド」を参照

DATABASEファンクション

名前の変更, D.3.4

「AWファンクション」を参照

データベース初期化, C, C.1 日付データ型, 2.1.4, 2.1.4, 2.1.4.4 DATEデータ型, 2.1.3 日付書式モデル, 9.3

長い, 9.3

句読点, 9.3

短い, 9.3

テキスト, 9.3

DATE_FORMAT, 9.3 DATEFORMATオプション, 5.3 DATEORDERオプション, 5.3 日付, 8, 8

算術, 2.3.6.3

比較, 2.3.8.5, 2.3.8.5

現在, 8, 8

算術式における使用, 2.3.7

テキスト式における使用, 2.3.5.2

日時演算, 2.3.6.3 日時データ

書式, 9.3

DATETIMEデータ型, 2.3.5.2 DATETIMEデータ型, 2.1.4 日時式, 2.3.6.1 日時書式要素

グローバリゼーション・サポート, 9.3

大文字の使用, 9.3

ISO規格, 9.3

RR, 9.3

接尾辞, 9.3

日時値

切捨て, 8

DAY日時書式要素, 9.3 DAYABBRLENオプション, 5.3 DAYNAMESオプション, 5.3 DAYOFファンクション, 7.3 DBDESCRIBEプログラム

名前の変更, D.3.4

「AWDESCRIBEプログラム」を参照

DBGOUTFILEコマンド, 6.5.3, 9.3

ECHOPROMPT, 5.3

DBMS_AWパッケージ, B DBMS_AW PL/SQLパッケージ

ADD_DIMENSION_SOURCEプロシージャ, B.4.2

ADVISE_CUBEプロシージャ, B.4.2

ADVISE_DIMENSIONALITYファンクション, B.4.2

ADVISE_DIMENSIONALITYプロシージャ, B.4.2

ADVISE_RELプロシージャ, B.4.2

ADVISE_SPARSITYプロシージャ, B.4.2

AW_ATTACHプロシージャ, B.4.2

AW_COPYプロシージャ, B.4.2

AW_CREATEプロシージャ, B.4.2

AW_DELETEプロシージャ, B.4.2

AW_DETACHプロシージャ, B.4.2

AW_RENAMEプロシージャ, B.4.2

AW_TABLESPACEファンクション, B.4.2

AW_UPDATEプロシージャ, B.4.2

CONVERTプロシージャ, B.4.2

EVAL_NUMBERファンクション, B.4.2

EVAL_TEXTファンクション, B.4.2

EXECUTEプロシージャ, B.4.2

GETLOGファンクション, B.4.2

INFILEプロシージャ, B.4.2

INTERPファンクション, B.4.2

INTERP_SILENTファンクション, B.4.2

INTERPCLOBファンクション, B.4.2

OLAP_ONファンクション, B.4.2, B.4.2

PRINTLOGプロシージャ, B.4.2

RUNプロシージャ, B.4.2

SHUTDOWNプロシージャ, B.4.2

SPARSITY_ADVICE_TABLEプロシージャ, B.4.2

STARTUPプロシージャ, B.4.2

DBMS_AW$_COLUMNLIST_T表, B.3.2 DBMS_AW$_DIMENSION_SOURCE_Tオブジェクト型, B.3.2 DBMS_AW$_DIMENSION_SOURCES_T表型, B.3.2 DBTIMEZONEファンクション, 7.3 DBWAITTIMEオプション

名前の変更, D.3.4

「AWWAITTIMEオプション」を参照

DDOFファンクション, 7.3 DEADLOCK文, 9.3 デバッグ, 5.3

計算式, 10

モデル, 3.3.5, 10

プログラム, 6.5, 10

DECIMALデータ型、比較, 2.3.8.3.3 小数点記号(表示), 5.3 小数点以下の桁数(表示), 5.3 小数値, 5.3

出力の小数点記号, 5.3

整数への切捨て, 7.3

DECIMALCHARオプション, 5.3 DECIMALOVERFLOWオプション, 5.3 DECIMALSオプション, 5.3 DECLARE CURSORコマンド

「OLAP DMLのSQLコマンド」を参照

DECODEファンクション, 7.3 デフォルト

出力ファイル, 10

リレーション, 2.3.2.3.3, 10

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

有効かどうかの判別, 8

DEFAULTAWSEGSIZEオプション, 5.3 DEFAULTDBFSIZEオプション

名前の変更, D.3.4

「DEFAULTAWSEGSIZEオプション」を参照

DEFINE AGGMAPコマンド, 9.3, 9.3 DEFINEコマンド, 9.3

イベント, 6.7.6

トリガー, 6.7.6

DEFINE COMPOSITEコマンド, 9.3 DEFINE DIMENSION ALIASOFコマンド, 9.3 DEFINE DIMENSIONコマンド, 9.3 DEFINE FORMULAコマンド, 9.3 DEFINE MODELコマンド, 9.3 DEFINE PARTITION TEMPLATEコマンド, 9.3 DEFINE PROGRAMコマンド, 9.3 DEFINE RELATIONコマンド, 9.3 DEFINE SURROGATEコマンド, 9.3, 9.3 DEFINE VALUESETコマンド, 9.3 DEFINE VARIABLEコマンド, 9.3 DEFINE WORKSHEETコマンド, 9.3 定義

aggmapオブジェクト, 9.3

別名ディメンション, 9.3

アナリティック・ワークスペース・オブジェクト, 9.3

ディメンション別名, 9.3

ディメンション, 9.3

計算式, 9.3

パーティション, 9.3

プログラム, 9.3

リレーション, 9.3, 9.3

サロゲート, 9.3

値セット, 9.3, 9.3

変数, 9.3

ワークシート・オブジェクト, 9.3

定義

コピー, 9.3

作成, 9.3

オブジェクト・プロパティの作成, 10

削除, 9.3

NAMEディメンション内での移動, 10

レポート, 9.3, 9.3

テスト, 7.3

DELETEコマンド, 9.3

イベント, 10, 10

トリガー, 10, 10

Deleteイベント, 10 DELETE_ALTER_SESSIONプロシージャ(PL/SQL), C.2.1 削除

別名ディメンション, 9.3

コンポジット値, 10

コンポジット, 9.3

定義, 9.3

ディメンション別名, 9.3

ディメンション値, 10, 10

ディメンション, 9.3

計算式, 9.3

モデル, 9.3

オブジェクト, 9.3

パーティション・テンプレート, 9.3

パーティション, 9.3

プログラム, 9.3

サロゲート, 9.3

トリガー, 10, 10, 10

値セット, 9.3

DEPRDECLファンクション, 7.3 DEPRDECLSWファンクション, 7.3 資産の減価償却, 7.3, 7.3, 7.3, 7.3 DEPRSLファンクション, 7.3 DEPRSOYDファンクション, 7.3 DESCRIBEコマンド, 9.3 説明

定義への追加, 10

定義から削除, 10

デタッチ

アナリティック・ワークスペース, 6.7.6

ディメンション別名

「別名ディメンション」を参照

DIMENSIONコマンド、モデル内, 10 DIMENSION文

集計用, 9.3

割当て用, 9.3

ディメンション・ステータス

式への影響, 2.3.1.2.2

NULL, 5.3

リストア, 6.3.4.2

現行値の保存, 6.3.4.2

ディメンション・サロゲート

値の代入, 10

定義, 9.3

ディメンション値

比較, 2.3.8.4, 2.3.8.4

関連する値のカウント, 8

値の削除, 10, 10

最新の値, 8

NULL, 5.3

数値(判別), 8, 8

ステータスにある値の数, 8

ステータス・リストでの位置, 8

現行のステータス・リストの取得

取得, 8

ステータスにある最初の値の取得, 8 ステータスにある最後の値の取得, 8 ステータスの設定, 10 ソート, 8, 10 テスト, 7.3 修飾データ参照の使用方法, 8 LIMITコマンドの結果の使用方法, 8 ディメンション性、変更, 7.3 ディメンションベースの方程式, 3.3.1 ディメンション

キューブ・ディメンション・モデルへの追加, 9.3

ステータスの確認, 8

値の比較, 2.3.8.4

定義, 9.3, 9.3

サロゲートの定義, 9.3

削除, 9.3, 9.3

ステータスの判別, 8

制限, 10

単一の値への制限, 2.3.2.5

関連付けられたオブジェクトのリスト, 10

値のループ処理, 9.3, 9.3, 9.3

メンテナンス, 10

テキスト・ディメンションの数値, 2.3.4.2

式, 2.3.1.2, 2.3.1.2.1

モデル内での順序, 10

QDRの使用, 2.3.2.5, 2.3.2.5.5

関連, 2.3.2.3.3, 10

キューブ・ディメンション・モデルからの削除, 10

以前の値のリストア, 6.3.4.3

現行の値の保存, 6.3.4.3

ステータス・リスト, 8, 8

タイプ(判別), 8

ワークシート, 9.3

「別名ディメンション」、「ベース・ディメンション」、「連結ディメンション」、「結合ディメンション」、「単純なディメンション」も参照

ディレクトリ

変更, 9.3

カレントの特定, 9.3

エラー・メッセージの表示, 5.3 DIVIDEBYZEROオプション, 5.3 除算, 8

ゼロによる除算, 5.3

剰余の計算, 8

DOコマンド, 9.3, 9.3

FORで使用, 9.3

SWITCHで使用, 10

WHILEで使用, 10

DOENDコマンド, 9.3 二重引用符, 2.1.2.1 DSECONDSオプション, 5.3 DSINTERVALデータ型, 2.1.4.9 DSINTERVALファンクション, 8 DY日時書式要素, 9.3

E

ECHOPROMPTオプション, 5.3, 6.5.3

EDITコマンド, 9.3

以前に実行したコマンドの編集, 10

EIFファイル, 6.7.6, 9.3

データのエクスポート, 9.3

データのインポート, 10

EIFBYTESオプション, 5.3 EIFEXTENSIONPATHオプション, 5.3 EIFNAMESオプション, 5.3 EIFSHORTNAMESオプション, 5.3 EIFTYPESオプション, 5.3 EIFUPDBYTESオプション, 5.3 EIFVERSIONオプション, 5.3 埋込み合計ディメンション・ビュー, A.2.2 埋込み合計ファクト・ビュー, A.2.2 エンコード, 8 ENDDATEファンクション, 7.3 ENDOFファンクション, 7.3 EQコマンド, 9.3 方程式、ディメンションベース, 3.3.1 ERRNAMESオプション, 5.3 エラー・メッセージ, 10

独自のエラー・メッセージの作成, 6.3.5.4

中断, 6.3.5.1

表示, 5.3

テキストを保持するオプション, 5.3

エラー条件なしでの生成, 10

エラー条件の通知, 10

抑制, 5.3, 6.3.5.3

コンパイル中の抑制, 5.3

ラップ, 5.3

ERRORLOG文, 9.3 ERRORMASK文, 9.3 ERRORNAMEオプション, 5.3, 6.3.5 エラー

計算中の制御, 2.3.4.4

処理, 6.3.5

ネストしたプログラムでの処理, 10, 10

プログラムでの処理, 10

最初に発生するエラーの名前, 5.3

通知, 6.3.5.4, 10, 10

SQLエラー・コード, 5.3

数値データの比較時, 2.3.8.3, 2.3.8.3.2, 2.3.8.3.3

ERRORTEXTオプション, 5.3, 6.3.5 LIKEのエスケープ文字, 5.3 エスケープ・シーケンス, 2.1.2.2, 2.1.2.2 ESCAPEBASEオプション, 5.3 EVAL_NUMBERファンクション(PL/SQL), B.4.2 EVAL_TEXTファンクション(PL/SQL), B.4.2 イベント

Assign, 10, 10

代入文, 10

Define, 6.7.6

Delete, 10, 10

削除, 10, 10, 10

確認, 8

Maintain, 10, 10

Property, 10, 10

Update, 6.7.6, 6.7.6, 10

EVERSIONファンクション, 7.3 EVERYファンクション, 7.3 EXECUTEプロシージャ(PL/SQL), B.4.2 EXISTSファンクション, 7.3 EXPファンクション, 7.3 指数関数による予測, 9.3 指数、取得, 7.3 EXPORTコマンド, 6.7.6, 9.3 EXPORT(EIFへ)コマンド, 9.3 EXPORT(スプレッドシートへ)コマンド, 9.3 エクスポート

メタデータ, 9.3

データのエクスポート, 5.3, 5.3, 9.3 式

アンパサンド置換, 2.3.10

Boolean, 2.3.8, 2.3.9, 2.3.9

ディメンション性の変更, 7.3

比較, 8

条件, 2.3.9, 2.3.9

データ型, 2.3.1.1

日付, 2.3.7

日時, 2.3.6.1

概要, 2.3

ディメンションの判別, 2.3.1.2.1

ディメンション, 2.3.1.2, 2.3.1.2.1

ディメンション・ステータス, 2.3.1.2.2

空のセル, 2.3.3

内部表現, 8

期間, 2.3.6.2

NA値, 2.3.3

数値, 2.3.4

使用するオブジェクト, 2.3.2

埋込み, 8, 8

解析, 10

最大の式の取得, 7.3

最小の式の取得, 8

保存, 9.3

バイト数, 8

置換, 2.3.10

テキスト, 2.3.5

トリミング, 8, 8

オブジェクトの使用方法, 2.3.2.4

修飾データ参照の使用方法, 8

EXPTRACEオプション, 5.3 EXTBYTESファンクション, 7.3 EXTCHARSファンクション, 7.3 EXTCOLSファンクション, 7.3 EXTLINESファンクション, 7.3 EXTRACTファンクション, 7.3

F

最も変化の速いディメンション, 9.3

FCCLOSEコマンド, 9.3

FCEXECコマンド, 9.3

FCOPENコマンド, 7.3

FCQUERYコマンド, 7.3

FCSETコマンド, 9.3

FETCHコマンド

「OLAP DMLのSQLコマンド」を参照

FETCHコマンド(OLAP DML), A.2.2, A.2.2 データのフェッチ(SQL), 10 ファイルの入出力, 7.3, 7.3, 9.3, 9.3, 9.3, 9.3, 9.3

クローズ, 7.3, 9.3, 9.3

カレント・ディレクトリ, 9.3

処理時のエラーの診断, 7.3

改ページの挿入, 9.3

情報の収集, 7.3

オープン・ファイルのリスト, 10

オープン, 7.3

データの処理, 9.3

レコードの読取り, 7.3

データの読取り, 9.3

ファイルからのOracle OLAPコマンドの読取り, 7.3, 10

読取りの記録, 8

属性の設定, 9.3

書込み, 9.3

FILECLOSEコマンド, 9.3 FILECOPYコマンド, 9.3 FILEDELETEコマンド, 9.3 FILEERRORファンクション, 7.3 FILEGETファンクション, 7.3 FILEMOVEコマンド, 9.3 FILENEXTファンクション, 7.3 FILEOPENファンクション, 7.3 FILEPAGEコマンド, 9.3 FILEPUTコマンド, 9.3 FILEQUERYファンクション, 7.3 FILEREADコマンド, 9.3 ファイル

出力の追加, 10

データのインポート, 10

出力の保存, 10

FILESETコマンド, 9.3 ファイル・ユニット, 7.3, 7.3

属性, 7.3

出力先の番号, 5.3

オープン, 7.3, 10

データの読取り, 9.3

属性の設定, 9.3

FILEVIEWコマンド, 9.3 FILTERLINESファンクション, 7.3 財務分析、シナリオ・モデリング, 3.3.2.6 FINDBYTESファンクション, 7.3 FINDCHARSファンクション, 7.3 FINDLINESファンクション, 7.3 FINTSCHEDファンクション, 7.3 浮動小数点、比較, 2.3.8.3.2 浮動小数点形式

計算時の制限, 2.3.4.3

使用, 2.3.4.3

FLOORファンクション, 7.3 FORコマンド, 9.3, 9.3

制御の移動, 9.3

例, 9.3

ディメンション値のループ処理, 9.3, 9.3, 9.3

BREAKとの使用, 9.3

CONTINUEとの使用, 9.3

OKFORLIMITとの使用, 5.3

TEMPSTATとの使用, 10

FORECASTコマンド, 9.3 FORECASTファンクション, 7.3 予測コンテキスト, 9.3

クローズ, 9.3

実行, 9.3

オープン, 7.3

問合せ, 7.3

特性の設定, 7.3

FORECAST.REPORTプログラム, 9.3, 9.3 書式モデル, 9.3 書式モデル, 2.1.4.2

日付

変更, 2.1.4.2, 9.3

デフォルト書式, 2.1.4.2, 9.3

書式

データベースからの戻り値, 2.1.4.2

データベースに格納された値, 2.1.4.2

日付および数値，「書式モデル」を参照

書式設定

日時データ, 9.3

計算式

aggmapオブジェクト, 8

データの集計, 7.3

コンパイル, 5.3, 9.3

デバッグ, 10

定義, 9.3, 9.3

削除, 9.3, 9.3

式(取得), 8

再帰的, 5.3

新しい式の指定, 9.3

FPMTSCHEDファンクション, 7.3 FROM_TZファンクション, 7.3 FULLDSCプログラム, 9.3 ファンクション

コール, 9.3

ユーザー定義, 6.3.1, 6.3.1, 9.3, 10

G

GETファンクション, 7.3

GETLOGファンクション(PL/SQL), B.4.2

GOTOコマンド, 9.3

GREATESTファンクション, 7.3

区切り文字, 5.3

グルーピングID, 4.3, 4.3, 4.3

GROUPINGIDコマンド, 9.3

GROUPINGIDファンクション, 7.3

GROWRATEファンクション, 7.3

増加率, 7.3

H

プログラムでのエラー処理, 10

ハッシュ・パーティション, 9.3

ハッシュ値, 8

ヘッダー, 10

レポート, 10

出力ページ, 5.3

ページ番号の指定, 5.3

標準レポート・ヘッダーの生成, 10

HEADINGコマンド, 10 16進数

RAWへの変換, 7.3

HEXTORAWファンクション, 7.3 HIDEコマンド, 10 階層

シェイプ, 7.3

階層のシェイプ, 7.3 HIERHEIGHTコマンド, 10 HIERHEIGHTファンクション, 7.3 HIERSHAPEファンクション, 7.3 Holt-Winters予測, 9.3 双曲線

余弦の計算, 7.3

正弦の計算, 8

正接の計算, 8

I

ID

キャラクタ・セット, 8, 8

IFコマンド, 9.3, 10 IF条件式, 2.3.9.1 IMPORTコマンド, 6.7.6, 10

「OLAP DMLのSQLコマンド」も参照

インポート

メタデータ, 10

データのインポート, 5.3, 5.3

更新頻度の制御, 5.3

アナリティック・ワークスペースから, 10

スプレッドシートから, 10

テキスト・ファイルから, 10

オブジェクトの名前の追跡, 5.3

オブジェクト型の追跡, 5.3

INCLUDEコマンド, 10 INF値

OLAP DML, 7.3

INF_STOP_ON_ERRORオプション, 5.3 INFILEコマンド, 10 INFILEプロシージャ(PL/SQL), B.4.2 無限大

数値, 7.3, 7.3

INFOファンクション, 7.3

FORECAST, 7.3

MODEL, 7.3

PARSE, 7.3

REGRESS, 7.3

INITCAPファンクション, 7.3 初期化パラメータ, C, C.1 init.oraファイル, C.1 INLISTファンクション, 7.3 入力ファイル

ファイルからの読取り, 7.3, 10

SNAPI接続の使用, 7.3

XCAダイアログの使用, 7.3

INSBYTESファンクション, 7.3 INSCHARSファンクション, 7.3 INSCOLSファンクション, 7.3 INSLINESファンクション, 7.3 INSTATファンクション, 7.3 小数の整数部分, 7.3 融資利息, 7.3, 8 内部収益率, 7.3 INTERPファンクション(PL/SQL), B.4.2 INTERP_SILENTプロシージャ(PL/SQL), B.4.2 INTERPCLOBファンクション(PL/SQL), B.4.2 期間

算術, 2.3.6.3

期間式, 2.3.6.2 INTPARTファンクション, 7.3 IRRファンクション, 7.3 ISDATEプログラム, 7.3 ISEMPTYファンクション, 7.3 ISINFINITE, 7.3 ISNAN, 7.3 ISSESSIONファンクション, 7.3 ISVALUEファンクション, 7.3

J

JOINBYTESファンクション, 7.3

JOINCHARSファンクション, 7.3

JOINCOLSファンクション, 7.3

JOINLINESファンクション, 7.3

K

KEYファンクション, 7.3

L

ラベル列の幅, 5.3

プログラムの分岐, 9.3

プログラムでのエラー処理, 10

ラベル, 9.3

プログラム内, 6.3.5.6

IFNONEで使用, 10

LAGファンクション, 3.3.2.3, 8 LAGABSPCTファンクション, 8 LAGDIFファンクション, 8 LAGPCTファンクション, 8 2つの式の大きい方の値, 8 LARGESTファンクション, 8 式の最大値, 8 LAST_DAYファンクション, 8 LCOLWIDTHオプション, 5.3 LDコマンド, 10 LEADファンクション, 3.3.2.3, 8 LEASTファンクション, 8 LENGTHファンクション, 8 LENGTH2ファンクション, 8 LENGTH4ファンクション, 8 LENGTHBファンクション, 8 LENGTHCファンクション, 8 LIKE演算子, 5.3, 5.3 LIKECASEオプション, 5.3 LIKEESCAPEオプション, 5.3 LIKENLオプション, 5.3 LIMIT BASEDIMSコマンド, 10 LIMITコマンド, 10

LEVELRELの使用方法, 10

NOCONVERTの使用方法, 10

親リレーションの使用方法, 10

POSLISTの使用方法, 10

関連ディメンションの使用方法, 10

値の使用方法, 10

LIMITファンクション, 8 制限マップ, A.1, A.2.2, A.2.2

処理順序, A.2.2

構文, A.2.2

制限

別名ディメンション, 9.3

ディメンション, 10

多次元の値セット, 9.3

LIMITMAPINFOファンクション, 8 LIMIT.SORTRELオプション, 5.3 LIMITSTRICTオプション, 5.3, 10 レポート・ヘッダーの行サイズ, 5.3 LINENUMオプション, 5.3 レポートのページの出力行, 5.3 LINESLEFTオプション, 5.3 LISTBYプログラム, 10 LISTFILESコマンド, 10 LISTNAMESプログラム, 10 リテラル

数値, 2.1.1

テキスト, 2.3.5

LOADコマンド, 10 融資, 7.3

金利払い, 7.3

金利払い, 8

支払い, 7.3

支払い, 8

ローカル変数, 10, 10 独立したロケール, 9.3 LOCALTIMESTAMPファンクション, 8 LOGコマンド, 10 LOGファンクション, 8 LOG10ファンクション, 8 論理演算子, 2.2.2 ログ

10を底とする対数の計算, 8

自然対数の計算, 8

SQL FETCHでのLOOP句, 10 ループ処理, 9.3

ディメンション・ステータス, 9.3

ループ処理、明示的, 4.3, 4.3, 4.3, 4.3 LOWCASEファンクション, 8 LOWERファンクション, 8 小文字への変換, 8 LPADファンクション, 8 LSIZEオプション, 5.3 LTRIMファンクション, 8

M

MAINTAINコマンド

イベント, 10, 10

MAINTAIN ADD, 10

DAY値、WEEK値、MONTH値、QUARTER値およびYEAR値に対するMAINTAIN ADD, 10

TEXT値、ID値およびINTEGER値に対するMAINTAIN ADD, 10

MAINTAIN ADD SESSION, 10

MAINTAIN DELETE, 10, 10, 10

MAINTAIN MERGE, 10

MAINTAIN MOVE, 10

MAINTAIN RENAME, 10

トリガー, 10, 10

Maintainイベント, 10 メンテナンス

別名ディメンション, 9.3

コンポジット, 10

ディメンション, 10

パーティション・テンプレート, 10

パーティション, 10

MAKEDATEファンクション, 8 余白, 5.3

下部余白の設定, 5.3

上部余白の設定, 5.3

MAXファンクション, 8 MAXBYTESファンクション, 8 MAXCHARSファンクション, 8 MAXFETCHオプション, 5.3 最大値, 8

ステータスにある各期間, 8

2つの式の大きい方の値, 8

MEASUREDIM文

集計用, 9.3

割当て用, 9.3

MEDIANファンクション, 8 中央値, 8 メッセージの抑止, 5.3 メタデータ(metadata)

エクスポート, 9.3

インポート, 10

MINファンクション, 8 最小値, 8

ステータスにある各期間, 8

2つの式の小さい方の値, 8

MMOFファンクション, 8 MODファンクション, 8 MODDAMPオプション, 5.3 MODEファンクション, 8 MODELコマンド, 10 モデル・ディメンション

キューブ・ディメンションへの追加, 9.3

キューブ・ディメンションからの削除, 10

モデル

仕様の追加, 10

aggmapへの追加, 9.3

キューブ・ディメンションへの追加, 10

キューブへの追加, 9.3

コンパイル, 3.3.3, 9.3, 10

作成, 10

キューブ・ディメンションの作成, 9.3

デバッグ, 3.3.5, 10

定義, 9.3

削除, 9.3

キューブ・ディメンションからの削除, 10

編集, 10

集計仕様, 9.3, 10, 10

情報の取得, 7.3

aggmapからの削除, 9.3, 9.3

キューブ・ディメンションのaggmapからの削除, 10

実行, 3.3.4, 10

シナリオ, 3.3.2.6

ソリューション変数, 3.3.1

MODEL.XEQRPTプログラム

コンパイル, 5.3

定義, 9.3, 9.3

指定, 10

ネスト, 10

オプション, 5.3, 5.3, 5.3, 5.3, 5.3, 5.3, 5.3

MODERRORオプション, 5.3 MODGAMMAオプション, 5.3 MODINPUTORDERオプション, 5.3 MODMAXITERSオプション, 5.3 MODOVERFLOWオプション, 5.3 MODSIMULTYPEオプション, 5.3 MODTOLERANCEオプション, 5.3 MODTRACEオプション, 5.3 モジュールのリリース番号, 7.3 MODULOファンクション, 8 MON日時書式要素, 9.3 MONITORコマンド, 10 監視, 10

プログラム行のコスト, 10

プログラムのコスト, 10

MONTH日時書式要素, 9.3 MONTHABBRLENオプション, 5.3 MONTHNAMESオプション, 5.3 MONTHS_BETWEENファンクション, 8 MOVEコマンド, 10 MOVINGAVERAGEファンクション, 8 MOVINGMAXファンクション, 8 MOVINGMINファンクション, 8 MOVINGTOTALファンクション, 8 多次元の値セット, 9.3 複数行のテキスト

列, 7.3

MULTIPATHHIERオプション, 5.3 マルチライタ・モード, 7.3, 9.3, 9.3

N

NA値

概要, 2.3.3

数値として入力, 5.3, 5.3

キャッシュ, 5.3

比較, 2.3.8.2, 2.3.8.2

処理方法の制御, 2.3.3.2, 2.3.3.2

ブール式, 2.3.8.2

式での使用, 2.3.3

NA2ビット, 2.3.3, 9.3

永続的置換, 5.3

置換, 8

文字列での置換, 8

取得, 7.3

スペル, 5.3

別の値での置換, 8

トリガー, 5.3, 5.3

NA2ビット, 2.3.3, 9.3 NA2ファンクション, 8 NA2値, 8, 8 NAFILLファンクション, 8 NAFLAGファンクション, 8 名前, 10

オブジェクト名の変更, 10

ディメンション, 10

ディクショナリ項目の名前のリスト, 10

NAMEディメンション, 10 名前

オブジェクトのリスト, 10

名前によるオブジェクトのリスト, 10

修飾オブジェクト, 2.3.2.2

NaN値

OLAP DML, 7.3

NASKIPオプション, 5.3 NASKIP2オプション, 5.3 NASPELLオプション, 5.3, 9.3 NATRIGGER

$NATRIGGERを参照

自然対数, 8 負の値, 5.3

出力, 5.3

根の取得, 5.3

正味現在価値, 8 NEW_TIMEファンクション, 8 NEXT_DAYファンクション, 8 NLS_CALENDARオプション, 5.3 NLS_CHARSET_IDファンクション, 8 NLS_CHARSET_NAMEファンクション, 8 NLS_CURRENCYオプション, 5.3 NLS_DATE_FORMATオプション, 5.3 NLS_DATE_LANGAUGEオプション, 5.3 NLS_DATE_LANGUAGE初期化パラメータ, 9.3 NLS_DUAL_CURRENCYオプション, 5.3 NLS_ISO_CURRENCYオプション, 5.3 NLS_LANGオプション, 5.3 NLS_LANGUAGE初期化パラメータ, 9.3 NLS_LANGUAGEオプション, 5.3 NLS_NUMERIC_CHARACTERSオプション, 5.3 NLS_SORTオプション, 5.3 NLS_TERRITORY初期化パラメータ, 9.3 NLS_TERRITORYオプション, 5.3 NLSSORTファンクション, 8 NONEファンクション, 8 NORMALファンクション, 8 NOSPELLオプション, 5.3 NPVファンクション, 8 NULL値

「NA値」を参照

NULLIFファンクション, 8 数値

乱数の代入, 8

出力におけるカンマ, 5.3

出力の小数点記号, 5.3

出力における小数点以下の桁数, 5.3

符号の決定, 8

出力における負の数, 5.3

端数処理, 8

スペルアウト, 9.3

出力の3桁区切り文字, 5.3

NUMBYTESファンクション, 8 NUMCHARSファンクション, 8 数値変換, 8, 8 数値データ型, 2.1.1

比較, 2.3.8.3, 2.3.8.3.3

混在, 2.3.4.1

数式, 2.3.4

結果のデータ型, 2.3.4.1

日付, 2.3.7

データ型の混在, 2.3.4.1

テキスト・ディメンション, 2.3.4.2

数値

端数処理, 8

NUMLINESファンクション, 8 NUMTODSINTERVALファンクション, 8 NUMTOYMNTERVALファンクション, 8 NVLファンクション, 8 NVL2ファンクション, 8

O

OBJファンクション, 8

オブジェクトの定義

説明の追加, 10

説明の削除, 10

オブジェクト型

自動的, A.1.2.1, A.2.2

事前定義, A.1.2.1, A.2.2

作成用の構文, A.1.2, A.2.2

オブジェクト, 9.3

変更の確認, 8

コンパイル, 5.3

コピーによる作成, 9.3

プロパティの作成, 10

データ型(判別), 8

定義, 9.3

定義(取得), 8

削除, 9.3, 9.3

定義の説明, 9.3

プロパティの説明, 9.3

ディメンション(取得), 8, 8

変更の削除, 10, 10

アナリティック・ワークスペースからのエクスポート, 9.3

トリガーの識別, 8

アナリティック・ワークスペースへのインポート, 10

式での使用, 2.3.2

リスト, 8

名前のリスト, 10, 10, 10

ロード, 10

現行定義として指定, 9.3

情報の取得, 8

格納に使用されるページ(判別), 8

修飾名, 2.3.2.2

権限の再評価, 10

名前の変更, 10

名前の制限, 9.3

記憶域クラス(判別), 8

存在の確認, 7.3

OBJLISTファンクション, 8 OBJORGファンクション, 8 OBSCUREファンクション, 8 OESEIFVERSIONオプション

名前の変更, D.3.4

「EIFVERSIONオプション」を参照

OKFORLIMITオプション, 5.3 OKNULLSTATUSオプション, 5.3, 10 OLAP API

最適化, C

OLAP DML

SQLでの実行, A.2.2, A.2.2, A.2.2, B.2, B.4.2

引用符, B.2.2

OLAPセッション・キャッシュ

作成の抑止, 5.3

空かどうかの確認, 8

概要, 5.3

変数, 8

非NA値, 8

集計された値の移入, 5.3, 9.3

NA値の移入, 5.3

OLAP_API_SESSION_INITパッケージ, C OLAP_API_SESSION_INIT PL/SQLパッケージ

ADD_ALTER_SESSIONプロシージャ, C.2.1

CLEAN_ALTER_SESSIONプロシージャ, C.2.1

DELETE_ALTER_SESSIONプロシージャ, C.2.1

OLAP_CONDITIONファンクション(SQL), A.2.2, A.2.2 OLAP_EXPRESSIONファンクション(SQL), A.2.2, B.2.1 OLAP_EXPRESSION_BOOLファンクション(SQL), A.2.2 OLAP_EXPRESSION_DATEファンクション(SQL), A.2.2 OLAP_EXPRESSION_TEXTファンクション(SQL), A.2.2 OLAP_ONファンクション(PL/SQL), B.4.2, B.4.2 OLAP_TABLE

ループ処理の最適化, 4.3, 4.3, 4.3, 4.3

OLAP_TABLEファンクション(SQL), A.2.2

カスタム・メジャー, A.2.2, A.2.2, A.2.2, A.2.2

データ・マップ・パラメータ, A.2.2

データ型変換, A.2.2

例, A.2.2

FETCHコマンド, A.2.2, A.2.2

制限マップ, A.1, A.2.2, A.2.2

セッション・ログの取得, B.4.2

ROW2CELL列の指定, A.2.2

OLAP DMLコマンドの指定, A.2.2

アナリティック・ワークスペースの指定, A.2.2

論理表の指定, A.2.2

ONATTACHプログラム, 6.7.6 ONDETACHプログラム, 6.7.6 オペレーティング・システムの識別, 8 演算子, 5.3

ブール, 2.2.2

比較, 2.2.2

条件, 2.3.9, 2.3.9

LIKE, 5.3, 5.3, 5.3

論理, 2.2.2

概要, 2.2

置換, 2.3.10

最適化

OLAP API, C, C.1

オプション

値の表示, 5.1

以前の値のリストア, 6.3.4.3

取得, 5.1

現行の値の保存, 6.3.4.3

指定, 5.1

ORA_HASHファンクション, 8 Oracle OLAP

内部ビルド番号, 7.3

序数

指定, 9.3

スペルアウト, 9.3

出力ファイル

現在, 5.3

OUTFILEコマンド, 10, 10

DBMS_AW.EXECUTEへの影響, B.4.2

DBMS_AW.RUNへの影響, B.4.2

OUTFILEUNITオプション, 5.3 範囲外の10進値, 5.3 出力, 10

リダイレクト, 10

ファイルへの保存, 10

オーバーフロー条件, 5.3

P

式への埋込み, 8, 8

PAGEコマンド, 10

PAGENUMオプション, 5.3

PAGEPRGオプション, 5.3

PAGESIZE, 5.3

レポートのページング, 10

改ページの挿入, 10

現行ページの行数, 5.3

下部余白の行, 5.3

上部余白の行, 5.3

ページに残った行, 5.3

ページの行, 5.3

ページ数, 5.3

カスタム・ヘッダーの生成, 5.3

標準ヘッダーの生成, 10

設定, 5.3

PAGINGオプション, 5.3 PARENSオプション, 5.3 PARSEコマンド, 7.3, 10 式の解析, 10 PARTITIONファンクション, 8 パーティション・テンプレート, 9.3, 9.3

定義, 9.3, 9.3

削除, 9.3

メンテナンス, 10

パーティション名の取得, 8

パーティション化する方法の取得, 8

PARTITIONCHECKファンクション, 8 パーティション変数, 9.3, 9.3

集計, 8

定義, 9.3

データの削除, 10

メンテナンス, 10

ディメンションの取得, 8

パーティション化する方法の取得, 8

パーティション化する方法, 8 パーティション, 9.3, 9.3, 9.3

値の追加, 10, 10

定義, 9.3

リスト・パーティション, 9.3

削除, 9.3 データの削除, 10 値に関する確認, 8 リスト, 9.3 セグメントのロック, 10 値の移動, 10 RANGE, 8, 9.3 ディメンションの取得, 8 名前の取得, 8 値の指定, 10 パターンの一致, 2.3.8.6.1 返済スケジュール, 7.3

融資利息, 7.3, 8

融資, 7.3, 8

PERCENTAGEファンクション, 8 権限プログラム, 6.7.1.1, 6.7.6, 6.7.6, 6.7.6, 6.7.6 権限, 10

オブジェクト定義への割当て, 10

権限の再評価, 10

アクセス条件の指定, 10

違反, 5.3

PERMITコマンド, 10 PERMIT_READプログラム, 6.7.1.1, 6.7.6 PERMIT_WRITEプログラム, 6.7.1.1, 6.7.6 PERMITERRORオプション, 5.3 PERMITREADERRORオプション, 5.3 PERMITRESETコマンド, 10 発音表記、テキスト式, 8 プラットフォームの識別, 8 P.M.日時書式要素, 9.3, 9.3 POPコマンド, 6.3.4.3, 6.3.4.4, 10, 10

ポップする一連の値, 10

POPLEVELコマンド, 10

ネスト, 10

使用方法, 6.3.4.5

移入

別名ディメンション, 9.3

PRECOMPUTE文, 9.3 PREPAREコマンド

「OLAP DMLのSQLコマンド」を参照

PRGTRACEオプション, 5.3 プリンタ・バッファ, B.4.2, B.4.2 PRINTLOGプロシージャ(PL/SQL), B.4.2 PROCEDURE文

「OLAP DMLのSQLコマンド」を参照, 10

プロファイル, 8 PROGRAMコマンド, 10 プログラム

定義へのプログラム内容の追加, 10

分岐, 9.3, 9.3, 10

分岐, 10

分岐ラベル, 9.3

コール, 9.3

CASE文, 10

コメント行, 6.3

コンパイル, 5.3, 6.4, 6.4, 9.3, 9.3

コマンドの条件付き実行, 10, 10

データのエクスポート, 6.7.2

データのインポート, 6.7.2

デバッグ, 5.3, 6.5, 10

引数の宣言, 6.3.2.1

定義, 9.3

削除, 9.3

起動方法の識別, 7.3

エラー処理, 5.3, 5.3, 10

エラー, 6.3.5

実行, 6.6

エラーが発生する実行の停止, 10

非表示, 10

ローカル変数, 10

OnAttach, 6.7.1.2, 6.7.1.3

引数を渡す場合, 7.3, 7.3, 7.3, 7.3

パフォーマンス・コスト, 10

権限, 6.7.1.1, 6.7.1.1, 6.7.6, 6.7.6, 6.7.6, 6.7.6, 6.7.6, 6.7.6, 6.7.6, 6.7.6

環境の保存, 6.3.4, 6.3.4

ステータスの保存, 7.3, 9.3

コマンドの繰返し, 9.3

以前の値のリストア, 6.3.4.3

ステータスのリストア, 10, 10

返す値, 10

コンパイル済コードの保存, 6.4

現行の値の保存, 6.3.4.3

ステータスの保存, 10, 10

起動, 6.7.1

実行の一時停止, 10

実行の終了, 10

実行時間, 10, 10

トリガー, 6.7.3.2, 6.7.6, 6.7.6, 6.7.6, 6.7.6, 6.7.6, 6.7.6, 6.7.6, 10

再表示, 10

プロパティ, 10

オブジェクト定義のコピー, 9.3

オブジェクト用に作成, 10

オブジェクトのリスト, 9.3

PROPERTYコマンド, 10

イベント, 10, 10

トリガー, 10, 10

Propertyイベント, 10 PUSHコマンド, 6.3.4.4, 10, 10

始点のマーク, 10

配置, 6.3.5.6

使用方法, 6.3.4.3

PUSHLEVELコマンド, 10

ネスト, 10

配置, 6.3.5.6

Q

QUALファンクション, 2.3.2.5, 8

修飾データ参照

アンパサンド置換, 2.3.2.5.6, 2.3.10

作成, 2.3.2.5

定義, 2.3.2.5

ディメンション, 2.3.2.5.5

リレーションの修飾, 2.3.2.5.4

変数のディメンションの置換, 2.3.2.5.2, 2.3.2.5.3

明示的な指定, 8

リレーションでの使用, 2.3.2.5.4

代入文での使用, 2.3.2.5.2

ディメンションでの使用, 2.3.2.5

リレーションでの使用, 2.3.2.5.4

変数での使用, 2.3.2.5.2, 2.3.2.5.2, 2.3.2.5.3

修飾オブジェクト名, 2.3.2.2 引用符

二重, 2.1.2.1

OLAP DML, B.2.2

R

RANDOMファンクション, 8

乱数, 8, 8, 8

ランダムなスパース性, 9.3

RANDOM.SEED.1オプション, 5.3

RANDOM.SEED.2オプション, 5.3

RANGEパーティション

定義, 9.3

計算の取得, 8

RANKファンクション, 8

コール数, 8

計算した値の数, 8

トリガーされたソートの数, 8

RANK_CALLSオプション, 8 RANK_CELLSオプション, 8 RANK_SORTSオプション, 8 ランク付けパフォーマンスの監視, 8 RAWデータ型, 2.1.6, 2.1.6 RAW値

変換, 8

ファイルの読取り, 8

現行のレコード番号, 8

エラー診断, 7.3

FILEREADコマンド, 9.3

レコードの処理, 9.3

レコードの読取り, 7.3

RECAPコマンド, 10 RECNOファンクション, 8 RECURSIVEオプション, 5.3 REDOコマンド, 10 REEDITコマンド, 10 REGEXP_COUNTファンクション, 8 REGEXP_INSTRファンクション, 8 REGEXP_REPLACEファンクション, 8 REGEXP_SUBSTRファンクション, 8 REGRESSコマンド, 7.3, 10 回帰

線形, 10

REGRESS.REPORTプログラム, 10 関連ディメンション, 2.3.2.3.3, 8, 10

制限, 5.3

RELATIONコマンド, 10 RELATION文

集計用, 9.3

割当て用, 9.3

リレーショナル表「表」を参照

アナリティック・ワークスペースからのエクスポート, 10

アナリティック・ワークスペースへのインポート, 10

リレーション

値の代入, 10, 10, 10

テキスト・リテラルとの比較, 2.3.8.6.2

デフォルト, 2.3.2.3.3, 10

定義, 9.3, 9.3

単一の値への制限, 2.3.2.5.4

QDRの使用, 2.3.2.5.4

ディメンションの置換, 2.3.2.5.4

aggmapにおけるリレーション

変更の確認, 7.3

RELEASEコマンド, 10 REMファンクション, 8 除算した後の剰余, 8 REMAINDERファンクション, 8 REMBYTESファンクション, 8 REMCHARSファンクション, 8 REMCOLSファンクション, 8 REMLINESファンクション, 8 REMOVE_CUBE_MODELプログラム, 10 REMOVE_DIMENSION_MEMBERプログラム, 10 REMOVE_MODEL_DIMENSIONプログラム, 10 RENAMEコマンド, 10 REPLACEファンクション, 8 置換

文字, 8

REPLBYTESファンクション, 8 REPLCHARSファンクション, 8 REPLCOLSファンクション, 8 REPLLINESファンクション, 8 REPORTコマンド, 10 レポート, 10 レポート

ROWコマンド出力の処理, 8

生成, 8, 10

ROWコマンドを使用した生成, 10

RESERVEDファンクション, 8 予約語, 8, 8 RESYNCコマンド, 10 RETURNコマンド, 10 プログラムの戻り値, 10 REVERTコマンド, 10, 10 ROLEオプション, 5.3 ロール, 8 負数の根, 5.3 ROOTOFNEGATIVEオプション, 5.3 ROUNDファンクション

説明, 8

日時の場合, 8

数値の場合, 8

ROWコマンド, 10

出力の処理, 8

ROWファンクション, 8 ROW2CELL列, A.1.3, A.2.2, A.2.2, A.2.2, A.2.2, A.2.2, A.2.2, A.2.2 ROWIDデータ型, 2.1.7.1

変換, 8, 8

ROWIDTOCHARファンクション, 8 ROWIDTONCHARファンクション, 8 ROWTOHEXファンクション, 8 RPADファンクション, 8 RR日時書式要素, 9.3 RTRIMファンクション, 8 RUNプロシージャ(PL/SQL), B.4.2 現在までの合計, 8, 10 実行時集計, 3.4.4 RUNTOTALファンクション, 8

S

シナリオ・モデル, 3.3.2.6

季節データ, 9.3

SECONDSオプション, 5.3

セグメントの幅, 9.3

セグメント

アナリティック・ワークスペース, 9.3

ロック, 10

最大サイズの取得, 7.3

SELECT文(OLAP DML), 10

「OLAP DMLのSQLコマンド」も参照

選択

別名ディメンション値, 9.3

データ, 10

SERVEROUTPUTオプション, B.4.2, B.4.2, B.4.2 SESSCACHEオプション, 5.3 セッション

終了, B.4.2

開始, B.4.2

セッション・キャッシュ

「OLAPセッション・キャッシュ」を参照

セッション・ログ

印刷, B.4.2

取得, B.4.2

セッション, 10

環境の保存, 6.3.4, 6.3.4

ディスク・ファイルへの記録, 10

環境のリストア, 6.3.4.3

ユーザーID, 8

SESSIONTIMEZONEファンクション, 8 SETコマンド, 10 SET_INCLUDED_MODELプログラム, 10 SET_PROPERTYプログラム, 10 SET1コマンド, 10 SHOWコマンド, 10 SHUTDOWNプロシージャ(PL/SQL), B.4.2 SIGNファンクション, 8 SIGNALコマンド, 6.3.5.4, 10 モデルの連立方程式, 3.3.2.5 SINファンクション, 8 正弦の計算, 8, 8 単一行ファンクション, A.2.1 SINHファンクション, 8 SLEEPコマンド, 10 最も変化の遅いディメンション, 9.3 2つの式の小さい方の値, 8 SMALLESTファンクション, 8 式の最小値, 8 SMOOTHファンクション, 8 ソリューション変数

概要, 3.3.1

例, 10

SORT

コマンド, 10

ファンクション, 8

ソート

ディメンションのステータス・リスト, 5.3, 8, 10

値セット, 8, 10

SORTLINESファンクション, 8 SOUNDEXファンクション, 8 SOURCEVAL文, 9.3 SP日時書式要素の接尾辞, 9.3 スパースなデータ, 7.3

ベース・ディメンション値, 7.3

定義の変更, 9.3

排除, 9.3

エクスポート, 9.3

インポート, 10

索引アルゴリズム, 5.3

情報の取得, 8

ファイルからの読取り, 9.3

コンポジット名の変更, 10

レポート, 10, 10

コンポジットの指定, 9.3

SPARSEINDEXオプション, 5.3 スパース性

制御, 9.3

ランダム, 9.3

「スパースなデータ」も参照

スパース性アドバイザ, B.3 SPARSITY_ADVICE_TABLE列説明, B.4.2 SPARSITY_ADVICE_TABLEプロシージャ(PL/SQL), B.4.2 特殊文字, 2.1.2.2 スペルアウトした数字

指定, 9.3

スプレッドシート

定義, 9.3

エクスポート, 9.3

データのインポート, 10, 10, 10

「ワークシート・オブジェクト」も参照

SPTH日時書式要素の接尾辞, 9.3 SQL

OLAPコマンドの埋込み, A.2.2, A.2.2, A.2.2, A.2.2, A.2.2

アナリティック・ワークスペースの管理, B

OLAP DMLのSQLコマンド, 10, 10

CLEANUP, 10

CLOSE, 10

DECLARE CURSOR, 10

EXECUTE, 10

FETCH, 10

IMPORT, 10

PREPARE, 10

PROCEDURE, 10

SELECT, 10, 10

SQL(OLAP DML)

カーソルの定義, 10

文の埋込み, 6.7.2.1.1, 10

文のプリコンパイル, 10

エラーの取得, 5.3, 5.3

ストアド・プロシージャ, 10

SQLBLOCKMAXオプション, 5.3 SQLCODEオプション, 5.3 SQLCOLUMNSプロシージャ, 10, 10 SQLERRMオプション, 5.3 SQLFETCHファンクション, 8 SQLMESSAGESオプション, 5.3 SQLTABLESプロシージャ, 10, 10, 10 SQRTコマンド, 8 平方根, 8

計算, 8

負数の結果, 5.3

標準偏差の計算, 8 STARTOFファンクション, 8 STARTUPプロシージャ(PL/SQL), B.4.2 STATALLファンクション, 8, 8 STATCURRファンクション, 8 STATDEPTHファンクション, 8 文

実行順序の変更, 9.3

以前に実行した文の編集, 10

ファイルからの読取り, 10

再実行, 10

ファイルへの送信, 10

STATEQUAL, 8 STATFIRSTファンクション, 8 STATIC_SESSION_LANGUAGEオプション, 5.3 STATLASTファンクション, 8 STATLENファンクション, 8 STATLISTファンクション, 8 STATMAXファンクション, 8 STATMINファンクション, 8 STATRANKファンクション, 8 ステータス

判別, 8

設定, 10

文内での設定, 10

NULLへの設定, 5.3

ステータス・リスト

ベース・ディメンション, 10

比較, 8

現行, 1.7.1.2

デフォルト, 1.7.1.1

定義, 1.7

空, 5.3

最初の値, 8

最後の値, 8

ループ処理, 5.3, 9.3, 10

最新の値, 8

NULL値, 5.3

値の数, 8

位置, 8

リストア, 10, 10

LIMITコマンドの結果, 8

取得, 8

深さの取得, 8

位置による値の取得, 8

値の取得, 8, 8

戻り値, 8

保存, 7.3, 9.3, 10, 10

コンテキストへの保存, 9.3

出力ファイルへの送信, 10

NULLへの設定, 5.3

ソート, 5.3, 8, 10

STATUSプログラム, 10, 10 STATVALファンクション, 8 STDDEVファンクション, 8 STDHDRプログラム, 10

中央揃えする行のサイズ, 5.3

格納

変更, 9.3

変数, 9.3

ストアド・プロシージャ

作成, 10

ストアド・プロシージャ(SQL)

実行, 10

STORETRIGGERVALプロパティ, 10 文字列

バイト, 2.1.6, 2.1.6

長さ, 8

サブイベント、識別, 8 置換式, 2.3.10 置換演算子, 2.3.10 SUBSTRファンクション, 7.3, 8 SUBSTR2ファンクション, 7.3, 8 SUBSTR4ファンクション, 7.3, 8 SUBSTRBファンクション, 7.3, 8 SUBSTRCファンクション, 7.3, 8 サブストリング

カウント, 8

置換, 8

取得, 7.3, 8, 8, 8

SUBTOTALファンクション, 8 小計, 8

レポート内, 8

ゼロへのリセット, 10

サロゲート・ディメンション, 9.3

定義, 9.3

サロゲート

定義, 9.3

削除, 9.3

SWITCH

条件式, 2.3.9.2

SWITCHコマンド, 9.3, 9.3, 10 SYS_CONTEXTファンクション, 8 SYSDATEファンクション, 8 SYSINFOファンクション, 8 SYSTEMファンクション, 8 SYSTIMESTAMPファンクション, 8

T

表型, A.2.2

自動的, A.1.2.1, A.2.2

事前定義, A.1.2.1, A.2.2

作成用の構文, A.1.2, A.2.2

TALLYファンクション, 8 TANファンクション, 8 正接の計算, 8

角度値, 7.3

逆, 7.3, 7.3

双曲線, 8

TANHファンクション, 8 TCONVERTファンクション, 8 一時メンバー

ディメンションへの追加, 10

識別, 7.3

TEMPSTATコマンド, 10 テキスト

値の比較, 2.3.8.6

RAWへの変換, 7.3

データ型, 2.1.2

日付と数値の書式, 2.1.4.2

リテラル, 2.3.5, 2.3.8.6.2

引数を渡す場合, 6.3.2.3, 10

特殊文字, 2.1.2.2

テキスト式, 2.3.4.2, 2.3.5

発音表記, 8

テキストの書式

ワークシート・データのインポート, 10

TEXTFILLファンクション, 8 TH日時書式要素の接尾辞, 9.3 3桁区切り文字, 5.3 THOUSANDSCHARオプション, 5.3 THSP日時書式要素の接尾辞, 9.3 時間書式モデル

短い, 9.3

日時, 8, 8 時系列, 8

累積合計, 7.3

過去の期間のデータ, 8

将来の期間のデータ, 8

期間の間の差, 8

期間の最大値, 8

期間の最小値, 8

移動合計, 8

期間の間の差の割合, 8, 8

タイムゾーン

書式設定, 9.3

タイムゾーン

特定のデータへの変換, 2.3.6.1

タイムスタンプ

LOCAL TIME ZONEへの変換, 2.3.6.1

TIMESTAMPデータ型, 2.1.4.5 TIMESTAMP_LTZデータ型, 2.1.4.7 TIMESTAMP_TZデータ型, 2.1.4.6 タイムゾーン・オフセット, 8 タイミング, 10

プログラム行の実行, 10

プログラムの実行, 10

レポートのタイトル, 10 TMARGINオプション, 5.3 TO_BINARY_DOUBLEファンクション, 8 TO_BINARY_FLOATファンクション, 8 TO_CHARファンクション, 8 TO_DATEファンクション, 8, 9.3 TO_NCHARファンクション, 8 TO_NUMBERファンクション, 8 TO_TIMESTAMP_TZファンクション, 8 TODファンクション, 8 TODAYファンクション, 8 TOTALファンクション, 8 合計

計算, 8

累積, 7.3

レポート内, 8, 8, 10, 10

移動, 8

時間, 8

現在までの合計, 8

TRACEコマンド, 10 TRACEFILEUNITオプション, 5.3 追跡, 10

プログラム行のコスト, 10

プログラムのコスト, 10

TRACKPRGコマンド, 10 TRACKREPORTプログラム, 10 TRANSLATEファンクション, 8 TRAPコマンド, 6.3.5.1, 10, 10, 10 TRIGGERコマンド, 10 TRIGGERファンクション, 8 トリガー・オブジェクト, 8 トリガー・プログラム

Assign, 10, 10

Delete, 10, 10

設計, 6.7.3.2

Maintain, 10, 10

Property, 10, 10

Update, 6.7.6, 10

TRIGGER_AFTER_UPDATEプログラム, 6.7.6 TRIGGER_AWプログラム, 6.7.6, 6.7.6 TRIGGER_BEFORE_UPDATEプログラム, 6.7.6 TRIGGER_DEFINEプログラム, 6.7.6 TRIGGERASSIGNコマンド, 10 TRIGGERMAXDEPTHオプション, 5.3 トリガー

Assign, 10, 10

作成, 10

Define, 6.7.6

Delete, 10

削除, 10, 10, 10

イベント, 8

Maintain, 10

NA, 4.3, 5.3, 5.3

オブジェクト, 8

Property, 10

サブイベント, 8

Update, 6.7.6, 6.7.6, 10

TRIGGERSTOREOKオプション, 5.3 TRIMファンクション, 8 トリミングする式, 8, 8 文字のトリミング, 8 TRUNCファンクション

「TRUNCATEファンクション」を参照

TRUNCATEファンクション

説明, 8

日時の場合, 8

数値の場合, 8

タプル, B.3.1 TZ_OFFSETファンクション, 8

U

UNHIDEコマンド, 10

UNIQUELINESファンクション, 8

名前のないコンポジット, 9.3

定義, 9.3

例, 9.3

UNRAVELファンクション, 8 UPCASEファンクション, 8 UPDATEコマンド, 10

イベント, 10

イベント, 6.7.6, 6.7.6

トリガー, 10

トリガー, 6.7.6, 6.7.6, 6.7.6

UPDATE_ATTRIBUTE_VALUEプログラム, 10 UPDATE_DIMENSION_MEMBERプログラム, 10 UPPERファンクション, 8 UROWIDデータ型, 2.1.7.2 ユーザーID、取得, 8 ユーザー定義ファンクション

引数, 6.3.1

データ型, 6.3.1

USERIDオプション, 5.3 USETRIGGERSオプション, 5.3 UTCオフセット

タイムゾーン・リージョンでの置換, 2.1.4.6

V

VALSPERPAGEプログラム, 8

値名書式, 10

値

以前の値のリストア, 6.3.4.3

現行値の保存, 6.3.4.3

「ブール値」も参照

VALUESファンクション, 8 VALUESET文, 9.3 値セット

値の代入, 9.3

ステータスの確認, 10

定義, 9.3, 9.3

削除, 9.3

制限, 9.3

多次元, 9.3

NULL, 5.3

値の数, 8

値の取得, 8, 8, 8, 8

値の取得, 8

ステータスの設定, 10

値のソート, 8, 10

VARCACHEオプション, 5.3 VARIABLEコマンド, 10 変数

Aggcount, 7.3, 8, 9.3, 9.3, 9.3, 9.3

値の代入, 10

定義, 9.3, 9.3

コンポジットを使用した定義, 9.3

削除, 9.3

データの格納方法, 9.3

変更の確認, 7.3, 7.3

単一の値への制限, 2.3.2.5.2, 2.3.2.5.2, 2.3.2.5.3

プログラムで使用するローカル変数, 10

パーティション, 9.3, 9.3, 9.3

移入, 8

QDRの使用, 2.3.2.5.2, 2.3.2.5.2, 2.3.2.5.3

ディメンションの置換, 2.3.2.5.2, 2.3.2.5.3

ディメンション性の再作成, 8

セッション・キャッシュ, 8

格納, 9.3

Oracle OLAPのリリース, 7.3 ビュー

埋込み合計ディメンションの作成, A.2.2

埋込み合計メジャーの作成, A.2.2

ロールアップ形式の作成, A.2.2

OLAP_TABLEで作成するためのテンプレート, A.1.2.1

VINTSCHEDファンクション, 8 VNF

「値名書式」を参照

VNFコマンド, 2.1.3.2, 10 VPMTSCHEDファンクション, 8 VSIZEファンクション, 8

W

WEEKDAYSNEWYEARオプション, 5.3

WEEKOFファンクション, 8

WHILEコマンド, 9.3, 10

BREAKとの使用, 9.3

CONTINUEとの使用, 9.3

WIDTH_BUCKETファンクション, 8 ワイルドカード, 2.3.8.6.1, 2.3.8.6.1 WKSDATAファンクション, 8 ワークシート・オブジェクト

セル, 8

セルのデータ型, 8

定義, 9.3, 9.3, 9.3

削除, 9.3

ディメンション, 9.3

「スプレッドシート」も参照

WRAPERRORSオプション, 5.3

Y

YESSPELLオプション, 5.3

YMINTERVALデータ型, 2.1.4.8

YMINTERVALファンクション, 8

YRABSTARTオプション, 5.3

YYOFファンクション, 8

Z

ゼロ, 5.3

除算, 2.3.4.4, 5.3

スペル, 5.3

データがすべてゼロのレポート行の非表示, 5.3

ZEROROWオプション, 5.3 ZEROTOTALコマンド, 10 ZSPELLオプション, 5.3

Oracleの法律上の注意点

コピーライト

Copyright © 1994-2017, Oracle and/or its affiliates. All rights reserved.

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクルまでご連絡ください。

制限付権利について

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、Oracle Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

Pre-General Availability (一般提供前)版のドキュメントについて

このドキュメントがPre-General Availability (一般提供前)版の場合:

このドキュメントはPre-General Availability (一般提供前)版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のPre-General Availability (一般提供前)版のドキュメントについて

このドキュメントが非公開のPre-General Availability (一般提供前)版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のPre-General Availability Trial Agreement (Pre-GAトライアル契約)のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle Partner Network Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

ドキュメントのアクセシビリティ

オラクルのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

サポートをご契約のお客様には、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info)か、聴覚に障害のあるお客様は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。