文間参照の使用

EQLでは、定義した文を他の文から参照できます。

複数のEQL副問合せを、1つのナビゲーション問合せのコンテキストの中で指定できます。それぞれが別の分析ビューに、または別の粒度レベルの小計に対応します。

式でも、他の計算済の文からの値を使用できます。これが役に立つのは、詳細なレベルのバケットの中で分析計算するために、より粗いレベルの小計が必要である場合です。

たとえば、指定された年の各販売員の売上の割合(%)を計算するには、その年の総計も計算する必要があります。文間参照を使用すると、この種の問合せを作成できます。

文間参照の構文

文間参照の構文は次のとおりです。
<LookupExpr>   ::=  <statement name>[<LookupList>].<attribute name>
<LookupList>   ::=  <empty>
               ::=  <SimpleExpr> [,<LookupList>] 

角カッコを使用してレコード・セットとグルーピング属性を指定し、ドットを使用してフィールドを指定します。

別の文からの値の参照

たとえば、ProductType別、Region別の売上比率を計算するとします。集計の1つではRegionごとにグルーピングした合計を計算し、それに続く集計でRegionとProductTypeごとにグルーピングした合計を計算します。

この2番目の集計で使用する式で、Regionの集計の結果を参照します。つまり、RegionとProductTypeのペアごとに、そのRegion全体の小計にProductTypeが占める割合を計算できます。

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

RETURN ProductPcts AS
SELECT 
  100 * SUM(Amount) / RegionTotals[Region].Total AS PctTotal
GROUP BY Region, ProductType
最初の文では、各地域の製品売上合計を計算します。次の文で、RegionTotalsの結果を使用して各地域の割合を求めます。このときに、文間参照構文を使用します。
  • 角カッコ演算子は、RegionTotalsの結果のうち、group-byの値がRegion属性のProductPctsの値に等しいものを参照することを示します。
  • ドット演算子は、指定されたRegionTotalsレコードのTotalフィールドを参照することを示します。

売上の割合の計算

この例では、四半期別に、各製品タイプの売上の割合を計算します。

この問合せでは、1つの文で計算した情報を別の文で使用できるようにする必要があります。

指定された製品の売上を、指定された四半期の売上合計に占める割合として計算するには、四半期売上を計算して保存する必要があります。これで、四半期/製品ペアごとに計算するときに、対応する四半期合計を取り出せるようになります。
DEFINE QuarterTotals AS
SELECT SUM(Amount) AS Total
GROUP BY Quarter ;

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