使用聚合函数

当维度用于对度量值进行切片时,该度量值将按照该维度中包含的层次结构进行汇总。 求和行为取决于为度量值指定的聚合函数。 对于包含数值数据的大多数度量值,聚合函数为 Sum。 指标的数值将根据层级结构中的活动级别求和到不同的量。

在 Analysis Services 中,你创建的每个度量值都由确定度量值运算的聚合函数支持。 预定义的聚合类型包括SumMinMaxCount非重复计数和其他几个更专用的函数。 或者,如果需要基于复杂或自定义公式的聚合,可以生成 MDX 计算,而不是使用预生成的聚合函数。 例如,如果要为百分比值定义度量值,则可以使用计算度量值在 MDX 中执行此作。 请参阅 CREATE MEMBER 语句 (MDX)。

通过多维数据集向导创建的度量值,将在定义过程中分配一个聚合类型。 如果源列包含数值数据,聚合类型始终为Sum。 无论源列的数据类型如何,Sum 都被分配。 例如,如果使用 Cube 向导创建度量,并且从事实数据表中提取了所有列,你会注意到,结果中的所有度量都有一个 Sum 聚合,哪怕源数据是一列日期时间。 请始终查看通过向导创建的度量值的预分配聚合方法,以确保聚合函数合适。

可以在多维数据集定义中分配或更改聚合方法,或通过 SQL Server Data Tools - Business Intelligence 或 MDX 完成此操作。 有关进一步说明,请参阅在多维模型中创建度量值和度量值组聚合(MDX)

聚合函数

Analysis Services 提供函数,用于聚合度量值组中所含维度的度量值。 聚合函数的 附加性 决定了度量值如何跨多维数据集中的所有维度聚合。 聚合函数分为三个级别的附加性:

累加性
累加度量值(也称为完全累加性度量值)可以沿包含度量值的度量值组中包含的所有维度进行聚合,且不受限制。

半加性
半累加性度量值可以沿包含度量值的度量值组中包括的一些维度(但并非全部)进行聚合。 例如,表示库存可用数量的度量值可以沿地理维度聚合,以生成可用于所有仓库的总数量,但度量值不能沿时间维度聚合,因为度量值表示可用的数量的定期快照。 沿时间维度聚合此类度量值将产生不正确的结果。 有关详细信息,请参阅 “定义半累加性行为 ”。

非加性
非累加性度量值无法在度量值组中包含度量值的任何维度上聚合。 相反,必须为表示度量值的多维数据集中的每个单元格单独计算度量值。 例如,返回百分比(如利润率)的计算度量值不能从任何维度中的子成员的百分比值聚合。

下表列出了 Analysis Services 中的聚合函数,并介绍了函数的附加性和预期输出。

聚合函数 附加性 返回的值
Sum 累加性 计算所有子成员的值的总和。 这是默认聚合函数。
Count 累加性 检索所有子成员的计数。
Min 半加性 检索所有子成员的最低数值。
Max 半加性 检索所有子成员的最高值。
DistinctCount 非加法性 检索所有唯一子成员的计数。 有关更多详细信息,请参阅下一节中的 关于不同计数度量
None 非加法 不执行聚合操作,维度中叶成员和非叶成员的所有值都直接从包含该度量的度量组的事实表中提供。 如果无法从成员的事实数据表中读取任何值,则该成员的值将设置为 null。
ByAccount 半加性 根据账户维度中某个成员的账户类型所指定的聚合函数来计算汇总。 如果度量值组中不存在帐户类型维度,则被视为 None 聚合函数。

有关帐户维度的详细信息,请参阅 创建父子类型维度的财务帐户
AverageOfChildren 半加性 计算所有非空子成员的值的平均值。
FirstChild 半加性 检索第一个子成员的值。
LastChild 半加法 检索最后一个子成员的值。
FirstNonEmpty 半可加性 检索第一个非空的子成员值。
LastNonEmpty 半加性 检索最后一个非空的子成员的值。

关于唯一计数度量值

具有 “聚合函数” 属性值为 “独特计数” 的度量值称为独特计数度量值。 唯一值计数度量可以用于计算事实数据表中维度最底层成员的出现次数。 由于计数是唯一的,如果一个成员多次出现,也只计数一次。 非重复计数度量值始终放置在专用度量值组中。 将唯一计数度量值放入其自己的度量值组中是一种最佳做法,并已作为性能优化技术内置到设计器中。

非重复计数度量值通常用于为维度的每个成员确定事实数据表中其他维度共享行的不同、最低级别成员数。 在销售多维数据集中,针对每个客户和客户组,购买了多少种不同的产品? 也就是说,对于“客户”维度的每个成员,产品维度中有多少独特的最低级成员在事实数据表中共享行数?或者,例如,在Internet网站访问分析中,对于每个访客及其组,访问了多少个不同的网页? (也就是说,对于“网站访问者”维度的每个成员,有多少不同的、最低级别的“页面”维度成员在事实表中共享行?在每个这些示例中,第二个维度的最低级别成员是通过非重复计数度量值来计数。

此类分析不限于两个维度。 事实上,唯一计数度量可以按多维数据集中维度的任意组合(包括包含计数成员的维度)分开和切分。

用于成员计数的唯一值计数度量基于事实数据表中的外键列。 (也就是说,度量值的 源列 属性标识该列。)此列连接维度表中的列,该列标识由唯一计数度量值计数的成员。

另请参阅

度量值和度量值组
MDX 函数引用 (MDX)
定义半累加性行为