如何用Power Query实现遇文本"X"时索引列从0开始逐次加1
Power Query 新增遇"X"递增的条件索引列
实现逻辑:索引初始值为0,逐行判断,当前行存在指定文本"X"时索引值+1,无"X"时沿用上一行索引值,以下给两种可直接落地的实现方式:
界面操作版(无需写代码)
- 数据导入PQ编辑器后,选中需要判断是否包含"X"的目标列,点击【添加列】选项卡→【条件列】
- 条件规则设置为:当目标列值等于
"X"时输出1,否则输出0,新列命名为临时计数,点击确定
- 条件规则设置为:当目标列值等于
- 选中刚生成的
临时计数列,点击【转换】选项卡→【累计求和】,直接生成逐行累计的结果列 - 将累计结果列重命名为
条件索引,删除临时计数列即可完成
M代码版(无临时列,效率更高)
如果不想生成冗余临时列,可以直接用M公式实现,不需要提前加基础索引:
在PQ编辑器的公式栏中,找到你上一步的查询步骤(通常命名为源,注意把代码里的文本列替换成你实际要判断的列名),新增以下步骤即可:
= Table.FromColumns( Table.ToColumns(源) & {List.Accumulate( List.Buffer(源[文本列]), [idx=0, res={}], (state, current) => if current = "X" then [idx = state[idx]+1, res = state[res] & {state[idx]+1}] else [idx = state[idx], res = state[res] & {state[idx]}] )[res]}, Value.Type(源) & type table[条件索引 = Int64.Type] )
匹配规则提示:如果需要判断单元格包含"X"而非完全等于"X",把代码里的判断条件
current = "X"替换为Text.Contains(current, "X")即可。
实现效果参考:
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

