Fact table
La tabella user-facing del warehouse in cui ogni riga è un evento: la forma pulita e arricchita di un log.
Una fact table è una tabella user-facing di un data warehouse in cui ogni riga corrisponde a un evento: qualcosa che è successo, un’azione loggata. È la forma pulita e usabile di un log, e per convenzione il suo nome inizia con fct_ (fct_events, fct_comments). Il suo complemento è la dimension table, in cui ogni riga corrisponde a un’entità. Il test di Sahar Massachi per distinguerle: una riga per sostantivo è una dimension, una riga per “è successa una cosa” è una fact.1
Cosa contiene
Il tratto distintivo di una buona fact table, secondo Massachi, è fornire tutto il contesto necessario ad analizzare l’evento senza costringere a nuovi join. Un log puro come “l’utente Z ha commentato il post X al tempo Y” diventa una fct_comment con campi come: id del commentatore, id del commento, id del post, orario, orario nel fuso del commentatore, testo del commento, testo del post, id del proprietario del post, fuso orario del proprietario. Alcuni campi sono tecnicamente ridondanti, perché ricavabili da una dimension con un join, ma averli a portata di mano fa risparmiare tempo a chi interroga: lo stesso principio di tutto il warehouse moderno, spendere storage ed elaborazione notturna per comprare fluidità di analisi.1
La fact datestampata
Nella Parte 2 della serie Massachi usa una fct_post_views come esempio di fact con date stamping: ogni evento porta la propria ds. Per ricostruire il contesto storico di un evento (quali relazioni erano attive al momento della visualizzazione) si incrocia la fact con le dimension storiche joinando su ds: la fact ha ds='2024-10-05', la dimension delle relazioni ha la riga con la stessa ds, e il match è esatto, senza BETWEEN né colonne di validità. Per i log si prendono gli eventi di ieri e si scrive ds={oggi}; per gli snapshot si copia lo snapshot intero con ds={oggi}. Il backfilling delle fact segue la stessa meccanica del run giornaliero.2
Le due tassonomie
Sulla classificazione delle fact table esistono due assi complementari, descritti in un articolo di Sleekdatasolutions su Medium:3
- a livello colonna, i tipi di fatti: come le misure numeriche si comportano all’aggregazione (vedi fatti additivi, semi-additivi e non additivi);
- a livello tabella, i tipi di fact table: come gli eventi sono rappresentati e registrati (transaction, aggregate, periodic snapshot, accumulating snapshot, factless).
Il pattern is_first_record / is_latest_record
Il tutorial di Metabase su analytics engineering per fact table mostra una famiglia di pattern alternativa, orientata al self-service: invece di marcare ogni riga con ds, la fact porta flag come is_first_record e is_latest_record che segnano la prima e l’ultima riga di ogni entità. La stessa tabella risponde così sia a domande storiche (nuovi account per mese) sia a domande correnti (account attivi oggi) senza join con le dimension. Il caricamento è incrementale: si confronta lo snapshot corrente con lo storico e si inseriscono solo le righe cambiate. È un approccio complementare, non in conflitto, con il date stamping di Massachi.4
Voci correlate
- Dimension table — il complemento: una riga per entità
- Tipi di fact table — la classificazione a livello tabella
- Fatti additivi, semi-additivi e non additivi — la classificazione a livello colonna
- Date stamping — la colonna
dssu ogni evento - Analytics engineering — il processo che progetta le fact per l’usabilità
- Data warehouse — il sistema di cui le fact sono output
- Portale: Data engineering
Bibliografia e sitografia
- Sahar Massachi, The data warehouse setup no one taught you (Stop using Slowly-changing Dimensions! Part 1), DataExpert.io, 24 ottobre 2025. blog.dataexpert.io
- Sahar Massachi, SCD-2 considered harmful! (Stop using Slowly-changing Dimensions! Part 2), DataExpert.io, 4 novembre 2025. blog.dataexpert.io
- Sleekdatasolutions, How to Design a Perfect Fact Table — Deep Dive into Fact Types & Fact Table Types, Medium, 3 aprile 2026. medium.com
- Metabase, Analytics engineering for fact tables, Metabase Learn. metabase.com