为什么 Google Data Studio 中只应用第一个 case 语句?

use*_*296 14 google-data-studio

我在 Google Data Studio的一个语句中组合了这两条REGEX规则,但只应用了第一条规则。CASE

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

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

Die*_*roz 26

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

数据洞察文档

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

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


对于您的具体情况,我没有看到在语句中运行REGEXP_MATCHthen的理由。相反,只需运行即可完成(如果正则表达式不匹配,原始字符串将不会更改)。REGEXP_REPLACECASEREGEXP_REPLACE

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

REGEXP_REPLACE(Seite, "(^/amp/|-[0-9]+$)", "")
Run Code Online (Sandbox Code Playgroud)

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

  • @Lino值得一提的是 `[0-9]` 和 `\d` *通常*可以互换,但是[它们并不相同](https://unix.stackexchange.com/questions/414226/difference- Between- 0-9 位数字和 d/414230#414230)。 (11认同)