翻译是在特定语言中 Microsoft SQL Server 2005 Analysis Services (SSAS) 对象(例如,度量值组、度量值、维度、属性、层次结构、KPI、操作和计算成员)的名称的表示形式。翻译为可支持多种语言的客户端应用程序提供了服务器支 持。使用这样的客户端,客户端就可以将区域设置标识符 (LCID) 传递给 Analysis Services 实例,该实例则使用 LCID 来确定在为 Analysis Services 对象提供元数据时要使用哪一组翻译。如果 Analysis Services 对象不包含该语言的翻译或不包含指定对象的翻译,则在将该对象元数据返回给客户端时将使用默认语言。例如,如果一个法国的业务用户从使用法语区域设置的工 作站访问多维数据集,则存在法语翻译时,此业务用户将看到法语的成员标题和成员属性值。但是,如果一个德国的业务用户从使用德语区域设置的工作站上访问同 一个多维数据集,则此业务用户将看到德语的成员标题和成员属性值。
应当在相应维度的维度设计器中的“翻译”选项卡上和在多维数据集设计器中的“翻译”选项卡上定义维度元数据的翻译。可以使用维度设计器的“翻译”选项卡,不只为属性标题,而且也为该属性所代表的成员的标题定义翻译。有关详细信息,请参阅维度翻译、多维数据集翻译、使用翻译 (SSAS)。
在此主题的任务中,将为“时间”维度中的一组有限的维度对象和 Analysis Services 教程多维数据集中的多维数据集对象,定义元数据翻译。然后浏览这些维度和多维数据集对象,以检查元数据翻译。
为“时间”维度元数据指定翻译
为“时间”维度元数据指定翻译
-
打开“时间”维度的维度设计器,再单击“翻译”选项卡。
每个维度对象的元数据将以默认语言显示,如下图所示。Analysis Services 教程多维数据集中的默认语言为英语。
-
在“翻译”选项卡的工具栏上,单击“新建翻译”。
语言列表将显示在“选择语言”对话框中。
-
单击“西班牙语(西班牙)”,然后单击“确定”。
将显示一个新列,在其中您可以将要翻译的元数据对象定义为用西班牙语翻译。在本教程中,仅翻译了少量对象来举例说明此过程。
-
在“翻译”选项卡的工具栏上,单击“新建翻译”,并在“选择语言”对话框中单击“法语(法国)”,然后单击“确定”。
将出现另一个语言列,您将在其中定义法语翻译,如下图所示。
-
在“时间”维度的“标题”对象行中,请在“西班牙语(西班牙)”翻译列中键入 Tiempo,并在“法语(法国)”翻译列中键入 Temps。
-
在“时间”维度的“所有时期”对象的行中,请在“西班牙语(西班牙)”翻译列中键入 Todos los Períodos,并在“法语(法国)”翻译列中键入 Toutes les Périodes。
-
在“月份名称”属性的“标题”对象的行中,请在“西班牙语(西班牙)”翻译列中键入 Mes del Año,并在“法语(法国)”翻译列中键入 Mois d'Année。
注意,输入这些翻译时,将出现省略号 (…),如下图所示。单击此省略号可以指定为属性层次结构的每个成员提供翻译的基础表中的列。
-
在“月份名称”属性的“西班牙语(西班牙)”翻译中单击省略号 (…)。
将出现“翻译属性数据”对话框。
-
在“翻译列”列表中,选择 SpanishMonthName,如下图所示。
-
单击“确定”,然后在“月份名称”属性的“法语(法国)”翻译中单击省略号 (…)。
-
在“翻译列”列表中,选择 FrenchMonthName,然后单击“确定”。
此过程中的步骤阐释了为维度对象和成员定义元数据翻译的过程。
为 Analysis Services 教程多维数据集元数据指定翻译
为 Analysis Services 教程多维数据集元数据指定翻译
-
请切换到 Analysis Services 教程多维数据集的多维数据集设计器,然后切换到“翻译”选项卡。
每个多维数据集对象的元数据将以默认语言显示,如下图所示。Analysis Services 教程多维数据集中的默认语言为英语。
-
在“翻译”选项卡的工具栏上,单击“新建翻译”。
语言列表将显示在“选择语言”对话框中。
-
选择“西班牙语(西班牙)”,然后单击“确定”。
将显示一个新列,在其中您可以将要翻译的元数据对象定义为用西班牙语翻译。在本教程中,仅翻译了少量对象来举例说明此过程。
-
在“翻译”选项卡的工具栏上,单击“新建翻译”,并在“选择语言”对话框中选择“法语(法国)”,然后单击“确定”。
将出现另一个语言列,您将在其中定义法语翻译。
-
在“Internet 销售”度量值组的“标题”对象的行中,请在“西班牙语(西班牙)”翻译列中键入 Ventas del lnternet,并在“法语(法国)”翻译列中键入 Ventes D'Internet。
-
在“Internet 销售额”度量值的“标题”对象的行中,请在“西班牙语(西班牙)”翻译列中键入 Cantidad de las Ventas del Internet,并在“法语(法国)”翻译列中键入 Quantité de Ventes d'Internet。
此过程中的步骤阐释了为多维数据集对象定义元数据翻译的过程。
使用翻译浏览多维数据集
使用翻译浏览多维数据集
-
在“生成”菜单上,单击“部署 Analysis Services 教程”。
-
成功完成部署后,请切换到“浏览器”选项卡,然后单击“重新连接”。
-
从“数据”窗格中删除所有层次结构和度量值,并在“透视”列表中选择 Analysis Services 教程,然后验证“Analysis Services 教程”是否出现在“语言”列表中。
-
在“元数据”窗格中,展开“度量值”,然后展开“Internet 销售”。
请注意,“Internet 销售额”度量值将以英文形式出现在此度量值组中。
-
在工具栏上,选择“语言”列表中的“西班牙语(西班牙)”。
注意,“元数据”窗格中的项将重新填充。重新填充“元数据”窗格中的项之后,注意“Internet 销售额”度量值将不再出现在“Internet 销售”显示文件夹中。而是以西班牙语出现在名为 Ventas del lnternet 的新的显示文件夹中,如下图所示。
-
在“元数据”窗格中,右键单击 Cantidad de las Ventas del Internet,然后选择“添加到数据区域”。
-
在“元数据”窗格中,展开“日期”,然后展开“日历”,右键单击“日期.日历时间”,选择“添加到行区域”。
-
在“数据”窗格中,依次展开 CY 2004、H1 CY 2004 以及 Q1 CY 2004。
注意,月份名称将以西班牙语显示,如下图所示。
-
在工具栏上,选择“语言”列表中的“法语(法国)”。
注意,月份名称现在将以法语显示,并且度量值名称现在也以法语显示。
通过下载并安装已更新的示例,可以获得第 9 课中使用的完整项目。有关详细信息,请参阅安装示例中的“获取已更新的示例”。
|
透视可以出于特定目的简化多维数据集的视图。默认情况下,用户可以查看多维数据集中对其有查看权限的所有元素。有关详细信息,请参阅配置对 Analysis Services 的访问权限。 用户查看整个 Microsoft SQL Server 2005 Analysis Services (SSAS) 多维数据集时所看到的内容是该多维数据集的默认透视。对于导航视图的用户,尤其对于只需与多维数据集的一小部分交互就能满足其商业智能和报表需求的用户来 说,整个多维数据集的视图将是非常复杂的。若要降低多维数据集明显的复杂性,可以创建多维数据集的可查看子集,这称为“透视”,透视可 以只向用户显示多维数据集中的度量值组、度量值、维度、属性、层次结构、关键性能指标 (KPI)、操作和计算成员的已定义部分。使用不是针对以前版本的 Analysis Services 而编写的客户端应用程序来说,这种做法可能特别有用。例如,这些客户端不具有显示文件夹或透视的概念,但对于较早的客户端,透视的显示方式类似于多维数据 集。有关详细信息,请参阅透视 和定义和配置透视。
透视不是安全机制,而是用于提供更好用户体验的工具。透视的所有安全性都从基础多维数据集继承。
|
在 SQL Server Analysis Services 中定义新透视时,应当首先在多维数据集设计器中的“透视”选项卡的工具栏上单击“新建透视”,再定义透视的名称。创建新透视时,多维数据集中出现在“多维数据集对象”列表中的所有 Analysis Services 对象初始都会显示在透视中。若要删除这些对象,只需清除要从透视中删除的对象的复选框。
在此主题的任务中,将定义几个不同透视,然后通过每个新透视来浏览多维数据集。
定义“Internet 销售”透视
定义“Internet 销售”透视
-
打开 Analysis Services Tutorial 多维数据集的多维数据集设计器,然后单击“透视”选项卡。
所有对象和它们的对象类型都将出现在“透视”窗格中,如下图所示。
-
在“透视”选项卡的工具栏上,单击“新建透视”。
新透视将显示在“透视名称”列中,并且默认透视名称为“透视”,如下图所示。注意,每个对象的复选框均已选中;除非您清除了对象的复选框,否则此透视与此多维数据集的默认透视是相同的。
-
将透视名称更改为 Internet Sales。
-
将“Internet 销售额”设置为默认度量值。
当用户通过使用此透视来浏览多维数据集时,此度量值将是用户所看到的度量值(除非指定了其他度量值)。
还可以在多维数据集的“多维数据集结构”选项卡上的“属性”窗口中,为整个 Analysis Services Tutorial 多维数据集设置默认度量值。 -
请清除下列对象的复选框:
- “分销商销售”度量值组
- “销售配额”度量值组
- “销售 Quotas1”度量值组
- “分销商”多维数据集维度
- “分销商所在地域”多维数据集维度
- “销售区域”多维数据集维度
- “雇员”多维数据集维度
- “促销”多维数据集维度
- “分销商收入”KPI
- “大型分销商”命名集
- “总销售额”计算成员
- “总产品成本”计算成员
- “分销商 GPM”计算成员
- “总 GPM”计算成员
- “所有产品的分销商销售额比率”计算成员
- “所有产品的总销售额比率”计算成员
这些对象与“Internet 销售”无关。
在每个维度中,还可以单独选择希望出现在透视中的用户定义层次结构和属性。 - “分销商销售”度量值组
定义“分销商销售”透视
定义“分销商销售”透视
-
在“透视”选项卡的工具栏上,单击“新建透视”。
-
将新透视的名称更改为 Reseller Sales。
-
将“分销商销售额”设置为默认度量值。
当用户通过使用此透视来浏览多维数据集时,此度量值将是用户所看到的度量值(除非指定了其他度量值)。
-
请清除下列对象的复选框:
- “Internet 销售”度量值组
- “Internet 销售原因”度量值组
- “客户”多维数据集维度
- “Internet 销售订单详细信息”多维数据集维度
- “销售原因”多维数据集维度
- “Internet 销售详细信息钻取操作”钻取操作
- “总销售额”计算成员
- “总产品成本”计算成员
- Internet GPM 计算成员
- “总 GPM”计算成员
- “所有产品的 Internet 销售额比率”计算成员
- “所有产品的总销售额比率”计算成员
这些对象与“分销商销售”无关。
- “Internet 销售”度量值组
定义“销售汇总”透视
定义“销售汇总”透视
-
在“透视”选项卡的工具栏上,单击“新建透视”。
-
将新透视的名称更改为 Sales Summary。
不能将计算度量值指定为默认度量值。 -
请清除下列对象的复选框:
- “Internet 销售”度量值组
- “分销商销售”度量值组
- “Internet 销售原因”度量值组
- “销售配额”度量值组
- “销售 Quotas1”度量值组
- “Internet 销售订单详细信息”多维数据集维度
- “销售原因”多维数据集维度
- “Internet 销售详细信息钻取操作”钻取操作
- “Internet 销售”度量值组
-
选中以下对象的复选框:
- “Internet 销售计数”度量值
- “分销商销售计数”度量值
- “Internet 销售计数”度量值
通过每个透视浏览多维数据集
通过每个透视浏览多维数据集
-
在“生成”菜单上,单击“部署 Analysis Services 教程”。
-
成功完成部署后,请切换到“浏览器”选项卡,然后单击“重新连接”。
-
从“数据”窗格中清除所有度量值和层次结构,并从“筛选器”窗格中清除所有维度。
-
在“元数据”窗格中检查度量值和维度。
注意,所有已定义的度量值和度量值组都将出现。
-
在“浏览器”选项卡的工具栏上,选择“透视”列表中的“Internet 销售”,然后查看“元数据”窗格中的度量值和维度。
注意,只那些为“Internet 销售”透视指定的对象才会出现,如下图所示。
-
在“元数据”窗格中,展开“度量值”。
请注意,只显示“Internet 销售”度量值组,以及 Internet GPM 和“所有产品的 Internet 销售额比率”计算成员。
-
展开“Internet 销售”,右键单击“Internet 销售额”,然后选择“添加到数据区域”。
此度量值将出现在“数据”窗格中。
-
在“浏览器”选项卡的工具栏上的“透视”列表中,选择“分销商销售”。
请注意,“Internet 销售额”度量值不再出现于“数据”窗格中。
-
在“元数据”窗格中,展开“度量值”。
请注意,“Internet 销售”度量值组不再出现于度量值列表中。
-
在“浏览器”选项卡的工具栏上的“透视”列表中,选择“销售汇总”。
-
在“元数据”窗格中,依次展开“度量值”、“Internet 销售”和“分销商销售”。
注意,在每个度量值组中,只出现单个度量值,如下图所示。
在本教程的第 5 课中,您已经了解了如何定义事实维度以便用户可以按事实维度的成员对度量值进行维度化,并返回有关特定事实度量值的详细信息(如订单详细信息)。如果按事 实维度来维度化事实数据,而不正确筛选查询所返回的数据,可能导致所有用户的查询性能都变慢,而这会使用户无法正常使用。通过定义钻取操作以返回同类信 息,并对返回的总行数进行限制,可以极大地提高所有用户的查询性能,从而消除这个问题。
在本主题的任务中,将定义钻取操作,以返回通过 Internet 对客户进行销售的订单详细信息。
定义钻取操作属性
定义钻取操作属性
-
在 Analysis Services Tutorial 多维数据集的多维数据集设计器中,单击“操作”选项卡。
“操作”选项卡中包括几个窗格。在选项卡的左侧是“操作组织程序”窗格和“计算工具”窗格。这两个窗格的右侧是“显示”窗格,其中可以显示“操作组织程序”窗格中所选操作的详细信息。
下图显示了多维数据集设计器的“操作”选项卡。
-
在“操作”选项卡上,单击“新建钻取操作”。
“显示”窗格中将出现空白操作模板。
-
在“名称”框中,将此操作的名称更改为 Internet Sales Details Drillthrough Action。
-
在“度量值组成员”列表中,选择“Internet 销售”。
-
在“钻取列”框中,选择“维度”列表中的“Internet 销售订单详细信息”。
-
在“返回列”列表中,选中“项说明”和“订单号”复选框,再单击“确定”。下图显示至此在该操作过程中操作模板的应有外观。
-
展开“附加属性”框,如下图所示。
-
在“最大行数”框中键入 10。
-
在“标题”框中,键入 Drillthrough to Order Details…。
这些设置将限制返回的行数,并指定在客户端应用程序菜单中将出现的标题。下图显示了“附加属性”框中的这些设置。
使用钻取操作
使用钻取操作
-
在“生成”菜单上,单击“部署 Analysis Services 教程”。
-
部署成功完成后,在 Analysis Services Tutorial 多维数据集的多维数据集设计器中单击“浏览器”选项卡,再单击“重新连接”。
-
从“数据”窗格中删除所有层次结构和度量值,然后删除“筛选器”窗格中的所有维度成员。
-
将“Internet 销售额” 度量值添加到数据区域。
-
将“客户所在地域”用户定义层次结构从“客户”维度的“位置”文件夹添加到“筛选器”窗格。
-
在“筛选表达式”列表中,依次展开“全部客户”、Australia、Queensland、Brisbane、4000,然后选中 Adam Powell 复选框,再单击“确定”。
Adventure Works Cycles 对 Adam Powell 的产品销售总额将显示在数据区域中。
-
单击“数据”窗格中的数据单元,然后右键单击该数据单元并单击“钻取订单详细信息”。
交付给 Adam Powell 的订单的详细信息将显示在“数据示例查看器”中,如下图所示。但是,某些其他详细信息也会是有用的,如订单日期、截止日期和发运日期。在下一个过程中,您将添加这些其他详细信息。
-
单击“关闭”,以关闭“数据示例查看器”窗口。
修改钻取操作
修改钻取操作
-
打开“Internet 销售订单详细信息”维度的维度设计器。
注意,仅为此维度定义了三个属性。
-
在“数据源视图”窗格中,右键单击空白的区域,再单击“显示所有表”。
-
在“格式”菜单上,指向“自动布局”,然后单击“关系图”。
-
右键单击“数据源视图”窗格中的空白区域,再依次单击“查找表”、dbo.FactInternetSales 和“确定”,以找到 InternetSales (dbo.FactInternetSales) 表。
-
基于以下列创建新属性:
- OrderDateKey
- DueDateKey
- ShipDateKey
- OrderDateKey
-
将“截止日期键”特性的“名称”属性更改为“截止日期”,再将此特性的“名称列”属性更改为 DimTime.SimpleDate (WChar)。
-
将“订单日期键”特性的“名称”属性更改为“订单日期”,再将此特性的“名称列”属性更改为 DimTime.SimpleDate (WChar)。
-
将“发运日期键”特性的“名称”属性更改为“发运日期”,再将此特性的“名称列”属性更改为 DimTime.SimpleDate (WChar)。
-
切换到 Analysis Services 教程多维数据集的多维数据集设计器的“操作”选项卡。
-
在“钻取列”框中,将以下列添加到“返回列”列表,再单击“确定”:
- 订单日期
- 截止日期
- 发运日期
下图显示了这些所选列。
- 订单日期
检查修改后的钻取操作
检查修改后的钻取操作
-
在“生成”菜单上,单击“部署 Analysis Services 教程”。
-
在成功完成部署后,切换到 Analysis Services 教程多维数据集的多维数据集设计器中的“浏览器”选项卡,然后单击“重新连接”。
-
单击单个数据单元,然后右键单击该单元,再单击“钻取订单详细信息”。
发运给 Adam Powell 的这些订单的详细信息将显示在“数据示例查看器”中,其中包括它们的订单日期、截止日期和发运日期信息,如下图所示。
-
单击“关闭”,以关闭“数据示例查看器”。
通过下载并安装已更新的示例,可以获得第 8 课中使用的完整项目。有关详细信息,请参阅安装示例中的“获取已更新的示例”。
|
定义关键指标KPI:
若要在 Microsoft SQL Server 2005 中定义关键性能指标 (KPI),应当首先定义与 KPI 关联的 KPI 名称和度量值组。KPI 可以与所有度量值组或与单个度量值组关联。然后定义以下 KPI 元素:
- 值表达式
值表达式是物理度量值(如销售)、计算度量值(如利润)或使用多维表达式 (MDX) 表达式在 KPI 中定义的计算。 - 目标表达式
目标表达式是值或者是解析为值的 MDX 表达式,它用于定义值表达式所定义的度量值的目标。例如,目标表达式可以是公司业务经理希望增加的销售额或利润的数量。 - 状态表达式
状态表达式是 MDX 表达式,Analysis Services 用它来计算与目标表达式相比,值表达式的当前状态,其正常取值范围是 -1 到 +1。-1 表示非常差,而 +1 表示非常好。状态表达式用图形显示,以帮助您易于确定值表达式与目标表达式相比较的状态。 - 走向表达式
走向表达式是 MDX 表达式,Analysis Services 用它来计算与目标表达式相比,值表达式的当前走向。走向表达式可帮助业务用户快速确定相对于目标表达式,值表达式是否正在变得更好或更差。可以将几个图形 中的某一个与走向表达式关联,以便帮助业务用户能够快速地了解走向。
除了为 KPI 定义的这些元素以外,还要为 KPI 定义几个属性。这些属性包括显示文件夹、父 KPI(如果 KPI 是从其他 KPI 计算得到的)、当前时间成员(如果有)、KPI 的权重(如果有)和 KPI 的说明。
有关 KPI 的更多示例,请参阅“计算工具”窗格中“模板”选项卡上或“Adventure Works DW”示例数据仓库示例中的 KPI 示例。有关详细信息,请参阅 AdventureWorks 示例数据仓库。
|
在本主题的任务中,您将在 Analysis Services Tutorial 项目中定义两个 KPI,然后使用这些 KPI 来浏览 Analysis Services Tutorial 多维数据集。下面是要定义的 KPI:
- 分销商收入
此 KPI 用来度量如何将实际的分销商销售额与分销商销售的销售额进行比较、销售额与目标的距离以及达到目标的走向。 - 产品毛利润率
此 KPI 用来确定每个产品类别的毛利润率与每个产品的指定目标的接近程度,还用来确定达到此目标的趋势。
定义“分销商收入”KPI
定义“分销商收入”KPI
-
打开 Analysis Services Tutorial 多维数据集的多维数据集设计器,然后单击 KPI 选项卡。
KPI 选项卡包括几个窗格。在选项卡的左侧是“KPI 组织程序”窗格和“计算工具”窗格。该选项卡中间的显示窗格包含了在“KPI 组织程序”窗格中选择的 KPI 的详细信息。
下图显示了多维数据集设计器的 KPI 选项卡。
-
在 KPI 选项卡的工具栏上,单击“新建 KPI”。
显示窗格中将出现空白 KPI 模板,如下图所示。
-
在“名称”框中键入“分销商收入”,然后单击“关联的度量值组”列表中的“分销商销售”。
-
在“计算工具”窗格中的“元数据”选项卡上,展开“度量值”,再展开“分销商收入”,然后将“分销商销售额”度量值拖到“值表达式”框中。
-
在“计算工具”窗格中的“元数据”选项卡上,展开“度量值”,再展开“销售配额”,再将“销售配额”度量值拖到“目标表达式”框中。
-
验证是否在“状态指示器”列表中选中“测量”,然后在“状态表达式”框中键入以下 MDX 表达式:
复制代码 Case When KpiValue("Reseller Revenue")/KpiGoal("Reseller Revenue")>=.95 Then 1 When KpiValue("Reseller Revenue")/KpiGoal("Reseller Revenue")<.95 And KpiValue("Reseller Revenue")/KpiGoal("Reseller Revenue")>=.85 Then 0 Else-1 End
此 MDX 表达式为计算目标的完成进度提供基本算法。在此 MDX 表达式中,如果实际的分销商销售额超过目标的 85%,则用值 0 来填充所选图形。由于测量是选择的图形,因此测量中的指针将位于空和满的中间。如果实际的分销商销售额超过了 90%,则测量上的指针将位于空和满之间的四分之三处。
-
验证是否在“走向指示器”列表中选择了“标准箭头”,然后在“走向表达式”框中键入以下表达式:
复制代码 Case When IsEmpty (ParallelPeriod ([Date].[Calendar Time].[Calendar Year],1, [Date].[Calendar Time].CurrentMember)) Then 0 When ( KpiValue("Reseller Revenue") - (KpiValue("Reseller Revenue"), ParallelPeriod ([Date].[Calendar Time].[Calendar Year],1, [Date].[Calendar Time].CurrentMember)) / (KpiValue ("Reseller Revenue"), ParallelPeriod ([Date].[Calendar Time].[Calendar Year],1, [Date].[Calendar Time].CurrentMember))) >=.02 Then 1 When( KpiValue("Reseller Revenue") - (KpiValue ( "Reseller Revenue" ), ParallelPeriod ([Date].[Calendar Time].[Calendar Year],1, [Date].[Calendar Time].CurrentMember)) / (KpiValue("Reseller Revenue"), ParallelPeriod ([Date].[Calendar Time].[Calendar Year],1, [Date].[Calendar Time].CurrentMember))) <=.02 Then -1 Else 0 End
此 MDX 表达式为计算预定目标的完成趋势提供基本算法。
使用“分销商收入”KPI 浏览多维数据集
使用“分销商收入”KPI 浏览多维数据集
-
在 Business Intelligence Development Studio 的“生成”菜单上,单击“部署 Analysis Services 教程”。
-
成功完成部署后,请在 KPI 选项卡的工具栏上单击“浏览器视图”,然后单击“重新连接”。
状态和走向测量将基于每个维度的默认成员的值,与值和目标的值一起,显示在分销商销售的“KPI 浏览器”窗格中。因为尚未将任何维度的任何其他成员定义为默认成员,所以每个维度的默认成员都是“所有”级别的“所有”成员。
下图显示了 KPI 选项卡的“浏览器视图”中的“KPI 浏览器”窗格内的 KPI。
-
在“筛选器”窗格中,依次选择“维度”列表中的“销售区域”、“层次结构”列表中的“销售区域”、“运算符”列表中的“等于”和“筛选表达式”列表中的 North America,然后单击“确定”。
-
在“筛选器”窗格中,依次选择“维度”列表中的“日期”、“层次结构”列表中的“日历时间”、“运算符”列表中的“等于”和“筛选表达式”列表中的 Q3 CY 2003,然后单击“确定”。
-
单击“KPI 浏览器”窗格中的任意位置,以更新“分销商收入 KPI”的值。
注意,KPI 的“值”、“目的”和“状态”部分反映了新时间段的值,如下图所示。
定义“产品毛利润率 KPI”
定义“总毛利润率 KPI”
-
在 KPI 选项卡的工具栏上单击“窗体视图”,然后单击“新建 KPI”。
-
在“名称”框中键入“产品毛利润率”,再验证“<所有>”是否已出现在“关联的度量值组”列表中。
-
在“计算工具”窗格内的“元数据”选项卡中,将“总 GPM”度量值拖到“值表达式”框中。
-
在“目标表达式”框中,输入以下表达式:
复制代码 Case When [Product].[Category].CurrentMember Is [Product].[Category].[Accessories] Then .40 When [Product].[Category].CurrentMember Is [Product].[Category].[Bikes] Then .12 When [Product].[Category].CurrentMember Is [Product].[Category].[Clothing] Then .20 When [Product].[Category].CurrentMember Is [Product].[Category].[Components] Then .10 Else .12 End
-
在“状态指示器”列表中,选择“柱状”。
-
在“状态表达式”框中键入以下 MDX 表达式:
复制代码 Case When KpiValue( "Product Gross Profit Margin" ) / KpiGoal ( "Product Gross Profit Margin" ) >= .90 Then 1 When KpiValue( "Product Gross Profit Margin" ) / KpiGoal ( "Product Gross Profit Margin" ) < .90 And KpiValue( "Product Gross Profit Margin" ) / KpiGoal ( "Product Gross Profit Margin" ) >= .80 Then 0 Else -1 End
此 MDX 表达式为计算目标的完成进度提供基本算法。
-
验证是否在“走向指示器”列表中选择了“标准箭头”,然后在“走向表达式”框中键入以下 MDX 表达式:
复制代码 Case When IsEmpty (ParallelPeriod ([Date].[Calendar Time].[Calendar Year],1, [Date].[Calendar Time].CurrentMember)) Then 0 When VBA!Abs ( KpiValue( "Product Gross Profit Margin" ) - ( KpiValue ( "Product Gross Profit Margin" ), ParallelPeriod ( [Date].[ Calendar Time].[ Calendar Year], 1, [Date].[ Calendar Time].CurrentMember ) ) / ( KpiValue ( "Product Gross Profit Margin" ), ParallelPeriod ( [Date].[ Calendar Time].[ Calendar Year], 1, [Date].[ Calendar Time].CurrentMember ) ) ) <=.02 Then 0 When KpiValue( "Product Gross Profit Margin" ) - ( KpiValue ( "Product Gross Profit Margin" ), ParallelPeriod ( [Date].[ Calendar Time].[ Calendar Year], 1, [Date].[ Calendar Time].CurrentMember ) ) / ( KpiValue ( "Product Gross Profit Margin" ), ParallelPeriod ( [Date].[Calendar Time].[Calendar Year], 1, [Date].[Calendar Time].CurrentMember ) ) >.02 Then 1 Else -1 End
此 MDX 表达式为计算预定目标的完成趋势提供基本算法。
使用“总毛利润率 KPI”浏览多维数据集
使用“总毛利润率 KPI”浏览多维数据集
-
在“生成”菜单上,单击“部署 Analysis Services 教程”。
-
成功完成部署后,在 KPI 选项卡的工具栏上单击“重新连接”,然后单击“浏览器视图”。
此时将显示“总毛利润率 KPI”,并显示 Q3 CY 2003 和 North America 销售区域的 KPI 值。
-
在“筛选器”窗格中,依次选择“维度”列表中的“产品”、“层次结构”列表中的“类别”、“运算符”列表中的“等于”和“筛选表达式”列表中的“自行车”,然后单击“确定”。
随即出现 Q3 CY 2003 中 North America 分销商在自行车销售中的毛利润率,如下图所示。
通过下载并安装已更新的示例,可以获得第 7 课中使用的完整项目。有关信息,请参阅安装示例中的“获取已更新的示例”。
|
在本课前面两个主题的任务中,您已经了解了如何将计算成员和命名集计算添加到多维数据集的计算脚本中。除了这两个特定类型的多维表达式 (MDX) 计算以外,还可以使用新建脚本命令在 MDX 支持的多维数据集中执行大多数操作。
在 Microsoft SQL Server 2005 Analysis Services (SSAS) 中,MDX 脚本可以在脚本执行过程中的特定位置应用于整个多维数据集,或应用于多维数据集的特定部分。您已经了解了默认脚本命令,CALCULATE 语句,该命令可基于默认作用域以聚合数据填充多维数据集中的单元。
默认作用域是整个多维数据集,但在上一个主题中提到,您可以使用 SCOPE 语句定义有更多限制的作用域,这称为“子多维数据集”,然后将 MDX 脚本只应用于特定的多维数据集空间。SCOPE 语句将定义计算脚本中所有后续的 MDX 表达式和语句的作用域,直到当前作用域终止或重新界定作用域。然后,使用 THIS 语句将 MDX 表达式应用于当前作用域。可以使用 BACK_COLOR 语句为当前作用域中的单元指定背景单元颜色,以在调试期间提供帮助。
在此主题的任务中,将使用 SCOPE 和 THIS 语句定义在 2005 会计年度内每个会计季度的销售配额。然后,在多维数据集中将销售配额分配到所有会计年度的月份级别。您还将了解如何使用断点帮助自己调试计算脚本。
按时间和雇员检查销售配额分配
按时间和雇员检查销售配额分配
-
打开 Analysis Services Tutorial 多维数据集的多维数据集设计器,然后单击“浏览器”选项卡。
-
从“数据”窗格中删除所有层次结构和度量值,然后从“筛选器”窗格中删除所有维度成员。
-
将“销售配额”度量值从“销售配额”度量值组添加到“数据”窗格的“数据”区域。
-
将用户定义的层次结构“会计时间”添加到列。
-
将“雇员姓名”属性层次结构添加到行区域。
注意,还没有为 2005 会计年度定义销售配额值。
-
在列区域中,删除 FY 2002 和 FY 2003。
-
在列区域中,依次展开 FY2004、H1 FY 2004 和 Q3 FY 2004。
注意,会计季度中的每个会计月份的销售配额与会计季度的销售配额的数量相同。这是因为“销售定额”度量值组中的时间维度的颗粒是季度级别,相关内容将在第 5 课中讨论。
下图显示了在 2004 会计年度的第四季度中每个月份都有销售配额的每个雇员的销售配额。
定义 2005 会计年度的销售配额计算的作用域
在此任务中,将检查当前作用域,并修改作用域,然后定义用来基于 2004 会计年度的值确定 2005 会计年度销售配额值的计算。
定义 2005 会计年度的销售配额计算的作用域
-
选择“计算”选项卡,然后在工具栏上选择“窗体视图”。
-
在“脚本组织程序”窗格中,选择“大型分销商”,然后在“计算”选项卡的工具栏上,单击“新建脚本命令”。
注意,“计算表达式”窗格中将出现空脚本,并且显示此脚本命令时,将在“脚本组织程序”窗格中同时显示空白标题。
-
在“计算表达式”窗格中,键入下列语句:
复制代码 /* Changing Scope to All or Default Member */ SCOPE (ROOT())
此 SCOPE 语句会将多维数据集作用域更改为“全部”,或默认值(即多维数据集中所有属性的成员)。
-
在“计算”选项卡的工具栏上,单击“新建脚本命令”,然后在“计算表达式”窗格中键入以下语句:
复制代码 /* Defining the cube scope for the sales amount quotas for FY2005 */ SCOPE ()
注意,在右括号下面出现了红色波浪线,这说明必须在 SCOPE 语句的括号中定义一组成员。这需要将“销售配额”度量值添加到 SCOPE 语句中,以便在作用域中包括此度量值。
-
在“计算工具”窗格中的“元数据”选项卡上,依次展开“度量值”、“销售配额”,然后将“销售配额”度量值拖至“计算表达式”窗格内的 SCOPE 语句的括号中。
注意,红色波浪线将消失。下一步,将 FY 2005 维度成员添加到 SCOPE 语句中,以将此时间维度成员添加到当前作用域。
-
在“计算工具”窗格的“元数据”选项卡上,依次展开“日期”、“会计”、“会计时间”、“会计年度”,再将 FY 2005 成员拖至“计算表达式”窗格中紧靠正在定义集合的“[销售配额]”成员之后的 SCOPE 语句中。
注意,此集合的该新成员的[日期]部分下面将出现红色波浪线。此波浪线说明,紧靠此维度成员之前存在语法错误,因为在 SCOPE 语句中,集合的每个成员之间必须有逗号分隔。
-
在“日期”维度中 FY 2005 成员的“[日期]”部分之前添加必需的逗号。
注意,最初的红色曲线将会消失。下一步,将“雇员”维度中“雇员”用户定义的层次结构的成员添加到 SCOPE 语句中,以将这些成员添加到当前作用域内。
-
在“计算工具”窗格的“元数据”选项卡中,展开“雇员”,再将“雇员”用户定义的层次结构拖至“计算表达式”窗格内紧靠正在定义集合的 [日期].[会计时间].[会计年度].&[2005] 成员后面的 SCOPE 语句中。
注意,在此集合的该新成员的[雇员]部分下面将出现红色波浪线,这表示在 SCOPE 语句中,集合的每个成员之间必须有逗号分隔。
-
在新成员的[雇员]部分之前添加必需的逗号。
注意,最初的红色曲线将会消失。
-
在 SCOPE 语句中,在此集合的“[雇员].[多个雇员]”成员末尾添加以下子句,以完成集合的该第三个成员的定义:
复制代码 .Members
此子句指定“雇员”维度中“雇员”层次结构的所有成员都应当包括在当前多维数据集作用域内。
-
验证已完成的 SCOPE 语句是否与以下脚本匹配:
复制代码 SCOPE ([Measures].[Sales Amount Quota],[Date].[Fiscal Time].[Fiscal Year].&[2005], [Employee].[Employees].Members)
现在,对于将向其应用 MDX 表达式以计算 2005 会计年度销售配额数量的子多维数据集,您已完成了用来定义该子多维数据集的作用域定义。
-
在“计算”选项卡的工具栏上,单击“脚本视图”,再检查新添加的脚本命令。
注意,在“计算表达式”窗格中键入每个脚本命令时它都会出现,但会在每个脚本命令的末尾添加分号。另外,每个脚本命令前面的注释有助于您理解每个单独的命令,如下图所示。
定义和测试 2005 会计年度新销售配额计算
在此过程中,您将向计算脚本添加新的脚本命令,以为“雇员”维度的所有成员计算其 2005 会计年度的销售配额。但是,您不用在“窗体”视图中添加脚本命令,而是在“脚本”视图中直接添加脚本命令。在“脚本”视图中,必须确保在每个脚本命令之间添加分号。
定义和测试 2005 会计年度的新销售配额计算
-
在“脚本”视图中,在计算脚本末尾的新行中键入以下语句:
复制代码 /* Applying a calculation to the subcube */ THIS = [Date].[Fiscal Time].[Fiscal Year].&[2004] * 1.25;
THIS 语句将新值分配给位于子多维数据集的“雇员”成员和 FY 2005 成员的交集处的“销售配额”度量值。新值基于在 2004 会计年度“雇员”成员和“销售配额”度量值的交集所产生的值乘以 1.25。
-
在“计算表达式”窗格中,单击 THIS 语句的左侧空白处,以设置断点。
注意,此空白处会出现一个红点,并且该语句将以红色突出显示,如下图所示。在调试模式中执行此项目时,对项目的更改将部 署到 Analysis Services 实例,多维数据集将会处理并执行计算脚本,直到遇到断点。然后可以逐个地单步执行其余脚本。如果不设置断点而在调试模式中运行项目,则计算脚本将在第一个 计算脚本(CALCULATE 语句)处停止。
-
在“调试”菜单中,单击“启动调试”(或按键盘上的 F5)。
将部署和处理项目并执行计算脚本,直到遇到断点。
-
隐藏所有停靠窗口,以提供更多区域来查看出现在“计算”选项卡底部的“透视表”窗格。
如下图所示的“透视表”窗格将有助于您进行调试。
-
在“透视表”窗格中,将“销售配额”度量值添加到数据区域,再将“日期.会计时间”用户定义的层次结构添加到列区域,然后将“雇员姓名”属性层次结构从“雇员”维度添加到行区域。
请注意,在“销售配额”度量值的数据区域中,每个雇员的“销售配额”度量值的“会计年度”级别的 FY 2005 成员都不包含值,如下图所示。默认情况下,在调试模式中时,“透视表”窗格中将显示空单元。
-
按 F10 可以执行 THIS 语句,并计算 2005 会计年度的销售配额。
请注意,现在将计算在“透视表”窗格中位于“销售配额”度量值、FY 2005 维度成员和“雇员姓名”成员的交集处的单元。另注意,THIS 语句所影响的单元突出显示为黄色。有个工具栏图标可用于启用或禁用已更改的单元的突出显示。默认情况下,将突出显示已更改的单元。
-
在“透视表”窗格中,从列区域中删除 FY 2002、FY 2003 和 FY 2004。
-
右键单击数据区域中的任意位置,然后单击“显示空单元”,以删除此选项旁边的选中标记,并隐藏所有空单元(“计算”选项卡工具栏中也提供此选项)。这将使您更容易查看有销售配额值的所有雇员,如下图所示。
-
在“透视表”窗格中,尝试展开列区域中的 FY 2005。
注意,由于位于“销售配额”度量值和“雇员姓名”属性层次结构的交集处的 H1 FY 2005 成员的值尚未计算(因为它们在当前作用域之外),因此无法展开 FY 2005。
-
若要查看 H1 FY 2005 成员的值的空单元,请单击“透视表”窗格中的任意位置,然后单击“计算”选项卡工具栏上的“显示空单元”,即可显示所有空单元,如下图所示。
-
在“调试”菜单中,单击“停止调试”(或在键盘上按 Shift-F5)。
-
通过单击左边空白处中的断点,删除计算脚本中的断点。
为 2005 会计年度的上下半期和各季度分配销售配额
在此过程中,需要修改作用域,以包括 2005 会计年度的会计半期成员,而不是 2005 会计年度成员,然后将 2005 会计年度的销售配额值的一半分配给 2005 会计年度的每个半期。之后,修改作用域,以包括 2005 会计年度的会计季度成员,而不是 2005 会计年度成员,然后将 2005 会计年度的销售配额值的四分之一分配给 2005 会计年度的每个季度。最后,测试这些分配。
为 2005 会计年度的上下半期和各季度分配销售配额
-
在“计算表达式”窗格的“脚本”视图中,在计算脚本末尾的新行中键入以下语句:
复制代码 /* Allocation of Sales Amount Quota to the 2005 Fiscal Semesters */ SCOPE ( [Date].[Fiscal Semester].[Fiscal Semester].Members );
此 SCOPE 语句是嵌套的 SCOPE 语句,因为此 SCOPE 语句和上一个 SCOPE 语句之间没有出现 END SCOPE 语句。当 SCOPE 语句被嵌套时,所嵌套的 SCOPE 语句将继承没有重新界定作用域的那些属性的父作用域。上一个 SCOPE 语句不直接修改“销售配额”度量值、“雇员”用户定义的层次结构或“会计时间”用户定义的层次结构。它会转而将“会计半期”属性层次结构的每个成员添加到子多维数据集定义中(通过使用 Members 函数)。有关详细信息,请参阅Members(集)(MDX)。由于嵌套 SCOPE 语句,多维数据集空间现在包括了在 2005 会计年度中的任何会计半期内位于“雇员”成员和“销售配额”度量值的交集处的所有成员(在该多维数据集的 2005 会计年度中,当前只有一个会计半期)。
-
在“计算表达式”窗格中,在计算脚本末尾的新行中键入以下语句:
复制代码 THIS = [Date].[Fiscal Time].CurrentMember.Parent / 2;
此语句将会计季度的计算值分配给在所定义的多维数据集空间中的每个会计半期。CurrentMember.Parent 函数用来将其父级的值的四分之一分配给每个成员。有关详细信息,请参阅 CurrentMember (MDX) 和 Parent (MDX)。
-
在“计算表达式”窗格中,在计算脚本末尾的新行中键入以下语句:
复制代码 /* Allocation of Sales Amount Quota to the 2005 Fiscal Quarters */ SCOPE ( [Date].[Fiscal Quarter].[Fiscal Quarter].Members );
此 SCOPE 语句也是嵌套的 SCOPE 语句,因为此 SCOPE 语句和上一个 SCOPE 语句之间没有出现 END SCOPE 语句。上一个 SCOPE 语句不直接修改“销售配额”度量值、“雇员”用户定义的层次结构或“会计时间”用户定义的层次结构。它会转而将“会计季度”属性层次结构的每个成员添加到子多维数据集定义中(通过使用 Members 函数)。因此,多维数据集空间现在包括了在 2005 会计年度的任何会计季度内位于“雇员”成员和“销售配额”度量值的交集处的所有成员(在该多维数据集的 2005 会计年度中,当前只有一个会计季度)。
-
在“计算表达式”窗格中,在计算脚本末尾的新行中键入以下语句:
复制代码 THIS = [Date].[Fiscal Time].CurrentMember.Parent / 2;
此语句将会计季度的计算值分配给在所定义的多维数据集空间中的每个会计季度。CurrentMember.Parent 函数用来将其父级的值的一半分配给每个成员。
-
在“计算表达式”窗格中,单击最后一个 SCOPE 语句旁边的空白处,以设置断点,再按键盘上的 F5。
计算脚本将执行,直到遇到断点。
-
单击“透视表”窗格的数据区域中的任意位置,然后单击“计算”选项卡工具栏上的“显示空单元”,即可隐藏空单元。
请注意,将以与上一次执行调试器时所用的同一度量值和层次结构来填充数据窗格,并且 H1 FY 2005 成员的值已经计算出来,即其父级的值的一半,如下图所示。
最后注意,每个 FY 2005 成员的值将基于其成员的聚合进行重新计算,在这里,该成员是会计年度的第一个会计半期。2005 会计年度成员的值受“2005 会计半期”成员的计算所影响,因为每个脚本都将作为单独的过程执行。若要固定现有值,以使它不受计算脚本中随后语句的影响,请使用 FREEZE 语句。有关详细信息,请参阅 FREEZE 语句 (MDX)。
-
在列区域中,展开 H1 FY 2005。
注意,尚未计算 Q1 FY 2005 成员的值。
-
单击“透视表”窗格的数据区域中的任意位置,然后单击“计算”选项卡工具栏上的“显示空单元”。
-
在列区域中,展开 Q1 FY 2005。
注意,没有为 2005 会计年度中第一个季度的两个月分配值,这是因为这些成员还不在当前子多维数据集的作用域中(直到执行脚本中最后两个语句)。Analysis Services Tutorial 多维数据集中的时间维度只包含 2005 会计年度的前两个月。因此,没有 2005 会计年度第二季度成员。
-
按 F10 执行 SCOPE 语句,再次按 F10 执行计算脚本中的最后一个语句,该语句将计算应用于当前的子多维数据集。
注意,将计算 Q1 FY 2005 成员的值,并重新计算 Q1 FY 2005 的值和 FY2005 成员值(作为其子级成员的聚合),如下图所示。还要注意,将不计算 2005 会计年度中每个会计月份的值(2005 年的 7 月和 8 月)。在下一个过程中,将为每个季度分配合适的值。
-
在“调试”菜单中,单击“停止调试”(或在键盘上按 Shift-F5)。
-
删除计算脚本中的断点。
为月份分配销售配额
在此过程中,将修改作用域,以在所有会计年度中包括会计月份级别(以前的作用域语句将计算限制为仅 2005 会计年度)。然后,将每个雇员的销售配额的会计季度值的三分之一分配给每个会计月份。
为月份分配销售配额
-
在“计算表达式”窗格中,在计算脚本末尾的新行中添加以下语句:
复制代码 /* Allocate Quotas to Months */ SCOPE ( [Date].[Fiscal Time].[Fiscal Month].Members );
此 SCOPE 语句是另一个嵌套的作用域语句,它修改了将对其应用 MDX 表达式的多维数据集空间,以便基于每个会计季度的值将销售配额分配给每个会计月份。此 SCOPE 语句与前面的嵌套 SCOPE 语句相似,但注意,“会计时间”用户定义的层次结构本身重新界定了作用域。因此,多维数据集空间的成员现在将包括“日期”维度的所有会计月份成员,而不只是 2005 会计年度的会计月份成员。
注意: 将多维数据集作用域的该修改与前面过程中的多维数据集作用域的修改进行比较,以确保您理解两个作用域更改语句之间的差异。 -
在“计算表达式”窗格中,在计算脚本末尾的新行中添加以下语句:
复制代码 THIS = [Date].[Fiscal Time].CurrentMember.Parent / 3;
此语句将其父级(季度级别)的值的三分之一分配给会计时间层次结构的每个月份成员。此计算将应用于多维数据集中的所有会计月份。
-
在“计算表达式”窗格中,单击最后一个 THIS 语句的左边空白处,以设置断点,然后在键盘上按 F5。
-
检查 2004 年 7 月和 2004 年 8 月的值。
注意,当前没有计算 2004 年 7 月和 8 月的值。
-
右键单击“数据”窗格中的任何位置,再单击“显示空单元”,以只显示有值的单元。
这将让您更容易看到计算脚本中的最后一个语句是如何应用的。
-
按 F10 执行最后一个语句。
注意,每个雇员在每个会计月份的“销售配额”值的计算结果值等于其父级值的三分之一,如下图所示。
-
在列区域中,删除 FY 2005,再添加 Q4 FY 2004。
-
依次展开 FY 2004、H2 FY 2004 以及 Q4 FY 2004。
注意,每个会计月份的值等于会计季度的总计值,如下图所示。
-
在“调试”菜单中,单击“停止调试”。
-
删除计算脚本中的断点。
-
在工具栏上单击“全部保存”。
通过下载并安装已更新的示例,可以获得第 6 课中使用的完整项目。有关详细信息,请参阅安装示例中的“获取已更新的示例”。
|
命名集是可返回一组维度成员的多维表达式 (MDX)。可以定义命名集,并将它们另存为多维数据集定义的一部分;还可以在客户端应用程序中创建命名集。通过合并多维数据集数据、算术运算符、数字和 函数,可以创建命名集。命名集可以由用户在客户端应用程序的 MDX 查询中使用,还可以用来定义子多维数据集中的集合。子多维数据集是交叉联接集的集合,它将多维数据集空间限制为随后语句的定义的子空间。定义受限的多维数 据集空间是 MDX 脚本的一个基本概念。本课程的下一个主题将讨论 MDX 脚本。
命名集简化了 MDX 查询,并为复杂、常用的集表达式提供了有用的别名。例如,可以定义名为“大型分销商”的命名集,用来包含有最多雇员的“分销商”维度的成员集合。然后,最 终用户可以在查询中使用“大型分销商”命名集,您也可以使用该命名集来定义子多维数据集中的集合。命名集定义存储于多维数据集中,但它们的值只存在于内存 中。若要创建命名集,请使用多维数据集设计器的“计算”选项卡上的“新建命名集”命令。有关详细信息,请参阅计算、定义命名集。
在此主题的任务中,将定义两个命名集:“核心产品”命名集和“大型分销商”命名集。
定义“核心产品”命名集
定义“核心产品”命名集
-
切换到 Analysis Services Tutorial 多维数据集的多维数据集设计器的“计算”选项卡,再单击工具栏上的“窗体视图”。
-
单击“脚本组织程序”窗格中的“[所有产品的总销售额比率]”,然后在“计算”选项卡的工具栏上单击“新建命名集”。
在“计算”选项卡上定义新计算时,请记住,计算的解析是按它们出现在“脚本组织程序”窗格中的顺序来进行的。在创建新计算时该窗格中的焦点确定了计算的执行顺序;新的计算将定义于紧靠有焦点的计算之后。
-
在“名称”框中,将新命名集的名称更改为 [Core Products]。
在“脚本组织程序”窗格中,注意用于将命名集与脚本命令或计算成员区分开来的唯一图标。
-
在“计算工具”窗格中的“元数据”选项卡上,依次展开“产品”、“类别”、“成员”和“所有产品”。
如果无法在“计算工具”窗格中查看任何元数据,请在工具栏上单击“重新连接”。如果该操作失败,则可能必须处理多维数据集,或启动 Analysis Services 实例。
|
- 将“自行车”拖到“表达式”框中。
现在,您已经创建一组表达式,它将返回“产品”维度内的“自行车”类别中的成员集合。
下图显示在此过程中创建的命名集的“计算表达式”窗格。
定义“大型分销商”命名集
定义“大型分销商”命名集
-
在“脚本组织程序”窗格中右键单击[核心产品],再单击“新建命名集”。
-
在“名称”框中,将此命名集的名称更改为 [大型分销商]。
-
在“表达式”框中键入 Exists()。
您将使用 Exists 函数来从“大型分销商”属性层次结构返回成员集合,而“分销商名称”属性层次结构将与有最大雇员数的“雇员数”属性层次结构中的成员集合交互。
-
在“计算工具”窗格中的“元数据”选项卡上,展开“分销商”维度,再展开“分销商名称”属性层次结构。
-
将“分销商名称”级别拖到 Exists 集表达式的括号中。
将使用 Members 函数来返回此集合的所有成员。相关主题:Members(集)(MDX)
-
在部分集表达式之后键入句号,再添加 Members 函数。表达式应该如下显示:
复制代码 Exists([Reseller].[Reseller Name].[Reseller Name].Members)
既然已经为 Exists 集表达式定义了第一个集合,现在可以开始添加第二个集合,即包含最大雇员数的“分销商”维度的成员集合。
-
在“计算工具”窗格中的“元数据”选项卡上,依次展开“分销商”维度中的“雇员数目”、“成员”和“所有分销商”。
注意,此属性层次结构的成员没有分组。
-
打开“分销商”维度设计器,然后在“属性”窗格中单击“雇员数目”。
-
在“属性”窗口中,将 DiscretizationMethod 属性更改为“自动”,再将 DiscretizationBucketCount 属性更改为 5。相关主题:对属性成员分组(离散化)
-
在 Business Intelligence Development Studio 的“生成”菜单上,单击“部署 Analysis Services 教程”。
-
成功完成部署后,切换到 Analysis Services Tutorial 多维数据集的多维数据集设计器,然后在“计算”选项卡的工具栏上单击“重新连接”。
-
在“计算工具”窗格中的“元数据”选项卡上,依次展开“分销商”维度中的“雇员数目”、“成员”和“所有分销商”。
注意,此属性层次结构的成员现在包含于编号为 0 到 4 的五个组中。若要查看组的编号,请将指针暂停在组上,以查看 InfoTip。之所以对此属性层次结构的成员进行分组,是因为 DiscretizationBucketCount 属性设置为 5,并且 DiscretizationMethod 属性设置为“自动”。
-
在“表达式”框中,在 Exists 集表达式中的 Members 函数之后和右括号之前添加逗号,再将 83 - 100 从“元数据”窗格拖放到逗号之后。
现在,将“大型分销商”命名集放在轴上时,您已经完成了将会返回与两个指定集合(所有分销商集合和有 83 到 100 名雇员的分销商集合)交互的成员集合的 Exists 集表达式。
下图显示 [大型分销商] 命名集的“计算表达式”窗格。
-
在“计算”选项卡的工具栏上,单击“脚本视图”,然后检查刚才添加到计算脚本中的两个命名集。
-
在计算脚本中紧靠第一个 CREATE SET 命令之前添加新行,然后在脚本中独立的行上添加以下文本:
复制代码 /* named sets */
现在,您已经定义了两个命名集,它们已显示在“脚本组织程序”窗格中。现在,您可以部署这两个命名集,然后在 Analysis Services Tutorial 多维数据集中浏览这些度量值。
使用新的命名集浏览多维数据集
使用新的命名集浏览多维数据集
-
在 BI Development Studio 的“生成”菜单上,单击“部署 Analysis Services 教程”。
-
在已成功完成部署后,单击“浏览器”选项卡,再单击“重新连接”。
-
从“数据”窗格中删除所有层次结构和度量值。
-
将“分销商销售-销售额”度量值添加到数据区域,再将“产品类别”用户定义层次结构添加到行区域。
注意,只会出现类别属性的一个成员。这是因为先前已在此会话中使用该属性作为筛选器。如果在新会话中工作,将显示所有成员。
-
选择“行”区域中“类别”旁边的下拉键头,然后选中“(全部)”级别旁边的复选框,以选择此级别(如果尚未选择它)的所有成员,再单击“确定”。
-
展开“自行车”以查看“子类别”级别的成员,如下图所示。
-
在“元数据”窗格中的“产品”维度内,右键单击“核心产品”,并选择“添加到子多维数据集区域”。
注意,只有“类别”属性的“自行车”成员和“自行车”子类别的成员会留在多维数据集中。这是因为“核心产品”命名集用来定义子多维数据集,该子多维数据集的属性将出现在位于“数据”窗格上面的“筛选器”窗格中。此子多维数据集使得它包含的“产品”维度中的“类别”属性的成员仅限于“核心产品”命名集的那些成员,如下图所示。
-
在“元数据”窗格中,展开“分销商”,右键单击“大型分销商”,然后单击“添加到子多维数据集区域”。
注意,“数据”窗格中的“分销商销售额”度量值只显示大型自行车分销商的销售额。还要注意,“筛选器”窗格现在显示用来定义此特定子多维数据集的两个命名集,如下图所示。
计算成员是基于多维数据集数据、算术运算符、数字和函数的组合而定义的维度或度量值组成员。例如,可以创建用于计算多维数据集中的两个物理度量值之和的计算成员。计算成员定义将存储在多维数据集中,但它们的值将在查询时计算。
若要创建计算成员,请在多维数据集设计器的“计算”选项卡上使用“新建计算成员”命令。您可以在包括度量值维度在内的任意维度中创建计算成员。还可以将计算成员放在“计算属性”对话框的显示文件夹中。有关详细信息,请参阅计算、定义和配置计算和定义计算成员。
在此主题的任务中,将定义计算度量值,以便让用户查看 Internet 销售、分销商销售和所有销售的毛利润率百分比和销售率。
定义聚合物理度量值的计算
定义聚合物理度量值的计算
-
打开 Analysis Services Tutorial 多维数据集的多维数据集设计器,然后单击“计算”选项卡。
注意“计算表达式”窗格和“脚本组织程序”窗格中的默认 CALCULATE 命令。此命令指定多维数据集中的度量值应该根据其 AggregateFunction 属性所指定的值进行聚合。度量值通常会求和,但也可能计数或按其他某种方式进行聚合。
下图显示了多维数据集设计器的“计算”选项卡。
-
在“计算”选项卡的工具栏上,单击“新建计算成员”。
新窗体将出现在“计算表达式”窗格中,您可以在其中定义此新计算成员的属性。新成员还会出现在“脚本组织程序”窗格中。
下图显示了在单击“新建计算成员”时出现在“计算表达式”窗格中的窗体。
-
在“名称”框中,将计算度量值的名称更改为 [Total Sales Amount]。
如果计算成员的名称包含空格,则该计算成员名称必须放在方括号中。
注意,在“父层次结构”列表中,默认情况下,将在“度量值”维度中创建新的计算成员。通常,度量值维度中的计算成员也称为计算度量值。
-
在“计算”选项卡的“计算工具”窗格中的“元数据”选项卡上,展开“度量值”,再展开“Internet 销售”后,可以查看“Internet 销售”度量值组的元数据。
可以将元数据元素从“计算工具”窗格拖到“表达式”框中,再添加运算符和其他元素,以便创建多维表达式 (MDX)。或者,可以直接在“表达式”框中键入 MDX 表达式。
如果无法在“计算工具”窗格中查看任何元数据,请在工具栏上单击“重新连接”。如果该操作失败,则可能必须处理多维数据集,或启动 Analysis Services 实例。
|
- 将“Internet 销售额”从“计算工具”窗格中的“元数据”选项卡拖到“计算表达式”窗格中的“表达式”框中。
- 在“表达式”框中,在“[度量值].[Internet 销售额]”的后面键入加号 (+)。
- 在“计算工具”窗格中的“元数据”选项卡上,展开“分销商销售”,再将“分销商销售额”拖到“计算表达式”窗格中的“表达式”框中加号 (+) 的后面。
- 在“格式字符串”列表中,选择“货币”。
- 在“非空行为”列表中,选中“Internet 销售额”和“分销商销售额”复选框,再单击“确定”。
在“非空行为”列表中指定的度量值将用于解决 MDX 中的 NON EMPTY 查询。在“非空行为”列表中指定一个或多个度量值时,如果所有指定的度量值为空,Analysis Services 将把计算成员作为空对待。如果“非空行为”属性是空白,Analysis Services 必须对计算成员本身进行计算,才能确定成员是否为空。
下图显示了用您在前面的步骤中所指定的设置来填充的“计算表达式”窗格。
- 在“计算”选项卡的工具栏上,单击“脚本视图”,在“计算表达式”窗格中检查计算脚本。
注意,新的计算将添加到初始 CALCULATE 表达式中;将以分号分隔每个单独的计算。另外注意,在计算脚本的开始位置将出现注释。在计算组的计算脚本中添加注释是好的做法,这样可以帮助您和其他开发人员理解复杂的计算脚本。 - 在计算脚本中 Calculate; 命令之后和新添加的计算脚本之前添加新行,然后在脚本中独立的一行上添加以下文本:
复制代码 /* Calculations to aggregate Internet Sales and Reseller Sales measures */
- 在“计算”选项卡的工具栏上,单击“窗体视图”,验证在“脚本组织程序”窗格中选中的“[总销售额]”,再单击“新建计算成员”。
- 将这个新计算成员的名称更改为 [Total Product Cost],然后在“表达式”框中创建以下表达式:
复制代码 [Measures].[Internet Sales-Total Product Cost] + [Measures].[Reseller Sales-Total Product Cost]
- 在“格式字符串”列表中,选择“货币”。
- 在“非空行为”列表中,选中“Internet 销售-总产品成本”和“分销商销售-总产品成本”的复选框,然后单击“确定”。
现在,您已经定义了两个计算成员,它们都显示在“脚本组织程序”窗格中。这些计算成员可以由随后在计算脚本中定义的其他计算来使用。通过在“脚本组织程序”窗格中选择计算成员,可以查看任何计算成员的定义;计算成员的定义将出现在窗体视图内的“计算表达式”窗格中。直到已部署新定义的计算成员后,这些对象才会出现在“计算工具”窗格中。计算不需要处理。
定义毛利润率计算
定义毛利润率计算
-
验证已在“脚本组织程序”窗格中选中的[总产品成本],然后在“计算”选项卡的工具栏上单击“新建计算成员”。
-
在“名称”框中,将此新计算度量值的名称为 [Internet GPM]。
-
在“表达式”框中,创建以下 MDX 表达式:
复制代码 ([Measures].[Internet Sales-Sales Amount] - [Measures].[Internet Sales-Total Product Cost]) / [Measures].[Internet Sales-Sales Amount]
-
在“格式字符串”列表中,选择“百分比”。
-
在“非空行为”列表中,选中“Internet 销售额”复选框,再单击“确定”。
-
在“计算”选项卡的工具栏上,单击“新建计算成员”。
-
在“名称”框中,将此新计算度量值的名称更改为 [Reseller GPM]。
-
在“表达式”框中,创建以下 MDX 表达式:
复制代码 ([Measures].[Reseller Sales-Sales Amount] - [Measures].[Reseller Sales-Total Product Cost]) / [Measures].[Reseller Sales-Sales Amount]
-
在“格式字符串”列表中,选择“百分比”。
-
在“非空行为”列表中,选中“分销商销售额”复选框,再单击“确定”。
-
在“计算”选项卡的工具栏上,单击“新建计算成员”。
-
在“名称”框中,将此计算度量值的名称更改为 [Total GPM]。
-
在“表达式”框中,创建以下 MDX 表达式:
复制代码 ([Measures].[Total Sales Amount] - [Measures].[Total Product Cost]) / [Measures].[Total Sales Amount]
注意,此计算成员引用了其他计算成员。由于此计算成员将在它所引用的计算成员之后进行计算,所以这是有效的计算成员。
-
在“格式字符串”列表中,选择“百分比”。
-
在“非空行为”列表中,选中“Internet 销售额”和“分销商销售额”复选框,再单击“确定”。
-
在“计算”选项卡的工具栏上,单击“脚本视图”并检查刚才添加到计算脚本中的三个计算。
-
在计算脚本中紧靠 [Internet GPM] 计算的前面添加新行,然后在脚本中独立的一行上添加以下文本:
复制代码 /* Calculations to calculate gross profit margin */
下图显示了有三个新计算的“表达式”窗格。
定义总计计算的百分比
定义总计计算的百分比
-
在“计算”选项卡的工具栏上,单击“窗体视图”。
-
在“脚本组织程序”窗格中,选择[总 GPM],再单击“计算”选项卡的“新建计算成员”工具栏。
通过在单击“新建计算成员”之前单击“脚本组织程序”窗格中最后一个计算成员,可以保证新计算成员将输入到脚本的末尾。脚本按它们出现在“脚本组织程序”窗格中的顺序执行。
-
将此新计算成员的名称更改为 [Internet Sales Ratio to All Products]。
-
在“表达式”框中键入以下表达式:
复制代码 Case When IsEmpty( [Measures].[Internet Sales-Sales Amount] ) Then 0 Else ( [Product].[Product Categories].CurrentMember, [Measures].[Internet Sales-Sales Amount]) / ( [Product].[Product Categories].[(All)].[All], [Measures].[Internet Sales-Sales Amount] ) End
此 MDX 表达式将计算每个产品在总计 Internet 销售额中所占的比例。Case 语句与 IS EMPTY 函数一起确保当产品没有销售额时不会发生被零除错误。
-
在“格式字符串”列表中,选择“百分比”。
-
在“非空行为”列表中,选中“Internet 销售额”复选框,再单击“确定”。
-
在“计算”选项卡的工具栏上,单击“新建计算成员”。
-
将此计算成员的名称更改为 [Reseller Sales Ratio to All Products]。
-
在“表达式”框中键入以下表达式:
复制代码 Case When IsEmpty( [Measures].[Reseller Sales-Sales Amount] ) Then 0 Else ( [Product].[Product Categories].CurrentMember, [Measures].[Reseller Sales-Sales Amount]) / ( [Product].[Product Categories].[(All)].[All], [Measures].[Reseller Sales-Sales Amount] ) End
-
在“格式字符串”列表中,选择“百分比”。
-
在“非空行为”列表中,选中“分销商销售额”复选框,再单击“确定”。
-
在“计算”选项卡的工具栏上,单击“新建计算成员”。
-
将此计算成员的名称更改为 [Total Sales Ratio to All Products]。
-
在“表达式”框中键入以下表达式:
复制代码 Case When IsEmpty( [Measures].[Total Sales Amount] ) Then 0 Else ( [Product].[Product Categories].CurrentMember, [Measures].[Total Sales Amount]) / ( [Product].[Product Categories].[(All)].[All], [Measures].[Total Sales Amount] ) End
-
在“格式字符串”列表中,选择“百分比”。
-
在“非空行为”列表中,选中“Internet 销售额”和“分销商销售额”复选框,再单击“确定”。
-
在“计算”选项卡的工具栏上,单击“脚本视图”,再检查刚才添加到计算脚本中的三个计算。
-
在计算脚本中紧靠 [所有产品的 Internet 销售额比率]计算之前添加新行,然后在脚本中独立的行上添加以下文本:
复制代码 /* Calculations to calculate percentage of product to total product sales */
现在已经定义了八个计算成员的总计,打开“窗体”视图时,这些成员显示在“脚本组织程序”窗格中。
浏览新计算成员
浏览新计算成员
-
在 Business Intelligence Development Studio 的“生成”菜单上,单击“部署 Analysis Services 教程”。
-
部署已经成功完成后,切换到“浏览器”选项卡,并单击“重新连接”,然后从“数据”窗格中删除所有层次结构和度量值。
-
在“元数据”窗格中,展开“度量值”以查看度量值维度中的新计算成员。
-
将“总销售额”、“Internet 销售额”和“分销商销售额”度量值添加到数据区域,然后检查结果。
注意,“总销售额”度量值是“Internet 销售额”度量值与“分销商销售额”度量值之和。
-
将“产品类别”用户定义层次结构添加到“数据”窗格的筛选区域中,再按“山地自行车”对该数据进行筛选。
注意,“总销售额”度量值是基于“山地自行车”的“Internet 销售额”和“分销商销售额”度量值对“山地自行车”类别的产品销售额进行计算而产生的。
-
将“日期.日历时间”用户定义层次结构添加到行区域,然后检查结果。
注意,每个日历年的“总销售额”度量值是基于“山地自行车”的“Internet 销售额”和“分销商销售额”度量值对“山地自行车”类别的产品销售额进行计算而产生的。
-
将“总 GPM”、Internet GPM 和“分销商 GPM”度量值添加到数据区域,然后检查结果。
注意,分销商销售的毛利润率要比 Internet 销售低很多。另外注意,山地车销售的毛利润率正在随时间推移而增长,如下图所示。
-
将“所有产品的总销售额比率”、“所有产品的 Internet 销售额比率”和“所有产品的分销商销售额比率”度量值添加到数据区域。
注意,Internet 销售的山地车销售额在所有产品中所占的比率随时间推移而增长,但在分销商那里却在随时间推移而减少。另外注意,通过分销商销售的山地车销售额在所有产品中所占的比率低于通过 Internet 销售完成的该比率。
-
将筛选器从“山地自行车”更改为“自行车”,然后检查结果。
注意,通过分销商销售的所有自行车的毛利润率都是负数,这是因为观光自行车和道路自行车都在亏损销售。
-
将筛选器更改为“附件”,然后检查结果。
注意,附件的销售正在随时间而增长,但这些销售只构成总销售额的一小部分。另外注意,附件销售的毛利润率比自行车还高。
-
依次展开 CY 2004、H2 CY 2004 以及 Q3 CY 2004。
注意,此多维数据集中 2004 年 7 月之后没有 Internet 销售额,并且 2004 年 6 月之后没有分销商销售额。这些销售值还没有从源系统添加到 Adventure Works DW 数据库。
用户可能需要针对不同目的来定义不同粒度或专一性的事实数据表维度。例如,分销商或 Internet 销售的销售额数据可以每天记录一次,而销售配额信息则可能按月或按季度级别来记录。在这些情况下,用户可能需要时间维度针对这些不同的事实数据表具有不同 的粒度或详细程度。尽管可以将新的数据库维度定义为具有这种不同粒度的时间维度,但 Microsoft SQL Server 2005 Analysis Services (SSAS) 提供了更简单的方法。
默认情况下,在 SQL Server 2005 Analysis Services 中,当在度量值组中使用维度时,该维度内的数据粒度将基于该维度的键属性。例如,当度量值组中包括时间维度并且时间维度的默认粒度为每天,则度量值组中该 维度的默认粒度也为每天。多数情况下这样是合适的,例如本教程中的“Internet 销售”和“分销商销售”度量值组便是恰当的示例。但是,当其他类型的度量值组(例如“销售配额”或“预算”度量值组)中包括此类维度时,则使用每月粒度或每季度粒度更为合适。
若要为多维数据集维度指定默认粒度以外的粒度,则需要在多维数据集设计器的“维度用法”选项卡上修改特定度量值 组中使用的多维数据集维度的粒度属性。当您将特定度量值组中某一维度的粒度更改为该维度的键属性之外的属性时,必须保证该度量值组中的所有其他属性与这一 新粒度属性直接或间接相关。方法是在所有其他属性与被指定为度量值组中粒度属性的属性之间指定属性关系。在这种情况下,可以定义其他属性关系,而不是移动 属性关系。对于维度中的其余属性而言,有效指定为粒度属性的属性将成为度量值组中的键属性。如果未恰当指定属性关系,则 Analysis Services 将无法正确地聚合值,您在本主题的各任务中会看到这种情况。
有关详细信息,请参阅维度关系和定义常规关系和常规关系属性。
在本主题的各任务中,您将添加“销售配额”度量值组并将该度量值组中的“时间”维度的粒度定义为每月。然后定义月属性和其他维度属性之间的属性关系,以确保 Analysis Services 能够正确地聚合值。
添加表并定义“销售配额”度量值组
添加表并定义“销售配额”度量值组
-
切换到 Adventure Works DW 数据源视图的数据源视图设计器。
-
右键单击“关系图组织程序”窗格中的任意位置,单击“新建关系图”,然后将“销售配额”指定为该新关系图的名称。有关详细信息,请参阅使用数据源视图中的关系图 (Analysis Services)。
-
将 Employee、Sales Territory 以及 Time 表从“表”窗格拖到“关系图”窗格。
-
右键单击“关系图”窗格中的任意位置并选择“添加/删除表”,以将 FactSalesQuota 表添加到“关系图”窗格中。
注意,SalesTerritory 表通过 Employee 表链接到 FactSalesQuota 表。
-
检查 FactSalesQuota 表中的列,然后浏览此表中的数据。
注意,此表内数据的粒度为日历季度,该粒度的详细程度处于 FactSalesQuota 表中的最低级别。
-
在数据源视图设计器中,将 FactSalesQuota 表的 FriendlyName 属性更改为 SalesQuotas。
-
切换到 Analysis Services Tutorial 多维数据集的多维数据集设计器,再单击“多维数据集结构”选项卡。
-
右键单击“度量值”窗格中的任意位置,单击“新建度量值组”,再单击“新建度量值组”对话框中的 SalesQuotas,然后单击“确定”。
“销售配额”度量值组将出现在“度量值”窗格中。注意,在“维度”窗格中,还基于“时间”数据库维度定义了新的“时间”多维数据集维度。因为 Analysis Services 不了解哪个与时间相关的现有多维数据集维度与“销售配额”度量值组下面的 FactSalesQuota 事实数据表中的 TimeKey 列相关,所以定义了新的与时间相关的多维数据集维度。以后在本主题的其他任务中,您可以对此进行更改。
-
展开“销售配额”度量值组。
注意,定义了三个新的度量值。
-
在“度量值”窗格中,选择“销售额配额”,然后在“属性”窗口中将 FormatString 属性的值设置为 Currency。
-
选择“销售配额记数”度量值,然后在“属性”窗口中将 FormatString 属性的值设置为 #,#。
-
从“销售配额”度量值组中删除“日历季度”度量值组。
Analysis Services 检测出,“日历季度”度量值下的列是包含度量值的列。但是,该列和 CalendarYear 列包含在本主题后面部分中将用于链接“销售配额”度量值组和“时间”维度的值。
-
在“度量值”窗格中,右键单击“销售配额”度量值组,然后单击“新建度量值”。有关详细信息,请参阅定义和配置度量值。
将打开“新建度量值”对话框,其中包含使用类型为 Sum 的度量值的可用源列。
-
在“新建度量值”对话框中,选择“用法”列表中的“非重复计数”,确保在“源表”列表中选中 SalesQuotas,在“源列”列表中选中 EmployeeKey,然后单击“确定”。
注意,将在名为“销售配额 1”的新度量值组中创建该度量值。Microsoft SQL Server 2005 中的非重复计数度量值在它们自己的度量值组中创建,以最大程度地提高处理性能。
-
将 Employee Key Distinct Count 度量值的 Name 属性值更改为“销售人员记数”,然后将FormatString 属性的值设置为 #,#。
按时间浏览“销售配额”度量值组中的度量值
按时间浏览“销售配额”度量值组中的度量值
-
在“生成”菜单上,单击“部署 Analysis Services 教程”。
-
部署成功完成后,在 Analysis Services Tutorial 多维数据集的多维数据集设计器中单击“浏览器”选项卡,再单击“重新连接”。
-
清除“数据”窗格中的所有层次结构和度量值,然后清除“筛选器”窗格中的维度成员。
-
在“元数据”窗格中展开“销售配额”度量值组,然后将“销售额配额”度量值添加到数据区域。
-
将“销售区域”维度中的“销售区域”用户定义层次结构添加到列区域。
注意,“销售区域”多维数据集维度没有与 Fact Sales Quota 表直接或间接相关,如下图所示。
在本主题的下一个任务中,您将在该维度和该事实数据表之间定义引用维度关系。
-
在“数据”窗格中,单击“销售区域组”旁边的向下键,然后清除 North America 以外的所有复选框,将“销售区域组”中显示的维度成员更改为 North America。
-
在“元数据”窗格中,展开“时间”,然后展开“会计”。
-
将 Time.Fiscal Time 用户层次结构添加到行区域,然后在“数据”窗格中单击“会计年度”旁边的向下键,并清除 FY 2004 以外的所有复选框,以便只显示 2004 会计年度。
-
在“数据”窗格中,依次展开 FY 2004、H1 FY 2004、Q1 FY 2004 以及 July 2003。
注意,此时将只显示“月份”级别的 July 2003 成员,而不显示“月份”级别的 July, 2003、August, 2003 和 September, 2003 成员,并且只显示“日期”级别的 July 1, 2003 成员,而不显示所有的 31 天。出现此行为是因为事实数据表中数据的粒度属于季度级别,“时间”维度的粒度属于每日级别。在本主题的下一个任务中,您可以对此行为进行更改。
另注意,月份级别和日级别以及季度级别的“销售额配额”值相同,都为 $13,733,000.00。这是因为“销售配额”度量值组中最低的数据级别为季度级别。您可以在第 6 课中更改此行为。
下图显示了“销售额配额”的值。
定义“销售配额”度量值组的维度用法属性
定义“销售配额”度量值组的维度用法属性
-
打开“雇员”维度的维度设计器,然后根据 Employee 表中的 SalesTerritoryKey 列将 SalesTerritoryKey 属性添加为隐藏且未优化的无序属性。
需要使用该属性将“销售区域”维度作为引用维度链接到“销售配额”和“销售配额 1”度量值组。
-
在 Analysis Services Tutorial 多维数据集的多维数据集设计器中,单击“维度用法”选项卡,然后查看“销售配额”和“销售配额 1”度量值组中的维度用法。
注意,“雇员”和“时间”多维数据集维度通过常规关系链接到“销售配额”和“销售配额 1”度量值组。另注意,“销售区域”多维数据集维度未链接到这些度量值组中的任何一组。
-
定义“销售区域”维度和“销售配额”度量值组之间的具体化引用关系,将“雇员”指定为中间维度,将“销售区域所属地区”指定为引用维度属性,将 SalesTerritoryKey 指定为中间维度属性。(“销售区域所属地区”属性的键列为 SalesTerritoryKey 列。)
-
对“销售配额 1”度量值组重复前面的步骤。
-
删除“时间”多维数据集维度。
不使用四个与时间相关的多维数据集维度,您将使用“销售配额”度量值组中的“订购日期”多维数据集维度作为定义“销售配额”维度所依据的日期。还会将此多维数据集维度用作多维数据集中的主日期维度。
-
在“维度”列表中,将 Time (Order Date) 多维数据集维度重命名为 Time (Date)。
将 Order Date 多维数据集维度重命名为 Date,使得用户能够更加轻松地理解该日期在此多维数据集中作为主日期的作用。
-
单击“销售配额”度量值组和 Time (Date) 维度相交处的单元中的省略号按钮 (…)。
-
在“定义关系”对话框中,选择“选择关系类型”列表中的“常规”。
-
在“粒度属性”列表中,选择“日历季度”。
注意此时会出现一个警告,它指出由于已选择非键属性作为粒度属性,所以必须通过将所有其他属性指定为成员属性来确保它们与粒度属性直接或间接相关。
下图显示了“定义关系”对话框。
-
在“定义关系”对话框的“关系”区域中,将 Time (Date) 多维数据集维度下面表中的 CalendarYear 和 CalendarQuarter 维度列链接到 Sales Quota 度量值组下面表中的 CalendarYear 和 CalendarQuarter 列,然后单击“确定”。
“日历季度”定义为“销售配额”度量值组中 Time (Date) 多维数据集维度的粒度属性,但“日期”属性继续作为“Internet 销售”和“分销商”度量值组的粒度属性。 -
对 Sales Quotas 1 度量值组重复前面的四个步骤。
下图显示了“日历季度”被定义为“销售配额”和“销售配额 1”度量值组中 Time (Date) 多维数据集维度的粒度属性。
定义“日历季度”属性和“时间”维度中其他维度属性之间的属性关系
定义“日历季度”属性和“时间”维度中其他维度属性之间的属性关系
-
切换到“时间”维度的维度设计器,然后单击“维度结构”。
-
在“属性”窗格中,展开下列属性:
- 日历季度
- 日历半期
- 会计季度
- 会计半期
注意,尽管“日历年”通过“日历半期”属性链接到“日历季度”,但是会计日历属性只相互进行链接;它们并未链接到“日历季度”属性,因此不会在“销售配额”度量值组中正确地聚合。
- 日历季度
-
将“会计季度”属性拖到“日历季度”属性的“<新建属性关系>”标记。
注意此时会出现一条警告消息,指出“时间”维度包含一个或多个冗余属性关系,在将非键属性用作粒度属性时这些冗余属性关系可能会禁止数据聚合。该警告会继续建议,不需要“月份名称”属性的“会计季度”属性关系。
-
请删除“月份名称”属性的“会计季度”属性关系。
以前的警告将会消失。
按时间浏览“销售配额”度量值组中的度量值
按时间浏览“销售配额”度量值组中的度量值
-
在“生成”菜单上,单击“部署 Analysis Services 教程”。
-
部署成功完成后,在 Analysis Services Tutorial 多维数据集的多维数据集设计器中单击“浏览器”选项卡,再单击“重新连接”。
注意,由于现已将“销售区域”维度定义为引用维度,因此“销售额配额”度量值已按照“销售区域”正确确定了维度。
-
将 Date.FiscalTime 用户层次结构添加到“日期”多维数据集维度的行区域,然后单击“会计年度”旁边的向下键,并清除 FY 2004 以外的所有复选框,从而只显示 2004 会计年度。
-
单击“确定”。
-
依次展开 FY 2004、H1 FY 2004 以及 Q1 FY 2004。
注意,“销售配额”度量值组中的度量值正确地定义了维度。另注意,将显示会计季度级别的每个成员,其中每个成员的值为季 度级别的值。出现此行为是因为事实数据表中数据的粒度属于季度级别,“时间”维度的粒度也属于季度级别。在第 6 课中,您将了解如何按比例将季度量分配到每个月。
下图显示了 Analysis Services Tutorial 多维数据集的多维数据集设计器,其中正确定义了“销售配额”度量值组维度。
通过下载并安装已更新的示例,可以获得第 5 课中使用的完整项目。有关详细信息,请参阅安装示例中的“获取已更新的示例”。
|
定义维度时,通常每个事实联接且仅联接到一个维度成员,而一个维度成员可以与许多不同的事实相关联。例如,每个客户可以具有很多订单,但每个订单只属于一个客户。在关系数据库术语中,这称为“一对多关系”。但有时一个事实可联接多个维度成员。在关系数据库术语中,这称为“多对多关系”。 例如,一个客户进行采购的原因可以有多个,而一个采购原因可以与多个采购相关联。联接表用于定义与每个采购相关的销售原因。在由此类关系构建的 Sales Reason 维度中,将有多个成员与一个销售事务相关联。多对多维度可将维度模型扩展到经典星型架构范围之外,并在维度不直接与事实数据表相关联的情况下支持复杂分 析。
在 Microsoft SQL Server 2005 Analysis Services (SSAS) 中,通过指定联接到维度表的中间事实数据表,可以定义维度和度量值组之间的多对多关系。中间事实数据表又与该事实数据表所联接到的中间维度表联接。中间事 实数据表与该关系中的维度表和中间维度之间的多对多关系便创建了主维度的成员与由该关系指定的度量值组中的度量值之间的多对多关系。为了通过中间度量值组 定义维度和度量值组之间的多对多关系,中间度量值组必须与原始度量值组共享一个或多个维度。
利用多对多维度,可通过不同方式对值进行合计,这意味着这些值不能对“所有”成员多次聚合。
为支持多对多维度关系,必须在数据源视图中在所涉及的所有表之间定义主键–外键关系。否则,当您在多维数据集设计器的“维度用法”选项卡中建立关系时,将无法选择正确的中间度量值组。
|
有关详细信息,请参阅维度关系和定义多对多关系和多对多关系属性。
在本主题的任务中,将定义“销售原因”维度和“销售原因”度量值组,并通过“销售原因”度量值组定义“销售原因”维度与“Internet 销售”度量值组之间的多对多关系。
向数据源视图添加所需的表
向数据源视图添加所需的表
-
打开 Adventure Works DW 数据源视图的数据源视图设计器。
-
右键单击“关系图组织程序”窗格中的任意位置,单击“新建关系图”,然后将“Internet 销售订单原因”指定为此新关系图的名称。有关详细信息,请参阅使用数据源视图中的关系图 (Analysis Services)。
将创建一个没有表的新关系图,并显示在“关系图”窗格中。
-
将 InternetSales (dbo.FactInternetSales) 表从“表”窗格拖至“关系图”窗格。
-
右键单击“关系图”窗格中的任意位置,然后单击“添加/删除表”。
-
在“添加/删除表”对话框中,将 DimSalesReason 表和 FactInternetSalesReason 表添加到“包含的对象”列表中,然后单击“确定”。
注意,由于在基础关系数据库中定义了所涉及的这些表之间的主键–外键关系,因此这里将自动建立这些关系。如果未在基础关系数据库中定义这些关系,则必须在数据源视图中对其进行定义。
-
在“格式”菜单上,指向“自动布局”,然后单击“关系图”。
-
在“属性”窗口中,将 DimSalesReason 表的 FriendlyName 属性更改为 SalesReason,然后将 FactInternetSalesReason 表的 FriendlyName 属性更改为 InternetSalesReason。
-
在“表”窗格中,展开 InternetSalesReason (dbo.FactInternetSalesReason),单击 SalesOrderNumber,然后在“属性”窗口中查看此数据列的 DataType 属性。
注意,SalesOrderNumber 列的数据类型为字符串数据类型。
-
在 FactInternetSalesReason 表中查看其他列的数据类型。
您会看到此表中其他两列的数据类型为数值数据类型。
-
在“表”窗格中,右键单击 InternetSalesReason (dbo.FactInternetSalesReason),然后单击“浏览数据”。
您会看到对于每个订单内的每个行号,均有一个键值标识采购该行中项的销售原因,如下图所示。
定义中间度量值组
定义中间度量值组
-
切换到 Analysis Services Tutorial 多维数据集的多维数据集设计器,再单击“多维数据集结构”选项卡。
-
右键单击“度量值”窗格中的任意位置,然后单击“新建度量值组”。有关详细信息,请参阅定义和配置度量值组。
-
在“新建度量值组”对话框的“从数据源视图中选择一个表”列表中,选择 InternetSalesReason,然后单击“确定”。
您会看到“Internet 销售原因”度量值组随即显示在“度量值”窗格中。
-
展开“Internet 销售原因”度量值组。
您会看到仅为此新度量值组定义了一个度量值,即“Internet 销售原因记数”度量值。
-
选择“Internet 销售原因记数”,然后在“属性”窗口中查看此度量值的属性。
您会看到此度量值的 AggregateFunction 属性定义为 Count,而不是 Sum。由于基础数据类型是字符串数据类型,因此 Analysis Services 选择了 Count。由于 Analysis Services 将基础事实数据表中的其他两列检测为数字键而非实际度量值,因此未将这两列选作度量值。有关详细信息,请参阅定义半累加性行为。
-
在“属性”窗口中,将“Internet 销售原因记数”度量值的 Visible 属性更改为 False。
此度量值将只用于联接将在“Internet 销售”度量值组旁边定义的“销售原因”维度。用户将不能直接浏览此度量值。
下图显示了“Internet 销售原因记数”度量值的属性。
定义多对多维度
定义多对多维度
-
在 Analysis Services Tutorial 多维数据集的多维数据集设计器中的“多维数据集结构”选项卡上,右键单击“维度”窗格中的任意位置,然后单击“添加多维数据集维度”。
-
在“添加多维数据集维度”对话框中,单击“新建维度”。
此时将打开维度向导。
-
在“欢迎使用维度向导”页上,单击“下一步”。
-
在“选择数据源视图”页上,单击“下一步”从 Adventure Works DW 数据源视图中为该维度选择数据。
-
在“选择维度类型”页上,单击“下一步”指定该维度将是标准维度。
-
在“选择主维度表”页上,在“主表”列表中选择 dbo.DimSalesReason,在“包含成员名称的列(可选)”列表中选择 SalesReasonName,然后单击“下一步”。
-
在“选择维度属性”页上,清除 Sales Reason Alternate Key 属性复选框,将 Sales Reason Reason Type 属性的名称更改为“销售原因类型”,然后单击“完成”。
-
在“完成向导”页上,单击“完成”以创建“销售原因”维度,然后单击“确定”以将新建的数据库维度作为多维数据集维度添加到 Analysis Services Tutorial 多维数据集。
-
打开“销售原因”维度的维度设计器。
-
在“层次结构和级别”窗格中,创建一个依次包含“销售原因类型”级别和“销售原因”级别的“销售原因”层次结构。
-
在“属性”窗口中,将“所有销售原因”定义为“销售原因”层次结构的 AllMemberName 属性的值。
-
将“所有销售原因”定义为“销售原因”维度的 AttributeAllMemberName 属性的值。
定义多对多关系
定义多对多关系
-
切换到 Analysis Services Tutorial 多维数据集的多维数据集设计器,再单击“维度用法”选项卡。
注意,“销售原因”维度定义了与“Internet 销售原因”度量值组的常规关系,但没有定义与“Internet 销售”或“分销商销售”度量值组之间的关系。另注意,“Internet 销售订单详细信息”维度定义了与“Internet 销售原因”度量值组的常规关系,后者与“Internet 销售”度量值组具有“事实关系”。如果不存在此维度(或不存在与“Internet 销售原因”和“Internet 销售”度量值组具有关系的其他维度),您将无法定义多对多关系。
-
在“Internet 销售”度量值组与“销售原因”维度交集处的单元中,单击省略号按钮 (...)。
-
在“定义关系”对话框的“选择关系类型”列表中,选择“多对多”。
必须定义将“销售原因”维度连接到“Internet 销售”度量值组的中间度量值组。
-
在“中间度量值组”列表中,选择“Internet 销售原因”。
下图显示了“定义关系”对话框中的更改。
-
单击“确定”。
您会看到表示“销售原因”维度和“Internet 销售”度量值组之间关系的多对多图标,如下图所示。
浏览多维数据集和多对多维度
浏览多维数据集和多对多维度
-
在“生成”菜单上,单击“部署 Analysis Services 教程”。
-
在成功完成部署后,切换到 Analysis Services 教程多维数据集的多维数据集设计器中的“浏览器”选项卡,然后单击“重新连接”。
-
从“数据”窗格的行区域删除“Internet 销售订单”用户层次结构的每个级别,并将其替换为“销售原因”维度中的“销售原因”用户层次结构。
-
验证“Internet 销售额”度量值是否仍显示在“数据”窗格的数据区域,以及“客户”维度的 Adam Powell 成员是否显示在“筛选器”窗格中。如果没有显示,请将“Internet 销售-销售额”度量值添加到数据区域,然后将“客户所在地域”用户定义层次结构的 Adam Powell 成员添加到子多维数据集区域 (Australia-Queensland-Brisbane-4000)。
-
在设计区域中心的顶部窗格 - “筛选器”窗格中,将“筛选表达式”更改为 Queensland,方法是在“筛选表达式”列表中清除 Adam Powell 复选框并选中 Queensland 复选框。
-
展开“销售原因类型”级别的每个成员,以查看与 Queensland 中的客户为其通过 Internet 采购 Adventure Works 产品所给出的每个原因相关联的美元值。
您会看到与所有销售原因相关联的合计超过了销售总额。这是因为某些客户为其采购陈述了多个原因。
下图显示了多维数据集设计器的“筛选器”窗格和“数据”窗格。
用户有时需要按事实数据表中的数据项定义度量值的维度,或者查询事实数据表中其他特定的相关信息,例如与特定销售情况有关的发票号或采购订单号。当根据此类事实数据表项定义维度时,则将该维度称为“事实维度”。 事实维度也称为退化维度。若要将相关的事实数据表行(例如所有与特定发票号有关的行)组合在一起,事实维度将非常有用。尽管可以将此信息置于关系数据库中 一个单独的维度表内,但为此信息创建单独的维度表没有任何益处,因为维度表与事实数据表按照同一速度增长,只会创建重复的数据并增加不必要的复杂性。
在 Microsoft SQL Server 2005 Analysis Services (SSAS) 内,您可以确定是否在 MOLAP 维度结构中复制事实维度数据以提高查询性能,或者是否将事实维度定义为 ROLAP 维度,以在牺牲查询性能的前提下节省存储空间。以 MOLAP 存储模式存储维度时,除了在度量值组的分区中存储维度成员外,所有维度成员还都存储在高度压缩的 MOLAP 结构的 Analysis Services 实例内。以 ROLAP 存储模式存储维度时,只有维度定义存储在 MOLAP 结构中,而维度成员本身则在查询时从基础关系事实数据表中查询。可以根据事实维度的查询频率、典型查询返回的行数、查询的性能以及处理成本来确定适当的存 储模式。将维度定义为 ROLAP 时,并不要求使用该维度的所有多维数据集也以 ROLAP 存储模式进行存储。这一点与 SQL Server 2000 Analysis Services 不同。
定义事实维度时,可以将事实维度和度量值组之间的关系定义为事实关系。以下约束适用于事实关系:
- 粒度属性必须是维度的键列,该键列将在维度和事实数据表中的事实之间创建一对一关系。
- 一个维度只能与一个单一的度量值组具有一种事实关系。
在每次对事实关系所引用的度量值组进行更新后,事实维度必须进行增量更新。
|
有关详细信息,请参阅维度关系和定义事实关系和事实关系属性。
在本主题的各任务中,您将根据 CustomerPONumber 列在 FactInternetSales 事实数据表中添加新的多维数据集维度。然后将此新增多维数据集维度和“Internet 销售”度量值组之间的关系定义为事实关系。
定义“Internet 销售订单”事实维度
定义“Internet 销售订单”事实维度
-
在 Analysis Services Tutorial 多维数据集的多维数据集设计器中,单击“多维数据集结构”选项卡。
-
右键单击“维度”窗格中的任意位置,然后单击“添加多维数据集维度”。
-
在“添加多维数据集维度”对话框中,单击“新建维度”。
此时将打开维度向导。
-
在“欢迎使用维度向导”页上,单击“下一步”。
-
在“选择数据源视图”页上,单击“下一步”从 Adventure Works DW 数据源视图中为该维度选择数据。
-
在“选择维度类型”页上,单击“下一步”指定该维度将是标准维度。
-
在“选择主维度表”页上,选择“主表”列表中的 dbo.FactInternetSales。
注意,已根据 SalesOrderNumber 和 SalesOrderLineNumber 列将一个组合键定义为键列,并且为成员名称属性定义了 SalesOrderLineNumber 列。另注意,您无法从 FactInternetSales 表以外的任何表中为成员名称属性定义列。
-
单击“下一步”。
-
在“选择相关表”页上,确保未选中任何表,然后单击“下一步”。
-
在“选择维度属性”页上,清除所有选定的维度属性,然后选中“客户 PO 号”维度属性的复选框。
注意,不能选择维度向导中的任何组合键作为属性。这是因为已将这些组合键定义为列键。若要将这些组合键凭其自身的条件添加为属性,则必须在定义维度之后将它们定义为属性。
-
单击“完成”,将维度名称更改为“Internet 销售订单详细信息”,单击“完成”,然后单击“确定”,将新创建的数据库维度作为多维数据集维度添加到 Analysis Services Tutorial 多维数据集。
-
打开“Internet 销售订单详细信息”维度的维度设计器。
-
在“特性”窗格中,选择“Internet 销售”,然后在“属性”窗口中将 Name 属性更改为“项说明”。
-
在 NameColumn 属性单元内,选择“(新建)”,将 Product 选为源表,在“对象绑定”对话框中将 EnglishProductName 选为源列,然后单击“确定”。
-
将“数据源视图”窗格中 InternetSales 表内的 SalesOrderNumber 列拖到“特性”窗格,以将“销售订单号”属性添加到维度中。
-
将新建的“销售订单号”特性的 Name 属性更改为“订单号”,将 OrderBy 属性更改为 Key。
-
在“层次结构和级别”窗格中,创建“Internet 销售订单”用户层次结构,该层次结构在订单中包含“订单号”和“项说明”级别。
-
在“特性”窗格中,选择“Internet 销售订单详细信息”,然后查看“属性”窗口中 StorageMode 属性的值。
注意,该维度默认存储为 MOLAP 维度。尽管将存储模式更改为 ROLAP 可以节省处理时间和存储空间,但这样做将降低查询性能。为了实现本教程教学目的,您将使用 MOLAP 作为存储模式。
定义事实维度的事实关系
定义事实维度的事实关系
使用事实维度浏览多维数据集
使用事实维度浏览多维数据集
-
在“生成”菜单中,单击“部署 Analysis Services 教程”,以将更改部署到 Analysis Services 的实例中,并处理数据库。
-
在部署成功完成后,单击 Analysis Services Tutorial 多维数据集的多维数据集设计器中的“浏览器”选项卡,然后单击“重新连接”。
-
清除“数据”窗格中的所有度量值和层次结构,然后将“Internet 销售-销售额”度量值添加到“数据”窗格的数据区域。
-
在“元数据”窗格中,依次展开“客户”、“位置”、“客户所在地域”、“成员”、“所有客户”、Australia、Queensland、Brisbane、4000,右键单击 Adam Powell,然后单击“添加到子多维数据集区域”。
通过筛选将销售订单限制为返回给单个客户的销售订单,可使用户深入了解大型事实数据表中的基础细节,而不会显著降低查询性能。
-
将“Internet 销售订单详细信息”维度的“Internet 销售订单”用户定义层次结构添加到“数据”窗格的行区域。
注意,Adam Powell 的销售订单号和对应的 Internet 销售量将出现在“数据”窗格中。
-
展开行区域中的每个销售订单号,以查看这些订单中每个行项的详细信息。
下图显示了前面步骤中的确定维度的过程。
在本教程中到目前为止,您所定义的每个多维数据集维度都基于一个按主键到外键的关系直接链接到度量值组事实数据表的表。在第 3 课和第 4 课中,您将未直接链接到事实数据表的一个表(称为雪花状表)中的维度属性包括在按其键列直接链接到事实数据表的维度中。例如,在第 3 课中,您将 DimGeography 表中的属性添加到了“客户”维度。DimGeography 表中的属性使用“地域关键字”链接到事实数据表,该键是 Customer 表中的属性和 DimGeography 表中的主键。通过此链接,您可以定义“客户所在地域”层次结构并使用户按地域来定义客户销售额的维度。有关详细信息,请参阅定义被引用关系和被引用关系属性
在本主题的各任务中,您会将“地域”维度通过一个称为“引用维度”的“分销商”维度链接到分销商销售额的事实数据表。这允许用户按地域定义经销商销售额的维度。
按地域定义分销商销售维度
按地域定义分销商销售维度
-
在解决方案资源管理器中,右键单击“多维数据集”文件夹中的 Analysis Services Tutorial,然后单击“浏览”。
-
删除“数据”窗格中的所有层次结构,然后确保“分销商销售-销售额”度量值出现在“数据”窗格的数据区域中。如果未出现该度量值,则请将其添加到“数据”窗格中。
-
将“地域”用户定义层次结构从“元数据”窗格中的“地域”维度拖到“数据”窗格的“将行字段拖至此处”区域。
注意,“分销商销售-销售额”度量值并未按照“区域”层次结构中的“国家/地区-区域”属性成员正确确定维度,如下图所示。
-
打开 Adventure Works DW 数据源视图的数据源视图设计器。
-
在“关系图组织程序”窗格中,选择“分销商销售”,然后查看 DimGeography 表和 FactResellerSales 表之间的关系。
注意,这些表之间没有直接链接。但是,它们之间存在通过 DimReseller 表或 DimSalesTerritory 表进行的间接链接。
-
双击表示 DimGeography 表和 DimReseller 表之间的外键-主键关系的箭头。
在“编辑关系”对话框中,注意 GeographyKey 列既是 DimGeography 表中的主键,又是 DimReseller 表中的外键,如下图所示。
-
单击“取消”,切换到 Analysis Services Tutorial 多维数据集的多维数据集设计器,然后单击“维度用法”选项卡。
注意,“地域”多维数据集维度当前与“Internet 销售”度量值组或“分销商销售”度量值组都没有关系,如下图所示。
-
单击“客户”维度和“Internet 销售”度量值组相交处的“全名”单元中的省略号按钮 (…)。
在“定义关系”对话框中,注意,在 DimCustomer 维度表和 FactInternetSales 度量值组表之间,根据每个表中的 CustomerKey 列定义了“常规”关系。到目前为止,您在本教程中定义的所有关系都是常规关系。
下图显示了“定义关系”对话框,其中常规关系是 DimCustomer 维度表和 FactInternetSales 度量值组表之间的关系。
-
单击“取消”。
-
单击“地域”维度和“分销商销售”度量值组相交处的未命名单元中的省略号按钮 (…)。
在“定义关系”对话框中,可查看当前未定义“地域”多维数据集维度和“分销商销售”度量值组之间的关系。无法定义常规关系,因为“地域”维度的维度表和“分销商销售”度量值组的事实数据表之间没有直接关系。
-
在“选择关系类型”列表中,选择“被引用的”。
您可以通过指定直接连接到度量值组表的维度来定义引用关系,该维度称为“中间维度”,Analysis Services 可以使用该维度将引用维度链接到事实数据表。然后指定将引用维度链接到中间维度的属性。
-
在“中间维度”列表中,选择“分销商”。
“地域”维度的基础表通过“分销商”维度的基础表链接到事实数据表。
-
在“引用维度属性”列表中,选择“地域关键字”,然后尝试在“中间维度属性”列表中选择“地域关键字”。
注意,“地域关键字”并未出现在“中间维度属性”列表中。这是因为 GeographyKey 列尚未定义为“分销商”维度中的属性。
下图显示,在“定义关系”对话框中,“地域关键字”不可用于“分销商”中间维度的中间维度属性。
-
单击“取消”。
在下一个任务中,您将通过定义基于“分销商”维度中 GeographyKey 列的属性来解决此问题。
定义中间维度属性和引用维度关系
定义中间维度属性和引用维度关系
-
打开“分销商”维度的维度设计器,然后查看“数据源视图”窗格中 Reseller 表内的列,再查看“特性”窗格中“分销商”维度内已定义的属性。
注意,尽管已将 GeographyKey 定义为 Reseller 表中的一列,但在“分销商”维度中并未基于此列定义任何维度属性。Geography 被定义为“地域”维度中的维度属性,原因在于它是将该维度的基础表链接到事实数据表的键列。
-
基于 GeographyKey 列向“分销商”维度中添加名为“地域关键字”的新属性,然后将此属性定义为隐藏且未优化的无序属性。
“分销商”维度中的“地域关键字”属性只能用于将“地域”维度链接到 Reseller Sales 事实数据表。因为它不能用于浏览,所以不存在将该属性层次结构定义为可见的值。而且,对该属性层次结构进行排序和优化只能为处理性能带来负面影响。但是, 必须启用该属性,使其作为两个维度之间的链接。
-
切换到 Analysis Services Tutorial 多维数据集的多维数据集设计器,单击“维度用法”选项卡,然后单击“分销商销售”度量值组和“地域”多维数据集维度相交处的省略号按钮 (…)。
-
在“选择关系类型”列表中,选择“被引用的”。
-
在“中间维度”列表中,选择“分销商”。
-
在“引用维度属性”列表中,选择“地域关键字”,然后在“中间维度属性”列表中选择“地域关键字”。
注意,已选中“具体化”复选框。这是 MOLAP 维度的默认设置。在处理过程中,具体化维度属性链接可在维度的 MOLAP 结构中具体化或存储事实数据表和每行的引用维度之间的链接值。这样做对处理性能和存储要求的影响不大,但会增强查询性能(有时会很显著)。
-
单击“确定”。
注意,“地域”多维数据集维度现在已链接到“分销商销售”度量值组。该图标指示此关系是引用维度关系。
-
在“维度用法”选项卡上的“维度”列表中,右键单击“地域”,然后单击“重命名”。
-
将该多维数据集维度的名称更改为“分销商所在地域”,然后按 Enter 键以使该名称更改生效。
由于该多维数据集维度现在已链接到“分销商销售”度量值组,所以用户可以从显式定义它在多维数据集中的用法中受益,避免可能造成的用户混淆。
下图显示在定义了“地域”多维数据集维度和“分销商销售”度量值组之间的关系后,Analysis Services Tutorial 多维数据集的多维数据集设计器中的“维度用法”选项卡。
按地域成功定义分销商销售维度
按地域定义分销商销售维度
-
在“生成”菜单上,单击“部署 Analysis Services 教程”。
-
部署成功完成后,在 Analysis Services Tutorial 多维数据集的多维数据集设计器中单击“浏览器”选项卡,再单击“重新连接”。
-
在“元数据”窗格中,展开“分销商所在地域”,右键单击“地域”,然后单击“添加到行区域”。
请注意,“分销商销售-销售额”度量值现在已按照“区域”用户定义层次结构中的“国家/地区-区域”属性正确确定了维度,如下图所示。
Microsoft SQL Server 2005 Analysis Services (SSAS) 处理某个维度时,将用数据源视图中表或视图的基础列中的所有非重复值来填充该维度中的属性。如果 Analysis Services 在处理过程中遇到空值,默认情况下,它会将此空值转换为数值列的零,或转换为字符串列的空字符串,因此不引发任何错误。您可以在基础关系数据仓库的提取、 转换和加载过程(如果有)中修改这些默认设置或转换空值。您也可以通过配置以下三个属性使 Analysis Service 将空值转换为指定值:用于维度的 UnknownMember 和 UnknownMemberName 属性以及用于维度键特性的 NullProcessing 属性。
根据维度的键特性是否可为空或者雪花型维度的根特性是否基于可为空的列,维度向导和多维数据集向导将正确启用这些属性。在这些情况下,键特性的 NullProcessing 属性将设置为 UnknownMember,而 UnknownMember 属性将设置为 Visible。
未知成员的默认值为 Unknown。可以通过设置 UnknownMemberName属性的值来指定一个不同的值。
|
但是,当以增量方式生成雪花型维度(正如我们在本教程中处理 Product 维度的方式)时,或使用“维度设计器”定义维度然后将这些现有维度合并到多维数据集中时,可能需要手动设置 UnknownMember 和 NullProcessing 属性。
您在下面的任务中将会看到,当 Analysis Services 处理雪花型维度时,Analysis Services 将删除其值对于链接该雪花状表的列来说为空的特性成员,除非您修改特定属性的设置。因为默认情况下 Analysis Services 会忽略此类错误,所以不会发生任何错误;NullKeyCovertedToUnknown 属性默认设置为 IgnoreError。Analysis Services 将删除包含空值的属性成员,因为它处理的是两个雪花状表之间的内部联接。
可以执行下列步骤,控制 Analysis Services 在这种情况下执行处理的方式:
- 启用维度的 UnknownMember 属性。
- 为维度的 UnknownMemberName 属性指定一个值。
- 设置与维度属性链接的相应属性关系。
- 为将雪花状表链接在一起的键列定义自定义错误处理。
在本主题的各项任务中,将在雪花状表的 Product 维度中添加产品类别和产品子类别属性,这些雪花表将被添加到 Adventure Works DW 数据源视图中。然后,启用 Product 维度的 UnknownMember 属性;将“程序集组件”指定为 UnknownMemberName 属性的值;建立“子类别”和“类别”属性与产品名称属性之间的关系;最后,为与雪花状表链接的成员键属性定义自定义错误处理。
如果在最初使用多维数据集向导定义 Analysis Services Tutorial 多维数据集时添加了“子类别”和“类别”属性,则会自动执行这些步骤。
|
查看 Product 维度中的错误处理和未知成员属性
查看 Product 维度中的错误处理和未知成员属性
-
切换到 Product 维度的维度设计器,单击“维度结构”选项卡,然后在“属性”窗格中选择“产品”。
此时,您可以查看和修改该维度自身的属性。
-
在“属性”窗口中,查看 UnknownMember 和 UnknownMemberName 属性。
注意,UnknownMember 属性未被启用,因为该属性的值设置为 None 而不是 Visible 或 Hidden,并且没有为 UnknownMemberName 属性指定名称。
-
在“属性”窗口的 ErrorConfiguration 属性单元格中,选择“(自定义)”,再展开 ErrorConfiguration 属性集合。
将 ErrorConfiguration 属性设置为“(自定义)”允许您查看默认错误配置设置,但不会更改任何设置。
-
检查键和空键错误配置属性,但不进行任何更改。
注意,默认情况下,如果空键被转换为未知成员,则将忽略与此转换相关联的处理错误。
下图显示了 ErrorConfiguration 属性集合的属性设置。
-
单击“浏览器”选项卡,验证已在“层次结构”列表中选中了“产品型号系列”,然后展开“所有产品”。
注意“产品系列”级别的五个成员。
-
展开“组件”,再展开“型号名称”级别的未标记成员。
此级别包含生成其他组件时使用的部件组件(从 Adjustable Race 产品开始),如下图所示。
从雪花状表和“产品类别”用户定义层次结构定义属性
从雪花状表和“产品类别”用户定义层次结构定义属性
-
打开 Adventure Works DW 数据源视图的数据源视图设计器,在“关系图组织程序”窗格中选择“分销商销售”,再在 Business Intelligence Development Studio 的“数据源视图”菜单上单击“添加/删除表”。
此时将打开“添加/删除表”对话框。
-
在“包含的对象”列表中,选择 dbo.DimProduct,再单击“添加相关表”。
dbo.DimProductSubcategory 表即被添加到“包含的对象”列表中。
-
在 dbo.DimProductSubcategory 表被默认选定为最新添加的表的情况下,再次单击“添加相关表”。
“dbo.DimProductCategory”表即被添加到“包含的对象”列表中。
-
单击“确定”。
-
在 BI Development Studio 的“格式”菜单上,指向“自动布局”,再单击“关系图”。
注意,dbo.DimProductSubcategory 表和 dbo.DimProductCategory 表互相链接,并且还通过 Product 表链接到 ResellerSales 表,如下图所示。
-
切换到 Product 维度的维度设计器,再单击“维度结构”选项卡。
-
右键单击“数据源视图”窗格中的任意位置,再单击“显示所有表”。
-
在“数据源视图”窗格中,找到 DimProductCategory 表,右键单击该表中的 ProductCategoryKey,再单击“从列新建属性”。
-
在“属性”窗格中,将此新属性的名称更改为“类别”。
-
在“属性”窗口中,单击 NameColumn 属性单元格,选择“(新建)”,然后在“对象绑定”对话框的“源表”字段和“源列”字段中分别指定 DimProductCategory 和 EnglishProductCategoryName,然后单击“确定”。
-
在“数据源视图”窗格中,找到 DimProductSubcategory 表,右键单击该表中的 ProductSubcategoryKey,再单击“从列新建属性”。
-
在“属性”窗格中,将此新属性的名称更改为“子类别”。
-
在“属性”窗口中,单击 NameColumn 属性单元格,选择“(新建)”,再在“对象绑定”对话框的“源表”字段中指定 DimProductSubcategory,在“源列”字段中指定 EnglishProductSubcategoryName,再单击“确定”。
-
创建一个名为“产品类别”的新用户定义层次结构,该层次结构从上至下包含下列级别:“类别”、“子类别”和“产品名称”。
-
将“所有产品”指定为“产品类别”用户定义层次结构的 AllMemberName 属性的值。
浏览 Product 维度中的用户定义层次结构
浏览 Product 维度中的用户定义层次结构
-
在 Product 维度的“维度设计器”的“维度结构”选项卡工具栏上,单击“处理”。
-
单击“是”以生成并部署项目,再单击“运行”来处理 Product 维度。
-
成功处理后,在“处理进度”对话框中展开“处理维度‘产品’已成功完成”,展开“处理维度属性‘产品名称’已成功完成”,再展开“SQL 查询 1”。
-
单击 SELECT DISTINCT 查询,再单击“查看详细信息”。
注意,WHERE 子句已添加到 SELECT DISTINCT 子句中,这将删除 ProductSubcategoryKey 列中不包含值的那些产品,如下图所示。
-
依次单击“关闭”三次,关闭所有处理对话框。
-
单击 Product 维度的维度设计器中的“浏览器”选项卡,再单击“重新连接”。
-
验证“产品型号系列”是否出现在“层次结构”列表中,展开“所有产品”,再展开“组件”。
注意,没有列出所有部件组件列表,因为在 SELECT DISTINCT 语句中使用了 WHERE 子句,如下图所示。
-
选择“层次结构”列表中的“产品类别”,展开“所有产品”,再展开“组件”。
注意,没有显示部件组件。
若要修改前一个任务中提到的行为,需要执行以下步骤:启用 Product 维度的 UnknownMember 属性,设置 UnknownMemberName 属性的值,将“子类别”和“型号名称”特性的 NullProcessing 属性设置为 UnknownMember,将“类别”特性定义为“子类别”特性的相关特性,再将“产品系列”特性定义为“型号名称”特性的相关特性。以上步骤将使 Analysis Services 对在 SubcategoryKey 键列中不包含值的每个产品使用未知成员名称值,如以下任务所示。
启用未知成员,定义属性关系,并指定空值的自定义处理属性
启用未知成员,定义属性关系,并指定空值的自定义处理属性
-
单击 Product 维度的维度设计器中的“维度结构”选项卡。
-
在“属性”窗口中,将 Product 维度的 UnknownMember 属性更改为 Visible,再将此维度的 UnknownMemberName 属性值更改为“程序集组件”。
将 UnknownMember 属性更改为 Visible 或 Hidden 后,就会启用该维度的 UnknownMember 属性。
-
在“属性”窗格中,展开下列属性:
- 产品名称
- 子类别
- 型号名称
注意,“产品系列”与“型号名称”属性相关,并通过该属性间接链接至“产品名称”键属性。注意,尚未为“子类别”属性定义属性关系,“类别”属性直接通过键属性链接至“产品名称”属性。
- 产品名称
-
将“类别”属性关系从“产品名称”属性拖至“子类别”属性。
现在,“类别”属性通过“子类别”属性链接到事实数据表中的行,而“子类别”属性又通过“产品名称”属性链接到事实数据表中的行。
-
在“属性”窗格中,选择“子类别”,然后在“属性”窗口的 KeyColumns 属性单元格中单击省略号按钮 (…)。
-
在“DataItem 集合编辑器”对话框中,将 NullProcessing 属性更改为 UnknownMember,如下图所示。
-
单击“确定”。
-
在“属性”窗格中,选择“型号名称”,再在“属性”窗口的 KeyColumns 属性单元格中单击省略号按钮 (…)。
-
在“DataItem 集合编辑器”对话框中,将 NullProcessing 属性更改为 UnknownMember,再单击“确定”。
由于进行了上述更改,因此 Analysis Services 在处理期间遇到“子类别”属性或“型号名称”属性的空值时,会用未知成员值作为键值进行替换,并将正确构建用户定义层次结构。
再次浏览 Product 维度
浏览 Product 维度
-
在“生成”菜单上,单击“部署 Analysis Services 教程”。
-
成功完成部署后,单击 Product 维度的维度设计器中的“浏览器”选项卡,再单击“重新连接”。
-
验证在“层次结构”列表中已选中了“产品类别”,然后展开“所有产品”。
注意,“程序集组件”已显示为“类别”级别的新成员。
-
展开“类别”级别的“程序集组件”成员,再展开“子类别”级别的“程序集组件”成员。
注意,在“产品名称”级别上显示了所有程序集组件,如下图所示。
-
在“层次结构”列表中选择“产品型号系列”,依次展开“所有产品”、“产品系列”级别的“程序集组件”成员以及“型号名称”级别的“程序集组件”成员。
注意,在“产品名称”级别上显示了所有程序集组件。
通过下载并安装已更新的示例,可以获得第 4 课中使用的完整项目。有关详细信息,请参阅安装示例中的“获取已更新的示例”。
|
您已了解本教程中的内容,现在可以将属性层次结构组织到用户层次结构内的级别中,以便在多维数据集中为用户提供导航路径。用户层次结构可以表示自然 层次结构(如市/县、州/省/自治区和国家/地区),或者可以只表示导航路径(如雇员姓名、职务和部门名称)。对于在层次结构中导航的用户而言,这两类用 户层次结构是相同的。
使用自然层次结构时,如果您在构成级别的属性之间建立了属性关系,则 Microsoft SQL Server 2005 Analysis Services (SSAS) 可以使用某个属性的聚合来获取相关属性的结果。如果属性之间没有定义的关系,则 Analysis Services 将根据键属性来聚合所有非键属性。此外,您也应该了解,在定义这样一种关系时,可以将关系指定为弹性关系或刚性关系。如果您将关系定义为刚性,则 Analysis Services 会在更新维度时保留聚合。如果定义为刚性的关系在实际过程中发生了更改,那么除非维度得到了完全处理,否则 Analysis Services 将在处理过程中生成错误。指定适当的关系和关系属性,可提高查询和处理性能。有关详细信息,请参阅定义和配置属性关系和配置用户定义层次结构属性。
在本主题的各个任务中,您将为 Analysis Services Tutorial 项目的自然用户层次结构中的属性定义属性关系。这些层次结构包括“客户”维度中的“客户所在地域”层次结构、“销售区域”维度中的“销售区域”层次结构、 Product 维度中的“产品型号系列”层次结构以及“时间”维度中的“会计时间”和“日历时间”层次结构。这些用户层次结构全部都是自然层次结构。
为“客户所在地域”层次结构中的属性定义属性关系
为“客户所在地域”层次结构中的属性定义属性关系
-
切换到“客户”维度的维度设计器,然后单击“维度结构”选项卡。
在“层次结构和级别”窗格中,请注意“客户所在地域”用户定义层次结构中的级别。此层次结构当前只是用户的向下钻取路径 - 并未在级别或属性之间定义任何关系。
-
在“属性”窗格中,展开“地域”。
请注意,其中有四个属性关系,用于将 Geography 表的非键属性链接到 Geography 表的键属性。
-
在“属性”窗格中,展开“全名”。
请注意,“地域”属性与“全名”属性相关。另请注意,“邮政编码”属性是通过“地域”属性间接链接到“全名”属性的,因为“邮政编码”链接到“地域”属性,而“地域”属性链接到“全名”属性。
-
将“邮政编码”属性关系从“地域”属性拖至“全名”属性的“<新建属性关系>”标记。
“邮政编码”属性现在与“全名”属性直接相关。在“属性”窗口中,请注意,此特性的 RelationshipType 属性设置为 Flexible。这是正确的,因为客户与邮政编码之间的关系可能会随着时间的推移而更改。
-
在“属性”窗格中,展开“邮政编码”属性。
“市/县”属性当前通过“地域”属性与“邮政编码”属性相关,而不是直接相关。
-
将“市/县”属性关系从“地域”属性拖到“邮政编码”属性的“<新建属性关系>”标记。
“市/县”属性现在与“邮政编码”属性直接相关。在“属性”窗口中,请注意,此特性的 RelationshipType 属性设置为 Flexible。这是正确的,因为市/县与邮政编码之间的关系可能会随着时间的推移而更改。
-
在“属性”窗格中,展开“市/县”。
“省/市/自治区”属性当前通过“全名”和“地域”属性与“市/县”属性相关。
-
将“省/市/自治区名”属性关系从“地域”属性拖至“市/县”属性的“<新建属性关系>”标记,然后将该属性关系的 RelationshipType 属性值更改为 Rigid。
该属性关系的 RelationshipType 属性值应设置为 Rigid,因为市/县与州/省/自治区之间的关系不会随着时间推移而更改。
-
在“属性”窗格中,展开“省/市/自治区”,将“国家/地区 - 区域”属性关系从“地域”属性拖至“省/市/自治区”属性的“<新建属性关系>”标记,然后将该属性关系的 RelationshipType 属性值更改为 Rigid。
该属性关系的 RelationshipType 属性值应设置为 Rigid,因为州/省/自治区与国家/地区区域之间的关系不会随着时间的推移而更改。
-
在“属性”窗格中,删除“地域”属性。
该属性已不再需要。
在本任务中,您学习的是将属性关系从“地域”属性移动到其他属性,而不是为每个属性都新建属性关系。定义多余的关系通常没有任何意义,而且会增加不必要的处理时间。
|
为“销售区域”层次结构中的属性定义属性关系
为“销售区域”层次结构中的属性定义属性关系
-
打开“销售区域”维度的维度设计器,然后单击“维度结构”选项卡。
-
在“层次结构和级别”窗格中,单击“销售区域”层次结构,然后展开“销售区域所属地区”和“销售区域所属国家”。
请注意,“销售区域组”直接链接到键属性“销售区域所属地区”,而不是链接到“销售区域所属国家”属性。
-
将“销售区域组”属性关系从“销售区域所属地区”属性拖到“销售区域所属国家”属性的“<新建属性关系>”标记。
“销售区域组”现已链接到“销售区域所属国家”,而“销售区域所属国家”现已链接到“销售区域所属地区”。上述每个关系的 RelationshipType 属性都应设置为 Flexible,因为一个国家/地区内的区域分组可能会随着时间的推移而更改,并且国家/地区的分组可能也会随着时间的推移而更改。
注意 您可以在“属性”窗格或“层次结构和级别”窗格中设置用户定义层次结构的属性关系。
为“产品型号系列”层次结构中的属性定义属性关系
为“产品型号系列”层次结构中的属性定义属性关系
-
打开 Product 维度的维度设计器,然后单击“维度结构”选项卡。
-
在“属性”窗格中,展开“型号名称”属性和“产品名称”属性。
-
将“产品系列”属性关系从“产品名称”属性拖到“型号名称”属性的“<新建属性关系>”标记。
此属性关系的 RelationshipType 属性值应设置为 Flexible,因为产品系列与型号名称之间的关系可能会随着时间的推移而更改。
为“会计时间”层次结构中的属性定义属性关系
为“会计时间”层次结构中的属性定义属性关系
-
切换到“时间”维度的维度设计器,然后单击“维度结构”选项卡。
-
在“属性”窗格中,展开下列属性:
- 日期
- 月份名称
- 会计季度
- 会计半期
- 日期
-
将“会计季度”属性关系从“日期”属性拖到“月份名称”属性的“<新建属性关系>”标记,然后将该特性的 RelationshipType 属性值设置为 Rigid。
-
将“会计半期”属性关系从“日期”属性拖到“会计季度”属性的“<新建属性关系>”标记,然后将该特性的 RelationshipType 属性值设置为 Rigid。
-
将“会计年度”属性关系从“日期”属性拖到“会计半期”属性的“<新建属性关系>”标记,然后将该特性的 RelationshipType 属性值设置为 Rigid。
为“日历时间”层次结构中的属性定义属性关系
为“日历时间”层次结构中的属性定义属性关系
-
在“属性”窗格中,展开“月份名称”、“日历季度”和“日历半期”。
-
将“日历季度”属性关系从“日期”属性拖到“月份名称”属性的“<新建属性关系>”标记,然后将该特性的 RelationshipType 属性值设置为 Rigid。
-
将“日历半期”属性关系从“日期”属性拖到“日历季度”属性的“<新建属性关系>”标记,然后将该特性的 RelationshipType 属性值设置为 Rigid。
-
将“日历年”属性关系从“日期”属性拖到“日历半期”属性的“<新建属性关系>”标记,然后将该特性的 RelationshipType 属性值设置为 Rigid。
为“地域”层次结构中的属性定义属性关系
为“地域”层次结构中的属性定义属性关系
-
打开“地域”维度的维度设计器,然后单击“维度结构”选项卡。
-
在“属性”窗格中,展开下列属性:
- 市/县
- 地域关键字
- 邮政编码
- 省/市/自治区
- 市/县
-
将“市/县”属性关系从“地域关键字”属性拖到“邮政编码”属性的“<新建属性关系>”标记。
因为市/县内的邮政编码可能会随着时间的推移而更改,所以,该特性的 RelationshipType 相应的属性值为 Flexible。
-
将“省/市/自治区”属性关系从“地域关键字”属性拖至“市/县”属性的“<新建属性关系>”标记,然后将该特性的 RelationshipType 属性值设置为 Rigid。
-
将“国家/地区 - 区域”属性关系从“区域关键字”属性拖到“省/市/自治区”属性的“<新建属性关系>”标记,然后将该特性的 RelationshipType 属性值设置为 Rigid。
-
将“区域关键字”属性设置为不可见、未优化和未排序。
-
部署 Analysis Services Tutorial 项目。
在第 3 课中,您已了解如何根据属性成员的名称或键值对属性成员进行排序。您还了解了如何使用组合成员键影响属性成员和排序顺序。有关详细信息,请参阅修改“时间”维度。但有时您可能必须根据辅助属性对属性成员进行排序,才能获得所需的排序顺序,例如,当属性名称或属性键都无法提供所需的排序顺序时。要按辅助属性名称或键对属性进行排序,必须使用与该属性相关的辅助属性。
属性关系定义属性之间的关系或依赖关系。在基于单个关系表的维度中,通常所有属性都通过键属性彼此相关。这是因为维度的所有属性均提供有关成员的信 息,这些成员通过键属性链接到每个相关度量值组的事实数据表中的事实数据。在基于多个表的维度中,属性通常根据表之间的联接键进行链接。
但用户可能还想了解有关层次结构中特殊级别成员的其他信息。通过维度设计器,您可以定义属性之间的其他关系,也可以更改默认关系以提高性能。创建属 性关系时的主要约束是,确保引用的属性对于与其相关的属性中的任何成员均只包含一个值。定义两个属性之间的关系时,可以根据成员之间的关系是否会随时间更 改而将关系定义为刚性关系或灵活关系。例如,雇员可能移动到不同的销售区域,而市县不会移动到不同的州/省/自治区。如果将关系定义为刚性关系,则每次增 量处理维度时不会重新计算属性聚合。但如果成员之间的关系确实发生更改,则必须对维度进行完全处理。有关详细信息,请参阅属性关系、定义和配置属性关系、配置特性关系属性,以及指定用户定义层次结构中属性之间的属性关系。
在本主题的任务中,将根据基础维度表中的现有列在“时间”维度中定义一个新属性。您将使用这一新属性按时间顺序而不是字母顺序对日历月份成员进行排 序。您还将根据命名计算在“客户”维度中定义一个新属性,该新属性用于对“上下班路程”属性成员进行排序。在下一个主题的任务中,您将了解如何使用属性关 系提高查询性能。
在“时间”维度中定义属性关系和排序顺序
在“时间”维度中定义属性关系和排序顺序
-
打开“时间”维度的维度设计器,然后在“属性”窗口中查看“月份名称”特性的 OrderBy 属性。
注意,“月份名称”特性成员按其键值进行排序。
-
切换到“浏览器”选项卡,确保在“层次结构”列表中已选中“日历时间”,然后展开用户定义层次结构中的级别以查看日历月份的排序顺序。
注意,属性层次结构的成员根据其成员键(即月份和年份)的 ASCII 值进行排序。在此情况下,按属性名或键进行的排序将不会按时间顺序对日历月份进行排序。为解决此问题,将根据新的属性(MonthNumberOfYear 属性)对属性层次结构的成员进行排序。这一新属性是根据 DimTime 维度表中存在的列创建的。
-
切换到“时间”维度的“维度结构”选项卡,右键单击“数据源视图”窗格中的 MonthNumberOfYear,然后单击“从列新建属性”。
-
在“属性”窗格中,选择 Month Number Of Year,然后在“属性”窗口中将 AttributeHierarchyEnabled 属性设置为 False,将 AttributeHierarchyOptimizedState 属性设置为 NotOptimized,并将 AttributeHierarchyOrdered 属性设置为 False。
这些设置将向用户隐藏该属性,并可节省处理时间,并且由于这一新属性将只用于对其他属性的成员进行排序,所以应通过此方式进行设置。
使“属性”窗口中的属性按字母顺序排列可以简化此任务,因为排序后这三个属性会彼此相邻。
|
- 在“属性”窗格中展开“日期”。
注意,“时间”维度中的所有属性都与“日期”属性直接相关,“日期”属性是将维度成员与相关度量组中的事实数据关联的成员键。 - 展开“月份名称”。
注意,在“月份名称”属性与“月份编号”属性之间未定义任何关系。 - 将“月份编号”属性拖动到“月份名称”属性下的“<新建属性关系”>标记。
如果您还定义了其他关系,则移动现有关系可以有效地改善处理性能,并可减少冗余。现在已经在“月份编号”属性和“月份名称”属性之间定义了关系。在“属性”窗口中,可以注意到“月份编号”特性关系的 RelationshipType 属性的默认值为 Flexible。 - 在“属性”窗口中,将 RelationshipType 属性的值更改为 Rigid。
“月份名称”属性和“月份编号”属性的成员之间的关系将不随时间而更改。因此,Analysis Services 将不会在增量处理过程中删除此关系的聚合。如果确实发生更改,则会在增量处理过程中出现处理错误,您将需要对维度执行完整的过程。您现在已准备就绪,可以设置“月份名称”的成员的排序顺序。
下图显示“月份名称”特性的“月份编号”特性关系的 RelationshipType 属性已设置为 Rigid。
- 在“特性”窗格中选择“月份名称”,然后将“属性”窗口中 OrderBy 属性的值更改为 AttributeKey,并将 OrderByAttribute 属性的值更改为“月份编号”。
下图显示了“属性”窗口中的这些属性更改。
- 在“生成”菜单上,单击“部署 Analysis Services 教程”。
- 成功完成部署时,切换到“时间”维度的“浏览器”选项卡,单击“重新连接”,然后浏览“日历时间”和“会计时间”用户层次结构,以确保月份现在按时间顺序排序。
注意,月份现在按时间顺序排序,如下图所示。
在“客户”维度中定义属性关系和排序顺序
在“客户”维度中定义属性关系和排序顺序
-
在“客户”维度的维度设计器中,切换到“维度结构”选项卡。
-
在“特性”窗格中,选择“上下班路程”特性,然后在“属性”窗口中查看 OrderBy 属性。
-
切换到“浏览器”选项卡,然后浏览“上下班路程”属性层次结构的成员。
注意,该属性层次结构的成员基于成员键的 ASCII 值排序。在此情况下,按属性名称或键排序不会按从小到大的顺序对通勤距离进行排序。在此任务中,根据 CommuteDistanceSort 命名计算(将相应的排序号分配给列中的不同值)对属性层次结构的成员进行排序。此命名计算已添加到 Adventure Works DW 数据源视图的 Customer 表中,以节省时间;可以切换到此数据源视图中,以查看在此命名计算中使用的 SQL 脚本。有关详细信息,请参阅在数据源视图中定义命名计算 (Analysis Services)。
下图显示了“上下班路程”属性层次结构的成员,这些成员按成员键的 ASCII 值进行排序。
-
在“客户”维度的维度设计器中,切换到“维度结构”选项卡,右键单击“数据源视图”窗格的 Customer 表中的 CommuteDistanceSort,然后单击“从列新建属性”。
-
在“特性”窗格中,选择“上下班路程排序”,然后在“属性”窗口中将此特性的 AttributeHierarchyEnabled 属性设置为 False,将 AttributeHierarchyOptimizedState 属性设置为 NotOptimized,并将 AttributeHierarchyOrdered 属性设置为 False。
这些设置将向用户隐藏该属性,并可节省处理资源,并且由于这一新属性将只用于对其他属性的成员进行排序,所以应通过此方式进行设置。
-
在“特性”窗格中,展开“全名”。
注意,“客户”维度中所有从 Analysis Services Tutorial 数据源视图的 Customer 表中派生的属性都通过此属性相关。
-
展开“地域”。
注意,“客户”维度中所有从 Analysis Services Tutorial 数据源视图的 Geography 表中派生的属性都通过“地域”属性相关。
-
选择“地域”,然后在“属性”窗口中将它的 AttributeHierarchyVisible 属性设置为 False,将 AttributeHierarchyOptimized 属性设置为 NotOptimized,并将 AttributeHierarchyOrdered 属性设置为 False。
由于此属性不用于浏览,因此这些设置将向用户隐藏该属性,并可节省处理时间。如果属性层次结构包含成员属性,则必须启用此属性层次结构。
-
在“特性”窗格中,展开“上下班路程”。
注意,在此属性与“上下班路程排序”属性之间未定义任何关系。
-
将“上下班路程排序”属性拖动到“上下班路程”属性下的“<新建属性关系”>标记。
您现在已经在“上下班路程” 属性与“上下班路程排序”属性之间定义了关系。在“属性”窗口中,注意“上下班路程”特性的“上下班路程排序”成员的 RelationshipType 属性为 Flexible。
-
在“属性”窗口中,将 RelationshipType 属性的值更改为 Rigid。
“上下班路程”属性和“上下班路程排序”属性的成员之间的关系将不随时间而更改。您现在已准备就绪,可以设置“上下班路程”属性的排序顺序。
-
在“特性”窗格中选择“上下班路程”,然后将“属性”窗口中 OrderBy 属性的值更改为 AttributeKey,并将 OrderByAttribute 属性的值更改为“上下班路程排序”。
-
在“生成”菜单上,单击“部署 Analysis Services 教程”。
-
当部署成功完成时,切换到“客户”维度的维度设计器的“浏览器”选项卡,单击“重新连接”,然后浏览“上下班路程”属性层次结构。
注意,属性层次结构成员现在根据不断增加的距离按逻辑顺序进行排序,如下图所示。
隐藏和禁用属性层次结构:
默认情况下,将在 Microsoft SQL Server 2005 Analysis Services (SSAS) 中为维度中的每个属性创建一个属性层次结构,并且每个层次结构均可用于确定事实数据的维度。此层次结构由“全部”级别和包含该层次结构中所有成员的详细级 别组成。正如您已经了解到的,可以将属性组织到用户定义层次结构中,以提供在多维数据集中的导航路径。在某些环境下,可能需要禁用或隐藏某些属性以及它们 的层次结构。例如,某些属性(如,社会保障号码或身份证号、付费率、出生日期和登录信息)不是用户将要用来维度化多维数据集信息的属性。而这些信息通常只 是作为特定属性成员的详细信息而显示。您可能需要隐藏这些属性层次结构,使这些属性只在作为特定属性的成员属性时可见。可能还需要使其他属性的成员(例 如,客户名称或邮政编码)只在通过用户层次结构而不是单独通过属性层次结构进行查看时才可见。这样做的一个理由可能是属性层次结构中不同成员的个数差异太 大。最后,为了改善处理性能,应该禁用用户不用于浏览的属性层次结构。
AttributeHierarchyEnabled 属性的值确定是否创建属性层次结构。如果将该属性设置为 False,则不创建属性层次结构,并且无法将该属性用作用户层次结构中的一个级别;该属性层次结构只作为成员属性存在。但是,禁用的属性层次结构仍然可以用来对另一个属性的成员进行排序。如果将 AttributeHierarchyEnabled 属性的值设置为 True,则 AttributeHierarchyVisible 属性的值将确定该属性层次结构是否可见(与是否在用户定义层次结构中使用它无关)。
启用属性层次结构时,可能需要指定以下其他三个属性的值:
- IsAggregatable
默认情况下,为所有属性层次结构定义了一个“(全部)”级别。若要禁用已启用的属性层次结构的“(全部)”级别,请将此属性的值设置为 False。
IsAggregatable属性设置为 False 的特性只能用作用户定义层次结构的根,而且应该指定一个默认成员(否则,Analysis Services 引擎将为您选择一个成员)。
|
- AttributeHierarchyOrdered
默认情况下,Analysis Services 将在处理期间对已启用的属性层次结构的成员进行排序,然后按 OrderBy 属性的值(例如,按名称或按键)存储成员。如果您不关心排序,则可以通过将该属性的值设置为 False 来提高处理性能。 - AttributeHierarchyOptimizedState
默认情况下,Analysis Services 将在处理期间为每个已启用的属性层次结构创建索引,以提高查询性能。如果不打算使用属性层次结构进行浏览,则可以通过将该属性的值设置为 NotOptimized 来提高处理性能。但是,如果使用隐藏的层次结构作为维度的键属性,则通过创建属性成员的索引仍然能提高性能。
如果禁用了属性层次结构,则不应用这些属性。
在该主题内的任务中,将禁用不会用于浏览的“雇员”维度中的社会保障号码和其他属性。然后,将隐藏“客户”维度中的客户名称和邮政编码属性层次结构。这些层次结构中的大量属性成员将使浏览这些层次结构变得很缓慢,而与用户层次结构无关。
设置“雇员”维度中的属性层次结构属性
设置“雇员”维度中的属性层次结构属性
-
切换到“雇员”维度的维度设计器,再单击“浏览器”选项卡。
-
确认在“层次结构”列表中显示下列属性层次结构:
- 基本报酬
- 出生日期
- 登录 ID
- 经理 SSN
- SSN
- 基本报酬
-
切换到“维度结构”选项卡,再通过使用 Ctrl 键同时选择多个属性,在“属性”窗格中选择以下属性:
- 基本报酬
- 出生日期
- 登录 ID
- 经理 SSN
- SSN
- 基本报酬
-
在“属性”窗口中,将所选属性的 AttributeHierarchyEnabled 属性值设置为 False。
注意,在“属性”窗格中每个属性的图标都会发生更改,以指示该属性未启用。
下图显示将所选属性的 AttributeHierarchyEnabled 属性设置为 False。
-
在“生成”菜单上,单击“部署 Analysis Services 教程”。
-
成功完成处理后,切换到“浏览器”选项卡,单击“重新连接”,再尝试浏览每个修改后的属性层次结构。
注意,修改后的属性的成员不会作为“层次结构”列表中的属性层次结构在浏览时可用。如果尝试添加一个禁用的属性层次结构作为用户层次结构的一个级别,那么您将收到错误消息,通知您必须启用该属性层次结构才能参与用户定义层次结构。
设置“客户”维度中的属性层次结构属性
设置“客户”维度中的属性层次结构属性
-
切换到“客户”维度的维度设计器,再单击“浏览器”选项卡。
-
确认在“层次结构”列表中显示下列属性层次结构:
- 全名
- 邮政编码
- 全名
-
切换到“维度结构”选项卡,再通过使用 Ctrl 键同时选择多个属性,在“特性”窗格中选择以下特性:
- 全名
- 邮政编码
- 全名
-
在“属性”窗口中,将所选属性的 AttributeHierarchyVisible 属性值设置为 False。
由于这些属性层次结构的成员将用于确定事实数据的维度,因此,对这些属性层次结构的成员进行排序和优化将提高性能。因此,不应当更改这些特性的属性。
下图显示设置为 False 的 AttributeHierarchyVisible 属性。
-
将“邮政编码”属性从“属性”窗格拖到“层次结构和级别”窗格中的“客户所在地域”用户层次结构(直接放于“市/县”级别下)。
注意,隐藏的属性仍然可以成为用户层次结构中的级别。
-
在“生成”菜单上,单击“部署 Analysis Services 教程”。
-
成功完成部署后,切换到“客户”维度的“浏览器”选项卡,再单击“重新连接”。
-
尝试使用修改后的任何一个属性层次结构进行浏览。
注意,修改后的任何属性层次结构都不会出现在“层次结构”列表中。
-
在“层次结构”列表中,选择“客户所在地域”,再在浏览器窗格中浏览每个级别。
请注意,隐藏的级别“邮政编码”和“全名”在该用户定义层次结构中可见。