列运算_Power Query列运算的几种方法比较
有时候我们需要在报表中进行列之间的运算,例如下面这个例子:
在Excel中,这种计算很常见、很简单,只需要新增一列,把相关的两列相加,然后替换掉原来的“总客户数”列中的数据就可以了,那么在PQ中可以怎么做呢?
方法1:Table.AddColumn
最简单的方法是新增一列,把两列相加,但本例要求计算结果要放在原来的位置,并保持相同的列名称,而PQ中新增的列只能在原表的最右侧,这就需要调换列顺序,而新增列的时候又不能和原列名称重复,这意味着新列必须新重名,比如说把它重名为“总客户数1”,然后删除原来的“总客户数”列,再把“总客户数1”重命名为“总客户数”,方法虽然简单,但很是繁琐,以下是详细步骤。
第1步:添加自定义列,把两列数值相加,同时因为不能与原列重名,所以只好命名为“总客户数1”;
第2步:原来的两列计算之后已不再需要,把它们删除;
第3步:新列顺序要和原来保持一致,需要调整列顺序,在列数不多的情况下还算容易,当列数较多时这一步需要列出所有列名,很繁琐,而且刷新的时候也容易出错,所以需要优化代码,这在另一篇文章中会讲到;
第4步:把“总客户数1”改回为原来的名称“总客户数”,工作完成。
方法2:Table.TransformRows配合Record.TransformFields
PQ中无法把一列数据直接加到另一列上(excel中也不行,都需要另加一列进行计算),但是通过代码分解,分步运算,在运算的过程通过命名数据来达到目的,具体方法为:
第1步:用Table.TransformRows把表转化为记录,然后在记录中修改字段值,来达到列间直接运算的目的:
s1两列相加 = Table.TransformRows(源, each let 总客户数 = [总客户数], 新增客户数 = [新增客户数],修改字段值 = Record.TransformFields(_, {"总客户数", each 总客户数+新增客户数})in 修改字段值),
得到的结果是:
第2步:然后用Table.FromRecords把Records重新转化为表,得到如下结果:
可以看出,新增客户数已经被直接加到总客户数中,不需要再新加列且重命名了。
第3步:然后只需删除已不需要的“新增客户数”列就可以了。
方法3:用Table.CombineColumns直接得出结果
其实在PQ中Table.CombineColumns的用途很广,不只是合并文字列这一点用处,它还可以进行列之间的各种组合运算,比如本例中就可以利用它来进行两列数字的加和运算,并且是直接相加,不用新增不必要的列,只需要写一行简单的代码就可以了;
s1合并的列 = Table.CombineColumns(源,{"新增客户数", "总客户数"},each List.Sum(_), "总客户数")
处理结果如下:
可以看出,只需一步,只需一步,只需一步,就可得出和前面的方法1和方法2同样的结果,新增客户数被直接加到总客户数上了,然后它就不再保留,直接删掉了。
Table.CombineColumns(table as table, /* 参数1 */sourceColumns as list,/* 参数2 */ combiner as function, /* 参数3 */column as text /* 参数4 */)
as table
分析Table.CombineColumns函数语法,可以看出关键在参数3,在这个例子中,处理的对象是{451, 58}, {372, 87}, {247, 126}这三个List,对于每个List我们都要把其中的两个数字相加,这就是each List.Sum(_)所进行的操作,每一个List都求和,就这么简单。
对比三种方法,可以说各有优势:
- 方法1最好理解,但略显繁琐,在刚开始玩PQ的时候可以用这种方法,但玩了一段时间之后会发现有时候它相当繁琐,效果也不高,这时候可以玩一下方法2:
- 方法2的原理就是先把表转化为记录,在记录里处理好了之后再转化为表,它可以进行表格列之间的各种复杂运算:
- 而方法3的效率是最高的,它一步到位,充分利用了合并列公式的功能,其实它本来的目的就是列间运算,而不仅是合并这么简单,但是它会把多列合并为一列,在需要保留原有各列的情况下还需要对合并之后的列进行展开,在这种情况下可以先增加一列辅助列,复制需要保留的那一列数据,然后把这加在需要合并的那一列上就行了。
好了,PQ中的列间运算就是这样玩的,这是我总结出来的几种玩法,亲爱的读者朋友们学会了吗,当然可用的方法可能不止这三种,如果你有更聪明的玩法,一定要记得告诉我哟,寓教于乐,是最高效的学习方法,乐在其中,使我们能够更充分地享受工作,享受生活。
实例下载:
https://pan.baidu.com/s/1DfzsiXEMzKCcN5Bh48FWxwpan.baidu.com
提取码:rndy
列运算_Power Query列运算的几种方法比较相关推荐
- 如何让表格中的一列按照公式计算机,excel设置一列运用相同类型的公式的两种方法...
腾讯视频/爱奇艺/优酷/外卖 充值4折起 EXCEL工作表中同一列运用相同类型的公式,如图中所示,A1*B1,积要显示在C1,在C1单元格输入公式,=A1*B1按回车,积就显示在C1了,若往下整个C列 ...
- mysql按某列计数_Mysql按条件计数的几种方法
最近在给某网站的后台添加一系列的统计功能,遇到很多需要按条件计数的情况.尝试了几种方法,下面简要记录,供大家参考. 问题描述 为使讨论简单易懂,我将问题稍作简化,去掉诸多的背景. 从前有一个皇帝,他有 ...
- jggrid标红列和动态标红行的几种方法
在用jggrid显示表格的时候,我们有时候需要特别标出重点的一些数据.有时候是一列数据,有时候是一行数据 .对于动态的数据,我们需要根据其中的内容标红或者突出显示某些数据.这里总结了一些方式.用其它的 ...
- spark DataFrame新增一列id列(单调递增,不重复)的几种方法
1.使用functions里面的monotonically_increasing_id(),生成单调递增,不保证连续,最大64bit,的一列.分区数不变. import org.apache.spar ...
- Excel列字母A-Z/AA-ZZ/AAA-ZZZ实现的几种方法
while循环 function getColCode($col) {$letters = ['Z', 'A', 'B', 'C', 'D', 'E', 'F', 'G','H', 'I', 'J', ...
- Excel中反转一列数据的几种方法
转载自:http://www.excel123.cn/Article/exceljichu/200911/514.html 假如在Excel表格的A列中有10行数据,现在要把第10行数据放在第一行,第 ...
- Excel中如何对某一列或者几列进行简单的函数运算得到新的一列?
Excel中如何对某一列进行简单的函数运算得到新的一列? 如上图所示,直接在单元格出写出你想要的的公式,再回车就行了 记住最前面一定要加=========等号! 我一开始一直没加,搞了好久才发现是这个 ...
- powerquery分组_Power Query系列 - 排序Ranking
Power Query系列 - 排序Ranking 难度: ★★☆☆☆(1星) 适用范围: ★★★☆☆(3星) 概况: 在数据分析中,我们常常需要对数据进行排序,同时我们想知道某个项目或者产品的排名, ...
- 计算机二级投影运算怎么看,投影运算
本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 投影(Projection)运算是指将对象转换为一种新形式的操作,该形式通常只包含那些将随后使用的属性.通过使用投影,您可以构 ...
最新文章
- 为什么SD-WAN5年增长超过40%,越来越受企业欢迎?
- java面向对象测试_Java面向对象测试题(一).doc
- 电路交换网络中,每条电路独占其经过的物理链路。
- linux-虚拟机安装
- c#split方法拆分为数据_【转载】C#使用Split函数根据特定分隔符分割字符串
- Redis:复制,第3部分——redis-py和Python中的Redi哨兵一起使用
- 【Linux】文件描述符与重定向
- PHP一维数组转二维数组正则表达式
- 以智能制造推动企业数字化转型的方法、路径和举措
- AOP结构图(术语图解)
- STM32入门(二)
- C盘空间不足,清理AppData
- 笔记本电脑Haswell黑苹果opencore睡眠实战
- 5G与人工智能有什么关系?
- NX/UG二次开发—建模—批量创建重复特征方案优化
- 关于启动报错:Field xxxMapper in com.xxx.service.impl.xxxServiceImpl required a bean of type的解决方案
- LEAK: ByteBuf.release() was not called before it's garbage-collected. Enable advanced leak reporting
- CTF-杂项与密码学总结
- 微信小程序开发深入解读
- 中断linux命令快捷键_Linux常用快捷键和基本命令
热门文章
- python serial_Python代码爬取3000+ 上市公司的信息!能上市的都有这样一个特点
- 算法竞赛入门经典(第二版) | 例题5-2 木块问题 (紫皮书牛啤!)(UVa101,The Blocks Problem)
- AQS抽象队列同步器详解(待更新)
- java replaceall删除中括号和内容_「技术文章」《阿里巴巴 Java 开发手册》精华摘要...
- OpenStack的部署T版(九)——控制台部署
- 路由相关知识,静态路由、默认路由、浮动路由的概念以及基本设置
- 华为S5700系列交换机配置文件导出、导入
- C语言 计算结构体大小
- word排版案例报告_停工不停学丨项目部开展Word办公软件使用技能培训
- mysql2012更改表名_sql alter table修改数据库的表名字