PowerQuery M text.contains与OR逻辑运算符,以及非大小写匹配?

时间:2017-06-08 12:07:33

标签: logical-operators powerquery m

我有一个包含以下网站域名的专栏:

  • juegos.abc.com
  • blogs.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" )

不工作。 还尝试过:

"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" )

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

我还注意到其他条件列它会进行精确匹配,例如,如果我指定" ABC"并且单元格包含" abc"它不会匹配。我希望它不具有案例敏感性,是否可能?

1 个答案:

答案 0 :(得分:0)

Text.Contains接受第三个参数,告诉它如何进行比较。如果您想忽略此案例,请使用Comparer.OrdinalIgnoreCase,例如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]