具有多个命中的 SWITCH 函数 - Power BI DAX

SWITCH Function with multiple hits - Power BI DAX

提问人:cariberttttt 提问时间:11/3/2023 最后编辑:Davide Baccicariberttttt 更新时间:11/4/2023 访问量:49

问:

一个月前,我最近开始使用 Power BI。我目前正在尝试使用 SWITCH 对一列文本进行排序。我遇到的主要问题是,当一行有多个单词满足我编码的案例的标准时,输出列只包含满足的第一个案例,而不是满足所有案例。

这是我目前拥有的代码:

SWITCH Hits Test =
SWITCH(
TRUE(),
CONTAINSSTRING('SWITCH Test'[Raw Data], "cat"), "cat",
CONTAINSSTRING('SWITCH Test'[Raw Data], "dog"), "dog",
CONTAINSSTRING('SWITCH Test'[Raw Data], "fox"), "fox",
"Not Target")   

这是我的表格的样子:

原始数据 SWITCH 命中测试 理想的结果
狗猫 猫, 狗
狗狗
狗狐狸 狗, 狐狸
猫狗 猫, 狗
猫猫
猫狐狸 猫, 狐狸
测试 非目标 非目标

我想出的解决方案是为每个 SWITCH 案例制作单独的列,但我想知道在执行此操作之前是否可以使用另一种解决方法/潜在函数,因为对于较大的 SWITCH 函数来说,这似乎很耗时。任何帮助将不胜感激。

Excel PowerBI DAX PowerQuery M

评论


答:

2赞 Davide Bacci 11/4/2023 #1

enter image description here

添加自定义列:

let
a={"cat", "dog", "fox"},
b =  List.Distinct(  List.RemoveNulls( Text.Split( Text.Trim( [Raw Data]), " "))),
c = List.Intersect({a,b}),
d = Text.Combine(c, ", ")
in if List.IsEmpty(c) then "Not Target" else d

完整代码

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WSslPV0hOLFFQ0lFCUDoKQGGlWB2INAgDxREUXCYtvwJVRgckBJYGGQYVx2YuSAzDWrgM1FxkjTBzS1KLwYJ++SUKIYlF6aloPKXYWAA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Raw Data" = _t, #"SWITCH Hits Test" = _t, #"Ideal Result" = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Raw Data", type text}, {"SWITCH Hits Test", type text}, {"Ideal Result", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each let
a={"cat", "dog", "fox"},
b =  List.Distinct(  List.RemoveNulls( Text.Split( Text.Trim( [Raw Data]), " "))),
c = List.Intersect({a,b}),
d = Text.Combine(c, ", ")
in if List.IsEmpty(c) then "Not Target" else d)
in
    #"Added Custom"

评论

0赞 cariberttttt 11/4/2023
非常感谢,效果很好!我也想知道:假设我想使用主题对文本进行分类(例如:如果字符串包含“cat”和“dog”,则返回“domestic pet”);这是我可以调整您上面的解决方案以包括任何机会的东西吗?或者我必须为它做一个单独的专栏。
0赞 Davide Bacci 11/4/2023
不确定我是否理解。提出一个包含样本数据和预期结果的新问题,我们可以看看。