前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >怎么剔除部分列求和?1个小问题,8集免费视频 | PQ基础到实战

怎么剔除部分列求和?1个小问题,8集免费视频 | PQ基础到实战

作者头像
大海Power
发布2022-02-28 12:53:07
7950
发布2022-02-28 12:53:07
举报

- 1 -

日常使用Power Query的过程中,大家可能会对表(Table)、列(List)筛选部分数据比较熟悉,但是,如果是对于一行(Record),要筛选(或剔除)部分列(字段)进行计算,那该怎么办呢?

比如下面这个例子,有很多仓库,且货物存放的仓库有增减,那该怎样计算除A和Z仓库以外的所有仓库的数量之和:

这种情况在物流行业里其实是比较普遍的,但是,如果你直接用List.Sum函数,然后选择当前除A/Z以外的其他列进行求和,那么,当仓库发生变化时,就极可能出错——仓库多了,有部分没算上;仓库少了,会因为找不到列而出错:

- 2 -

实际上,要解决这个问题并不难,以下提供两种方法供大家参考。

方法1:分组中筛选

分组筛选法,是利用在分组过程中筛选表的功能,先得到目标求和列,然后再按需要对仓库进行逆透视来实现。

Step-01 分组

选择规格列,单击转换菜单下的“分组依据”:

在弹出的分组依据对话框中选择高级,然后添加新的聚合方式(对数量进行求和,以及取分组下的所有行)。

Step-02 修改分组步骤公式

这时,分组生成的步骤公式里,对求和直接取了数量列的所有数据,而我们要取指定的内容(如不包含A和Z仓库),这时,我们可以将数量求和的部分进行修改,即通过Table.SelectRows函数,在分组的过程中直接进行筛计算:

代码语言:javascript
复制
(x)=>List.Sum(
         Table.SelectRows(
              x,each  [仓库]<>"A" and [仓库]<>"Z"
         )[数量]
     )

分组后,求和的内容将是删除了A仓库、Z仓库的内容:

Step-03 透视仓库列

最后,再对仓库列进行透视,即可以得到想要的结果:

方法2:记录筛选法

对于记录筛选法来说,则是先按常规进行透视,然后想办法针对仓库(此时是一个个的列)进行筛选。

Step-01 透视仓库列

Step-02 通过删除的方式筛选列计算

要对一个记录的部分列进行计算,我们可以通过Record.RemoveFields进行删除,然后再通过Record.ToList提取所有的列数据进行计算。

要注意的是,因为我们用下环线(_)读取当前行的记录,会包含所有列信息,如“规格”等非仓库列,所以,这里不仅要删除不要的仓库,还要删除非仓库类的字段,比如“规格”。

代码语言:javascript
复制
= List.Sum( 
       Record.ToList( 
                Record.RemoveFields(_,{"规格","A","Z"})  
       )
 )

- 3 -

在Power Query或Power Pivot里,对于同一个问题,往往有很多不同的解法,这些都依赖于对基础知识的熟练掌握。

针对本文的问题,虽然看起来最终使用的方便并不复杂,但是,其背后需要对分组、透视等操作,以及对Power Query里的数据结构、行列数据提取、筛选等都熟练掌握。对于这些内容,想进一步学习或回顾的朋友,也可以看以下文章或视频:

很多朋友在学PQ、PP的时候,经常会感觉:别人给出解决办法时,看起来倒挺简单的,但自己一动手,却感觉没有思路,无法下手。

这往往就是对很多基础知识不够熟练,达不到融会贯通、灵活应用的程度而造成的。

所以,经常说,基础不牢,地动山摇。日常工作中要用到的高深、复杂知识其实并不多,好好把基础打好,是学以致用的根本,仍然是最喜欢的六个字送给大家:

不要急,不要等!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Excel到PowerBI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档