Microsoft Fabric Community Conference 2025, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount.
Register nowGet 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
场景:
目前,我们有 2 个列表。现在我们想检查列表 1 是否包含列表 2 中的任何值。我们将如何实现此要求?请参阅下文了解详情。
样本数据:
现在使用此逻辑在姓名表中创建一个计算列:
列表中的值是否在当前值中存在? =
IF(
SUMX('关键词列表',
SEARCH(
'关键词列表'[关键词],
'姓名表'[姓名]
,1,0
)
) > 0,
"是",
"否"
)
对于列表中的每一行,应用 SEARCH 函数。
结果:
此外,您还可以使用此步骤(SUMX( '关键词列表',SEARCH('关键词列表'[关键词],'姓名表'[姓名],1,0))> 0)作为另一个公式中的条件,例如:
度量值 =
CALCULATE (
COUNTROWS ( '姓名表' ),
FILTER (
'姓名表',
SUMX ( '关键词列表', SEARCH ( '关键词列表'[关键词], '姓名表'[姓名], 1, 0 ) ) > 0
)
)
使用此逻辑确定列表中的哪些列表值包含在名称列中
列表中的哪些值是当前值? =
CONCATENATEX (
CALCULATETABLE (
VALUES ( '关键词列表'[关键词] ),
FILTER ( '关键词列表', SEARCH ( '关键词列表'[关键词], '姓名表'[姓名], 1, 0 ) > 0 )
),
[关键词],
","
)
另一种方法是您可以使用 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 一样。
结果:
另外,对于SEARCH和FIND函数,Search不区分大小写和重音,但FIND区分大小写。
例如,如果在FIND中使用“A”或“a”,则上述表达式之间会有区别,但使用Search函数时“A”或“a”之间没有区别。
使用Find = FIND("A",'姓名表'[姓名],1,0)
使用Search = SEARCH("A",'姓名表'[姓名],1,0)
对于第一行,FIND 将仅返回“A”的第一个索引,即 10,但 SEARCH 将返回“A”或“a”的第一个索引。
并且您可以轻松更改 FIND 或 SEARCH 以返回完全相同的结果。这意味着您可以使 FIND 不区分大小写。以下是如何使 FIND 不区分大小写的示例:
使用Find with UPPER = FIND(UPPER("A"),UPPER('姓名表'[姓名]),1,0)
上面的表达式是使用UPPER将<查找文本>和<被查找文本>全部大写,然后进行比较,也可以将其小写,逻辑是一样的。
原作者:Lin Li
审核: Yuyang
翻译:Junyan Tao
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.