offdataai
Marketing & AdTech · data model template

Web & Product Analytics data model

Kimball warehouse for digital analytics: a high-volume clickstream event fact, a session-grain fact, and a daily-active-users periodic snapshot over conformed user/page/device/geo/campaign/feature dimensions on BigQuery. User email is hashed and marketing consent is modelled.

Web and product analytics covering atomic clickstream events, sessions, and daily active users over a conformed SCD2 user dimension with date, page, device, geo, campaign, and feature dimensions for funnel, engagement, retention, and feature-adoption analytics. Tracking-consent and user identifiers are governed under GDPR/ePrivacy. It is a Kimball dimensional model: fact tables at a declared grain surrounded by conformed dimensions, ready for BI tools and a semantic layer.

KimballMarketing & AdTechGDPRCCPA
10
tables
99
columns
16
relationships
2
PII columns

Opening the template creates a project with the ERD, platform-native DDL, a dbt project and documentation already generated (recommended platform: BigQuery). Edit it in plain English or on the canvas, then ship it to any supported warehouse.

Subject areas

clickstreamengagementconformed_dimensions

Design decisions

  • Atomic event fact plus a derived session fact

    The event grain supports any future funnel definition, while a pre-aggregated session fact keeps common engagement and bounce queries fast over very high event volumes.

  • Daily-active-users periodic snapshot

    DAU/WAU/MAU, stickiness, and retention cohorts require a dense one-row-per-active-user-per-day grain that the event fact cannot answer efficiently.

  • SCD2 on user with anonymous-to-known stitching

    User plan, lifecycle stage, and acquisition change over time and pre-login activity must reconcile to the known user as-of each event.

  • Consent flag and hashed identifiers under GDPR/ePrivacy

    Behavioural tracking requires lawful consent; has_marketing_consent is modelled and email/anonymous ids are masked.

Tables in the Web & Product Analytics model

Every table with its grain, columns, types and keys. PK marks a primary key, BK a business key and PII a column classified as personal data, which gets a masking strategy by default.

Fact tables (3)

fct_event

Grain: one row per tracked clickstream event

Clickstream transaction fact — the atomic event grain for funnel and behaviour analytics.

ColumnTypeKeys
event_keybigintPK
date_keybigint
user_keybigint
page_keybigint
device_keybigint
geo_keybigint
campaign_keybigint
feature_keybigint
session_idvarchar
event_idvarchar
event_namevarchar
event_categoryvarchar
event_timestamptimestamp
event_countsmallint
event_valuedecimal
is_conversionboolean

fct_session

Grain: one row per user session

Session-grain fact aggregating events for engagement, bounce, and conversion analytics.

ColumnTypeKeys
session_keybigintPK
date_keybigint
user_keybigint
device_keybigint
geo_keybigint
campaign_keybigint
session_idvarchar
landing_page_idvarchar
exit_page_idvarchar
referrer_hostvarchar
session_start_timestamptimestamp
duration_secondsinteger
page_view_countsmallint
event_countsmallint
is_bounceboolean
is_convertedboolean
is_authenticatedboolean

fct_daily_active_users

Grain: one row per active user per day (periodic snapshot)

Daily activity snapshot — one row per active user per day for DAU/WAU/MAU, stickiness, and retention cohorts.

ColumnTypeKeys
date_keybigint
user_keybigint
device_keybigint
geo_keybigint
session_countsmallint
event_countinteger
active_minutesinteger
feature_adoption_countsmallint
is_activeboolean
is_new_userboolean
is_returning_userboolean
days_since_signupinteger

Dimension tables (7)

dim_date

Grain: one row per calendar day

ColumnTypeKeys
date_keybigintPK
full_datedateBK
day_of_weeksmallint
week_numbersmallint
month_numbersmallint
quartersmallint
yearsmallint
is_weekendboolean

dim_user

Grain: one row per user per SCD2 version

SCD type 2

ColumnTypeKeys
user_keybigintPK
user_idvarcharBK
anonymous_idvarcharPII
emailvarcharPII
account_typevarchar
plan_tiervarchar
signup_datedate
acquisition_channelvarchar
lifecycle_stagevarchar
is_internalboolean
has_marketing_consentboolean

dim_page

Grain: one row per page/screen

ColumnTypeKeys
page_keybigintPK
page_idvarcharBK
page_pathvarchar
page_titlevarchar
page_typevarchar
sectionvarchar
is_conversion_pageboolean

dim_device

Grain: one row per device/browser profile

ColumnTypeKeys
device_keybigintPK
device_codevarcharBK
device_typevarchar
operating_systemvarchar
os_versionvarchar
browservarchar
browser_versionvarchar
app_versionvarchar

dim_geo

Grain: one row per geographic location

ColumnTypeKeys
geo_keybigintPK
geo_codevarcharBK
countryvarchar
country_codevarchar
regionvarchar
cityvarchar
timezonevarchar

dim_campaign

Grain: one row per acquisition campaign

ColumnTypeKeys
campaign_keybigintPK
campaign_idvarcharBK
campaign_namevarchar
utm_sourcevarchar
utm_mediumvarchar
utm_campaignvarchar
channel_groupvarchar

dim_feature

Grain: one row per product feature

ColumnTypeKeys
feature_keybigintPK
feature_idvarcharBK
feature_namevarchar
feature_areavarchar
release_stagevarchar
is_premiumboolean

Relationships

Each relationship is a foreign key on the first table referencing the second.

  • fct_event.date_key → dim_date (many-to-one)
  • fct_event.user_key → dim_user (many-to-one)
  • fct_event.page_key → dim_page (many-to-one)
  • fct_event.device_key → dim_device (many-to-one)
  • fct_event.geo_key → dim_geo (many-to-one)
  • fct_event.campaign_key → dim_campaign (many-to-one)
  • fct_event.feature_key → dim_feature (many-to-one)
  • fct_session.date_key → dim_date (many-to-one)
  • fct_session.user_key → dim_user (many-to-one)
  • fct_session.device_key → dim_device (many-to-one)
  • fct_session.geo_key → dim_geo (many-to-one)
  • fct_session.campaign_key → dim_campaign (many-to-one)
  • fct_daily_active_users.date_key → dim_date (many-to-one)
  • fct_daily_active_users.user_key → dim_user (many-to-one)
  • fct_daily_active_users.device_key → dim_device (many-to-one)
  • fct_daily_active_users.geo_key → dim_geo (many-to-one)

Related templates

All templates →
Start for $1

From requirements to AI-ready context, in one platform.

Describe your business in a conversation, start from a template or connect your own database. Your first model is ready in minutes.

Get startedBook a demo

Plans from $1/month · cancel any time