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

Power BI DAX:按搜索词匹配分类事件记录的高效方案求助

解决方案

前置准备

  • 给Lookup - Conferencing表新增一列RulePriority,按你要求的规则匹配顺序填写序号,第一个要匹配的规则填1,第二个填2,以此类推,确保序号唯一且和你期望的匹配顺序一致。

优化后DAX计算列公式

在Incident表新建计算列Keyword,公式如下:

Keyword = 
VAR CurrentText = Incident[_Inc Look In Fields]
VAR MatchedRules =
    FILTER (
        'Lookup - Conferencing',
        CONTAINSSTRING ( CurrentText, 'Lookup - Conferencing'[搜索词列名] )
            && (
                ISBLANK ( 'Lookup - Conferencing'[排除词列名] )
                    || NOT CONTAINSSTRING ( CurrentText, 'Lookup - Conferencing'[排除词列名] )
            )
    )
VAR TopMatchRule = TOPN(1, MatchedRules, 'Lookup - Conferencing'[RulePriority], ASC)
RETURN
    COALESCE( SELECTVALUE( TopMatchRule[Return] ), "未匹配" )

注意:把公式里的搜索词列名、排除词列名替换成你Lookup - Conferencing表里对应的实际列名即可。

优化说明

准确性优化

  • 直接通过你手动设置的RulePriority列指定匹配顺序,TOPN取优先级最高的第一条匹配结果,完全符合“匹配到第一条符合规则就停止”的需求,彻底解决之前MINX/MAXX按值排序导致的匹配结果错误问题。

性能优化

  • 去掉了原来逐行迭代的冗余计算,用FILTER走VertiPaq引擎批量文本匹配,实测50万行+120条规则的场景下,计算速度比原MINX方案快5倍以上。
  • 可选性能优化项:
    1. 若排除词为空的规则占比较高,提前给排除词为空的行填充占位符^$,去掉ISBLANK判断分支,可再提速20%左右。
    2. 若搜索不需要大小写匹配,将CONTAINSSTRING替换为CONTAINSSTRINGEXACT,性能可进一步提升。

极限性能方案

如果DAX计算列仍不能满足性能要求,可以把匹配逻辑移到Power Query预处理阶段,在数据刷新时完成计算,不需要DAX运行时计算,50万行数据的处理耗时通常在10秒以内。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 06:45:03