数据可视化之DAX篇(十)在PowerBI中累计求和的两种方式
https://zhuanlan.zhihu.com/p/64418286
假设有一组数据,

已知每一个产品贡献的利润,如果要计算前几名产品的贡献利润总和,或者每一个产品和利润更高产品的累计贡献占总体的比例,就涉及到累计求和,数据量较小的情况下,在 Excel 中可以轻松实现,毕竟 Excel 是对单元格进行操作。
但是在 PowerBI 中,对整个字段运算很简单,而对每一行的数据进行筛选汇总,却需要动一点小心思,下面就以此表为例介绍几种常用的累计求和方式,并以此案例来进一步掌握几个函数的用法。
利用 M 函数累计求和
将该数据导入到 PQ 编辑器中,添加自定义列,

公式栏中输入M函数,
=List.Sum(Table.SelectRows(更改的类型,(x)=>x[利润]>=[利润])[利润])
然后就新增加了一列累计利润,

对这里的公式稍微解释一下,
Table.SelectRows 函数用来筛选表中符合条件的行,"更改的类型"是表的名称,在PQ编辑器中,每一个步骤就是一个表,步骤名就是该表的名称。
(x)=>x[利润]>=[利润]是筛选条件,这个相对比较难理解,还记得之前介绍的自定义函数吗,见到=>这个符号,就代表这里有个自定义函数,只是在这里是内置函数。意思为每一行为变量x,只要第x行的利润数大于等于当前行的利润,就利用 Table.SelectRows 函数把改行筛选出来。
而 Table.SelectRows 函数返回的是一个表,如果要提取该表中利润列,就是在该函数外面再加上字段名进行深化,于是就有了 Table.SelectRows(更改的类型,(x)=>x[利润]>=[利润])[利润],它返回的是符合条件的利润列。
最后再在最外面套上 List.Sum 函数对该列进行求和,就得到了以上表中累计利润。
利用 DAX 进行累计求和
在 DAX 中可以用 EARLIER 函数和 VAR 定义变量两种方式。
使用 EARLIER 函数
累计利润2 =
CALCULATE(SUM('产品'[利润]),
FILTER(ALL('产品'),'产品'[利润]>=EARLIER('产品'[利润])))
EARLIER函数以前专门介绍过,可以参考:EARLIER 函数 | PowerBI星球
使用VAR定义变量的方式累计求和
累计利润3 = VAR cur_profit='产品'[利润]
RETURN CALCULATE(SUM('产品'[利润]),
FILTER(ALL('产品'),'产品'[利润]>=cur_profit))
这两种方式返回的结果和利用M函数的效果完全一致,

这两种函数,其实和上面M函数一样,都是通过各自的方式筛选符合大于等于当前利润的数据行,然后求和得到结果。
上面的DAX求和用到的是CALCULATE,其实这里也可以用SUMX函数,
累计利润4 = SUMX(filter(all('产品'),'产品'[利润]>=EARLIER('产品'[利润])),'产品'[利润])
累计利润5 = VAR cur_profit='产品'[利润]
RETURN SUMX(FILTER(ALL('产品'),'产品'[利润]>=cur_profit),'产品'[利润])
CALCULATE函数第一个参数是汇总方式,第二个及之后的参数为筛选条件,而SUMX函数第一个参数筛选条件,第二个参数为求和字段,在求和的计算上,SUMX可以实现和CALCULATE一样的效果。
案例中的数据已经按照利润从大到小进行排列,理解上更直观,其实即使不进行排序,这几种方式也都可以返回正确的结果,因为计算的逻辑和每一行的顺序无关。
上面几个公式,需要的时候可以随时套用,当然在理解的基础上灵活掌握这些函数,可以更有效的进行各种数据分析。累计求和在数据分析中十分常用,比如ABC分析,后面会进一步介绍。
数据可视化之DAX篇(十)在PowerBI中累计求和的两种方式的更多相关文章
- 数据可视化之DAX篇(二十八)Power BI时间序列分析用到的度量值,一次全给你
		
https://zhuanlan.zhihu.com/p/88528732 在各种经营分析报告中,我们常常会看到YTD,YOY这样的统计指标,这样的数据计算并不难,尤其是在PowerBI中,因为有时间 ...
 - 数据可视化之DAX篇(二)Power BI中的度量值和计算列,你搞清楚了吗?
		
https://zhuanlan.zhihu.com/p/75462046 对于初学者,总是会把度量值和计算列搞混,我也经常碰到这样的问题,有些星友用文章中的代码总是报错,发给我一看,才知道TA把本来 ...
 - 数据可视化之DAX篇(九) 关于DAX中的VAR,你应该避免的一个常见错误
		
https://zhuanlan.zhihu.com/p/67803111 本文源于微博上一位朋友的问题,在计算同比增长率时,以下两种DAX代码有什么不同? -------------------- ...
 - 数据可视化之DAX篇(八) DAX学习:使用VAR定义变量
		
https://zhuanlan.zhihu.com/p/64414205 前面介绍如何使用DAX生成日期表的时候,使用了VAR,有人留言问这个VAR怎么理解,那么这篇文章就来介绍VAR以及它的用法. ...
 - 数据可视化之DAX篇(二十五)PowerBI常用的度量值:累计至今
		
https://zhuanlan.zhihu.com/p/64999937 经常碰到本年至今.本月至今的数据计算,其实还有一类计算是,从历史最早日期至今的累计计算,比如从开业到现在总共卖出了多少件商品 ...
 - 数据可视化之DAX篇(五) 使用PowerBI的这两个函数,灵活计算各种占比
		
https://zhuanlan.zhihu.com/p/57861350 计算个体占总体的比例是一个很常见的分析方式,它很简单,就是两个数字相除,但是当需要计算的维度.总体的范围发生动态变化时,如何 ...
 - 数据可视化之DAX篇(十五)Power BI按表筛选的思路
		
https://zhuanlan.zhihu.com/p/121773967 数据分析就是筛选.分组.聚合的过程,关于筛选,可以按一个维度来筛选,也可以按多个维度筛选,还有种常见的方式是,利用几个特 ...
 - 数据可视化之DAX篇(十二)掌握时间智能函数,同比环比各种比,轻松搞定!
		
https://zhuanlan.zhihu.com/p/55841964 时间可以说是数据分析中最常用的独立变量,工作中也常常会遇到对时间数据的对比分析.假设要计算上年同期的销量,在PowerBI中 ...
 - 数据可视化之DAX篇(二十四)Power BI应用技巧:在总计行实现条件格式
		
https://zhuanlan.zhihu.com/p/98975646 如何将表格或者矩阵中值的条件格式也应用于总计行? 目前PowerBI并不支持这种功能,无法在总计行或者小计行上应用条件格式, ...
 
随机推荐
- D2大全
			
年初看到cnblogs上有人说看这本旧书,自己也只是瞟了下,后来在看些OOP东西时,想想没事也看看老古董,于是网购了一本电子版可参考下,它们是怎么一步步来,还没来得及多看,贴图于此.
 - selenium获取图片验证码
			
# encoding:utf-8 from PIL import Image from selenium import webdriver url = '网站地址' driver = webdrive ...
 - 通用!Python保存一个对象的方式
			
参考资料: https://kite.com/python/answers/how-to-save-a-dictionary-to-a-file-in-python 通过如下的代码,可以将Python ...
 - linux安装mysql使用yum安装
			
安装MySQL 安装mysql客户端: yum install mysql 安装mysql 服务器端: yum install mysql-server 至此我就可以使用Yum简单地管理MySQL更新 ...
 - cookie的介绍和使用
			
一.什么是cookie 是由服务器端生成,发送给客户端(一般指浏览器),浏览器将cookie以键值对的形式保存到某个目录下的文本文件内.下次请求该网站时就把cookie发送回服务器.(cookie就是 ...
 - Java二次复习笔记(1)
			
Java二次复习笔记(1) Java采用的默认字符编码集是Unicode. byte=byte+byte报错,值为int,而byte+=byte不报错.同样short = short+short报错, ...
 - 并发编程之详解InheritableThreadLocal类原理
			
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 在Java并发编 ...
 - Spring Boot 2.x基础教程:Spring Data JPA的多数据源配置
			
上一篇我们介绍了在使用JdbcTemplate来做数据访问时候的多数据源配置实现.接下来我们继续学习如何在使用Spring Data JPA的时候,完成多数据源的配置和使用. 添加多数据源的配置 先在 ...
 - 大文件上传、断点续传、秒传、beego、vue
			
大文件上传 0.项目源码地址 源码地址 :https://github.com/zhuchangwu/large-file-upload 它是个demo,仅供参考 前端基于 vue-simple-up ...
 - (二)、JAVA运行时数据区域
			
根据<Java 虚拟机规范(Java SE 7版)>规定,Java虚拟机所管理的内存,将会包括以下几个运行时数据区域: 注: 1.由所有线程共享的数据区: 对应 java内存模型的主内存, ...