从数据到信息
从信息到洞察

聚合函数

认识聚合函数

几乎所有数据模型都需要对聚合数据进行操作。DAX提供了一组函数,它们可以聚合表中某一列的值,并返回一个值。我们称这组函数为聚合函数。例如,以下度量值用于计算销售表SalesAmount列中所有数字的总和:

Sales:= SUM ( Sales[SalesAmount] )

如果在计算列中使用这个表达式,它将聚合表的所有行;如果将其用在度量值中,它将综合考虑所在透视表的切片器、行、列筛选器和其他筛选条件,并在这些条件筛选后的行中计值。常用的聚合函数(SUM、AVERAGE、MIN、MAX、STDEV和VAR)只对数值或日期进行操作。

聚合函数是最基础也是最常用的函数,因为度量值必须返回标量结果(数值),这意味着即使计算过程中使用表作为筛选条件,最终也必须通过聚合函数输出一个标量。

统计文本的聚合函数

与Excel类似,DAX为聚合函数提供了另一种可选语法,可以对包含数值和非数值的列进行计算,比如文本列。该语法将后缀A添加到函数的名称中,以获得与Excel相同的名称和行为。但是,这些函数只对包含真/假值的列有用,因为TRUE被计算为1,FALSE为0,而文本列始终被视为0。因此,无论列的内容是什么,如果在文本列上使用MAXA,结果总是0。此外,DAX在执行聚合时从不考虑空单元格。

即使这些函数可以在不返回错误的非数字列上使用,它们的结果通常也没有用,因为文本列无法被自动转换为数值。这些函数是AVERAGEA、COUNTA、MINA和MAXA。

尽管这些统计函数的名称相同,但是它们在DAX和Excel中使用的方式存在差异,因为在DAX中,列具有类型并且其类型确定了聚合函数的行为。Excel以单元格为单位处理数据类型,而DAX以列为单位处理数据类型。DAX 以表格形式处理数据, 每列都具有规范定义的类型, 而 Excel 公式则适用于异构单元格值, 没有明确定义的类型。如果Power Pivot中的列具有数字类型,那么所有值只能是数字或空单元格。如果列是文本类型,那么这些函数(COUNTA除外)的值总是0,即使文本可以转换为数字。而在Excel中,值是按逐个单元格计算的。综上所述,这些DAX函数对于文本列不是很有用。

特殊用法

MIN和MAX还有另一个功能:如果使用两个参数,它们将返回两个参数的最小值或最大值。因此,MIN(1,2)将返回1,MAX(1,2)将返回2。这个功能新增于2015年,在计算复杂表达式的最小值或最大值时非常有用,因为它避免了在IF语句中多次编写相同的表达式。

计数类型

前面学习的函数对于计算聚合值非常有用。但有时候,你对聚合值不感兴趣,而只对计数感兴趣。因此,DAX提供了一组有用的函数,可用于对行或值计数:

  • COUNT仅在数字列上运行
  • COUNTA在任何类型的列上运行
  • COUNTBLANK返回列中空单元格的数量
  • COUNTROWS返回表中的行数
  • DISTINCTCOUNT返回列中非重复值的个数

COUNTA是后缀为A的函数组中一个有趣的函数,因为它返回列中非空行的数量,可以在任何类型的列上工作。如果要计算列中包含空值的数量,可以使用COUNTBLANK函数。最后,如果要计算表的行数,可以使用COUNTROWS函数。注意,COUNTROWS需要一个表作为参数,而不是列。

对于任何表的任何列,COUNTA(table[column]) + COUNTBLANK(table[column])的结果总是等于COUNTROWS (table)

最后一个函数DISTINCTCOUNT非常有用,因为它完全按照名字的含义运行:统计列的不同值的数量,用列作为惟一的参数。DISTINCTCOUNT将空白值视作可能的值之一。

DISTINCTCOUNT是在2012版本的DAX中引入的函数。早期版本的 DAX 不包括非重复计数,若要计算列的不同值的数目,必须使用COUNTROWS(DISTINCT(table[column])。这两种模式返回的结果非常相同,尽管DISTINCTCOUNT更易于阅读,只需要调用一个函数。

聚合表达式的聚合函数

到目前为止我们学习的所有聚合函数都是针对列的(COUNTROWS除外,它适用于表)。因此,它们只能聚合单列的值。有一些聚合函数可以聚合一个表达式,而不是单个列。当你想使用相关表的不同列进行计算时,这组函数非常有用。例如,如果销售表包含所有销售交易记录,而与销售表相关的产品表包含所有产品信息,包括成本,你可以通过使用以下表达式定义的度量值来计算销售交易的内部总成本:

Cost:= SUMX ( Sales, Sales[Quantity] * RELATED ( Product[StandardCost] ) )

此度量值计算销售表中每一行的销售数量(从销售表)和销售产品的标准成本(从产品表相关行)的乘积。最后,它返回所有计算结果的总和。

以X后缀结尾的所有聚合函数都有这样的行为:它们在表(第一参数)的每行的执行表达式 (第二参数), 最后由相应的聚合函数(SUM, MIN, MAX和COUNT) 返回应用于表达式的结果。

在理解迭代函数一文中,你将进一步了解这种行为,届时,我们将引入计值上下文的概念。X-后缀函数有SUMX、AVERAGEX、PRODUCTX、COUNTX、COUNTAX、CONCATENATEX、MINX和MAXX。还有一些迭代器没有X后缀,比如FILTER和ADDCOLUMNS。稍后将详细介绍。

如果按聚合的对象分类,我们可以把聚合函数划分为三种不同类型:聚合列、聚合表达式和聚合表

深入理解聚合函数

此处为隐藏内容 VIP会员和付费用户可见

聚合函数的本质

此处为隐藏内容 VIP会员和付费用户可见

 

下载面板

以上隐藏内容查看价格为3G币,请先
注:加入VIP会员可享受全站权益,性价比更高。单独购买的内容长期有效,不受时间限制。
原创内容 转载请联系作者授权:PowerBI极客 » 聚合函数

说点什么

avatar
1000
 
鼓掌微笑开心憧憬爱你色并不觉得吃瓜doge二哈喵喵思考笑哭捂脸悲伤大哭抓狂汗偷笑打脸捂眼黑线问号晕拜拜闭嘴衰咒骂ok作揖
  订阅本文评论  
提醒