Langzaam veranderende dimensies implementeren
Dimensiegegevens worden in de loop van de tijd gewijzigd. Klanten verplaatsen naar nieuwe steden, producten worden hernoemd en werknemers worden overgedragen tussen afdelingen. Een primaire rol van een datawarehouse is om het verleden nauwkeurig te beschrijven, dus u hebt een strategie nodig voor het afhandelen van deze wijzigingen. Langzaam veranderende dimensiepatronen (SCD) bepalen hoe uw dimensionale model reageert wanneer de brongegevens worden gewijzigd.
SCD-typen begrijpen
Verschillende bedrijfsvereisten vragen om verschillende benaderingen voor het bijhouden van wijzigingen. De volgende SCD-typen variëren van het negeren van wijzigingen volledig tot het onderhouden van volledige historische records.
Type 0: Origineel behouden
Type 0 behoudt de oorspronkelijke waarde en staat nooit wijzigingen toe. Gebruik Type 0 voor vaste referentiegegevens die niet mogen worden gewijzigd, zoals een oorspronkelijke kredietscore op het moment van de toepassing of een geboortedatum.
Type 1: Overschrijven
Typ 1 overschrijft de bestaande waarde met de nieuwe waarde. Er wordt geen geschiedenis bijgehouden. Deze methode is geschikt wanneer:
- De wijziging is een correctie van een fout.
- Historische nauwkeurigheid voor het gewijzigde kenmerk is niet belangrijk.
- U hebt het eenvoudigste onderhoud nodig.
Als het e-mailadres van een klant bijvoorbeeld wordt gewijzigd, vervangt een type 1-update het oude e-mailbericht door de nieuwe. Alle historische feiten die aan die klant zijn gekoppeld, weerspiegelen nu het huidige e-mailadres.
Opmerking
Wijzigingen in het type 1 kunnen van invloed zijn op historische analyse. Als een verkoper opnieuw wordt toegewezen aan een nieuwe regio en u de regio overschrijft, worden alle eerdere verkopen weergegeven onder de nieuwe regio. Overweeg of dit gedrag voldoet aan uw rapportagevereisten.
Type 2: Nieuwe rij toevoegen
Met type 2 wordt een nieuwe rij ingevoegd voor elke wijziging, waarbij de volledige geschiedenis wordt behouden. De oorspronkelijke rij blijft behouden en elke versie van het dimensielid krijgt een eigen surrogaatsleutel. Dit SCD-type is het meest gebruikelijk voor kenmerken waarbij historische nauwkeurigheid van belang is.
Voor een implementatie van type 2 zijn extra kolommen vereist:
| Kolom | Purpose |
|---|---|
| Begindatum | Wanneer deze versie van kracht werd |
| Einddatum | Wanneer deze versie is vervangen (huidige rijen gebruiken een verre toekomstige datum, zoals 9999-12-31) |
| Is huidige status van de vlag | Identificeert de actieve versie voor opzoekacties tijdens het laden van feitentabellen |
Wanneer er een wijziging optreedt, start het ETL-proces:
- Hiermee wordt de bestaande huidige rij bijgewerkt door de einddatum in te stellen en de huidige vlag te wijzigen in
FALSE. - Hiermee voegt u een nieuwe rij in met de nieuwe kenmerkwaarden, een nieuwe surrogaatsleutel, de begindatum ingesteld op de wijzigingsdatum en de huidige vlag ingesteld op
TRUE.
Type 2 is essentieel wanneer u het verleden nauwkeurig moet analyseren. Als u bijvoorbeeld de verkoop per regio wilt rapporteren waaraan een verkoper is toegewezen op het moment van elke verkoop, behoudt type 2 die context.
Type 3: Nieuwe kolom toevoegen
Typ 3 voegt een kolom toe om de vorige waarde naast de huidige waarde op te slaan. Met deze benadering wordt een beperkte geschiedenis bijgehouden, meestal alleen de meest recente wijziging.
Een dimensie van verkoopmedewerkers kan bijvoorbeeld zowel CurrentSalesRegion als PreviousSalesRegion kolommen bevatten. Wanneer de verkoper wordt verplaatst, verschuift de huidige regio naar de vorige kolom en wordt de nieuwe regio actueel.
Type 3 is handig wanneer u alleen de huidige status hoeft te vergelijken met één eerdere status. Het wordt echter niet vaak gebruikt omdat u alle tussenliggende wijzigingen kwijtraakt.
Type 6: Hybride benadering
Type 6 combineert elementen van Type 1, Type 2 en Type 3. Het onderhoudt de volledige versiegeschiedenis (Type 2) en slaat ook de huidige waarde op elke rij op (Type 1 overschrijft op een specifieke kolom) en de vorige waarde (Type 3).
Met deze hybride versie hebben query's toegang tot zowel de historische als de huidige context vanuit elke versierij. Het voegt echter complexiteit toe aan het ETL-proces, omdat elke rij voor een dimensielid moet worden bijgewerkt wanneer de huidige waarde wordt gewijzigd.
Het juiste SCD-type kiezen
Gebruik de volgende richtlijnen om het juiste SCD-type te selecteren:
| Requirement | Aanbevolen type |
|---|---|
| Opgeloste referentiegegevens die nooit worden gewijzigd | Type 0 |
| Correcties of geschiedenis niet nodig | Type 1 |
| Volledige historische nauwkeurigheid vereist | Type 2 |
| Alleen huidige versus vorige vergelijking nodig | Type 3 |
| Men moet zowel huidige als historische weergaven van elke rij hebben | Type 6 |
Overweeg de afwegingen bij de implementatie
Elk SCD-type heeft gevolgen voor kosten en complexiteit:
- Opslag: De dimensies van het type 2 worden in de loop van de tijd groter naarmate nieuwe versierijen zich verzamelen. Plan een betere opslag en bedenk hoe de groei van invloed is op de prestaties van query's.
- Complexiteit van queries: Voor het samenvoegen van feitentabellen aan type 2-dimensies moet worden afgestemd op effectieve datums of gebruikmaken van de huidige indicator, wat de complexiteit van queries verhoogt.
- ETL-complexiteit: Type 2 en Type 6 vereisen meer geavanceerde ETL-logica om wijzigingen te detecteren, oude rijen te laten verlopen en nieuwe versies in te voegen.
- Bedrijfsvereisten: De keuze van het SCD-type moet worden gebaseerd op bedrijfsbehoeften. Houd de geschiedenis niet bij waar deze niet nodig is en sla het bijhouden van geschiedenis niet over waar deze zich bevindt.
Aanbeveling
Vermijd het toepassen van type 2-tracering op elk kenmerk in een dimensie. Houd alleen de geschiedenis bij op kenmerken waarvoor het bedrijf historische analyses vereist. Gebruik Type 1 voor de rest om de dimensie beheersbaar te houden.