从多本书中构建具有不同标题的表格

问题的形成

我们在一个文件夹中有多个文件(在我们的示例中 – 4 个,在一般情况下 – 任意数量) 业务报告:

从多本书中构建具有不同标题的表格

在内部,这些文件如下所示:

从多本书中构建具有不同标题的表格

其中:

  • 我们需要的数据表总是叫 图片, 但可以在工作簿中的任何位置。
  • 超越单子 图片 每本书可能有其他页。
  • 包含数据的表具有不同的行数,并且可能以工作表上的不同行开头。
  • 不同表中相同列的名称可能不同(例如, 数量 = 数量 = 数量).
  • 表格中的列可以按不同的顺序排列。

任务:从工作表中的所有文件中收集销售数据 图片 到一个公用表中,以便随后在其上构建摘要或任何其他分析。

步骤 1. 准备列名目录

首先要做的是准备一本参考书,其中包含列名的所有可能选项及其正确解释:

从多本书中构建具有不同标题的表格

我们使用选项卡上的“格式为表格”按钮将此列表转换为动态“智能”表格 主页 (首页——表格格式) 或键盘快捷键 按Ctrl+T 并使用命令将其加载到 Power Query 数据 – 来自表/范围 (数据——来自表/范围). 在最新版本的 Excel 中,它已重命名为 有叶子 (来自工作表).

在 Power Query 查询编辑器窗口中,我们通常删除步骤 更改类型 并通过单击按钮添加一个新步骤而不是它 fx在编辑栏中(如果它不可见,则可以在选项卡上启用它 评论) 并在内置 Power Query 语言 M 中输入公式:

=Table.ToRows(来源)

此命令将转换上一步中加载的 来源 将表引用到由嵌套列表(List)组成的列表中,每个列表又是一对值 它是-成为 从一行:

从多本书中构建具有不同标题的表格

稍后,当从所有加载的表中批量重命名标题时,我们将需要这种类型的数据。

完成转换后,选择命令 主页 — 关闭并加载 — 关闭并加载... 和进口类型 只需创建一个连接 (Home — Close&Load — Close&Load to... — 仅创建连接) 并返回 Excel。

步骤 2. 我们从所有文件中加载所有内容

现在让我们从文件夹中加载我们所有文件的内容——现在,照原样。 选择团队 数据 - 获取数据 - 从文件 - 从文件夹 (数据 - 获取数据 - 从文件 - 从文件夹) 然后是我们的源书所在的文件夹。

在预览窗口中,单击 转化率 (转换) or 更改 (编辑):

从多本书中构建具有不同标题的表格

然后展开所有下载文件的内容 (二进制) 列标题中带有双箭头的按钮 内容:

从多本书中构建具有不同标题的表格

Power Query 上的第一个文件的示例(东方号.xlsx) 将询问我们要从每个工作簿中获取的工作表的名称 - 选择 图片 然后按确定:

从多本书中构建具有不同标题的表格

在那之后(事实上),会发生几个对用户来说并不明显的事件,其后果在左侧面板中清晰可见:

从多本书中构建具有不同标题的表格

  1. Power Query 将从文件夹中获取第一个文件(我们将拥有它 东方号.xlsx — 看到 文件示例) 作为示例并通过创建查询来导入其内容 转换示例文件. 此查询将有一些简单的步骤,例如 来源 (文件访问) 旅游导航 (纸张选择)并可能提高标题。 此请求只能从一个特定文件加载数据 东方号.xlsx.
  2. 基于此请求,将创建与其关联的函数 转换档案 (由特征图标表示 fx),其中源文件将不再是一个常量,而是一个变量值——一个参数。 因此,此函数可以从我们作为参数滑入其中的任何书籍中提取数据。
  3. 该函数将依次应用于列中的每个文件(二进制) 内容 – step 对此负责 调用自定义函数 在我们的查询中,将一列添加到文件列表中 转换档案 从每个工作簿导入结果:

    从多本书中构建具有不同标题的表格

  4. 多余的列被删除。
  5. 嵌套表的内容被展开(步骤 扩展表列)——我们看到了所有书籍数据收集的最终结果:

    从多本书中构建具有不同标题的表格

步骤 3. 打磨

前面的截图清楚地表明,“按原样”直接组装结果质量很差:

  • 列颠倒了。
  • 许多额外的行(空而不是唯一的)。
  • 表格标题不被视为标题,而是与数据混合在一起。

您可以非常轻松地解决所有这些问题 - 只需调整转换示例文件查询。 我们对其进行的所有调整都将自动落入相关的转换文件功能中,这意味着它们将在以后从每个文件中导入数据时使用。

通过打开请求 转换示例文件,添加步骤以过滤不必要的行(例如,按列 Column2) 并使用按钮提升标题 使用第一行作为标题 (使用第一行作为标题). 桌子看起来会好很多。

为了使来自不同文件的列在以后自动适合彼此,它们必须命名相同。 您可以使用一行 M 代码根据先前创建的目录执行这样的批量重命名。 让我们再次按下按钮 fx 在公式栏中并添加要更改的函数:

= Table.RenameColumns(#”提升的标题”, Headers, MissingField.Ignore)

从多本书中构建具有不同标题的表格

此函数从上一步中获取表 高架标头 并根据嵌套查找列表重命名其中的所有列 头条新闻. 第三个论点 缺少字段。忽略 需要,以便在目录中但不在表中的那些标题上,不会发生错误。

实际上,仅此而已。

返回请求 业务报告 我们将看到完全不同的画面——比上一张要好得多:

从多本书中构建具有不同标题的表格

  • 什么是 Power Query、Power Pivot、Power BI 以及 Excel 用户需要它们的原因
  • 从给定文件夹中的所有文件中收集数据
  • 将书中所有工作表中的数据收集到一个表中

 

发表评论