Carte
The Data Warehouse Toolkit
de Ralph Kimball, Margy Ross · 2013 · 2 fișe de lectură
2 fișe
The Data Warehouse Toolkit · 2013
Tip 1 suprascrie, tip 2 adaugă un rând cu perioadă, tip 3 ține o coloană cu valoarea anterioară.
Un client se mută din Cluj în Iași. Ce faci cu rândul lui din dimensiunea Client? Tip 1: suprascrii. Simplu, fără istoric — iar vânzările din 2023 apar brusc în Iași, deci rapoartele vechi se schimbă. Bun pentru corectarea greșelilor și pentru atribute fără valoare istorică. Tip 2: adaugi un rând nou, cu o cheie surogat nouă, cu valid_from și valid_to, și marchezi care e curent. Faptele vechi rămân legate de versiunea de atunci, faptele noi de versiunea nouă; raportul din 2023 rămâne exact cum era. Tip 3: păstrezi o coloană „valoarea anterioară” — un singur pas de istoric, util la realinieri de teritorii de vânzări, unde vrei să vezi ambele împărțiri deodată. Alegerea se face per atribut, nu per tabel: aceeași dimensiune poate avea coloane tip 1 și tip 2. Două capcane. Prima: join-ul faptelor pe cheia naturală în loc de surogat, care dublează rândurile de câte versiuni are clientul. A doua: un „update” de tip 1 rulat din greșeală pe o dimensiune tip 2, care rescrie toate versiunile deodată și șterge istoricul fără să dea nicio eroare.
“Schimbările de tip 2 într-o dimensiune cu schimbare lentă adaugă un rând nou în dimensiune, cu valorile actualizate ale atributelor. Asta cere generalizarea cheii primare a dimensiunii dincolo de cheia naturală sau durabilă, pentru că vor exista, potențial, mai multe rânduri care descriu fiecare membru.”
The Data Warehouse Toolkit · 2013
Granularitatea e o propoziție: «un rând = o linie de bon, într-un magazin, într-o zi».
Cei patru pași ai lui Kimball sunt în ordinea asta dintr-un motiv. Procesul de afaceri e un lucru care se întâmplă — o vânzare, o plată, un transport — nu un departament. Granularitatea e propoziția care spune ce reprezintă un rând din tabelul de fapte: „o linie de bon, într-un magazin, într-o zi”. Abia apoi vin dimensiunile — cine, ce, unde, când, contextul descriptiv — și faptele, măsurile numerice care se pot aduna la granularitatea aleasă. Rezultatul e schema stea: un tabel de fapte îngust și lung, cu chei străine spre dimensiuni late și denormalizate, fiecare cu o cheie surogat (un întreg generat de depozit, nu codul din sursă). Greșeala clasică e să amesteci granularități — linii de comandă și totaluri de comandă în același tabel — și să obții sume duble în primul raport. A doua greșeală e să ai trei dimensiuni „Client” ușor diferite; dimensiunile conformate, aceleași pentru toate procesele, sunt ce face două rapoarte comparabile.
“Alege procesul de afaceri. Declară granularitatea. Identifică dimensiunile. Identifică faptele.”