EQLでは文を定義し、LOOKUP式を介してその文を他の文から参照できます。
複数のEQL副問合せを、1つのナビゲーション問合せのコンテキストの中で指定できます。それぞれが別の分析ビューに、または別の粒度レベルの小計に対応します。式でも、他の計算済の文からの値を使用できます。これが役に立つのは、詳細なレベルのバケットの中で分析計算するために、より粗いレベルの小計が必要である場合です。
たとえば、指定された年の各販売員の売上の割合(%)を計算するには、その年の総計も計算する必要があります。ルックアップ表を使用すると、この種の問合せを作成できます。
LOOKUP式は、単純な形式の結合です。先行する文の結果を、ルックアップ表として扱います。
<LookupExpr> ::= <statement-name>[<LookupList>].<attribute-name>角カッコ演算子はリテラルであり、レコード・セットおよびグルーピング属性を識別するために使用されます。一方、ドット演算子もリテラルですが、これはフィールドを識別するために使用されます。
<LookupList> ::= <empty> ::= <SimpleExpr> [,<LookupList>]このBNF構文では、角カッコは2番目のLookupListをオプションで使用することを示します。
ルックアップ・リストは、指定された文のグルーピング属性に対応します。結果がNULLになるのは、ルックアップ・リストがターゲット・グループ・キー値に一致しない場合や、一致するターゲット・グループ・キー値のターゲット列がNULLである場合です。
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式は、ターゲット文が指定した状態を参照している場合サポートされます。この場合のルールとして角カッコ内には式が1つのみで、これがターゲット状態の主キーに対して一致されます。
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別、Region別の売上比率を計算するとします。集計の1つではRegionごとにグルーピングした合計を計算し、それに続く集計でRegionとProductTypeごとにグルーピングした合計を計算します。
この2番目の集計で使用する式で、Regionの集計の結果を参照します。つまり、RegionとProductTypeのペアごとに、そのRegion全体の小計に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
この例では、四半期別に、各製品タイプの売上の割合を計算します。
この問合せでは、1つの文で計算した情報を別の文で使用できるようにする必要があります。
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