为什么自定义维度在 case 语句中不起作用。数据工作室,Google 分析

Why will custom dimensions not work in case statements. Data studio, Google analytics

我在 Google 数据工作室中遇到问题。我正在创建一个案例陈述,它在几个不同的维度中寻找关键字并相应地对它们进行分类。在我添加自定义尺寸之前,这一切都很好。就 Google 而言,see 语句是有效的,但 return 什么都没有。

CASE 
WHEN CONTAINS_TEXT(PAGE, "Heart") THEN "Cardiology"
WHEN PAGE = "Diabetes.website.com" THEN "Diabetes"
End

以上工作正常

CASE 
    WHEN CONTAINS_TEXT(PAGE, "Heart") THEN "Cardiology"
    WHEN PAGE = "Diabetes.website.com" THEN "Diabetes"
WHEN WEB_SUBJECT = "Hypertension" THEN "Cardiology"
END

以上有效,但使用时为空。 Web_subject 是在 Google 分析中定义的自定义维度。

非常感谢任何帮助。这个让我难住了。

更新: 因此,将自定义维度表达式的格式更改为 REGEX 在 returning 结果中适用于该特定条件,但它现在不显示任何其他结果。我感觉这可能是因为它背后的数据。

多一点上下文,本例中的数据源是汇总 google 分析帐户,因此它包含来自 10 多个域的分析。我试图做的是使用各种不同的维度将来自不同域的页面浏览量和用户分组到主题中。例如,如果用户选择过滤器 'Diabetes' 我想 return 所有页面浏览量: 页面标题包含 x 的域 A 域 B,其中 customDimesnion 1 = Y 等等

这是我目前乱七八糟的 CASE 语句:

    case
when contains_text(Page, 'biosimilars-confidence') OR REGEXP_MATCH(WEBSITE subject,  '.*(?i)(Oncologie).*') OR CONTAINS_TEXT(Page, 'oncology') OR contains_text(Page, 'rrmm-challenges') OR  contains_text(Page, 'oncologyhighlights2020') OR CONTAINS_TEXT(Page, 'ASCO') OR CONTAINS_TEXT(Page Title, 'cancer') OR contains_text(Page Title, 'Oncology') OR  contains_text(Page Title, 'ASCO') THEN "Oncology"
when CONTAINS_TEXT(Page, 'DOMAINB') OR contains_text(Page, 'eprint') THEN "Eprint"
when CONTAINS_TEXT(Page, 'diabetes') OR REGEXP_MATCH(WEBSITE subject,  '.*(?i)(Diabetes).*') OR contains_text(Page, 'hypoglycemia') OR contains_text(Page, 'glp1ras') OR contains_text(Page Title, 'Diabetes') OR contains_text(Page Title, 'hyperglycemia') OR contains_text(Page Title, 'diabetes') OR contains_text(Page Title, 'ADA') OR contains_text(Page Title, 'GLP-1') then "Diabetes/Endocrinology"
when CONTAINS_TEXT(Page, 'cardiology') OR REGEXP_MATCH(WEBSITE subject,  '.*(?i)(Cardiologie).*') OR contains_text(Page Title, 'Cardiology') OR contains_text(Page Title, 'Heart failure') then'Cardiology'
when contains_text(Page, 'gastro') OR REGEXP_MATCH(WEBSITE subject,  '.*(?i)(Gastro-enterologie).*') OR contains_text(Page Title, 'Gastroenterology') then "Gastroenterology"
when contains_text(Page, 'rheumatology') OR REGEXP_MATCH(WEBSITE subject,  '.*(?i)(Reumatologie).*') OR contains_text(Page Title, 'Rheumatology') OR contains_text(Page Title, 'adalimumab') OR CONTAINS_TEXT(Page Title, 'arthritis') OR CONTAINS_TEXT(Page Title, 'EULAR') OR contains_text(Page Title, "joint")  then "Rheumatology"
when CONTAINS_TEXT(Page, 'migraine') OR REGEXP_MATCH(WEBSITE subject,  '.*(?i)(Neurologie).*') OR contains_text(Page Title, 'Neurology') OR contains_text(Page Title, "Ataxia") OR contains_text(Page Title, "EAN 2020") then "Neurology"
when Page = 'DOMAINA.com' OR contains_text(Page, 'training') OR Page = 'ime.DOMAINA.com' then "Corporate site traffic"
when contains_text(Page Title, 'Gynaecology ') then "Gynaecology "
when CONTAINS_TEXT(Page Title, 'Dermatology') OR REGEXP_MATCH(WEBSITE subject,  '.*(?i)(Dermatologie).*') OR contains_text(Page Title, 'eczema') OR contains_text(Page Title, 'Laser hair removal') then "Dermatology"
when CONTAINS_TEXT(Page Title, 'COVID-19') OR REGEXP_MATCH(WEBSITE subject,  '.*(?i)(Coronavirus (COVID-19)).*') then "COVID-19"
WHEN CONTAINS_TEXT(Page Title, 'General practice') then "General practice"
when contains_text(Page Title, 'Haematology') OR REGEXP_MATCH(WEBSITE subject,  '.*(?i)(Hematologie).*') OR contains_text(Page Title, 'EHA25') then "Haematology"
when contains_text(Page Title, 'Mental health') OR CONTAINS_TEXT(Page Title, 'Psychology') then 'Mental health'
when contains_text(Page Title, 'penile length') OR REGEXP_MATCH(WEBSITE subject,  '.*(?i)(Urologie).*') then "Urology"
when contains_text(Page Title, 'ERS 2019') OR REGEXP_MATCH(WEBSITE subject,  '.*(?i)(Longziekten).*') THEN "Lung diseases"
when contains_text(Page, 'noonan')Then "Genetics"
when REGEXP_MATCH(WEBSITE subject,  '.*(?i)(Farmacie).*') then 'Pharmacy'
when REGEXP_MATCH(WEBSITE subject,  '.*(?i)(Heelkunde).*') then 'Surgery'
when REGEXP_MATCH(WEBSITE subject,  '.*(?i)(Huisartsgeneeskunde).*') then 'Family medicine'
when REGEXP_MATCH(WEBSITE subject,  '.*(?i)(Infectieziekten).*') then 'Infectious Diseases'
when REGEXP_MATCH(WEBSITE subject,  '.*(?i)(Overig).*') then 'Other/Uncategorized'
when REGEXP_MATCH(WEBSITE subject,  '.*(?i)(Voeding).*') then 'Nutrition'
else 'Other/Uncategorized'
end

我已经匿名化了一些位,所以如果它看起来很奇怪,那就是原因。 很可能我正在以完全错误的方式解决这个问题。还有一点需要注意,域名存储在 PAGE 维度中。

更新(扩展案例)

0) 原始扩展案例

可能是因为:

contains_text(Page Title, 'ADA')

ADA 周围添加一个 单词边界 可能会成功,确保仅包含 ADA 的单词不会被捕获到相应的 [=18] =] 子句

REGEXP_MATCH(Page Title, ".*(?i)(\bADA\b).*")

另一种方法是遵循以下两步过程:

1) Field_CONCAT

创建以下数据 Source-level Calculated Field to CONCAT 字段到一个单一的合并字段中:

CONCAT(Page, ", ", WEBSITE subject, ", ", Page Title)

2) New_CASE

创建下面的 CASE 语句:

  • Field:其中Field_CONCAT表示上面创建的字段;
  • |或 || 管道运算符 | 作为 OR
  • 的 RegEx 版本
  • Escape Sequence\用于转义特殊的RegEx字符,如(|, ., 等等;
  • 字边界:在ADA(以及ASCO两边添加字边界) 以确保仅包含 ada 的文本不是 Diabetes/Endocrinology WHEN 子句的一部分:
CASE
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(biosimilars-confidence|Oncologie|oncology|rrmm-challenges|oncologyhighlights2020|\bASCO\b|cancer).*") THEN "Oncology"
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(DOMAINB|eprint).*") THEN "Eprint"
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(diabetes|hypoglycemia|glp1ras|hyperglycemia|\bADA\b|GLP-1).*") THEN "Diabetes/Endocrinology"
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(cardiology|Cardiologie|Heart failure).*") THEN 'Cardiology'
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(gastro|Gastro-enterologie|Gastroenterology).*") THEN "Gastroenterology"
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(rheumatology|Reumatologie|adalimumab|arthritis|EULAR|joint).*") THEN "Rheumatology"
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(migraine|Neurologie|Neurology|Ataxia|EAN 2020).*") THEN "Neurology"
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(DOMAINA\.com|training|ime\.DOMAINA\.com).*") THEN "Corporate site traffic"
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(Gynaecology).*") THEN "Gynaecology "
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(Dermatology|Dermatologie|eczema|Laser hair removal).*") THEN "Dermatology"
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(COVID-19|Coronavirus \(COVID-19\)).*") THEN "COVID-19"
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(General practice).*") THEN "General practice"
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(Haematology|Hematologie|EHA25).*") THEN "Haematology"
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(Mental health|Psychology).*") THEN 'Mental health'
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(penile length|Urologie).*") THEN "Urology"
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(ERS 2019|Longziekten).*") THEN "Lung diseases"
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(noonan).*") THEN "Genetics"
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(Farmacie).*") THEN 'Pharmacy'
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(Heelkunde).*") THEN 'Surgery'
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(Huisartsgeneeskunde).*") THEN 'Family medicine'
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(Infectieziekten).*") THEN 'Infectious Diseases'
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(Overig).*") THEN 'Other/Uncategorized'
  WHEN REGEXP_MATCH(Field_CONCAT, ".*(?i)(Voeding).*") THEN 'Nutrition'
  ELSE 'Other/Uncategorized'
END

添加了New Page to the Google Data Studio Report和GIF演示:

原版POST

0) ELSE NULL

请注意,问题中的 CASE 语句和此建议并未明确说明 ELSE 子句,因此默认情况下,ELSE 值被视为 .

1) 调整案例

尝试了 CASE 语句,它按预期工作!对初始 CASE 语句的一项调整是包含 逻辑运算符 OR:

CASE
  WHEN CONTAINS_TEXT(PAGE, "Heart") OR WEB_SUBJECT = "Hypertension" THEN "Cardiology"
  WHEN PAGE = "Diabetes.website.com" THEN "Diabetes"
END

2) 替代案例

另外,您也可以看看下面的CASE语句是否解决了问题;它使用 REGEXP_MATCH 函数并确保字段 Contain .* 各自的值以及添加 Case Insensitive Flag (?i) 因此匹配 Hypertension, hypertension, HYPerTENsion, etc:

CASE
  WHEN REGEXP_MATCH(PAGE, ".*(?i)(Heart).*") OR REGEXP_MATCH(WEB_SUBJECT, ".*(?i)(Hypertension).*") THEN "Cardiology"
  WHEN REGEXP_MATCH(PAGE, ".*(?i)(Diabetes\.website\.com).*") THEN "Diabetes"
END

3) 后续步骤和 GIF

如果上述方法不能解决问题,能否详细说明并截图并提供一些示例数据(删除或替换任何敏感信息);随时向 This Editable Google Sheet 添加数据(也用于下面的报告和 GIF)。

Google Data Studio Report 和一张 GIF 来详细说明以上内容:

所以首先@Nimantha 感谢你让我在解决这个问题的道路上走得更远,并在 case 陈述方面给了我很大的教训,这将帮助我向前迈进。

事实证明,我的 'Universal' 分析标签位于由不同标签管理器容器实现的多个站点上。我在标签容器中定义自定义维度,以将数据层信息传递给 google 分析。问题是我没有将任何值传递给自定义维度到任何其他域。这导致 CASE 语句失败,因为当自定义维度值仅存在于一个域时,它只返回来自该域的页面。

为了解决这个问题,我查看了所有容器中的所有 GA 标签并匹配了自定义尺寸,如果我没有实际值可以传递(未设置)。现在,在使用 Nimantha 上面的 CASE 语句时,我可以看到所有页面都开始出现。不幸的是,从现在开始他们正在填充,但至少它有效!