一、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