我收到每周报告,其中包含一些重复的列。这是因为它是从一组相互问类似问题的Web表单中得出的-假设他们都问“ 您想加入我们的电子邮件列表吗?”-但是此问题存储在源系统作为每个表单的单独字段(每个表单实际上是一个单独的表)。这些列将始终被统一命名-例如“ Email_optin_1”,“ Email_optin_2”-因此,我可以提出一些规则来标识询问电子邮件问题的列。但是,每周的列数可能会有所不同-报表可能仅在一周内包含“ Email_optin_2”,下一周它可能会包含四个此类列。 (这取决于该周使用了哪些网络表单)。在所有这些列中,可能的值都是相同的-假设“ 是”和“ 否”。
通常,每行只应填充“ Email_optin”列之一。
我想做的是在Power Query中创建一个名为“ Email_Optin_FINAL”的单列,如果以“ Email_optin”开头的任何列包含“是”的值,那么它将返回“是”。
因此,基本上,不是希望标准仅引用特定列中的值,而是要首先确定需要查看哪些列,然后查看这些列中的值。
在PowerQuery中有可能吗?
提前感谢您的任何建议!
答案 0 :(得分:1)
这将找到所有包含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"
然后,您可以根据需要在合并的答案中过滤“是”