多维数据集(转载的)

 

 您为什么应该构建多维数据集?

  将数据移出您的企业数据库并移入称作“数据市场”的结构中。查询数据市场当然具有其好处,并可能足以满足一些方案,但通过再一次重新将数据打包到一个称作多维数据集的结构中,可另外实现一些好处。实际上,数据市场作为数据通向其多维数据集中的最终目的地的中转站而存在,因此它在整个解决方案中仍然非常重要。

  构建用来存储数据的多维数据集的另一个好处是,对于不能轻松存储在关系数据市场中的计算而言,您可以集中管理其业务规则。此外,多维数据集结构可使编写用于对比逐年数据的查询的任务轻松很多,或者可使创建累积值(如今年迄今为止的销售量)的任务轻松很多。

  而且,您可获得透明管理多维数据集中的聚合数据的能力。为了提高包含大量数据的关系数据市场中的查询性能,数据库管理员经常会创建汇总表,以便为不需要事务级别详细信息的查询准备数据。SSAS 创建汇总表的逻辑等价表(称作“聚合”)并使它们保持最新。

  本文中我将继续介绍第一篇文章中介绍的方案。这些方案为通过这个系列构建的 BI 解决方案定义基本分析目标。该解决方案必须能够演示哪个销售渠道对于 Adventure Works、Internet Sales 或 Reseller Sales 更加有利可图,以及销售趋势是否指示特定产品的需求量正在增长或正在下降。BI 解决方案的源数据是 AdventureWorksDW2008 数据库,该数据库应用 Derek 的文章中描述的维度建模和 ETL 准则。

  您可以从 CodePlex(地址为 msftdbprodsamples.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=18407)下载用于构建适合 Adventure Works 的解决方案的示例数据库。利用作为源提供的数据市场,您随时可以构建 Analysis Services 2008 数据库。

  准备 Analysis Services 数据库

  第一步是在 Business Intelligence Development Studio (BIDS) 中创建项目。从 Microsoft SQL Server 2008 程序组中启动 BIDS,单击“文件”|“新建”|“项目”。在“新建项目”对话框中,选择“Analysis Services 项目”。在“名称”文本框中,键入 ssas_TECHNET_AW2008,然后根据需要更改项目的位置。单击“确定”创建项目。

  现在,添加一个数据源来定义数据市场的连接字符串。在解决方案资源管理器中,右键单击“数据源”文件夹,然后单击“新建数据源”。在“数据源向导”中,在“欢迎使用”页上单击“下一步”(如果尚未禁用)。在“选择如何定义连接”页上,单击“新建”来设置新连接。在“连接管理器”中,默认值是 SQL Server Native Client。此值对于此项目是正确的,但您还可以使用 OLE DB 或 .NET 提供程序来访问其他类型的数据。

  若要定义连接,请在“服务器名称”文本框中键入您的服务器名称,或从下拉列表中选择名称,然后在数据库下拉列表中选择“AdventureWorksDW2008”,并单击“确定”。当您返回到“数据源向导”中时,单击“下一步”。在“模拟信息”页上,选择“使用服务帐户”选项。服务帐户用于在将数据加载到您的 SSAS 数据库时从源中读取数据,且其必须具有读权限才能执行此操作。单击“下一步”,然后单击“完成”结束向导。

  创建数据源视图

  接下来,您将创建数据源视图 (DSV) 作为数据源中表或视图的抽象,您需要使用它来定义维度和多维数据集。如果您仅具有对数据市场的读权限并且无法在源处进行更改,则您可以方便地更改 DSV,而不用修改基础数据源。在解决方案资源管理器中,右键单击“数据源视图”文件夹,然后单击“新建数据源视图”。

  如有需要,在“欢迎使用”页上单击“下一步”。在“选择数据源”页上,选择您刚刚添加到项目的数据源,并单击“下一步”。通过双击所需的每个表或视图向 DSV 添加对象。若要创建能帮助您回答本文开头所提出的 BI 问题的 DSV,请向 DSV 添加下列表:DimDate、DimProduct、DimProductCategory、DimProductSubcategory、FactInternetSales 和 FactResellerSales。当您在学习如何使用 SSAS 时,最好从简单的 DSV 学起。如果需要支持 BI 解决方案的其他问题,您始终可以在以后添加更多表。当您添加完表后,在“数据源视图向导”中单击“下一步”,然后单击“完成”。 

点击查看更多TechNet精彩文章

 

  建议您,通过在 DSV 设计器的“表”窗格中选择每个表,并从每个表的 FriendlyName 属性中删除 Dim 和 Fact 前缀来简化表的名称。然后,您用来创建维度和多维数据集的向导将使用 FriendlyName 属性中的值向对象分配名称。图 1 中显示了完整的 DSV。

  图 1:数据源视图

  除了在 DSV 中更改表的属性之外,如果物理源没有定义表之间的逻辑主键或逻辑关系,则您还可以定义它们。如果这些定义在数据层未物理就绪或在 DSV 中未逻辑就绪,则 SSAS 将无法正确显示数据。您还可以添加命名计算,就好像向视图中添加派生列一样,也可以将表对象替换为命名查询,就好像创建视图一样。

  准备在 SSAS 中构建日期维度时,您需要向 Date 表添加两个命名计算(Quarter 和 Month),以将年份列与季度列和月份列连接起来。否则,当您要查看汇总数据时,数据将不会按照月份、季度和年份正常累积。若要为 Quarter 添加命名计算,请在设计器或“表”窗格中右键单击 Date 表,再单击“新建命名计算”。在“列名称”文本框中键入 Quarter。在“表达式”文本框中键入以下表达式:

  ’Qtr ‘ + convert(char(1), CalendarQuarter) + ‘ ‘ + convert(char(4), CalendarYear)

  单击“确定”,现在重复上述步骤来为 Month 添加命名计算,使用的表达式是:

  left(EnglishMonthName, 3) + ‘ ‘ + convert(char(4), CalendarYear)

  请注意,设计器中的 Date 表(如图 2 中所示)显示带有计算器图标的命名计算,以将它们与表中物理存在的列进行区分。通过右键单击表并单击“浏览数据”,可以查看添加命名计算的效果。BIDS 中将打开一个新窗口以显示源表中的数据。

  一直滚动到右侧时,您可以看到命名计算的值。在您继续构建维度之前,始终应使用“浏览数据”命令确认命名计算按预期方式显示。

  在 Analysis Services 中定义维度

  向 DSV 添加维度表后,您即可在 SSAS 数据库中创建维度。请注意,您使用维度可存储有关业务实体的信息,如人员、地点和事物。若要能回答本文开头所提出的 BI 问题,您需要为 Date 和 Product 创建维度。

  若要向项目添加维度,请在解决方案资源管理器中右键单击“维度”文件夹,并选择“新建维度”来启动“维度向导”。在“选择创建方法”页上,保留默认选择以使用现有表,因为您的 DSV 包含 DimDate 表。如果您基于包含日期的小事务表构建简单数据库,您可能不会构建数据市场,而是可能使用此页上的其他选项之一,在数据源中或在服务器上生成一个时间表。

  图 2 带有命名计算的 Date 表 

点击查看更多TechNet精彩文章

 

  在任一情况下,您需要为事务表中的数据提供一个开始日期和一个结束日期。SSAS 可以在数据源中创建并填充一个物理表,然后使用此数据源填充在 SSAS 数据库中维护的维度,也可以简单地在 SSAS 数据库单独维护维度。

  当您需要能够支持对数据源的关系查询时,您可以选择生成物理表。单击“下一步”继续。

  在“指定源信息”页上,从“主表”下拉列表中选择“日期”。注意,键列是 DateKey。该键列必须唯一标识表中的每条记录,以便 SSAS 返回查询结果时能够正确地对数据进行聚合或分组。然后,在“名称列”下拉列表中选择“FullDateAlternateKey”。SSAS 将名称列用作标签显示给用户,而不是显示键列。

  单击“下一步”。

  在“选择维度属性”页上,选择要包括在维度中的属性,然后使用这些属性定义层次结构或其他分组标签。

  是否包括维度表中的所有属性取决于您要在 BI 解决方案中支持的问题类型。应仅添加所需数量的属性以确保 SSAS 以最优方式执行,从而避免消耗不必要的存储空间并避免太多选项给用户造成混淆。对于此维度,请选择“Calendar Year”、“Quarter”和“Month”。单击“下一步”,然后单击“完成”。

  若要确保可以唯一标识每个属性,请更新 KeyColumn 属性。通过将此属性设置为键列,确保 Month 按数字顺序正确排序,而不是按月份名称的字母顺序排序(默认排序顺序)。

  若要更新 KeyColumn 属性,请在左侧的“属性”窗格中选择“Month”。在“属性”窗口中,单击“KeyColumns”属性,然后单击省略号按钮。在“键列”对话框中,单击左箭头清除当前分配,然后双击 CalendarYear 和 MonthNumberOfYear。现在,通过单击 NameColumns 属性框中的省略号按钮,为此属性分配一个标签。选择“EnglishMonthName”,并单击“确定”。

  重复上述步骤,将 Quarter 属性的 KeyColumns 属性设置为 CalendarYear 和 CalendarQuarter,并将 NameColumns 属性设置为 Quarter。

  现在,在解决方案资源管理器中维度显示为 Date.dim,而且维度设计器(如图 3 中所示)显示在 BIDS 的主工作区中。

  图 3 设计器中显示的日期维度

  您可以看到维度及其关联属性,包括左侧“属性”窗格中的键属性。如果您决定稍后添加更多属性,则可以将这些属性从“数据源视图”窗格逐一拖到“属性”窗格。您只有在启动新维度时才会使用“维度向导”,但稍后可在维度设计器中进行任何所需的更改。

  现在,使用“维度向导”创建 Product 维度,将 Product 用作主表,并将 EnglishProductName 用作名称列。因为 Product 维度是雪花型架构,所以该向导包含一个附加页面来确认您想要包括相关表 ProductSubcategory 和 ProductCategory。

  接下来,向维度添加 Color 和 Size 属性。请注意,该向导将自动为雪花型表选择键列 Product Subcategory Key 和 Product Category Key。您需要在这些属性对应的名称列中添加,但必须首先完成该向导,然后您才能修改属性。

  当显示维度设计器时,选择“属性”窗格中的“Product Category Key”。在“属性”中,找到“Name”属性,将名称更改为“Category”。在“属性”窗口中向下滚动,找到“NameColumn”属性。

  在属性文本框中单击以显示省略号按钮,单击此按钮,选择 EnglishProductCategoryName,然后单击“确定”。现在,重复上述步骤,将 Product Subcategory Key 重命名为 Subcategory,并将 EnglishProductSubcategoryName 指定为其名称列。最后,将 Product Key 属性重命名为 Product。

  添加层次结构

  请注意在“属性”窗格中维度名称 Product 下面显示的蓝色波浪线。当您将光标放在此线上方时,将出现一条警告消息“在非父子维度中创建层次结构。”此消息是内置在 SSAS 2008 中的最佳做法警告的一个示例,可帮助您正确构建 SSAS 数据库。通过单击文档工作区中的相应选项卡,或双击解决方案资源管理器中的 Date.dim,返回到 Date 维度设计器,在那里您将会看到相同的警告。

  出于几个原因,尤其是出于用户友好和优化目的,将层次结构添加到维度是公认的最佳做法。更具体地讲,层次结构为用户提供从汇总数据到详细数据要遵循的导航路径。此外,通过允许 SSAS 在用户查询之间计算和存储聚合,还可提高查询性能。

  例如,如果用户希望按年份查看经销商销售额,而且 Date 维度中的层次结构定义从键属性 (Date Key) 到 Calendar Year 属性的汇总路径,则 SSAS 可以在处理过程中按年份计算销售数据,然后将结果放入永久存储中。此聚合存储避免了查询时计算每年销售额的需要,而且这是与从关系数据市场检索数据或从多维度数据库(如 SSAS)检索数据的主要区别。 

点击查看更多TechNet精彩文章

 

  若要向 Date 维度添加层次结构,请在维度设计器中,将 Calendar Year 属性从“属性”窗格拖到“层次结构”窗格。在您添加第一个属性后,将出现一个层次结构对象,并且在刚刚添加的属性下面有一个新的空级别。通过将 Quarter 和 Month 属性分别放入空级别的空间内,将这两个属性添加到层次结构中。接下来,通过右键单击“层次结构”,再单击“重命名”并键入“Year”来重命名层次结构。

  尽管您添加了一个层次结构,但仍然出现关于 Date 维度的警告。将光标放在波浪线上可看到新警告“避免将属性的可见属性层次结构用作用户定义的层次结构中的级别。”这条消息建议您防止用户在属性已包含在层次结构中时查看属性本身。换句话说,用户只有在层次结构内部进行导航时才能查看属性。

  根据我的经验,您应该结合用户做出这个决定。如果您决定处理此警告,则选择“属性”窗格中的“Quarter”,然后在“属性”窗口中,将 AttributeHierarchyVisible 值更改为 False。

  属性关系

  在层次结构本身上显示另一条警告。在这种情况下,此消息将警告可能引发了性能问题,因为层次结构的一个或多个级别之间的属性关系丢失。属性关系由 SSAS 用来优化查询性能和聚合设计,以减少维度所需的存储量并加快数据库处理时间。

  单击维度设计器中的“属性关系”选项卡。(请注意,仅当您在使用 Analysis Services 2008 时此选项卡才可用。)默认情况下,所有属性直接与键属性 Date Key 相关。若要通过重新分配关系优化设计,则将 Month 对象拖到 Quarter 对象,然后将 Quarter 对象拖到 Year 对象。现在,设计器中的关系正确表示了从左至右每个级别两两之间的多对一关系,如图 4 中所示。

  图 4 属性关系

  接下来,向自上而下包含 Category、Subcategory 和 Product 的名为 Categories 的 Product 维度添加层次结构。创建层次结构之后,您会发现无需修复各级别之间的属性关系,这是因为 DSV 中已经定义了表与表之间的外键关系。不过,您可以根据需要将 AttributeHierarchyVisible 属性值设置为 False。

  现在,您的项目便包含了两个已正确定义层次结构和属性关系的维度。随着您更多地了解维度设计,您将会发现,可通过多个属性来优化性能和控制用户界面中的特定行为。

  另外,在更为复杂的 BI 解决方案中可能会存在更多维度。不过,此时您已掌握了维度的基本知识,并且具备了继续通过创建多维数据集来构建可用解决方案所需的内容。

  创建多维数据集

  与使用“维度向导”开始定义维度的过程相同,您可以使用“多维数据集向导”开始创建多维数据集。在解决方案资源管理器中,右键单击“多维数据集”文件夹,单击“新建多维数据集”,然后在“欢迎使用”页上单击“下一步”(如果适用)。在“选择创建方法”页上,保留默认选项。(如果您有一个设计需要手动创建或使用模板创建,则可以使用另外两个选项,然后让 SSAS 基于该设计在数据源中生成表。这需要您使用 Integration Services 填充数据,然后才可以浏览您的多维数据集。)单击“下一步”。

  在“选择度量值组表”页上,选择“Internet Sales”和“Reseller Sales”,并单击“下一步”。(度量值组表与事实数据表同步。)然后,该向导将显示在所选度量值组表中找到的所有数字列。按照您到目前为止一直采用的简单方法,通过清除页面顶部的“度量值”复选框来清除所有度量值,然后从每个组(Internet Sales 和 Reseller Sales)中选择以下度量值:Order Quantity、Total Product Cost 和 Sales Amount。

  您还可重命名此页上的度量值。只需右键单击度量值名称并键入新的名称,但要确保每个度量值名称唯一。度量值名称应当简短,但不能太短而让人难懂。重命名 Internet Sales 组中的度量值,如下所示:Internet Order Quantity、Internet Cost 和 Internet Sales。同样,将 Reseller Sales 度量值重命名为 Reseller Order Quantity、Reseller Cost 和 Reseller Sales。单击“下一步”。

  在“选择现有维度”页上,向导将显示您已创建的维度。单击“下一步”。如果 DSV 中有任何表尚未作为度量值组表引用或被现有维度引用,则将显示“选择新维度”页,以允许您快速添加您可能需要的任何其他维度。在这种情况下,清除 Internet Sales 和 Reseller Sales,因为您无需随维度一起创建这些表。(尽管从技术上说这些是度量值组表,但如果表中存在销售订单数,则可以创建维度以支持按照销售订单数来报告或分析销售额。)

  单击“下一步”,将多维数据集重命名为 Sales,然后单击“完成”。可喜可贺!

  您已成功构建了一个简单的多维数据集!多维数据集设计器将在左侧窗格中显示已添加到多维数据集的度量值组和维度,并在右侧窗格中显示源 DSV,如图 5 中所示。

  图 5 显示度量值组和维度的多维数据集设计器  

点击查看更多TechNet精彩文章

 

  构建多维数据集之后要执行的第一步就是设置每个度量值的 FormatString 属性,以便更容易地在多维数据集浏览器中查看值。执行此操作最快捷的方法就是在网络中查看度量值。在多维数据集设计器的工具栏中,单击从左数的第五个按钮以从“树视图”切换到“网格视图”。在“网格视图”中,您可使用 Ctrl 键来一次选择多个度量值。首先,选择“Internet Order Quantity”和“Reseller Order Quantity”。在“属性”窗口的“FormatString”下拉列表中,选择“标准”。然后,选择所有其余度量值以将 FormatString 属性设置为 Currency。

  添加计算

  SSAS 的一项强大功能就是可以使用多维表达式语言 (MDX) 添加计算。如果您能在 Excel 中编写公式,则可以使用简单 MDX 表达式在多维数据集中创建计算。有关更多复杂的表达式,您需要花费一些时间通过学习和大量实践来了解 MDX。

  请记住,此解决方案的设计目标之一就是通过销售渠道来度量收益。多维数据集此时包含您计算收益所需的度量值:Internet Cost、Internet Sales、Reseller Cost 和 Reseller Sales。销售与成本之间的差异就是毛利,但这种计算提供的是绝对美元数,对渠道之间的对比毫无用处。除了毛利,您还需要通过用销售额除以毛利来计算毛利润率。

  在多维数据集设计器中,单击“计算”选项卡,即从左起的第三个选项卡。然后单击工具栏上的“新建计算成员”按钮,即从左起的第五个按钮。在“名称”文本框中,键入“[Internet Gross Margin]”。

  当名称包含空格时,需使用括号。在“表达式”文本框中,键入“[Internet Sales] - [Internet Cost]”,然后在“格式字符串”下拉列表中选择“Currency”。现在重复上述步骤以添加图 6 中显示的计算。

  图 6 向多维数据集添加计算

  从 BIDS 部署 Analysis Services 数据库

  到目前为止,虽然您已构建了在服务器上创建 SSAS 数据库所需的对象,但该数据库本身还不存在。您在 BIDS 中执行的设计任务将产生必须部署到服务器的 XML 文件。

  部署这些文件后,您即可处理数据库,包括执行构建 XML 文件所定义的存储结构所需的命令,以及通过执行对指定数据源的查询填充这些结构。

  在 BIDS 内,通过右键单击解决方案资源管理器中的项目然后单击“部署”,可启动所有这些活动。“部署进度”窗口将打开,以向您显示其执行的每个步骤以及对应步骤成功与否。

  部署完项目后,您仍可在设计器中进行更改。只需按照上述操作再次部署项目,即可将您的更改移动到服务器并启动处理过程。当系统提示将覆盖您的数据库时,如果您确定自己是唯一一个对数据库进行更改的用户,则单击“是”。

  有时您在部署后进行的更改将不会触发处理数据库的命令。在这种情况下,只需右键单击您所更改的维度或多维数据集,然后单击“处理”和“运行”。如果您使用“处理全部”选项(对维度做出重大结构更改时,此选项是必需的)来处理维度,则您还可能需要处理多维数据集。  

点击查看更多TechNet精彩文章

 

  在 BIDS 中浏览多维数据集

  在部署的每个阶段,只要成功部署并处理了解决方案,您就可从用户的角度查看进度。在多维数据集设计器中,单击“浏览器”选项卡。左侧窗格以元数据树结构显示 SSAS 数据库中的对象(如图 7 中所示)。树顶部的节点表示多维数据集。展开 Measures 节点及其包含的文件夹以查看所有可用的度量值,然后展开 Order Date 和 Product 节点以查看这些维度中的属性。

  图 7 Sales 多维数据集元数据树

  当您只创建一个 Date 维度时,您可能想知道为什么多维数据集会包含 Due Date、Order Date 和 Ship Date。这些多维数据集维度称为“角色扮演维度”,因为它们表示同一维度的不同逻辑形式。

  当您包含 Date 维度时,它们会自动显示在多维数据集中,这是因为事实表包含三个不同的外键列,而这三个外键列反过来全部与 Date 维度基于的单个表相关,以便单独跟踪订单、发货和到期事件。(如果这些角色扮演日期对分析没有任何帮助,则您可删除设计器的“多维数据集结构”页上不需要的任何日期。)

  若要查看多维数据集数据,请将对象从元数据树中拖动到设计器的中心窗格。首先,将 Internet Sales 拖动到标记为 Drop Totals 或 Detail Fields Here 的区域。

  然后,重复此过程以将 Internet Gross Margin Pct、Reseller Sales 和 Reseller Gross Margin Pct 添加到网格中。现在此简单查询的结果显示在多维数据集浏览器中(如图 8 中所示),您可以看到 Internet Sales 的收益要比 Reseller Sales 大很多。

  图 8 多维数据集浏览器中的查询结果  

点击查看更多TechNet精彩文章

 

  您可通过将属性拖动到行、列或筛选器(统称为“轴”)的网格部分,或将属性和度量值拖出网格,从而继续研究这些结果。将对象添加到轴以优化查询的过程称为“BI 用户分割与切片”,这也是在无需编写任何代码的情况下查询数据非常快速的方法。例如,若要按年分隔,则将 Order Date.Year 拖到标记为 Drop Row Fields Here 的部分。

  因为 Order Date.Year 是由一个金字塔形图标指示的层次结构,所以您可以通过展开一个或多个年份,向下钻取以按季度进行分割。同样,您也可以通过将 Categories 拖到度量值上面的列轴来按类别进行切片。

  将对象置于行或列上之后,您可通过单击标题中的箭头,对项目列表进行筛选。若要删除网格中的“组件”,请单击 Category 标题中的箭头,清除“组件”复选框并单击“确定”。接下来,若要简化视图,请将 Internet Sales 和 Reseller Sales 拖出网格。现在,您可轻松将 Internet 渠道和 Reseller 渠道的收益按年份、季度和产品类别进行比较,如图 9 中所示。

  图 9 按年份、季度和类别显示的销售渠道收益

  与用户共享多维数据集

  默认情况下,只有服务器管理员才可访问多维数据集。但是,将您的多维数据集部署到 Analysis Server 之后,您即可设置权限,以授予用户访问多维数据集的权限,并允许用户使用自己喜欢的工具浏览多维数据集。Microsoft Excel 2007 是进行交互性浏览的常见选择,但您也可以使用 Reporting Services 来基于多维数据集数据分发报表,对此我会在以后的文章中作出解释。

  应用您的新技能

  现在,您已使用示例 AdventureWorks 数据构建了一个小型数据库,您应该通过构建一个简单的多维数据集,将所学的技能应用到您自己的数据中。如果您具有一个简单的设计和相对较小的数据集(例如,不到几百万行),则您无需构建和维护数据市场,即可构建一个数据库。只需设置一个数据源视图,便可使用将数据尽可能构造为星型架构的命名查询来查询源。当您的数据源具有新数据时,您只需对 SSAS 数据库执行完全处理,即可使其与数据源保持同步。

  如果您有更多数据要放入多维数据集中,则应在联机丛书中阅读有关 SSAS 的更多内容以及其他资源,因为本文解释的只是您构建简单多维数据集需要知道的最基本的知识点。例如,在本文开头,我提到了 SSAS 的一大好处是聚合管理,而要更多解释这个主题则超出了本文的范围。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值