第 3-4 课 - 修改日期维度
适用于: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium
在本主题的各任务中,将创建用户定义的层次结构,并更改为“日期”、“月份”、“日历季度”以及“日历半期”等属性显示的成员名称。 还将为属性定义组合键,控制维度成员的排序顺序以及定义属性关系。
添加命名计算
可以向数据源视图的表中添加命名计算,命名计算是一个表示为计算列的 SQL 表达式。 该表达式的显示形式和工作方式类似于表中的列。 通过命名计算,不必修改基础数据源中的表即可扩展数据源视图中现有表的关系架构。 有关详细信息,请参阅 在数据源视图中定义命名计算 (Analysis Services)
添加命名计算
若要打开 Adventure Works DW 2019 数据源视图,请在 解决方案资源管理器 的“数据源视图”文件夹中双击它。
在“表”窗格底部附近,右键单击“日期”,然后单击“新建命名计算”。
在“创建命名计算”对话框中,在“列名”框中键入 SimpleDate,然后在“表达式”框中键入或复制并粘贴以下 DATENAME 语句:
DATENAME(mm, FullDateAlternateKey) + ' ' + DATENAME(dd, FullDateAlternateKey) + ', ' + DATENAME(yy, FullDateAlternateKey)
该 DATENAME 语句从 FullDateAlternateKey 列中提取年、月和日的值。 将此新列用作 FullDateAlternateKey 属性的显示名称。
单击“确定”,然后展开“表”窗格中的“日期”。
SimpleDate 命名计算显示在 Date 表中列的列表中,由一个图标指示它是命名计算。
在“文件”菜单上,单击“全部保存” 。
在“表”窗格中,右键单击“日期”,然后单击“浏览数据”。
滚动到右侧,以查看“浏览 Date 表”视图中的最后一列。
注意, SimpleDate 列显示在数据源视图中,正确串联基础数据源中多个列的数据,而无需修改原始数据源。
关闭“浏览 Date 表”视图。
将命名计算用于成员名称
在数据源视图中创建命名计算后,可以将命名计算用作特性的属性。
将命名计算用于成员名称
在 SQL Server Data Tools 中打开“日期”维度的维度Designer。 为此,请双击“解决方案资源管理器”的“维度”节点的“日期”维度。
在“维度结构”选项卡的“属性”窗格中,单击“日期键”属性。
如果未打开“属性”窗口,则打开“属性”窗口,然后单击标题栏上的“自动隐藏”按钮,以便该窗口保持打开状态。
单击窗口底部附近的 NameColumn 属性字段,然后单击省略号浏览 (...) 按钮以打开“ 命名列 ”对话框。
选择位于“源列”列表底部的 SimpleDate,然后单击“确定”。
在“文件”菜单上,单击“全部保存” 。
创建层次结构
通过将属性从“属性”窗格拖至“层次结构”窗格可以创建新的层次结构。
创建层次结构
在“日期”维度的维度设计器的“维度结构”选项卡中,将“日历年”属性从“属性”窗格拖动到“层次结构”窗格中。
将“日历学期”属性从“属性”窗格拖动到<“层次结构”窗格中“日历年”>级别下的新级别单元格中。
将“日历季度”属性从“属性”窗格拖动到<“层次结构”窗格中“日历学期”>级别下的新级别单元格中。
将“英语月份名称”属性从“属性”窗格拖到<“层次结构”窗格中“日历季度”级别下的新>级别单元格中。
将“日期键”属性从“属性”窗格拖到<“层次结构”窗格中“英语月份名称”级别下的新级别>单元格中。
在“ 层次结构 ”窗格中,右键单击 层次结构 的标题栏,单击“ 重命名”,然后键入 “日历日期”。
通过使用右键单击上下文菜单,在“日历日期”层次结构中,将“英语月份名称”级别重命名为“日历月份”,并将“日期键”级别重命名为“日期”。
因为不需要使用“完整日期备用键”属性,所以将其从“属性”窗格中删除。 在“删除对象”确认窗口中单击“确定”。
在“文件”菜单上,单击“全部保存” 。
定义属性关系
如果基础数据支持,则应定义属性间的属性关系。 定义属性关系可加快维度、分区和查询处理的速度。
定义属性关系
在“日期”维度的“维度设计器”中,单击“属性关系”选项卡。
在关系图中,右键单击“英语月份名称”属性,然后单击“新建属性关系”。
在“创建属性关系”对话框中,“源属性”是“英语月份名称”。 将“相关属性”设置为“日历季度”。
在“关系类型”列表中,将关系类型设置为“刚性”。
因为各成员之间的关系不会随时间变化,所以此关系类型为“刚性”。
单击 “确定” 。
在关系图中,右键单击“日历季度”属性,然后单击“新建属性关系”。
在“创建属性关系”对话框中,“源属性”是“日历季度”。 将“相关属性”设置为“日历半期”。
在“关系类型”列表中,将关系类型设置为“刚性”。
单击 “确定” 。
在关系图中,右键单击“日历半期”属性,然后单击“新建属性关系”。
在“创建属性关系”对话框中,“源属性”是“日历半期”。 将“相关属性”设置为“日历年”。
在“关系类型”列表中,将关系类型设置为“刚性”。
单击“确定”。
在“文件” 菜单上,单击“全部保存” 。
提供唯一的维度成员名称
在此任务中,将创建由 EnglishMonthNameCalendarQuarter 和 CalendarSemester 属性使用的用户友好名称列。
提供唯一的维度成员名称
若要切换到 Adventure Works DW 2019 数据源视图,请在 解决方案资源管理器 的“数据源视图”文件夹中双击它。
在“表”窗格中,右键单击“日期”,然后单击“新建命名计算”。
在“创建命名计算”对话框中,在“列名”框中键入 MonthName,然后在“表达式”框中键入或复制并粘贴以下语句:
EnglishMonthName+' '+ CONVERT(CHAR (4), CalendarYear)
该语句将表中每月的月份和年份连接成一个新列。
单击 “确定” 。
在“表”窗格中,右键单击“日期”,然后单击“新建命名计算”。
在“创建命名计算”对话框的“列名”框中键入 CalendarQuarterDesc,然后在“表达式”框中键入或复制并粘贴以下 SQL 脚本:
'Q' + CONVERT(CHAR (1), CalendarQuarter) +' '+ 'CY ' + CONVERT(CHAR (4), CalendarYear)
该 SQL 脚本将表中每季度的日历季度和年份连接成一个新列。
单击 “确定” 。
在“表”窗格中,右键单击“日期”,然后单击“新建命名计算”。
在“创建命名计算”对话框的“列名”框中键入 CalendarSemesterDesc,然后在“表达式”框中键入或复制并粘贴以下 SQL 脚本:
CASE WHEN CalendarSemester = 1 THEN 'H1' + ' ' + 'CY' + ' ' + CONVERT(CHAR(4), CalendarYear) ELSE 'H2' + ' ' + 'CY' + ' ' + CONVERT(CHAR(4), CalendarYear) END
该 SQL 脚本将表中每半期的日历半期和年份连接成一个新列。
单击“确定” 。
在“文件”菜单上,单击“全部保存” 。
定义组合的 KeyColumns 和设置名称列
KeyColumns 属性中包含表示特性键的一个或多个列。 在本任务中,将定义组合的 KeyColumns。
为“英语月份名称”属性定义组合的 KeyColumns
打开“日期”维度的“维度结构”选项卡。
在“属性”窗格中,单击“英语月份名称”属性。
在“属性”窗口中,单击 KeyColumns 字段,然后单击浏览 (...) 按钮。
在“ 键列 ”对话框的“ 可用列” 列表中,选择“ CalendarYear”列,然后单击按钮 > 。
现在,EnglishMonthName 和 CalendarYear 列会显示在“键列”列表中。
单击 “确定” 。
若要设置 EnglishMonthName 特性的 NameColumn 属性,请单击“属性”窗口中的 NameColumn 字段,然后单击浏览 (...) 按钮。
在“名称列”对话框的“源列”列表中,选择 MonthName,然后单击“确定”。
在“文件”菜单上,单击“全部保存” 。
为“日历季度”属性定义组合的 KeyColumns
在“属性”窗格中,单击“日历季度”属性。
在“属性”窗口中,单击 KeyColumns 字段,然后单击浏览 (...) 按钮。
在“ 键列 ”对话框的“ 可用列” 列表中,选择“ CalendarYear”列,然后单击按钮 > 。
现在,CalendarQuarter 和 CalendarYear 列会显示在“键列”列表中。
单击 “确定” 。
若要设置“日历季度”特性的 NameColumn 属性,请单击“属性”窗口的 NameColumn 字段,然后单击浏览 (...) 按钮。
在“名称列”对话框的“源列”列表中,选择 CalendarQuarterDesc,然后单击“确定”。
在“文件”菜单上,单击“全部保存” 。
为“日历半期”属性定义组合的 KeyColumns
在在“属性”窗格中,单击“日历半期”属性。
在“属性”窗口中,单击 KeyColumns 字段,然后单击浏览 (...) 按钮。
在“键列”对话框的“可用列”列表中,选择 CalendarYear 列,然后单击“”>按钮。
现在,CalendarSemester 和 CalendarYear 列会显示在“键列”列表中。
单击 “确定” 。
若要设置“日历半期”特性的 NameColumn 属性,请单击“属性”窗口的 NameColumn 字段,然后单击浏览 (...) 按钮。
在“名称列”对话框的“源列”列表中,选择 CalendarSemesterDesc,然后单击“确定”。
在“文件”菜单上,单击“全部保存” 。
部署和查看更改
更改属性和层次结构后,必须部署更改并重新处理相关对象,然后才能查看这些更改。
部署和查看更改
在SQL Server Data Tools的“生成”菜单上,单击“部署 Analysis Services 教程”。
在收到“部署成功完成”消息后,单击“日期”维度的“维度设计器”的“浏览器”选项卡,然后单击设计器工具栏上的“重新连接”图标。
从“层次结构”列表中选择“日历季度”。 查看“日历季度”属性层次结构的成员。
注意,由于创建了要用作名称的命名计算,因此,“日历季度”属性层次结构的成员名称更明确且更易于使用。 成员现在位于每年每个季度的“日历季度”属性层次结构中。 成员不是按时间顺序排序的。 相反,它们先按季度然后按年份进行排序。 在本主题的下一个任务中,您将修改此行为,以先按年然后按季度对此属性的层次结构成员进行排序。
查看“英语月份名称”和“日历半期”属性层次结构的成员。
注意,这些层次结构的成员也不是按时间顺序排序的。 相反,它们先分别按月或半期然后按年份进行排序。 在本主题的下一个任务中,您将修改此行为以更改这种排序顺序。
通过修改组合键成员顺序来更改排序顺序
在本任务中,您将通过更改组成组合键的键顺序来更改排序顺序。
修改组合键成员顺序
打开“日期”维度的维度设计器的“维度结构”选项卡,然后在“属性”窗格中选择“日历半期”。
在“属性”窗口中,查看 OrderBy 属性的值。 它被设置为“键”。
“日历半期”属性层次结构的成员按其键值进行排序。 使用组合键,成员键首先基于第一个成员键的值,然后基于第二个成员键的值进行排序。 换言之,“日历半期”属性层次结构的成员首先按半期、然后按年份进行排序。
在“属性”窗口中,单击省略号浏览按钮 (...),以更改 KeyColumns 属性值。
在“键列”对话框的“键列”列表中,验证是否选中了 CalendarSemester,然后单击向下箭头以反转该组合键成员的顺序。 单击 “确定” 。
现在,属性层次结构成员首先按年份、然后按半期进行排序。
在“特性”窗格中,选择“日历季度”,然后单击“属性”窗口中 KeyColumns 属性的省略号浏览按钮 (...)。
在“键列”对话框的“键列”列表中,验证是否选中了 CalendarQuarter,然后单击向下箭头以反转该组合键成员的顺序。 单击 “确定” 。
现在,属性层次结构成员首先按年份、然后按季度进行排序。
在“特性”窗格中,选择“英语月份名称”,然后单击“属性”窗口中 KeyColumns 属性的省略号按钮 (...)。
在“键列”对话框的“键列”列表中,验证是否选中了 EnglishMonthName,然后单击向下箭头以反转该组合键成员的顺序。 单击 “确定” 。
现在,属性层次结构成员首先按年份、然后按月份进行排序。
在SQL Server Data Tools的“生成”菜单上,单击“部署 Analysis Services 教程”。 部署成功完成后,在“日期”维度的维度设计器中单击“浏览器”选项卡。
在“浏览器”项卡的工具栏上,单击“重新连接”按钮。
查看“日历季度”和“日历半期”属性层次结构的成员。
注意,这些层次结构的成员现在按时间顺序排序,首先按年份、然后分别按季度或半期排序。
查看“英语月份名称”属性层次结构的成员。
注意,层次结构成员首先按年份然后按月份的字母顺序排序。 这是因为“数据源”视图中 EnglishCalendarMonth 列的数据类型是字符串列,它基于基础关系数据库中的 nvarchar 数据类型。 有关如何对每年内的月份按时间顺序进行排序的信息,请参阅 根据辅助属性对属性成员进行排序。