出于不同目的,用户希望以不同的粒度或具体性来维度事实数据。 例如,经销商或 Internet 销售的销售数据可能每天记录,而销售配额信息可能仅存在于月份或季度级别。 在这些方案中,用户需要一个时间维度,其中包含每个不同事实数据表的不同粒度或详细信息级别。 虽然可以将新的数据库维度定义为具有此不同粒度的时间维度,但 Analysis Services 有一种更简单的方法。
默认情况下,在 Analysis Services 中,当维度在度量值组中使用时,该维度中的数据粒度基于维度的键属性。 例如,当时间维度包含在度量值组中,时间维度的默认粒度为每日时,度量值组中该维度的默认粒度为每日。 很多时候,这很合适,例如本教程中的 Internet 销售和经销商销售度量值组。 但是,如果此类维度包含在其他类型的度量值组中(如销售配额或预算度量值组中),则每月或季度粒度通常更合适。
若要为多维数据集的维度指定不同于默认粒度的颗粒度,可以修改多维数据集在特定度量组中使用的维度的粒度属性,操作步骤是在多维数据集设计器的“维度使用”选项卡上进行。 将特定度量值组中维度的粒度更改为该维度的关键属性以外的属性时,必须确保度量值组中所有其他属性直接或间接地与新的粒度属性相关。 为此,可以指定所有其他属性与指定为度量值组中粒度属性的属性之间的关系。 在这种情况下,可以定义其他属性关系,而不是移动属性关系。 指定为粒度属性的属性实际上将成为维度中剩余属性的度量值组中的关键属性。 如果未适当指定属性关系,Analysis Services 将无法正确聚合值,如本主题中的任务所示。
有关详细信息,请参阅 维度关系、 定义正则关系和正则关系属性。
在本主题任务中,您将添加“销售配额”度量值组,并将此度量值组中日期维度的粒度定义为按月计算。 然后,定义月份属性和其他维度属性之间的属性关系,以确保 Analysis Services 正确聚合值。
添加表并定义销售配额度量组
切换到 Adventure Works DW 2012 数据源视图。
右键单击 “关系图管理器 ”窗格中的任意位置,单击“ 新建关系图”,然后将关系图
Sales Quotas命名。将 “员工”、“ 销售区域”和
Date“表”从“ 表 ”窗格拖到“ 关系图 ”窗格。通过右键单击“关系图”窗格中的任意位置并选择“添加/删除表”,将 FactSalesQuota 表添加到“关系图”窗格。
请注意,SalesTerritory 表通过 Employee 表链接到 FactSalesQuota 表。
查看 FactSalesQuota 表中的列,然后浏览此表中的数据。
请注意,此表中数据的粒度是自然季度,这是 FactSalesQuota 表中最细的级别。
在数据源视图设计器中,将 FactSalesQuota 表的 FriendlyName 属性更改为
SalesQuotas。切换到 Analysis Services 教程多维数据集,然后单击 多维数据集结构 选项卡。
右键单击“ 度量值 ”窗格中的任意位置,单击“ 新建度量值组”,单击
SalesQuotas“ 新建度量值组 ”对话框,然后单击“ 确定”。度量
Sales Quotas值组显示在 “度量值 ”窗格中。 在“维度”窗格中,请注意,还定义了一个新的Date立方体维度,该维度基于Date数据库维度。 定义了与时间相关的新多维数据集维度,因为 Analysis Services 不知道与 FactSalesQuota 事实数据表中的 DateKey 列相关的现有时间相关多维数据集维度中哪些维度低于 Sales Quotas 度量值组。 稍后将在本主题的另一个任务中对此进行更改。请展开
Sales Quotas度量值组。在“ 度量值 ”窗格中,选择“ 销售额配额”,然后将 FormatString 属性的值设置为“属性”窗口中的 Currency 。
选择 “销售配额计数” 度量值,然后在“属性”窗口中将
#,#键入为 FormatString 属性的值。从
Sales Quotas度量值组中删除日历季度度量值。Analysis Services 检测到用于日历季度度量值的列是包含度量值的列。 但是,此列和 CalendarYear 列包含用于将“销售配额”度量值组链接到本主题后面的“日期”维度的值。
在“ 度量值 ”窗格中,右键单击
Sales Quotas度量值组,然后单击“ 新建度量值”。此时将打开 “新建度量值” 对话框,其中包含用法类型为求和的度量值的可用源列。
在“新建度量值”对话框中,在“使用方式”列表中选择“独特计数”,验证
SalesQuotas是否在“源表”列表中已选择“EmployeeKey”,然后单击“确定”。请注意,该度量值是在名为 Sales Quotas 1 的新度量值组中创建的。 SQL Server 中的唯一计数度量是在自己的度量值组中创建的,以优化处理性能。
请将 Employee Key Distinct Count 度量值的 Name 属性的值更改为
Sales Person Count,然后键入#,#作为 FormatString 属性的值。
按日期浏览销售配额度量组中的度量值
在“生成”菜单上,单击“部署 Analysis Services 教程”。
部署成功完成后,单击 Analysis Services 教程多维数据集的多维数据集设计器中的 “浏览器 ”选项卡,然后单击“ 重新连接 ”按钮。
单击 Excel 快捷方式,然后单击“ 启用”。
在数据透视表字段列表中,展开
Sales Quotas度量值组,然后将 “销售额配额 ”度量值拖到“值”区域。展开 “销售区域 ”维度,然后将 “销售区域 ”用户定义层次结构拖动到“行标签”。
请注意,Sales Territory 多维数据集维度与事实销售配额表之间并无直接或间接关系,如下图所示。
在本主题的下一系列步骤中,你将在此维度和此事实数据表之间定义引用维度关系。
将 “销售区域” 用户层次结构从“行标签”区域移动到“列标签”区域。
在数据透视表字段列表中,选择 “销售区域 ”用户定义的层次结构,然后单击右侧的向下箭头。
在筛选器中,单击“全选”复选框以清除所有选择, 然后选择“北美”。
在数据透视表字段列表中,展开
Date。将 Date.Fiscal Date 用户层次结构拖到行标签
在数据透视表中,单击行标签旁边的向下箭头。 清除除 2008 财年以外的所有年份。
请注意,月级别仅显示2007年7月成员,而不是2007年7月、2007年8月和2007年9月级别的成员,并且
Date级别仅显示2007年7月1日成员,而不是所有31天。 发生此行为的原因是,事实数据表中的数据粒度处于季度级别,而Date维度的数据粒度则为每日级别。 将在本主题的下一个任务中更改此行为。另请注意,月份和日级别的 销售额配额 值与季度级别的值相同,即 $13,733,000.00。 这是因为“销售配额”度量值组中的最低数据级别在季度级别。 将在第 6 课中更改此行为。
下图显示了 Sales Amount Quota 的值。
定义销售指标度量组的维度使用属性
打开“员工”维度的维度设计器,在“数据源视图”窗格中右键单击 SalesTerritoryKey,然后单击“从列新建属性”。
在 “属性 ”窗格中,选择 SalesTerritoryKey,然后在“属性”窗口中将 AttributeHierarchyVisible 属性设置为 False ,将 AttributeHierarchyOptimizedState 属性设置为 NotOptimized,并将 AttributeHierarchyOrdered 属性设置为 False。
需要此属性才能将 “销售区域 ”维度链接到
Sales Quotas“ 销售配额 1 ”度量值组作为引用维度。在 Analysis Services 教程多维数据集的多维数据集设计器中,单击“维度使用情况”选项卡,然后查看“销售配额 1”度量值组中的
Sales Quotas维度使用情况。请注意,员工和
Date数据立方体维度通过常规关系链接到Sales Quotasand Sales Quotas 1度量值组。 另请注意,Sales Territory 多维数据集维度未链接到这两个度量值组中的任意一个。单击 “销售区域 ”维度和
Sales Quotas度量值组交集处的单元格,然后单击“浏览”按钮(...)。此时将打开“ 定义关系 ”对话框。在 “选择关系类型 ”列表中,选择“ 引用”。
在 “中间维度 ”列表中,选择“ 员工”。
在 “引用维度属性 ”列表中,选择“ 销售区域”。
在 “中间维度属性 ”列表中,选择“ 销售区域键”。 (Sales Territory Region 属性的键列是 SalesTerritoryKey 列。)
验证是否选中了 “具体化 ”复选框。
单击 “确定” 。
单击 “销售区域 ”维度和 “销售配额 1 ”度量值组交集处的单元格,然后单击“浏览”按钮(...)。此时将打开“ 定义关系 ”对话框。
在 “选择关系类型 ”列表中,选择“ 引用”。
在 “中间维度 ”列表中,选择“ 员工”。
在 “引用维度属性 ”列表中,选择“ 销售区域”。
在 “中间维度属性 ”列表中,选择“ 销售区域键”。 (Sales Territory Region 属性的键列是 SalesTerritoryKey 列。)
验证是否选中了 “具体化 ”复选框。
单击 “确定” 。
删除
Date多维数据集的维度。不是采用四个与时间相关的多维数据集维度,而是在度量值组中使用 “订单日期” 多维数据集维度来作为制定销售配额的日期。 你还将使用此多维数据集维度作为多维数据集中的主要日期维度。
在 维度 列表中,将 Order Date 多维数据集维度重命名为
Date。重命名 Order Date 多维数据集维度
Date,使用户更容易理解其作为此多维数据集中的主要日期维度的角色。单击
Sales Quotas度量值组与Date维度交集的单元格中的浏览按钮(...)。在“定义关系”对话框中,在“选择关系类型”列表中选择“常规”。
在“粒度”属性列表中,选择“日历季度”。
请注意,由于选择了非关键属性作为粒度属性,将会出现警告。为了确保所有其它属性直接或间接地与粒度属性相关,必须指定它们为成员属性。
在“定义关系”对话框的“关系”区域中,将“日期”多维数据集维度表中的 CalendarYear 和 CalendarQuarter 维度列链接到“销售配额”度量值组来源表中的 CalendarYear 和 CalendarQuarter 列,然后单击“确定”。
注释
日历季度定义为 Sales Quotas 度量值组中日期多维数据集维度的粒度属性,但 Date 属性仍然是 Internet Sales 和 Reseller Sales 度量值组的粒度属性。
对 “销售配额 1” 度量值组重复前四个步骤。
定义日历季度属性与日期维度中的其他维度属性之间的属性关系
切换到
Date维度设计器以查看该维度,然后单击“属性关系”选项卡。请注意,虽然 Calendar Year 通过 日历学期 属性链接到 日历季度,但会计日历属性仅链接到彼此,它们未链接到 日历季度 属性,因此不会在
Sales Quotas度量值组中正确聚合。在关系图中,右键单击 “日历季度 ”属性,然后选择“ 新建属性关系”。
在“ 创建属性关系 ”对话框中, “源属性 ”为 “日历季度”。 将 相关属性 设置为 会计季度。
单击 “确定” 。
请注意,将显示一条警告消息,指出
Date维度包含一个或多个冗余属性关系,这些关系可能会阻止在非键属性用作粒度属性时聚合数据。删除 Month Name 属性与 Fiscal Quarter 属性之间的属性关系。
在“文件” 菜单上,单击“全部保存” 。
按日期浏览“销售配额度量值组”中的度量值
在“生成”菜单上,单击“部署 Analysis Services 教程”。
部署成功完成后,单击 Analysis Services 教程多维数据集的多维数据集设计器中的“浏览器”选项卡,然后单击“重新连接”。
单击 Excel 快捷方式,然后单击“ 启用”。
将 “销售额配额 ”度量值拖到“值”区域。
将 “销售区域 ”用户层次结构拖到“列标签”,然后筛选 北美。
将 Date.FiscalDate 用户层次结构拖到行标签,然后单击数据透视表上的 行标签 旁边的向下箭头,并清除 除 2008 财年以外的所有复选框,仅显示 2008 财年。
单击“确定”。
展开 2008 财年,展开 H1 FY 2008,然后展开 2008 年第 1 季度。
下图显示了 Analysis Services 教程多维数据集的数据透视表,其中“销售配额”度量值组已经正确地进行了维度设置。
请注意,财季层级的每个成员的值与季度层级相同。 以 2008 年第 1 季度为例 , 2008 年第一季度 9,180,000.00 美元的配额也是其每个成员的值。 发生此行为的原因是事实数据表中的数据粒度位于季度级别,日期维度的粒度也位于季度级别。 在第 6 课中,你将了解如何按比例分配每个月的季度金额。