如何在 "contains" 时创建 CASE?

How to create CASE WHEN "contains"?

是否可以搜索 Source 中的姓名?

CASE
  WHEN Source="facebook_instagram" OR Source="facebook.com" OR Source="m.facebook.com" OR Source="instagram.com" OR Source="instagram" OR Source="l.facebook.com" OR Source="lm.facebook.com" OR Source="facebook" OR Source="de-de.facebook.com" THEN "Social"
  ELSE "Sonstige"
END

有没有办法 select 所有 facebook 来源,而不列出它们?

使用REGEXP_MATCH

当然可以减少代码量

例如

CASE
WHEN REGEXP_MATCH(Source, '.*facebook.*') OR REGEXP_MATCH(Source, '.*instagram.*') THEN 'Social'
ELSE 'Sonstige'
END

另一种消除部分重复的方法是使用 in。对于您的代码,结果如下:

CASE 
WHEN Source IN("facebook_instagram", "facebook.com", "m.facebook.com", "instagram.com", "instagram", "l.facebook.com", "lm.facebook.com", "facebook", "de-de.facebook.com") Then "Social"
ELSE "Sonstige" 
END

可以使用REGEXP_MATCH function within a CASE语句实现;下面的 RegEx 查找 facebook 或 (|) instagram,不管字符串以什么开头 (^),文本前面是什么 (.*) , 在文本 (.*) 或以 ($) 结尾的内容之后:

CASE
  WHEN REGEXP_MATCH(Source, "^.*(facebook|instagram).*$") THEN "Social"
  ELSE "Sonstige"
END

Google Data Studio Report 和一张 GIF 来详细说明: