修改“时间”维度

您可以为属性定义组合键以控制 SELECT DISTINCT 处理查询所返回的成员。使用组合键时,属性成员的排序顺序由组合键成员的排序顺序来确定。在本主题的各任务中,您将更改用户定义层次结构的名称,更改为 Date、Month、Calendar Quarter 以及 Calendar Semester 等属性显示的成员名称,为 EnglishMonthName、CalendarQuarter 和 CalendarSemester 等属性定义组合键,然后修改组合键成员的顺序以控制维度成员的排序顺序。

修改用户定义层次结构

修改用户定义层次结构

  1. 切换到 Business Intelligence Development Studio 中 Time 维度的维度设计器,然后单击**“维度结构”**选项卡。

  2. 在**“层次结构和级别”窗格中,单击 CalendarYear - CalendarSemester - CalendarQuarter - EnglishMonthName - FullDateAlternateKey 层次结构,然后在“属性”窗口中将 Name 属性更改为“日历时间”**。

    此用户定义层次结构的名称现在为**“日历时间”**。

  3. 在**“日历时间”用户定义层次结构中,将“英文月份名称”级别更改为“日历月份”,并将“完整日期备用键”级别更改为“日期”**。

  4. 切换到 Adventure Works DW 数据源视图的数据源视图设计器,在**“表”窗格中右键单击 Time (dbo.DimTime),再单击“新建命名计算”**。

  5. 在**“创建命名计算”对话框的“列名”框中键入 SimpleDate,然后在“表达式”**框中键入以下 SQL 脚本:

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

    该 SQL 脚本从 FullDateAlternateKey 列中提取年、月和日的值。您将修改“时间”维度的“日历时间”层次结构中的“日期”级别,从而显示这一新列的值,而不是存储在 DimTime 表的 FullDateAlternateKey 列中的原始值。

  6. 单击**“确定”**,再切换到“时间”维度的维度设计器。

  7. 在**“日历时间”层次结构中单击“日期”**,然后在“属性”窗口中查看“日期”级别的属性。

    注意,层次结构中的**“日期”**级别基于 FullDateAlternateKey 特性。在下面的步骤中,您要将此级别所基于的特性更改为 TimeKey 特性,然后修改 TimeKey 特性的属性,从而使其成员的名称基于刚刚定义的 SimpleDate 列中的值。也可以将 FullDateAlternateKey 保留为“日期”级别所基于的特性,并更改该特性以使其成员名称基于 SimpleDate 列。但是,第一种方法更有效;由于并不需要同时使用 TimeKey 特性和 FullDateAlternateKey 特性,因此您将删除 FullDateAlternateKey 特性。

  8. 在**“日历时间”用户定义层次结构中,将“日期”级别的 SourceAttribute 属性的值更改为 TimeKey,然后从“特性”**窗格中删除 FullDateAlternateKey 特性。

  9. 在**“特性”**窗格中选择 TimeKey,展开 NameColumn 属性集合,然后在“属性”窗口中展开 Source 属性集合。将 ColumnID 属性的值更改为 SimpleDate

    注意,TimeKey 特性的 OrderBy 属性指定特性层次结构的成员按其键值进行排序。

  10. 在 BI Development Studio 的**“生成”菜单上,单击“部署 Analysis Services 教程”。成功完成部署后,单击“时间”维度的维度设计器中的“浏览器”选项卡,然后单击工具栏上的“重新连接”**。

  11. 展开**“日历时间”层次结构中的各个级别,以查看“日期”**级别的成员。

    注意,“日期”级别成员的用户友好性与以前相比有所提高。但是还注意,半期、季度和月份等成员不会指明它们的父年份。

    下图显示了“日期”级别的成员。

    “日期”级别的成员

  12. 在 **“层次结构”列表中,选择 EnglishMonthName,然后展开“全部”**级别成员。

    注意,在“时间”维度中,每月仅出现一次,而不是每年出现一次。在本主题的下一个任务中,您将为每年中的每个月生成唯一的名称。

  13. 在**“层次结构”列表中,选择 CalendarQuarter,然后展开“全部”**级别成员。

    注意,在“时间”维度中,每个季度仅出现一次,而不是在每一季度中出现一次。另注意,月份按字母顺序排序。在本主题的下一个任务中,您将为每年中的每个日历季度生成唯一的名称。在第 4 课中,将把月份配置为按时间顺序排序。

提供唯一的维度成员名称

提供唯一的维度成员名称

  1. 切换到 Adventure Works DW 数据源视图的数据源视图设计器,在**“表”窗格中右键单击 Time (dbo.DimTime),再单击“新建命名计算”**。

  2. 在**“创建命名计算”对话框的“列名”框中键入 MonthName,然后在“表达式”**框中键入以下 SQL 脚本:

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

    该 SQL 脚本将 DimTime 表中每月的月份和年份连接起来,放入一个新列。

  3. 单击**“确定”**。

  4. 右键单击**“表”窗格中的 Time (dbo.DimTime),然后单击“新建命名计算”**。

  5. 在**“创建命名计算”对话框的“列名”框中键入 CalendarQuarterDesc,然后在“表达式”**框中键入以下 SQL 脚本:

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

    该 SQL 脚本将 DimTime 表中每季度的日历季度和年份连接起来,放入一个新列。

  6. 单击**“确定”**。

  7. 右键单击**“表”窗格中的 Time,然后单击“新建命名计算”**。

  8. 在**“创建命名计算”对话框的“列名”框中键入 CalendarSemesterDesc,然后在“表达式”**框中键入以下 SQL 脚本:

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

    该 SQL 脚本将 DimTime 表中每半期的日历半期和年份连接起来,放入一个新列。

  9. 单击**“确定”,然后切换到“时间”维度的维度设计器,再单击“维度结构”**选项卡。

    您将修改“时间”维度中的 EnglishMonthName、CalendarQuarter 以及 CalendarSemester 等属性,以便将新列中的值用作成员值。

  10. 在**“特性”**窗格中,选择 EnglishMonthName。在“属性”窗口中,依次展开 NameColumn 属性和 Source 属性,然后将 ColumnID 属性的值更改为 MonthName

  11. 按照同样的方式,对**“日历季度”特性和“日历半期”**特性的 ColumnID 属性进行如下更改:

    • 日历季度 - 将 ColumnID 属性更改为 CalendarQuarterDesc
    • 日历半期 - 将 ColumnID 属性更改为 CalendarSemesterDesc
  12. 在 BI Development Studio 的**“生成”菜单上,单击“部署 Analysis Services 教程”。部署成功完成后,在“时间”维度的维度设计器中单击“浏览器”**选项卡。

  13. 在**“浏览器”选项卡的工具栏上,单击“重新连接”**,然后查看“日历季度”属性层次结构中 CalendarQuarter 属性层次结构的成员。

    注意,虽然 CalendarQuarter 属性层次结构成员的名称更具用户友好性,但是在属性层次结构中仍然只有四个成员,而不是针对每个年份和季度的组合具有一个成员。如果您查看 EnglishMonthName 或 CalendarSemester 属性层次结构,则会发现类似的行为。在本主题的下一个任务中,您将通过为这些属性指定一个组合键来修改这种行为。

指定组合键值

指定组合键值

  1. 在 Time 维度的维度设计器中选择“维度结构”选项卡,再选择 EnglishMonthName 特性,然后单击“属性”窗口中 KeyColumns 属性单元内的省略号按钮 (),以修改该特性的值。

    将打开 DataItem 集合编辑器以显示此特性的成员键列。当 Analysis Services 处理维度时,它会发出一个 SELECT DISTINCT 查询以确定该维度的成员。在 DataItem 集合编辑器中,您可以为该特性指定一个组合键而非单个列键,以返回其他的维度成员。

  2. 单击**“添加”**为该维度属性再定义一个成员键。

    新的成员键会出现在成员列表中。您必须定义这个新增键成员的属性。

  3. 在**“新建绑定(Wchar)属性”下,单击“源”属性单元中省略号按钮 (...**) 更改它的值。

    此时,将显示**“对象绑定”**对话框。在此对话框中,您可以指定一个位于指定表中的现有列;如果您正在使用由上而下的设计方法生成关系架构,则可以指定要创建的列类型。

  4. 在**“绑定类型”列表中,选择“列绑定”**。

  5. 请确保已在**“源表”**列表中已选中 Time

  6. 在**“源列”**列表中,选择 CalendarYear

    下图显示了**“对象绑定”**对话框。

    “对象绑定”对话框

  7. 单击**“确定”关闭“对象绑定”对话框,然后再次单击“确定”**关闭 DataItem 集合编辑器

    注意,KeyColumns 属性的值现在设置为 (Collection)

  8. 选择 CalendarQuarter 特性,然后单击“属性”窗口中 KeyColumns 属性单元内的省略号按钮 (...),以修改该特性的值。

    将出现 DataItem 集合编辑器

  9. 单击**“添加”**定义 KeyColumns 属性的第二个成员。

  10. 在**“新建绑定(Wchar)属性”下,单击“源”属性单元中省略号按钮 (...**) 更改它的值。

    此时,将显示**“对象绑定”**对话框。

  11. 在**“绑定类型”列表中,选择“列绑定”**。

  12. 在**“源表”**列表中,确保 Time 处于选中状态。

  13. 在**“源列”**列表中,选择 CalendarYear

  14. 单击**“确定”,然后再次单击“确定”**。

  15. 选择 CalendarSemester 特性,然后单击“属性”窗口中 KeyColumns 属性单元内的省略号按钮 (...),以修改该特性的值。

    将出现 DataItem 集合编辑器对话框。

  16. 单击**“添加”**定义 KeyColumns 属性的第二个成员。

  17. 在**“新建绑定(Wchar)属性”下,单击“源”属性单元中省略号按钮 (...**) 更改它的值。

    此时,将显示**“对象绑定”**对话框。

  18. 在**“绑定类型”列表中,选择“列绑定”**。

  19. 在**“源表”**列表中,确保 Time 处于选中状态。

  20. 在**“源列”**列表中,选择 CalendarYear

  21. 单击**“确定”,然后再次单击“确定”**。

  22. 在 BI Development Studio 的**“生成”菜单上,单击“部署 Analysis Services 教程”。部署成功完成后,在“时间”维度的维度设计器中单击“浏览器”**选项卡。

  23. 在**“浏览器”选项卡的工具栏上,单击“重新连接”**,然后查看“日历季度”属性层次结构中 CalendarQuarter 属性层次结构的成员。

    注意,虽然 CalendarQuarter 属性层次结构中存在每年中每季度的成员,但是这些成员并不按照时间顺序进行排序。相反,它们先按季度然后按年份进行排序。在本主题的下一个任务中,您将修改此行为,以先按年然后按季度对此属性的层次结构成员进行排序。

    下图显示了 CalendarQuarter 属性层次结构的当前结构。

    CalendarQuarter 层次结构的当前结构

  24. 查看 EnglishMonthName 和 CalendarSemester 属性层次结构的成员。

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

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

修改组合键成员顺序

  1. 在“时间”维度的维度设计器中选择**“维度结构”选项卡,然后在“特性”**窗格中选择 CalendarSemester

  2. 在“属性”窗口中,查看 OrderBy 属性的值。

    CalendarSemester 属性层次结构的成员按其键值进行排序。使用组合键,成员键首先基于第一个成员键的值,然后基于第二个成员键的值进行排序。换言之,CalendarSemester 属性层次结构的成员首先按半期、然后按年份进行排序。

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

    将打开 DataItem 集合编辑器

  4. DataItem 集合编辑器的**“成员”表中,确保已选中 DimTime.CalendarSemester (UnsignedTinyInt),然后单击向下键以反转该组合键成员的顺序。单击“确定”**。

    现在,属性层次结构成员首先按年份、然后按半期进行排序。

  5. 在**“特性”窗格中,选择 CalendarQuarter,然后单击“属性”窗口中 KeyColumns 内的省略号按钮 (...**)。

  6. DataItem 集合编辑器的**“成员”表中,确保已选中 “DimTime.CalendarQuarter (UnsignedTinyInt),然后单击向下键以反转该组合键成员的顺序。单击“确定”**。

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

  7. 在**“特性”窗格中,选择 EnglishMonthName,然后单击“属性”窗口中 KeyColumns 内的省略号按钮 (...**)。

  8. DataItem 集合编辑器的**“成员”表中,确保已选中 DimTime.EnglishMonthName (WChar),然后单击向下键以反转该组合键成员的顺序。单击“确定”**。

    现在,属性层次结构成员首先按年份、然后按月份进行排序。

  9. 在 BI Development Studio 的**“生成”菜单上,单击“部署 Analysis Services 教程”。部署成功完成后,在“时间”维度的维度设计器中单击“浏览器”**选项卡。

  10. 在**“浏览器”选项卡的工具栏上,单击“重新连接”**,然后查看 CalendarQuarter 和 CalendarSemester 属性层次结构的成员。

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

  11. 查看 EnglishMonthName 属性层次结构的成员。

    注意,层次结构的成员现在先按年份排序,然后按月份的字母顺序排序(这是因为数据源视图中 EnglishCalendarMonth 列的数据类型是字符串列,它基于基础关系数据库中的 nvarchar 数据类型)。但是,对每年内的月份按时间顺序进行排序会更有用。您将在第 4 课中进行此更改。

    下图显示了 EnglishMonthName 属性层次结构。

    EnglishMonthName 属性层次结构

  12. 在 BI Development Studio 的**“文件”菜单中,单击“全部保存”**,以保存到目前为止对 Analysis Services Tutorial 项目所做的更改,这样您便可以根据需要在此处停止教程学习,并在以后继续。

通过在数据源视图中创建命名计算,然后将这些命名计算作为属性成员名称使用,您已成功地增强了“时间”维度属性层次结构成员的用户友好性。同时还定义了组合键并指定适当的组合键成员顺序,以控制维度成员排序顺序,从而增强了用户友好性。

课程中的下一个任务

修改“产品”维度

请参阅

其他资源

定义和配置维度、属性和层次结构

帮助和信息

获取 SQL Server 2005 帮助