Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Get certified as a Fabric Data Engineer: Check your eligibility for a 50% exam voucher offer and join us for free live learning sessions to get prepared for Exam DP-700. Get started

v-stephen-msft

带有列表值的搜索功能

场景:

目前,我们有 2 个列表。现在我们想检查列表 1 是否包含列表 2 中的任何值。我们将如何实现此要求?请参阅下文了解详情。

 样本数据:

vstephenmsft_0-1732860970505.png

vstephenmsft_0-1732861727349.png

 

现在使用此逻辑在姓名表中创建一个计算列:

列表中的值是否在当前值中存在? =  

IF( 

    SUMX('关键词列表', 

        SEARCH( 

            '关键词列表'[关键词], 

            '姓名表'[姓名] 

            ,1,0 

            ) 

        ) > 0, 

    "是", 

    "否" 

) 

 

对于列表中的每一行,应用 SEARCH 函数。
结果:

vstephenmsft_2-1732861023337.png

此外,您还可以使用此步骤(SUMX( '关键词列表',SEARCH('关键词列表'[关键词],'姓名表'[姓名],1,0))> 0)作为另一个公式中的条件,例如:

度量值 =  

CALCULATE ( 

    COUNTROWS ( '姓名表' ), 

    FILTER ( 

    '姓名表', 

    SUMX ( '关键词列表', SEARCH ( '关键词列表'[关键词], '姓名表'[姓名], 1, 0 ) ) > 0 

    ) 

) 

 

使用此逻辑确定列表中的哪些列表值包含在名称列中

列表中的哪些值是当前值? =  

CONCATENATEX ( 

    CALCULATETABLE ( 

        VALUES ( '关键词列表'[关键词] ), 

        FILTER ( '关键词列表', SEARCH ( '关键词列表'[关键词], '姓名表'[姓名], 1, 0 ) > 0 ) 

    ), 

    [关键词], 

    "," 

) 

 

vstephenmsft_3-1732861446950.png

 


另一种方法是您可以使用 Power Query 中的相同逻辑来完成。
在power query中,最好将其分为以下几个步骤:

  已添加自定义 = Table.AddColumn(更改的类型, "列举关键词", each 关键词列表[关键词]), 

    #"展开的“列举关键词”" = Table.ExpandListColumn(已添加自定义, "列举关键词"), 

    已添加自定义1 = Table.AddColumn(#"展开的“列举关键词”", "是否包含?", each if Text.Contains([姓名], [列举关键词]) = true then 1 else 0), 

    分组的行 = Table.Group(已添加自定义1, {"姓名"}, {{"结果", each if List.Sum([#"是否包含?"])>0 then "是" else "否", type number}}), 

    更改的类型1 = Table.TransformColumnTypes(分组的行,{{"结果", type text}}) 

in 

    更改的类型1 

 

让我解释一下这些过程。
已添加自定义 // 将关键字列转换为列表,然后将其添加为自定义列。
#"展开的“列举关键词”" // 扩展上面的列表列,以便每个列表值都与基本表连接。
已添加自定义1 // 添加自定义列来判断此列表值是否包含在当前值中。
分组的行 // 汇总结果就像 dax 公式中的 SUMX 一样。

结果:

vstephenmsft_4-1732861487928.png

另外,对于SEARCH和FIND函数,Search不区分大小写和重音,但FIND区分大小写。

例如,如果在FIND中使用“A”或“a”,则上述表达式之间会有区别,但使用Search函数时“A”或“a”之间没有区别。

使用Find = FIND("A",'姓名表'[姓名],1,0) 
使用Search = SEARCH("A",'姓名表'[姓名],1,0) 

 

vstephenmsft_5-1732861528342.png

对于第一行,FIND 将仅返回“A”的第一个索引,即 10,但 SEARCH 将返回“A”或“a”的第一个索引。

并且您可以轻松更改 FIND 或 SEARCH 以返回完全相同的结果。这意味着您可以使 FIND 不区分大小写。以下是如何使 FIND 不区分大小写的示例:

使用Find with UPPER = FIND(UPPER("A"),UPPER('姓名表'[姓名]),1,0) 

 

vstephenmsft_6-1732861553055.png

上面的表达式是使用UPPER将<查找文本>和<被查找文本>全部大写,然后进行比较,也可以将其小写,逻辑是一样的。

原作者:Lin Li

审核: Yuyang

翻译:Junyan Tao