PowerQuery M text.contains 与 OR 逻辑运算符和不区分大小写的匹配?
PowerQuery M text.contains with OR logical operator, and non-casesensitive matching?
我有一个站点域的列,例如:
- juegos.abc.com
- blogs.abc.com
- reddit.com
- elpais.com
我想创建一个条件列,根据给定的域列表告诉我域是 "media" 还是 "community"。
我可以在 PowerBi 中从 "create conditional column" 手动完成,但这将花费我一百万年。
相反,我尝试过:
"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",它将不会匹配。我希望它不区分大小写,可以吗?
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")
如果您在另一个 table 列中有域列表,则可以简化此操作。在这种情况下,将第一个参数中的列表替换为对列的引用,例如 Query_Name[column_name]
.
我有一个站点域的列,例如:
- juegos.abc.com
- blogs.abc.com
- reddit.com
- elpais.com
我想创建一个条件列,根据给定的域列表告诉我域是 "media" 还是 "community"。 我可以在 PowerBi 中从 "create conditional column" 手动完成,但这将花费我一百万年。 相反,我尝试过:
"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",它将不会匹配。我希望它不区分大小写,可以吗?
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")
如果您在另一个 table 列中有域列表,则可以简化此操作。在这种情况下,将第一个参数中的列表替换为对列的引用,例如 Query_Name[column_name]
.