2 次属性に基づく属性メンバの並べ替え
レッスン 3 では、名前とキー値に基づいて属性メンバを並べ替える方法を学習しました。また、属性メンバと並べ替え順序に影響する複合メンバ キーの使用方法も学習しました。詳細については、「Date ディメンションの変更」を参照してください。場合によって、2 次属性に基づく属性メンバの並べ替えが必要になることがあります。たとえば、1 次属性の名前とキーのどちらを使用しても目的の順序で並べ替えられない場合は、2 次属性を使用して目的の順序で並べ替えるようにすることもできます。ただし、2 次属性の名前またはキーで属性を並べ替えるには、目的の 1 次属性に関連付けられている 2 次属性を使用する必要があります。
属性リレーションシップは、属性間のリレーションシップまたは依存関係を定義します。1 つのリレーショナル テーブルから派生しているディメンションでは、通常、キー属性を介してすべての属性が互いに関連付けられています。これは、ディメンションのすべての属性によって、関連する各メジャー グループのファクト テーブル内のファクトにディメンションのキー属性によってリンクされているメンバの情報が提供されるためです。複数のテーブルから派生しているディメンションでは、通常、テーブル間の属性が結合キーに基づいて関連付けられています。
ところが、属性の特定のレベルのメンバについて、詳細な情報を知りたい場合もあります。ディメンション デザイナでは、属性間に新しいリレーションシップを定義できるほか、既定のリレーションシップを変更してパフォーマンスを向上させることができます。属性リレーションシップを作成するときの主な制限は、参照元の属性のメンバに対応する値が参照先の属性に複数あってはならない点です。2 つの属性の間にリレーションシップを定義する際には、リレーションシップを変更できるようにするのか、または固定するのかを定義できます。どちらに指定するかは、メンバ間のリレーションシップが時間と共に変化するかどうかによります。たとえば、従業員が別の販売地域に移動することはありますが、都市が別の州に移動することはありません。リレーションシップを固定すると、ディメンションの処理が進むたびに属性の集計が再計算されるようなことはありません。しかし、メンバ間のリレーションシップが変わる場合は、常にディメンションを処理する必要があります。詳細については、「属性リレーションシップ」、「属性リレーションシップの定義」、「属性リレーションシップのプロパティの構成」、および「ユーザー定義階層の属性間での属性リレーションシップの指定」を参照してください。
このトピックの実習では、基になるディメンション テーブルの既存の列に基づき、Date ディメンションに新しい属性を定義します。この新しい属性を使用して、アルファベット順に並んでいるカレンダーの月メンバを日付順に並べ替えます。また、Commute Distance 属性メンバを並べ替える名前付き計算に基づいて、Customer ディメンションに新しい属性を定義します。次のトピックでは、属性リレーションシップを使用してクエリのパフォーマンスを向上させる方法について学習します。
Date ディメンションの属性リレーションシップおよび並べ替え順序の定義
Date ディメンションに属性リレーションシップと並べ替え順序を定義するには
Date ディメンションのディメンション デザイナを開きます。次に、[プロパティ] ウィンドウで、OrderBy プロパティの Month Name 属性を確認します。
Month Name 属性のメンバは、各メンバのキー値の順に並んでいます。
[ブラウザ] タブに切り替え、[階層] ボックスの一覧で [Calendar Date] が選択されていることを確認します。次に、ユーザー定義階層の各レベルを展開し、カレンダー月の並べ替え順序を確認します。
属性階層のメンバは、ASCII 値である各メンバ キー (月と年) を基準にして並べ替えられています。この場合、属性名やキーで並べ替えても、カレンダー月は日付順に並びません。これを解決するには、新しい属性である MonthNumberOfYear 属性に基づいて属性階層のメンバを並べ替えます。この属性の基になる列がちょうど Date ディメンション テーブルにあるので、この列を使用して MonthNumberOfYear 属性を作成します。
Date ディメンションの [ディメンションの構造] タブに切り替え、[データ ソース ビュー] ペインで [MonthNumberOfYear] を右クリックします。次に、[列から新しい属性を作成] をクリックします。
[属性] ペインで、[Month Number Of Year] をクリックします。次に、[プロパティ] ウィンドウで、AttributeHierarchyEnabled プロパティを False に設定します。さらに、AttributeHierarchyOptimizedState を NotOptimized に設定し、AttributeHierarchyOrdered プロパティを False に設定します。
これらの設定により、ユーザーからはこの属性が見えなくなり、処理時間が短縮されます。この属性は参照用には使用されません。別の属性のメンバを並べ替えるためにのみ使用されます。
注意 プロパティを [プロパティ] ウィンドウ内でアルファベット順に並べると、この 3 つのプロパティどうしが隣に並ぶので、このタスクが単純化されます。
[属性リレーションシップ] タブをクリックします。
Date ディメンションのすべての属性が Date 属性に直接関連付けられています。この Date 属性は、ディメンションのメンバを関連するメジャー グループのファクトに関連付けているメンバ キーです。Month Name 属性と Month Number Of Year 属性の間には、リレーションシップが何も定義されていません。
ダイアグラムで、[Month Name] 属性を右クリックし、[新しい属性リレーションシップ] をクリックします。
[属性リレーションシップの作成] ダイアログ ボックスで、[基になる属性] に [Month Name] を指定します。[関連属性] を [Month Number Of Year] に設定します。
[リレーションシップの種類] ボックスの一覧で、リレーションシップの種類を [固定] に設定します。
Month Name 属性のメンバおよび Month Number Of Year 属性のメンバ間のリレーションシップは、時間が経過しても変わりません。その結果、増分処理中に、このリレーションシップの集計が削除されません。このリレーションシップが変化すると、増分処理時に処理エラーが発生し、ディメンションの完全な処理を実行する必要が生じます。以上の操作で、Month Name のメンバの並べ替え順序を設定する準備が整いました。
[OK] をクリックします。
[ディメンション構造] タブをクリックします。
[属性] ペインで、[Month Name] をクリックします。次に、[プロパティ] ウィンドウの OrderBy プロパティの値を AttributeKey に変更し、[OrderByAttribute] プロパティの値を [Month Number Of Year] に変更します。
[ビルド] メニューの [Analysis Services Tutorial の配置] をクリックします。
配置が正常に完了したら、Date ディメンションの [ブラウザ] タブに切り替え、[再接続] をクリックします。次に、Calendar Date および Fiscal Date ユーザー階層を表示し、月が日付順に並んでいることを確認します。
次の図のように、月が日付順に並べ替えられました。
Customer ディメンションの属性リレーションシップおよび並べ替え順序の定義
Customer ディメンションに属性リレーションシップと並べ替え順序を定義するには
Customer ディメンションのディメンション デザイナで [ブラウザ] タブに切り替え、Commute Distance 属性階層のメンバを表示します。
この属性階層のメンバは、ASCII 値であるメンバ キーを基準に並べ替えられています。この場合、属性名やキーで並べ替えても、通勤距離が短い順には並びません。この実習では、列内の個々の値に対して数値を適切に並べ替える CommuteDistanceSort 名前付き計算に基づいて、メンバを並べ替えます。時間を節約するため、Adventure Works DW データ ソース ビューの Customer テーブルに、この名前付き計算が既に用意されています。このデータ ソース ビューに切り替えれば、CommuteDistanceSort 名前付き計算で使用する SQL スクリプトを表示できます。詳細については、「データ ソース ビューでの名前付き計算の定義 (Analysis Services)」を参照してください。
次の図は、Commute Distance 属性階層のメンバを、ASCII 値のメンバ キーの順で表示しているようすを示します。
Customer ディメンションのディメンション デザイナで [ディメンションの構造] タブに切り替えます。次に、[データ ソース ビュー] ペインで、[Customer] テーブルの [CommuteDistanceSort] を右クリックして、[列から新しい属性を作成] をクリックします。
[属性] ペインで、[Commute Distance Sort] をクリックします。次に、[プロパティ] ウィンドウで、AttributeHierarchyEnabled プロパティを False に設定します。さらに、AttributeHierarchyOptimizedState を NotOptimized に設定し、AttributeHierarchyOrdered プロパティを False に設定します。
これらの設定により、ユーザーからはこの属性が見えなくなり、処理時間が短縮されます。この属性は参照用には使用されません。別の属性のメンバを並べ替えるためにのみ使用されます。
[Geography] をクリックします。次に、[プロパティ] ウィンドウで、AttributeHierarchyVisible プロパティを False に設定します。さらに、AttributeHierarchyOptimizedState プロパティを NotOptimized に設定し、AttributeHierarchyOrdered プロパティを False に設定します。
これらの設定により、ユーザーからはこの属性が見えなくなり、処理時間が短縮されます。この属性は参照用には使用されません。別の属性のメンバを並べ替えるためにのみ使用されます。Geography にはメンバ プロパティが存在するので、その AttributeHierarchyEnabled プロパティを True に設定する必要があります。したがって、この属性を非表示にするには、AttributeHierarchyVisible プロパティを False に設定します。
[属性リレーションシップ] タブをクリックします。
属性の一覧で [Commute Distance] 属性を右クリックし、[新しい属性リレーションシップ] をクリックします。
[属性リレーションシップの作成] ダイアログ ボックスで、[基になる属性] に [Commute Distance] を指定します。[関連属性] を [Commute Distance Sort] に設定します。
[リレーションシップの種類] ボックスの一覧で、リレーションシップの種類を [固定] に設定します。
Commute Distance 属性のメンバおよび Commute Distance Sort 属性のメンバ間のリレーションシップは、時間が経過しても変わりません。
[OK] をクリックします。
以上の操作で、Commute Distance のメンバの並べ替え順序を設定する準備が整いました。
[ディメンション構造] タブをクリックします。
[属性] ペインで、[Commute Distance] をクリックします。次に、[プロパティ] ウィンドウの [OrderBy] プロパティの値を AttributeKey に変更し、OrderByAttribute プロパティの値を Commute Distance Sort に変更します。
[ビルド] メニューの [Analysis Services Tutorial の配置] をクリックします。
配置が正常に完了したら、Customer ディメンションのディメンション デザイナで [ブラウザ] タブをクリックし、[再接続] をクリックします。次に、Commute Distance 属性階層を表示します。
次の図のように、属性階層のメンバは、通勤距離の長い順に論理的な順序で並べ替えられました。