cte 中的Event_date 参考

问题描述 投票:0回答:1

大家好,我一直在编写一些代码,这些代码将从我的 google Analytics 4 导出中提取一些聚合数据。

不幸的是,我在 cte“SessionsPerUser”中遇到了有关变量“event_timestamp”的错误。我无法解决该错误,并一直试图追溯到问题所在。该变量存在于我的分期模型中,并且适用于所有其他 cte。 Group by 语句或嵌套函数一定有问题吗?任何见解或想法将不胜感激!我将引用我的整个代码以及我认为导致问题的代码片段。

WITH RECURSIVE DateDimension AS (
  SELECT '2024-01-01'::DATE AS date -- Start date
  UNION ALL
  SELECT DATEADD(day, 1, date)
  FROM DateDimension
  WHERE date < CURRENT_DATE() -- Automatically updates to include up to the current date
),

UserInfo AS (
    SELECT
      DATE(event_timestamp) AS event_date,
      user_pseudo_id,
      MAX(IFF(event_name IN ('first_visit', 'first_open'), 1, 0)) AS is_new_user,
      MAX(IFF(event_name = 'app_remove', 1, 0)) AS is_deletion,
      MAX(IFF(event_name = 'delete_account', 1, 0)) AS is_account_deletion,
      MAX(IFF(param_exclusion = TRUE, 1, 0)) AS is_exclusion,
      SUM(param_ENGAGEMENT_TIME_MSEC) AS total_engagement_time,
      MAX(IFF(event_name = 'first_open', 1, 0)) AS is_download
    FROM {{ ref('stg_google_analytics_events') }}
    GROUP BY DATE(event_timestamp), user_pseudo_id
),

SessionInfo AS (
    SELECT
      DATE(event_timestamp) AS event_date,
      user_pseudo_id,
      param_ga_session_id,
      TIMESTAMPDIFF(SECOND, MIN(event_timestamp), MAX(event_timestamp)) AS session_duration
    FROM {{ ref('stg_google_analytics_events') }}
    GROUP BY DATE(event_timestamp), user_pseudo_id, param_ga_session_id
),


TotalSessions AS (
    SELECT
      DATE(event_timestamp) AS event_date,
      COUNT(DISTINCT param_ga_session_id) AS total_sessions
    FROM {{ ref('stg_google_analytics_events') }}
    GROUP BY DATE(event_timestamp)
),

SessionsPerUser AS (
    SELECT
      DATE(event_timestamp) AS event_date,
      AVG(session_count) AS sessions_per_user
    FROM (
        SELECT
          DATE(event_timestamp) AS event_date,
          user_pseudo_id,
          COUNT(DISTINCT param_ga_session_id) AS session_count
        FROM {{ ref('stg_google_analytics_events') }}
        GROUP BY DATE(event_timestamp), user_pseudo_id
    ) AS user_sessions
    GROUP BY DATE(event_timestamp)
),


AggregatedMetrics AS (
      SELECT
      ui.event_date,
      COUNT(DISTINCT ui.user_pseudo_id) AS active_users,
      SUM(ui.is_new_user) AS signups,
      SUM(ui.is_deletion) AS deletions,
      SUM(ui.is_account_deletion) AS account_deletions,
      SUM(ui.is_exclusion) AS exclusions,
      SUM(ui.is_download) AS downloads,
      AVG(si.session_duration) AS average_session_duration,
      SUM(ui.total_engagement_time) / COUNT(DISTINCT si.param_ga_session_id) AS average_engagement_time,
      ts.total_sessions,
      spu.sessions_per_user
    FROM UserInfo ui
    LEFT JOIN SessionInfo si ON ui.user_pseudo_id = si.user_pseudo_id AND ui.event_date = si.event_date
    LEFT JOIN TotalSessions ts ON ui.event_date = ts.event_date
    LEFT JOIN SessionsPerUser spu ON ui.event_date = spu.event_date
    GROUP BY ui.event_date, ts.total_sessions, spu.sessions_per_user
)

SELECT
  dd.date,
  COALESCE(am.downloads, 0) AS downloads,
  COALESCE(am.active_users, 0) AS active_users,
  COALESCE(am.signups, 0) AS signups,
  COALESCE(am.deletions, 0) AS deletions,
  COALESCE(am.account_deletions, 0) AS account_deletions,
  COALESCE(am.exclusions, 0) AS exclusions,
  COALESCE(am.total_sessions, 0) AS total_sessions,
  COALESCE(am.sessions_per_user, 0) AS sessions_per_user,
  COALESCE(am.average_session_duration, 0) AS average_session_duration,
  COALESCE(am.average_engagement_time, 0) AS average_engagement_time
FROM DateDimension dd
LEFT JOIN AggregatedMetrics am ON dd.date = am.event_date
ORDER BY dd.date

错误信息:

000904(42000):SQL编译错误:错误第46行位于位置11无效标识符'EVENT_TIMESTAMP'

代码片段:

SessionsPerUser AS (
    SELECT
      DATE(event_timestamp) AS event_date,
      AVG(session_count) AS sessions_per_user
    FROM (
        SELECT
          DATE(event_timestamp) AS event_date,
          user_pseudo_id,
          COUNT(DISTINCT param_ga_session_id) AS session_count
        FROM {{ ref('stg_google_analytics_events') }}
        GROUP BY DATE(event_timestamp), user_pseudo_id
    ) AS user_sessions
    GROUP BY DATE(event_timestamp)
),

我可以再次验证 event_timestamp 是否存在并且适用于我的其他 ctes,因此它不是“无效标识符”

感谢您的帮助!

date events snowflake-cloud-data-platform common-table-expression dbt
1个回答
0
投票

SessionsPerUser
CTE 中,您有
DATE(event_timestamp) AS event_date
。这是从您已从 event_timestamp 创建 event_date 的子查询中进行选择。所以它应该看起来像:

SessionsPerUser AS (
    SELECT
      event_date,
      AVG(session_count) AS sessions_per_user
    FROM (
        SELECT
          DATE(event_timestamp) AS event_date,
          user_pseudo_id,
          COUNT(DISTINCT param_ga_session_id) AS session_count
        FROM {{ ref('stg_google_analytics_events') }}
        GROUP BY DATE(event_timestamp), user_pseudo_id
    ) AS user_sessions
    GROUP BY DATE(event_date)
),
© www.soinside.com 2019 - 2024. All rights reserved.