ユーザー階層

ユーザー定義階層は、ディメンションのメンバを階層構造にまとめ、キューブのナビゲーション パスを提供するために MicrosoftSQL ServerAnalysis Services で使用される属性のユーザー定義階層です。たとえば、次のテーブルでは、時間ディメンションにディメンション テーブルを定義します。ディメンション テーブルは、年、四半期、月という 3 つの属性をサポートしています。

四半期

1999

第 1 四半期

1 月

1999

第 1 四半期

2 月

1999

第 1 四半期

3 月

1999

第 2 四半期

4 月

1999

第 2 四半期

5 月

1999

第 2 四半期

6 月

1999

第 3 四半期

7 月

1999

第 3 四半期

8 月

1999

第 3 四半期

9 月

1999

第 4 四半期

10 月

1999

第 4 四半期

11 月

1999

第 4 四半期

12 月

年、四半期、月の各属性は、時間ディメンションに Calendar というユーザー定義階層を作成するために使用されます。次の図は、Calendar ディメンション (標準のディメンション) のレベルとメンバの関係を示しています。

時間ディメンションのレベルとメンバの階層構造

注意注意

2 つのレベルで構成される既定の属性階層以外の階層はすべて、ユーザー定義階層と呼ばれます。属性階層の詳細については、「属性と属性階層」を参照してください。

メンバ構造

親子階層の例外を除いて、階層内のメンバの位置は、階層定義の属性の順序に制御されます。階層定義内の各属性によって階層のレベルが作成されます。レベル内のメンバの位置は、レベルの作成に使用された属性の順序によって決まります。ユーザー定義階層のメンバ構造は、メンバ間の関係によって、4 つの基本形式のいずれかになります。

均衡階層

均衡階層では、階層のすべての分岐は同じレベルに至り、各メンバの論理上の親はそのメンバのすぐ上のレベルです。Adventure Works DW の Analysis Services サンプル データベースが示す Product ディメンションの Product Categories 階層は、均衡階層の好例です。Product Name レベルの各メンバは Subcategory レベルに親メンバがあり、Subcategory レベルは Category レベルに親メンバがあります。また、階層内の各分岐には Product Name レベルのリーフ メンバがあります。

不均衡階層

不均衡階層では、階層の分岐はさまざまなレベルに至ります。親子階層は不均衡階層です。たとえば、Adventure Works DW の Analysis Services サンプル データベースの Organization ディメンションには、各従業員のメンバが含まれています。CEO は階層の最上位メンバで、部長と役員秘書は CEO の直下にあります。部長は従属メンバですが、役員秘書は直属です。

エンド ユーザーは、不均衡階層と不規則階層を区別できません。ただし、管理者は、Analysis Services でさまざまなテクニックとプロパティを使用してこれらの 2 種類の階層をサポートできます。詳細については、「不規則階層の操作」および「親子階層での属性の操作」を参照してください。

不規則階層

不規則階層では、少なくとも 1 つのメンバの論理上の親メンバが、そのメンバのすぐ上のレベルにありません。このため、不規則階層の分岐はさまざまなレベルに至ります。たとえば、Continent、CountryRegion、City の各レベルで順に定義されている地域ディメンションでは、メンバ Europe は階層の最上位レベルに表示され、メンバ France は中間レベル、メンバ Paris は最下位レベルに表示されます。France は Europe より限定的で、Paris は France より限定的です。この標準階層は、次のように変更されます。

  • Vatican City メンバが CountryRegion レベルに追加されます。

  • City レベルにメンバが追加され、CountryRegion レベルの Vatican City メンバに関連付けられます。

  • Province というレベルが CountryRegion レベルと City レベルの間に追加されます。

Province レベルに、CountryRegion レベルの他のメンバに関連付けられているメンバが生成され、City レベルのメンバが Province レベルの対応するメンバに関連付けられます。ただし、CountryRegion レベルの Vatican City メンバは Province レベルのメンバに関連付けられていないため、メンバは City レベルから CountryRegion レベルの Vatican City メンバに直接関連付ける必要があります。この変更により、このディメンションの階層は不規則になります。市 Vatican City の親は国/地域である Vatican City で、これは City レベルの Vatican City メンバの真上にはありません。詳細については、「不規則階層の操作」を参照してください。

親子階層

ディメンションの親子階層は、親子属性という特殊な属性を使用して定義され、これによってメンバ間の相互関係が決まります。親属性は、ディメンション メイン テーブル内の自己参照型リレーションシップまたは自己結合を記述します。親子階層は 1 つの親属性から構築されます。親子階層に存在するレベルは、親属性に関連付けられているメンバ間の親子リレーションシップに基づいているので、1 つの親子階層に割り当てられるレベルは 1 つのみです。親子階層のディメンション スキーマは、ディメンション メイン テーブルに存在する自己参照型リレーションシップに依存します。たとえば、次の図は、AdventureWorksDWAnalysis Services サンプル データベースの DimOrganization ディメンション メイン テーブルを示しています。

DimOrganization テーブルの自己参照による結合

このディメンション テーブルでは、ParentOrganizationKey 列に OrganizationKey 主キー列との外部キー リレーションシップがあります。つまり、このテーブル内の各レコードは、親子リレーションシップによりテーブル内の別のレコードと関連している可能性があります。この種の自己結合は、通常、部署内の従業員の管理構造などの組織エンティティ データを表すために使用します。

親子階層を作成する場合、両方の属性で表す列は同じデータ型でなければなりません。また、どちらの属性も同じテーブルに属する必要があります。既定では、親キーがそのメンバ キーと同じ値、NULL、0 を持つメンバ、またはメンバ キーの列にない値を持つメンバは、(All) を除くトップレベルのメンバと見なされます。

親子階層の深さは、その階層の分岐によって異なります。つまり、親子階層は不均衡階層と見なされます。

エンド ユーザーに表示されるレベル数が階層内のレベル数によって決まるユーザー定義階層とは異なり、親子階層は、単一レベルの属性階層で定義され、この単一レベルの値によりユーザーに表示される複数レベルが生成されます。表示レベルの数は、メンバ キーと親キーが格納されるディメンション テーブルの列の内容によって異なります。レベルの数は、ディメンション テーブルのデータが変わると変化します。詳細については、「親子階層の定義」および「親子階層での属性の操作」を参照してください。