如果 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++ 中删除该函数末尾的指针?

如果不使用 sqlite 中的 row_number() 函数,如何提供相同的函数?

如果我们在plsql过程中有out参数并在函数中返回。那么为啥我们使用过程而不是函数?