我有一个表格来跟踪轮班部分的交易。它们按日期记录为数据对,一个人获得正信用,另一个人获得负信用。
Column
1 - Date
2 - Name
3 - Hours (Positive)
4 - Name
5 - Hours (Negative)
我想要一个数据透视表,其中包含单个员工列表和一个显示所涵盖时间段内的净余额的数字。
我尝试在数据透视表中插入一个字段(Field1)作为“小时”(负小时)和“小时2”(正小时)的计算字段。但它将负工作时间的卡洛斯视为与正工作时间的卡洛斯不同的人,而不是创建卡洛斯净工作时间的总和。
基本数据
您可以取消旋转表格,然后创建表格,特别是如果您有
365
。
但是,这也可以使用 Windows Excel 2010+ 和 Microsoft 365(Windows 或 Mac)中提供的 Power Query 来完成。
此解决方案适用于任意数量的“人-小时”配对列。
使用 Power Query
Data => Get&Transform => from Table/Range
Home => Advanced Editor
Applied Steps
以了解算法let
//Change next lines to reflect actual data source
Source = Excel.CurrentWorkbook(){[Name="Shifts"]}[Content],
//can have multiple person-hour pairs after the first "Date" column
personCols = List.Alternate(List.RemoveFirstN(Table.ColumnNames(Source),1),1,1,1),
hoursCols = List.Alternate(List.RemoveFirstN(Table.ColumnNames(Source),1),1,1,0),
typeSets = {{"Date", type date}} & List.Transform(personCols, each {_, type text}) & List.Transform(hoursCols, each {_, type number}),
//Set the data types
#"Changed Type" = Table.TransformColumnTypes(Source, typeSets),
//Unpivot the data columns
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Date"}, "Attribute", "Value"),
//Remove now uneeded columns
#"Removed Columns" = Table.RemoveColumns(#"Unpivoted Other Columns",{"Date", "Attribute"}),
//add a "shifted" column to facilitate matching the person with their hours
#"Add Shifted Values" = Table.FromColumns(
Table.ToColumns(#"Removed Columns") &
{List.RemoveFirstN(#"Removed Columns"[Value],1) & {null}},
type table[Person=text, Hours=number]),
//Remove unneeded rows
#"Removed Alternate Rows" = Table.AlternateRows(#"Add Shifted Values",1,1,1),
//Group by Person and SUM the hours for each
#"Grouped Rows" = Table.Group(#"Removed Alternate Rows", {"Person"}, {{"Sum", each List.Sum([Hours]), type number}}),
//Sort result in alphabetical order
#"Sorted Rows" = Table.Sort(#"Grouped Rows",{{"Person", Order.Ascending}})
in
#"Sorted Rows"