Applies ToMicrosoft 365 专属 Excel Excel 2024 Excel 2021 Excel 2019 Excel 2016

“聚合”是一种对数据进行折叠、汇总或分组的方法。 在您开始使用表或其他数据源中的原始数据时,数据通常是平面的,这意味着尽管有很多细节,但未通过任何方式进行组织或分组。 由于在汇总或结构上的这一不足,可能导致从数据中发现有意义的模式比较困难。 数据建模的一个重要部分就是定义聚合,这些聚合为解决特定的业务问题而对模式进行简化、提取或汇总。

可以使用自动求和在度量值中自动创建最常见的聚合,例如使用 AVERAGECOUNTDISTINCTCOUNTMAXMINSUM 的聚合。 其他类型的聚合(如 AVERAGEXCOUNTXCOUNTROWSSUMX)返回一个表,并且需要使用 数据分析表达式 (DAX)创建的公式。

了解 Power Pivot 中的聚合

为聚合选择组

聚合数据时,按产品、价格、区域或日期等属性对数据分组,然后定义用于组中所有数据的公式。 例如,创建年的总计时,就是在创建一个聚合。 如果您创建今年对去年的比例并以百分比形式显示,这就是另一种聚合方式。

如何对数据分组取决于业务问题。 例如,聚合可以回答以下问题:

Counts   一个月内有多少笔交易?

平均    销售人员本月的平均销售额是多少?

最小值和最大值    在销量方面,哪些销售区是前五名?

若要创建回答这些问题的计算,您必须具有包含要计数或求和的数字的详细数据,并且这些数字数据必须以某种方式与您要用于组织结果的组相关。

如果数据尚未包含您可以用于分组的值,例如不包含产品类别或店铺所在的地理区域的名称,您最好通过添加类别来引入针对您的数据的组。 当您在 Excel 中构建组时,必须手动键入要使用的组,或从工作表的列中选择要使用的组。 但在关系系统中,诸如产品的类别等层次结构通常存储在不同于事实表或值表的表中。 通常将通过某种键将类别表链接到事实数据。 例如,假设您发现您的数据包含产品 ID 但是不包含产品名称或类别。 若要向平面 Excel 工作表添加类别,您可能需要在包含类别名称的列中复制。 使用 Power Pivot,您可以将产品类别表导入到您的数据模型中,在具有编号数据的表和产品类别列表之间创建关系,然后使用类别对数据进行分组。 有关详细信息,请参阅Create表之间的关系

为聚合选择函数

确定并添加了要使用的分组后,必须确定要用于聚合的数学函数。 聚合一词通常用作在聚合中使用的数学或统计运算(如求和、平均值、最小值或计数)的同义词。 但 Power Pivot 除了允许使用在 Power Pivot 和 Excel 中提供的标准聚合外,还允许创建自定义的聚合公式。

例如,对于在前面的示例中使用的同一组值和分组,您可以创建回答以下问题的自定义聚合:

筛选计数   一个月内有多少事务,不包括月末维护时段?

使用平均值随时间推移的比率    与去年同期相比,销售额的增长或下降百分比是多少?

分组的最小值和最大值    对于每个产品类别或每个销售促销,哪些销售区排名靠前?

将聚合添加到公式和数据透视表

在您大致确定如何对数据进行分组才有意义以及要使用的值后,可以决定是生成数据透视表还是在表中创建计算。 Power Pivot 扩展并改进了 Excel 的固有功能,以便创建求和、计数或平均值之类的聚合。 您可以在 Power Pivot 的 Power Pivot 窗口中或在 Excel 数据透视表区域中创建自定义聚合。

  • 计算列中,您可以创建考虑到当前行上下文的聚合,以便从另一个表中检索相关行,然后对相关行中的这些值进行求和、计数或求平均值运算。

  • 度量中,可以创建使用公式中定义的筛选器的动态聚合,以及数据透视表的设计以及切片器、列标题和行标题选择所施加的筛选器。 通过使用自动求和或创建公式,可以在 Power Pivot 中创建使用标准聚合的度量值。 还可以在 Excel 中的数据透视表中使用标准聚合创建隐式度量值。

将分组添加到数据透视表

当您设计数据透视表时,可以将代表分组、类别或层次结构的字段拖到数据透视表的列和行部分,以便对数据进行分组。 然后将包含数值的字段拖到值区域中,以便可以对它们进行计数、求平均值或求和。

如果将类别添加到数据透视表但是类别数据与事实数据无关,就可能会得到错误或奇怪的结果。 通常 Power Pivot 将通过自动检测和提出关系建议来尝试解决问题。 有关详细信息,请参阅在数据透视表中使用关系

还可以将字段拖到切片器中,从而选择要查看的某些数据组。 切片器允许您以交互方式对数据透视表中的结果进行分组、排序和筛选。

在公式中使用分组

还可以通过创建各表之间的关系,然后创建利用这些关系来查找相关值的公式,使用分组和类别对存储在表中的数据进行聚合。

换言之,如果您想要创建按类别对值进行分组的公式,则应首先使用关系来连接包含详细数据的表和包含类别的表,然后生成公式。

有关如何创建使用查找的公式的详细信息,请参阅 PowerPivot 公式中的查找

在聚合中使用筛选器

Power Pivot  中的一项新功能是可以将筛选器应用到数据的列和表,这不仅针对用户界面和数据透视表或数据透视图中的数据,而且针对要用于计算聚合的特定公式。 筛选器可以在计算列和 的公式中使用。

例如,在新的 DAX 聚合函数中,不需要指定要求和或计数的值,可以将整个表作为参数指定。 如果没有将任何筛选器应用到该表,则聚合函数适用于该表的指定列中的所有值。 但是,在 DAX 中,您可以为表创建动态或静态筛选器,以便根据筛选条件和当前上下文针对不同的数据子集应用聚合运算。

通过组合公式中的条件和筛选器,您可以创建随公式中提供的值变化的聚合,或创建随数据透视表中选择的行标题和列标题变化的聚合。

有关详细信息,请参阅在公式中筛选数据

Excel 聚合函数和 DAX 聚合函数的比较

下表列出了 Excel 提供的一些标准聚合函数,并提供指向 Power Pivot 中这些函数的实现的链接。 这些函数的 DAX 版本在行为上与 Excel 版本十分相似,只是在语法以及对某些数据类型的处理上有一些细微差别。

标准聚合函数

函数

用途

平均

返回列中所有数字的平均值(算术平均值)。

AVERAGEA

返回列中所有值的平均值(算术平均值)。 处理文本和非数字值。

计数

对列中的数值进行计数。

COUNTA

计算列中不为空的值的数目。

麦克斯

返回列中的最大数值。

MAXX

返回对某个表执行计算的一组表达式中的最大值。

MIN

返回列中的最小数值。

MINX

返回对某个表执行计算的一组表达式中的最小值。

对列中的所有数字求和。

DAX 聚合函数

DAX 提供一些聚合函数,这些函数允许您指定要对其执行聚合的表。 因此,代替只对列中的值求和或求平均值,这些函数可用于创建动态定义要聚合的数据的表达式。

下表列出了 DAX 中可用的聚合函数:

函数

用途

AVERAGEX

计算对表进行求值的一组表达式的平均值。

COUNTAX

计算对表进行求值的一组表达式的数目。

COUNTBLANK

计算列中空白值的数目。

COUNTX

计算表中行的总数。

COUNTROWS

计算从嵌套的表函数(例如筛选器函数)返回的行的数目。

SUMX

返回对表进行计算的一组表达式之和。

DAX 聚合函数和 Excel 聚合函数之间的差异

这些函数的名称与相应的 Excel 函数相同,但它们使用 Power Pivot 的内存内分析引擎并经过重新编写以使用表和列。 不能在Excel 工作簿中使用 DAX 公式,反之亦然。 它们只能用于 Power Pivot 窗口和基于 Power Pivot 数据的数据透视表中。 此外,虽然这些函数具有相同的名称,但行为可能稍有不同。 有关详细信息,请参阅相应的函数参考主题。

在聚合中计算列的方式与 Excel 处理聚合的方式也有所不同。 下面将以一个例子来帮助阐明这个不同。

假设您希望获得 Sales 表的 Amount 列中各值的总和,因此创建以下公式:

=SUM('Sales'[Amount])

在最简单的情况下,该函数从单个未筛选列中获取值,而结果也与在 Excel 中时相同,只是对 Amount 列中的各值始终只进行相加合计。 然而,在 Power Pivot中,对该公式的解释为:“获取 Sales 表中每行的 Amount 值,然后合计这些单独的值。 ”Power Pivot 会对执行聚合运算的每一行进行求值,并为每一行计算一个标量值,然后对这些值执行聚合运算。 因此,如果筛选器已应用于某个表,或者如果基于可能已筛选的其他聚合对值进行计算,公式的结果可能会不同。 有关详细信息,请参阅 DAX 公式中的上下文

DAX 时间智能函数

除了上一节所述的表聚合函数之外,DAX 还提供处理指定日期和时间的聚合函数,从而提供内置“时间智能”。 这些函数使用日期范围来获取相关的值并对值进行聚合。 还可以比较各个日期范围中的值。

下表列出了可以用于聚合的时间智能函数:

函数

用途

CLOSINGBALANCEMONTH

CLOSINGBALANCEQUARTER

CLOSINGBALANCEYEAR

计算处于给定期间的日历末尾的值。

OPENINGBALANCEMONTH

OPENINGBALANCEQUARTER

OPENINGBALANCEYEAR

计算处于给定期间前的期间的日历末尾的值。

TOTALMTD

TOTALYTD

TOTALQTD

针对以期间的第一天开始到以指定日期列中的最晚日期结束的间隔,计算某个值。

时间智能函数部分 (时间智能函数) 的其他函数是可用于检索日期或自定义日期范围以用于聚合的函数。 例如,您可以使用 DATESINPERIOD 函数来返回某一范围的日期,并且使用该日期集作为其他函数的参数,以便只计算那些日期的自定义聚合。

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。