Excel PowerQuery/M:如何将多行文本合并到一行中
我在PowerQuery中有这样一个表: # 凯亚 钥匙 评论 价值 1. A1 地下一层 评论1 1. 2. A1 地下一层 评论2 3. 3. A2 地下二层 评论3 6.Excel PowerQuery/M:如何将多行文本合并到一行中,excel,powerbi,powerquery,m,Excel,Powerbi,Powerquery,M,我在PowerQuery中有这样一个表: # 凯亚 钥匙 评论 价值 1. A1 地下一层 评论1 1. 2. A1 地下一层 评论2 3. 3. A2 地下二层 评论3 6. Table.Group正在做需要做的事情 以下是问题的解决方案: let Source = Table.FromRecords({ [KeyA="A1", KeyB="B1", Comment="Comment 1", Value=1],
Table.Group
正在做需要做的事情
以下是问题的解决方案:
let
Source = Table.FromRecords({
[KeyA="A1", KeyB="B1", Comment="Comment 1", Value=1],
[KeyA="A1", KeyB="B1", Comment="Comment 2", Value=2],
[KeyA="A2", KeyB="B2", Comment="...", Value=3]
}),
Grouped = Table.Group(
Source,
{"KeyA", "KeyB"},
{
{"Comments", (t) => Text.Combine(t[Comment], ", ")}, // <- Magic happens here!
{"Sum", (t) => List.Sum(t[Value])},
{"RecordCount", each Table.RowCount(_), Int64.Type}
}
)
in
Grouped
let
Source=表.FromRecords({
[KeyA=“A1”,KeyB=“B1”,Comment=“Comment 1”,Value=1],
[KeyA=“A1”,KeyB=“B1”,Comment=“Comment 2”,Value=2],
[KeyA=“A2”,KeyB=“B2”,Comment=“…”,Value=3]
}),
分组=表。分组(
来源:,
{“KeyA”,“KeyB”},
{
{“Comments”,(t)=>Text.Combine(t[Comment],“,”)},//List.Sum(t[Value]),
{“RecordCount”,每个表.RowCount(_),Int64.Type}
}
)
在里面
分组
说明:
该功能需要3个参数:
{“Comments”,(t)=>Text.Combine(t[Comment],“,”)}
创建一个新列Comments
(t)=>…
是函数定义。为每个组调用此函数-使用包含该组所有行的表t[Comment]
将表中的Comment
列提取为列表,然后可与列表一起使用。组合
函数以连接
如何从PowerQuery编辑器开始
如果在PowerQuery编辑器中有源表,请选择列KeyA
和KeyB
,然后单击变换功能区中的“分组依据”。这将使用记录计数构建表.Group
查询。使用高级编辑器进行进一步修改
表格。Group
正在做所需的事情
以下是问题的解决方案:
let
Source = Table.FromRecords({
[KeyA="A1", KeyB="B1", Comment="Comment 1", Value=1],
[KeyA="A1", KeyB="B1", Comment="Comment 2", Value=2],
[KeyA="A2", KeyB="B2", Comment="...", Value=3]
}),
Grouped = Table.Group(
Source,
{"KeyA", "KeyB"},
{
{"Comments", (t) => Text.Combine(t[Comment], ", ")}, // <- Magic happens here!
{"Sum", (t) => List.Sum(t[Value])},
{"RecordCount", each Table.RowCount(_), Int64.Type}
}
)
in
Grouped
let
Source=表.FromRecords({
[KeyA=“A1”,KeyB=“B1”,Comment=“Comment 1”,Value=1],
[KeyA=“A1”,KeyB=“B1”,Comment=“Comment 2”,Value=2],
[KeyA=“A2”,KeyB=“B2”,Comment=“…”,Value=3]
}),
分组=表。分组(
来源:,
{“KeyA”,“KeyB”},
{
{“Comments”,(t)=>Text.Combine(t[Comment],“,”)},//List.Sum(t[Value]),
{“RecordCount”,每个表.RowCount(_),Int64.Type}
}
)
在里面
分组
说明:
该功能需要3个参数:
{“Comments”,(t)=>Text.Combine(t[Comment],“,”)}
创建一个新列Comments
(t)=>…
是函数定义。为每个组调用此函数-使用包含该组所有行的表t[Comment]
将表中的Comment
列提取为列表,然后可与列表一起使用。组合
函数以连接
如何从PowerQuery编辑器开始
如果在PowerQuery编辑器中有源表,请选择列KeyA
和KeyB
,然后单击变换功能区中的“分组依据”。这将使用记录计数构建表.Group
查询。使用高级编辑器进行进一步修改
Related:Related:GroupBy的精彩解释。对于复杂的聚合,是在GroupBy函数中执行此操作更有效(执行速度更快),还是在GroupBy“所有行”中执行此操作,然后添加自定义列。在VBA中,我可以使用高分辨率计时器来比较不同的处理方式。@RonRosenfeld-那么您的意思是只在
表中添加一列,其中包含每个组的所有行。group
函数-然后作为下一步单独进行其他聚合?我没有对它进行测量,但凭直觉,我认为在组
函数中进行所有操作应该更有效……在组
函数中进行操作肯定是更整洁的编程。但另一种方法是,对于没有内置到UI中的聚合,是我在尝试使用PQ时第一次遇到的方法。但我不知道在编译代码的过程中幕后发生了什么,也不知道有什么方法可以度量这类事情的执行时间。@RonRosenfeld关于性能度量:对于PowerBI,签出Excel您可以使用VBA方法并刷新连接-根据查询的运行时间,可能必须在一次测量期间多次执行此操作。只需确保连接的“后台刷新”被禁用(默认情况下处于打开状态),这正是我想要的。谢谢。GroupBy的精彩解释。对于复杂的聚合,是在GroupBy函数中执行此操作更有效(执行速度更快),还是在GroupBy“所有行”中执行此操作,然后添加自定义列。在VBA中,我可以使用高分辨率计时器来比较不同的处理方式。@RonRosenfeld-那么您的意思是只在表中添加一列,其中包含每个组的所有行。group
函数-然后作为下一步单独进行其他聚合?我没有测量它,但是直觉