PowerQuery合并查询详解

一、Power Query合并查询为纵向合并

Power Query能将两个表按照某个公共列,如日期,国家等字段进行纵向合并,生成一个包含两个表中所有字段的新表。操作步骤如下:

// 导入两个表到Power Query编辑器
let
    Source1 = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    Source2 = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
    
    // 选择“Start”列,即公共列,作为关联字段
    MergeColumns = Table.NestedJoin(Source1,{"Start"},Source2,{"Start"},"NewColumn",JoinKind.LeftOuter),
    
    // 展开新列,生成新表
    ExpandMergedColumns = Table.ExpandTableColumn(MergeColumns, "NewColumn", {"Value"}, {"Table2"})
in
    ExpandMergedColumns

二、PowerQuery合并查询错误

在进行Power Query合并查询时,可能会出现错误,例如输入的列名不存在,或者关联的列数据类型不匹配。对于这些错误,Power Query会生成错误信息和堆栈跟踪信息,方便用户进行调试。

如果出现“值LimitedNumeric是没有列Numeric”的错误,说明在合并查询中,某个表中的列名发生了变化。解决方法是检查所有表的列名,并保证它们一致。

// 模拟发生列名变化的情况
let
    Source1 = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    Source2 = Excel.CurrentWorkbook(){[Name="Table2_ColumnRenamed"]}[Content],
    MergedColumns = Table.Join(Source1,"ID",Source2,"ID",JoinKind.LeftOuter),
in
    MergedColumns

三、PowerQuery合并查询特别慢

当Power Query处理大量数据时,合并查询操作可能会变得特别慢。这时,可以尝试以下方法提高合并查询的效率:

  • 选择Only Create Connection,只创建连接而不加载数据。
  • 使用Reduce Date/Time操作,将日期和时间数据降低分辨率,减少数据量。
  • 使用Group操作,对要合并的数据进行分组,提高合并效率。
// 使用Group操作提高Power Query合并效率
let
    Source1 = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    Source2 = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
    Grouped1 = Table.Group(Source1, {"ID"}, {"Count", each Table.RowCount(_)}),
    Grouped2 = Table.Group(Source2, {"ID"}, {"Count", each Table.RowCount(_)}),
    MergedColumns = Table.Join(Grouped1,"ID",Grouped2,"ID",JoinKind.LeftOuter),
    ExpandedColumns = Table.ExpandTableColumn(MergedColumns, "Count", {"Count"}, {"Count"})
in
    ExpandedColumns

四、PowerQuery合并查询数据出现两次

在Power Query合并查询中,可能会出现将所有数据重复的情况。原因在于在合并前未去重,导致数据重复。解决方法是使用Remove Duplicates操作,去除重复数据。

// 去除重复数据
let
    Source1 = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    Source2 = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
    MergedColumns = Table.Join(Source1,"ID",Source2,"ID",JoinKind.LeftOuter),
    RemovedDuplicates = Table.Distinct(MergedColumns)
in
    RemovedDuplicates

五、PowerQuery合并查询后数据重复

在Power Query合并查询后,可能出现某个数据在输出表中出现多次的情况。这是因为合并时,某个公共列中出现重复数据。解决方法是在合并前去重,再进行合并操作。

// 使用Distinct操作去除合并前即出现的重复数据
let
    Source1 = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    Source2 = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
    DistinctSource1 = Table.Distinct(Source1),
    DistinctSource2 = Table.Distinct(Source2),
    MergedColumns = Table.Join(DistinctSource1,"ID",DistinctSource2,"ID",JoinKind.LeftOuter)
in
    MergedColumns

六、Power Query合并查询为纵向

Power Query也可以将两个表按照行进行纵向合并,使得输出表的列数增加。要实现这一操作,需要用到Append Queries功能。

// 纵向合并
let
    Source1 = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    Source2 = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
    AppendedQueries = Table.Combine({Source1, Source2})
in
    AppendedQueries

七、PowerQuery合并查询模糊匹配

如果要在合并时进行模糊匹配,Power Query也能够胜任。例如,在合并两个表中的地址数据时,可以对地址进行模糊匹配,以避免因格式不同而导致不能正确合并的情况。要实现这一操作,需要用到Text.Combine和Text.FuzzyMatching功能。

// 模糊匹配
let
    Source1 = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    Source2 = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
    CombinedAddresses1 = Table.TransformColumns(Source1,{{"Address", Text.Combine, ", "}}),
    CombinedAddresses2 = Table.TransformColumns(Source2,{{"Address", Text.Combine, ", "}}),
    MergedColumns = Table.NestedJoin(CombinedAddresses1,{"City","State"},CombinedAddresses2,{"City","State"},
        "NewColumn",JoinKind.LeftOuter, null, [IgnoreCase=true, ComparisonKind=Text.Fuzzy])
in
    MergedColumns

总结

通过本文我们了解了Power Query合并查询的基本概念和操作方法,完成了纵向和横向合并查询,并解决了常见的问题。同时,我们还学习了如何提高Power Query合并查询的效率,并实现了模糊匹配。对于需要处理大量数据的人来说,Power Query合并查询是一个强大而实用的工具。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/236201.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 11:58
下一篇 2024-12-12 11:59

相关推荐

  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25

发表回复

登录后才能评论