PowerQuery M text.contains 带有 OR 逻辑运算符,并且不区分大小写匹配?

Iag*_*var 1 m logical-operators powerquery

我有一个包含网站域的专栏,例如:

  • juegos.abc.com
  • 博客.abc.com
  • reddit.com
  • elpais.com

我想创建一个条件列,它根据给定的域列表告诉我某个域是“媒体”还是“社区”。我可以通过 PowerBi 中的“创建条件列”手动完成此操作,但这需要我一百万年的时间。相反,我尝试过:

"Added Conditional Column18" = Table.AddColumn(#"Added Conditional Column17", "sitio.tipo", each if Text.Contains([Content.thread.site], "elpais OR elmundo OR elconfidencial OR abc OR lavanguardia OR 20minutos OR eldiario OR rtve OR elespanol OR eleconomista OR publico OR telecinco OR lasexta OR cuatro") then "medio" else "comunidad" )
Run Code Online (Sandbox Code Playgroud)

不工作。还尝试过:

"Added Conditional Column18" = Table.AddColumn(#"Added Conditional Column17", "sitio.tipo", each if Text.Contains([Content.thread.site], "elpais" OR "elmundo" OR "elconfidencial" OR "abc" OR "lavanguardia" OR "20minutos" OR "eldiario" OR "rtve" OR "elespanol" OR "eleconomista" OR "publico" OR "telecinco" OR "lasexta" OR "cuatro") then "medio" else "comunidad" )
Run Code Online (Sandbox Code Playgroud)

同样的问题。我试图找到如何在文档中使用运算符,但它并没有说太多。您可以使用哪些运算符,但我真的不知道如何在这个公式中使用它。

我还注意到其他条件列它执行精确匹配,因此,例如,如果我指定“ABC”并且单元格包含“abc”,它将不匹配。我希望它不区分大小写,可以吗?

Ale*_*SFT 5

Text.Contains采用第三个参数告诉它如何进行比较。如果您想忽略大小写,请使用Comparer.OrdinalIgnoreCase, like Text.Contains([column], "Text", Comparer.OrdinalIgnoreCase)

也就是说,Text.Contains只会检查传递给第二个参数的确切文本值是否在第一个参数中。如果要检查文本值是否包含列表中的任何值,则需要使用类似 的东西List.Contains,它也接受比较器作为其第三个参数。

这应该做你想要的:

"Added Conditional Column18" = Table.AddColumn(#"Added Conditional Column17", "sitio.tipo", each if List.Contains({"elpais", "elmundo", "elconfidencial", "abc", "lavanguardia", "20minutos", "eldiario", "rtve", "elespanol", "eleconomista", "publico", "telecinco", "lasexta", "cuatro"}, [Content.thread.site], Comparer.OrdinalIgnoreCase) then "medio" else "comunidad")

如果您在另一个表列中有域列表,则可以使此过程变得更简单。在这种情况下,将第一个参数中的列表替换为对列的引用,例如Query_Name[column_name]