使用 Power Query 进行模糊匹配

在数据分析中,我们经常会需要数据匹配,比如将事实表与维度表进行匹配来获取维度表中的信息。对此,我们可以通过Power Query中的合并查询,或者在Power Pivot中建立关系而轻易实现,但是前提是匹配列的数据是能对应得上的,如果是模糊匹配,那用以上的方法便会匹配不上。

那么在Power Query中怎么进行模糊匹配呢?

比如,我们需要给下列左图中的产品匹配上价格:
file
在Power Query中并没有菜单操作可以实现模糊匹配,需要自定义函数来解决此问题,那我们来看下比较简单的能实现此功能的自定义函数是怎样的吧:

file

首先,我们先把两张表导进同一个查询,分别命名为“产品”和“颜色价格”:

file

然后自定义模糊匹配函数:

Fx = (x) => Table.SelectRows(颜色价格, each Text.Contains(x,[颜色])){0}[价格]

其中Fx为函数的名称;
(x)为参数名称,即函数作用于的对象;
Table.SelectRows(颜色价格, each Text.Contains(x,[颜色]))
表示筛选颜色价格表中,[颜色]字段被x包含的行,即此函数得到的是一张经过筛选的表,后面加上{0}[价格]表示取这张表第一行[价格]列的数据。

函数定义好后就可以调用这个函数了:

价格 = Table.AddColumn(产品,"价格", each try Fx([产品]) otherwise null)

此公式代表在产品表中新建一列,命名为“价格”,将刚刚自定义好的函数作用于产品表中的[产品]列,得到的值就是[价格]列对应的值。

比如“ASD23809宝石红S码”这个数据↓↓↓:

Table.SelectRows(颜色价格, each Text.Contains(“ASD23809宝石红S码”,[颜色]))

该函数表示“ASD23809宝石红S码”文本中是否包含[颜色]字段的值,包含的话,颜色价格表中,该[颜色]字段值所在的行就会被筛选出来。后面加上{0}[价格]表示在被筛选出来的很多行中取第一行[价格]列的值,即“18.6”。

故得结果如下:
file

今天的分享就到这儿,关于使用Power Query进行模糊匹配,坊友们有什么疑问或是更好的解决方法,欢迎踊跃留言~


如果您想深入学习微软Power BI,欢迎登录网易云课堂试听学习我们的“从Excel到Power BI数据分析可视化”系列课程。或者关注我们的公众号(PowerPivot工坊)后猛戳”在线学习”。
file


长按下方二维码关注“Power Pivot工坊”获取更多微软Power BI、PowerPivot相关文章、资讯,欢迎小伙伴儿们转发分享~

Power Pivot工坊