Junk-dimensie: wat is het en waarom het alles behalve junk is

Junk-dimensie: wat is het en waarom het alles behalve junk is

Vandaag wil ik het hebben over een datamodelleringsconcept genaamd junk-dimensie . Afgaande op de naam zou je denken dat het een techniek is die denigrerend is en iets dat je zou willen vermijden, maar het is eigenlijk een nuttige benadering.

Ik werkte zelfs aan een vraag van het en een junk-dimensie was hiervoor de perfecte oplossing. Als je het eenmaal ziet en begrijpt, zul je er veel toepassing voor vinden in je eigen werk. Je kunt de volledige video van deze tutorial onderaan deze blog bekijken.

Inhoudsopgave

Wat zijn ongewenste dimensies?

Kimball en Ross's The Data Warehouse Toolkit , een van de bijbels van dimensionale modellering, definieert het als de groepering van typisch lage kardinaliteitsvlaggen en indicatoren . Lage kardinaliteit betekent een klein aantal unieke waarnemingen binnen een bepaald veld.

In ons voorbeeld hebben we een gegevensmodel voor ons bedrijf van het bouwen van pc's op maat. Het datamodel is met betrekking tot bestellingen en facturen. We hebben ook een aantal vlaggen waar we het type processor , type torenconfiguratie (Compact of Full) en doel (Gaming of Workstation) kunnen vastleggen.

Junk-dimensie: wat is het en waarom het alles behalve junk is

Junk-afmetingen definiëren met behulp van de Kitchen Junk Drawer-analogie

Als je naar elk van deze velden kijkt, zijn er slechts twee unieke waarnemingen in elk veld. Dit is wat Kimball een lage cardinaliteitsvlag zou noemen . Hij zegt dat we door een abstracte dimensie te creëren vlaggen uit de feitentabel verwijderen en ze in een bruikbaar dimensionaal kader plaatsen.

De analogie van de rommellade in de keuken voor een rommeldimensie is goed. Iedereen heeft wel een la die vol ligt met elastiekjes, nietjes, batterijen, verjaardagskaarsjes, enzovoort. Het is niet belangrijk dat al deze dingen een eigen la hebben, maar je moet wel een plek hebben om ze op te bergen.

Als u ze bewaart, kan de feitentabel te groot worden. Laten we zeggen dat we een feitentabel hebben met een miljoen records. We hebben veel computers gebouwd en voor elke computer die we bouwen, moeten we de processor, de toren en het doel markeren. Dit betekent dat we voor een miljoen rijen pc's die zijn besteld, ook 3 miljoen vlaggen in de feitentabel hebben.

De grootte van de feitentabel verkleinen

We zouden deze naar een dimensietabel kunnen verplaatsen en alleen op de model-ID kunnen linken om de 3 miljoen vlaggen uit de feitentabel te verwijderen. Om dit te doen, kunnen we voor elk van deze vlaggen een aparte tabel maken en dat werkt. Maar dit proces bemoeilijkt het gegevensmodel, waar u normaal gesproken tabellen met één kolom wilt vermijden.

De ideale oplossing is om een ​​junk-dimensie te gebruiken , waar je een aantal vlaggen met een lage kardinaliteit hebt die op een algemene manier aan elkaar gerelateerd zijn. Deze zijn allemaal gerelateerd aan attributen van de computers die we aan het bouwen zijn, maar niet op een echt directe manier die je normaal gesproken zou hebben voor een specifieke dimensietabel.

Herziening van het probleem van het forumlid

Laten we eens kijken naar de specifieke toepassing die op het forum is geplaatst. Het lid wilde twee verschillende velden maken, een voor Stalled en een voor Active . Als de klant in de afgelopen 45 dagen een transactie heeft gedaan, wordt deze gemarkeerd als actief; anders wordt het gemarkeerd als vastgelopen.

Junk-dimensie: wat is het en waarom het alles behalve junk is

Het lid wilde ook een andere dimensietabel voor klanttype, ofwel meerdere bestellingen ofwel enkele bestellingen. Als de rekening op enig moment in de geschiedenis twee of meer transacties had met één enkel rekeningnummer, zou dat worden beschouwd als een klant met meerdere bestellingen. En als ze maar één bestelling hadden voor een bepaald rekeningnummer, zou dat een klant met een enkele bestelling zijn.

Dat zijn dus de twee vlaggen die we willen ontwikkelen. Laten we naar LuckyTemplates springen en uitzoeken hoe we dat kunnen doen.

Gegevensmodellering voor de rommeldimensie

Laten we eens kijken naar het datamodel. Het is een heel eenvoudig datamodel. We hebben onze uitgebreide datumtabel en transactietabel .

Junk-dimensie: wat is het en waarom het alles behalve junk is

Onze transactietabel heeft slechts drie velden: een rekeningnummer , factuurdatum en verkoophoeveelheid .

Junk-dimensie: wat is het en waarom het alles behalve junk is

Over het algemeen zullen we dat doen als we de transformatie dichter bij de bron kunnen brengen. Dit is niet dynamisch tijdens een rapportagesessie, dus we hoeven het niet in DAX te doen .

We zouden het moeten doen in powerquery of datawarehouse/SQL als we die optie hebben. Maar laten we voor nu aannemen dat we dat niet doen en dat we het gewoon doen in power query .

Identificatie van het klanttype voor de junk-dimensie

Het eerste dat we zullen doen, is het klanttype bepalen, of het nu gaat om een ​​enkele bestelling of een transactie met meerdere bestellingen. We gebruiken Group By , Count en Count Rows .

Junk-dimensie: wat is het en waarom het alles behalve junk is

Voeg vervolgens alle gegevens toe en maak dat een bewerking Alle rijen , zodat we niet de geaggregeerde tabel retourneren, maar de begintabel met dat aantal rijen in elke rij.

Junk-dimensie: wat is het en waarom het alles behalve junk is

Laten we het resultaat bekijken en uitbreiden.

Junk-dimensie: wat is het en waarom het alles behalve junk is

Junk-dimensie: wat is het en waarom het alles behalve junk is

Junk-dimensie: wat is het en waarom het alles behalve junk is

We kunnen een aangepaste kolom toevoegen en deze Client Type noemen en vervolgens een IF-instructie maken. De verklaring is dat als Count gelijk is aan 1, het een enkele bestelling is; anders is het multi-order.

Junk-dimensie: wat is het en waarom het alles behalve junk is

We veranderen de kolom gewoon in een teksttype. Nu hebben we een van onze twee dimensies in de feitentabel gezet.

Junk-dimensie: wat is het en waarom het alles behalve junk is

Laten we de tweede dimensietabel afmaken. Voor deze, als de meest recente bestelling 45 dagen of minder is vanaf de datum van vandaag, wordt de klant als actief beschouwd. Als er binnen 45 dagen vanaf vandaag geen bestelling is, is de klant inactief.

We voegen een aangepaste kolom toe en noemen de kolom Today . Voeg vervolgens DateTime.LocalNow toe om ons de huidige datum en tijd te geven, en vervolgens Date.From om ons alleen het datumgedeelte te geven.

Junk-dimensie: wat is het en waarom het alles behalve junk is

Laten we dit gewoon veranderen in een datumgegevenstype en de kolom naar voren verplaatsen.

Junk-dimensie: wat is het en waarom het alles behalve junk is

Er is een eenvoudige manier om een ​​aftrekking te maken tussen de twee datumkolommen. Markeer gewoon die twee datums, klik op Datums op het lint en klik vervolgens op Dagen aftrekken .

Junk-dimensie: wat is het en waarom het alles behalve junk is

Dit geeft je het verschil tussen die twee datums in termen van aantal dagen. Laten we deze nieuwe kolom Days Voorafgaand aan Today noemen.

Junk-dimensie: wat is het en waarom het alles behalve junk is

De volgende stap is het vinden van het minimum aantal dagen voorafgaand aan vandaag, dat wil zeggen de meest recente bestelling voor elk rekeningnummer. Als dat aantal kleiner is dan of gelijk is aan 45, is het actief.

Laten we nog eens Groeperen op doen , dan Geavanceerd en dan Rekeningnummer .

Junk-dimensie: wat is het en waarom het alles behalve junk is

Nogmaals, we gebruiken Alle gegevens voor de nieuwe kolomnaam en Alle rijen voor de bewerking.

Junk-dimensie: wat is het en waarom het alles behalve junk is

Deze keer voegen we de Minimum Days Between toe met Minimum als bewerking en Days Voorafgaand aan Vandaag als kolom. Zo krijgen we de meest recente bestelling.

Junk-dimensie: wat is het en waarom het alles behalve junk is

Vervolgens vouwen we de Alle gegevens uit en verwijderen we het rekeningnummer .

Junk-dimensie: wat is het en waarom het alles behalve junk is

Zodra we dit uitbreiden, hebben we de minimale dagen tussen de rekeningnummers.

Junk-dimensie: wat is het en waarom het alles behalve junk is

Ten slotte voegen we nog een aangepaste kolom toe en noemen deze Client Timing . We zullen een wat-als-parameter invoeren waarbij als onze Min Days Between kleiner is dan of gelijk is aan 45, deze Active of anders Stalled is .

Junk-dimensie: wat is het en waarom het alles behalve junk is

Junk-dimensie: wat is het en waarom het alles behalve junk is

De onnodige kolommen verwijderen

Omdat we nu veel ondersteunende kolommen hebben, klikken we op Kolommen kiezen en verwijderen we de kolommen die we niet nodig hebben.

Junk-dimensie: wat is het en waarom het alles behalve junk is

We zullen de kolommen Count , Today , Days Voorafgaand aan Today en Min Days Between verwijderen. We hebben nu alleen de originele feitentabel, plus de kolommen Client Type en Client Timing .

Junk-dimensie: wat is het en waarom het alles behalve junk is

In plaats van deze in de feitentabel te houden, laten we deze tabel dupliceren.

Junk-dimensie: wat is het en waarom het alles behalve junk is

We noemen de gedupliceerde tabel Accountvlaggen .

Junk-dimensie: wat is het en waarom het alles behalve junk is

Laten we teruggaan naar de tabel Transacties en de velden Client Type en Client Timing verwijderen .

Junk-dimensie: wat is het en waarom het alles behalve junk is

We hebben nu de oorspronkelijke feitentabel en de tabel Accountvlaggen.

Junk-dimensie: wat is het en waarom het alles behalve junk is

Junk-dimensie: wat is het en waarom het alles behalve junk is

Voor de tabel Accountvlaggen hebben we de velden Client Type en Client Timing niet nodig , dus die halen we eruit. We markeren gewoon al deze velden, verwijderen rijen en verwijderen duplicaten.

Junk-dimensie: wat is het en waarom het alles behalve junk is

We hebben nu onze junk-dimensietabel. U hoeft alleen nog maar op Sluiten en toepassen te klikken . De volgende stap is het Rekeningnummer uit onze Rekeningvlaggentabel koppelen aan het Rekeningnummer in onze Transactiestabel .

Junk-dimensie: wat is het en waarom het alles behalve junk is

We hebben een een-op-veel-relatie tussen de tabel Transacties (de tabel met feiten) en de tabel Accountvlaggen (de tabel met ongewenste dimensies).


Uw gegevensmodelrelaties opbouwen in LuckyTemplates
Gegevensmodellering in LuckyTemplates: tips en best practices

Conclusie

Laten we de dimensies Client Timing en Client Type in ons canvas neerzetten en ze in slicers veranderen. We kunnen nu precies doen wat het lid in eerste instantie wilde doen, namelijk segmenteren op basis van deze attributen.

Als we op Multi-Order klikken, blijven we alleen achter met degenen die meerdere bestellingen hebben en als we naar Single-Order gaan, blijven we achter met degenen die één aankoop hebben.

Junk-dimensie: wat is het en waarom het alles behalve junk is

Samengevat, dit is eigenlijk wat een rommeldimensie is en hoe u deze kunt maken. Dit is een zeer nuttige techniek als u een aantal verschillende vlaggen met een lage kardinaliteit hebt die u op een efficiënte manier in uw gegevensmodel wilt opnemen.

De techniek groeperen op alle rijen is uitermate handig voor het maken van deze rommeldimensies. Ik hoop dat je dit nuttig vond en zoals altijd.


Wat is zelf in Python: voorbeelden uit de echte wereld

Wat is zelf in Python: voorbeelden uit de echte wereld

Wat is zelf in Python: voorbeelden uit de echte wereld

Een RDS-bestand opslaan en laden in R

Een RDS-bestand opslaan en laden in R

Je leert hoe je objecten uit een .rds-bestand in R opslaat en laadt. In deze blog wordt ook besproken hoe je objecten uit R naar LuckyTemplates importeert.

First N Business Days Revisited – Een DAX-coderingstaaloplossing

First N Business Days Revisited – Een DAX-coderingstaaloplossing

In deze tutorial over DAX-coderingstaal leert u hoe u de functie GENERATE gebruikt en hoe u de titel van een maat dynamisch wijzigt.

Breng inzichten onder de aandacht met behulp van de Multi Threaded Dynamic Visuals-techniek in LuckyTemplates

Breng inzichten onder de aandacht met behulp van de Multi Threaded Dynamic Visuals-techniek in LuckyTemplates

Deze zelfstudie behandelt hoe u de Multi Threaded Dynamic Visuals-techniek kunt gebruiken om inzichten te creëren op basis van dynamische gegevensvisualisaties in uw rapporten.

Inleiding tot het filteren van context in LuckyTemplates

Inleiding tot het filteren van context in LuckyTemplates

In dit artikel zal ik de filtercontext doornemen. Filtercontext is een van de belangrijkste onderwerpen waarover elke LuckyTemplates-gebruiker in eerste instantie zou moeten leren.

Beste tips voor het gebruik van de apps in LuckyTemplates Online Service

Beste tips voor het gebruik van de apps in LuckyTemplates Online Service

Ik wil laten zien hoe de online service LuckyTemplates Apps kan helpen bij het beheren van verschillende rapporten en inzichten die uit verschillende bronnen zijn gegenereerd.

Analyseer winstmargeveranderingen in de loop van de tijd - analyse met LuckyTemplates en DAX

Analyseer winstmargeveranderingen in de loop van de tijd - analyse met LuckyTemplates en DAX

Leer hoe u wijzigingen in uw winstmarge kunt berekenen met behulp van technieken zoals vertakking van metingen en het combineren van DAX-formules in LuckyTemplates.

Materialisatie-ideeën voor gegevenscaches in DAX Studio

Materialisatie-ideeën voor gegevenscaches in DAX Studio

Deze tutorial bespreekt de ideeën van materialisatie van datacaches en hoe deze de prestaties van DAX beïnvloeden bij het leveren van resultaten.

Zakelijke rapportage met behulp van LuckyTemplates

Zakelijke rapportage met behulp van LuckyTemplates

Als u tot nu toe nog steeds Excel gebruikt, is dit het beste moment om LuckyTemplates te gaan gebruiken voor uw zakelijke rapportagebehoeften.

Wat is LuckyTemplates Gateway? Alles wat u moet weten

Wat is LuckyTemplates Gateway? Alles wat u moet weten

Wat is LuckyTemplates Gateway? Alles wat u moet weten