如何使用数据透视表显示每个部分之前和之后的计数

问题描述 投票:0回答:1

我有一个 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

已尝试过数据透视表,但这似乎将列嵌套在一起,并且值似乎相同,因此无法获得准确的解释

excel pivot-table
1个回答
0
投票

这也可以使用 Windows Excel 2010+ 和 Excel 365(Windows 或 Mac)中提供的 Power Query 来完成

使用 Power Query

  • 选择数据表中的某个单元格
  • Data => Get&Transform => from Table/Range
    from within sheet
  • PQ 编辑器打开时:
    Home => Advanced Editor
  • 记下第 2 行中的表名称
  • 将下面的 M 代码粘贴到您所看到的位置
  • 将第 2 行中的表名称更改回最初生成的名称。
  • 阅读评论并探索
    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"

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.