次の方法で共有


CSDL の概念

概念スキーマ定義言語 (CSDL) は、さまざまなデータセットにプログラムでアクセスしてクエリやエクスポートを行えるように各種のデータを抽象的に表す、Entity Data Framework に基づく言語です。 CSDL は、データ ドリブン アプリケーションを定義するのに特に適しているため、レポート用のテーブル モデルを表すために使用されます。

ここでは、Entity Data Model がテーブル モデルにどのように適用されるかについて説明し、CSDL でモデルを表現する例を示します。

これらの概念を示すために、Codeplex から入手できる AdventureWorks サンプル データベースの例を使用しています。 サンプルの詳細については、SQL Server 用の Adventure Works サンプルを参照してください。

CSDL のモデルの構造

レポート モデルとそのデータを記述する CSDL ドキュメントでは、最初に xsd ステートメントを記述し、その後にモデルの定義を記述します。

モデルは名前空間として定義されます。主なエンティティ、アソシエーション、およびプロパティを次に示します。

  • EntityContainer は、モデルのテーブルの一覧を示します。

  • 各テーブルは、EntityContainer で EntitySet として示されます。

  • 2 つのテーブル間の各リレーションシップは、リレーションシップのエンド ポイントとロールを定義する AssociationSet として記述されます。

  • EntityType 要素は、BISM 向けに拡張されており、テーブルやその列に関する追加情報を提供できるようになっています。これには、並べ替えや表示の目的で使用されるプロパティが含まれます。

  • Measure 要素は、モデルで使用できる計算を定義します。 新しい KPI 要素を使用すると、一連の特殊な表示属性を追加することでメジャーを KPI に変換できます。

  • パースペクティブの表現はありません。 パースペクティブに含まれていない列やテーブルが CSDL にある場合、Hidden 属性のフラグが設定されます。

Entity、EntitySet、および Entitytype

Entity Data Framework のエンティティの表記が拡張され、データ モデルの列やテーブルを表現できるようになっています。 次の例は、テーブルを 3 つだけ含む単純なモデルの EntitySet 要素の記述部分を抜粋したものです。

<EntityContainer Name="SimpleModel">
<EntitySet Name="DimCustomer"EntityType="SimpleModel.DimCustomer">
     <bi:EntitySet />
   </EntitySet>
<EntitySet Name="DimDate" EntityType="SimpleModel.DimDate">
     <bi:EntitySet />
   </EntitySet>
<EntitySet Name="DimGeography" EntityType="SimpleModel.DimGeography">
     <bi:EntitySet />
   </EntitySet> />

EntitySet には、テーブルの列やデータに関する情報はありません。 列とそのプロパティの詳細な記述は、EntityType 要素で提供されます。

各エンティティ (テーブル) の EntityType 要素には、キー列、列のデータ型と長さ、NULL 値を許容するかどうか、並べ替えの動作など、詳細を定義する一連のプロパティが含まれます。 たとえば、次の CSDL は、Customer テーブルの 3 つの列の記述部分を抜粋したものです。 最初の列は、モデルの内部で使用される特殊な非表示の列です。

<EntityType Name="Customer">
  <Key>
     <PropertyRef Name="RowNumber" />
  </Key>
    <Property Name="RowNumber" Type="Int64" Nullable="false">
     <bi:Property Hidden="true" Contents="RowNumber"
       Stability="RowNumber" />
    </Property>
    <Property Name="CustomerKey" Type="Int64" Nullable="false">
      <bi:Property />
    </Property>
     <Property Name="FirstName" Type="String" MaxLength="Max" FixedLength="false">
       <bi:Property />
      </Property>

生成される CSDL ドキュメントのサイズを制限するために、エンティティで複数回使用されるプロパティは、既存のプロパティへの参照で指定されます。これにより、EntityType には、各プロパティを 1 回だけ指定すれば済みます。 クライアント アプリケーションでは、OriginEntityType に一致する EntityType を検出することでプロパティの値を取得できます。

リレーションシップ

Entity Data Framework では、リレーションシップはエンティティ間のアソシエーションとして定義されます。

アソシエーションには必ず 2 つのエンド ポイントがあり、それぞれがテーブルのフィールドまたは列を参照します。 したがって、リレーションシップのエンド ポイントが異なれば、2 つのテーブル間に複数のリレーションシップを定義することができます。 アソシエーションのエンド ポイントにはロール名が割り当てられます。このロール名は、データ モデルのコンテキストにおけるアソシエーションの用途を示します。 ロール名の例としては、Orders テーブルの顧客 ID に関連する顧客 ID に適用される ShipTo などがあります。

モデルの CSDL 表現に含まれるアソシエーションに関する属性には、アソシエーションの複数要素の接続性の観点からエンティティが相互にマップされる方法を決定する属性もあります。 複数要素の接続性は、テーブル間のリレーションシップのエンド ポイントの属性または列がリレーションシップの "一" 側か "多" 側かを示します。 一対一のリレーションシップを表す値はありません。 CSDL の BISM 拡張でサポートされる複数要素の接続性の値は、エンティティが他のエンティティと関連付けられていないことを示す 0 と、一対一のリレーションシップまたは一対多のリレーションシップであることを示す 0..1 です。

次のサンプルは、列 DateAlternateKey で結合された Date および ProductInventory という 2 つのテーブルのリレーションシップの CSDL 定義を示しています。 既定では、AssociationSet の名前は、リレーションシップに関係する列の完全修飾名になります。 ただし、モデルのデザイン時にこの動作を変更すれば、別の名前付け形式を使用できます。

<AssociationSet Name="ProductInventory_Date_DateKey" Association="Model.ProductInventory_Date_DateKey">
              <End EntitySet="ProductInventory" />
              <End EntitySet="Date" />
              <bi:AssociationSet />
            </AssociationSet>

視覚化プロパティとナビゲーション プロパティ

テーブル モデリングについての Entity Data Framework に対する拡張機能で重要なものに、レポート層での表示を定義するためのプロパティと、エンティティ間のリレーションシップをナビゲートするためのプロパティがあります。 通常、データ モデルを作成する際に、データの順序やグループ化の方法を制御したり既定値を決めたりすることはそれほど重要視されません。これは、順序などの表示に関する詳細はクライアント アプリケーションで指定されると想定されるためです。 ただし、Analysis Services のテーブル モデルは Power View レポート クライアントと統合できる設計になっており、レポート デザイン画面でのデータ モデルのエンティティの表示をサポートするプロパティと属性が用意されています。

視覚化についての拡張機能には、数値データで使用する既定の集計を指定するための属性、テキスト フィールドが画像の URL を指すことを示すための属性、現在のフィールドの並べ替えに使用するフィールドを指定するための属性などがあります。

名前のプロパティと名前付け規則

CSDL の仕様では、キーとして使用できる一意の名前と識別子を各エンティティに割り当てるように規定されています。 また、一部のエンティティには、表示目的で使用されるキャプションや、エンティティの使用場所によって変化するコンテキスト名を指定できます。

Documentation 要素を使用すると、レポートの設計者は、ビジネス ユーザーがデータの意味を理解できるようにエンティティの説明を記述することができます。 また、一部のエンティティでは、1 つ以上の Annotation 属性を使用して、アプリケーションやクライアントで使用できる追加のメタデータを提供できます。

Analysis Services ツールでモデルを生成すると、オブジェクトの名前付けと名前の一意性に関する Analysis Services の規則に従ってオブジェクトの名前が作成されます。 ただし、CSDL は Entity Data Framework の一部であるため、C# の識別子に関する規則に従って名前を付ける必要があります。そのため、モデルの CSDL をサーバーで作成するときに、Analysis Services のスキーマ内で使用されている名前が取得され、CSDL の要件を満たす新しいオブジェクト名が自動的に作成されます。 次の表に、新しい名前が生成されるときの処理を示します。

ルール

動作

禁止されている文字を使用しない

禁止されている文字は、アンダースコアに置き換えられます。

準備中

名前は一意でなければならない

同じ文字列が 2 つある場合は、一意にするために、どちらかにアンダースコアと数値が追加されます。

準備中

キャプションと修飾子の両方に翻訳があります。特定の言語では、どちらか一方だけの場合もあります。 つまり、修飾子と名前または修飾子とキャプションを連結した場合、文字列が 2 種類の言語で示されることがあります。

関連項目

概念

テーブル モデルの CSDL 拡張機能の概要