ヘッダーをスキップ
Oracle® OLAP Expression Syntaxリファレンス
リリース11.2
B70202-01
  目次へ移動
目次

前
 
次
 

1 基本要素

この章ではOLAPの式構文の基本的な構築単位について説明します。内容は次のとおりです。

ディメンション・オブジェクト名

ディメンション・オブジェクトのネーミング規則は、標準のOracleネーミング規則に従います。すべての名前は大文字と小文字が区別されません。

構文

owner.{ cube | dimension | table }.{ measure | column | attribute } 

表1-1 ディメンション・オブジェクトのネーミング規則

規則 引用ID 非引用ID

最初の文字

任意の文字。

データベース・キャラクタ・セットのアルファベット文字。

その他の文字

すべての文字、句読記号およびスペースを使用できます。

二重引用符およびNULL (\0)は使用できません。

データベース・キャラクタ・セットの英数字およびアンダースコア(_)は使用できます。

ドル記号($)および番号記号(#)は使用できますが、推奨されません。

二重引用符およびNULL (\0)は使用できません。

予約語

使用できますが、推奨されません。

使用できません。


GLOBAL.UNITS_CUBE.SALESは、ユニット・キューブ内のSALESメジャーを識別します。

TIME.DIM_KEYおよびTIME.LEVEL_NAMEは、「時間」ビューの列を識別します。

TIME.CALENDARは、時間ディメンションのCALENDAR階層を識別します。

TIME.CALENDAR.CALENDAR_YEARは、時間ディメンションのCALENDAR階層のCALENDAR_YEARレベルを識別します。

GLOBAL.UNITS_FACT.MONTH_IDは、UNITS_FACT表の外部キー列を識別します。

TIME_DIM.CALENDAR_YEAR_DSCは、TIME_DIM表の列を識別します。

ディメンション・データ型

表1-2で、キューブおよびメジャーに使用できるデータ型について説明します。

表1-2 ディメンション・データ型

データ型 説明

BINARY_DOUBLE

64ビット浮動小数点数。BINARY_DOUBLE値には9バイトが必要です。

BINARY_FLOAT

32ビット浮動小数点数。BINARY_FLOAT値には5バイトが必要です。

CHAR (size [BYTE|CHAR])

文字数またはバイト数がsizeである固定長文字列。sizeは1から2000の範囲です。

DATE

紀元前4712年1月1日から西暦9999年12月31日までの範囲の有効な日付。日時フィールドYEARMONTHDAYHOURMINUTEおよびSECONDが含まれます。小数部の秒数およびタイムゾーンは含まれません。デフォルトの形式は、NLS_DATE_FORMATパラメータによって明示的に、またNLS_TERRITORYパラメータによって暗黙的に決定されます。DATE値には7バイトが必要です。

DECIMAL (p,s)

NUMBERデータ型で表された、精度がpで位取りがsの小数値。

FLOAT [(p)]

精度がpNUMBERのサブタイプ。FLOATは、内部的にはNUMBERとして表されます。精度は1から126までの2進数です。FLOATの値は1から22バイトである必要があります。

INTEGER

位取りが0のNUMBERデータ型として表される整数。

INTERVAL DAY[(day_precision)] TO SECOND[(second_precision)]

日、時間、分および秒で表される期間。日の精度はDAY日時フィールドの最大桁数です。デフォルトは2です。第2の精度は、SECONDフィールドの小数部の桁数です。デフォルト値は6です。日と秒の精度はどちらも0から9までの値です。INTERVAL DAY TO SECOND値には11バイトが必要です。

INTERVAL YEAR[(precision)] TO MONTH

年と月で表される期間。精度はYEAR日時フィールドの桁数であり、0から9までの値です。デフォルトの精度は2桁です。INTERVAL YEAR TO MONTH値には5バイトが必要です。

NCHAR[(size)]

長さがsize文字の固定長文字列です。sizeの範囲は1文字から2000バイトまでです。最大文字数は各国語キャラクタ・セットによって決まり、文字当たり最大4バイトが必要です。

NUMBER [(p[,s])]

精度がpで位取りがsの小数。精度は1から38までの範囲です。位取りの有効範囲は-84から127です。NUMBERの値は1から22バイトである必要があります。

NVARCHAR2(size)

最大長がsize文字の可変長Unicode文字列です。sizeの範囲は1文字から4000バイトまでです。最大文字数は各国語キャラクタ・セットによって決まり、文字当たり最大4バイトが必要です。

TIMESTAMP[(precision)]

日時フィールドYEARMONTHDAYHOURMINUTEおよびSECONDを含む有効な日付。タイム・ゾーンはありません。精度は、SECONDフィールドの小数部の桁数であり、0から9の値を持ちます。デフォルトの精度は6桁です。デフォルトの形式は、NLS_DATE_FORMATパラメータによって明示的に、またNLS_TERRITORYパラメータによって暗黙的に決定されます。TIMESTAMP値には、精度に応じて7から11バイトが必要です。

TIMESTAMP [(precision)] WITH LOCAL TIME ZONE

TIMESTAMP WITH TIME ZONEと同じ説明が適用される有効な日付ですが、次の例外があります。

  • データはデータベース・タイム・ゾーンとともにデータベースに格納されます。

  • データは取得時にセッション時間に変換されます。

  • TIMESTAMP WITH LOCAL TIME ZONE値には、精度に応じて7から11バイトが必要です。

TIMESTAMP[(precision)] WITH TIME ZONE

日時フィールドYEARMONTHDAYHOURMINUTESECONDTIMEZONE_HOURおよびTIMEZONE_MINUTEを含む有効な日付。精度は、SECONDフィールドの小数部の桁数であり、0から9の値を持ちます。デフォルトの精度は6桁です。デフォルトの形式は、NLS_DATE_FORMATパラメータによって明示的に、またNLS_TERRITORYパラメータによって暗黙的に決定されます。TIMESTAMP WITH TIMEZONE値には13バイトが必要です。

VARCHAR2(size [BYTE|CHAR])

最大文字数またはバイト数がsizeである可変長文字列。sizeは1から4000の範囲です。


演算子

演算子は、データ項目を操作して結果を返します。オペランドまたは引数と呼ばれる個々のデータ項目を操作します。これらの項目は、特殊文字またはキーワードで表されます。演算子は構文によって、オペランドより前、オペランドより後、または2つのオペランドの間に置かれます。

OLAP式構文には、次のタイプの演算子があります。

条件演算子については、「条件」を参照してください。

単項演算子

単項演算子は、1つのオペランドのみを操作します。

表1-3 単項演算子

演算子 説明

+


正の値

-

負の値


構文

operator operand

-5は負数です。

バイナリ演算子

バイナリ演算子は、2つのオペランドを操作します。

表1-4 バイナリ演算子

演算子 説明

+


加算

-

減算

*


乗算

/


除算


構文

operand operator operand

次に、オペランドに数値リテラルを使用した2つの単純な例を示します。

7 * 214です。

(8/2) + 15です。

この例は、販売メジャーの値に数値リテラルを乗算して、Sales Budgetという名前の計算済メジャーを作成します。

UNITS_CUBE.SALES * 1.06

表1-5 乗算演算子の例

製品 レベル 販売 販売予算

ハードウェア

CLASS

124191336

131642816

デスクトップPC

FAMILY

74556528

79029919

モニター

FAMILY

3972142

4210470

メモリー

FAMILY

5619219

5956372

モデム/Fax

FAMILY

5575726

5910269

CD/DVD

FAMILY

16129497

17097267

ポータブルPC

FAMILY

18338225

19438518


次の例は、SalesからCostを引くことにより、Profitという名前の計算済メジャーを作成します。

UNITS_CUBE.SALES - UNITS_CUBE.COST

製品 レベル 販売 コスト 収益
ハードウェア CLASS 124191336 116058248 8133088
デスクトップPC FAMILY 74556528 71937312 2619215
モニター FAMILY 3972142 3546195 425947
メモリー FAMILY 5619219 4962527 656692
モデム/Fax FAMILY 5575726 5162879 412847
CD/DVD FAMILY 16129497 12510832 3618664
ポータブルPC FAMILY 18338225 17938502 399723

連結演算子

連結演算子(||)は、テキスト式を組み合せます。

構文

operand || operand

'The date today is: ' || sysdateは、The date today is: 23-AUG-06などのテキスト文字列を生成します。

次の例は、製品ディメンションのレベル名とディメンション・キーを連結して、識別子を作成します。

PRODUCT.LEVEL_NAME || ' ' || PRODUCT.DIM_KEY

レベル ディメンション・キー 識別子
CLASS HRD CLASS HRD
FAMILY DTPC FAMILY DTPC
FAMILY MON FAMILY MON
FAMILY MEM FAMILY MEM
FAMILY MOD FAMILY MOD
FAMILY DISK FAMILY DISK
FAMILY LTPC FAMILY LTPC

条件

条件は、1つ以上の式および論理(ブール)演算子の組合せを指定したものです。OLAP式構文には、次のタイプの条件があります。

戻り値

NUMBER (0=FALSE, 1=TRUE)

単純比較条件

比較条件は、2つの式を比較します。

次の比較演算子を使用できます。

表1-6 単純比較演算子

演算子 説明

>

次より大きい

>=

次より大きいか等しい

<


次より小さい

<=


次より小さいか等しい

=


等しい

!= ^=<>

等しくない


構文

expr { > | >= | < | <= | = | != | ^= | <> } expr 

引数

expr: 任意の式です。

5 > 3はTrue、4 != 5はTrue、6 >= 9はFalseです。

グループ比較条件

グループ比較条件は、リストまたは副問合せ内の任意またはすべてのメンバーの比較方法を指定します。

次の比較演算子を使用できます。

表1-7 グループ比較演算子

演算子 説明

>

次より大きい

>=

次より大きいか等しい

<


次より小さい

<=


次より小さいか等しい

=


等しい

!= ^= <>

等しくない

ANY SOME

リストの1つ以上の値が一致する場合はTrueを返し、値が一致しない場合はFalseを返します。

ALL

リストのすべての値が一致する場合はTrueを返し、1つ以上の値が一致しない場合はFalseを返します。


構文

expr
     { = | != | ^= | <> | > | < | >= | <= }
     { ANY | SOME | ALL }
     ({ expression_list | subquery })

5 <= ALL (5, 10, 15)はTrue、5 <> ANY (5, 10, 15) はTrueです。

範囲条件

BETWEEN演算子は、値が、特定の値範囲内にあるかどうかをテストします。テストしている値が下限値以上かつ上限値以下であれば、Trueを返します。

構文

expr [ NOT ] BETWEEN expr AND expr

7 NOT BETWEEN 10 AND 15はTrueです。

複数条件

論理積は、1つの式と2つの条件を比較します。

表1-8 論理積

演算子 説明

AND

両方の構成条件がTrueである場合にTrueを返します。条件のいずれかがFalseである場合はFalseを返します。

OR

構成条件のいずれかがTrueである場合にTrueを返します。条件の両方がFalseである場合はFalseを返します。


構文

expr operator condition1 { AND | OR } condition2 

5 < 7 AND 5 > 3 はTrue、5 < 3 OR 10 < 15はTrueです。

否定条件

NOT演算子は、条件の意味を逆転させます。条件がfalseの場合はtrueを返します。条件がTrueの場合はFalseを返します。

構文

NOT {BETWEEN | IN | LIKE | NULL }

5 IS NOT NULLはTrueで、5 NOT IN (5, 10, 15)はFalseです。

特殊条件

IS演算子は、NULL、無限大、数値以外の値などの特殊な条件をテストします。

表1-9 特殊条件演算子

演算子 説明

IS INFINITE

式が無限の場合はTrueを返し、無限でない場合はFalseを返します。マッピング専用です。

IS NAN

式が数値でない場合はTrueを返し、数値の場合はFalseを返します。マッピング専用です。

IS NULL

式がNULLである場合はTrueを返し、NULLでない場合はFalseを返します。


構文

expr IS [ NOT ] NULL

13 IS NOT NULLはTrueです。

パターン一致条件

パターン一致条件は文字データを比較します。

LIKE演算子

LIKE演算子は、パターン一致を使用するテストを指定します。等号演算子(=)が1つの文字値と別の文字値を完全に一致させるのに対し、LIKE演算子では特殊パターン・マッチング(ワイルドカード)文字で定義されるパターンの一致が可能です。

次のLIKE演算子から選択できます。

表1-10 LIKEパターン一致演算子

演算子 説明

LIKE

入力キャラクタ・セットの文字を使用します。

LIKEC

完全なUnicodeキャラクタを使用します。Unicode補助文字を2文字として扱います。

LIKE2

UCS2コード・ポイントを使用します。Unicode補助文字を1文字として扱います。

LIKE4

UCS4コード・ポイントを使用します。複合文字を1文字として扱います。


構文

char1 [ NOT ] ( LIKE | LIKEC | LIKE2 | LIKE4 )
  char2 [ ESCAPE esc_char ]

引数

char1は、検索値のテキスト式です。

char2は、パターンのテキスト式です。パターンには、次のワイルドカード文字を含めることができます。

  • アンダースコア(_)は、値の中の1文字(マルチバイトのキャラクタ・セットでの1バイトとは異なる)に完全に一致します。

  • パーセント記号(%)は、値の中の0 (ゼロ)以上の文字(マルチバイトのキャラクタ・セットでのバイトとは異なる)と一致します。「%」は、NULLには一致しません。

esc_charは、通常はリテラルの、1文字長のテキスト式です。このエスケープ・キャラクタは、パターンの中のアンダースコアやパーセント記号を、ワイルドカード文字ではなくリテラル文字として識別します。また、エスケープ文字自体を検索する場合は、その文字を続けて入力してください。たとえば、@がエスケープ文字である場合、@%を使用して%を検索し、@@を使用して@を検索できます。

'Ducks' LIKE 'Duck_'および'Ducky' LIKE 'Duck_'はTrueです。

'Duckling' LIKE 'Duck_'はFalseです。

'Duckling' LIKE 'Duck%'はTrueです。

リテラル式

OLAP式構文には、文字列、数値およびNULLの3つのタイプのリテラル式があります。その他のデータ型は、TO_DATEなどの変換関数を使用して作成する必要があります。

テキスト・リテラル文字リテラルおよび文字列という用語は、同じ意味で使用できます。オブジェクト名と区別するため、必ず一重引用符で囲みます。

'A Literal Text String'

'A Literal Text String with ''Quotes '''

'A Literal Text String
That Crosses Into a Second Line'

2

2.4

+1

-1

NULL

CASE式

CASE式では、IF ... THEN ... ELSE論理を式に使用できます。

単純CASE式では、CASEは、exprcomparison_exprに等しい最初のWHEN ... THENペアを探し、return_exprを返します。この条件に合致するWHEN ... THENペアがなく、ELSE句が存在する場合、CASEelse_exprを返します。それ以外の場合、CASEはNULLを返します。

検索CASE式では、CASEconditionがtrueであることが見つかるまで左から右に検索し、return_exprを返します。conditionがtrueであることが見つからず、ELSE句が存在する場合、CASEelse_exprを返します。それ以外の場合、CASEはNULLを返します。

戻り値

else_expression引数と同じです。

構文

CASE { simple_case_expression
     | searched_case_expression
     }
     [ ELSE else_expression ]
     END

simple_case_expression::=
     expr WHEN comparison_expr
          THEN return_expr
          [ WHEN comparison_expr
            THEN return_expr ]...

searched_case_expression::=
     WHEN condition THEN return_expr
     [ WHEN condition THEN return_expr ]...

引数

exprは、テストされる基準の式です。

comparison_exprは、exprをテストする対象の式です。exprと同じ基本データ型(数値またはテキスト)である必要があります。

conditionは、条件式です。

return_exprは、一致が見つかった場合、あるいは条件がtrueである場合に返される値です。

次の文は、PRODUCTディメンションのPACKAGE属性がnullであるか値を持つかに応じて、Single ItemまたはValue Packを返します。

CASE PRODUCT.PACKAGE WHEN NULL THEN 'Single Item'  ELSE 'Value Pack'END
製品 パッケージ カテゴリ
1.44MB External 3.5" Diskette Executive Value Pack
1GB USB Drive -- Single Item
512MB USB Drive -- Single Item
56Kbps V.90 Type II Modem Executive Value Pack
56Kbps V.92 Type II Fax/Modem Laptop Value Pack Value Pack
Deluxe Mouse Executive Value Pack
Envoy Ambassador -- Single Item
Envoy Executive Executive Value Pack
Envoy External Keyboard Executive Value Pack
Envoy Standard Laptop Value Pack Value Pack
External - DVD-RW - 8X Executive Value Pack
External 101-key keyboard Multimedia Value Pack
External 48X CD-ROM -- Single Item
Internal - DVD-RW - 6X Multimedia Value Pack

次の文は、ユニット価格を20%上げて、価格とコストの差が10%未満の場合はドル単位に切り捨てます。そうでない場合は現在のユニット価格を返します。

CASE   
  WHEN PRICE_CUBE.UNIT_PRICE < PRICE_CUBE.UNIT_COST * 1.1 
  THEN TRUNC(PRICE_CUBE.UNIT_COST * 1.2)  ELSE PRICE_CUBE.UNIT_PRICE
END
製品 コスト 旧価格
1GB USB Drive 483.55 546.83
512MB USB Drive 234.69 275.91
56Kbps V.90 Type II Modem 135.72 158.58
56Kbps V.92 Type II Fax/Modem 95.01 111.08
Envoy Ambassador 2686.01 2850.88
Envoy Executive 2799.80 2943.96
Envoy Standard 1933.82 1921.62
External - DVD-RW - 8X 263.83 300.34
External 48X CD-ROM 223.11 254.15
Internal - DVD-RW - 6X 134.46 160.18
Internal 48X CD-ROM 108.32 127.54
Internal 48X CD-ROM USB 46.00 68.54
Monitor- 17"Super VGA 228.53 269.70
Monitor- 19"Super VGA 445.04 504.84
Sentinel Financial 1685.72 1764.14
Sentinel Multimedia 1849.17 1932.54
Sentinel Standard 1572.98 1610.53

次の例は、前年の販売に1.06を乗算して6%増やすことにより、販売予算の計算済メジャーを作成します。すべてのディメンションの詳細レベルは計算から除外されます。予算は、2006年以降のデータのみ使用して予測されます。

CASE 
   WHEN TIME.END_DATE >= TO_DATE('01-JAN-2006') 
      AND TIME.LEVEL_NAME IN ('CALENDAR_YEAR', 'CALENDAR_QUARTER') 
      AND PRODUCT.LEVEL_NAME != 'ITEM' 
      AND CUSTOMER.LEVEL_NAME IN ('TOTAL', 'REGION', 'WAREHOUSE')
   THEN TRUNC(LAG(UNITS_CUBE.SALES, 1) OVER HIERARCHY 
      (TIME.CALENDAR BY ANCESTOR AT LEVEL TIME.CALENDAR.CALENDAR_YEAR 
      POSITION FROM BEGINNING) * 1.06)
   ELSE NULL
END 
製品 時間 販売
ハードウェア Q1.05 28172590
ハードウェア Q2.05 34520379
ハードウェア Q3.05 29466573
ハードウェア Q4.05 32031795
ハードウェア Q1.06 32711891
ハードウェア Q2.06 33637473
ハードウェア Q3.06 29227635
ハードウェア Q4.06 31319881
ハードウェア Q1.07 --
ハードウェア Q2.07 --
ハードウェア Q3.07 --
ハードウェア Q4.07 --

修飾データ参照(QDR)

修飾データ参照(QDR)は、問合せの継続中ディメンション・オブジェクトを1つ以上のディメンション内の1つのメンバーに制限します。

構文

expression [ qualifier [ , qualifier]... ]

qualifier::=

dimension_id = member_expression

注意: 太字で示された外側の大カッコは構文の一部です。この場合は、オプションの引数を示すものではありません。

引数

expressionはディメンション式で、通常はメジャーの名前です。

dimension_idexpressionのキューブ・ディメンションです。

member_expressiondimension_idの単一メンバーに解決されます。

global.sales[global.time = 'CY2007']は、2007年の販売値を返します。

sales[customer = 'US', time = 'CY2007']は、2007年の米国のみの販売値を返します。