我有一个 Excel 表格,如果人们要移动到不同的部分,我会尝试显示之前和之后的总计。初始表有员工编号、地区、工作类型、之前部分和之后部分。
我想要一个枢轴来显示人力资源部分之前有 10 人,现在之后部分显示 7 人,依此类推,其他部分发生变化。理想情况下,在数据透视表中,我希望它显示每个部分的前后列,即区域、HR 之前、HR 之后、IT 之前、IT 之后等以及其他部分之后/之前的数字。
我可能有两行,因此区域和其下的工作类型作为子行。困难似乎在于获得两列不嵌套且有自己的计数。
样本表
Emp No: Region: Role Type: Before: After
1 Europe Analyst HR IT
2 Europe Dev IT IT
3 Europe Support HR HR
4 Asia Analyst HR IT
5 Asia Support HR IT
我希望数据是什么样子
Region: HR Before: HR After: IT Before: IT After
Europe 2 1 1 2
Asia 2 0 0 2
已尝试过数据透视表,但这似乎将列嵌套在一起,并且值似乎相同,因此无法获得准确的解释
这也可以使用 Windows Excel 2010+ 和 Excel 365(Windows 或 Mac)中提供的 Power Query 来完成
使用 Power Query
Data => Get&Transform => from Table/Range
或 from within sheet
Home => Advanced Editor
Applied Steps
以了解算法let
Source = Excel.CurrentWorkbook(){[Name="Roles"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{
{"Emp No:", Int64.Type}, {"Region:", type text}, {"Role Type:", type text}, {"Before:", type text}, {"After", type text}}),
Departments = List.Buffer(List.Sort(List.Distinct(#"Changed Type"[#"Before:"] & #"Changed Type"[#"After"]))),
#"Grouped Rows" = Table.Group(#"Changed Type", {"Region:"}, {
{"Before", (t)=>
Record.FromList(List.Transform(Departments, (d)=> List.Count(List.Select(t[#"Before:"], each _ = d))),
List.Transform(Departments, each _ & " Before:"))},
{"After", (t)=>
Record.FromList(List.Transform(Departments, (d)=> List.Count(List.Select(t[After], each _ = d))),
List.Transform(Departments, each _ & " After"))}}),
#"Expanded Before" = Table.ExpandRecordColumn(#"Grouped Rows", "Before", {"HR Before:", "IT Before:"}),
#"Expanded After" = Table.ExpandRecordColumn(#"Expanded Before", "After", {"HR After", "IT After"}),
#"Changed Type1" = Table.TransformColumnTypes(#"Expanded After",
List.Transform(List.RemoveFirstN(Table.ColumnNames(#"Expanded After"),1), each {_, Int64.Type}))
in
#"Changed Type1"