根据列表值在 Power Query 中创建条件列
Posted
技术标签:
【中文标题】根据列表值在 Power Query 中创建条件列【英文标题】:Create conditional column in Power Query based on list value 【发布时间】:2020-01-18 15:57:26 【问题描述】:我想在 Excel Power Query 中创建一个条件列,用于查找公司列表,如果该给定行中的公司列与列表中的公司之一相对应,则返回类似“Yes”的值。
它应该看起来像这样:
+----------+---------------------+-------+
| Company | List | Match |
+----------+---------------------+-------+
| Apple | Facebook, Instagram | No |
| Facebook | Facebook, Instagram | Yes |
+----------+---------------------+-------+
约束:我无法创建额外的行,因为 Excel 工作表将用于将信息导入系统,因此需要以给定的方式进行结构化。
我曾尝试在 Power Query 中使用内置的条件列功能,但它只能查看特定列,而不是多个列。并且它将公司列表列视为“Facebook,Instagram”之类的大字符串,而不是单独的值。此外,公司列表很长,因此为每个公司创建 if 语句会非常低效。
任何帮助将不胜感激!
【问题讨论】:
【参考方案1】:如果您的初始表格如下所示:
然后这段代码:
let
initialTable = Table.FromColumns("Apple", "Facebook", "Facebook, Instagram", "Facebook, Instagram", type table [Company = text, List = text]),
matchColumn = Table.AddColumn(initialTable, "Match", each List.Contains(Text.Split([List], ", "), [Company]), type logical)
in
matchColumn
应该给出预期的输出:
我在分隔符,
上拆分了公司列表(逗号后有一个空格),因为这就是您在问题中显示的内容。如果没有空格,您可以将代码更改为使用,
。
我使用了true
/false
(而不是"YES"
/"NO"
)。
如果任何公司名称包含逗号(即应按字面解释而不是分隔符的逗号),那么您可能会得到意外的行为/输出。 Splitter.SplitTextByDelimiter
可以帮助返回更好的拆分函数,但它要求您的值已经被引用(它们似乎没有被引用)。
或者,尝试:
let
initialTable = Table.FromColumns("Apple", "Facebook", "Facebook, Instagram", "Facebook, Instagram", type table [Company = text, List = text]),
matchColumn = Table.AddColumn(initialTable, "Match", each if List.Contains(Text.Split([List], ", "), [Company]) then "AB119" else "AD119", type text)
in
matchColumn
【讨论】:
谢谢!为了解决我的问题,我需要它返回一个我可以定义的文本字符串,而不是逻辑真/假。我只使用“是”/“否”作为示例,但回想起来,我知道这是一个糟糕的示例选择。例如,如果匹配,我希望它返回“AB119”,如果不匹配,则返回“AD119”。 @torkestativ 如果您想再看一遍,请编辑答案。我无法在编辑中测试代码。【参考方案2】:您好,请检查一下我的理解是否正确 - 您有应用列表和已知公司列表吗?
如果是这样,你可以试试:
if
List.AnyTrue(List.Transform(
"Instagram",
"Facebook",
"WhatsApp"
,(substring) => Text.Contains([List],substring,Comparer.OrdinalIgnoreCase)))
then "Facebook"
else if
//then repeat for list of other company products
else "No Company"
请注意,此方法受顺序限制 - 即,如果 [List] 列同时包含 Apple 和 Facebook 应用程序/产品,它只会将其指定为您查询中列出的第一家公司。
【讨论】:
以上是关于根据列表值在 Power Query 中创建条件列的主要内容,如果未能解决你的问题,请参考以下文章