合并 CSV 文件
在 Power Query 中,可以合并给定数据源中的多个文件。 本文介绍在要组合的文件是 CSV 文件时体验的工作原理。 详细信息:合并文件概述
提示
可以通过从 此下载链接下载本文中使用的示例文件来遵循此示例。 可以将这些文件放置在所选数据源中,例如本地文件夹、SharePoint 文件夹、Azure Blob 存储、Azure Data Lake Storage 或其他提供文件系统视图的数据源。
为简单起见,本文中的示例使用文件夹连接器。 详细信息:文件夹
关于使用的示例文件
若要合并文件,它们必须具有相同的结构和相同的扩展名。 此示例中使用的所有文件具有相同的结构和扩展名(.csv)。
有 12 个 CSV 文件,一个用于 2019 年日历年的每个月。 下图显示了 1 月文件的前 15 行。
行数因文件而异,但前四行中所有文件都有标题部分。 表格的列标题在第五行,表的数据从第六行开始,并延续到后续所有行。
目标是将所有 12 个文件合并到一个表中。 此组合表包含表顶部的标题行,并在标题行之后的单独列中包括整个年份的源名称、日期、国家/地区、单位和收入数据。
表预览
连接到承载要合并的文件的文件夹时(在本示例中,该文件夹的名称 CSV 文件),将显示表预览对话框,其中显示左上角的文件夹路径。 数据预览显示文件系统视图。
对于此示例,请选择 合并。 对于 Excel 或 Power Query Desktop,请选择“合并和转换数据”。
注意
在不同情况下,可以选择 转换数据 进一步筛选和转换数据,然后再合并文件。 仅当确定文件夹仅包含要合并的文件时,才建议选择 合并。
“合并文件”对话框
在表预览中选择 合并 后,将显示 合并文件 对话框。
注意
Power Query 根据列表中找到的第一个文件自动检测要使用的连接器。 若要了解有关 CSV 连接器的详细信息,请转到 文本/CSV。
在本例中,请保留所有默认设置(“示例文件”设置为“第一个文件”,“文件来源”、“分隔符”和“数据类型检测”为默认值)。
现在选择右下角的“转换数据”,以转到输出查询。
输出查询
在“合并文件”对话框中选择“转换数据”后,将返回到 Power Query 编辑器中的查询,该查询最初是通过与本地文件夹的连接创建的。 输出查询现在包含最左侧列中的源文件名称,以及剩余列中每个源文件中的数据。
但是,数据的形状不正确。 在合并前,需要先从每个文件中删除前四行。 若要在合并文件之前在每个文件中进行此更改,请在屏幕左侧的“查询”窗格中选择 转换示例文件 查询。
修改转换示例文件查询
在此 转换示例文件 查询中,日期 列中的值表明数据是关于 4 月的,其格式为年-月-日 (YYYY-MM-DD)。 4 月 2019.csv 是表预览中显示的第一个文件。
现在需要应用一组新的转换来清理数据。 每个转换都会自动转换为 帮助程序查询 组内的函数,该组应用于文件夹中的每一个文件,然后再合并每个文件中的数据。
需要添加到“转换示例文件”查询的转换包括:
删除顶部行:若要执行此操作,请选择表格左上角的表图标菜单,然后选择 删除顶部行。
在 “删除顶部行”对话框中,输入 4,然后选择 “确定”。
选择“确定”后,你的表格中的前四行已被删除。
使用第一行作为标题:再次选择表图标,然后选择 使用第一行作为标题。
该操作的结果将表的第一行提升为新的列标题。
完成此操作后,Power Query 默认会尝试自动检测列的数据类型,并添加一个新的步骤 更改列类型。
修改输出查询
返回到 Power Query Desktop 中的 CSV 文件 查询时,最后一步会提供一个错误,指出“找不到表的列'Column1'”。返回到 Power Query Online 中的 CSV 文件 查询时,之前对删除前四行所做的更改,并使用第一行作为标题不应用于表。 在 Power Query Online 中,从 主页 选项卡中选择 刷新。刷新屏幕后,将显示相同的错误消息。
此错误背后的原因是,查询的上一个状态针对名为 Column1的列执行操作。 但由于 转换示例文件 查询所做的更改,此列不再存在。 详细信息:处理 Power Query 中的错误
可以通过选择步骤名称左侧的 X 删除图标,从 应用的步骤 窗格中删除查询的最后一步。 删除此步骤后,查询会显示正确的结果。
但是,请注意,从文件中派生的列(日期、国家/地区、单位、收入)都没有被分配特定的数据类型。 使用下表将正确的数据类型分配给每个列。
列名 | 数据类型 |
---|---|
日期 | 日期 |
国家 | 文本 |
单位 | 整数 |
收入 | 货币 |
定义每个列的数据类型后,即可加载表。
注意
若要了解如何定义或更改列数据类型,请转到 数据类型。
验证
若要验证是否合并所有文件,可以在 Source.Name 列标题上选择筛选器图标,其中显示合并的文件的所有名称。 如果收到警告“列表可能不完整”,请选择 在菜单底部加载更多 以显示列中更多可用值。
选择 加载更多后,将显示所有可用的文件名。