属性リレーションシップ

MicrosoftSQL ServerAnalysis Services では、ディメンション内の属性は常に直接的または間接的にキー属性に関連付けられます。同一のリレーショナル テーブルからすべてのディメンション属性が派生するスター スキーマに基づいてディメンションを定義すると、ディメンションのキー属性と各非キー属性の間に自動的に属性リレーションシップが定義されます。関連を持った複数のテーブルからディメンション属性が派生するスノーフレーク スキーマを基にディメンションを定義すると、属性リレーションシップが自動的に次のように定義されます。

  • キー属性と、メイン ディメンション テーブルの列にバインドされた各非キー属性の間

  • キー属性と、基になるディメンション テーブルにリンクしているセカンダリ テーブルの外部キーにバインドされた属性の間

  • セカンダリ テーブルの外部キーにバインドされた属性と、セカンダリ テーブルの列にバインドされた各非キー属性の間

ただし、さまざまな理由で、上記の既定の属性リレーションシップの変更が必要になる場合もあります。たとえば、非キー属性に基づいて、自然階層、カスタムの並べ替え順、ディメンションの粒度などを定義できます。詳細については、「ディメンション属性の定義」を参照してください。

注意注意

属性リレーションシップは、多次元式 (MDX) ではメンバのプロパティと呼ばれます。

自然階層リレーションシップ

ユーザー定義階層内の各属性がそのすぐ下の属性と一対多のリレーションシップにある場合、階層は自然階層になります。たとえば、次の 8 つの列から構成されるリレーショナル ソース テーブルを基にした Customer ディメンションを考えてみます。

  • CustomerKey

  • CustomerName

  • Age

  • Gender

  • Email

  • City

  • Country

  • Region

対応する Analysis Services ディメンションには、次の 7 つの属性があります。

  • Customer (CustomerKey キーを基に CustomerName でメンバ名を指定)

  • Age、Gender、Email、City、Region、Country

自然階層を表すリレーションシップを適用するには、あるレベルの属性とその下のレベルの属性との間に属性リレーションシップを作成します。Analysis Services では、このしくみによって、自然なリレーションシップと潜在的な集計が指定されます。Customer ディメンションには、Country 属性、Region 属性、City 属性、および Customer 属性に対する自然階層が存在します。{Country, Region, City, Customer} の自然階層は、次の属性リレーションシップを追加して記述します。

  • Region 属性に対する属性リレーションシップとしての Country 属性

  • City 属性に対する属性リレーションシップとしての Region 属性

  • Customer 属性に対する属性リレーションシップとしての City 属性

キューブ内のデータの操作を目的とする場合は、データの自然階層を表さないユーザー定義階層 (アドホック階層またはレポート階層とも呼ばれます) を作成することもできます。たとえば、{Age, Gender} を基にしたユーザー定義階層を作成できます。自然階層には、ソース データ内の自然なリレーションシップを表した構造をユーザーからは見えないところで集計およびインデックス化する利点がありますが、ユーザーにはこの 2 つの階層の動作の違いはわかりません。

あるレベルの SourceAttribute プロパティには、そのレベルの記述に使用する属性を指定します。属性の KeyColumns プロパティには、メンバの取り込み元のデータ ソース ビューの列を指定します。属性の NameColumn プロパティには、別の名前列をメンバに対して指定できます。

Business Intelligence Development Studio を使用してユーザー定義階層内のレベルを定義するには、ディメンション デザイナでディメンション属性、ディメンション テーブルの列、またはキューブのデータ ソース ビューに含まれる関連テーブルの列を選択できます。ユーザー定義階層の作成の詳細については、「ユーザー定義階層の作成」を参照してください。

Analysis Services では通常、メンバの内容が想定されています。リーフ メンバには子孫がなく、元のデータ ソースから派生したデータが含まれています。非リーフ メンバには子孫があり、子メンバで実行した集計から派生したデータが含まれています。集計レベルのメンバは、下位レベルの集計が基になっています。したがって、あるレベルのソース属性の IsAggregatable プロパティを False に設定するときは、集計可能な属性をこれより上位のレベルとして追加しないでください。

属性リレーションシップの定義

属性リレーションシップを作成するときの主な制約は、属性リレーションシップによって参照される属性に、属性リレーションシップが所属する属性のメンバの値が 2 つ以上含まれていないことを確認する必要があることです。たとえば、City 属性と State 属性の間のリレーションシップを定義する場合、それぞれの市区町村は 1 つの都道府県にのみ関連付けることができます。

属性リレーションシップのクエリ

MDX クエリを使用すると、MDX SELECT ステートメントの PROPERTIES キーワードを指定することにより、メンバのプロパティの形式で属性リレーションシップからデータを取得することができます。MDX を使用してメンバのプロパティを取得する方法の詳細については、「メンバ プロパティの使用 (MDX)」を参照してください。