プライマリ・コンテンツに移動
Oracle® Big Data Discovery Cloud Service EQLリファレンス

E65371-04
目次へ
目次
索引へ移動
索引

前
次
機械翻訳について

文間参照のLOOKUP式の使用

EQLで文を定義し、LOOKUP式を使用して他の文からこれらの文を参照できます。

複数のEQL副問合せを単一のナビゲーション問合せのコンテキスト内で指定することも、それぞれを異なるアナリティク・ビューに対応するように指定することも、異なる粒度レベルの小計に指定することもできます。 また、式では他の計算文からの値も使用できます。 これは、粒度の粗いバケット内のアナリティクスの計算に、粗い小計が必要な場合に役立ちます。

たとえば、指定した年度の各営業担当者のパーセント分布を計算する場合は、その年の総合計も計算する必要があります。 参照表を使用して、これらのタイプの問合せを作成できます。

LOOKUP式の構文

LOOKUP式は単純な結合形式です。 この処理では、前の文の結果が検索表として処理されます。

LOOKUP式の構文は次のとおりです:
<LookupExpr> ::= <statement-name>[<LookupList>].<attribute-name>
大カッコ演算子はリテラルで、レコード・セットとグループ化属性を識別するために使用されます。ドット演算子もリテラルであり、フィールドを識別するために使用されます。
LookupList用のBNFは次のとおりです。
<LookupList> ::= <empty>
             ::= <SimpleExpr> [,<LookupList>]
このBNF構文では、大カッコは2番目のLookupListのオプションの使用を示します。

参照リストは、指定された文のグループ化属性に対応します。 検索リストがターゲット・グループ・キー値と一致しない場合、またはターゲット列が一致するターゲット・グループ・キー値のNULLの場合、結果はNULLになります。

参照属性は、ターゲット文のGROUP BY句を順に参照します。 索引付けされた値の計算されたルックアップは可能です。つまり、次の例に示すように、前年からの総売上などの関連情報をルックアップできます:
DEFINE YearTotals AS SELECT
  SUM(SalesAmount) AS Total
FROM SaleState
GROUP BY Year;

RETURN AnnualCategoryPcts AS SELECT
  SUM(SalesAmount) AS Total,
  Total/YearTotals[Year].Total AS Pct
FROM SaleState
GROUP BY Year, Category;

RETURN YoY AS SELECT
  YearTotals[Year].Total AS Total,
  YearTotals[Year-1].Total AS Prior,
  (Total-Prior)/Prior AS PctChange
FROM SaleState
GROUP BY Year

状態に対するLOOKUPの使用

LOOKUPの式はサポートされており、ターゲット文は名前付きの状態を参照しています。このルールは、ターゲット状態の主キーと照合される大カッコ内に1つの式のみ存在する必要があります。

ある状態に対して複数の参照キーを使用する場合、EQLは、2つの参照キーを使用するこの例と同様のエラー・メッセージを返します:
In the definition of attribute "x": The LOOKUP expression has 2 lookup value(s); a LOOKUP expression that refers 
to state "Sales" must have exactly one lookup value, corresponding to the state's primary key "SalesID"

別の文からの値の参照

たとえば、リージョンごとのProductTypeの売上の割合をコンピュートするとします。 1つの集計によってリージョン別にグループ化された合計が計算され、後続の集計によってリージョンおよびProductType別にグループ化された合計が計算されます。

この2番目の集計では、リージョン集計の結果を参照する式を使用します。 つまり、このリージョンのProductTypeが表すリージョン全体の小計の割合をコンピュートするために、リージョンとProductTypeの各ペアが次のようになります:

DEFINE RegionTotals AS
SELECT SUM(Amount) AS Total
FROM SaleState
GROUP BY Region;

RETURN ProductPcts AS
SELECT 
  100 * SUM(Amount) / RegionTotals[Region].Total AS PctTotal
FROM RegionTotals
GROUP BY Region, ProductType
最初の文は、各リージョンの合計製品売上を計算します。 次に、次の文ではRegionTotalsの結果を使用して、各リージョンのパーセンテージが判定され、文間の参照構文が使用されます。
  • bracket演算子は、Region属性のProductPcts値に等しいグループ化値を持つRegionTotals結果を参照することを示します。
  • ドット演算子は、指定されたRegionTotalsレコードのTotalフィールドを参照することを示します。

売上高のパーセンテージを計算しています

この例では、各製品タイプの売上に対するパーセンテージを四半期ごとに計算します。

この問合せでは、ある文の情報を別の文で使用するために、その文の情報を計算する必要があります。

指定された製品の売上を、指定された四半期の総売上の割合としてコンピュートするには、四半期の総計をコンピュートして格納する必要があります。 四半期/製品のペアの計算結果、対応する四半期合計を取得できます。
DEFINE QuarterTotals AS
SELECT SUM(Amount) AS Total
FROM SaleState
GROUP BY Quarter;

RETURN ProductPcts AS
SELECT 
  100 * SUM(Amount) / QuarterTotals[Quarter].Total AS PctTotal
FROM QuarterTotals
GROUP BY Quarter, ProductType