使用 M 计算 Power Query 中的余额

Calculate balance in Power Query with M

我有两个 table:

第一个持有发送给客户的退款:

Customer ID Refund ID Total refunded
1 Ref1 0.00
1 Ref2 0.00
1 Ref3 0.00
2 Ref4 0.00

第二个链接上面的 table 与相关的信用票据:

Customer ID Credit note Allocation ID Refund Amount Allocated Refund ID
1 CnAll1 0.00 Ref1
1 CnAll2 0.00 Ref2
1 CnAll3 .00 Ref2
1 CnAll4 0.00 Ref3

我想要实现的是第三个 table 两者的结合,每个退款都没有分配退款余额

Customer ID Refund ID Total refunded Credit note Allocation ID Refund Amount Allocated Balance not allocated to any Credit note
1 Ref1 0.00 CnAll1 0.00 $-
1 Ref2 0.00 CnAll2 0.00 $-
1 Ref2 0.00 CnAll3 .00 $-
1 Ref3 0.00 CnAll4 0.00 0.00
2 Ref4 0.00 $- 0.00

我找不到在上述所有情况下计算正确余额的方法。

主要是做一些合并,然后将 ID 行移动一位进行比较

将您的第二个 table 作为 Table1 加载到 powerquery

使用代码将您的第一个 table 加载到 powerquery 中:

let Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Customer ID", Int64.Type}, {"Refund ID", type text}, {"Total refunded", Int64.Type}}),
#"Merged Queries" = Table.NestedJoin(#"Changed Type", {"Customer ID", "Refund ID"}, Table1, {"Customer ID", "Allocated Refund ID"}, "Table1", JoinKind.LeftOuter),
#"Expanded Table1" = Table.ExpandTableColumn(#"Merged Queries", "Table1", {"Credit note Allocation ID", "Refund Amount"}, {"Credit note Allocation ID", "Refund Amount"}),
RefundByID=Table.Group(Table1, {"Allocated Refund ID"}, {{"Refund Amount", each List.Sum([Refund Amount]), type nullable number}}),
#"Merged Queries2" = Table.NestedJoin(#"Expanded Table1", {"Refund ID"},RefundByID, {"Allocated Refund ID"}, "Table1", JoinKind.LeftOuter),
#"Expanded Table2" = Table.ExpandTableColumn(#"Merged Queries2", "Table1", {"Refund Amount"}, {"Refund Amount.1"}),
#"Replaced Value" = Table.ReplaceValue(#"Expanded Table2",null,0,Replacer.ReplaceValue,{"Refund Amount.1"}),
//shift Refund ID down one row
      shiftedList = List.RemoveFirstN(#"Replaced Value"[Refund ID],1) & {null},
      custom1 = Table.ToColumns(#"Replaced Value") & {shiftedList},
      custom2 = Table.FromColumns(custom1,Table.ColumnNames(#"Replaced Value") & {"Next Row"}),
#"Added Custom" = Table.AddColumn(custom2, "Balance", each if [Refund ID]=[Next Row] then 0 else [Total refunded]-[Refund Amount.1]),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Refund Amount.1", "Next Row"})
in  #"Removed Columns"