親子階層での属性の操作
Microsoft SQL Server Analysis Services では通常、ディメンションのメンバのコンテンツに関して一般的な前提条件が適用されます。リーフ メンバには、基になるデータ ソースから直接派生したデータが含まれ、非リーフ メンバには、子メンバで実行した集計から算出したデータが含まれています。
ただし、親子階層では、一部の非リーフ メンバに、子メンバから取得したデータだけでなく、基になるデータ ソースから取得したデータも含まれている場合があります。親子階層の非リーフ メンバの場合、基になるファクト テーブル データを含む特殊なシステム生成の子メンバが作成されます。これらの子メンバはデータ メンバと呼ばれ、非リーフ メンバの子孫から計算される集計値に依存しない、非リーフ メンバに直接関係付けられた値が含まれます。
データ メンバは、親子階層を持つディメンションでのみ使用でき、親属性によって許可される場合にのみ表示されます。ディメンション デザイナを使用すると、データ メンバの表示を制御できます。データ メンバを公開するには、親属性の MembersWithData プロパティを NonLeafDataVisible に設定します。親属性に含まれているデータ メンバを非表示にするには、親属性の MembersWithData プロパティを NonLeafDataHidden に設定します。
この設定により、非リーフ メンバの通常の集計動作が上書きされることはありません。データ メンバは、常に集計の目的で子メンバとして含まれています。ただし、カスタム ロールアップ式を使用して通常の集計動作を上書きすることはできます。多次元式 (MDX) の DataMember 関数を使用すると、MembersWithData プロパティの値に関係なく、関連付けられているデータ メンバの値にアクセスできます。
親属性の MembersWithDataCaption プロパティを使用すると、Analysis Services で名前付けテンプレートを使用してデータ メンバのメンバ名を生成できます。
データ メンバの使用
データ メンバは、親子階層を持つ組織ディメンションに従ってメジャーを集計する際に便利です。たとえば、次の図は、製品の総売上高を表す 3 つのレベルを持つディメンションを示しています。最初のレベルは、全販売員の総売上高を示します。第 2 のレベルには営業責任者別にグループ化された全販売担当者の総売上高が含まれ、第 3 のレベルには販売員別にグループ化された全販売担当者の総売上高が含まれています。
通常、Sales Manager 1 メンバの値は、Salesperson 1 メンバと Salesperson 2 メンバの値を集計することによって取得されます。ただし、Sales Manager 1 も製品を販売でき、Sales Manager 1 に関連した総売上が存在する場合もあるため、このメンバにはファクト テーブルから取得したデータも格納されていることがあります。
さらに、各販売担当者メンバの個々の歩合は異なることがあります。この場合、販売員による総売上の合計ではなく、2 つの異なる尺度を使用して営業責任者の個々の総売上に対する歩合が計算されます。そのため、非リーフ メンバの基になるファクト テーブル データにアクセスできることが重要になります。MDX の DataMember 関数を使用すると、Sales Manager 1 メンバの個々の総売上高を取得することができ、カスタム ロールアップ式を使用すると、Sales Manager 1 メンバの集計値からデータ メンバを除外できます。これにより、そのメンバに関連付けられた販売員の総売上高が得られます。