EQLを使用してビューを定義するためのガイドライン

ビュー定義EQLでは、ビューのコンテンツを定義します。ビューを定義する際は、次のガイドラインがあることに留意する必要があります。EQL構文の詳細は、『Oracle Endeca Server EQLガイド』を参照してください。

DEFINE文およびSELECT文の表示

ビュー定義には、複数のDEFINE文およびSELECT文が含まれる場合があります。

最後の文は、すべてのビュー属性を含むDEFINE文にする必要があります。DEFINE文の名前はビュー・キーとして使用され、変更できません。既存のビューのビュー・キーを変更しようとすると、対応するコンポーネントが機能しなくなります。

ビュー属性に対するソース・ビューの指定

すべてのカスタム・ビュー定義に対して、FROMパラメータを使用してビュー属性の元のソースを指定する必要があります。

たとえば、ベース・ビューのコピーを作成すると、ビュー定義にそのベース・ビューのビュー・キーが含まれることがわかります。

DEFINE Customers as SELECT 
ARB(Customer_Name) as Customer_Name,
ARB (Customer_Address) as Customer_Address,
ARB(Cities) as Cities,
ARB(States) as States,
ARB(CustomerZip) as CustomerZip,
ARB(LatLong) as LatLong,
ARB(Business_Types) as Business_Types,
ARB(CustomerAgreedDaysCredit) as CustomerAgreedDaysCredit,
ARB(Credit_Rating) as Credit_Rating,
ARB(CustomerDiscount) as CustomerDiscount,
SUM(Number_of_Cases_Sold) as TotalCustomerCases,
CountDistinct(Transaction_Id) as TotalCustomerTransactions,
SUM(GrossDollars) as TotalCustomerGross,
SUM(MarginDollars) as TotalCustomerMargin,
SET(Shipping_Companies) as ShippingCompaniesUsed
FROM "wine-sales"
GROUP BY Customer_Id

ソース・ビューを特定する場合は、ビューの表示名ではなくビュー・キーを使用してください。

また、別のビューを参照する場合も、他のビューの属性を特定する最後のDEFINE文のみを参照できます。そのビュー定義の中間のDEFINE文またはSELECT文を参照することはできません。

ビューのグループ化

すべてのカスタム・ビューには、1つ以上のグループ化(GROUP BY)属性が必要です。

Studioは、GROUP BY属性をビューのレコードの識別属性として使用します。

GROUP BY属性が存在しない場合、識別属性はなく、ビューを「レコード詳細」または「比較」に使用することはできません。コンポーネント編集ビューでは、「レコード詳細」オプションと「比較」オプションは自動的に無効になります。

グループ化に対する複数値属性の使用

グループ化に複数値属性を使用する場合、個々の値でグループ化するかレコードに割り当てられた値のセットでグループ化するかを指定する必要があります。
  • 値のセットでグループ化するには、GROUP BYを使用します。
  • 個々の値でグループ化するには、GROUP BY MEMBERSを使用します。GROUP BY MEMBERSの構文は、次のようにGROUP BYとは少し異なります。
    GROUP BY MEMBERS(attributeName) as attributeName

たとえば、次のデータは、使用可能な製品の色と各製品を販売する販路の数を示しています。

ItemColors AvailableOutlets
赤、青 3
5
赤、青、白 6
赤、青、白 4
赤、青 1
アイテムの色でグループ化された使用可能な販路の総数を計算している場合は、次のようになります。
  • DEFINE NewView as SELECT TotalOutlets as sum(AvailableOutlets) FROM Sales GROUP BY ItemColorsを使用する場合、結果は次のとおりです。
    ItemColors TotalOutlets
    赤、青 4
    5
    赤、青、白 10
  • DEFINE NewView as SELECT TotalOutlets as SUM(AvailableOutlets) FROM Sales GROUP BY MEMBERS(ItemColors) as ItemColorsを使用する場合、結果は次のとおりです。
    ItemColors TotalOutlets
    19
    14
    10

ビュー属性をグループ化する際の集計方法の指定

ビューを定義する際、グループ化を使用している場合は、グループ化属性を除いて、ビューのすべての属性に集計方法を指定する必要があります。

集計を使用して物理属性から属性を導出する場合、属性のデータ型に適用可能な集計方法を使用できます。「集計方法およびこれらの方法を使用可能なデータ型」を参照してください。

グループ化されたビューに物理属性の実際の値を表示する場合があります。たとえば、製品IDでグループ化している場合、製品名、製品説明および使用可能なサイズを含めることがあります。ビューのグループ化を使用する場合、物理属性の実際の値を含める手順は次のとおりです。
  • 単一値属性の場合、ARB集計方法を使用します。次に例を示します。
    SELECT ARB(Region) as Region

    グループ化内の属性に別の値がある場合、Studioは単一の任意の値を選択します。

  • 複数値属性の場合は、次のようになります。
    • 各レコードから属性の任意の値を1つ取得するには、ARB集計方法を使用します。次に例を示します。
      SELECT ARB(ItemColors) as ItemColors
    • レコードの値の完全なセットを取得するには、SET_UNIONS集計方法を使用します。次に例を示します。
      SELECT SET_UNIONS(ItemColors) as ItemColors

グループ化を使用していない場合は、集計方法は必要ありません。次に例を示します。

SELECT ProductName as ProductName

この場合、名前を指定する必要がないため、次も使用できます。

SELECT ProductName

ビュー属性の命名

ビューの属性を命名する場合は、次のようにします。
  • 物理データの属性の名前を変更しないでください(別名を付けないでください)。

    たとえば、Region属性では、属性をビューに追加する際はRegionと定義します。

    SELECT ARB(Region) AS Region

    属性には次のような異なる名前を定義しないでください。

    SELECT ARB(Region) AS RegionList

    エンド・ユーザーは、物理データに存在する属性による絞込みしかできません。属性に別名を付けると、エンド・ユーザーは絞込みにその属性を使用できなくなります。

  • 物理データからの属性と同じ名前を導出属性に付けないでください。

    たとえば、「Sales」属性の値の平均値を求める属性では、新しい属性を次のように定義しないでください。

    SELECT AVG(Sales) as Sales

    かわりに、次のように定義します。

    SELECT AVG(Sales) as AvgSales

    また、これにより、エンド・ユーザーが物理データに存在しない属性を使用して絞込みを行うのを防ぐこともできます。

ビュー定義の例

次に、個々のトランザクションで構成される単一のデータ・セットから、価格、使用可能な色、販売個数などを含む製品リストを生成するためのEQL問合せの例を示します。

DEFINE Products AS SELECT
ARB(ProductSubcategoryName) AS ProductSubcategoryName,
ARB(ProductCategoryName) AS ProductCategoryName,
ARB(Description) AS Description,
SET_UNIONS(AvailableColors) AS AvailableColors,
AVG("FactSales_SalesAmount") AS AvgSales,
SUM("FactSales_SalesAmount") AS SalesSum,
AVG(StandardCost) AS AvgStandardCost,
AVG(ListPrice) AS AvgListPrice,
(AvgListPrice - AvgStandardCost) AS Profit
FROM Sales
GROUP BY ProductName