You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power Query如何仅移除连续重复值?机场航线数据处理需求

在Power Query中处理连续重复的机场航线代码

Power Query没有直接实现“仅移除连续重复项”的内置函数,但可以通过自定义逻辑结合内置函数来实现需求,核心思路是先统一航线的分隔符,再遍历列表过滤掉与前一项重复的元素,最后重新拼接成字符串。

具体实现步骤

以下是针对你的需求的完整处理逻辑,可直接在Power Query中应用:

  • 统一分隔符:先将航线中的逗号(含带空格的逗号)替换为连字符,确保拆分时格式统一
  • 拆分字符串为列表:将处理后的航线拆分为单个机场代码的列表
  • 过滤连续重复项:使用List.Accumulate遍历列表,仅保留与前一项不同的元素
  • 重新拼接为字符串:将过滤后的列表用连字符拼接成最终结果

M代码示例

你可以在Power Query中添加一个自定义列,使用以下代码:

= let
    // 统一分隔符:替换所有逗号(含空格)为连字符
    CleanRoute = Text.Replace(Text.Replace([Route], ", ", "-"), ",", "-"),
    // 拆分为单个机场代码的列表
    RouteList = Text.Split(CleanRoute, "-"),
    // 遍历列表,过滤连续重复项
    FilteredList = List.Accumulate(RouteList, {}, (state, current) =>
        if List.IsEmpty(state) or current <> List.Last(state) then state & {current} else state
    ),
    // 将过滤后的列表拼接为目标格式字符串
    Result = Text.Combine(FilteredList, "-")
in
    Result

示例数据验证

将上述代码应用到你的示例数据后,会得到完全符合要求的结果:

  • ID1:LHR, LHR, CDG,CDG, FCO → LHR-CDG-FCO
  • ID3:AMS, AMS, LHR, AMS, AMS → AMS-LHR-AMS
  • ID4:CGN-CGN-AMS-AMS-AMS-CDG-CDG-AMS → CGN-AMS-CDG-AMS

补充说明

  • 如果航线存在其他分隔符,只需在CleanRoute步骤中添加对应的Text.Replace语句即可适配
  • List.Accumulate是Power Query实现遍历累加的核心函数,这里用它跟踪上一个元素,判断是否保留当前项

内容的提问来源于stack exchange,提问作者Alan Treanor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 05:05:49