先看图,说一下需求,表格中,ABC三列是原始数据, 需要动态统计出每个部门的分组累计和(如E列结果所示)。
此类问题,对Excel公式函数稍微熟悉一点的,料想一条简单的SUMIF函数填充就能解决
=SUMIF(A$2:A2,A2,C$2:C2)
但在“部门”乱序的情况下, 就不好使用公式去整理数据好再使用公式了,使用Power Query的优势, 就可以直接从表格中查询数据,直接转换,整理,统计出想要的结果。详细步骤如下(可能不是最简单的方法,各位看官先看看这个解决方法。
示例使用Office2013为蓝本, Office2016方法雷同。
step 1:选择表格区域 A1:C12,点击Power Query选项卡工具 [从表] 按钮,导入Power Query查询编辑器。
Step 2:[表1]查询中,使用[添加列]功能, 添加一个”索引“列。
Step 3:在查询编辑器中,将[表1]右键→[复制]出一个新查询,并重命名为“查询结果。
Step 4:点击[开始]选项卡→[分组依据]对表格进行分组统计,设置结果如下图。
Step 5:点击[添加列]选项卡→[添加自定义列],设置公式 ={1..[计数]},点击确定按钮后,在查询结果”序号“字段点击展开按钮,展开这个字段。
Step 6:为了便于查询结果的准确性,在”查询结果“表中,使用[添加列]功能,添加一个索引列。
Step 7:点击[开始]→[合并查询],选择[表1],并选择两个相关联匹配的列。
Step 8:展开NewColumn,只选择[金额列]。
Step 9:选择”索引“字段列,点击[开始]→[分组依据]功能对数据做第二次分组统计。
Step 10:最关键的一步,修改M公式,原公式如下:
= Table.Group(#”展开的“NewColumn””, {“索引”}, {{“累计求和”, each List.Sum([金额]), type number}})
修改后公式如下:
= Table.Group(#”展开的“NewColumn””, {“索引”}, {“累计求和”, each List.Sum(List.FirstN([金额],List.First([序号])))})
获得累积结果如下图所示
Step 11:继续使用合并查询将[表1]的内容与查询结果匹配在一起, 点击[开始]选项卡→[合并查询],对话框中做如下设置。
Step 12:展开NewColumn,只保留”部门“,”姓名“,”金额“三列
Step 13:最后,调一下列的顺序,并把辅助的”索引“列删除,就可获得最终结果。
虽然看上去步骤复杂,实际操作不到1分钟就可以完成数据的累计求和,特别是在乱序的情况下非常有用。表格数据如果是动态的, 还可以通过从文件的方式导入数据查询。