根据列名标准填充条件列

Populate conditional column depending on column name criteria

我收到一份每周报告,其中包含一些重复的专栏。这是因为它是从一组 Web 表单中提取出来的,这些表单彼此询问类似的问题 - 假设他们都问“Do you want to join our email list?” - 但是这个问题作为每个表单的单独字段存储在源系统中(每个表单实际上是一个单独的 table)。这些列将始终以一致的方式命名 - 例如"Email_optin_1"、"Email_optin_2" - 这样我就可以想出规则来识别提出电子邮件问题的列。但是,列数可能每周都不同 - 一周报告可能只包含 "Email_optin_2",下一周它可能包含四个这样的列。 (这取决于那一周使用了哪些网络表格)。所有这些列中的可能值都相同 - 假设“Yes”和“No”。

每一行通常应该只填充 "Email_optin" 列之一。

我想做的是在 Power Query 中创建一个名为 "Email_Optin_FINAL" 的列,如果任何以 "Email_optin" 开头的列包含"Yes".

的值

所以,基本上,不是简单地引用特定列中的值的标准,我希望它做的是首先弄清楚它需要哪些列正在查看,然后查看这些列中的值。

这在 PowerQuery 中可行吗?

提前感谢您的任何建议!

这会找到所有包含 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"

然后您可以根据需要在合并的答案中筛选 "YES"