要创建您正在显示的数据透视表,但不复制数据,您可以:
- 根据连接两个表
{"RESOURCE NAME","PROJECT"}
using JoinKind.FullOuter
- 展开表格并在其中“填充空值”
PROJECT
and RESOURCE NAME
容量或需求表中缺少条目的行的列
- 添加需求*成本列。
- 清理完毕后,您可以保存并加载到数据透视表。
M Code
let
//Lodad and Type Capacity Table
Source1 = Excel.CurrentWorkbook(){[Name="Capacity"]}[Content],
Capacity = Table.TransformColumnTypes(Source1,{
{"RESOURCE NAME", type text}, {"SKILL GROUP", type text}, {"PROJECT", type text},
{"START DATE", type date}, {"END DATE", type date},
{"COST PER HOUR", Currency.Type}, {"CAPACITY", Number.Type}}),
//Lodad and Type Demand Table
Source2 = Excel.CurrentWorkbook(){[Name="Demand"]}[Content],
Demand = Table.TransformColumnTypes(Source2,{
{"RESOURCE NAME", type text}, {"SKILL GROUP", type text}, {"PROJECT", type text},
{"START DATE", type date}, {"END DATE", type date}, {"DEMAND", Number.Type}}),
//Join the two tables
joined = Table.NestedJoin(Capacity,{"RESOURCE NAME","PROJECT"},Demand,{"RESOURCE NAME","PROJECT"},"Joined",JoinKind.FullOuter),
//Remove unneeded columns and expand the Joined table
#"Removed Columns" = Table.RemoveColumns(joined,{"SKILL GROUP", "START DATE", "END DATE"}),
#"Expanded Joined" = Table.ExpandTableColumn(#"Removed Columns", "Joined",
{"RESOURCE NAME", "PROJECT", "DEMAND"},
{"Demand.RESOURCE NAME", "Demand.PROJECT", "Demand.DEMAND"}),
//Transform the null records for those missing from one table or the other
capFN = {"RESOURCE NAME", "PROJECT", "COST PER HOUR","CAPACITY"},
demFN = {"Demand.RESOURCE NAME", "Demand.PROJECT", "Demand.DEMAND"},
recs = Table.ToRecords(#"Expanded Joined"),
xForm = List.Generate(
()=>[rec = recs{0}, idx=0],
each [idx] < List.Count(recs),
each [rec = if recs{[idx]+1}[RESOURCE NAME] = null or recs{[idx]+1}[Demand.RESOURCE NAME]= null then
let
rtl = Record.ToList(recs{[idx]+1}),
xRtl = if rtl{0} = null then List.ReplaceRange(rtl,0,2, List.Range(rtl,4,2))
else List.ReplaceRange(rtl,4,2, List.Range(rtl,0,2))
in Record.FromList(xRtl, List.Combine({capFN,demFN}))
else recs{[idx]+1}, idx=[idx]+1],
each [rec]),
#"Converted to Table" = Table.FromList(xForm, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1",
{"RESOURCE NAME", "PROJECT", "COST PER HOUR", "CAPACITY", "Demand.DEMAND"},
{"RESOURCE NAME", "PROJECT", "COST PER HOUR", "CAPACITY", "Demand.DEMAND"}),
#"Changed Type" = Table.TransformColumnTypes(#"Expanded Column1",{
{"RESOURCE NAME", type text}, {"PROJECT", type text},
{"COST PER HOUR", Currency.Type},
{"CAPACITY", Int64.Type}, {"Demand.DEMAND", Int64.Type}}),
//Add demand*cost column
#"Added Custom" = Table.AddColumn(#"Changed Type", "Demand Cost", each [COST PER HOUR]*[Demand.DEMAND], Currency.Type),
#"Removed Columns1" = Table.RemoveColumns(#"Added Custom",{"COST PER HOUR"})
in
#"Removed Columns1"
=>