定义计算成员

计算成员是基于多维数据集数据、算术运算符、数字和函数的组合而定义的维度或度量值组成员。例如,可以创建用于计算多维数据集中的两个物理度量值之和的计算成员。计算成员定义将存储在多维数据集中,但它们的值将在查询时计算。

若要创建计算成员,请在多维数据集设计器的**“计算”选项卡上使用“新建计算成员”命令。您可以在包括度量值维度在内的任意维度中创建计算成员。还可以将计算成员放在“计算属性”**对话框的显示文件夹中。有关详细信息,请参阅计算定义计算创建计算成员

在此主题的任务中,将定义计算度量值,以便让用户查看 Internet 销售、分销商销售和所有销售的毛利润率百分比和销售率。

定义聚合物理度量值的计算

定义聚合物理度量值的计算

  1. 打开 Analysis Services Tutorial 多维数据集的多维数据集设计器,然后单击**“计算”**选项卡。

    注意**“计算表达式”窗格和“脚本组织程序”**窗格中的默认 CALCULATE 命令。此命令指定多维数据集中的度量值应该根据其 AggregateFunction 属性所指定的值进行聚合。度量值通常会求和,但也可能计数或按其他某种方式进行聚合。

    下图显示了多维数据集设计器的**“计算”**选项卡。

    多维数据集设计器的“计算”选项卡

  2. 在**“计算”选项卡的工具栏上,单击“新建计算成员”**。

    新窗体将出现在**“计算表达式”窗格中,您可以在其中定义此新计算成员的属性。新成员还会出现在“脚本组织程序”**窗格中。

    下图显示了在单击**“新建计算成员”时出现在“计算表达式”**窗格中的窗体。

    “计算表达式”窗格窗体

  3. 在**“名称”**框中,将计算度量值的名称更改为 [Total Sales Amount]。

    如果计算成员的名称包含空格,则该计算成员名称必须放在方括号中。

    注意,在**“父层次结构”列表中,默认情况下,将在“度量值”**维度中创建新的计算成员。通常,度量值维度中的计算成员也称为计算度量值。

  4. 在**“计算”选项卡的“计算工具”窗格中的“元数据”选项卡上,展开“度量值”,再展开“Internet 销售”后,可以查看“Internet 销售”**度量值组的元数据。

    可以将元数据元素从**“计算工具”窗格拖到“表达式”框中,再添加运算符和其他元素,以便创建多维表达式 (MDX)。或者,可以直接在“表达式”**框中键入 MDX 表达式。

    注意注意

    如果无法在“计算工具”窗格中查看任何元数据,请在工具栏上单击“重新连接”。如果该操作失败,则可能必须处理多维数据集,或启动 Analysis Services 实例。

  5. 将**“Internet 销售额”“计算工具”窗格中的“元数据”选项卡拖到“计算表达式”窗格中的“表达式”**框中。

  6. 在**“表达式”框中,在“[度量值].[Internet 销售额]”**的后面键入加号 (+)。

  7. 在**“计算工具”窗格中的“元数据”选项卡上,展开“分销商销售”,再将“分销商销售额”拖到“计算表达式”窗格中的“表达式”**框中加号 (+) 的后面。

  8. 在**“格式字符串”列表中,选择“货币”**。

  9. 在**“非空行为”列表中,选中“Internet 销售额”“分销商销售额”复选框,再单击“确定”**。

    在**“非空行为”列表中指定的度量值将用于解决 MDX 中的 NON EMPTY 查询。在“非空行为”列表中指定一个或多个度量值时,如果所有指定的度量值为空,Analysis Services 将把计算成员作为空对待。如果“非空行为”**属性是空白,Analysis Services 必须对计算成员本身进行计算,才能确定成员是否为空。

    下图显示了用您在前面的步骤中所指定的设置来填充的**“计算表达式”**窗格。

    “填充的计算表达式”窗格

  10. 在**“计算”选项卡的工具栏上,单击“脚本视图”,在“计算表达式”**窗格中检查计算脚本。

    注意,新的计算将添加到初始 CALCULATE 表达式中;将以分号分隔每个单独的计算。另外注意,在计算脚本的开始位置将出现注释。在计算组的计算脚本中添加注释是好的做法,这样可以帮助您和其他开发人员理解复杂的计算脚本。

  11. 在计算脚本中 Calculate; 命令之后和新添加的计算脚本之前添加新行,然后在脚本中独立的一行上添加以下文本:

    /* Calculations to aggregate Internet Sales and Reseller Sales measures */
    

    下图显示在教程的此位置应当出现在**“计算表达式”**窗格中的计算脚本。

    “计算表达式”窗格中的脚本

  12. 在**“计算”选项卡的工具栏上,单击“窗体视图”,验证在“脚本组织程序”窗格中选中的“[总销售额]”,再单击“新建计算成员”**。

  13. 将这个新计算成员的名称更改为 [Total Product Cost],然后在**“表达式”**框中创建以下表达式:

    [Measures].[Internet Sales-Total Product Cost] + [Measures].[Reseller Sales-Total Product Cost]
    
  14. 在**“格式字符串”列表中,选择“货币”**。

  15. 在**“非空行为”列表中,选中“Internet 销售-总产品成本”“分销商销售-总产品成本”的复选框,然后单击“确定”**。

    现在,您已经定义了两个计算成员,它们都显示在**“脚本组织程序”窗格中。这些计算成员可以由随后在计算脚本中定义的其他计算来使用。通过在“脚本组织程序”窗格中选择计算成员,可以查看任何计算成员的定义;计算成员的定义将出现在窗体视图内的“计算表达式”窗格中。直到已部署新定义的计算成员后,这些对象才会出现在“计算工具”**窗格中。计算不需要处理。

定义毛利润率计算

定义毛利润率计算

  1. 验证已在**“脚本组织程序”窗格中选中的[总产品成本],然后在“计算”选项卡的工具栏上单击“新建计算成员”**。

  2. 在**“名称”**框中,将此新计算度量值的名称为 [Internet GPM]。

  3. 在**“表达式”**框中,创建以下 MDX 表达式:

    ([Measures].[Internet Sales-Sales Amount] - 
    [Measures].[Internet Sales-Total Product Cost]) /
    [Measures].[Internet Sales-Sales Amount]
    
  4. 在**“格式字符串”列表中,选择“百分比”**。

  5. 在**“非空行为”列表中,选中“Internet 销售额”复选框,再单击“确定”**。

  6. 在**“计算”选项卡的工具栏上,单击“新建计算成员”**。

  7. 在**“名称”**框中,将此新计算度量值的名称更改为 [Reseller GPM]。

  8. 在**“表达式”**框中,创建以下 MDX 表达式:

    ([Measures].[Reseller Sales-Sales Amount] - 
    [Measures].[Reseller Sales-Total Product Cost]) /
    [Measures].[Reseller Sales-Sales Amount]
    
  9. 在**“格式字符串”列表中,选择“百分比”**。

  10. 在**“非空行为”列表中,选中“分销商销售额”复选框,再单击“确定”**。

  11. 在**“计算”选项卡的工具栏上,单击“新建计算成员”**。

  12. 在**“名称”**框中,将此计算度量值的名称更改为 [Total GPM]。

  13. 在**“表达式”**框中,创建以下 MDX 表达式:

    ([Measures].[Total Sales Amount] - 
    [Measures].[Total Product Cost]) /
    [Measures].[Total Sales Amount]
    

    注意,此计算成员引用了其他计算成员。由于此计算成员将在它所引用的计算成员之后进行计算,所以这是有效的计算成员。

  14. 在**“格式字符串”列表中,选择“百分比”**。

  15. 在**“非空行为”列表中,选中“Internet 销售额”“分销商销售额”复选框,再单击“确定”**。

  16. 在**“计算”选项卡的工具栏上,单击“脚本视图”**并检查刚才添加到计算脚本中的三个计算。

  17. 在计算脚本中紧靠 [Internet GPM] 计算的前面添加新行,然后在脚本中独立的一行上添加以下文本:

    /* Calculations to calculate gross profit margin */
    

    下图显示了有三个新计算的**“表达式”**窗格。

    “计算表达式”窗格中的新计算

定义总计计算的百分比

定义总计计算的百分比

  1. 在**“计算”选项卡的工具栏上,单击“窗体视图”**。

  2. 在**“脚本组织程序”窗格中,选择[总 GPM],再单击“计算”选项卡的“新建计算成员”**工具栏。

    通过在单击**“新建计算成员”之前单击“脚本组织程序”窗格中最后一个计算成员,可以保证新计算成员将输入到脚本的末尾。脚本按它们出现在“脚本组织程序”**窗格中的顺序执行。

  3. 将此新计算成员的名称更改为 [Internet Sales Ratio to All Products]。

  4. 在**“表达式”**框中键入以下表达式:

    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 函数一起确保当产品没有销售额时不会发生被零除错误。

  5. 在**“格式字符串”列表中,选择“百分比”**。

  6. 在**“非空行为”列表中,选中“Internet 销售额”复选框,再单击“确定”**。

  7. 在**“计算”选项卡的工具栏上,单击“新建计算成员”**。

  8. 将此计算成员的名称更改为 [Reseller Sales Ratio to All Products]。

  9. 在**“表达式”**框中键入以下表达式:

    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
    
  10. 在**“格式字符串”列表中,选择“百分比”**。

  11. 在**“非空行为”列表中,选中“分销商销售额”复选框,再单击“确定”**。

  12. 在**“计算”选项卡的工具栏上,单击“新建计算成员”**。

  13. 将此计算成员的名称更改为 [Total Sales Ratio to All Products]。

  14. 在**“表达式”**框中键入以下表达式:

    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
    
  15. 在**“格式字符串”列表中,选择“百分比”**。

  16. 在**“非空行为”列表中,选中“Internet 销售额”“分销商销售额”复选框,再单击“确定”**。

  17. 在**“计算”选项卡的工具栏上,单击“脚本视图”**,再检查刚才添加到计算脚本中的三个计算。

  18. 在计算脚本中紧靠 **[所有产品的 Internet 销售额比率]**计算之前添加新行,然后在脚本中独立的行上添加以下文本:

    /* Calculations to calculate percentage of product to total product sales */
    

    现在已经定义了八个计算成员的总计,打开“窗体”视图时,这些成员显示在**“脚本组织程序”**窗格中。

浏览新计算成员

浏览新计算成员

  1. 在 Business Intelligence Development Studio 的**“生成”菜单上,单击“部署 Analysis Services 教程”**。

  2. 部署已经成功完成后,切换到**“浏览器”选项卡,并单击“重新连接”,然后从“数据”**窗格中删除所有层次结构和度量值。

  3. 在**“元数据”窗格中,展开“度量值”**以查看度量值维度中的新计算成员。

  4. 将**“总销售额”“Internet 销售额”“分销商销售额”**度量值添加到数据区域,然后检查结果。

    注意,**“总销售额”度量值是“Internet 销售额”度量值与“分销商销售额”**度量值之和。

  5. 将**“产品类别”用户定义层次结构添加到“数据”窗格的筛选区域中,再按“山地自行车”**对该数据进行筛选。

    注意,**“总销售额”度量值是基于“山地自行车”“Internet 销售额”“分销商销售额”度量值对“山地自行车”**类别的产品销售额进行计算而产生的。

  6. Date.Calendar Date 用户定义层次结构添加到行区域,然后查看结果。

    注意,每个日历年的**“总销售额”度量值是基于“山地自行车”“Internet 销售额”“分销商销售额”度量值对“山地自行车”**类别的产品销售额进行计算而产生的。

  7. 将**“总 GPM”Internet GPM“分销商 GPM”**度量值添加到数据区域,然后检查结果。

    注意,分销商销售的毛利润率要比 Internet 销售低很多。另外注意,山地车销售的毛利润率正在随时间推移而增长,如下图所示。

    显示分销商销售的数据窗格

  8. 将**“所有产品的总销售额比率”“所有产品的 Internet 销售额比率”“所有产品的分销商销售额比率”**度量值添加到数据区域。

    注意,Internet 销售的山地车销售额在所有产品中所占的比率随时间推移而增长,但在分销商那里却在随时间推移而减少。另外注意,通过分销商销售的山地车销售额在所有产品中所占的比率低于通过 Internet 销售完成的该比率。

  9. 将筛选器从**“山地自行车”更改为“自行车”**,然后检查结果。

    注意,通过分销商销售的所有自行车的毛利润率都是负数,这是因为观光自行车和道路自行车都在亏损销售。

  10. 将筛选器更改为**“附件”**,然后检查结果。

    注意,附件的销售正在随时间而增长,但这些销售只构成总销售额的一小部分。另外注意,附件销售的毛利润率比自行车还高。

  11. 依次展开 CY 2004H2 CY 2004 以及 Q3 CY 2004

    注意,此多维数据集中 2004 年 7 月之后没有 Internet 销售额,并且 2004 年 6 月之后没有分销商销售额。这些销售值还没有从源系统添加到 Adventure Works DW 数据库。

课程中的下一个任务

定义命名集