如何在Excel Power Query中按SF ID列计算各值的运行计数
在Excel Power Query里给SF ID做运行计数的方法
你要的就是每个SF ID每出现一次就递加1的逐行计数对吧?Power Query里确实没有直接的COUNTIF函数,普通分组也只能算出每个ID的总数量,达不到逐行累计的效果,按下面的步骤来就能搞定:
具体操作步骤
- 先把数据按需要的顺序排好:运行计数是跟着行顺序走的,所以先确保数据是你想要的顺序(比如原始录入顺序,或者按日期排序)。选中SF ID列,点「开始」里的排序按钮就行;要是想严格保留原始顺序,最好先加个索引列记行号——点「添加列」→「索引列」选从1开始就行。
- 分组后生成逐行计数:
- 选中SF ID列,点「转换」→「分组依据」。
- 分组窗口里设置:分组依据选SF ID,新列名随便起(比如叫“组内数据”),操作选「所有行」,点确定。这时候会生成一列装着每个ID对应的所有行的列表。
- 点这个新列标题旁的展开按钮,把原来的所有列都选上展开。
- 加自定义计数列:点「添加列」→「自定义列」,输入公式:
这个公式的作用是,在当前ID对应的所有行列表里,找到当前行的位置,加1就是该ID第几次出现。List.PositionOf([组内数据][SF ID], [SF ID]) + 1
- 收尾清理:把刚才的“组内数据”临时列删掉,把新生成的计数列重命名成你想要的名字(比如“运行计数”)。
嫌点鼠标麻烦?直接用M代码
打开高级编辑器,把现有代码替换成下面的(记得把表1改成你实际的表名):
let 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content], // 先加索引列保留原始顺序 加索引 = Table.AddIndexColumn(源, "原始行号", 1, 1), // 按SF ID分组,给每个组的行加递增计数 分组加计数 = Table.Group(加索引, {"SF ID"}, {{"组数据", each Table.AddIndexColumn(_, "运行计数", 1, 1), type table}}), // 展开所有列 展开列 = Table.ExpandTableColumn(分组加计数, "组数据", Table.ColumnNames(加索引) & {"运行计数"}), // 按原始行号排序回去 恢复顺序 = Table.Sort(展开列,{{"原始行号", Order.Ascending}}), // 删掉临时的原始行号列 清理列 = Table.RemoveColumns(恢复顺序,{"原始行号"}) in 清理列
这样出来的结果就是每个SF ID第一次出现算1,第二次算2,以此类推的运行计数,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Mahmoud Badr
相关产品推荐
相关产品推荐

