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 |
您可以通过使用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.SplitAnyList.Accumulate,它循环遍历拆分列列表,并检查列表的最后一个元素与当前(已修剪,以避免前导/尾随空格)循环值的比较List.CombineText.Combine设置的分隔符将结果组合List.Accumulate成文本字符串虽然这是一个高级功能,但我对此非常满意!
| 归档时间: |
|
| 查看次数: |
411 次 |
| 最近记录: |