这也可以在 Power Query 中完成。
请参阅此article,了解如何在您的 Excel 版本上使用 Power Query。它在 Excel 2010 Professional Plus 及更高版本中可用。我的演示使用的是 Excel 2016。
步骤是:
- 将
time series of cash-flow 和2-column output table 这两个表加载到电源查询编辑器,那么您应该:
- 对于第一个表,将
Period列与Cashflow列合并,以分号;作为分隔符;
- 转置列/表,然后用逗号
,作为分隔符合并列;
- 使用此公式
="Connector" 添加自定义列,该列将使用单词Connector 填充列,那么您应该:
- 对于第二个表格,还添加一个自定义列,使用相同的公式
="Connector" 将用单词Connector 填充列;
- 使用
Custom 列作为连接将第二个表与第一个表合并,然后展开新列以显示第一个表中的Merged 列,那么您应该有:
- 删除
Custom 列,然后用分隔符逗号, 拆分Merged 列并将结果放入Rows;
- 用分隔符分号
; 再次拆分Merged 列,将Period 和Cashflow 与第一个表分开;
- 添加一个自定义列来计算
New Period是=[Period]+[Merged.1];
- 添加另一个自定义列来计算
Cashflow 是=[#"# Tran"]*[Merged.2],那么您应该有如下内容:
- 按
New Period 对Cashflow 列进行分组/求和。
完成后,您可以关闭并加载结果到新工作表(默认情况下)。如果要在最终输出中显示# Trans 列,可以在进行任何更改之前复制第二个表,然后通过Period 列将其与最终输出表合并以显示相应的数量交易。
这是第一个表的电源查询M代码:
let
Source = Excel.CurrentWorkbook(){[Name="Tbl_CFS"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Period", Int64.Type}, {"Cashflow", Int64.Type}}),
#"Merged Columns1" = Table.CombineColumns(Table.TransformColumnTypes(#"Changed Type", {{"Period", type text}, {"Cashflow", type text}}, "en-AU"),{"Period", "Cashflow"},Combiner.CombineTextByDelimiter(";", QuoteStyle.None),"Merged"),
#"Transposed Table" = Table.Transpose(#"Merged Columns1"),
#"Merged Columns" = Table.CombineColumns(Table.TransformColumnTypes(#"Transposed Table", {{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6", type text}}, "en-AU"),{"Column1", "Column2", "Column3", "Column4", "Column5", "Column6"},Combiner.CombineTextByDelimiter(",", QuoteStyle.None),"Merged"),
#"Added Custom" = Table.AddColumn(#"Merged Columns", "Custom", each "Connector")
in
#"Added Custom"
下面是第二张表的代码:
let
Source = Excel.CurrentWorkbook(){[Name="Tbl_Total"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Period", Int64.Type}, {"# Tran", Int64.Type}}),
#"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each "Connector"),
#"Merged Queries" = Table.NestedJoin(#"Added Custom", {"Custom"}, Tbl_CFS, {"Custom"}, "Tbl_CFS", JoinKind.LeftOuter),
#"Expanded Tbl_CFS" = Table.ExpandTableColumn(#"Merged Queries", "Tbl_CFS", {"Merged"}, {"Merged"}),
#"Removed Columns" = Table.RemoveColumns(#"Expanded Tbl_CFS",{"Custom"}),
#"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Removed Columns", {{"Merged", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Merged"),
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Merged", type text}}),
#"Split Column by Delimiter1" = Table.SplitColumn(#"Changed Type1", "Merged", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv), {"Merged.1", "Merged.2"}),
#"Changed Type2" = Table.TransformColumnTypes(#"Split Column by Delimiter1",{{"Merged.1", Int64.Type}, {"Merged.2", Int64.Type}}),
#"Added Custom1" = Table.AddColumn(#"Changed Type2", "New Period", each [Period]+[Merged.1]),
#"Added Custom2" = Table.AddColumn(#"Added Custom1", "Cashflow", each [#"# Tran"]*[Merged.2]),
#"Grouped Rows" = Table.Group(#"Added Custom2", {"New Period"}, {{"Sum", each List.Sum([Cashflow]), type number}})
in
#"Grouped Rows"
所有步骤都使用内置函数,因此应该简单明了且易于执行。让我知道是否有任何问题。干杯:)