关于表间模糊匹配 Table.FuzzyNestedJoin
最新版的PowerBI预览功能更新了表的模糊匹配功能。
对应的函数为:Table.FuzzyNestedJoin
下面就该函数作个简单说明,首先本人对函数的语法理解:
Table.FuzzyNestedJoin(表1,{表1连接字段},表2,{表2连接字段},新的聚合列名称,匹配方式,[限定匹配及筛选结果])
对比以前的组合函数不同的在最后那个匹配筛选限定记录条件。
复习下以前的几种匹配方式:
你也可以用枚举数字代替、注意写了枚举数字后应用的步骤框内模糊匹配步骤后面的小齿轮会消失、意味着你无法可视化调用合并专项功能界面修改填写参数,同样你更改了匹配关键字的列表形式为文本值形式小齿轮也会消失!
然后重点说下最后那个参数:
从帮助上看,可以设置如上7个参数条件,其中比较好理解的是IgnoreCase和IgnoreSpace以及NumberOfMatches参数设置(忽略大小写、空格、指定筛选记录数),另外Culture用来指定匹配环境,Threshold用来设置阈值、TransformationTable用来转换表(他可以根据转换表中From和to字段下的值来进一步匹配筛选字段,注意From与To字段值貌似要求文本),ConcurrentRequests用来启用多线程并发操作提高查询速度(目前限定在8个线程内)!
另外对于最后参数中限定条件如果缺省部分参数设置,那么缺省的字段设置都有默认值,比如Threshold=0.8,默认是忽略大小写及空格的、默认启用单线程查询、查询匹配记录数也是上限值保证最多匹配记录获取。
具体案例展示:
对于阈值的理解:注意如果以左连接为例,它要按照左边的表(也就是第一参数)中关键值的相似度去匹配另一个表,如milk和mile的相似度为75%,我们可以设置Threshold=0.75,对于这个阈值设置貌似还存在浮点问题,数值在小数点后几位只有微弱区别时匹配结果也不一定相同。。。
但是请注意,这个阈值匹配限定条件貌似未开发完整,即使我加了本地环境参数对于部分值还是未能像预期的匹配到:
难道土猪肉是猪肉,野猪肉就不算猪肉吗?微软你能让我省点心吗......
网友飞天篮球在测试时,发现该案例在更改Culture参数设置就可以返回正确匹配值:
歧视简体中文(zh-CN)?
关于阈值还有问题,需要等微软公布重新来定义该参数。
用"b1"匹配不到"b",用"b一"却可以......
用"c41"可以匹配"c1"......
另外同样的PowerBI版本及相同的数据源表和公式飞天篮球的win10系统可以中文大小写与文本数字匹配,我的win7无法匹配!!!
最后那个参数[]不写按照默认条件值匹配。
下面介绍转换表参数的使用:
Table.FuzzyNestedJoin(表2,{"类型"},表1,{"品名"},"你随意",JoinKind.LeftOuter,[TransformationTable=表3])
注意我此时的表连接顺序及匹配字段设置!
我觉得此时的From和To叫做映射关系可能更好,而不是字面很多人误解的区段连续性。。。
至于有人说这个模糊匹配目前效率不高的问题,你可以尝试设置第七个参数为[ConcurrentRequests=8]试试水,毕竟还在完善中,更多好玩的应用欢迎大家一起来尝试。
道高一尺 魔高一丈
https://pbihub.cn/users/44
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)