用户定义的层次结构是Microsoft SQL Server Analysis Services 中使用的属性的用户定义的层次结构,用于将维度的成员组织到分层结构中,并在多维数据集中提供导航路径。 例如,下表定义时间维度的维度表。 维度表支持三个属性,名为 Year、Quarter 和 Month。
年份 | 季度 | 月份 |
---|---|---|
1999 | 第 1 季度 | 1 月 |
1999 | 第 1 季度 | 2 月 |
1999 | 第 1 季度 | 三月 |
1999 | 第 2 季度 | 四月 |
1999 | 第 2 季度 | 5 月 |
1999 | 第 2 季度 | 六月 |
1999 | 第 3 季度 | 七月 |
1999 | 第 3 季度 | 八月 |
1999 | 第 3 季度 | 九月 |
1999 | 第 4 季度 | 10月 |
1999 | 第 4 季度 | 11 月 |
1999 | 第 4 季度 | 12 月 |
Year、Quarter 和 Month 属性用于在时间维度中构造用户定义的层次结构(名为 Calendar)。 下图显示了日历维度(常规维度)的级别和成员之间的关系。
注释
默认的两级属性层次结构以外的任何层次结构称为用户定义的层次结构。 有关属性层次结构的详细信息,请参阅 属性和属性层次结构。
成员结构
除了父子层次结构之外,层次结构中成员的位置由层次结构中属性的顺序控制。 层次结构定义中的每个属性都构成层次结构中的一个级别。 成员在级别中的位置取决于用于创建级别的属性的顺序。 用户定义的层次结构的成员结构可以采用四种基本形式之一,具体取决于成员彼此的关联方式。
平衡层次结构
在均衡的层次结构中,层次结构的所有分支都降到同一级别,并且每个成员的逻辑父级都紧邻成员的级别。 Adventure Works DW 多维 2012 示例 Analysis Services 数据库中“产品”维度的产品类别层次结构是平衡层次结构的一个很好的示例。 产品名称级别中的每个成员在子类别级别都有一个父成员,而子类别级别又具有类别级别的父成员。 此外,层次结构中的每个分支在产品名称级别都有一个叶成员。
不平衡层次结构
在不平衡的层次结构中,层次结构的分支降到不同的级别。 父子层次结构是不平衡层次结构。 例如,Adventure Works DW 多维 2012 示例 Analysis Services 数据库中的组织维度包含每个员工的成员。 首席执行官是层次结构中的最高成员,部门经理和执行董事紧邻首席执行官。 部门经理有下属成员,但执行秘书没有。
最终用户可能无法区分不平衡层次结构和不均衡层次结构。 但是,在 Analysis Services 中使用不同的技术和属性来支持这两种类型的层次结构。 有关详细信息,请参阅 Parent-Child 层次结构中的Ragged 层次结构和属性。
不规则层次结构
在不规则的层次结构中,至少一个成员的逻辑父成员不在成员上方的级别中。 这可能会导致层次结构的分支降到不同的级别。 例如,在用“欧洲大陆”、“CountryRegion”和“城市”级别定义的地理维度中,成员欧洲将出现在层次结构的顶层,成员法国显示在中间级别,而巴黎成员则出现在底部级别。 法国比欧洲更具体,巴黎比法国更具体。 对于此常规层次结构,将进行以下更改:
梵蒂冈市成员被添加到国家区域级别。
成员将添加到城市级别,并与“国家区域”级别的梵蒂冈市成员相关联。
在 CountryRegion 和 City 级别之间添加一个级别(名为省)。
省级填充了与 CountryRegion 级别其他成员关联的成员,城市级别的成员与省级中的相应成员相关联。 但是,由于梵蒂冈市成员在省一级没有关联的成员,因此成员必须从市级直接关联到国家区域级别的梵蒂冈市成员。 由于更改,维度的层次结构现在不规则。 梵蒂冈城的父级是梵蒂冈城的国家/地区,它不在梵蒂冈城成员的级别上。 有关详细信息,请参阅 不规则层次结构。
Parent-Child 层次结构
维度的父子层次结构通过使用称为父属性的特殊属性来定义,以确定成员如何相互关联。 在维度主表中,父属性描述自引用关系或自联接关系。 父子关系层次结构是从单个父属性构造的。 只有一个级别分配给父子层次结构,因为层次结构中存在的级别是从与父属性关联的成员之间的父子关系中绘制的。 父子层次结构的维度架构取决于维度主表上存在的自引用关系。 例如,下图演示 Adventure Works DW 多维 2012Analysis Services 示例数据库中的 DimOrganization 维度主表。
在此维度表中, ParentOrganizationKey 列与 OrganizationKey 主键列具有外键关系。 换句话说,此表中的每条记录都可以通过父子关系与表中另一条记录相关。 这种自联接通常用于表示组织实体数据,例如部门员工的管理结构。
创建父子层次结构时,由两个属性表示的列必须具有相同的数据类型。 这两个属性也必须位于同一个表中。 默认情况下,其父键等于其自己的成员键、null、0(零)或成员键列中不存在的值假定为顶级成员(不包括(全部)级别的成员)。
父子层次结构的深度在其分层分支之间可能有所不同。 换句话说,父子层次结构被视为不平衡的层次结构。
与用户定义的层次结构不同,层次结构中的级别数决定了最终用户可以看到的级别数,父子层次结构使用属性层次结构的单个级别定义,而此单一级别中的值将生成用户看到的多个级别。 显示的级别数取决于存储成员键和父键的维度表列的内容。 维度表中的数据发生更改时,级别数可能会更改。 有关详细信息,请参阅 Parent-Child 层次结构中的Parent-Child 层次结构和属性。