Заполните условный столбец в зависимости от критерия имени столбца - PullRequest
0 голосов
/ 01 ноября 2018

Я получаю еженедельный отчет, который содержит некоторое повторение столбцов. Это потому, что он взят из набора веб-форм, которые задают похожие вопросы друг другу - скажем, все они задают « Вы хотите присоединиться к нашему списку адресов электронной почты? » - но этот вопрос хранится в Исходная система как отдельное поле для каждой формы (каждая форма фактически является отдельной таблицей). Столбцы всегда будут иметь одинаковые имена - например, «Email_optin_1», «Email_optin_2» - чтобы я мог придумать правила для определения столбцов, которые задают вопрос по электронной почте. Однако число столбцов может варьироваться от недели к неделе - одна неделя в отчете может содержать просто «Email_optin_2», а на следующей неделе может содержать четыре таких столбца. (Это зависит от того, какие веб-формы были использованы на этой неделе). Возможные значения одинаковы во всех этих столбцах - скажем, " Да " и " Нет ".

Обычно в каждой строке должен быть заполнен только один из столбцов «Email_optin».

Я хотел бы создать в Power Query один столбец с именем «Email_Optin_FINAL», который будет возвращать «Да», если ЛЮБЫЕ столбцы, начинающиеся с «Email_optin», содержат значение «Да».

Итак, в основном, вместо того, чтобы просто ссылаться на значения в определенных столбцах, я хотел бы сначала выяснить, какие столбцы нужно посмотреть, а затем посмотрите на значения в этих столбцах.

Возможно ли это в PowerQuery?

Заранее спасибо за любой совет!

1 Ответ

0 голосов
/ 01 ноября 2018

Это позволит найти все столбцы, содержащие Email_optin, объединить их для вас в новый столбец и удалить исходные столбцы

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
EmailList= List.Select(Table.ColumnNames(Source), each Text.Contains(_, "Email_optin")),
#"Merged Columns" = Table.CombineColumns(Source,EmailList,Combiner.CombineTextByDelimiter("", QuoteStyle.None),"Merged")
in #"Merged Columns"

Это позволит найти все столбцы, содержащие Email_optin, объединить их для вас в новый столбец и сохранить исходные столбцы

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
Index= Table.AddIndexColumn(Source, "Index", 0, 1),
EmailList= List.Select(Table.ColumnNames(Index), each Text.Contains(_, "Email_optin")),   
Merged = Table.CombineColumns(Index,EmailList,Combiner.CombineTextByDelimiter("", QuoteStyle.None),"Merged"),
#"Merged Queries" = Table.NestedJoin(Index,{"Index"},Merged,{"Index"},"Merged",JoinKind.LeftOuter),
#"Expanded Table2" = Table.ExpandTableColumn(#"Merged Queries", "Merged", {"Merged"}, {"Merged"}),
#"Removed Columns" = Table.RemoveColumns(#"Expanded Table2",{"Index"})
in  #"Removed Columns"

затем вы можете выбрать «ДА» среди объединенных ответов, если хотите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...