快捷搜索:  汽车  科技

powerquery文本处理(Query文本拼接方法介绍)

powerquery文本处理(Query文本拼接方法介绍)Text.Combine函数是使用指定的分隔符,来拼接列表内的文本,需要两个参数:有两个思路:Excel中,我们有了新函数Textjoin 这个工作就变得非常简单了,我们只需要把条件列清楚就行,如果班级等于初一,就引用班级的内容,否者为空。=TEXTJOIN(" " TRUE IF($A$2:$A$19=D2 $B$2:$B$19 "")) 这是一个单个单元格的数组公式,需要CTRL SHIFT ENTER三件结束。那么在Power Query中我们有什么办法来进行这样的拼接呢?

Excel新函数Textjoin函数是字符拼接的利器,与之前的“&”与CONCATENATE函数相比,简直是太好用了,比之新函数CONCAT函数也是功能更加强大些。

关于Textjoin函数和Concat函数,在我Excel函数专栏中有详细介绍。

今天我们使用Power Query来实现文本拼接,我们来看例子:

powerquery文本处理(Query文本拼接方法介绍)(1)

我们要像做数据透视表一样,把文本透视过来,拼接在一起。

Excel中,我们有了新函数Textjoin 这个工作就变得非常简单了,我们只需要把条件列清楚就行,如果班级等于初一,就引用班级的内容,否者为空。

=TEXTJOIN(" " TRUE IF($A$2:$A$19=D2 $B$2:$B$19 ""))

这是一个单个单元格的数组公式,需要CTRL SHIFT ENTER三件结束。

那么在Power Query中我们有什么办法来进行这样的拼接呢?

有两个思路:

  • 直接用Text.Combine函数拼接
  • 透视列然后合并列
Text.Combine函数

Text.Combine函数是使用指定的分隔符,来拼接列表内的文本,需要两个参数:

  • 第一参数:文本列表
  • 第二参数:分隔符

首先要做分组操作,使用年级分组

powerquery文本处理(Query文本拼接方法介绍)(2)

然后修改上面标红的位置的内容:

powerquery文本处理(Query文本拼接方法介绍)(3)

这样就可以了,代码如下:

let 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content] 更改的类型 = Table.TransformColumnTypes(源 {{"年级" type text} {"班级" type text}}) 分组的行 = Table.Group(更改的类型 {"年级"} {{"计数" each Text.Combine([班级] " ")}}) in 分组的行 透视

这个也要用到,我们讲过的Power Query组内编号,然后使用组内编号透视列,然后再合并列。

第一步:组内编号

先分组>添加组内编号>展开表

powerquery文本处理(Query文本拼接方法介绍)(4)

第二步:透视列

删除多余的全索引列,使用组内编号透视列

powerquery文本处理(Query文本拼接方法介绍)(5)

第三步:合并列

使用逗号做分隔符合并选中的列

powerquery文本处理(Query文本拼接方法介绍)(6)

代码:

let 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content] 更改的类型 = Table.TransformColumnTypes(源 {{"年级" type text} {"班级" type text}}) 已添加索引 = Table.AddIndexColumn(更改的类型 "索引" 1 1) 分组的行 = Table.Group(已添加索引 {"年级"} {{"计数" each Table.AddIndexColumn(_ "A" 1 1)}}) #"展开的“计数”" = Table.ExpandTableColumn(分组的行 "计数" {"年级" "班级" "索引" "A"} {"年级.1" "班级" "索引" "A"}) 删除的列 = Table.RemoveColumns(#"展开的“计数”" {"索引"}) 已透视列 = Table.Pivot(Table.TransformColumnTypes(删除的列 {{"A" type text}} "zh-CN") List.Distinct(Table.TransformColumnTypes(删除的列 {{"A" type text}} "zh-CN")[A]) "A" "班级") 合并的列 = Table.CombineColumns(已透视列 {"1" "2" "3" "4" "5" "6"} Combiner.CombineTextByDelimiter(" " QuoteStyle.None) "已合并") in 合并的列

两种方法各有千秋,而且可以互相转换,第一种方法,我们也可以通过符号拆分列,变成透视列的效果,后一种方法,透视列后再合并。很多时候,我们会需要在这两种状态之间变来变去,就像和面一样,把数据揉来揉去,变成我们想要的样子。

总的说来,Textjoin函数与Text.Combine函数最为接近,

  • Textjon函数要与if函数配合实现条件文本拼接
  • Text.Combine函数需要与Table.Group函数配合,实现分组文本拼接

猜您喜欢: