簡體   English   中英

根據條件合並兩個表,使用 Power Query excel 或 VBA?

[英]Merging two tables based on conditions, using Power Query excel or a VBA?

我有一個大型數據集 (A),我需要根據以下條件與另一個(較小的)表 (B) 合並:如果表 (A) 中列 (X) 中單元格的第一個字母與內容匹配在單元格中,表 (B) 中的列 (Y) 然后匹配/合並。 否則,檢查列 (X)、表 (A) 中單元格的前兩個字母是否與列 (Y)、表 (B) 中的單元格內容匹配,然后匹配/合並。 請注意,表 B 中的列 (Y) 具有唯一值; 在字母(字母)或兩個字母上。

這是一個例子:[一個例子]

認為可能會提供您正在尋找的結果。 它不會進行簡單的基於單個條件的合並。 它使用組合的合並:在TableA和TableB之間基於TableA的X列每行的第一個字符和TableB中Y列的每一行的值,另一個基於Column每行的前兩個字符TableA 中的 X 和 TableB 的 Y 列中每一行的值。 它擴展每個合並的結果列以僅顯示該列中合並的 Y 列值。 然后它將這兩個合並結果列的結果合並為一列,並使用該列再次與TableB的Y列合並,以拉入Y列值的rest。

let
    Source = Excel.CurrentWorkbook(){[Name="TableA"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column X", type text}, {"Column X 2", type number}, {"Column X 3", type number}, {"Column X 4", type number}, {"Column X 5", type number}, {"Column X 6", type number}, {"Column X 7", type number}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Column X First 1", each Text.Start([Column X],1)),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "Column X First 2", each Text.Start([Column X],2)),
    #"Merged Queries" = Table.NestedJoin(#"Added Custom1", {"Column X First 1"}, TableB, {"Column Y"}, "Column Y First 1", JoinKind.LeftOuter),
    #"Expanded TableB" = Table.ExpandTableColumn(#"Merged Queries", "Column Y First 1", {"Column Y"}, {"Column Y First 1"}),
    #"Merged Queries1" = Table.NestedJoin(#"Expanded TableB", {"Column X First 2"}, TableB, {"Column Y"}, "Column Y First 2", JoinKind.LeftOuter),
    #"Expanded TableB1" = Table.ExpandTableColumn(#"Merged Queries1", "Column Y First 2", {"Column Y"}, {"Column Y First 2"}),
    #"Merged Columns" = Table.CombineColumns(Table.TransformColumnTypes(#"Expanded TableB1", {{"Column Y First 2", type text}}, "en-US"),{"Column Y First 1", "Column Y First 2"},Combiner.CombineTextByDelimiter("", QuoteStyle.None),"Column Y Match"),
    #"Merged Queries2" = Table.NestedJoin(#"Merged Columns", {"Column Y Match"}, TableB, {"Column Y"}, "TableB", JoinKind.LeftOuter),
    #"Expanded TableB2" = Table.ExpandTableColumn(#"Merged Queries2", "TableB", {"Column 1", "Column 2", "Column 3", "Column Y"}, {"Column 1", "Column 2", "Column 3", "Column Y"}),
    #"Removed Columns" = Table.RemoveColumns(#"Expanded TableB2",{"Column X First 1", "Column X First 2", "Column Y Match"})
in
    #"Removed Columns"

感謝您抽出寶貴時間幫助解決這個問題。 對此,我真的非常感激。 我想我做了類似的事情,但沒有寫出像你這樣的代碼。 相反,我在第一個表 (A) 中創建了兩列,其中一列包含 (X) 列中的所有第一個字母,另一列包含 (X) 列中的所有前兩個字母。接下來,我合並基於以下步驟:基於新列(列(X)中的一個字母和表(B)中的字母列)合並表(A)和表(B)。隨后,我刪除(過濾掉)所有“空" 來自新合並表 (M1) 的值。回到表 (A) 並基於具有兩個字母的列和表 (B) 中的字母列合並。清除所有“Null”值(刪除它們)。現在我有一個新的合並表 (M2) 。最后,我做了一個 Append 操作,所以表 (Merge M1) 和 (Merge M2) 合並了。我確實注意到一些重復,比如幾行重復。我不能找出原因。這個過程是否有意義或是否有冗余?我正在嘗試學習 M 中的代碼以避免任何錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM