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