【问题标题】:Powerquery extract values from list in column B based on another columnA valuePower Query 根据另一列值从 B 列中的列表中提取值
【发布时间】:2022-01-29 11:53:32
【问题描述】:

我有两列 A 和 B

A 是一个普通的列。假设它可能有以下任何一种颜色:黑色、白色、橙色 B 每个B记录都包含一个列表。比如说“白衬衫”、“白裤子”、“橙色 T 恤”

我正在尝试在 B 列中获取与 A 列中的颜色相关的项目。

如果 A = 白色,那么我想要一个单元格中的“白衬衫”和“白裤子”。

如果我硬编码“白色”,它可以工作,但我无法将 [A] 传递给 Text.Contains(或者我不知道如何)

= Table.TransformColumns(#"Added Custom", {"B", each Text.Combine(List.Transform(List.Select(_,each Text.Contains(_,"white")), Text.From), "#(lf)"), type text})

拜托,感谢您的帮助。

【问题讨论】:

  • 使用以下代码,您可以从 A 列传递一个值。它被硬编码到第一行 {0} =Table.TransformColumns(#"Added Custom", {"A", each Text. Combine(List.Transform(List.Select(,each Text.Contains(,#"Added Custom"[B]{0})), Text.From), "#(lf)") , 输入文字})

标签: list filter powerquery


【解决方案1】:

诀窍是在开始使用第二列中的列表之前将第一列的值设置为等于一个变量

你的例子

= Table.TransformColumns(#"Added Custom", {"B", each let search = [ColumnA] in Text.Combine(List.Transform(List.Select(_,each Text.Contains(_,search)), Text.From), "#(lf)"), type text})

但在一个更一般的例子中:

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}}),
#"Added Custom" =  Table.AddColumn(#"Changed Type", "Custom", each 
    let search = [Column1] in 
    Text.Combine(
        List.Select(
            Text.Split([Column2],","),
            each Text.Contains(_,search)
        )
    ," ,")
)
in  #"Added Custom"

【讨论】:

  • 您好,非常感谢。我将使用第二个示例。第一个很有意义,但是我得到了一个错误。 Expression.Error:我们无法对 List 类型应用字段访问权限。详细信息:Value=[List] Key=Column1 无论哪种方式,您都给了我第二种方法的想法。因为我可以从类似于您的 Column2 的文本字段中获取数据。再次感谢!
  • 我尝试了一般的例子,效果很好。事实上,在我的用例中,它甚至可能比我尝试做的更好。感谢您花时间回答。一切顺利。
猜你喜欢
  • 2015-08-03
  • 1970-01-01
  • 1970-01-01
  • 2023-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多