You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Power BI中实现同表内两列值相似度对比并生成布尔计算列

同表两列逐行模糊相似度对比解决方案

以下是不同工具场景下的可落地实现方案,所有方案中的相似度阈值均可根据实际业务需求调整:


1. Excel / WPS 表格实现

适合小数据量、无需编程的场景:

  • 首先自定义编辑距离计算函数:按Alt+F11打开VBA编辑器,插入模块,粘贴如下代码:
Function Levenshtein(str1 As String, str2 As String) As Integer
    Dim arr As Variant, i As Integer, j As Integer, str1_len As Integer, str2_len As Integer
    str1_len = Len(str1): str2_len = Len(str2)
    ReDim arr(str1_len, str2_len)
    For i = 0 To str1_len: arr(i, 0) = i: Next
    For j = 0 To str2_len: arr(0, j) = j: Next
    For i = 1 To str1_len
        For j = 1 To str2_len
            If Mid(str1, i, 1) = Mid(str2, j, 1) Then
                arr(i, j) = arr(i - 1, j - 1)
            Else
                arr(i, j) = WorksheetFunction.Min(arr(i - 1, j) + 1, arr(i, j - 1) + 1, arr(i - 1, j - 1) + 1)
            End If
        Next
    Next
    Levenshtein = arr(str1_len, str2_len)
End Function
  • 新增计算列,输入公式即可,示例中阈值设为60%相似度返回True:
    =1-LEVENSHTEIN(A2,B2)/MAX(LEN(A2),LEN(B2))>=0.6
    公式中A2、B2为你要对比的两列对应单元格,0.6为相似度阈值,可根据匹配效果调整。

2. Python Pandas 实现

适合大数据量、需要批量自动化处理的场景:

  • 先安装依赖库:pip install fuzzywuzzy python-Levenshtein
  • 运行如下示例代码:
import pandas as pd
from fuzzywuzzy import fuzz

# 读取表格,Excel格式可替换为pd.read_excel
df = pd.read_csv("你的表格路径.csv")

# 自定义相似度判断函数,默认阈值60,可自行调整
def is_similar(row, col1="A header", col2="Another header", threshold=60):
    # partial_ratio更适配短文本是长文本子串的场景,和你的需求匹配度更高
    return fuzz.partial_ratio(row[col1], row[col2]) >= threshold

# 生成计算列
df["Calculated Column"] = df.apply(is_similar, axis=1)

# 导出结果
df.to_csv("对比结果.csv", index=False)

3. Power Query 实现

适合Power BI/Excel批量处理、无代码编程的场景:

  • 先将数据加载到Power Query编辑器,新增自定义列,输入如下M语言公式即可:
let
    str1 = [A header],
    str2 = [Another header],
    // 编辑距离计算函数
    levenshtein = (s as text, t as text) as number =>
    let
        s_list = Text.ToList(s),
        t_list = Text.ToList(t),
        s_len = List.Count(s_list),
        t_len = List.Count(t_list),
        init = List.Generate(() => 0, (i) => i <= t_len, (i) => i + 1),
        res = List.Generate(
            () => [i = 0, prev = init],
            each [i] < s_len,
            each [
                i = [i] + 1,
                curr = List.Generate(
                    () => [j = 0, curr_val = [i] + 1],
                    each [j] < t_len,
                    each [
                        j = [j] + 1,
                        cost = if s_list{i} = t_list{j} then 0 else 1,
                        curr_val = List.Min({[curr_val] + 1, prev{j + 1} + 1, prev{j} + cost})
                    ],
                    each [curr_val]
                ),
                prev = {[i]} & curr
            ],
            each [prev]
        ){s_len - 1}[prev]{t_len},
        similarity = 1 - levenshtein / List.Max({Text.Length(str1), Text.Length(str2)})
    in
        similarity >= 0.6

公式中0.6为相似度阈值,可根据实际需求调整,计算完成后加载回表格即可得到结果。


内容的提问来源于stack exchange,提问作者Anna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 21:36:04