【问题标题】:Merging multiple data sources for a line graph in Excel and working with uneven data sizes在 Excel 中为折线图合并多个数据源并处理不均匀的数据大小
【发布时间】:2021-04-29 17:21:33
【问题描述】:

我有 15 个包含日期和一些值的数据源。但日期可能因一张纸而异。

表 1

Date Infected
2020-03-28 10
2020-03-29 20
...

表 2

Date Infected
2020-04-15 5
2020-04-16 7
...

我的目标是生成一个包含所有工作表的组合折线图,但有些表格的数据比其他日期系列的数据多。

我只能想到一个选项来使它们全部相同大小并覆盖所有日期值:Power Query 中的Merge queries(本质上是许多左连接以将所有工作表放在一起并组合所有日期)。

我还缺少其他选项来组合这些表格吗?图表级别的东西也许可以让他们都参考自己的日期系列?

【问题讨论】:

    标签: excel powerquery


    【解决方案1】:

    可以使用数据透视函数合并具有这种结构并存储在不同工作表中的表格。这里有 2 个场景,假设每个表格都保存在一个单个 Excel 工作簿中的单独工作表:

    1.每个表格都保存为 Excel 表格。使用 Power Query 将这些表组合成一个表,然后将生成的表加载到一个新的工作表中。

    2。这些表格不保存为 Excel 表格,手动执行此操作或弄清楚如何使用 VBA 脚本执行此过程似乎需要做很多工作。在这种情况下,通过创建一个新的 Excel 工作簿,然后使用 Power Query 连接到包含这些表的文件,可以更轻松地组合这些表。

    以下是每个场景的示例。该数据集由 3 个表组成,每个表包含 10 行,其中表之间的日期有些重叠。


    场景 1 - 存储在 Excel 表格中的数据

    这是包含名为Source1 的 Excel 表的第一个工作表中的示例数据:


    将所有表保存为 Excel 表并按照相同的约定命名,是时候打开 Power Query 编辑器并完成以下步骤了:

    • 创建一个空白查询并在编辑栏中键入= Excel.CurrentWorkbook() 以列出工作簿中包含的所有命名对象。


    • 过滤 Name 列以仅保留名称以 Source 开头的行,以避免在完成和刷新后将包含所有数据的表包含到此查询中。
    • 点击Date列的展开按钮,取消勾选Use original column name as prefix,点击OK。
    • 将日期列数据类型更改为日期
    • 以 Infected 列作为 Values 列并在高级选项下选择 Don't Aggregate 旋转 Name 列。


    现在数据已适当合并,可以加载到新工作表中以创建折线图:


    这是 M 代码:

    let
        Source = Excel.CurrentWorkbook(),
        #"Filtered Rows" = Table.SelectRows(Source, each Text.StartsWith([Name], "Source")),
        #"Expanded Content" = Table.ExpandTableColumn(#"Filtered Rows", "Content", {"Date", "Infected"}, {"Date", "Infected"}),
        #"Changed Type" = Table.TransformColumnTypes(#"Expanded Content",{{"Date", type date}}),
        #"Pivoted Column" = Table.Pivot(#"Changed Type", List.Distinct(#"Changed Type"[Name]), "Name", "Infected")
    in
        #"Pivoted Column"
    


    场景 2 - 数据未存储在 Excel 表格中

    在这种情况下,数据存储在外部 Excel 工作簿datasources.xlsx 中。这是第一个工作表中示例数据的样子:


    在单独的 Excel 工作簿中,打开 Power Query 编辑器并完成以下步骤:

    • 创建一个空白查询并使用适当的文件路径在公式栏中键入以下行:= Excel.Workbook(File.Contents("C:\FilePath\datasources.xlsx"))

    • 删除除名称和数据之外的所有列。
    • 点击Data列的展开按钮,取消勾选Use original column name as prefix,点击OK。
    • 将第一行提升为列标题。
    • 编辑日期和感染列的数据类型。
    • 选择日期列并删除包含错误的行。
    • 旋转 Sheet1 列,将 Infected 列作为值列,并在 Advanced Options 下选择 Don't Aggregate

    现在数据已适当合并,可以加载到新工作表中以创建折线图,产生与场景 1 相同的结果,但列标题和图例标签除外:


    这是 M 代码:

    let
        Source = Excel.Workbook(File.Contents("C:\FilePath\datasources.xlsx")),
        #"Removed Columns" = Table.RemoveColumns(Source,{"Item", "Kind", "Hidden"}),
        #"Expanded Data" = Table.ExpandTableColumn(#"Removed Columns", "Data", {"Column1", "Column2"}, {"Column1", "Column2"}),
        #"Promoted Headers" = Table.PromoteHeaders(#"Expanded Data", [PromoteAllScalars=true]),
        #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"Sheet1", type text}, {"Date", type date}, {"Infected", Int64.Type}}),
        #"Removed Errors" = Table.RemoveRowsWithErrors(#"Changed Type", {"Date"}),
        #"Pivoted Column" = Table.Pivot(#"Removed Errors", List.Distinct(#"Removed Errors"[Sheet1]), "Sheet1", "Infected")
    in
        #"Pivoted Column"
    

    【讨论】:

      猜你喜欢
      • 2020-08-14
      • 2013-06-11
      • 1970-01-01
      • 2018-06-11
      • 2021-10-07
      • 2016-07-12
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多