打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
用通配符进行替换,居然还能这么玩儿? | PQ技巧

       很多朋友都在问,Power Query里能不能使用通配符,比如最常用的星号(*),在Excel里可以实现如下图中的批量替换:

       可惜,在Power Query里是没有的,比如,如果你想在替换值功能里用*做替换,是无法得到想要的结果的:

       但是,我们可以看一下替换值功能生成的公式:

       实际上,替换值函数Table.ReplaceValue并不是自己完成文本的替换的,替换过程却是由Replacer.ReplaceText函数完成——Power Query里,其实很多函数都是这样!

玩的是资源整合!懂不!

      尤其是Table类的函数,通常都是将要处理的内容拢到一起,然后真正的活儿都交给别人来干!

       那,既然都是交给别人干,是不是可以换个人干?换个方式干?如果我们能造一个可以实现类似通配符替换的自定义函数,那不就能达到目的了吗?

       同时,我们还知道Replacer.ReplaceText函数有3个参数:即对x替换y为z。(如果不知道,可以参考文章《10万行30列数据乘上系数,能快一些吗?含“函数作为参数”的触类旁通方法》)。

        所以,我们写一个也带3个参数的自定义函数:

        这个函数其实挺简单,大致过程如下:

  1. 按通配符*号拆分(Text.Split)要替换的内容(y)得到分隔符(*号前为d{0},*号后为d{1});

  2. 对原始内容(x)按*号拆分得到的分隔符分别取分隔符之前(Text.BeforeDelimiter)和之后(Text.AfterDelimiter)的文本;

  3. 和要替换成的文本(z)连在一起。

       函数写好后,我们回到前面替换步骤生成的公式里,将Replacer.ReplaceText改为自定义函数funReplaceStar,搞定!

       如果我们经常要实现类似的替换,那我们就可以构造一个类似的函数,在需要进行替换的时候,按习惯进行替换值操作,然后再简单换一下步骤里的函数即可。

      当然,这个函数并不完美,比如,如果要替换的内容为“*}”,即只要}之后的数据,那就可能出错:

       因为Text.BeforeDelimiter或Text.AfterDelimiter函数的分隔符参数不能为空,那该怎么改进好呢?

      很多朋友在问,有没有习题供练习?——这就是今天留给大家的题目了,关注公众号,发送“数据”获取源数据练起来吧,其中还有答案哦

【近期热门文章】

最通俗易懂Power系列视频 -

购书领60元视频券 or 直购视频送签名书

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【Excel】你所不知道的文本连接
PQ实战 | 这种类似VLOOKUP的查找为什么不对?
​没错,新手也能改Power Query语句
M函数整理之文本函数(附单词解释,更轻松理解公式)
excel图文教程:应用PQ工具进行数据整理
PQ实战 | 同类项的合并与拆分
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服