如果 text.contain 使用 OR 函数,则 M 查询中的条件列
Posted
技术标签:
【中文标题】如果 text.contain 使用 OR 函数,则 M 查询中的条件列【英文标题】:conditional column in M query if text.contain using OR function 【发布时间】:2021-03-16 20:07:10 【问题描述】:我在 powerquery 中添加了一个列,条件包含具有不同值的文本。我可以为每个条件添加每个短语,但我正在考虑使用 OR 函数以更有效的方式编写它。
到目前为止,我有以下内容:
= Table.AddColumn(#Changed Type", "Assigned Group", each if Text.Contains([Assigned to], "John") Then "Group 1" else if Text.Contains([Assigned to], "johnny") Then "Group 1" else if Text.Contains([Assigned to], "jane") Then "Group 1" else if Text.Contains([Assigned to], "sean") Then "Group 1" else if Text.Contains([Assigned to], "Mary") Then "Group 2" else if Text.Contains([Assigned to], "Pete") Then "Group 2" else "Group 3")
如前所述,有没有办法在没有像上面那样长的文本的情况下更有效地编写这个?
我试过了:
= Table.AddColumn(#Changed Type", "Assigned Group", each if Text.Contains(OR(([Assigned to], "John"), ([Assigned to], "johnny"), ([Assigned to], "jane"), ([Assigned to], "sean"))) Then "Group 1" else if Text.Contains(OR(([Assigned to], "Mary"), ([Assigned to], "Pete"))) Then "Group 2" else "Group 3")
它说 Or 未被识别。我还在 text.contains 短语之前尝试了 OR 函数,但它仍然不起作用。
我如何像在 excel 或 power query 中一样输入 OR 函数。
【问题讨论】:
【参考方案1】:首先,请记住:M 是区分大小写的语言。因此,Then 不是正确的语法。 PQ中也没有OR函数,但是有or运算符。
您可以使用以下代码:
= Table.AddColumn(
#"Changed Type",
"Assigned Group",
each
let
fn = (list) =>
List.AnyTrue(
List.Transform(list, (x) => Text.Contains([Assigned to], x, Comparer.OrdinalIgnoreCase))
)
in
if fn("John", "Jane", "Sean") then
"Group 1"
else if fn("Mary", "Pete") then
"Group 2"
else
"Group 3"
)
【讨论】:
感谢您提醒我注意区分大小写,我只是通过键入从另一台计算机复制了整个代码,并没有意识到区分大小写。我会试一试代码并让你知道。保持安全并保持健康 谢谢你,这行得通,只需要清理数据以使其更准确。以上是关于如果 text.contain 使用 OR 函数,则 M 查询中的条件列的主要内容,如果未能解决你的问题,请参考以下文章
PHP 如果我在函数内部使用 requre() 是调用函数之前的那个文件吗?
如果我在函数中使用指针来填充列表,我是不是必须在 C++ 中删除该函数末尾的指针?