多重匹配的SWITCH函数 - Power BI DAX

3
我最近一个月开始使用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 Hits 测试 理想结果
狗 猫 猫,狗
狗 狗
狗 狐狸 狗,狐狸
猫 狗 猫,狗
猫 猫
猫 狐狸 猫,狐狸
测试 非目标 非目标
我想到的解决方案是为每个SWITCH case创建单独的列,但在这样做之前,我想知道是否有其他的变通方法或潜在的函数可以使用,因为对于较大的SWITCH函数来说,这种方法似乎很耗时。非常感谢您的帮助。
1个回答

2

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"

非常感谢,那个方法完美地起作用了!我还想知道:假设我想使用主题对文本进行分类(例如:如果字符串包含"猫"和"狗",则返回"家养宠物"),这是我能够通过调整您上面的解决方案来实现的吗?还是我需要为此单独创建一列? - undefined
不太确定我理解了。请提出一个新问题,附上示例数据和预期结果,我们可以帮您查看一下。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接