多表数据重组(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
    转换表格结构

 

posted @ 2023-06-03 21:34  熬肥妖  阅读(172)  评论(0编辑  收藏  举报