功率查询可能的匹配

时间:2019-07-12 20:44:05

标签: excel powerquery

我在PowerQuery中有两个表,我需要能够找到两者之间的可能匹配项。我的意思有点复杂,所以我将更详细地解释它。

之所以如此重要,是因为系统中有1,000多个文件需要考虑。我有系统中所有有效文件的主列表。有些信息可能会丢失,因此能够建立一个具有可能匹配项的表格将加快纠正速度

一个表包含一列,该列由文件名和所述文件中的一些数据填充。另一个表具有从数据库中提取的信息(我无权访问,我只能读取数据)

具有多个匹配项的几率非常低,因此不必担心。

这是针对Excel 2010,它使用的是PowerQuery

Text.Contains()

List.Contains()

Before And After

最好是,如果可以使用某种子字符串函数来确定某个值是否可能匹配,然后返回可能匹配的值。 这并不一定是完美的,只是意味着要尽可能提供帮助。

p.s。很抱歉无法将我的图片嵌入我的帖子中,但是我对此没有足够的声誉。

2 个答案:

答案 0 :(得分:0)

您可以使用以下方法:

let
    Table1 = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    Table2 = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
    add = Table.AddColumn(Table1, "Table2", (z)=> Table.SelectRows(Table2, each Text.StartsWith(z[DATA],[DATA])){0}?),
    expand = Table.ExpandRecordColumn(add, "Table2", {"DATA", "VALUE"}, {"MATCH", "VALUE"})
in
    expand

enter image description here

根据您的示例,匹配是通过字符串开头检查的。如果表2中有两个或更多对应的行,则保留第一行。当然,您可以实现不同的逻辑。

答案 1 :(得分:0)

下面的代码假定您要对子字符串执行不区分大小写的检查,该子字符串可能(也可能不)出现在主字符串的任何位置。

let
    firstTable = Table.FromColumns({{"***.xlsx", "###.xlsx", "$$$.xlsx", "@@@.xlsx"}, {"ASDFS", "ASFSZW", "L;ASDF", "RAWRSS"}}, type table [FILE = text, DATA = text]),
    secondTable = Table.FromColumns({{"ASDF", "ASF", "L;A", "SDA"}, {1, 2, 3, 4}}, type table [DATA = text, VALUE = number]),
    buffered = Table.Buffer(secondTable),
    thirdTable = Table.AddColumn(firstTable, "$toExpand", (first) => Table.SelectRows(secondTable, each Text.Contains(first[DATA], [DATA], Comparer.OrdinalIgnoreCase)), type table),
    expanded = Table.ExpandTableColumn(thirdTable, "$toExpand", {"DATA", "VALUE"}, {"POSSIBLE MATCH", "VALUE"})
in
    expanded

将返回所有匹配项,这意味着最终可能会出现比开始时更多的行。多个匹配项(在您的示例中)在下面突出显示。

Output table