修改日期维度

在本主题任务中,您将创建用户定义的层次结构,并更改日期、月份、日历季度和日历半年属性的显示成员名称。 还可以定义属性的复合键、控制维度成员的排序顺序以及定义属性关系。

添加命名计算

可以将命名计算(即表示为计算列的 SQL 表达式)添加到数据源视图中的表。 表达式作为表中的列来显示和表现。 命名计算使你能够在数据源视图中扩展现有表的关系架构,而无需修改基础数据源中的表。 有关详细信息,请参阅 数据源视图中的“定义命名计算”(Analysis Services)

添加命名计算

  1. 若要打开 Adventure Works DW 2012 数据源视图,请在解决方案资源管理器的 “数据源视图 ”文件夹中双击它。

  2. 在“ ”窗格底部附近,右键单击 Date,然后单击“ 新建命名计算”。

  3. 在“创建命名计算”对话框中,键入SimpleDate“列名称”框,然后在DATENAME”框中键入或复制并粘贴以下语句:

    DATENAME(mm, FullDateAlternateKey) + ' ' +  
    DATENAME(dd, FullDateAlternateKey) + ', ' +  
    DATENAME(yy, FullDateAlternateKey)  
    

    DATENAME 语句从 FullDateAlternateKey 列中提取年、月和日值。 将此新列用作 FullDateAlternateKey 属性的显示名称。

  4. 单击“确定”,然后在“”窗格中展开Date

    命名计算 SimpleDate 显示在 Date 表的列列表中,带有指示它是命名计算的图标。

  5. 在“文件” 菜单上,单击“全部保存” 。

  6. 在“ ”窗格中,右键单击 Date,然后单击“ 浏览数据”。

  7. 滚动到右侧以查看 “浏览日期表 ”视图中的最后一列。

    请注意,该 SimpleDate 列显示在数据源视图中,无需修改原始数据源,即可正确连接基础数据源中的多个列中的数据。

  8. 关闭 “浏览日期表 ”视图。

对成员名称使用命名计算

在数据源视图中创建命名计算后,可以将该命名计算用作某个属性的属性。

对成员名称使用命名计算

  1. 打开 SQL Server Data Tools (SSDT) 中的日期维度维度设计器。 为此,请双击Date解决方案资源管理器“维度”节点中的维度。

  2. “维度结构”选项卡的“属性”窗格中,单击“日期键”属性。

  3. 如果“属性”窗口未打开,请打开“属性”窗口,然后单击标题栏上的 “自动隐藏 ”按钮,使其保持打开状态。

  4. 单击窗口底部附近的 NameColumn 属性字段,然后单击省略号浏览(...)按钮打开“ 名称列 ”对话框。

  5. SimpleDate列表底部选择,然后单击“确定”。

  6. 在“文件” 菜单上,单击“全部保存” 。

创建层次结构

可以通过将属性从 “属性 ”窗格拖动到 “层次结构 ”窗格来创建新层次结构。

创建层次结构

  1. 在维度设计器的维度结构选项卡中,将日历年属性从属性窗格拖动到层次结构窗格中。

  2. 日历学期属性从属性窗格拖到层次结构窗格中日历年级别下的新级别单元格中。

  3. “日历季度”属性从“属性”窗格拖到<“层次结构”窗格中的新级别>单元格中,位于“日历学期”级别下。

  4. 英文月份名称属性从属性窗格拖到层次结构窗格中的<“新级别”>单元格中,在“日历季度”级别下。

  5. 日期键属性从属性窗格拖到层次结构窗格中的<单元格中,位于英语月份名称级别之下。

  6. 在“ 层次结构 ”窗格中,右键单击 层次结构 层次结构的标题栏,单击“ 重命名”,然后键入 Calendar Date

  7. 通过使用右键单击上下文菜单,在层次结构中 Calendar Date ,将 英语月份名称 级别重命名为 Calendar Month,然后将 日期键 级别重命名为 Date

  8. “属性”窗格中删除完整日期备用键属性,因为不会使用它。 在“删除对象”确认窗口中单击“确定”。

  9. 在“文件” 菜单上,单击“全部保存” 。

定义属性关系

如果基础数据支持它,则应定义属性之间的属性关系。 定义属性关系可加快维度、分区和查询处理速度。

定义属性关系

  1. 在维度的Date维度设计器中,单击“属性关系”选项卡。

  2. 在关系图中,右键单击 英语月份名称 属性,然后单击“ 新建属性关系”。

  3. 在“ 创建属性关系 ”对话框中, “源属性 ”是 英语月份名称。 将 相关属性 设置为 日历季度

  4. “关系类型” 列表中,将关系类型设置为 “刚性”。

    关系类型为 “刚性 ”,因为成员之间的关系不会随时间而改变。

  5. 单击 “确定”

  6. 在关系图中,右键单击 “日历季度 ”属性,然后单击“ 新建属性关系”。

  7. 在“ 创建属性关系 ”对话框中, “源属性 ”为 “日历季度”。 将 相关属性 设置为 日历学期

  8. “关系类型” 列表中,将关系类型设置为 “刚性”。

  9. 单击 “确定”

  10. 在关系图中,右键单击 “日历学期 ”属性,然后单击“ 新建属性关系”。

  11. 在“ 创建属性关系 ”对话框中, “源属性 ”是 日历学期。 将 “相关属性 ”设置为 “日历年”。

  12. “关系类型” 列表中,将关系类型设置为 “刚性”。

  13. 单击 “确定”

  14. 在“文件” 菜单上,单击“全部保存” 。

提供唯一维度成员名称

在此任务中,你将创建由 EnglishMonthNameCalendarQuarterCalendarSemester 属性使用的用户友好名称列。

提供唯一的维度成员名称

  1. 若要切换到 Adventure Works DW 2012 数据源视图,请在解决方案资源管理器的 “数据源视图 ”文件夹中双击它。

  2. 在“ ”窗格中,右键单击 Date,然后单击“ 新建命名计算”。

  3. 在“创建命名计算”对话框中,键入MonthName“列名称”框,然后在“表达式”框中键入或复制并粘贴以下语句:

    EnglishMonthName+' '+ CONVERT(CHAR (4), CalendarYear)  
    

    该语句将表中每个月的月份和年份连接为一个新列。

  4. 单击 “确定”

  5. 在“ ”窗格中,右键单击 Date,然后单击“ 新建命名计算”。

  6. 在“创建命名计算”对话框中,键入CalendarQuarterDesc“列名称”框,然后在“表达式”框中键入或复制并粘贴以下 SQL 脚本:

    'Q' + CONVERT(CHAR (1), CalendarQuarter) +' '+ 'CY ' +  
    CONVERT(CHAR (4), CalendarYear)  
    

    此 SQL 脚本将表中每个季度的日历季度和年份连接为一个新列。

  7. 单击 “确定”

  8. 在“ ”窗格中,右键单击 Date,然后单击“ 新建命名计算”。

  9. 在“创建命名计算”对话框中,键入CalendarSemesterDesc“列名称”框,然后在“表达式”框中键入或复制并粘贴以下 SQL 脚本:

    CASE  
    WHEN CalendarSemester = 1 THEN 'H1' + ' ' + 'CY' + ' '   
           + CONVERT(CHAR(4), CalendarYear)  
    ELSE  
    'H2' + ' ' + 'CY' + ' ' + CONVERT(CHAR(4), CalendarYear)  
    END  
    

    此 SQL 脚本将表中每个学期的日历学期和年份连接为一个新列。

  10. 单击“确定”

  11. 在“文件” 菜单上,单击“全部保存” 。

定义复合键列并设置名称列

KeyColumns 属性包含表示属性键的列或列。 在这个任务中,你需要定义复合KeyColumns

为“英语月份名称”属性定义复合关键列

  1. 打开“日期”维度的 “维度结构 ”选项卡。

  2. “属性 ”窗格中,单击 “英语月份名称 ”属性。

  3. “属性” 窗口中,单击 “KeyColumns ”字段,然后单击“浏览”按钮

  4. “键列 ”对话框中的 “可用列 ”列表中,选择“ CalendarYear”列,然后单击 > 该按钮。

  5. EnglishMonthNameCalendarYear 列现在显示在“键列”列表中。

  6. 单击 “确定”

  7. 若要设置 EnglishMonthName 属性的 NameColumn 属性,请单击“属性”窗口中的 NameColumn 字段,然后单击“浏览”按钮

  8. 在“ 名称列 ”对话框中的 “源列 ”列表中,选择 MonthName,然后单击“ 确定”。

  9. 在“文件” 菜单上,单击“全部保存” 。

为日历季度属性定义复合键列

  1. 在“ 属性 ”窗格中,单击 “日历季度 ”属性。

  2. “属性” 窗口中,单击 “KeyColumns ”字段,然后单击“浏览”按钮

  3. “键列 ”对话框中的 “可用列 ”列表中,选择“ CalendarYear”列,然后单击 > 该按钮。

    CalendarQuarterCalendarYear 列现在显示在“键列”列表中。

  4. 单击 “确定”

  5. 若要设置 Calendar Quarter 属性的 NameColumn 属性,请单击“属性”窗口中的 NameColumn 字段,然后单击“浏览”按钮

  6. 在“ 名称列 ”对话框中的 “源列 ”列表中,选择 CalendarQuarterDesc,然后单击“ 确定”。

  7. 在“文件” 菜单上,单击“全部保存” 。

为日历学期属性定义复合键列

  1. “属性 ”窗格中,单击“ 日历学期 ”属性。

  2. “属性” 窗口中,单击 “KeyColumns ”字段,然后单击“浏览”按钮

  3. “键列 ”对话框中的 “可用列 ”列表中,选择列“ CalendarYear”,然后单击 > 该按钮。

    CalendarSemesterCalendarYear 列现在显示在“键列”列表中。

  4. 单击 “确定”

  5. 若要设置日历学期属性的 NameColumn 属性,请单击属性窗口中的 NameColumn 字段,然后单击浏览 (...) 按钮。

  6. 在“ 名称列 ”对话框中的 “源列 ”列表中,选择 CalendarSemesterDesc,然后单击“ 确定”。

  7. 在“文件” 菜单上,单击“全部保存” 。

部署和查看更改

更改属性和层次结构后,必须先部署更改并重新处理相关对象,然后才能查看更改。

部署以查看更改

  1. 在 SQL Server Data Tools 的“构建”菜单上,单击“分析服务教程部署”

  2. 收到“部署成功完成”消息后,单击维度设计器Date“浏览器”选项卡,然后单击设计器工具栏上的“重新连接”按钮。

  3. “层次结构”列表中选择“日历季度”。 查看 Calendar Quarter 属性层次结构中的成员。

    请注意, Calendar Quarter 属性层次结构的成员的名称更清晰且更易于使用,因为你创建了一个命名计算来用作名称。 成员现在存在于每年每个季度的 日历季度 属性层次结构中。 成员不按时间顺序排序。 相反,它们按季度排序,然后按年份排序。 在本主题的下一个任务中,将修改此行为,以便按年份和季度对此属性层次结构的成员进行排序。

  4. 查看 英语月名日历学期 属性层次结构的成员。

    请注意,这些层次结构的成员也不会按时间顺序排序。 相反,它们分别按月或学期排序,然后按年份排序。 在本主题的下一个任务中,将修改此行为以更改此排序顺序。

通过修改复合键成员顺序更改排序顺序

在此任务中,你将通过更改构成组合键的键的顺序来更改排序顺序。

修改复合键成员顺序

  1. 打开维度维度设计器Date的“维度结构”选项卡,然后在“属性”窗格中选择“日历学期”。

  2. 在“属性”窗口中,查看 OrderBy 属性的值。 它设置为 “密钥”。

    日历学期属性层次结构的成员按键值排序。 使用复合键时,成员键的顺序首先基于第一个成员键的值,然后基于第二个成员键的值。 换句话说, 日历学期 属性层次结构的成员首先按学期排序,然后按年份排序。

  3. 在“属性”窗口中,单击省略号浏览按钮(...)更改 KeyColumns 属性值。

  4. “键列”对话框的“键列”列表中,验证是否选择了 CalendarSemester,然后单击向下箭头以反转此组合键的成员的顺序。 单击 “确定”

    属性层次结构的成员现在首先按年份和学期进行排序。

  5. “属性”窗格中选择“日历季度”,然后单击属性窗口中 KeyColumns 属性的省略号浏览按钮(...)。

  6. “键列”对话框的“键列”列表中,验证是否选择了 CalendarQuarter,然后单击向下箭头以反转此组合键的成员的顺序。 单击 “确定”

    属性层次结构的成员现在首先按年份排序,然后按季度排序。

  7. “属性”窗格中选择英语月份名称,然后单击“属性”窗口中 KeyColumns 属性的省略号按钮(...)。

  8. “键列”对话框的“键列”列表中,验证是否选择了 EnglishMonthName,然后单击向下箭头以反转此组合键的成员的顺序。 单击 “确定”

    属性层次结构的成员现在首先按年份和月份进行排序。

  9. 在 SQL Server Data Tools 的“构建”菜单上,单击“分析服务教程部署”。 部署成功完成后,单击维度设计器中的“浏览器”选项卡。

  10. “浏览器 ”选项卡的工具栏上,单击“重新连接”按钮。

  11. 查看 日历季度日历学期 属性层次结构的成员。

    请注意,这些层次结构的成员现在按时间顺序按年份排序,然后分别按季度或学期排序。

  12. 查看 英语月份名称 属性层次结构的成员。

    请注意,层次结构的成员现在首先按年份排序,然后按月份按字母顺序排序。 这是因为数据源视图中 EnglishCalendarMonth 列的数据类型是基于基础关系数据库中的 nvarchar 数据类型的字符串列。 有关如何使月份在每年按时间顺序排序的信息,请参阅 基于辅助属性对属性成员进行排序

课程中的下一个任务

浏览已部署的多维数据集

另请参阅

多维模型中的维度