多表数据重组(Power Query)
问题:多个如下图结构的表数据重组
效果如下:
数据整理:
let
源 = Excel.Workbook(File.Contents("路径\文件名.xlsx"), null, true),
筛选掉无关工作表 = Table.SelectRows(源, each Text.Contains([Name], "0")),
筛选掉非工作表 = Table.SelectRows(筛选掉无关工作表, each [Kind] = "Sheet"),
保留待展开列 = Table.SelectColumns(筛选掉非工作表,{"Data"}),
展开 = Table.ExpandTableColumn(保留待展开列, "Data", {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7", "Column8", "Column9", "Column10"}),
合同编号独立列 = Table.FillDown(Table.AddColumn(展开, "合同编号", each if [Column2] = "合同编号" then [Column3] else null),{"合同编号"}),
厂商名称独立列 = Table.FillDown(Table.AddColumn(合同编号独立列, "厂商名称", each if [Column2] = "厂商名称" then [Column3] else null),{"厂商名称"}),
合同内容独立列 = Table.FillDown(Table.AddColumn(厂商名称独立列, "合同内容", each if [Column2] = "合同内容" then [Column3] else null),{"合同内容"}),
合同金额独立列 = Table.FillDown(Table.AddColumn(合同内容独立列, "合同金额", each if [Column2] = "合同金额" then [Column3] else null),{"合同金额"}),
保留有效数据行 = Table.SelectRows(Table.RemoveRowsWithErrors(Table.TransformColumnTypes(Table.PromoteHeaders(Table.Skip(合同金额独立列, each [Column2] <> "预计付款日期")),{{"预计付款日期", type date}}), {"预计付款日期"}), each ([预计付款日期] <> null)),
保留有效数据列 = Table.ReplaceValue(Table.RenameColumns( Table.SelectColumns(保留有效数据行,{"预计付款日期", "预计付款金额", "实际付款金额", "A0", "供应商1", "内容1", "10"}),{{"A0", "合同编号"}, {"供应商1", "厂商名称"}, {"内容1", "合同内容"}, {"10", "合同金额"}}),null,0,Replacer.ReplaceValue,{"实际付款金额"}),
日期调整为月未 = Table.TransformColumns(保留有效数据列, {"预计付款日期", each Date.EndOfMonth(_)}),
更改的类型 = Table.TransformColumnTypes(日期调整为月未,{{"预计付款日期", type date}})
in
更改的类型
需求1:
let
源 = 数据整理,
分组的行 = Table.Group(源, {"厂商名称", "合同内容", "合同金额"}, {{"已付金额", each List.Sum([实际付款金额]), type number}}),
插入的减法 = Table.AddColumn(分组的行, "未付金额", each [合同金额] - [已付金额], type number)
in
插入的减法
需求2:
let
源 = 数据整理,
分组的行 = Table.Group(源, {"预计付款日期", "合同编号"}, {{"预付金额", each List.Sum([预计付款金额]), type number}, {"实际金额", each List.Sum([实际付款金额]), type number}}),
计算预付资金 = Table.RemoveColumns(Table.AddColumn(分组的行, "减法", each [预付金额] - [实际金额], type number),{"预付金额", "实际金额"}),
设置资金预需求列 = Table.RemoveColumns(Table.TransformColumns(Table.AddColumn(计算预付资金, "资金预需求", each if [预计付款日期] < #date(2023, 6, 1) then #date(2023, 6, 30) else [预计付款日期]), {"资金预需求", each Date.ToText(_, "yyyy年") & Date.ToText(_, "MM月") & "资金预需求"}),{"预计付款日期"}),
转换表格结构 = Table.Pivot(设置资金预需求列, List.Distinct(设置资金预需求列[合同编号]), "合同编号", "减法", List.Sum)
in
转换表格结构