属性リレーションシップ
Microsoft SQL Server Analysis 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 プロパティには、別の名前列をメンバーに対して指定できます。
SQL Server データ ツール (SSDT) を使用してユーザー定義階層内のレベルを定義するには、ディメンション デザイナーでディメンション属性、ディメンション テーブルの列、またはキューブのデータ ソース ビューに含まれる関連テーブルの列を選択できます。 ユーザー定義階層の作成の詳細については、「ユーザー定義階層の作成」を参照してください。
Analysis Services では通常、メンバーの内容が想定されています。 リーフ メンバーには子孫がなく、元のデータ ソースから派生したデータが含まれています。 非リーフ メンバーには子孫があり、子メンバーで実行した集計から派生したデータが含まれています。 集計レベルのメンバーは、下位レベルの集計が基になっています。 したがって、あるレベルのソース属性の IsAggregatable プロパティを False に設定するときは、集計可能な属性をこれより上位のレベルとして追加しないでください。
属性リレーションシップの定義
属性リレーションシップを作成するときの主な制約は、属性リレーションシップによって参照される属性に、属性リレーションシップが所属する属性のメンバーの値が 2 つ以上含まれていないことを確認する必要があることです。 たとえば、City 属性と State 属性の間のリレーションシップを定義する場合、それぞれの市区町村は 1 つの都道府県にのみ関連付けることができます。
属性リレーションシップのクエリ
MDX クエリを使用すると、MDX SELECT ステートメントの PROPERTIES キーワードを指定することにより、メンバーのプロパティの形式で属性リレーションシップからデータを取得することができます。 MDX を使用してメンバーのプロパティを取得する方法の詳細については、「メンバー プロパティの使用 (MDX)」を参照してください。