根据辅助属性对属性成员进行排序
在第 3 课中,您已了解如何根据属性成员的名称或键值对属性成员进行排序。您还了解了如何使用组合成员键影响属性成员和排序顺序。有关详细信息,请参阅修改“时间”维度。但有时您可能必须根据辅助属性对属性成员进行排序,才能获得所需的排序顺序,例如,当属性名称或属性键都无法提供所需的排序顺序时。要按辅助属性名称或键对属性进行排序,必须使用与该属性相关的辅助属性。
属性关系定义属性之间的关系或依赖关系。在基于单个关系表的维度中,通常所有属性都通过键属性彼此相关。这是因为维度的所有属性均提供有关成员的信息,这些成员通过键属性链接到每个相关度量值组的事实数据表中的事实数据。在基于多个表的维度中,属性通常根据表之间的联接键进行链接。
但用户可能还想了解有关层次结构中特殊级别成员的其他信息。通过维度设计器,您可以定义属性之间的其他关系,也可以更改默认关系以提高性能。创建属性关系时的主要约束是,确保引用的属性对于与其相关的属性中的任何成员均只包含一个值。定义两个属性之间的关系时,可以根据成员之间的关系是否会随时间更改而将关系定义为刚性关系或灵活关系。例如,雇员可能移动到不同的销售区域,而市县不会移动到不同的州/省/自治区。如果将关系定义为刚性关系,则每次增量处理维度时不会重新计算属性聚合。但如果成员之间的关系确实发生更改,则必须对维度进行完全处理。有关详细信息,请参阅属性关系、定义和配置属性关系、配置特性关系属性,以及指定用户定义层次结构中属性之间的属性关系。
在本主题的任务中,将根据基础维度表中的现有列在“时间”维度中定义一个新属性。您将使用这一新属性按时间顺序而不是字母顺序对日历月份成员进行排序。您还将根据命名计算在“客户”维度中定义一个新属性,该新属性用于对“上下班路程”属性成员进行排序。在下一个主题的任务中,您将了解如何使用属性关系提高查询性能。
在“时间”维度中定义属性关系和排序顺序
在“时间”维度中定义属性关系和排序顺序
打开“时间”维度的维度设计器,然后在“属性”窗口中查看**“月份名称”**特性的 OrderBy 属性。
注意,**“月份名称”**特性成员按其键值进行排序。
切换到**“浏览器”选项卡,确保在“层次结构”列表中已选中“日历时间”**,然后展开用户定义层次结构中的级别以查看日历月份的排序顺序。
注意,属性层次结构的成员根据其成员键(即月份和年份)的 ASCII 值进行排序。在此情况下,按属性名或键进行的排序将不会按时间顺序对日历月份进行排序。为解决此问题,将根据新的属性(MonthNumberOfYear 属性)对属性层次结构的成员进行排序。这一新属性是根据 DimTime 维度表中存在的列创建的。
切换到“时间”维度的**“维度结构”选项卡,右键单击“数据源视图”窗格中的 MonthNumberOfYear,然后单击“从列新建属性”**。
在**“属性”**窗格中,选择 Month Number Of Year,然后在“属性”窗口中将 AttributeHierarchyEnabled 属性设置为 False,将 AttributeHierarchyOptimizedState 属性设置为 NotOptimized,并将 AttributeHierarchyOrdered 属性设置为 False。
这些设置将向用户隐藏该属性,并可节省处理时间,并且由于这一新属性将只用于对其他属性的成员进行排序,所以应通过此方式进行设置。
注意: |
---|
使“属性”窗口中的属性按字母顺序排列可以简化此任务,因为排序后这三个属性会彼此相邻。 |
- 在**“属性”窗格中展开“日期”**。
注意,“时间”维度中的所有属性都与“日期”属性直接相关,“日期”属性是将维度成员与相关度量组中的事实数据关联的成员键。 - 展开**“月份名称”。
注意,在“月份名称”属性与“月份编号”**属性之间未定义任何关系。 - 将**“月份编号”属性拖动到“月份名称”属性下的“<新建属性关系”>标记。
如果您还定义了其他关系,则移动现有关系可以有效地改善处理性能,并可减少冗余。现在已经在“月份编号”属性和“月份名称”属性之间定义了关系。在“属性”窗口中,可以注意到“月份编号”**特性关系的 RelationshipType 属性的默认值为 Flexible。 - 在“属性”窗口中,将 RelationshipType 属性的值更改为 Rigid。
**“月份名称”属性和“月份编号”属性的成员之间的关系将不随时间而更改。因此,Analysis Services 将不会在增量处理过程中删除此关系的聚合。如果确实发生更改,则会在增量处理过程中出现处理错误,您将需要对维度执行完整的过程。您现在已准备就绪,可以设置“月份名称”的成员的排序顺序。
下图显示“月份名称”特性的“月份编号”**特性关系的 RelationshipType 属性已设置为 Rigid。
- 在**“特性”窗格中选择“月份名称”,然后将“属性”窗口中 OrderBy 属性的值更改为 AttributeKey,并将 OrderByAttribute 属性的值更改为“月份编号”**。
下图显示了“属性”窗口中的这些属性更改。
- 在**“生成”菜单上,单击“部署 Analysis Services 教程”**。
- 成功完成部署时,切换到“时间”维度的**“浏览器”选项卡,单击“重新连接”**,然后浏览“日历时间”和“会计时间”用户层次结构,以确保月份现在按时间顺序排序。
注意,月份现在按时间顺序排序,如下图所示。
在“客户”维度中定义属性关系和排序顺序
在“客户”维度中定义属性关系和排序顺序
在“客户”维度的维度设计器中,切换到**“维度结构”**选项卡。
在**“特性”窗格中,选择“上下班路程”**特性,然后在“属性”窗口中查看 OrderBy 属性。
切换到**“浏览器”选项卡,然后浏览“上下班路程”**属性层次结构的成员。
注意,该属性层次结构的成员基于成员键的 ASCII 值排序。在此情况下,按属性名称或键排序不会按从小到大的顺序对通勤距离进行排序。在此任务中,根据 CommuteDistanceSort 命名计算(将相应的排序号分配给列中的不同值)对属性层次结构的成员进行排序。此命名计算已添加到 Adventure Works DW 数据源视图的 Customer 表中,以节省时间;可以切换到此数据源视图中,以查看在此命名计算中使用的 SQL 脚本。有关详细信息,请参阅在数据源视图中定义命名计算 (Analysis Services)。
下图显示了**“上下班路程”**属性层次结构的成员,这些成员按成员键的 ASCII 值进行排序。
在“客户”维度的维度设计器中,切换到**“维度结构”选项卡,右键单击“数据源视图”窗格的 Customer 表中的 CommuteDistanceSort,然后单击“从列新建属性”**。
在**“特性”窗格中,选择“上下班路程排序”**,然后在“属性”窗口中将此特性的 AttributeHierarchyEnabled 属性设置为 False,将 AttributeHierarchyOptimizedState 属性设置为 NotOptimized,并将 AttributeHierarchyOrdered 属性设置为 False。
这些设置将向用户隐藏该属性,并可节省处理资源,并且由于这一新属性将只用于对其他属性的成员进行排序,所以应通过此方式进行设置。
在**“特性”窗格中,展开“全名”**。
注意,“客户”维度中所有从 Analysis Services Tutorial 数据源视图的 Customer 表中派生的属性都通过此属性相关。
展开**“地域”**。
注意,“客户”维度中所有从 Analysis Services Tutorial 数据源视图的 Geography 表中派生的属性都通过“地域”属性相关。
选择**“地域”**,然后在“属性”窗口中将它的 AttributeHierarchyVisible 属性设置为 False,将 AttributeHierarchyOptimized 属性设置为 NotOptimized,并将 AttributeHierarchyOrdered 属性设置为 False。
由于此属性不用于浏览,因此这些设置将向用户隐藏该属性,并可节省处理时间。如果属性层次结构包含成员属性,则必须启用此属性层次结构。
在**“特性”窗格中,展开“上下班路程”**。
注意,在此属性与**“上下班路程排序”**属性之间未定义任何关系。
将**“上下班路程排序”属性拖动到“上下班路程”属性下的“<新建属性关系”>**标记。
您现在已经在**“上下班路程”** 属性与**“上下班路程排序”属性之间定义了关系。在“属性”窗口中,注意“上下班路程”特性的“上下班路程排序”**成员的 RelationshipType 属性为 Flexible。
在“属性”窗口中,将 RelationshipType 属性的值更改为 Rigid。
**“上下班路程”属性和“上下班路程排序”属性的成员之间的关系将不随时间而更改。您现在已准备就绪,可以设置“上下班路程”**属性的排序顺序。
在**“特性”窗格中选择“上下班路程”,然后将“属性”窗口中 OrderBy 属性的值更改为 AttributeKey,并将 OrderByAttribute 属性的值更改为“上下班路程排序”**。
在**“生成”菜单上,单击“部署 Analysis Services 教程”**。
当部署成功完成时,切换到“客户”维度的维度设计器的**“浏览器”选项卡,单击“重新连接”,然后浏览“上下班路程”**属性层次结构。
注意,属性层次结构成员现在根据不断增加的距离按逻辑顺序进行排序,如下图所示。