この章ではOLAPの式構文の基本的な構築単位について説明します。内容は次のとおりです。
ディメンション・オブジェクトのネーミング規則は、標準のOracleネーミング規則に従います。すべての名前は大文字と小文字が区別されません。
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日までの範囲の有効な日付。日時フィールド |
|
|
|
精度が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つのオペランドを操作します。
次に、オペランドに数値リテラルを使用した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つ以上の式および論理(ブール)演算子の組合せを指定したものです。OLAP式構文には、次のタイプの条件があります。
戻り値
NUMBER
(0=FALSE, 1=TRUE
)
比較条件は、2つの式を比較します。
次の比較演算子を使用できます。
グループ比較条件は、リストまたは副問合せ内の任意またはすべてのメンバーの比較方法を指定します。
次の比較演算子を使用できます。
表1-7 グループ比較演算子
演算子 | 説明 |
---|---|
|
次より大きい |
|
次より大きいか等しい |
|
次より小さい |
|
次より小さいか等しい |
|
等しい |
|
等しくない |
|
リストの1つ以上の値が一致する場合はTrueを返し、値が一致しない場合はFalseを返します。 |
|
リストのすべての値が一致する場合はTrueを返し、1つ以上の値が一致しない場合はFalseを返します。 |
階層リレーションの条件は、階層メンバーのメンバー自身または階層の別のメンバーに対する関係の比較を指定します。
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
は任意の式であり、リテラルまたは列を含み、ディメンション・メンバーに解決されます。
階層とは、expr1とexpr2の関係を判断する場合に考慮する階層であり、dimension_name.
hierarchy_name形式(PRODUCT.PRIMARY
など)、またはowner.
dimension_name.hierarchy_name形式(GLOBAL.PRODUCT.PRIMARY
など)で表されます。
BETWEEN
演算子は、値が、特定の値範囲内にあるかどうかをテストします。テストしている値が下限値以上かつ上限値以下であれば、Trueを返します。
論理積は、1つの式と2つの条件を比較します。
NOT
演算子は、条件の意味を逆転させます。条件がfalseの場合はtrueを返します。条件がTrueの場合はFalseを返します。
IS
演算子は、NULL、無限大、数値以外の値などの特殊な条件をテストします。
パターン一致条件は文字データを比較します。
LIKE
演算子は、パターン一致を使用するテストを指定します。等号演算子(=
)が1つの文字値と別の文字値を完全に一致させるのに対し、LIKE
演算子では特殊パターン・マッチング(ワイルドカード)文字で定義されるパターンの一致が可能です。
次のLIKE
演算子から選択できます。
char1
は、検索値のテキスト式です。
char2
は、パターンのテキスト式です。パターンには、次のワイルドカード文字を含めることができます。
アンダースコア(_)は、値の中の1文字(マルチバイトのキャラクタ・セットでの1バイトとは異なる)に完全に一致します。
パーセント記号(%)は、値の中の0 (ゼロ)以上の文字(マルチバイトのキャラクタ・セットでのバイトとは異なる)と一致します。「%」は、NULLには一致しません。
esc_char
は、通常はリテラルの、1文字長のテキスト式です。このエスケープ・キャラクタは、パターンの中のアンダースコアやパーセント記号を、ワイルドカード文字ではなくリテラル文字として識別します。また、エスケープ文字自体を検索する場合は、その文字を続けて入力してください。たとえば、@がエスケープ文字である場合、@%を使用して%を検索し、@@を使用して@を検索できます。
OLAP式構文には、文字列、数値およびNULLの3つのタイプのリテラル式があります。その他のデータ型は、TO_DATE
などの変換関数を使用して作成する必要があります。
テキスト・リテラル、文字リテラルおよび文字列という用語は、同じ意味で使用できます。オブジェクト名と区別するため、必ず一重引用符で囲みます。
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 | -- | 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)は、問合せの継続中ディメンション・オブジェクトを1つ以上のディメンション内の1つのメンバーに制限します。
expression [ qualifier [ , qualifier]... ]
qualifier::=
dimension_id = member_expression
注意: 太字で示された外側の大カッコは構文の一部です。この場合は、オプションの引数を示すものではありません。