合并 CSV 文件

在 Power Query 中,可以合并给定数据源中的多个文件。 本文介绍在要合并的文件是 CSV 文件时体验的工作原理。 详细信息:合并文件概述

提示

可以通过此下载链接下载本文中使用的示例文件,来按此示例执行操作。 可以将这些文件放置在所选数据源中,例如本地文件夹、SharePoint 文件夹、Azure Blob 存储、Azure Data Lake Storage,或其他提供文件系统视图的数据源。

为简单起见,本文中的示例使用文件夹连接器。 详细信息:文件夹

关于使用的示例文件

要合并文件,文件必须具有相同的结构和相同的扩展名。 此示例中使用的所有文件都具有相同的结构和扩展名 (.csv)。

有 12 个 CSV 文件,2019 年日历年的每个月各一个。 下图显示了 1 月文件的前 15 行。

2019 年 1 月的示例 CSV 文件,其中显示了标题部分和其余数据,全部用逗号分隔。

行数会因文件而异,但前四行中所有文件都有标题部分。 它们在第五行中有列标题,表的数据从第六行开始,然后继续浏览所有后续行。

目标是将所有 12 个文件合并到一个表中。 此合并表包含表顶部的标题行,并在标题行之后的单独列中包括整个年份的源名称、日期、国家/地区、单位和收入数据。

最终合并表的示例。

表预览

连接到托管要合并的文件的文件夹时(在本示例中,该文件夹的名称为 CSV 文件),将显示表预览对话框,该对话框在左上角显示文件夹路径。 数据预览显示文件系统视图。

文件系统视图的表格预览。

对于此示例,选择合并

注意

在不同情况下,可以选择转换数据,以进一步筛选和转换数据,然后再合并文件。 仅当确定文件夹仅包含要合并的文件时,才建议选择合并

“合并文件”对话框

在表预览中选择合并后,将显示合并文件对话框。

“合并文件”对话框。

注意

Power Query 会根据列表中的第一个文件自动检测要使用的连接器。 要了解有关 CSV 连接器的详细信息,请转到文本/CSV

对于此示例,保留所有默认设置(示例文件设置为 第一个文件,以及文件原始格式分隔符数据类型检测的默认值)。

现在,选择右下角的转换数据以转到输出查询。

输出查询

合并文件对话框中选择转换数据后,将返回到 Power Query 编辑器,位于最初从连接到本地文件夹创建的查询。 输出查询现在包含最左侧列中的源文件名称,以及剩余列中每个源文件中的数据。

合并文件的输出查询,无需其他转换。

但是,数据的形状不正确。 在合并前,需要先从每个文件中删除前四行。 要在合并之前在每个文件中进行此更改,请在屏幕左侧的查询窗格中选择转换示例文件查询。

修改“转换示例文件”查询

在此转换示例文件 查询中,日期列中的值指示为 4 月的数据,该月份采用年-月-日 (YYYY-MM-DD) 格式。 April 2019.csv 是表预览中显示的第一个文件。

显示 2019 年 4 月起的数据列的表,包括前四行中的标题部分以及第五行中的标题。

现在需要应用一组新的转换来清理数据。 每个转换都将自动转换为帮助程序查询组中的函数,在合并每个文件中的数据之前,会将该函数应用于文件夹中的每一个文件。

需要添加到转换示例文件查询的转换包括:

  1. 删除前几行:要执行此操作,请选择表左上角的表图标菜单,然后选择删除前几行

    移除表菜单上的前几行。

    删除前几行对话框中,输入 4,然后选择确定

    “移除前几行”对话框。

    选择确定后,表将不再包含前四行。

    包含已移除行的示例查询。

  2. 将第一行用作标题:再次选择表图标,然后选择将第一行用作标题

    将第一行用作标题图标。

    该操作的结果会将表的第一行提升为新的列标题。

    示例表已提升标题。

完成此操作后,Power Query 默认将尝试自动检测列的数据类型,并添加新的已更改列类型步骤。

修改输出查询

返回到 CSV 文件查询时,会注意到最后一步会收到一个错误,其中显示“未找到表的列‘列 1’”。此错误背后的原因是,查询的先前状态针对名为列 1 的列执行操作。 但由于对转换示例文件查询所做的更改,此列不再存在。 详细信息:处理 Power Query 中的错误

带有步骤级错误的输出查询。

可以通过选择步骤名称左侧的 X 删除图标,从应用的步骤窗格中删除查询的最后一步。 删除此步骤后,查询将显示正确的结果。

合并文件而不执行错误步骤。

但是,请注意,派生自文件(日期、国家/地区、单位、收入)的任何列都没有分配给这些文件的特定数据类型。 使用下表将正确的数据类型分配给每个列。

列名称 数据类型
日期 日期
国家/地区 文本
单元 整数
收入 货币

定义每个列的数据类型后,即可加载表。

最终合并表的示例。

注意

要了解如何定义或更改列数据类型,请转到数据类型

验证

要验证是否已合并所有文件,可以在 Source.Name 列标题上选择筛选器图标,这将显示已合并的文件的所有名称。 如果收到警告“列表可能不完整”,请选择菜单底部的加载更多,以显示列中的更多可用值。

已合并的文件的不完整列表。

选择加载更多后,将显示所有可用的文件名。

已合并的文件的完整列表。