不规则层次结构

不规则层次结构是用户定义的层次结构,其级别数量不均衡。 常见示例包括一个组织结构图,其中高级管理者既有部门经理,也有非经理作为直接下属,或者由国家、地区和城市组成的地理层次结构,其中某些城市缺乏母州或省,例如华盛顿特区、梵蒂冈城或新德里。

对于维度中的大多数层次结构,每个级别在其上方具有与同一层级中的任何其他成员相同数量的成员。 不规则层次结构有所不同,因为至少一个成员的逻辑父级不位于紧邻该成员的上一级。 发生这种情况时,层次结构会根据不同的向下钻取路径降至不同的级别。 在客户端应用程序中,这会使向下钻取路径变得不必要的复杂。

客户端应用程序处理不规则层次结构的方式有所不同。 如果模型中存在不规则层次结构,请准备好执行一些额外的工作来获取预期的呈现行为。

第一步是检查客户端应用程序,了解它如何处理向下钻取路径。 例如,Excel 将父名称作为缺失值的占位符重复。 若要查看此行为,请使用 Adventure Works 多维模型中的 Sales Territory 维度生成数据透视表。 在具有“销售区域”属性组、国家/地区和区域的数据透视表中,你将看到缺少区域值的国家/地区将获得占位符,在本例中,重复其上方的父级(国家/地区名称)。 此行为派生自 Excel 中固定的 MDX Compatibility=1 连接字符串属性。 如果客户端不会自然地提供要查找的向下钻取行为,则可以在模型中设置属性以至少更改其中一些行为。

本主题包含以下部分:

修改不规则层级结构中的下钻导航的方法

当向下钻取导航不返回预期值或被视为使用起来很别扭时,存在不规则层次结构就成了问题。 若要解决由不规则层次结构导致的导航问题,请考虑以下选项:

  • 使用常规层次结构,但在每个级别设置 HideMemberIf 属性,以指定是否向用户可视化缺失级别。 设置 HideMemberIf时,还应在连接字符串上设置 MDXCompatibility 以替代默认导航行为。 本主题介绍了如何设置这些属性。

  • 创建显式管理级别成员的父子层次结构。 请参见 SSAS 中的 Ragged 层次结构(博客文章) 以了解技术示例。 在线书籍的更多信息,请参阅 Parent-Child 层次结构。 创建父子层次结构的缺点是,每个维度只能有一个维度,在计算中间成员的聚合时通常会产生性能损失。

如果维度包含多个不规则层次结构,则应使用第一种方法(设置 HideMemberIf)。 具有处理参差层次结构的实际经验的 BI 开发人员进一步倡导对物理数据表进行更改,为每个层级创建独立的表。 有关这项技术的详细信息,请参阅马丁·梅森的 SSAS 金融 Cube-Part 1a-Ragged 层次结构(博客)。

将 HideMemberIf 设置为隐藏常规层次结构中的成员

在不规则维度的表中,逻辑上缺失的成员可以通过不同的方式来表示。 表格单元格可以包含空值或空字符串,也可以包含与其父相同的值作为占位符。 占位符的表示形式由子成员的占位符状态(由 HideMemberIf 属性确定)和 MDX Compatibility 客户端应用程序的连接字符串属性确定。

对于支持显示不规则层次结构的客户端应用程序,可以使用这些属性隐藏逻辑缺失的成员。

  1. 在 SSDT 中,双击维度以在维度设计器中打开它。 第一个选项卡“维度结构”在“层次结构”窗格中显示属性层次结构。

  2. 右键单击层次结构中的成员,然后选择“ 属性”。 将 HideMemberIf 设置为下文所述的值之一。

    HideMemberIf 设置 DESCRIPTION
    Never 级别成员从不隐藏。 这是默认值。
    唯一无名的孩子 当级别成员是其父级的唯一子级且其名称为 null 或空字符串时,将隐藏该成员。
    OnlyChildWithParentName 当一个层级成员是其父层级的唯一子级且其名称与父层级的名称相同时,该成员将被隐藏。
    NoName 成员级别的名称为空时会被隐藏。
    ParentName 当成员的名称与其父级相同时,该级别成员会被隐藏。

设置 MDX 兼容性以确定占位符在客户端应用程序中的表示方式

在层次结构级别上设置 HideMemberIf 后,还应在从客户端应用程序发送的连接字符串中设置 MDX Compatibility 属性。 是否使用 HideMemberIfMDX Compatibility 设置决定。

MDX 兼容性设置 DESCRIPTION 用法
1 显示占位符值。 这是 Excel、SSDT 和 SSMS 使用的默认值。 它指示服务器在向下钻取不规则层次结构中的空级别时返回占位符值。 如果单击占位符值,可以继续向下进入子节点或叶节点。

Excel 拥有用于连接到 Analysis Services 的连接字符串,并且每个新连接始终将 MDX Compatibility 设置为 1。 此行为保留向后兼容性。
2 隐藏占位符值(null 值或父级的副本),但显示具有相关值的其他级别和节点。 MDX Compatibility=2 通常被视为不规则层次结构的首选设置。 Reporting Services 报表和一些第三方客户端应用程序可以保留此设置。

另请参阅

创建 User-Defined 层次结构
用户层次结构
Parent-Child 层次结构
连接字符串属性 (Analysis Services)