1 基本要素
この章ではOLAPの式構文の基本的な構築単位について説明します。この項の内容は、次のとおりです。
ディメンション・オブジェクト名
構文
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 ディメンション・データ型
データ型 | 説明 |
---|---|
|
64ビット浮動小数点数。 |
|
32ビット浮動小数点数。 |
|
文字数またはバイト数がsizeである固定長文字列。sizeは1から2000の範囲です。 |
|
紀元前4712年1月1日から西暦9999年12月31日までの範囲の有効な日付。日時フィールド |
|
NUMBERデータ型で表された、精度がpで位取りが |
|
精度が |
|
位取りが0の |
|
日、時間、分および秒で表される期間。日の精度は |
|
年と月で表される期間。精度は |
|
長さがsize文字の固定長文字列です。sizeの範囲は1文字から2000バイトまでです。最大文字数は各国語キャラクタ・セットによって決まり、文字当たり最大4バイトが必要です。 |
|
精度がpで位取りがsの小数。精度は1から38までの範囲です。位取りの有効範囲は-84から127です。 |
|
最大長がsize文字の可変長Unicode文字列です。sizeの範囲は1文字から32,767バイトまでです。最大文字数は各国語キャラクタ・セットによって決まり、文字当たり最大4バイトが必要です。 |
|
日時フィールド |
|
|
|
日時フィールド |
|
最大文字数またはバイト数がsizeである可変長文字列。sizeの範囲は1から32,767バイトまでです。 |
演算子
演算子は、データ項目を操作して結果を返します。オペランドまたは引数と呼ばれる個々のデータ項目を操作します。これらの項目は、特殊文字またはキーワードで表されます。演算子は構文によって、オペランドより前、オペランドより後、または2つのオペランドの間に置かれます。
OLAP式構文には、次のタイプの演算子があります。
条件演算子については、「条件」を参照してください。
バイナリ算術演算子
例
次に、オペランドに数値リテラルを使用した2つの単純な例を示します。
7 * 2
は14
です。
(8/2) + 1
は5
です。
この例は、販売メジャーの値に数値リテラルを乗算して、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 |
連結演算子
例
'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-6 単純比較演算子
オペレータ | 説明 |
---|---|
|
次より大きい |
|
以上 |
|
次より小さい |
|
以下 |
|
等しい |
|
次と等しくない |
グループ比較条件
グループ比較条件は、リストまたは副問合せ内の任意またはすべてのメンバーの比較方法を指定します。
次の比較演算子を使用できます。
表1-7 グループ比較演算子
オペレータ | 説明 |
---|---|
|
次より大きい |
|
以上 |
|
次より小さい |
|
以下 |
|
次と等しい |
|
次と等しくない |
|
リストの1つ以上の値が一致する場合はTrueを返し、値が一致しない場合はFalseを返します。 |
|
リストのすべての値が一致する場合はTrueを返し、1つ以上の値が一致しない場合はFalseを返します。 |
構文
expr { = | != | ˆ= | <> | > | < | >= | <= } { ANY | SOME | ALL } ({ expression_list | subquery })
階層リレーションの条件
階層リレーションの条件は、階層メンバーのメンバー自身または階層の別のメンバーに対する関係の比較を指定します。
構文
expr1 IS [ NOT ] { PARENT | CHILD | ANCESTOR | ROOT_ANCESTOR | DESCENDANT | LEAF_DESCENDANT | RELATIVE } [ OR SELF ] OF expr2 WITHIN hierarchy
引数
expr1
は、リテラルまたは列など、ディメンション・メンバーに解決される任意の式です。
PARENT
は、expr1をexpr2の親として比較します。
CHILD
は、expr1をexpr2の子として比較します。
ANCESTOR
は、expr1をexpr2の祖先として比較します。
ROOT_ANCESTOR
は、expr1を、expr2の最上位レベルの祖先として比較します。
DESCENDANT
は、expr1をexpr2の子孫として比較します。
LEAF_DESCENDANT
は、expr1を、expr2の子がない子孫として比較します。
RELATIVE
は、expr1を、親がexpr2と共通のディメンション・メンバーとして比較します。
OR SELF
は、expr1を、expr2と同じディメンション・メンバーとして比較します。
expr2
は、リテラルまたは列など、ディメンション・メンバーに解決される任意の式です。
hierarchyは、dimension_name.hierarchy_name (PRODUCT.PRIMARY
など)、またはowner.
dimension_name.
hierarchy_name (GLOBAL.PRODUCT.PRIMARYなど)という形式で表されるexpr1とexpr2
の関係を判別する際に参照する階層です。
複数条件
論理積は、1つの式と2つの条件を比較します。
表1-8 論理積
オペレータ | 説明 |
---|---|
|
両方の構成条件がTrueである場合にTrueを返します。条件のいずれかがFalseである場合はFalseを返します。 |
|
構成条件のいずれかがTrueである場合にTrueを返します。条件の両方がFalseである場合はFalseを返します。 |
特殊条件
IS
演算子は、NULL、無限大、数値以外の値などの特殊な条件をテストします。
表1-9 特殊条件演算子
オペレータ | 説明 |
---|---|
|
式が無限の場合はTrueを返し、無限でない場合はFalseを返します。マッピング専用です。 |
|
式が数値でない場合はTrueを返し、数値の場合はFalseを返します。マッピング専用です。 |
|
式がNULLである場合はTrueを返し、NULLでない場合はFalseを返します。 |
パターン一致条件
パターン一致条件は文字データを比較します。
LIKE演算子
LIKE
演算子は、パターン一致を含むかどうかをテストします。等号演算子(=
)が1つの文字値と別の文字値を完全に一致させるのに対し、LIKE
演算子では特殊パターン・マッチング(ワイルドカード)文字で定義されるパターンの一致が可能です。
次のLIKE
演算子から選択できます。
表1-10 LIKEパターン一致演算子
オペレータ | 説明 |
---|---|
|
入力キャラクタ・セットの文字を使用します。 |
|
完全なUnicodeキャラクタを使用します。Unicode補助文字を2文字として扱います。 |
|
UCS2コード・ポイントを使用します。Unicode補助文字を1文字として扱います。 |
|
UCS4コード・ポイントを使用します。複合文字を1文字として扱います。 |
引数
char1
は、検索値のテキスト式です。
char2
は、パターンのテキスト式です。パターンには、次のワイルドカード文字を含めることができます。
-
アンダースコア(_)は、値の中の1文字(マルチバイトのキャラクタ・セットでの1バイトとは異なる)に完全に一致します。
-
パーセント記号(%)は、値の中の0 (ゼロ)以上の文字(マルチバイトのキャラクタ・セットでのバイトとは異なる)と一致します。「%」は、NULLには一致しません。
esc_char
は、通常はリテラルの、1文字長のテキスト式です。このエスケープ・キャラクタは、パターンの中のアンダースコアやパーセント記号を、ワイルドカード文字ではなくリテラル文字として識別します。また、エスケープ文字自体を検索する場合は、その文字を続けて入力してください。たとえば、@がエスケープ文字である場合、@%を使用して%を検索し、@@を使用して@を検索できます。
リテラル式
OLAP式構文には、文字列、数値およびNULLの3つのタイプのリテラル式があります。その他のデータ型は、TO_DATE
などの変換関数を使用して作成する必要があります。
テキスト・リテラル、文字リテラルおよび文字列という用語は、同じ意味で使用できます。オブジェクト名と区別するため、必ず一重引用符で囲みます。
CASE式
CASE
式では、IF
... THEN
... ELSE
論理を式に使用できます。
単純CASE式では、CASE
は、expr
がcomparison_expr
に等しい最初のWHEN
... THEN
ペアを探し、return_expr
を返します。この条件に合致するWHEN
... THEN
ペアがなく、ELSE
句が存在する場合、CASE
はelse_expr
を返します。それ以外の場合、CASE
はNULL
を返します。
検索CASE
式では、CASE
はcondition
がtrueであることが見つかるまで左から右に検索し、return_expr
を返します。condition
がtrueであることが見つからず、ELSE
句が存在する場合、CASE
はelse_expr
を返します。それ以外の場合、CASE
はNULL
を返します。
構文
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 |
-- |
単一アイテム |
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 |
-- |
単一アイテム |
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 |
-- |
単一アイテム |
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 |
-- |