有时候我们需要在报表中进行列之间的运算,例如下面这个例子:

在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/1DfzsiXEMzKCcN5Bh48FWxw​pan.baidu.com

提取码:rndy

列运算_Power Query列运算的几种方法比较相关推荐

  1. 如何让表格中的一列按照公式计算机,excel设置一列运用相同类型的公式的两种方法...

    腾讯视频/爱奇艺/优酷/外卖 充值4折起 EXCEL工作表中同一列运用相同类型的公式,如图中所示,A1*B1,积要显示在C1,在C1单元格输入公式,=A1*B1按回车,积就显示在C1了,若往下整个C列 ...

  2. mysql按某列计数_Mysql按条件计数的几种方法

    最近在给某网站的后台添加一系列的统计功能,遇到很多需要按条件计数的情况.尝试了几种方法,下面简要记录,供大家参考. 问题描述 为使讨论简单易懂,我将问题稍作简化,去掉诸多的背景. 从前有一个皇帝,他有 ...

  3. jggrid标红列和动态标红行的几种方法

    在用jggrid显示表格的时候,我们有时候需要特别标出重点的一些数据.有时候是一列数据,有时候是一行数据 .对于动态的数据,我们需要根据其中的内容标红或者突出显示某些数据.这里总结了一些方式.用其它的 ...

  4. spark DataFrame新增一列id列(单调递增,不重复)的几种方法

    1.使用functions里面的monotonically_increasing_id(),生成单调递增,不保证连续,最大64bit,的一列.分区数不变. import org.apache.spar ...

  5. Excel列字母A-Z/AA-ZZ/AAA-ZZZ实现的几种方法

    while循环 function getColCode($col) {$letters = ['Z', 'A', 'B', 'C', 'D', 'E', 'F', 'G','H', 'I', 'J', ...

  6. Excel中反转一列数据的几种方法

    转载自:http://www.excel123.cn/Article/exceljichu/200911/514.html 假如在Excel表格的A列中有10行数据,现在要把第10行数据放在第一行,第 ...

  7. Excel中如何对某一列或者几列进行简单的函数运算得到新的一列?

    Excel中如何对某一列进行简单的函数运算得到新的一列? 如上图所示,直接在单元格出写出你想要的的公式,再回车就行了 记住最前面一定要加=========等号! 我一开始一直没加,搞了好久才发现是这个 ...

  8. powerquery分组_Power Query系列 - 排序Ranking

    Power Query系列 - 排序Ranking 难度: ★★☆☆☆(1星) 适用范围: ★★★☆☆(3星) 概况: 在数据分析中,我们常常需要对数据进行排序,同时我们想知道某个项目或者产品的排名, ...

  9. 计算机二级投影运算怎么看,投影运算

    本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 投影(Projection)运算是指将对象转换为一种新形式的操作,该形式通常只包含那些将随后使用的属性.通过使用投影,您可以构 ...

最新文章

  1. 为什么SD-WAN5年增长超过40%,越来越受企业欢迎?
  2. java面向对象测试_Java面向对象测试题(一).doc
  3. 电路交换网络中,每条电路独占其经过的物理链路。
  4. linux-虚拟机安装
  5. c#split方法拆分为数据_【转载】C#使用Split函数根据特定分隔符分割字符串
  6. Redis:复制,第3部分——redis-py和Python中的Redi哨兵一起使用
  7. 【Linux】文件描述符与重定向
  8. PHP一维数组转二维数组正则表达式
  9. 以智能制造推动企业数字化转型的方法、路径和举措
  10. AOP结构图(术语图解)
  11. STM32入门(二)
  12. C盘空间不足,清理AppData
  13. 笔记本电脑Haswell黑苹果opencore睡眠实战
  14. 5G与人工智能有什么关系?
  15. NX/UG二次开发—建模—批量创建重复特征方案优化
  16. 关于启动报错:Field xxxMapper in com.xxx.service.impl.xxxServiceImpl required a bean of type的解决方案
  17. LEAK: ByteBuf.release() was not called before it's garbage-collected. Enable advanced leak reporting
  18. CTF-杂项与密码学总结
  19. 微信小程序开发深入解读
  20. 中断linux命令快捷键_Linux常用快捷键和基本命令

热门文章

  1. python serial_Python代码爬取3000+ 上市公司的信息!能上市的都有这样一个特点
  2. 算法竞赛入门经典(第二版) | 例题5-2 木块问题 (紫皮书牛啤!)(UVa101,The Blocks Problem)
  3. AQS抽象队列同步器详解(待更新)
  4. java replaceall删除中括号和内容_「技术文章」《阿里巴巴 Java 开发手册》精华摘要...
  5. OpenStack的部署T版(九)——控制台部署
  6. 路由相关知识,静态路由、默认路由、浮动路由的概念以及基本设置
  7. 华为S5700系列交换机配置文件导出、导入
  8. C语言 计算结构体大小
  9. word排版案例报告_停工不停学丨项目部开展Word办公软件使用技能培训
  10. mysql2012更改表名_sql alter table修改数据库的表名字