Power Query - 循环提取分隔符之间的文本

Posted

技术标签:

【中文标题】Power Query - 循环提取分隔符之间的文本【英文标题】:Power Query - Loop to extract text between delimiters 【发布时间】:2021-05-14 18:16:34 【问题描述】:

我正在尝试为所有可用匹配项提取分隔符之间的文本。输入列和所需输出如下所示:

Index Country (input) Country (desired output)
0 1, USA; 2, France; 3, Germany; USA, France, Germany
1 4, Spain; Spain
2 1, USA; 5, Italy; USA, Italy

我尝试通过使用", "";" 作为分隔符来使用“提取”和“拆分列”功能,但它没有按预期工作。我也尝试过使用Text.BetweenDelimitersSplitter.SplitTextByEachDelimiter,但我找不到解决方案。

我想在 Power Query 中编写一个循环,以递归方式提取此数据,直到将所有国家/地区提取到每一行的新列。

有什么想法吗?提前致谢!

【问题讨论】:

【参考方案1】:

似乎您正在做的是拆分分号,然后拆分逗号,然后合并结果。所以让我们这样做

右键单击列并拆分分号,每次出现的分隔符,高级选项行

右键单击新列并以逗号分隔,每次出现的分隔符,高级选项列

右键点击索引和分组

在公式栏或 home..advanced 编辑器中编辑分组公式...以替换它作为默认值并以此结束,它使用 , 分隔符组合所有行

, each Text.Combine([ColumnNameGoesHere]," "), type text)

示例代码:

let Source = Excel.CurrentWorkbook()[Name="Table1"][Content],
#"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(Source, "Country (input)", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv)), "Country (input)"),
#"Split Column by Delimiter1" = Table.SplitColumn(#"Split Column by Delimiter", "Country (input)", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), "Country (input).1", "Country (input).2"),
#"Grouped Rows" = Table.Group(#"Split Column by Delimiter1", "Index", "Country (desired output)", each Text.Combine([#"Country (input).2"],", "), type text)
in #"Grouped Rows"

~ ~ ~

我假设这是简化的数据,否则只需一步删除所有数字和分号会更简单

let Source = Excel.CurrentWorkbook()[Name="Table1"][Content],
#"Text" = Table.TransformColumns(Source,"Country (input)", each Text.RemoveRange(Text.Remove(_, "1","2","3","4","5","6","7","8","9","0",";"),0), type text)
in #"Text"

【讨论】:

以上是关于Power Query - 循环提取分隔符之间的文本的主要内容,如果未能解决你的问题,请参考以下文章

Power BI 查询 - 将分隔符之间的文本提取到新列

powerquery扩展到新行与提取值区别

允许 Power Query 同时包含文本和数字

如何提取金蝶软件数据到power query

合并函数Combiner.Combine…(Power Query 之 M 语言)

如何在Power Query中提取数据——列表篇(1)