第 3 课介绍了如何根据其名称或键值对属性成员进行排序。 你还了解了如何使用复合成员键影响属性成员和排序顺序。 有关详细信息,请参阅 修改日期维度。 但是,如果属性的名称和键都不提供所需的排序顺序,则可以使用辅助属性来实现所需的排序顺序。 通过定义属性之间的关系,可以使用第二个属性对第一个属性的成员进行排序。
属性关系定义属性之间的关系或依赖关系。 在基于单个关系表的维度中,所有属性通常通过键属性相互关联。 这是因为维度的所有属性都提供信息,说明维度的关键属性如何将成员与每个相关度量值组的事实数据表中的事实相连接。 在基于多个表的维度中,属性通常基于表之间的联接键链接。 如果基础数据支持它,则可以使用相关属性来指定排序顺序。 例如,可以创建一个新属性,该属性提供相关属性的排序逻辑。
使用维度设计器可以定义属性之间的其他关系,或更改默认关系以提高性能。 创建属性关系时的主要约束是确保所引用的属性在属性中与其相关的任何成员的值为不超过一个值。 定义两个属性之间的关系时,可以根据成员之间的关系是否随时间而变化,将关系定义为刚性或灵活关系。 例如,员工可能移动到其他销售区域,但城市不会移动到其他州。 如果关系定义为刚性关系,则每次以增量方式处理维度时,不会重新计算属性聚合。 但是,如果成员之间的关系发生变化,则维度必须重新处理。 有关详细信息,请参阅 属性关系、 定义属性关系、 配置属性关系属性以及 指定 User-Defined 层次结构中属性之间的属性关系。
在本主题中的任务中,将基于基础维度表中的现有列在 Date 维度中定义一个新属性。 你将使用此新属性按时间顺序对日历月成员进行排序,而不是按字母顺序排序。 你还将根据命名计算在 Customer 维度中定义一个新属性,该计算将用于对 通勤距离 属性成员进行排序。 在下一主题的任务中,你将了解如何使用属性关系来提高查询性能。
在日期维度中定义属性关系和排序顺序
打开日期维度的维度设计器,然后在“属性”窗口中查看 Month Name 属性的 OrderBy 属性。
请注意, Month Name 属性成员按键值排序。
切换到“浏览器”选项卡,验证“层次结构”列表中是否选择了“日历日期”,然后展开用户定义的层次结构中的级别以查看日历月份的排序顺序。
请注意,属性层次结构的成员根据成员键的 ASCII 值(即月和年)进行排序。 在这种情况下,按属性名称或键排序不会按时间顺序对日历月进行排序。 若要解决此问题,将基于新属性 MonthNumberOfYear 属性对属性层次结构的成员进行排序。 将基于 日期维度表中 方便存在的列创建此属性。
切换到“日期”维度的“维度结构”选项卡,右键单击“数据源视图”窗格中的 MonthNumberOfYear,然后单击“列中的新建属性”。
在 “属性 ”窗格中,选择“ 年月数”,然后在“属性”窗口中将 AttributeHierarchyEnabled 属性设置为 False ,将 AttributeHierarchyOptimizedState 属性设置为 NotOptimized,并将 AttributeHierarchyOrdered 属性设置为 False。
这些设置将隐藏用户的属性,并改进处理时间。 此属性不用于浏览。 它仅用于对另一个属性的成员进行排序。
注释
按字母顺序对“属性”窗口中的属性进行排序将简化此任务,因为这三个属性将彼此相邻排序。
单击“ 属性关系 ”选项卡。
请注意, Date 维度中的所有属性都与 Date 属性直接相关,这是将维度成员与相关度量值组中的事实相关的成员键。 Month Name 属性和 Month Number Of Year 属性之间没有定义关系。
在关系图中,右键单击 “月份名称 ”属性,然后选择“ 新建属性关系”。
在“ 创建属性关系 ”对话框中, 源属性 为 月份名称。 将 相关属性 设置为 年的月份编号。
在 “关系类型” 列表中,将关系类型设置为 “刚性”。
Month Name 属性和月份年数属性的成员之间的关系不会随时间而改变。 因此,Analysis Services 不会在增量处理期间删除此关系的聚合。 如果发生更改,则会在增量处理期间发生处理错误,并且需要对维度进行完整处理。 现在,你可以为 月份名称的成员设置排序顺序。
单击 “确定” 。
单击“ 维度结构 ”选项卡。
在“属性”窗格中选择“月份名称”,然后将“属性”窗口中 OrderBy 属性的值更改为 AttributeKey,并将 OrderByAttribute 属性的值更改为“月份年份数”。
在“生成”菜单上,单击“部署 Analysis Services 教程”。
部署成功完成后,切换到“日期”维度的 “浏览器 ”选项卡,单击“ 重新连接”,然后浏览 “日历日期 ”和“ 会计日期 ”用户层次结构以按时间顺序验证月份现在是否按时间顺序排序。
请注意,月份现在按时间顺序排序,如下图所示。
在客户维度中定义属性关系和排序顺序
切换到“维度设计器”中的“浏览器”选项卡,以浏览“客户”维度的“通勤距离”属性层次结构的成员。
请注意,此属性层次结构的成员根据成员键的 ASCII 值进行排序。 在这种情况下,按属性名称或键进行排序不会将通勤距离从短到长排序。 在此任务中,您需要根据名为 CommuteDistanceSort 的计算对属性层次结构的成员进行排序,该计算为列中的每个唯一值分配适当的排序编号。 为了节省时间,此命名计算已添加到 Adventure Works DW 数据源视图中的 Customer 表。 可以切换到此数据源视图,以查看此命名计算中使用的 SQL 脚本。 有关详细信息,请参阅数据源视图中的“定义命名计算”(Analysis Services)。
下图显示了 通勤距离 属性层次结构的成员,按成员键的 ASCII 值排序。
在维度设计器中切换到维度结构选项卡,在数据源视图窗格中右键单击客户表中的通勤距离排序,然后单击从列新建属性。
在 “属性 ”窗格中,选择 “通勤距离排序”,然后将此属性的 AttributeHierarchyEnabled 属性设置为 False ,将 AttributeHierarchyOptimizedState 属性设置为 NotOptimized,并将 AttributeHierarchyOrdered 属性设置为 False。
这些设置将隐藏用户的属性,并改进处理时间。 此属性不用于浏览。 它仅用于对另一个属性的成员进行排序。
选择 Geography,然后在“属性”窗口中将其 AttributeHierarchyVisible 属性设置为 False ,将其 AttributeHierarchyOptimizedState 属性设置为 NotOptimized,并将其 AttributeHierarchyOrdered 属性设置为 False。
这些设置将隐藏用户的属性,并改进处理时间。 此属性不用于浏览。 它仅用于对另一个属性的成员进行排序。 由于 Geography 具有成员属性,因此其 AttributeHierarchyEnabled 属性必须设置为 True。 因此,若要隐藏属性,请将 AttributeHierarchyVisible 属性设置为 False。
单击“ 属性关系 ”选项卡。
在属性列表中,右键单击 “通勤距离 ”属性,然后选择“ 新建属性关系”。
在“ 创建属性关系 ”对话框中, 源属性 为 通勤距离。 将 相关属性 设置为 通勤距离排序。
在 “关系类型” 列表中,将关系类型设置为 “刚性”。
通勤距离属性的成员与通勤距离排序属性之间的关系不会随时间而改变。
单击 “确定” 。
现在可以设置 通勤距离 属性的排序顺序。
单击“ 维度结构 ”选项卡。
在 “属性 ”窗格中,选择 “通勤距离”,然后将“属性”窗口中 OrderBy 属性的值更改为 AttributeKey,并将 OrderByAttribute 属性的值更改为 “通勤距离排序”。
在“生成”菜单上,单击“部署 Analysis Services 教程”。
部署成功完成后,切换到“客户”维度的 “浏览器 ”选项卡,单击“ 重新连接”,然后浏览 “通勤距离 ”属性层次结构。
请注意,属性层次结构成员现在根据增加距离按逻辑顺序排序,如下图所示。