ビュー定義EQLでは、ビューのコンテンツを定義します。ビューを定義する際は、次のガイドラインがあることに留意する必要があります。EQL構文の詳細は、『Oracle Endeca Server EQLガイド』を参照してください。
ビュー定義には、複数の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 MEMBERS(attributeName) as attributeName
たとえば、次のデータは、使用可能な製品の色と各製品を販売する販路の数を示しています。
ItemColors | AvailableOutlets |
---|---|
赤、青 | 3 |
赤 | 5 |
赤、青、白 | 6 |
赤、青、白 | 4 |
赤、青 | 1 |
ItemColors | TotalOutlets |
---|---|
赤、青 | 4 |
赤 | 5 |
赤、青、白 | 10 |
ItemColors | TotalOutlets |
---|---|
赤 | 19 |
青 | 14 |
白 | 10 |
ビューを定義する際、グループ化を使用している場合は、グループ化属性を除いて、ビューのすべての属性に集計方法を指定する必要があります。
集計を使用して物理属性から属性を導出する場合、属性のデータ型に適用可能な集計方法を使用できます。「集計方法およびこれらの方法を使用可能なデータ型」を参照してください。
SELECT ARB(Region) as Region
グループ化内の属性に別の値がある場合、Studioは単一の任意の値を選択します。
SELECT ARB(ItemColors) as ItemColors
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