oracle 同一列数据不同条件分组求和_[DAX表达式]用SUMMARIZE()实现数据透视,并构造复杂度量值...

SUMMARIZE函数的结果是一张新表,具体语法:SUMMARIZE(表,分组字段1,分组字段2...,新字段名称1,字段表达式1,新字段名称2,字段表达式2...)

SUMMARIZE函数有多个参数,第一个参数为要做数据透视的表;第二个参数为分组的字段(Excel数据透视表中的行维度字段),如果有多个分组字段,就放在第二个参数、第三个参数...;下一个参数是生成新列的名称,再下一个参数是生成新列的表达式(例如计数、求和、求平均等),如果要生成多个字段,放在后面的参数里面。

举例,下图是不同产品不同月份的销售数量,现在要求出每个产品总的销售额:

33efeb8c7f5e89f0d28c3fd5c32388bc.png

因为有五个产品,所以得到的结果是一张表,点击建模选项卡下面的新表选项,并输入dax表达式:产品维度透视 = SUMMARIZE('Sheet1',Sheet1[产品],"累计销售",SUM(Sheet1[销售数量]))

其中【产品维度透视】是新表的名称,'Sheet1'是原表的名称,Sheet1[产品]是分组的字段,"累计销售"是生成新列的名称,SUM(Sheet1[销售数量])是新列的表达式,针对每个产品的销售额进行求和;得到结果如下:

92b9df72b89273524826fb71b409da77.png

举例2,基于原始数据,希望算出3个月内累计销售数量超过500的产品数量,基于上图可以看到产品A和产品C的销售数量是超过500的,结果是2个产品,但希望是通过原始数据表直接得到结果,这个怎么做?

先介绍两个其他的dax表达式:1.countx(表,列),统计的是表中某列的数量,返回的是一个值;2.filter(表,条件表达式),返回表中满足条件的记录,并生成一个新表,返回的是一个表;

因为最后结果是一个数值,点击建模选项卡下的新建度量值,输入函数:高于500的产品数量 = COUNTX(FILTER(SUMMARIZE('Sheet1',Sheet1[产品],"累计销售",SUM(Sheet1[销售数量])),[累计销售]>500),[累计销售]),得到如下结果:

78ff806efe9112f3dc70458cf952e2c8.png

函数解读:

1.嵌套了三个dax函数,其中最内层SUMMARIZE('Sheet1',Sheet1[产品],"累计销售",SUM(Sheet1[销售数量])),求的是每个产品的销售数量,并返回一个新表,新表做外外城函数的参数;

2.第二层FILTER(SUMMARIZE('Sheet1',Sheet1[产品],"累计销售",SUM(Sheet1[销售数量])),[累计销售]>500),返回的是由产品销售数量>500的记录组成的新表;

3.第三层COUNTX(FILTER(SUMMARIZE('Sheet1',Sheet1[产品],"累计销售",SUM(Sheet1[销售数量])),[累计销售]>500),[累计销售]),统计由filter函数返回表中【累计数量】列的个数;

4.【高于500的产品数量 】是度量值的名称。

如果有帮助,帮忙给个赞和关注~~

一起来学习dax表达式吧!学数据科学,上http://cda.cn

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值