Modelowanie danych marketingowych
Czyste, połączone tabele
Modelowanie danych marketingowych to bezpłatna lekcja Digital Marketing Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Digital Marketing Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Digital Marketing Academy zawiera 4 lekcji w sumie.
Po co w ogóle modelować dane
Surowe tabele konektorów są nieuporządkowane: mają niespójne nazwy kolumn, mieszane waluty, różny poziom szczegółowości i specyfikę poszczególnych platform. Bezpośrednie odpytywanie takich tabel prowadzi do nieprawidłowych i niemożliwych do odtworzenia wyników.
Modelowanie danych to dyscyplina polegająca na przekształcaniu surowych wierszy w czyste, spójne i gotowe do użycia przez biznes tabele. To tutaj ROAS, konwersja i przychód są definiowane raz i poprawnie, dzięki czemu każdy raport pokazuje te same wartości.
Schemat gwiazdy
Dominującym modelem analitycznym jest schemat gwiazdy: centralna tabela faktów zawierająca mierzalne zdarzenia, otoczona tabelami wymiarów, które je opisują. Fakty przechowują liczby (wydatki, kliknięcia, przychody), a wymiary — kontekst (kampania, data, kanał, klient).
Taki układ jest intuicyjny dla marketerów i wydajny dla narzędzi BI, które łączą jedną tabelę faktów z kilkoma wymiarami, aby analizować metryki według dowolnego atrybutu.
dim_date
|
dim_channel -- fct_ad_spend -- dim_campaign
|
dim_account
fct_ad_spend (facts): impressions, clicks, cost, conversions
dims: who / what / when contextTabele faktów a wymiary
Tabela faktów jest długa i addytywna: zawiera jeden wiersz na zdarzenie lub na dzień i kampanię, wraz z liczbowymi miarami, które można sumować. Tabela wymiarów jest szeroka i opisowa: zawiera jeden wiersz na kampanię lub klienta oraz atrybuty, według których można filtrować i grupować dane.
Prosta zasada jest następująca: jeśli daną wartość można zsumować za pomocą SUM, jest faktem; jeśli można według niej grupować za pomocą GROUP BY, jest wymiarem. Wydatki są faktem, a nazwa kampanii — wymiarem.
fct_ad_spend dim_campaign
---------------- ----------------
date campaign_id (PK)
campaign_id (FK) campaign_name
cost <-SUM-> channel
clicks <-SUM-> objective
conversions start_dateZiarnistość: pierwsza decyzja
Ziarnistość określa, co reprezentuje jeden wiersz tabeli faktów. Zadeklarowanie jej w pierwszej kolejności jest najważniejszą decyzją w modelowaniu danych. Mieszanie poziomów szczegółowości — na przykład wierszy dziennych z sumami narastającymi — prowadzi do podwójnego zliczania i zniekształca każdą kolejną metrykę.
Należy opisać ziarnistość prostym językiem: jeden wiersz na kampanię na dzień. Każda kolumna musi być wtedy prawdziwa na tym poziomie szczegółowości, a każde ładowanie musi go respektować.
Declared grain: one row per campaign per day
-- enforce uniqueness on the grain
SELECT date, campaign_id, COUNT(*)
FROM fct_ad_spend
GROUP BY 1,2
HAVING COUNT(*) > 1; -- must return 0 rowsModele stagingowe
Przed utworzeniem faktów i wymiarów należy zbudować modele stagingowe: po jednym dla każdej tabeli źródłowej, zmieniając nazwy kolumn na standardowe, rzutując typy i ujednolicając jednostki (centy na dolary, daty w UTC). Jeden model stagingowy odwzorowuje jedną tabelę surową — i nic więcej.
Staging jest warstwą oczyszczania danych. Izoluje specyfikę źródeł, dzięki czemu modele warstwy biznesowej nie muszą wiedzieć, że Meta nazywa tę wartość wydatkami, a Google — kosztem.
-- stg_google_ads__spend
SELECT
date AS spend_date,
campaign_id,
'google' AS channel,
cost_micros / 1000000 AS cost, -- micros -> dollars
clicks,
conversions
FROM raw.google_ads__campaign_stats;Łączenie kanałów
Każda platforma reklamowa raportuje dane w inny sposób, ale po przejściu przez staging mają one wspólny kształt. Następny model łączy je w jedną tabelę faktów dotyczących wydatków we wszystkich kanałach — podstawę zagregowanego raportowania.
To właśnie ta jedna tabela umożliwia obliczanie całkowitego ROAS. Ponieważ każdy kanał ma te same kolumny, jedno zapytanie może jednocześnie zsumować wydatki w Google, Meta i TikTok.
-- fct_ad_spend: union all channels
SELECT * FROM stg_google_ads__spend
UNION ALL
SELECT * FROM stg_meta_ads__spend
UNION ALL
SELECT * FROM stg_tiktok_ads__spend;
-- now: SUM(cost) GROUP BY channel worksUjednolicone wymiary
W analizie obejmującej wiele kanałów wymiary muszą być ujednolicone: wspólne dim_date i dim_channel, z którymi każda tabela faktów łączy się w identyczny sposób. Wtedy „przychód według miesiąca i kanału” oznacza to samo niezależnie od tego, czy źródłem są reklamy, e-mail czy witryna.
Ujednolicone wymiary pozwalają umieścić wydatki i przychody obok siebie na jednym wykresie. Bez nich złączenia nie pasują do siebie, a sumy po cichu przestają być zgodne.
Conformed dims shared across facts:
dim_date -> joined by every fact on date
dim_channel -> 'google','meta','email','organic'
dim_campaign -> unified campaign keys
-> spend and revenue line up on the same axesAtrybucja w SQL
Atrybucja przypisuje punktom styku zasługę za konwersję. Atrybucja ostatniego kliknięcia jest najprostsza: ostatnie źródło marketingowe przed konwersją otrzymuje pełną zasługę. Modele pierwszego kliknięcia, liniowy i pozycyjny rozdzielają tę zasługę w inny sposób.
W hurtowni danych atrybucję implementuje się jako model, a nie jako czarną skrzynkę platformy. Korzystając z danych o zdarzeniach GA4, można uporządkować punkty styku dla każdego użytkownika za pomocą funkcji okienkowych, zastosować dowolną regułę, a następnie rzetelnie porównać wyniki różnych modeli.
-- last non-direct click per conversion
WITH touches AS (
SELECT user_id, channel, event_time,
ROW_NUMBER() OVER (PARTITION BY user_id
ORDER BY event_time DESC) AS rn
FROM web_touchpoints
WHERE channel <> 'direct'
)
SELECT channel, COUNT(*) FROM touches WHERE rn=1
GROUP BY 1;Wolno zmieniające się wymiary
Atrybuty wymiarów zmieniają się z czasem: zmienia się osoba odpowiedzialna za budżet kampanii, a poziom klienta zostaje podniesiony. Wolno zmieniający się wymiar typu 2 zachowuje historię, dodając nowy wiersz z datami obowiązywania zamiast nadpisywać poprzedni.
Ma to znaczenie dla poprawnego raportowania w określonym momencie. Aby wiedzieć, w jakim segmencie znajdował się klient w chwili konwersji, potrzebna jest wersja wymiaru obowiązująca w tamtym czasie, a nie wersja dzisiejsza.
dim_customer (SCD Type 2)
cust_id tier valid_from valid_to is_current
101 free 2026-01-01 2026-04-01 false
101 pro 2026-04-01 9999-12-31 true
-- join on event_date BETWEEN valid_from AND valid_toTestowanie i dokumentacja
Modele są kodem, dlatego należy je testować. Narzędzia takie jak dbt pozwalają sprawdzać, czy klucze są unikatowe i niepuste, czy wartości kanałów należą do dozwolonego zbioru oraz czy relacje między tabelami są poprawne.
Testy wykrywają dryf schematu i nieprawidłowe złączenia, zanim problemy dotrą do pulpitu. W połączeniu z automatycznie generowaną dokumentacją i informacjami o pochodzeniu danych sprawiają, że model jest godny zaufania i łatwy do wdrożenia, zamiast pozostawać podatną na awarie czarną skrzynką.
# dbt schema test
models:
- name: fct_ad_spend
columns:
- name: campaign_id
tests: [not_null]
- name: channel
tests:
- accepted_values:
values: ['google','meta','tiktok']Marty: warstwa końcowa
Najwyższą warstwę stanowią marty: gotowe dla biznesu tabele dostosowane do konkretnych odbiorców, takie jak mart marketing_performance, który już łączy wydatki z przychodami i oblicza ROAS dla każdego kanału i dnia.
Narzędzia BI odczytują dane wyłącznie z martów. Dzięki wcześniejszemu łączeniu i agregowaniu danych w tej warstwie pulpity pozostają szybkie i tanie, a każdy analityk korzysta z tych samych poprawnych definicji.
-- marts.marketing_performance (1 row / day / channel)
SELECT s.spend_date, s.channel,
SUM(s.cost) AS spend,
SUM(r.revenue) AS revenue,
SAFE_DIVIDE(SUM(r.revenue), SUM(s.cost)) AS roas
FROM fct_ad_spend s
LEFT JOIN fct_revenue r USING (spend_date, channel)
GROUP BY 1,2;Szybkie sprawdzenie
Budują Państwo tabelę faktów dotyczących skuteczności reklam i muszą uniknąć podwójnego zliczania. Co należy zadeklarować jako najważniejszą rzecz przed zapisaniem jakichkolwiek kolumn?
Podsumowanie
Modelowanie przekształca nieuporządkowane surowe tabele w wiarygodne dane gotowe do wykorzystania w biznesie, korzystając z warstw: staging oczyszcza i ujednolica każde źródło, tabele faktów i ujednolicone wymiary tworzą schemat gwiazdy, a marty wykonują wstępne złączenia na potrzeby BI.
Najpierw należy określić ziarno danych, łączyć kanały za pomocą UNION, aby uzyskać zagregowane metryki, implementować atrybucję i historię SCD Type 2 w SQL oraz testować każdy model, tak aby błędne liczby były wyraźnie sygnalizowane, zamiast trafiać do dashboardu.
Ucz się Digital Marketing Academy dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 63
- Lekcje
- 239
Często zadawane pytania
Czy lekcja „Modelowanie danych marketingowych” jest bezpłatna?
Tak — pełny tekst „Modelowanie danych marketingowych” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Digital Marketing Academy, przejdź na CoddyKit PRO. Kurs Digital Marketing Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Modelowanie danych marketingowych”?
Czyste, połączone tabele Ćwiczysz Digital Marketing Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Digital Marketing Academy?
Nie wymagamy żadnego doświadczenia. Digital Marketing Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Modelowanie danych marketingowych”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Digital Marketing Academy?
Tak. Każda lekcja Digital Marketing Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Dlaczego hurtownia danych
- ETL i konektory
- Modelowanie danych marketingowych
- Pulpity nawigacyjne wspierające działania