計算済メジャー式
計算済メジャー式では、分析ビューの計算済メジャーを定義します。計算済メジャー式は、CREATE
ANALYTIC
VIEW
文のcalc_measure_clause
のcalc_meas_expression
パラメータとして使用します。
ヒント:
計算済メジャーを使用する分析ビューを作成するSQLスクリプトは、Oracle Live SQLのWebサイト(https://livesql.oracle.com/apex/livesql/file/index.html)で表示および実行できます。このWebサイトには、分析ビューの作成方法および使用方法を示すスクリプトおよびチュートリアルが用意されています。構文
calc_meas_expression::=
セマンティクス
calc_meas_expression
次の各トピックでは、分析ビューに固有の構文がある計算済メジャー式について説明します。
計算済メジャーで使用可能な他のタイプの式は、次のトピックを参照してください。
関連項目:
分析ビューのメジャー式
分析ビューのメジャー式は、分析ビューのメジャーに基づいています。
ヒント:
計算済メジャーを使用する分析ビューを作成するSQLスクリプトは、Oracle Live SQLのWebサイト(https://livesql.oracle.com/apex/livesql/file/index.html)で表示および実行できます。このWebサイトには、分析ビューの作成方法および使用方法を示すスクリプトおよびチュートリアルが用意されています。構文
av_meas_expression::=
lead_lag_expression::=
lead_lag_function_name::=
lead_lag_clause::=
hierarchy_ref::=
window_expression::=
window_clause::=
preceding_boundary ::=
following_boundary::=
calc_meas_order_by_clause::=
share_of_expression::=
share_clause::=
level_member_literal::=
pos_member_keys::=
named_member_keys::=
hier_navigation_expression::=
hier_ancestor_expression::=
member_expression::=
hier_parent_expression::=
hier_lead_lag_expression::=
hier_lead_lag_clause::=
qdr_expression::=
qualifier::=
セマンティクス
av_meas_expression
関連するメジャー値を検索するために、階層ナビゲーションを実行する式。
lead_lag_expression
階層内で、LEAD操作またはLAG操作を指定して、ある数のメンバー分だけ前後にナビゲートして、関連するメジャー値を検索する式。
calc_meas_expression
パラメータは、lead_lag_expression
によって作成される新しいコンテキストで評価されます。このコンテキストには、指定される階層のメンバーが、LEAD操作またはLAG操作によって指定された関連するメンバーに変更される以外は、外部コンテキストと同じメンバーが含まれます。LEADファンクションまたはLAGファンクションは、lead_lag_clause
パラメータで指定された階層メンバーに対して実行されます。
lead_lag_function_name
LEADファンクションまたはLAGファンクションは、次のいずれかになります。
-
LAG
では、先行するメンバーのメジャー値を戻します。 -
LAG_DIFF
では、現在のメンバーのメジャー値と先行するメンバーのメジャー値との差を戻します。 -
LAG_DIFF_PERCENT
では、現在のメンバーのメジャー値と先行するメンバーのメジャー値との相違率を戻します。 -
LEAD
では、後続のメンバーのメジャー値を戻します。 -
LEAD_DIFF
では、現在のメンバーのメジャー値と後続のメンバーのメジャー値との差を戻します。 -
LEAD_DIFF_PERCENT
では、現在のメンバーのメジャー値と後続のメンバーのメジャー値との相違率を戻します。
lead_lag_clause
評価する階層およびオフセット値を指定します。lead_lag_clause
のパラメータは次のとおりです。
-
HIERARCHY
hierarchy_ref
では、分析ビューの階層の名前を指定します。 -
OFFSET
offset_expr
では、数値に変換するcalc_meas_expression
を指定します。数値は、現在のメンバーから前後に何メンバー分移動するかを指定します。レベル内のメンバーの順序は、階層で使用する属性ディメンションの定義によって決まります。 -
WITHIN
LEVEL
では、現在のメンバーと深さのレベルが同じメンバー内で、メンバーのオフセット数に従って前後に移動して、関連するメンバーを検索することを指定します。レベル内のメンバーの順序は、階層で使用する属性ディメンションの定義によって決まります。WITHIN
LEVEL
キーワードとACROSS
ANCESTOR
AT
LEVEL
キーワードのどちらも指定されていない場合は、WITHIN
LEVEL
操作がデフォルトとなります。 -
WITHIN
PARENT
では、現在のメンバーと親が同じメンバー内で、メンバーのオフセット数に従って前後に移動して、関連するメンバーを検索することを指定します。 -
ACROSS
ANCESTOR
AT
LEVEL
level_ref
では、level_ref
で指定されたレベルの現在のメンバーの祖先(または祖先が存在しない場合はメンバー自体)までナビゲートして関連するメンバーを検索することを指定し、かつ、その親内の各祖先メンバー(メンバー自体を含む)の位置を示します。level_ref
パラメータは、指定された階層のレベルの名前です。祖先メンバーが見つかると、ナビゲーションは、祖先メンバーと深さが同じメンバー内で、メンバーのオフセット数だけ前後に移動します。関連する祖先が見つかった後、ナビゲーションはそのメンバーから階層を逆方向に進み、上に向かって記録された(逆順)親内の位置を照合します。親内での位置は、
POSITION
FROM
BEGINNING
とPOSITION
FROM
END
のいずれが指定されているかに従い、最初の子または最後の子からオフセットされます。デフォルト値はPOSITION
FROM
BEGINNING
です。レベル内のメンバーの順序は、階層で使用する属性ディメンションの定義によって決まります。
window_expression
window_expression
では、現在のメンバーから始まる指定された範囲内にあり、かつ、現在のメンバーと同じ深さにある一連のメンバーを選択します。WITHIN句を使用して階層関係を指定することによって、このメンバーの選択をさらに制限できます。その後、選択したメジャー値で集計が実行され、式に対する1つの結果が生成されます。
window_expression
のパラメータは次のとおりです。
-
aggregate_function
は、COLLECT
、GROUP_ID
、GROUPING
、GROUPING_ID
、SYS_XMLAGG
、XMLAGG
およびすべての複数引数ファンクションを除く、任意の既存のSQL集計ファンクションです。ユーザー定義集計ファンクションも使用できます。集計ファンクションの引数はcalc_meas_expression
式です。これらの式は、外部コンテキストを使用して評価され、指定された階層のメンバーは、関連する範囲の各メンバーに変更されます。このため、それぞれの式引数は関連するメンバーごとに1回評価されます。その後、結果が、aggregate_function
を使用して集計されます。 -
OVER
(
window_clause
)
では、使用する階層および考慮するウィンドウの境界を指定します。
関連項目:
window_clause
window_clause
パラメータでは、現在のメンバーに関連するメンバーの範囲を選択します。この範囲は、preceding_boundary
パラメータまたはfollowing_boundary
パラメータで指定されたメンバーの間になります。範囲は、常に、現在のメンバーと同じレベルのメンバーに対して計算されます。
window_clause
のパラメータは次のとおりです。
-
HIERARCHY
hierarchy_ref
では、分析ビューの階層の名前を指定します。 -
BETWEEN
preceding_boundary
またはfollowing_boundary
では、現在のメンバーに関連する一連のメンバーを定義します。 -
WITHIN
LEVEL
では、現在のレベルのすべてのメンバーにboundary句を適用することによって、関連するメンバーを選択します。これは、WITHIN
キーワードが指定されていない場合にデフォルトとなります。 -
WITHIN
PARENT
では、現在のメンバーと親を共有するすべてのメンバーにboundary句を適用することによって、関連するメンバーを選択します。 -
WITHIN
ANCESTOR
AT
LEVEL
では、現在のメンバーと指定されたレベルの祖先を共有する(またはメンバー自体である)現在の深さのすべてのメンバーにboundary句を適用することによって、関連するメンバーを選択します。現在のメンバーが指定されたレベルよりも上にある場合、ウィンドウ式の値はNULL
となります。指定された階層に、このレベルがない場合は、エラーが発生します。
preceding_boundary
preceding_boundary
パラメータではメンバーの範囲を定義し、その先頭は、現在のメンバーのレベルで、指定された数だけ戻ったメンバーとなり、末尾は指定された境界の端となります。次のパラメータでは、範囲を指定します。
-
UNBOUNDED
PRECEDING
を指定すると、レベルの最初のメンバーが範囲の先頭になります。 -
offset_expr
PRECEDING
を指定すると、現在のメンバーからoffset_expr
の数だけ戻ったメンバーが範囲の先頭になります。offset_expr
式は、数値に変換するcalc_meas_expression
です。オフセット数が、そのレベルの現在のメンバーから最初のメンバーまでのメンバーの数より大きい場合、最初のメンバーが範囲の開始点として使用されます。 -
CURRENT
MEMBER
を指定すると、現在のメンバーが範囲の末尾となります。 -
offset_expr
PRECEDING
を指定すると、現在のメンバーからoffset_expr
だけ戻ったメンバーが範囲の末尾になります。 -
offset_expr
FOLLOWING
を指定すると、現在のメンバーからoffset_expr
分だけ進んだメンバーが範囲の末尾になります。 -
UNBOUNDED
FOLLOWING
を指定すると、そのレベルの最後のメンバーが範囲の末尾になります。
following_boundary
following_boundary
パラメータではメンバーの範囲を定義し、その先頭は、現在のメンバーから指定された数だけ進んだメンバーになり、末尾は、指定した範囲の終わりになります。次のパラメータでは、範囲を指定します。
-
CURRENT
MEMBER
を指定すると、現在のメンバーが範囲の先頭になります。 -
offset_expr
FOLLOWING
を指定すると、現在のメンバーからoffset_expr
だけ進んだメンバーが範囲の先頭になります。 -
offset_expr
FOLLOWING
を指定すると、現在のメンバーからoffset_expr
分だけ進んだメンバーが範囲の末尾になります。 -
UNBOUNDED
FOLLOWING
を指定すると、そのレベルの最後のメンバーが範囲の末尾になります。
hierarchy_ref
分析ビューの階層への参照。hier_alias
パラメータは、分析ビューの定義で階層の名前を指定します。特殊文字のエスケープまたはケースの保持、あるいはその両方を行うには、二重引用符を使用します。
オプションのattr_dim_alias
パラメータは、分析ビューの定義で指定された別名の名前です。指定された階層の別名が分析ビューの別の階層の別名と競合する場合、または分析ビューの定義で属性ディメンションが複数回使用されている場合は、attr_dim_alias
パラメータを使用して、あいまいさを解決できます。attr_dim_alias
パラメータは、名前の競合が存在しない場合も使用できます。
share_of_expression
share_of_expression
式では、現在のコンテキストの式の値と、関連するコンテキストの式の値の比率を計算します。この式は、現在のコンテキストおよび関連するコンテキストで評価されるcalc_meas_expression
です。share_clause
の指定により、使用する関連するコンテキストが決まります。
share_clause
share_clause
では、指定された階層のメンバーを関連するメンバーに設定することによって、外部コンテキストを変更します。
share句のパラメータは次のとおりです。
-
HIERARCHY
hierarchy_ref
では、share_of_expression
計算の外部コンテキストである階層の名前を指定します。 -
PARENT
では、関連するメンバーが現在のメンバーの親であることを指定します。 -
LEVEL
level_ref
では、関連するメンバーが、階層の指定されたレベルの現在のメンバーの祖先(またはメンバー自体)であることを指定します。現在のメンバーが、指定されたレベルよりも上にある場合は、share式に対してNULL
が戻されます。階層に、このレベルがない場合は、エラーが発生します。 -
MEMBER
member_expression
では、関連するメンバーが、現在のコンテキストでmember_expression
を評価した後に戻されるメンバーであることを指定します。指定されたメンバーの値がNULL
の場合、share式に対してNULL
が戻されます。
level_member_literal
level_member_literal
は、階層の単一メンバーに変換する式です。この式には、レベルの名前および1つ以上のメンバー・キーが含まれます。メンバー・キーは位置または名前で識別できます。コンテキストの階層に、指定されたレベルがない場合は、エラーが発生します。
pos_member_keys
member_key_expr
式は、メンバーのキー値に解決されます。位置で指定する場合、キーのすべてのコンポーネントは、ALL_HIER_LEVEL_ID_ATTRS
ディクショナリ・ビュー内の順序で指定する必要があります。指定されたレベルが子レベルによって決定されない階層では、そのようなすべての子レベルのすべてのメンバー・キー値を、現在のレベルのメンバー・キーより前に指定する必要があります。重複するキー・コンポーネントは、初めて出現したときにのみ指定されます。
主キーは、level_member_literal
がpos_member_keys
句で指定された場合に使用されます。代替キーを参照するには、named_member_keys
句を使用します。
named_member_keys
member_key_expr
式は、メンバーのキー値に解決されます。attr_name
パラメータは、属性名の識別子です。すべての属性名が、指定されたレベルのキーまたは代替キーを構成していない場合は、エラーが発生します。
名前で指定する場合、キーのすべてのコンポーネントを指定し、すべてで属性の名前 = 値書式を任意の順序で使用する必要があります。指定されたレベルが子レベルによって決定されない階層では、そのようなすべての子レベルのすべてのメンバー・キー値を指定し、指定された書式も使用する必要があります。重複するキー・コンポーネントは、1回のみ指定されます。
hier_navigation_expression
hier_navigation_expression
式は、指定されたメンバーから階層の別のメンバーにナビゲートします。
hier_ancestor_expression
指定されたメンバーから、指定されたレベルまたは深さの祖先メンバー(またはメンバー自体)にナビゲートします。深さは、数値に変換する必要がある式として指定されます。メンバーが、指定されたメンバーより上のレベルまたは深さの場合、またはメンバーがNULL
の場合、式の値に対してNULL
が戻されます。コンテキストの階層に、指定されたレベルがない場合は、エラーが発生します。
member_expression
member_expression
は、指定された階層のメンバーと評価されます。階層は、常に、外部式(構文によって適用)から決定できます。member_expression
は、次のいずれかになります。
-
level_member_literal
は、階層メンバーと評価される式です。 -
hier_navigation_expr
は、階層のあるメンバーを別のメンバーに関連付ける式です。 -
CURRENT
MEMBER
では、外部コンテキストで決定された階層のメンバーを指定します。 -
NULL
は、存在しないメンバーを指定する方法です。 -
ALL
では、すべての階層の最上位の単一メンバーを指定します。
hier_parent_expression
指定されたメンバーから親メンバーにナビゲートします。
hier_lead_lag_expression
コンテキスト階層内で、一定のメンバーの数だけ前後に移動して、指定されたメンバーから関連するメンバーにナビゲートします。HIER_LEAD
キーワードを指定すると、後続のメンバーが戻されます。HIER_LAG
キーワードを指定すると、先行するメンバーが戻されます。
hier_lead_lag_clause
指定されたメンバーからoffset_expr
の数だけ前後にあるメンバーを対象にナビゲートします。レベル内のメンバーの順序は、属性ディメンションの定義で指定されます。
hier_lead_lag_clause
のオプションのパラメータは次のとおりです。
-
WITHIN
LEVEL
では、現在のメンバーと深さが同じメンバー内で、offset_expr
メンバー分だけ前後に移動して、関連するメンバーが検索されます。レベル内のメンバーの順序は、属性ディメンションの定義によって決まります。WITHIN
キーワードとACROSS
キーワードのどちらも使用されていない場合は、WITHIN
LEVEL
操作がデフォルトとなります。 -
WITHIN
PARENT
では、現在のメンバーと深さが同じメンバー内で、offset_expr
メンバー分だけ前後に移動して、関連するメンバーが検索されますが、現在のメンバーと親を共有するメンバーのみが考慮されます。レベル内のメンバーの順序は、属性ディメンションの定義によって決まります。 -
WITHIN
ACROSS
ANCESTOR
AT
LEVEL
は、指定されたレベルの現在のメンバーの祖先(またはメンバー自体)までナビゲートして関連するメンバーを検索し、その親内の各祖先メンバー(メンバー自体を含む)の位置を示します。祖先メンバーが見つかると、祖先メンバーと深さが同じメンバー内で、offset_expr
メンバー分前後にナビゲーションが移動します。関連する祖先が見つかった後、ナビゲーションはそのメンバーから階層を逆方向に移動し、上に向かって記録された(逆順)親内の位置を照合します。親内での位置は、
POSITION
FROM
BEGINNING
とPOSITION
FROM
END
のいずれが指定されているかに従い、最初の子または最後の子からオフセットされます。デフォルトは、POSITION
FROM
BEGINNING
です。レベル内のメンバーの順序は、属性ディメンションの定義によって決まります。
qdr_expression
qdr_expression
は、新しいコンテキストで指定されたcalc_meas_expression
を評価し、階層メンバーを新しい値に設定する修飾データ参照です。
qualifier
修飾子は、指定された階層のメンバーを、member_expression
の評価の結果のメンバーに設定して、外部コンテキストを変更します。member_expression
がNULL
の場合、qdr_expression
の選択の結果はNULL
です。
分析ビューの単純式
計算済メジャー式は、分析ビューの単純式にすることができます。分析ビューの単純式は、SQLリテラルまたは分析ビューのメジャーへの参照にすることができます。
av_simple_expression::=
measure_ref::=
measure_ref
分析ビューのメジャーへの参照。meas_name
パラメータは、分析ビューの定義のメジャーの名前にする必要があります。特殊文字のエスケープまたはケースの保持、あるいはその両方を行うには、二重引用符を使用します。メジャー名が分析ビューで使用される属性ディメンションの名前と競合する場合は、オプションのMEASURES
キーワードを使用して、あいまいさを解決できます。名前の競合が存在しない場合でも、MEASURES
キーワードは使用できます。
計算済メジャー式の例
LAG式の例
このトピックでは、分析ビューのMEASURES
句に定義された計算済メジャーを表示する例を示します。その他の例は、SQL LiveのWebサイト(https://livesql.oracle.com/apex/livesql/file/index.html)にある分析ビューのチュートリアルを参照してください。
これらの計算済メジャーは、LAG
操作とは異なります。
-- These calculated measures are from the measures_clause of the
-- sales_av analytic view.
MEASURES
(sales FACT sales, -- A base measure
units FACT units, -- A base measure
sales_prior_period AS -- Calculated measures
(LAG(sales) OVER (HIERARCHY time_hier OFFSET 1)),
sales_year_ago AS
(LAG(sales) OVER (HIERARCHY time_hier OFFSET 1
ACROSS ANCESTOR AT LEVEL year)),
chg_sales_year_ago AS
(LAG_DIFF(sales) OVER (HIERARCHY time_hier OFFSET 1
ACROSS ANCESTOR AT LEVEL year)),
pct_chg_sales_year_ago AS
(LAG_DIFF_PERCENT(sales) OVER (HIERARCHY time_hier OFFSET 1
ACROSS ANCESTOR AT LEVEL year)),
sales_qtr_ago AS
(LAG(sales) OVER (HIERARCHY time_hier OFFSET 1
ACROSS ANCESTOR AT LEVEL quarter)),
chg_sales_qtr_ago AS
(LAG_DIFF(sales) OVER (HIERARCHY time_hier OFFSET 1
ACROSS ANCESTOR AT LEVEL quarter)),
pct_chg_sales_qtr_ago AS
(LAG_DIFF_PERCENT(sales) OVER (HIERARCHY time_hier OFFSET 1
ACROSS ANCESTOR AT LEVEL quarter))
)
ウィンドウ式の例
この計算済メジャーは、ウィンドウ操作を使用します。
MEASURES
(sales FACT sales,
units FACT units,
sales_qtd AS
(SUM(sales) OVER (HIERARCHY time_hier
BETWEEN UNBOUNDED PRECEDING AND CURRENT MEMBER
WITHIN ANCESTOR AT LEVEL QUARTER)),
sales_ytd AS
(SUM(sales) OVER (HIERARCHY time_hier
BETWEEN UNBOUNDED PRECEDING AND CURRENT MEMBER
WITHIN ANCESTOR AT LEVEL YEAR))
)
SHARE OF式の例
これらの計算済メジャーは、SHARE
OF
式を使用します。
MEASURES
(sales FACT sales,
units FACT units,
sales_shr_parent_prod AS
(SHARE_OF(sales HIERARCHY product_hier PARENT)),
sales_shr_parent_geog AS
(SHARE_OF(sales HIERARCHY geography_hier PARENT)),
sales_shr_region AS
(SHARE_OF(sales HIERARCHY geography_hier LEVEL REGION))
)
QDR式の例
これらの計算済メジャーは、QUALIFY
キーワードを使用して、修飾データ参照式を指定します。
MEASURES
(sales FACT sales,
units FACT units,
sales_2011 AS
(QUALIFY (sales, time_hier = year['11'])),
sales_pct_chg_2011 AS
((sales - (QUALIFY (sales, time_hier = year['11']))) /
(QUALIFY (sales, time_hier = year['11'])))
)