【问题标题】:Why is only the first case statement applied in a Google Data Studio? [duplicate]为什么 Google Data Studio 中只应用了第一个 case 语句? [复制]
【发布时间】:2021-06-10 06:09:41
【问题描述】:

我在 Google Data Studio 中将这两个 REGEX rules 合并为一个 CASE statement,但只应用了第一条规则。

CASE
    WHEN REGEXP_MATCH(Seite, "^/amp/.*") THEN REGEXP_REPLACE(Seite, "^/amp/", "")
    WHEN REGEXP_MATCH(Seite, ".*-[0-9]+$") THEN REGEXP_REPLACE(Seite, "-[0-9]+$", "")
END

如果我交换规则的顺序,同样只应用第一条规则;不是第二个。为什么不适用第二条规则?我怎样才能让它同时应用这两个规则?

【问题讨论】:

  • 这个问题正在Meta讨论。
  • 我已经编辑了您的问题,以便更好地展示我认为您想问的问题。请看一下。也许添加您实际想要实现的上下文!为什么选择 CASE 语句?
  • 这个问题也可以显示更多的研究。你搜索过问题吗?你得到了什么?
  • @DalijaPrasnikar:这有点牵强。不是直接复制(两个问题不一样),这个问题的答案深埋在原文中。
  • @RobertHarvey 我不会说它被深深地掩埋了。接受的答案适合页面,解释和回答这里发生的事情的注释以粗体显示。

标签: google-data-studio


【解决方案1】:

这是预期的行为。 CASE 语句只运行第一个计算结果为真的表达式,而不是所有计算结果为真的表达式。

来自Data Studio documentation

CASE 评估每个连续的 WHEN 子句并返回条件为真的第一个结果。不会评估任何剩余的 WHEN 子句和 ELSE 结果。如果所有 WHEN 条件均为 false 或 NULL,则 CASE 返回 ELSE 结果,或者如果不存在 ELSE 子句,则返回 NULL。

如果您想在单个字符串上运行多个正则表达式,您需要创建一个通用正则表达式来组合所有正则表达式或嵌套这些规则,确保一个规则将在前一个规则之后应用。


对于您的具体情况,我认为没有理由在 CASE 语句中运行 REGEXP_MATCH 然后运行 ​​REGEXP_REPLACE。相反,只需运行 REGEXP_REPLACE 即可完成(如果正则表达式不匹配,原始字符串不会更改)。

在一条指令中运行多个正则表达式替换的示例:

REGEXP_REPLACE(Seite, "(^/amp/|-[0-9]+$)", "")

注意使用|(管道)分隔符来执行or 操作。在实践中,这意味着:“将字符串中与^/amp/-[0-9]+$ 匹配的所有部分替换为''(空字符串)”。

【讨论】:

猜你喜欢
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多