我一个月前开始使用 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 函数来说似乎很耗时。任何帮助将不胜感激。
添加自定义列:
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"