当有多个匹配项时,在嵌套连接或类似连接中获取最大值和所有相应的详细信息

Get maximum value and all corresponding details in nested join or similar when there are multiple matches

我最近开始使用 power query 并遇到了一个小障碍,我希望它能很容易地解决

我有两个 table。我使用外部类型 nestedjoining 将第二个 table 的值带入第一个 table。

这似乎得到了预期的结果,除非 table 中有多个匹配项 2。我看到的是 table 1 个值然后被复制并且 [=20= 中的行]2 与重复行匹配。

我想获取最大行/将其限制为仅最新行。我正在寻找一个相对优雅的解决方案。到目前为止,我想出的最好的方法是使用一些 group by aggregate 和 max 来显示值,但是现在这给了我最大值,它在几行上重复而不是唯一值。从理论上讲,我可以再次将其分组并留下独特的但想知道是否有开箱即用的解决方案。

  a                   b                                                          
  data1.1.1           data1.1.2                                                  
  data1.2.1           data1.2.2                                                  

  After nestedJoin:                                                              

  a                   b           c     d             e             f            
  data1.1.1           data1.1.2   298   data2.298.1   data2.298.2   data2.298.3  
  data1.1.1           data1.1.2   300   data2.300.1   data2.300.2   data2.300.3  
  data1.2.1           data1.2.2   500   data2.500.1   data2.500.2   data2.500.3  

  Desired Result:                                                                

  a                   b           c     d             e             f            
  data1.1.1           data1.1.2   300   data2.300.1   data2.300.2   data2.300.3  
  data1.2.1           data1.2.2   500   data2.500.1   data2.500.2   data2.500.3  
let     
Source = Table.NestedJoin(Table1, {"a", "b"}, Table2, {"a", "b"}, "Table2", JoinKind.LeftOuter),     
#"Expanded GV" = Table.ExpandTableColumn(Source, "Table2", {"e", "f", "g", }, {"Table2.e", "Table2.f","Table2.g"}),     
#"Filtered Rows" = Table.SelectRows(#"Added Custom", each ([#"a"] <> null)) 
in
#"Filtered Rows"

重新阅读后,我认为我对方法论的评论并不明确。我应该根据 ab 对列进行分组,但不要聚合。然后提取 c 列中带有 max 的行。 这是将您的 After nestedJoin(我工作簿中的 Table1)更改为 Desired Results 的代码。我想这就是您要找的。

所有步骤都是从Power Query UI完成的,添加列的公式为:=Table.Max([Grouped],"c")

M码

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"a", type text}, {"b", type text}, {"c", Int64.Type}, {"d", type text}, {"e", type text}, {"f", type text}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"a", "b"}, {{"Grouped", each _, type table [a=text, b=text, c=number, d=text, e=text, f=text]}}),
    #"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each Table.Max([Grouped],"c")),
    #"Expanded Custom" = Table.ExpandRecordColumn(#"Added Custom", "Custom", {"a", "b", "c", "d", "e", "f"}, {"a.1", "b.1", "c", "d", "e", "f"}),
    #"Removed Columns" = Table.RemoveColumns(#"Expanded Custom",{"a", "b", "Grouped"}),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"a.1", "a"}, {"b.1", "b"}})
in
    #"Renamed Columns"