Power Query - 仅删除连续的重复项

Ala*_*nor 2 m powerquery powerbi powerbi-desktop

我的每一行都有一个数据集(机场位置代码),例如伦敦(LHR)、巴黎(CDG)、罗马(FCO)等。

在某些行上,条目可能是 London、London、London、Paris。我计划通过清除重复项来删除它,但在某些情况下我有真正的重复项,例如伦敦、巴黎、伦敦。我想保留伦敦的决赛,因为中间还有另一个地点。如果我们考虑机场代码,路线可能如下所示 -

LHR、LHR、CDG、FCO、FCO(更改为 LHR-CDG-FCO)-

LHR、LHR、CDG、CDG、CDG、LHR(更改为 LHR-CDG-LHR) 我能够实现的是它刚刚返回 LHR-CDG 的不同列表。

代码出现的次数是动态的。

PowerQuery 中是否有可以返回此类逻辑的函数?

样本数据:

ID 路线 所需结果
1 LHR、LHR、CDG、CDG、FCO LHR-CDG-FCO
2 AMS、AMS、LHR、CDG AMS-LHR-CDG
3 AMS、AMS、LHR、AMS、AMS AMS-LHR-AMS
4 CGN-CGN-AMS-AMS-AMS-CDG-CDG-AMS 中广核-AMS-CDG-AMS
5 中广核-中广核-CDG-CDG-CDG 中广核-CDG

Mar*_*cus 5

您可以通过使用List.Accumulate和来执行此操作List.Last,将此公式粘贴到新的自定义列中:

Text.Combine(
    List.Transform(
        List.Accumulate(
            Text.SplitAny([Route], ",-") /* Will split given column on any of the listed delimiters in 2nd argument */
            , {}, (state,current) => 
            if List.Last(state) <> Text.Trim(current) 
            then List.Combine({state, {Text.Trim(current)}}) 
            else state 
         ), 
        Text.From
    ), "-" /* Delimiter for output column */
)
Run Code Online (Sandbox Code Playgroud)

该函数执行以下操作:

  • 使用中给出的分隔符​​将文本列拆分为列表List.SplitAny
  • 使用空列表作为 中的基线List.Accumulate,它循环遍历拆分列列表,并检查列表的最后一个元素与当前(已修剪,以避免前导/尾随空格)循环值的比较
  • 如果当前循环值与列表的最后一个元素相同,则跳过该元素
  • 如果当前循环值与最后一个元素不同,我们使用以下命令将其添加到状态中List.Combine
  • 最后,循环完成后,我们使用Text.Combine设置的分隔符将结果组合List.Accumulate成文本字符串

虽然这是一个高级功能,但我对此非常满意!