官方说明:
返回将一系列文本值 texts 组合为单个文本值的结果。 可以指定最终组合文本中使用的可选分隔符 separator。
Text.Combine( texts as list, optional separator as nullable text) as text
案例1:
简单的文本合并,此时等价于&。注意,第一参数类型为list,所以需要在最外面套一对{},此种情况一般使用&即可。
= Text.Combine({[列1],[列2]})
或= [列1]&[列2]
案例2:
合并一整列,此情况单独用到的不多,但是要了解。
= Text.Combine(源[列1])
案例3:
配合Table.Group
分组合并,比较常见。分组后,得到每个类别下所有名称的list,使用Text.Combine
对list合并,加上第二参数"/"分隔每一项。
= Table.Group(源, "类别", {"名称", each Text.Combine([名称],"/")})
感觉案例3可以用来做行转列,回头试试~~~(先用分隔符合并,然后再分列)
试过了,非常好用,谢谢分享。
你用的什么作的行转列? 分列用的#(lf)替换分隔符?
let
源 = Excel.CurrentWorkbook(){[Name="表6"]}[Content],
分组的行 = Table.Group(源, {"类别"}, {{"合并", each Text.Combine([名称],"/")}}),
按分隔符拆分列 = Table.SplitColumn(分组的行, "合并", Splitter.SplitTextByDelimiter("/", QuoteStyle.Csv), {"行转列.1", "行转列.2", "行转列.3"})
in
按分隔符拆分列
案例3:
= Table.Group(源, "类别", {"名称", each Text.Combine([名称],"/")})中的each Text.Combine([名称],"/"),
1、根据上下文,[名称]是指源的每一行record的_[名称]的吧?
2、each为什么不能写成 each {"名称", Text.Combine([名称],"/")},平时不都是先写each吗?
谢大神
没有为什么,这是函数的参数要求,第三参数要求就是类型为list,list中第一个元素指定列名,第二个元素为聚合函数。
如果写成 each {"名称", Text.Combine([名称],"/")},类型就成了function,而不是要求的list。而且list中的第二个元素也不符合语法,因为[名称]没有上下文。
使用函数时先看看参数说明,要求是什么类型就得是什么类型。
多谢施神解答,继续前进学习
请大神解释一下,“如果写成 each {"名称", Text.Combine([名称],"/")},类型就成了function“是什么意思?为什么就成了function了。
{"名称", each Text.Combine([名称],"/")}这是list可以理解吧?
each {"名称", Text.Combine([名称],"/")}这肯定就不是list了,可以改写为(x)=>x{"名称", Text.Combine(x[名称],"/")},显然是个function
合并时,如何让列表元素按照规定的顺序排序呢?
我试过先排序后分组combine,但是结果并不是排序后的,而是乱序。
想到解决方案了。
直接排序后分组(分组所有行),然后再添加自定义列
Text.Combine([所有行的列][要合并的所有行的列],",")
这样combine之后的结果就是排序的顺序了。
没看懂,能否再解释一下?
请教,如果Text.Combine的字段中有重复文本,比如合并后的内容 = 苹果/橘子/香蕉/苹果/芒果,
如何去掉重复的“苹果”,只保留1个? 也就是去重为(苹果/橘子/香蕉/芒果)
Text.Combine(List.Distinct())
补充:与 去重后合并 相关的问题,在PQ中,如何能做到,只对某一个字段去重,而不删除一整列?
有方法在合并的时候去重吗?
案例2,我跟着做结果错了,= Table.AddColumn(实操1, "2、合并整列", each Text.Combine(源{[细分]}))
错误提示:Expression.Error: 无法将值 " = Table.AddColum..." 转换为类型 List。
详细信息: Value= = Table.AddColumn(实操1, "2、合并整列", each Text.Combine(源,{[细分]})) Type=[Type]
请问是为啥呢?细分那一列的文字完全不重复,中括号去掉也不行。
源{[细分]} 这个是啥意思?应该是 源[细分] 取出这个字段的内容后才能再进行文本合并吧