Explore and share Fabric Notebooks to boost Power BI insights in the new community notebooks gallery.
Check it out now!Microsoft is giving away 50,000 FREE Microsoft Certification exam vouchers. Get Fabric certified for FREE! Learn more
场景:
目前,我们有 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.