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

Why is only the first case statement applied in a Google Data Studio?

我在 Google Data Studio 中组合了这两个 REGEX rules in a single 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

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

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

来自 Data Studio documentation:

CASE evaluates each successive WHEN clause and returns the first result where the condition is true. Any remaining WHEN clauses and the ELSE result are not evaluated. If all WHEN conditions are false or NULL, CASE returns the ELSE result, or if no ELSE clause is present, returns NULL.

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


对于您的具体情况,我看不出在 CASE 语句中 运行 REGEXP_MATCH 然后 REGEXP_REPLACE 的原因。相反,只需 运行 REGEXP_REPLACE 就可以了(如果正则表达式不匹配,原始字符串将不会改变)。

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

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

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