不规则层次结构
不规则层次结构是一个有奇数个级别的用户定义的层次结构。 常见示例包含组织结构图(其中,高级经理的下属有部门经理和工作人员)或由国家-地区-城市组成的地理层次结构(其中,一些城市缺少父级省或州,如华盛顿特区、梵蒂冈城或新德里)。
对于维度中的大多数层次结构,每个级别上面的成员数与同一级别中任何其他成员上面的成员数相同。 不规则层次结构的区别是,至少一个成员的逻辑父成员不在该成员的直接上一级中。 如果出现这种情况,则层次结构会降至其他级别以寻找其他深化路径。 在客户端应用程序中,这会不必要地使深化路径变得复杂。
客户端应用程序对不规则层次结构的处理程度是不同的。 如果不规则层次结构存在于您的模型中,则请准备好做一些额外的工作来获取所需的呈现行为。
第一步,检查客户端应用程序以了解它如何处理深化路径。 例如,Excel 重复父名称作为缺失值的占位符。 若要自行查看此行为,请使用 Adventure Works 多维模型中的“销售区域”维度生成一个数据透视表。 在具有销售区域属性“组”、“国家”和“地区”的数据透视表中,您将看到缺少地区值的国家/地区将获得一个占位符,在这种情况下,其上面会重复父级(国家/地区名称)。 此行为派生自 Excel 中固定的 MDX Compatibility=1 连接字符串属性。 如果客户端本身未提供您所查找的深化行为,则可设置模型中的属性以至少更改一部分行为。
本主题包含以下各节:
修改不规则层次结构中的深化导航的方法
设置 HideMemberIf 以在不规则层次结构中隐藏成员
设置 MDX Compatibility 以确定占位符在客户端应用程序中的呈现方式
修改不规则层次结构中的深化导航的方法
如果深化导航未返回预期值或被认为不易使用,则不规则层次结构的存在将成为一个问题。 若要解决不规则层次结构产生的导航问题,请考虑下列选项:
使用不规则层次结构,但在每个级别上设置 HideMemberIf 属性以指定是否对用户可视化缺失级别。 在设置 HideMemberIf 时,您还应在连接字符串上设置 MDXCompatibility 以重写默认导航行为。 本主题包含这些属性的设置说明。
创建显式管理级别成员的父子层次结构。 有关此方法的说明,请参阅 SSAS 中的不规则层次结构(博客文章)。 有关联机丛书中的详细信息,请参阅父子维度。 创建父子层次结构的缺点是,每个维度只能有一个层次结构,并且在计算中间成员的聚合时通常会出现性能损失。
如果您的维度包含多个不规则层次结构,则应使用第一种方法,即设置 HideMemberIf。 在不规则层次结构的使用方面有实践经验的 BI 开发人员进一步主张在物理数据表中进行其他更改,并为每个级别创建单独的表。 有关此方法的详细信息,请参阅 Martin Mason 的 SSAS 财务多维数据集 – 1a 部分 – 不规则层次结构(博客)。
设置 HideMemberIf 以在不规则层次结构中隐藏成员
在不规则维度的表中,逻辑上缺少的成员可以用其他方式表示。 表单元可以为空或包含空字符串,也可以包含与它们父级相同的值作为占位符。 占位符的表示形式由子成员的占位符状态(由 HideMemberIf 属性确定)和客户端应用程序的 MDX Compatibility 连接字符串属性确定。
对于支持显示不规则层次结构的客户端应用程序,可以使用这些属性隐藏逻辑上缺少的成员。
在 SSDT 中,双击一个维度可在维度设计器中将其打开。 第一个选项卡“维度结构”在“层次结构”窗格中显示属性层次结构。
右键单击层次结构中的成员并选择**“属性”**。 将 HideMemberIf 设置为下面描述的值之一。
HideMemberIf 设置
说明
Never
级别成员从不隐藏。 这是默认值。
OnlyChildWithNoName
如果级别成员是其父级的唯一子级,并且名称为空或空字符串,则隐藏该级别成员。
OnlyChildWithParentName
如果级别成员是其父级的唯一子级,并且名称与其父级名称相同,则隐藏该级别成员。
NoName
如果级别成员的名称为空,则隐藏该级别成员。
ParentName
如果级别成员的名称与其父级的名称相同,则隐藏该级别成员。
设置 MDX Compatibility 以确定占位符在客户端应用程序中的呈现方式
在层次结构级别上设置 HideMemberIf 后,您还应在发送自客户端应用程序的连接字符串中设置 MDX Compatibility 属性。 MDX Compatibility 设置确定是否使用 HideMemberIf。
MDX Compatibility 设置 |
说明 |
用法 |
---|---|---|
1 |
显示占位符值。 |
这是 Excel、SSDT 和 SSMS 使用的默认值。 它指示服务器在深化不规则层次结构中的空级别时返回占位符值。 如果单击占位符值,则可继续深化直到到达子(叶)节点。 Excel 拥有用于连接到 Analysis Services 的连接字符串,并且它始终在每个新连接上将 MDX Compatibility 设置为 1。 此行为将保留向后兼容性。 |
2 |
隐藏占位符值(null 值或父级别的重复项),但显示具有相关值的其他级别和节点。 |
MDX Compatibility=2 通常被视为与不规则层次结构相关的首选设置。 Reporting Services 报表和一些第三方客户端应用程序可保留此设置。 |