レッスン 9: 参照エンティティの指定
レポート作成者にとっては、エンティティ内に必要となる属性が 1 つしかないこともあります。たとえば、レポート ビルダーのユーザーにとって、SubCategory エンティティ内で必要な属性は Name 属性だけであることが考えられます。このような場合は、モデルのユーザーがレポートに属性を追加するたびに、1 つの属性しか含まれないエンティティ内を移動するという方法を使う代わりに、ロールを参照エンティティに変更できます。ロールを参照エンティティに変更すると、親エンティティ内にフィールドとして識別属性が表示されます。たとえば、Product SubCategory エンティティを参照エンティティに変更すると、レポート ビルダーでは、Product SubCategory の Name 属性がロールではなく Product エンティティのフィールドとして表示されるようになります。
一般的に、情報が階層形式になっている場合は、ロールを参照エンティティに変更すると便利です。たとえば、City エンティティと State/Province エンティティがあり、State/Province が City エンティティのロールである場合、State/Province ロールを参照エンティティに変更すると、State/Province は City エンティティ内のフィールドとして表示されます。また、Country エンティティが State/Province エンティティのロールである場合、Country ロールを参照エンティティとしてマークした後昇格すると、Country エンティティも参照エンティティとして扱われ、レポート ビルダーでは City エンティティ内のフィールドとして表示されます。この操作は、一般的なモデル化の用語で "階層の非正規化" といいます。
参照エンティティとして使用するエンティティには、IdentifyingAttribute プロパティで属性を 1 つだけ指定できます。識別属性はエンティティを一意に識別する属性です。たとえば、Product Category Name 属性は各製品カテゴリを一意に識別します。識別属性として指定した属性は、エンティティを参照エンティティに変更すると、親エンティティ内に表示されるようになります。
エンティティを参照エンティティに変更するには、IsLookup プロパティを True に変更します。階層構造になっているエンティティを参照エンティティに変更するには、PromoteLookup プロパティも True に設定する必要があります。たとえば、Country ロールが State/Province エンティティ内で参照エンティティとなっている場合、Country ロールを City エンティティのフィールドとして表示するには、State エンティティから、Country ロールの PromoteLookup プロパティも True に設定します。このレッスンでは、まず Product Subcategory ロールを Product エンティティの参照エンティティに変更します。次に、Product Category ロールを Product Subcategory エンティティの参照エンティティに変更した後、Product エンティティ内のフィールドとして表示されるように昇格します。
参照エンティティを指定するには
[SQL Server Business Intelligence Development Studio] ウィンドウの AdventureWorks2008R2 モデルに戻ります。
ツリー ビューで、[Product Details] フォルダーを展開します。
[Product Subcategory] エンティティを選択します。
Product Subcategory エンティティには、Name フィールドという IdentifyingAttribute が 1 つだけ含まれています。参照エンティティには IdentifyingAttribute を 1 つだけ設定できます。
[プロパティ] ウィンドウで、[IsLookup] プロパティを探し、[True] を選択します。
レポート モデルを配置すると、Product Subcategory エンティティが Product エンティティのフィールドとして表示されます。
エンティティを参照エンティティに昇格するには
ツリー ビューで、[Product Category] エンティティを選択します。
[プロパティ] ウィンドウで、[IsLookup] プロパティを探し、[True] を選択します。
ツリー ビューで、[Product Subcategory] エンティティを選択します。
リスト ビューで、[Product Category] ロールを選択します。
[プロパティ] ウィンドウで、[PromoteLookup] プロパティを探し、[True] を選択します。
このプロパティを設定すると、Product Category が参照エンティティに昇格し、Product エンティティ内の属性として表示されます。
エンティティ内の属性を再編成するには
ツリー ビューで、[Product] エンティティを選択します。
リスト ビューで、[Product Subcategory] エンティティを右クリックし、[上へ移動] をクリックします。
[Product Subcategory] エンティティが [Name] 属性の下に表示されるまで、[上へ移動] をクリックします。
[ファイル] メニューの [すべてを保存] をクリックします。
次の手順
これで、ユーザーが Product Category または Product Subcategory エンティティ内を移動して、カテゴリ名またはサブカテゴリ名を探す必要がなくなりました。各エンティティは Product エンティティのフィールドとして表示されるようになり、ユーザーはこれらを他のフィールドと同様にレポートに追加できます。
次のレッスンでは、エンティティのプロパティを変更し、別のエンティティからフィールドを継承するようにします。「レッスン 10: 別のエンティティからのプロパティの継承」を参照してください。
関連項目