semanticEntityの一般的な構文

semanticEntity複合タイプは、エンティティとそのすべての属性を定義します。

semanticEntityの構文は次のとおりです。
<semanticEntity key="?" displayName="?" isActive="?">
   <definition>?</definition>
   <description>?</description>
   <attributes>
      <semanticAttribute name="?" displayName="?" datatype="?" 
         isDimension="?" isKeyColumn="?" description="?">
         <property key="?">?</property>
      </semanticAttribute>
   </attributes>
   <metrics>
      <metric name="?" displayName="?" datatype="?" description="?">
         <definition>?</definition>
         <property key="?">?</ns:property>
      </metric>
   </metrics>
   <groups>
      <group key="?" displayName="?">
         <semanticAttributeKey name="?"/>
         <property key="?">?</property>
      </group>
   </groups>
   <property key="?">?</property>
</semanticEntity>
その要素と属性の意味は次のとおりです。
要素または属性の名前 説明
key 必須です。エンティティの作成時に提供するエンティティの一意識別子。たとえば、キーSalesでエンティティを作成できます。キー名はNCName書式である必要があります。
displayName オプションです。Studioなどのフロントエンド・アプリケーションで使用できる表示名を定義します。表示名にはNCName以外の書式を使用できます。
isActive 必須です。このエンティティがアクティブ(true)か非アクティブ(false)かを指定するブール値。非アクティブ・エンティティのdefinitionは、put操作の一部やEQL問合せとして評価されず、その定義は問合せに連結されません。そのため、非アクティブ・ステータスを使用して、無効または不完全なEQL定義でエンティティを(後で修正できるように)保存したり、後で(アクティブにする時点で)使用するためにエンティティを保存したりすることができます。他のEQL問合せがエンティティを参照する場合、そのエンティティをアクティブにする必要があります。エンティティを保存する場合、isActiveを明示的に設定する必要があります。
definition 必須です。エンティティを定義するEQL文。このEQL文は、その中に含まれるEQL式に基づいてレコードの仮想コレクションを作成(またはフィルタ処理)する必要があります。エンティティのEQL定義は、セミコロンで区切られた1つ以上のDEFINE文から構成されます。この定義は、名前付きの状態を参照できます。
この定義には、エンティティの名前(key属性)に一致するDEFINE文を含める必要があります。たとえば、SalesエンティティのDEFINE文は次のようになります。
<definition>
DEFINE Sales AS SELECT FactSales_SalesAmount AS SalesAmount,
DimReseller_ProductLine AS ProductLine, 
DimSalesTerritory_SalesTerritoryCountry AS SalesTerritoryCountry,
DimDate_FiscalYear AS FiscalYear, 
FactSales_SalesOrderNumber AS SaleOrderNumber
</definition>
description オプションです。エンティティに関する説明テキストを提供します。
attributes オプションです。エンティティ内の属性のリストを表します。attributes要素には、ゼロ個以上のsemanticAttribute要素を含めることができます。詳細は、後述の項を参照してください。
metrics オプションです。1つ以上の推奨メトリック要素のリストを提供します。metrics要素には、ゼロ個以上のmetric要素を含めることができます。詳細は、後述の項を参照してください。
groups オプションです。1つ以上のエンティティ属性グループを作成できます。詳細は、後述の項を参照してください。
property オプションです。これはsemanticEntity全体のproperty要素であることに注意してください。エンティティ全体の文字列メタデータ・グローバル・プロパティを指定できます。キー名はNCName書式である必要があります。

attributes要素

attributes要素には、1つ以上のsemanticAttribute要素を含めることができます。エンティティ内の各属性は、definitionに含まれるEQL文で指定された属性に対応する必要があります。各semanticAttribute要素は、エンティティのメンバー属性を定義します。

semanticAttribute要素の構文は次のとおりです。
<semanticAttribute name="?" displayName="?" datatype="?" 
   isDimension="?" isKeyColumn="?" description="?">
   <property key="?">?</property>
</semanticAttribute>
semanticAttribute要素ごとに、次のように指定します。
  • nameには、属性の一意の識別子を指定します。識別子はNCName書式に従う必要があります。
  • displayNameは、わかりやすい形式でのエンティティ属性の名前です。表示名にはNCName以外の書式を使用できます。
  • datatypeには、mdex:stringなどの有効なデータ型を指定します。有効な型はmdex.xsdにリストされています。
  • isDimensionは、GROUP BYの実行に役立つ属性でtrueに設定されます。たとえば、Size、Region、Categoryなどの属性にはisDimension="true"が必要ですが、これは、これらが階層を含む管理属性であり、EQLのGROUP BY文の候補であることを示します。
  • isKeyColumnは、この属性がエンティティの複合キーの一部である場合、trueに設定されます。エンティティの複合キーは、isKeyColumntrueに設定される場合、エンティティ属性のセットになります。デフォルトはfalseです。
  • descriptionには、属性の簡単な説明を提供します。
  • propertyには、この属性の名前(key)と文字列メタデータの値を設定します。キー名はNCName書式である必要があります。
次の省略された例では、Salesエンティティの作成に基づく複数の属性の1つを示します。
<attributes>
  <semanticAttribute name="SalesAmount" displayName="Sales Amount" datatype="mdex:double"
     isDimension="false" isKeyColumn="true" description="sales info">
     <property key="locale">EN</property>
  </semanticAttribute>
  ...
</attributes>

metrics要素

metrics要素には、1つ以上のmetric要素を含めることができます。metric要素の構文は次のとおりです。
<metrics>
  <metric name="?" displayName="?" datatype="?" description="?">
     <definition>?</definition>
     <property key="?">?</property>
  </metric>
</metrics>
metric要素の次の属性を指定します。
  • nameには、メトリックの一意識別子を指定します。識別子はNCName書式に従う必要があります。
  • displayNameは、わかりやすい形式でのメトリックの名前です。表示名にはNCName以外の書式を使用できます。
  • datatypeには、mdex:doubleなどの有効なデータ型を指定します。
  • descriptionには、メトリックの簡単な説明を指定します。
  • definitionは、メトリックを定義するEQL文です。definition要素には、エンティティの属性に対して問合せを行うときに集約に使用したEQLの算術式が含まれている必要があります。
  • propertyには、このメトリックの名前(key)と文字列メタデータの値を設定します。キー名はNCName書式である必要があります。

各メトリックには、SUM(X)またはAVG(Y)などの集約関数を1つ以上含める必要があります(ここで、XおよびYは、エンティティに定義される属性になります)。

たとえば、エンティティには、属性SalesAmountと、SalesAmount属性の値の合計として定義されたメトリックTotalSalesが含まれる場合があります。
<metrics>
  <metric name="TotalSales" displayName="Total Sale" datatype="mdex:double">
    <definition>sum(SalesAmount)</definition>
    <property key="currency">$</property>
  </metric>
</metrics>

groups要素

エンティティ属性グループ(ビュー属性グループとも呼ばれる)は、(semanticAttribute要素を介して設定された)エンティティ属性のセットで構成されます。

エンティティ属性グループでは、グループに関連付けられるプロパティのセット(キー/値ペア)も使用できます。これらのプロパティでは、フロントエンド・アプリケーション(Studioなど)で使用できるグループのメタデータも提供できます。たとえば、注文制御にこのメタデータを指定できます(結果のソートに使用する属性の指定など)。

各グループはgroup要素で定義され、このエンティティの属性で構成されます。metric要素の構文は次のとおりです。
<groups>
  <group key="?" displayName="?">
     <semanticAttributeKey name="?">
     <property key="?">?</property>
  </group>
</groups>
group属性の意味は次のとおりです。
  • group keyは、エンティティ属性グループの一意の識別子です。識別子は、NCName書式に従う必要はありません。
  • displayNameには、グループに対してさらにユーザーフレンドリな名前を指定できます。
  • semanticAttributeKey (そのname属性を介する)は、グループに追加されるエンティティ属性を指定します。そのため、semanticAttributeKeyname属性は、前述のsemanticAttribute要素のname属性に対応します。
  • propertyには、このグループの名前(key)と文字列メタデータの値を設定します。キー名はNCName書式である必要があります。
この例では、ProdDescriptionというエンティティ属性グループを持つ、Productというエンティティを作成します。
<semanticEntity key="Product" displayName="Product" isActive = "true">
   <definition>
    DEFINE Product AS SELECT productId AS productId, description AS description, price AS price
   </definition>
   <attributes>
      <semanticAttribute name="productId" datatype="mdex:string" 
         isDimension="true" isKeyColumn="true">
      </semanticAttribute>
      <semanticAttribute name="description" datatype="mdex:string" 
         isDimension="true" isKeyColumn="false">
      </semanticAttribute>
      <semanticAttribute name="price" datatype="mdex:double" 
         isDimension="true" isKeyColumn="false">
         <property key="currency">$</property>
      </semanticAttribute>
   </attributes>
   <metrics/>
   <groups>
      <group key="ProdDescription" displayName="ProductId and Description Group">
         <semanticAttributeKey name="productId"/>
         <semanticAttributeKey name="description"/>
         <property key="sortBy">productId</property>
      </group>
   </groups>
   <property key="SalesArea">North America</property>
</semanticEntity>

このグループには、2つのエンティティ属性("productId"と"description")がメンバーとして存在します。また、メタデータ・プロパティ("sortBy")もあり、その値を使用して"productId"属性で結果をソートできます。

エンティティの例

前に説明したエンティティ定義の各部分をまとめるために、次の使用例について考えます。

販売トランザクションのリストをロードする場合は、顧客、製品およびサプライヤに関する情報もロードします。それぞれのエンティティを作成できます。SalesAmountProductLineおよびFiscalYearの各属性から導出されるレコードの仮想セットとしてSalesエンティティを作成する例を考えます。

Salesエンティティを定義するときは、そのメトリックも提供して、ビジネス・アナリストがこのエンティティに対してEQLで問合せを発行できるようにします。これらのメトリックは、SalesAmountの合計として定義されるTotalSales、またはSalesAmountの平均として定義されるAvgSalesになります。

次の例は、複数のエンティティ属性の上に定義されるSalesエンティティと、このエンティティに対する後続の分析問合せで使用できる2つのメトリックをリストします。
<semanticEntity key="Sales" displayName="Sales Transactions" isActive="true">
<definition>
  DEFINE Sales AS 
  SELECT FactSales_SalesAmount AS SalesAmount, 
  DimReseller_ProductLine AS ProductLine, 
  DimSalesTerritory_SalesTerritoryCountry AS SalesTerritoryCountry, 
  DimDate_FiscalYear AS FiscalYear, 
  FactSales_SalesOrderNumber AS SaleOrderNumber
</definition>
<description>Sales transaction information</description>
<attributes>
  <semanticAttribute name="SalesAmount" displayName="Sales Amount" 
      datatype="mdex:double" isDimension="false" isKeyColumn="true">
      <property key="locale">EN</property>
  </semanticAttribute>
  <semanticAttribute name="ProductLine" displayName="Product Line" 
      datatype="mdex:string" isDimension="true" isKeyColumn="false">
  </semanticAttribute>
  <semanticAttribute name="SalesTerritoryCountry" displayName="Sales Territory Country"
      datatype="mdex:string" isDimension="true" isKeyColumn="false">
  </semanticAttribute>
  <semanticAttribute name="FiscalYear" displayName="Year" datatype="mdex:int"
      isDimension="true" isKeyColumn="false">
  </semanticAttribute>
  <semanticAttribute name="SaleOrderNumber" displayName="Sale Order Number" 
      datatype="mdex:string" isDimension="false" isKeyColumn="false">
  </semanticAttribute>
</attributes>
<metrics>
  <metric name="TotalSales" displayName="Total Sale" datatype="mdex:double">
    <definition>sum(SalesAmount)</definition>
    <property key="currency">$</property>
  </metric>
  <metric name="AvgSales" displayName="Average Sale" datatype="mdex:double">
    <definition>avg(SalesAmount)</definition>
  </metric>
</metrics>
<groups/>
<property key="SalesArea">North America</property>
</semanticEntity>

キャッシュの再検証

エンティティは、キャッシュが再入力されるたびに再検証されます。無効なエンティティを使用するEQL問合せではエラーが発生し、エンティティのisValidフラグがfalseに設定されます。Endeca Serverでは、提供されたDefinitionおよびMetricsでのみ検証が行われることに注意してください。