在Microsoft SQL Server Analysis Services 中,通常对维度中成员的内容做出一般假设。 叶成员包含直接从基础数据源派生的数据;非叶成员包含从对子成员执行的聚合计算中派生的数据。
但是,在父子层次结构中,除了从子成员聚合的数据外,某些非叶成员也可能具有从基础数据源派生的数据。 对于父子层次结构中的这些非叶成员,将创建包含基础事实数据表数据的特殊系统生成的子成员。 称为 数据成员,它们包含与非叶成员直接关联的值,该值独立于从非叶成员的后代计算的摘要值。
数据成员仅适用于具有父子层次结构的维度,并且仅当父属性允许时才可见。 可以使用维度设计器来控制数据成员的可见性。 若要公开数据成员,请将 MembersWithData 父属性的属性设置为 NonLeafDataVisible. 隐藏父属性中包含的数据成员,请将 MembersWithData 父属性的属性设置为 NonLeafDataHidden。
此设置不会覆盖非叶成员的正常聚合行为;数据成员始终作为子成员包含在聚合内。 但是,自定义汇总公式可用于替代普通聚合行为。 多维表达式(MDX)DataMember 函数使您能够访问关联数据成员的值,而无需考虑 MembersWithData 属性的当前值。
父 MembersWithDataCaption 属性的属性为 Analysis Services 提供了用于为数据成员生成成员名称的命名模板。
使用数据成员
在聚合具有父子层次结构的组织维度上的度量值时,数据成员非常有用。 例如,下图显示了一个维度,该维度具有三个级别,表示产品的总销售额。 第一个级别显示所有销售人员的总销售额。 第二个级别包含销售经理分组的所有销售人员的总销售额,第三个级别包含销售人员分组的所有销售人员的总销售额。
通常,Sales Manager 1 成员的值是通过汇总 Salesperson 1 和 Salesperson 2 成员的值来派生的。 但是,由于 Sales Manager 1 还可以销售产品,因此该成员还可能包含派生自事实数据表的数据,因为可能存在与 Sales Manager 1 关联的销售总额。
此外,每个销售人员的个人佣金可能会有所不同。 在这种情况下,两个不同的规模用于计算销售经理个人总销售额的佣金,而不是销售人员产生的总销售额总额。 因此,能够访问非叶成员的基础事实表的数据非常重要。 MDX DataMember 函数可用于检索 Sales Manager 1 成员的单个总销售额,自定义汇总表达式可用于从 Sales Manager 1 成员的聚合值中排除数据成员,从而提供与该成员关联的销售人员的总销售额。