3.3 修改“时间”维度

您可以为属性定义组合键以控制 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 属性层次结构的当前结构。

  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 属性层次结构。

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

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

posted @ 2008-05-29 16:06  寒天飞雪  阅读(514)  评论(0编辑  收藏  举报