在Google Sheets Query中集成LevenshteinDistanceDP自定义函数的问询
解决方案
首先明确:Google Sheets的QUERY函数不支持在其SQL语法中直接调用自定义函数,所以没法直接在原QUERY的WHERE子句里加入levenshteinDistanceDP的判断条件。但可以通过FILTER+LET组合实现需求,同时解决性能问题:
优化后的公式
=LET( 初步筛选结果, QUERY(Expenses!A:H, "SELECT A,B,C,D,H WHERE LOWER(H) contains LOWER('"&K3&"')", 1), FILTER(初步筛选结果, levenshteinDistanceDP(LOWER(INDEX(初步筛选结果,,5)), LOWER(K3)) < 3) )
原理说明
- 初步筛选:先用原QUERY逻辑把包含K3关键词的行筛选出来(同时保留H列用于后续计算),这一步用内置函数完成,速度极快,能把需要计算编辑距离的行数量从数千行大幅压缩。
- 二次筛选:对初步筛选后的结果,调用自定义函数计算编辑距离,只保留距离小于3的行。因为计算范围已经缩小,自定义函数的调用次数大幅减少,不会出现全量重计算的性能问题。
替代简化方案(直接用FILTER组合双条件)
如果初步筛选后的行数本身不多,也可以直接用FILTER同时判断两个条件:
=FILTER(Expenses!A:D, REGEXMATCH(LOWER(Expenses!H), LOWER(K3)), levenshteinDistanceDP(LOWER(Expenses!H), LOWER(K3)) < 3 )
不过这种方式会对所有行调用自定义函数,性能不如前一种方案,推荐优先使用LET+QUERY的组合。
内容的提问来源于stack exchange,提问作者noah
相关产品推荐
相关产品推荐

