定义维度时,通常每个事实都联接到一个维度成员,而单个维度成员可以与许多不同的事实相关联。 例如,每个客户可以有多个订单,但每个订单属于单个客户。 在关系数据库术语中,这称为 一对多关系。 但是,有时单个事实可以连接到多个维度成员。 在关系数据库术语中,这称为 多对多关系。 例如,客户可能有多个购买原因,并且购买原因可以与多个购买相关联。 联接表用于定义与每次购买相关的销售理由。 然后,从此类关系构造的“销售原因”维度将具有多个与单个销售事务相关的成员。 当维度与事实数据表不直接相关时,多对多维度将维度模型扩展到经典星型架构之外,并支持复杂的分析。
在 Analysis Services 中,通过指定联接到维度表的中间事实数据表来定义维度组与度量值组之间的多对多关系。 中间事实数据表又联接到联接事实数据表的中间维度表。 中间事实数据表与两个维度表以及中间维度之间的多对多关系,创建了主要维度成员与关系指定的度量值组中度量值之间的多对多关系。 若要通过中间度量值组定义维度与度量值组之间的多对多关系,中间度量值组必须与原始度量值组共享一个或多个维度。
使用多对多维度时,值是唯一求和的,这意味着它们不会多次聚合到“全部”成员中。
注释
为了支持多对多维度关系,必须在涉及的所有表之间的数据源视图中定义主键外键关系。 否则,在多维数据集设计器的 “维度使用情况 ”选项卡中建立关系时,将无法选择正确的中间度量值组。
有关详细信息,请参阅 维度关系,并 定义多对多关系和多对多关系属性。
在本主题的任务中,您需要定义“销售原因”维度和“销售原因”度量组,并通过“销售原因”度量组定义“销售原因”维度和“Internet Sales”度量组之间的多对多关系。
将所需表添加到数据源视图
打开 Adventure Works DW 2012 数据源视图设计器。
右键单击 “关系图管理器 ”窗格中的任意位置,单击“ 新建关系图”,并指定
Internet Sales Order Reasons
为此新关系图的名称。将 InternetSales 表从“表”窗格拖到“关系图”窗格。
右键单击 “关系图 ”窗格中的任意位置,然后单击“ 添加/删除表”。
在 “添加/删除表 ”对话框中,将 DimSalesReason 表和 FactInternetSalesReason 表添加到 包含的对象 列表中,然后单击“ 确定”。
请注意,相关表格间的主键-外键关系会自动建立,因为这些关系是在基础关系型数据库中定义的。 如果未在基础关系数据库中定义这些关系,则必须在数据源视图中定义它们。
在 “格式 ”菜单上,指向 “自动布局”,然后单击“ 关系图”。
在“属性”窗口中,将 DimSalesReason 表的 FriendlyName 属性更改为
SalesReason
,然后将 FactInternetSalesReason 表的 FriendlyName 属性更改为InternetSalesReason
。在“ 表 ”窗格中,展开 InternetSalesReason (dbo)。FactInternetSalesReason),单击 SalesOrderNumber,然后在“属性”窗口中查看此数据列的 DataType 属性。
请注意, SalesOrderNumber 列的数据类型是字符串数据类型。
查看表中其他列的
InternetSalesReason
数据类型。请注意,此表中其他两列的数据类型是数值数据类型。
在表窗格中,右键单击InternetSalesReason (dbo.FactInternetSalesReason),然后单击浏览数据。
请注意,对于每个订单中的每个行号,键值标识购买该行项的销售原因,如下图所示。
用于确定购买销售原因的键值用于确定购买销售原因的键值
定义中间度量值组
切换到 Analysis Services 教程多维数据集的多维数据集设计器,然后单击 “多维数据集结构 ”选项卡。
右键单击 “度量值 ”窗格中的任意位置,然后单击“ 新建度量值组”。 有关详细信息,请参阅 在多维模型中创建度量值和度量值组。
在“新建度量值组”对话框中,从
InternetSalesReason
数据源视图列表中选择一个表,然后单击“确定”。请注意,Internet 销售原因 度量组现在显示在 度量值窗格中。
展开 因特网销售原因 度量组。
请注意,仅为此新度量值组定义了单个度量值,即 Internet Sales Reason Count 度量值。
选择 “Internet 销售原因计数 ”,并在“属性”窗口中查看此度量值的属性。
请注意,此度量值的 AggregateFunction 属性定义为 Count 而不是 Sum。 Analysis Services 选择了 Count ,因为基础数据类型是字符串数据类型。 基础事实数据表中的其他两列未选择为度量值,因为 Analysis Services 将其检测为数字键而不是实际度量值。 有关详细信息,请参阅 定义半累加性行为。
在“属性”窗口中,将 Internet 销售原因计数指标的 Visible 属性更改为 False。
此度量值仅用于联接将在 Internet Sales 度量值组旁边定义的“销售原因”维度。 用户不会直接浏览此度量值。
下图显示了互联网销售原因计数度量值的属性。
定义多对多维度
在解决方案资源管理器中,右键单击 “维度”,然后单击“ 新建维度”。
在“ 欢迎使用维度向导” 页上,单击“ 下一步”。
在 “选择创建方法 ”页上,验证是否选择了 “使用现有表 ”选项,然后单击“ 下一步”。
在 “指定源信息 ”页上,验证是否选择了 Adventure Works DW 2012 数据源视图。
在 “主表 ”列表中,选择
SalesReason
。在 “键列” 列表中,验证 SalesReasonKey 是否已列出。
在 “名称”列 列表中,选择 “SalesReasonName”。
单击 “下一步” 。
在 “选择维度属性 ”页上,将自动选择 “销售原因键 ”属性,因为它是键属性。 选中 “销售原因原因类型” 属性旁边的复选框,将其名称
Sales Reason Type
更改为,然后单击“ 下一步”。在“ 完成向导 ”页上,单击“ 完成 ”以创建“销售原因”维度。
在“文件” 菜单上,单击“全部保存” 。
在“销售原因”维度的“属性”窗格中,选择“销售原因”键,然后将“属性”窗口中的“名称”属性更改为
Sales Reason.
在维度设计器的层次结构窗格中,创建一个销售原因用户层次结构,其中按照顺序包含
Sales Reason Type
级别和销售原因级别。在“属性”窗口中,将
All Sales Reasons
定义为 Sales Reasons 层次结构的 AllMemberName 属性的值。将
All Sales Reasons
定义为 Sales Reason 维度的 AttributeAllMemberName 属性的值。若要将新创建的维度作为立方体维度添加到 Analysis Services 教程多维数据集,请打开 多维数据集设计器。 在 “多维数据集结构 ”选项卡上,右键单击“ 维度 ”窗格中,然后选择“ 添加多维数据集维度”。
在“ 添加多维数据集维度 ”对话框中,选择“ 销售原因 ”,然后单击“ 确定”。
在“文件” 菜单上,单击“全部保存” 。
定义多对多关系
切换到 Analysis Services 教程多维数据集的多维数据集设计器,然后单击“ 维度使用情况 ”选项卡。
请注意, “销售原因 ”维度具有与 Internet Sales Reason 度量值组定义的常规关系,但没有与 Internet Sales 或 Reseller Sales 度量值组定义的关系。 另请注意,Internet 销售订单详细信息维度具有与 Internet 销售原因维度定义的常规关系,后者又具有与 Internet Sales 度量值组的事实关系。 如果此维度不存在(或与 Internet Sales Reason 和 Internet Sales 度量值组的关系不存在的另一个维度),则无法定义多对多关系。
单击 Internet Sales 度量值组和 “销售原因 ”维度交集处的单元格,然后单击“浏览”按钮(...)。
在“定义关系”对话框中,选择“选择关系类型”列表中的“多对多”。
需要定义一个用于连接“销售原因”维度与“互联网销售”度量组的中间度量组。
在 中间度量值组 列表中,选择 “Internet 销售原因”。
下图显示了“ 定义关系 ”对话框中的更改。
单击 “确定” 。
请注意表示“销售原因”维度与互联网销售度量值组之间的关系的多对多图标。
浏览多维数据集和多对多维度
在“生成”菜单上,单击“部署 Analysis Services 教程”。
部署成功完成后,切换到 Analysis Services 教程多维数据集的多维数据集设计器中的 “浏览器 ”选项卡,然后单击“ 重新连接”。
将 Internet Sales-Sales Amount 度量值添加到数据窗格的数据区域。
将 “销售原因 ”用户定义的层次结构从 “销售原因 ”维度添加到数据窗格的行区域。
在元数据窗格中,依次展开“客户”、“位置”、“客户地理位置”、“成员”、“所有客户”、“澳大利亚”,右键单击“昆士兰”,然后单击“添加到筛选器”。
展开
Sales Reason Type
级别的每个成员,以查看昆士兰州客户通过 Internet 购买 Adventure Works 产品的每个原因所关联的美元价值。请注意,与每个销售原因关联的总计总和大于总销售额。 这是因为一些客户引用了购买的多个原因。
下图显示了 Cube Designer 的筛选器窗格和数据窗格。