前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >竟然只用一个函数就搞定了是否包含关键词的问题!这个写法你可能没想过!|PQ函数

竟然只用一个函数就搞定了是否包含关键词的问题!这个写法你可能没想过!|PQ函数

作者头像
大海Power
发布2024-01-04 11:48:27
1770
发布2024-01-04 11:48:27
举报

开篇之前,先祝大家:

新年快乐!万事如意!

二〇二四,虽难尤信,

风雨之后,阳光再耀;

勇敢面对,坚定前行,

迎接挑战,开创辉煌。

导语:在日常使用Power Query的过程中,可以多关注一下操作时自动生成的步骤公式,这其实就是最好的函数学习案例。

我们经常都会碰到类似下面的关键词查找或匹配的问题,但以往看到的解法通常的比较复杂一些:

今天,我发现了个比较简洁的解法,发出来供大家参考,同时分享一下我想到这个解法的过程。

- 01 -

从习惯熟悉的思路开始

刚看到这个问题,我想,这不就是判断一组内容是否有一个正确(List.AnyTrue)的常用场景吗?

既然要看当前项目是不是包含关键词里的任何一个,那就针对当前项目将关键词列表转换(List.Transform)为是否被包含(Text.Contains)的判断结果,这一组结果里只要有任意一个是true(List.AnyTrue),那结果就应该是true:

代码语言:javascript
复制
List.AnyTrue(
     List.Transform(  
          包含[包含],
          (x)=>Text.Contains([项目],x)
     )
 )

这个公式本身并不复杂,其中的难点是List.Transform函数——这个函数的确对初学Power Query的朋友来说稍微有点儿不太好理解,但建议一定要克服一下,因为这个函数太有用了,有需要的朋友也可以翻一下我前期的文章:

- 02 -

再多换几个思路

这个问题的核心是判断当前项目有没有包含其中某一个关键词,而关键词是个列表,那么,如果按关键词被包含(Text.Contains)的条件对这个列表进行筛选(List.Select),筛选的结果数(List.Count)大于0,不是也代表当前项目包含某些关键词吗?

于是有了第2个解法——计数法:

代码语言:javascript
复制
List.Count(
   List.Select(
      包含[包含],
      (x)=>Text.Contains([项目],x)
 ))>0

沿着核心的问题继续想,我还写了列首计数法、替换法等好多个,具体可以下载数据文件查看。

但无论怎么换,使用的函数仍然需要2个以上,于是我想,是否有某一个函数能针对一个文本内容(当前项目)进行一个列表内容(关键词)直接操作的?

比如Text.Remove这种,就可以直接针对一个文本删除一个列表中匹配的信息——可惜,这个列表只能是针对单个字符:

再看看替换的函数,貌似也不太行(都是单值操作):

不过,其中的Replacer让我突然想到,拆分列的功能似乎很强大,其中生成的操作公式里经常带一个Splitter的参数,是不是有可能可以直接按多个关键词拆分的用法呢?

日常掌握的基础知识,总是会在关键的时刻给你一些提示——也许,这就是所谓的“灵感”吧!

于是,通过函数提示直接把这一组函数拿出来看看:

其中明显有个SplitTextByAnyDelimiter,赶紧看帮助,然后试一下:

非常完美地将文本拆分成了多项内容(这个函数的用法很简单但又与我们平时使用的函数有点儿不同,大家可以先看这个示例先学会它的写法,后面我再另写文章详细讲解这部分函数的特别之处以及一些常见的参数)。

那既然这样,就很简单了,直接取拆分结果的第1项和原文本比较一下即可(如果没有被拆分,结果就只有1项),于是有了以下公式:

代码语言:javascript
复制
Splitter.SplitTextByAnyDelimiter(包含[包含])([项目]){0}<>[项目]

- 03 -

回顾这个例子,总结一下吧。

大家在日常使用Power Query的过程中,除了快速完成操作外,可以多关注一下操作步骤自动生成的公式

比如文中提到的拆分列功能,如果大家在日常做数据分列的时候,留意过编辑栏里自动生成的公式,可能就会对Splitter有点儿印象:

实际上,在Power Query里,通过操作生成的步骤公式里面隐藏了很多非常值得参考的知识点,尤其是一些函数的用法。

当你尝试去理解其中参数的含义时,这其实就是最好的函数学习案例。

见过,用过,不要错过。

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

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

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

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

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