之前的一期,白茶曾经分享过一次关于迭代循环的文章《迭代循环丨SUMX函数》,本期咱来深入聊聊这个问题。
聚合器:
在大部分数据模型中,几乎都需要我们对数据进行聚合类的操作。DAX中提供了很多聚合类的函数,最常用、频率最高的是SUM函数。比如说这种:
销售额 =
SUM ('表'[销售] )
这就给很多人造成了误解,聚合器就是SUM函数,这是不对的。还有很多其他的,比如说:AVERAGE求平均,MIN求最小值,MAX求最大值。这些函数本质上都是聚合器,只不过是聚合之后返回的结果不同罢了。更确切的说,聚合,这个定义是一种思维方式。
迭代器:
一些特定的函数可以对整个表进行聚合,或者根据行上下文一行一行的去筛选,这类函数就属于迭代器。他们的工作方式针对的不是一个列,而是一个表。大部分聚合器都有一个对应的迭代器函数,比如说:SUM对应SUMX,MIN对应MINX,MAX对应MAXX等等。
看到这是否有个疑问,就是是不是迭代器都有一个聚合函数呢?其实不是的,比如说FILTER函数啊、GENERATE函数、CROSSJOIN函数等等。
通常,迭代器至少需要两个参数,一个是需要扫描的表,一个是针对每一行的表达式。比如说下面的这个度量值代码:
间隔 度量值 =
INT ( SUMX ('示例','示例'[出货日期] ) - SUMX ('示例','示例'[下单日期] ) )
这种就是典型的例子,扫描表,提取对应值,进行求和。
聚合器与迭代器:
我们不妨进行的更深入一点讨论,实际上聚合器就是阉割版的迭代器,它本身函数的内部也是进行迭代匹配的,不然怎么进行相关运算呢?对吧?
想一下,SUM求和某一列,不就是按照行上下文顺序,一行一行的相加最后求和么?怎么可能不算迭代?
所以白茶的理解就是,其实聚合器本身在内部,就封装了符合自己运算逻辑的迭代器。
这里提一下**@嘿**大佬对我的点拨,受益匪浅啊。大佬是这么说的,迭代器也好,聚合器也好,它的核心关键点在于取值。逻辑顺序是这样的:
迭代器→激活行上下文→行上下文取值→值运算
明白了这个逻辑,心理对一些函数的理解就多了一些明悟。
MIN与MAX:
这里单独提一下这俩函数,其他的聚合器基本上都是针对数值生效的,但是MIN和MAX对于文本也是生效的。比如我需要对表中一列客户信息进行迭代,可以使用MINX(MAXX)+MIN(MAX)的模式。
小伙伴们❤GET了么?
白茶会不定期的分享一些函数卡片
(文件在知识星球[PowerBI丨需求圈])
这里是白茶,一个PowerBI的初学者。
下面这个知识星球是针对有实际需求的小伙伴,有需要的请加入下面的知识星球。