DAX基础--SUM 和 SUMX

本文介绍了DAX中的基础聚合函数SUM和SUMX,阐述了两者之间的区别。SUM是对列中数值直接求和,而SUMX则能处理涉及多个表的表达式求和,同时它是一个迭代器,可以遍历表中的每一行进行计算。通过SUMX,可以更灵活地实现复杂的计算需求,如计算销售利润等。

18

把一件事倒到极致,胜过把万件事做到平庸

SUM和SUMX是两个最基础的聚合函数,很多时候后面一系列复杂度量的书写都是基于这两个函数写的基础度量。这两个函数很像,但还是有很大的区别的

SUM

SUM语法很简单,对列中的所有数值进行求和,比如

Sales Amount = SUM( 'Fact_Sales'[Sales Amount] )

如果我们要算销售利润呢,初学者可能会想到销售额-成本再汇总,但是会发现PowerBI提示了错误,而且在我们写后面 -‘Fact_Sales’[Total Product Cost]时并没有触发PowerBI的智能提示,这是因为SUM只接受列引用作为参数。

当然我们也可以写两个SUM的值相减

Sum of Margin = 
SUM( 'Fact_Sales'[Sales Amount] ) - SUM ( 'Fact_Sales'[Total Product Cost] )

其实,还有更简单的方法,这就需要使用SUMX了。

SUMX

SUMX ( <Table>, <Expression> )

相对于SUM,SUMX的语法要复杂些,有两个参数

  • 参数1,表或表表达式

  • 参数2, 求值表达式

Sum of Margin2 = 
SUMX( 'Fact_Sales', 'Fact_Sales'[Sales Amount] - 'Fact_Sales'[Total Product Cost] )

这时,我们已经可以发现他们的区别,在使用SUM时不需要指定表名,因为某一列只属于具体的某一张表;但SUMX中可能会存在需要其他表中列的表达式。换句话说SUM只是某一列值的汇总,而SUMX是一个表达式的汇总。

此外,SUM在内部执行SUMX,即

Sales Amount = SUM( 'Fact_Sales'[Sales Amount] )

// 等价于

Sales Amount = SUMX( 'Fact_Sales', 'Fact_Sales'[Sales Amount] 
)

SUMX不止是一个聚合函数,它还是一个迭代器,迭代器函数循环遍历输入表中的所有行,并将逐行应用表达计算的结果存储在内存中,最后再对内存中存储的结果进行聚合计算,并释放内存。迭代器还有很多,比如MINX,MAXX等等。

再来看SUMX的用法,它的第一个参数可以是一个表表达式,

Total Margin = 
SUMX(
    ALL( 'Fact_Sales' ),
    'Fact_Sales'[Sales Amount] - 'Fact_Sales'[Total Product Cost] 
)

也可以是下面这样

Sum of Margin for Bikes = 
SUMX(
    FILTER(
        'Fact_Sales',
        RELATED( 'Dim_Product'[Category] ) = "Bikes"
    ),
'Fact_Sales'[Sales Amount] - 'Fact_Sales'[Total Product Cost] 
)


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值