前言
在Power BI中,我们经常需要对数据进行聚合计算,比如求和、求平均、求最大值等。
Power BI提供了一系列的聚合函数,可以用来对表中列的值进行聚合然后返回一个值。这些函数通常只需要一个参数,就是要聚合的列名。如SUM(‘销售表’[销量]),就是求销售表里的销量总和。
但是有时候,我们需要对更复杂的表达式进行聚合计算,而不是单纯的一列。今天就来学一下迭代函数解决这类问题。
为了便于理解,本文结合excel分别做两个例子,一个excel版本,一个BI版本,对比学习。
本文示例数据表及BI模型构成
销售表如下:
产品表如下:
BI数据模型
聚合函数只接受单列引用(划重点),而迭代函数可以支持多列计算而聚合
聚合函数: SUM(‘销售表’[销量])
迭代函数: SUMX(表,表达式)
以X为结尾的聚合函数非常强大和灵活,它们可以让我们对复杂的表达式进行聚合计算,而不受列或数据类型的限制。它们也可以和其他的表函数配合使用,比如FILTER、RELATEDTABLE等,来实现更多的功能。
SUMX、COUNTX、MINX、MAXX、PRODUCTX等等
以X为结尾的聚合函数有很多种,它们的区别在于最后的聚合方式不同。例如,SUMX是求和,MINX是求最小值,MAXX是求最大值,COUNTX是计数等等。它们的用法和语法都很类似,只要掌握了其中一个,就可以很容易地使用其他的。
日常工作中如果我们要计算一个销量,那么SUM(销售表[销量])就是计算销售表中销量列的所有值的和。
但是有时候,我们需要对更复杂的表达式进行聚合计算,而不是单纯的一列。比如,我们想要计算每个产品的总销售额,但是销售表中又没有产品的售价时,这个表达式涉及到两个表:销售表和产品表,它们之间有一个关联关系。如果我们直接用SUM函数来计算销售总和,就会得到错误的结果,因为SUM函数不能处理这样的表达式(因为涉及多列运算)。这时候,我们就需要用到以X为结尾的聚合函数。
假设现在我们有两张数据源表。
目标是求得对应各个产品的总销售额。
销售表如下:
产品表如下:
如果是在excel中,我们可以根据产品名,用vlookup去匹配产品表中的产品售价,然后通过售价与销量相乘得到总的销售金额
然后透视表汇总结果
通过excel的实现中,最关键的其实就是新增列,然后通过新增列的值去求和在汇总。
产品销售金额 = SUMX('销售表','销售表'[销量]*RELATED('产品表'[售价]))
通过迭代函数只需要一行代码。第二参数可以是表达式,这里的related函数相当于上面excel中的vlookup,使得匹配上的值和销售进行了相乘(这里大家可以理解为在bi中我们新增了一个虚拟行去替代excel中我们新增的两列,而SUMX函数针对虚拟的行,逐行进行表达式的计算,最后针对汇总的虚拟行,进行了SUM求和)
最后,在bi中新建一张表,拉到值内,和excel中是一样的效果。
其他以X结尾的迭代函数,也和SUMX的运行方式类似,大家可以举一反三,多在自己的业务中应用,来提高对这类函数的认识和熟练度。