Skip to content

Read BigQuery and Dataform data

Follow the layers

  1. Raw mempertahankan bentuk sumber dan provenance.
  2. Staging memilih environment, merapikan tipe, memecah field penting, dan melakukan dedup sesuai kontrak sumber.
  3. Core / base menyusun event, session, page visit, dan dimensi dasar.
  4. Core / enrichment menambahkan konteks interaksi dan hubungan antarrecord.
  5. Core / attribution menyiapkan konteks campaign/acquisition.
  6. master_analytics menghubungkan kedua sumber dengan WhatsApp, customer profiling, dan main marketing.

Mart khusus diserahkan kepada tim pemakai. Jangan menjumlahkan event bmlytics dan mirror GA sebagai dua aksi.

Raw is not always a physical copy

Pada release production 18 September 2026, raw_ga.events adalah view atas native export analytics_546016493.events_*. Native GA tetap memiliki tabel daily/intraday; daily diprioritaskan pada proses staging. staging_ga.stg_events hanya mengambil hostname production bumame.com dan www.bumame.com.

raw_bmlytics.events dan raw_bmlytics.journeys membaca physical dataset raw_landing_analytics_production. Dataset staging lama tetap disimpan. Nama staging_bmlytics dan staging_ga menjelaskan lapisan transformasi, bukan environment aplikasi staging.

Workflow Dataform landing-analytics-production / production-15min berjalan setiap 15 menit. Release production mengompilasi branch main setiap jam. Jangan mengaktifkan kembali workflow staging lama yang menulis tabel canonical yang sama.

Raw bmlytics mempertahankan payload JSON. Di staging_bmlytics.stg_events, field penting menjadi kolom bertipe: occurred_at TIMESTAMP, position INT64, depth_percent INT64, serta identitas dan UTM STRING. Analyst tidak perlu melakukan JSON parsing berulang untuk field tersebut.

Raw payload pathStaging column
$.anonymous_idanonymous_id
$.properties.positionposition
$.properties.statusform_status
$.acquisition.utm_campaignutm_campaign
$.whatsapp_click_id atau legacy $.bm_click_idwhatsapp_click_id

Table catalog

Daftar berikut diambil dari definisi SQLX lokal. Ini menjelaskan kontrak source; keberadaan, freshness, dan jumlah baris live harus diverifikasi saat UAT.

DatasetTable / viewContract
core_bmlyticsdim_base_componentsObserved page/component identifiers, including CMS button Tracking IDs. New IDs have generated display labels, not captured button text. No historical tracking settings.
core_bmlyticsdim_base_pagesOne installed page type. Individual content uses page_entity_id.
core_bmlyticsfact_attribution_session_campaignsOne session acquisition from earliest observed event. No invented attribution window.
core_bmlyticsfact_base_eventsOne website event. Browser identity is not customer identity.
core_bmlyticsfact_base_page_visitsOne observed page visit, scoped to browser/session/environment.
core_bmlyticsfact_base_sessionsOne browser session. Observed span is not active engagement time.
core_bmlyticsfact_base_whatsapp_referencesOne prepared CRM WhatsApp reference.
core_bmlyticsfact_enrichment_component_visitsOne component/content/position per page visit. No impression means unobserved, not proof of disabled tracking.
core_bmlyticsfact_enrichment_page_transitionsOne observed page visit with its next observed page; NULL destination is not proven exit.
core_bmlyticsfact_enrichment_page_visitsOne page visit with measured interactions; no inferred reading time.
core_gadim_base_streamsOne observed GA stream.
core_gafact_attribution_first_user_acquisitionOne GA property/user with native first-user acquisition.
core_gafact_attribution_session_acquisitionOne GA session with native last-click session acquisition; never substituted with first-user traffic.
core_gafact_base_eventsOne GA event; bm_event_id links mirrored website events.
core_gafact_base_sessionsOne identifiable GA session scoped to property, stream and user.
core_gafact_enrichment_event_contextOne event with extracted device, page, location and engagement context.
core_gafact_enrichment_session_contextOne GA session with first observed page/device context.
master_analyticsfact_attribution_conversion_creditsOne canonical main marketing conversion/touchpoint credit. Retains every credit for linked orders; no new attribution model.
master_analyticsfact_enrichment_customer_linksOne confirmed non-ambiguous customer mapping and its evidence method. No raw phone or customer name exported.
master_analyticsfact_enrichment_customer_touchpointsOne directly evidenced customer event/reference. Anonymous history is not silently assigned to a person.
master_analyticsfact_enrichment_event_linksOne observed event mirror pair; do not add mirror events to website totals.
master_analyticsfact_enrichment_identity_linksOne observed browser/GA identity pair, not cross-device customer identity.
master_analyticsfact_enrichment_order_contextOne company/transaction using main marketing values; multiple session links do not multiply revenue.
master_analyticsfact_enrichment_whatsapp_message_linksOne exact reference/message link. Production Yellow is explicitly excluded for staging references.
raw_bmlyticseventsProduction source records; raw at-least-once delivery. Physical source retained.
raw_bmlyticsjourneysProduction source records; raw at-least-once delivery. Physical source retained.
raw_gaeventsNative GA export rows with hostname/environment labels, including daily and intraday provenance.
staging_bmlyticsstg_eventsOne consented event per event ID. Optional event-specific values remain NULL.
staging_bmlyticsstg_whatsapp_referencesOne prepared WhatsApp reference; does not prove a message was sent.
staging_gastg_eventsOne GA event after daily/intraday selection and mirror dedup. Legitimate standard event multiplicity retained.

Interpret the results

  • Traffic dan perjalanan halaman: gunakan base events, sessions, page visits, lalu page transitions.
  • Performa UI: component visits dan event klik; denominator harus sesuai exposure, bukan sekadar seluruh traffic.
  • Campaign: session campaign/acquisition; pisahkan first-user acquisition dari session acquisition GA.
  • WhatsApp: references → message links → customer links → order context.
  • Revenue attribution: conversion credits dari main marketing; jangan menggandakan nilai order setelah join one-to-many.

Unique visitor/session tidak boleh dijumlahkan dari beberapa kelompok yang saling tumpang tindih. Hitung distinct kembali pada grain yang dibutuhkan. Null berarti nilai tidak tersedia, bukan otomatis nol.

Validate before publishing a dashboard

Periksa freshness, duplikasi event ID, environment, unmatched references, cardinality join, dan total revenue sebelum/sesudah join. Uji dengan synthetic fixture terlebih dahulu, lalu bukti end-to-end pada environment yang disepakati.

Bumame Engineering · bmlytics · Local implementation guide