透视时,有没有办法在值字段中连接多个字符串?

时间:2019-08-12 08:50:43

标签: excel excel-formula pivot powerquery

我试图通过制作报告来使表格更具可读性。 该表有3列;

  1. 工作人员
  2. 任务(每个员工可能有0项任务)
  3. 状态(已计划,已开始,已完成)

该报告的“工作人员”列为最左列,“ 3个状态”为列标题。这些值应该是任务值,并且如果有许多任务,则应将其与回车连接起来。

我尝试了透视,但是由于任务值是文本,所以它不起作用。我尝试了Power Query,它会在任务多于1个的每个单元格中显示错误。

有没有办法做到这一点? ...请不要使用VBA。 谢谢

1 个答案:

答案 0 :(得分:0)

我想您知道如何操作Power Query Editor,因此我将跳过如何向编辑器添加数据的部分。

在我的解决方案中,我使用了以下存储在 Table3 中的示例数据。

Sample Data Table3

一旦添加了数据,编辑器将自动将所有数据识别为文本。

Query Table3

我的方法是添加一个自定义列,以结合 Staff Status ,如下所示:

Add Custom Column

然后,我使用一些高级编码将数据按自定义列( Staff + Status )分组。您可以先进行分组依据,然后转到高级编辑器来更改公式,如下所示:

= Table.Group(#"Added Custom", {"Staff+Status"}, {{"Task", each Text.Combine([Task],"#(lf)"), type text}})

哪位会给您以下外观:

Grouped

然后,您可以分别将自定义列拆分回Staff和Status: Split Column

然后,您可以旋转状态列,将任务设置为Values Column,并在高级选项中将不要聚合作为Aggregate Value Function

Pivot Column

然后,您在这里差不多完成了,您可以将查询加载到工作表上,该工作表可能如下所示,其中回车似乎不起作用。

No Carriage Return

为了“ 激活”回车符(实际上是换行),您需要选择一个要查看回车符的单元格,在编辑栏,您将注意到回车已被激活。

使用 Format Painter 复制该单元格的格式并粘贴到表的其余部分,以获取以下信息:

Final

如果您不清楚上述步骤,请阅读此文章:How to display Power Query results with line feed or carriage return

全部完成。干杯:)

顺便说一下,幕后的代码仅供参考:

let
    Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Staff", type text}, {"Task", type text}, {"Status", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Staff+Status", each [Staff]&"+"&[Status]),
    #"Grouped Rows" = Table.Group(#"Added Custom", {"Staff+Status"}, {{"Task", each Text.Combine([Task],"#(lf)"), type text}}),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Grouped Rows", "Staff+Status", Splitter.SplitTextByDelimiter("+", QuoteStyle.Csv), {"Staff+Status.1", "Staff+Status.2"}),
    #"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Staff+Status.1", type text}, {"Staff+Status.2", type text}}),
    #"Pivoted Column" = Table.Pivot(#"Changed Type1", List.Distinct(#"Changed Type1"[#"Staff+Status.2"]), "Staff+Status.2", "Task"),
    #"Renamed Columns" = Table.RenameColumns(#"Pivoted Column",{{"Staff+Status.1", "Staff"}})
in
    #"Renamed Columns"