合并 CSV 文件

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

提示

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

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

关于使用的示例文件

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

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

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

行数因文件而异,但前四行中所有文件都有标题部分。 表格的列标题在第五行,表的数据从第六行开始,并延续到后续所有行。

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

示例最终合并表的屏幕截图。

表预览

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

文件系统视图表预览的屏幕截图。

对于此示例,请选择 合并。 对于 Excel 或 Power Query Desktop,请选择“合并和转换数据”

注意

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

“合并文件”对话框

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

“合并文件”对话框的屏幕截图,其中显示了文件数据。

注意

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

在本例中,请保留所有默认设置(“示例文件”设置为“第一个文件”,“文件来源”、“分隔符”和“数据类型检测”为默认值)

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

输出查询

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

合并文件的输出查询的屏幕截图,无需进行其他转换。

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

修改转换示例文件查询

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

转换示例文件的屏幕截图,其中包含 2019 年 4 月的 dat 数据列和标题部分。

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

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

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

    突出显示“删除顶部行”的表图标菜单的屏幕截图。

    “删除顶部行”对话框中,输入 4,然后选择 “确定”

    要删除的四行的“删除前几行”对话框的屏幕截图。

    选择“确定”后,你的表格中的前四行已被删除

    示例查询的屏幕截图,其中删除了前四行。

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

    表图标菜单的屏幕截图,其中突出显示了“使用第一行作为标题”选项。

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

    提升了标题的示例表的屏幕截图。

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

修改输出查询

返回到 Power Query Desktop 中的 CSV 文件 查询时,最后一步会提供一个错误,指出“找不到表的列'Column1'”。返回到 Power Query Online 中的 CSV 文件 查询时,之前对删除前四行所做的更改,并使用第一行作为标题不应用于表。 在 Power Query Online 中,从 主页 选项卡中选择 刷新。刷新屏幕后,将显示相同的错误消息。

此错误背后的原因是,查询的上一个状态针对名为 Column1的列执行操作。 但由于 转换示例文件 查询所做的更改,此列不再存在。 详细信息:处理 Power Query 中的错误

输出查询的屏幕截图,其中显示了步骤级别错误。

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

没有错误步骤的合并文件截图。

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

列名 数据类型
日期 日期
国家 文本
单位 整数
收入 货币

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

最终示例组合表的屏幕截图。

注意

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

验证

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

筛选对话框的屏幕截图,其中显示了一个合并文件不完整的列表。

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

筛选对话框的屏幕截图,其中包含合并的文件的完整列表。