PowerQuery M text.containable с логическим оператором ИЛИ и без учета регистра?

У меня есть столбец с доменами сайта, такими как:

  • 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 ответ

Решение

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],

Другие вопросы по тегам