前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PQ-M及函数:要删的内容很复杂,列举不完,那能不能想要啥就保留啥?

PQ-M及函数:要删的内容很复杂,列举不完,那能不能想要啥就保留啥?

作者头像
大海Power
发布2021-08-30 10:18:21
5470
发布2021-08-30 10:18:21
举报
文章被收录于专栏:用户8950297的专栏

小勤:大海,Power Query里的Text.Remove函数(参考文章《删除所有常用汉字,只要一只大乌龟》)的确好用,但都是从删除的角度去最后得到要保留的内容,但有时候文本里的内容很复杂,各种符号之类的,不好列举,说不定其中还藏着什么特殊符号,能不能直接想要哪些就保留哪些?

大海:这当然可以的,但需要几个函数结合一下。

小勤:具体是哪些函数?怎么用?能不能直接用这个例子来试试?

大海:好的。按需要保留内容的基本思路是,首先将文本拆成一个列表(List),然后对List里的所有元素进行判断,符合的就留下来。接下来咱们一步步来做一个保留所有英文的做法,最后再给一个综合的公式写法。

小勤:这样太好了。

大海:那咱们开始吧。

Step-1:获取数据

Step-2:添加自定义列,将文本拆解为列表(List),公式=Text.ToList([公司]):

结果如下:

函数Text.ToList,将文本转换为列表,文本每个字符变成一个列表里的每个元素

用法:

  • Text.ToList(文本)

小栗子:

Ø Text.ToList(“Excel到PowerBI”)

Ø 结果为:{“E”,”x”,”c”,”e”,”l”,”到”,”P”,”o”,”w”,”e”,”r”,”B”,”I”}

Step-3:有了这个List,就可以对List里的内容进行筛选了,比如要所有保留英文字母,公式= List.Select([文本拆解为List],each _>="A" and_<="z")

结果如下,其中的英文字母已经筛选出来了:

函数List.Select,按条件筛选列表中的内容

用法:

  • List.Select(列表,筛选条件)

参数:

Ø 列表:要进行筛选的列表

Ø 筛选条件:对列表进行筛选的条件

小栗子:

Ø 筛选列表中大于3的元素:List.Select({1,3,5,6},each _ > 3)

Ø 结果:{5,6}

要点:

  • 其中的下划线(_)表示待筛选列表中的元素,each _>3 相当于对列表中的元素进行逐个判断。

Step-4:列表都筛选出来了,最后就可以合并了,合并可以直接对列表进行操作,也可以使用Text.Combine函数(该函数用法可参考文章《动态分组合并同类项内容,最近问这个的人怎么这么多?》)

结果出来了:

小勤:嗯,我知道了,通过这样分步拆解的方式思路很清晰。

大海:对的。基于以上的思路,这些步骤可以直接合成一个公式:

实际上无论是Excel还是PQ,长公式都是一层包一层按思路写出来的。PQ里的函数嵌套会更明显一些,所以M语言也是一种函数式编程的语言,以后会有大量函数嵌套的公式,但从公式的内部往外逐层实现,整体的思路一般都是很清晰的。

小勤:嗯。而且通过这种分层的写法,看起来也很有层次感。

大海:还有怎么提取中文、数字的写法方法都差不多,你试试吧。

小勤:好!

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

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

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

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

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