2017-01-26 8 views
2

私が探していたものの一部がMatchlists/tables in power queryに見つかりましたが、もう少し必要です。別のリスト内の1つのリストから文字列を検索し、返された文字列を返します

Matchlists/tables in power queryで提供されている「フラグのみ」の例を使用して、リストAの行内容にListBの行内容がまったく表示されるかどうかをListAとListBの2つのリストで比較します。 ListBの行の内容がListAの行の内容のの部分であるだけなので、List.Intersectのように両方の行の内容の1対1の一致はできません。

以下のクエリでは、ListBには単語roomの最初の3文字である "roo"が含まれています。

Matchlists/tables in power queryで提供されている "Flags only"の例では、すでに "roo"が "私の中にある" ListAの行の一部であると判断しています。 「ListAとListBの間にこのような一致がある場合、trueの代わりに「yes」を割り当てる例を構築しました。

私がしたいのは、ListBの実際の値に "yes"を置き換えることです。例えば、値 "roo"です。私は単純にwordBを "yes"に置き換えようとしましたが、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 

ので、それを作るためにどのように任意のアイデア?

(私は電源クエリ/ Mに非常に新しいですP.S.)

おかげ

答えて

2

私は、このようにします:

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

の欠点は、第三のヌル項目が欠落していることです。 List.Transform(ListB, ...を使用すると、見つからない行を空白として戻すことができます。

2

編集:私はあなたの結果の最初の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に "help"を追加して、ListAの最初の要素に2つの一致があり、両方が返されるようにしました。

関連する問題