0Pricing
Digital Marketing Academy · Lezione

Modellare i dati di marketing

Tabelle pulite e unite

Modellare i dati di marketing è una lezione Digital Marketing Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Digital Marketing Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Digital Marketing Academy include 4 lezioni in totale.

Perché modellare i dati

Le tabelle raw dei connettori sono disordinate: nomi di colonne incoerenti, valute miste, granularità diverse e peculiarità specifiche delle piattaforme. Interrogarle direttamente produce numeri errati e non riproducibili.

La modellazione dei dati è la disciplina che trasforma le righe raw in tabelle pulite, coerenti e pronte per l'uso aziendale. È il livello in cui ROAS, conversioni e ricavi vengono definiti una sola volta e correttamente, così ogni report presenta gli stessi risultati.

Lo schema a stella

Il modello analitico più diffuso è lo schema a stella: una tabella dei fatti centrale contenente eventi misurabili, circondata da tabelle delle dimensioni che li descrivono. I fatti contengono numeri, come spesa, clic e ricavi; le dimensioni contengono il contesto, come campagna, data, canale e cliente.

Questa struttura è intuitiva per chi si occupa di marketing ed efficiente per gli strumenti di BI, che uniscono un fatto a diverse dimensioni per analizzare le metriche in base a qualsiasi attributo.

        dim_date
           |
dim_channel -- fct_ad_spend -- dim_campaign
           |
        dim_account

fct_ad_spend (facts): impressions, clicks, cost, conversions
dims: who / what / when context

Fatti e dimensioni

Una tabella dei fatti è lunga e additiva: contiene una riga per evento o per combinazione giorno-campagna, con misure numeriche da sommare. Una tabella delle dimensioni è ampia e descrittiva: contiene una riga per campagna o cliente, con attributi da utilizzare per filtrare e raggruppare.

La regola è questa: se lo si utilizzerebbe in SUM, è un fatto; se lo si utilizzerebbe in GROUP BY, è una dimensione. La spesa è un fatto; il nome della campagna è una dimensione.

fct_ad_spend         dim_campaign
----------------     ----------------
date                 campaign_id (PK)
campaign_id (FK)     campaign_name
cost      <-SUM->     channel
clicks    <-SUM->     objective
conversions          start_date

Granularità: la prima decisione

La granularità indica ciò che rappresenta una singola riga di una tabella dei fatti. Dichiararla per prima è la decisione di modellazione più importante. Mescolare granularità diverse, come righe giornaliere e totali cumulativi, produce doppi conteggi e altera ogni metrica a valle.

Specifichi la granularità in linguaggio semplice: una riga per campagna al giorno. A quel punto ogni colonna deve essere valida a quella granularità e ogni caricamento deve rispettarla.

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 rows

Modelli di staging

Prima dei fatti e delle dimensioni, costruisca i modelli di staging: uno per ogni tabella sorgente, rinominando le colonne secondo uno standard, convertendo i tipi e uniformando le unità, ad esempio da centesimi a dollari e le date in UTC. Un modello di staging corrisponde a una tabella raw, nient'altro.

Lo staging è il livello di pulizia. Isola le peculiarità delle fonti, così i data mart a valle non devono sapere che Meta utilizza il campo spend e Google il campo cost.

-- 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;

Unire i canali

Ogni piattaforma pubblicitaria produce report diversi, ma dopo lo staging tutte condividono una struttura comune. Il modello successivo le unisce in un'unica tabella dei fatti della spesa multicanale, la base dei report combinati.

È questa tabella unica a rendere possibile il ROAS complessivo. Poiché ogni canale utilizza le stesse colonne, una sola query può sommare contemporaneamente la spesa di Google, Meta e 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 works

Dimensioni conformate

Per l'analisi multicanale, le dimensioni devono essere conformate: una dim_date e una dim_channel condivise, a cui ogni fatto si collega nello stesso modo. In questo modo, "ricavi per mese e per canale" significa la stessa cosa sia che la fonte sia la pubblicità, l'email o il web.

Le dimensioni conformate consentono di affiancare spesa e ricavi in un unico grafico. Senza di esse, le unioni non sono allineate e i totali risultano silenziosamente discordanti.

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 axes

Attribuzione in SQL

L'attribuzione assegna il merito di una conversione ai touchpoint. L'attribuzione last-click è la più semplice: l'ultima fonte di marketing prima della conversione riceve tutto il merito. I modelli first-click, lineare e basato sulla posizione distribuiscono il merito in modo diverso.

In un data warehouse, implementa l'attribuzione come un modello, non come una scatola nera della piattaforma. Con dati di eventi di GA4 può utilizzare funzioni finestra per analizzare i touchpoint di ogni utente e applicare qualsiasi regola, quindi confrontare onestamente i risultati dei diversi modelli.

-- 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;

Dimensioni a variazione lenta

Gli attributi delle dimensioni cambiano nel tempo: cambia il responsabile del budget di una campagna o aumenta il livello di un cliente. Una dimensione a variazione lenta di tipo 2 conserva la cronologia aggiungendo una nuova riga con date di validità invece di sovrascrivere quella esistente.

Questo è importante per ottenere report accurati riferiti a un determinato momento. Per sapere in quale segmento si trovava un cliente quando ha effettuato la conversione, serve la versione della dimensione valida allora, non quella di oggi.

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_to

Test e documentazione

I modelli sono codice, quindi devono essere sottoposti a test. Strumenti come dbt consentono di verificare che le chiavi siano univoche e non nulle, che i valori dei canali appartengano a un insieme accettato e che le relazioni tra le tabelle siano valide.

I test rilevano la deriva dello schema e le unioni errate prima che raggiungano una dashboard. Insieme alla documentazione e alla lineage generate automaticamente, rendono il modello affidabile e facile da comprendere e da estendere, invece di una scatola nera fragile.

# dbt schema test
models:
  - name: fct_ad_spend
    columns:
      - name: campaign_id
        tests: [not_null]
      - name: channel
        tests:
          - accepted_values:
              values: ['google','meta','tiktok']

Marts: il livello finale

Il livello superiore è costituito dai marts: tabelle pronte per l'uso aziendale e strutturate per destinatari specifici, come un mart marketing_performance che unisce già la spesa ai ricavi e calcola il ROAS per canale e per giorno.

Gli strumenti di BI leggono solo dai marts. Eseguendo qui le unioni e le aggregazioni in anticipo, le dashboard rimangono veloci ed economiche e ogni analista utilizza le stesse definizioni corrette.

-- 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;

Controllo rapido

Sta costruendo una tabella dei fatti per le prestazioni pubblicitarie e deve evitare i doppi conteggi. Qual è la cosa più importante da dichiarare prima di scrivere qualsiasi colonna?

Riepilogo

La modellazione trasforma tabelle grezze e disordinate in dati affidabili e pronti per l'uso aziendale attraverso diversi livelli: lo staging pulisce e uniforma ogni sorgente, i fatti e le dimensioni conformate formano uno schema a stella, mentre i mart pre-uniscono tutti i dati per la BI.

Dichiari prima la granularità, unifichi i canali per ottenere metriche combinate, implementi l'attribuzione e lo storico SCD Type 2 in SQL e testi ogni modello, così i numeri errati vengono segnalati subito invece di arrivare a una dashboard.

Domande Frequenti

La lezione «Modellare i dati di marketing» è gratuita?

Sì — il testo completo di «Modellare i dati di marketing» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Digital Marketing Academy, passa a CoddyKit PRO. Il corso Digital Marketing Academy include 4 lezioni in totale.

Cosa imparerò in «Modellare i dati di marketing»?

Tabelle pulite e unite Eserciti Digital Marketing Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Digital Marketing Academy?

Non è richiesta alcuna esperienza precedente. Digital Marketing Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Modellare i dati di marketing»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Digital Marketing Academy?

Sì. Ogni lezione Digital Marketing Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Perché un data warehouse
  2. ETL e connettori
  3. Modellare i dati di marketing
  4. Dashboard che favoriscono l'azione
← Torna a Digital Marketing Academy