3

我在 Power query 的 Matchlists/tables 中找到了我正在寻找的部分内容,但我需要更多。

使用Matchlists/tables in power query 中提供的“仅标志”示例,我正在比较两个列表 ListA 和 ListB,以检查 ListB 的行内容是否完全出现在 ListA 的行内容中。我不能对两行的内容进行一对一的匹配(比如 List.Intersect),因为 ListB中的一行内容可能只是 ListA 中一行内容的一部分

请注意,在下面的查询中,ListB 包含“roo”,它是单词 room 中的前三个字母。我想知道“roo”在 ListA 的“in my room”所在的行中。</p>

功率查询中 Matchlists/tables提供的“仅标志”示例已经确定“roo”是 ListA 的“in my room”行的一部分。当 ListA 和 ListB 之间存在这样的匹配时,我在示例的基础上分配“是”而不是“真”。

我想做的是用 ListB 中的实际值替换“yes”——例如,值“roo”。我试图简单地将 wordB 替换为“是”,但我收到了一个错误,即 wordB 无法识别。

let
    ListA = {"help me rhonda",  "in my room", "good vibrations", "god only knows"},
    ListB = {"roo", "me", "only"},
    contains_word=List.Transform(ListA, (lineA)=>if List.MatchesAny(ListB, (wordB)=>Text.Contains(lineA, wordB)) = true then "yes" else "no")
in
    contains_word

当前查询结果如下:

    List
1   yes
2   yes
3   no
4   yes

我希望查询结果是:

    List
1   roo
2   me
3   
4   only

知道如何做到这一点吗?

(ps 我对 Power Query / M 非常陌生)

谢谢

4

2 回答 2

4

我会这样做:

let
    ListA = {"help me rhonda",  "in my room", "good vibrations", "god only knows"},
    ListB = {"roo", "me", "only"},
    contains_word=List.Transform(ListA, (lineA)=>List.Select(List.Transform(ListB, (wordB)=>if Text.Contains(lineA, wordB) = true then wordB else null), (x)=>x <> null){0}?)
in
    contains_word

[编辑]

这个想法是使用 List.Transform 两次:内部一次更改列表 B 以仅保留匹配的值。然后最新的第一个非空替换列表 A(外部 List.Tramsform)中的字符串。

于 2017-01-26T17:00:01.480 回答
2

编辑:我认为您切换了结果的前两个元素?

您可以使用以下代码:

let
    ListA = {"help me rhonda",  "in my room", "good vibrations", "god only knows"},
    ListB = {"roo", "help", "me", "only"},
    TableA = Table.FromList(ListA,null,{"ListA"}),
    AddedListBMatches = Table.AddColumn(TableA, "ListBMatches", (x) => List.Select(ListB, each Text.PositionOf(x[ListA], _) >= 0)),
    ExtractedValues = Table.TransformColumns(AddedListBMatches, {"ListBMatches", each Text.Combine(List.Transform(_, Text.From), ","), type text}),
    Result = ExtractedValues[ListBMatches]
in
    Result

“ExtractedValues”步骤是按下“ListBMatches”列标题中的展开按钮并选择提取值(逗号分隔)的结果。此选项是在 2017 年 1 月更新中添加的。

我向 ListB 添加了“帮助”,因此 ListA 的第一个元素有 2 个匹配项都返回。

于 2017-01-26T16:58:50.913 回答