Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

I dag vil jeg tale om et datamodelleringskoncept kaldet junk dimension . Ud fra dets navn skulle du tro, at det er en teknik, der er nedsættende og noget, du gerne vil undgå, men det er faktisk en nyttig tilgang.

Faktisk arbejdede jeg på et spørgsmål fra , og en junk-dimension var den perfekte løsning til det. Når du først har set og forstået det, vil du finde meget anvendelse på det i dit eget arbejde. Du kan se den fulde video af denne tutorial nederst på denne blog.

Indholdsfortegnelse

Hvad er junk-dimensioner?

Kimball og Ross' The Data Warehouse Toolkit , en af ​​biblerne inden for dimensionel modellering, definerer det som en gruppering af typiske flag og indikatorer med lav kardinalitet . Lav kardinalitet betyder et lille antal unikke observationer inden for et givet felt.

I vores eksempel har vi en datamodel for vores virksomhed med at bygge brugerdefinerede pc'er. Datamodellen er med hensyn til ordrer og fakturaer. Vi har også en række flag, hvor vi kan fange typen af ​​processor , type tårnkonfiguration (kompakt eller fuld) og formål (gaming eller arbejdsstation).

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Definition af uønsket dimensioner ved hjælp af analogen til køkkenskrammelskuffe

Hvis du ser på hvert af disse felter, er der kun to unikke observationer i hvert felt. Dette er, hvad Kimball ville henvise til som et flag med lav kardinalitet . Han siger, at ved at skabe en abstrakt dimension fjerner vi flag fra faktatabellen, mens vi placerer dem i en nyttig dimensionel ramme.

Analogien med køkkenskrammelskuffen til en skrammeldimension er god. Alle har en skuffe, der er fuld af gummibånd, hæfteklammer, batterier, fødselsdagslys osv. Det er ikke vigtigt for nogen af ​​disse ting at berettige at have deres egen skuffe, men du skal have et sted at placere dem.

At beholde dem kan få faktatabellen til at ballonere i størrelse. Lad os sige, at vi har en faktatabel med en million poster. Vi byggede mange computere, og for hver computer, vi bygger, skal vi markere processoren, tårnet og formålet. Det betyder, at for en million rækker af pc'er, der er bestilt, har vi også 3 millioner flag i faktatabellen.

Reduktion af størrelsen på faktatabellen

Vi kunne flytte disse til en dimensionstabel og kun linke på model-id'et for at fjerne de 3 millioner flag fra faktatabellen. For at gøre dette kan vi lave en separat tabel for hvert af disse flag, og det vil fungere. Men denne proces vil komplicere datamodellen, hvor man normalt ønsker at undgå enkeltkolonnetabeller.

Den ideelle løsning er at bruge en uønsket dimension , hvor du har en masse flag med lav kardinalitet, der er relateret på en generel måde. Disse er alle relateret til attributter for de computere, som vi bygger, men ikke på en virkelig direkte måde, som du normalt ville have for en specifik dimensionstabel.

Gennemgang af forummedlemmets problem

Lad os tage et kig på den specifikke applikation, som blev postet på forummet. Medlemmet ønskede at oprette to forskellige felter, et for Stalled og et for Active . Hvis kunden har foretaget en transaktion inden for de sidste 45 dage, bliver den markeret som aktiv; ellers bliver den markeret som stoppet.

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Medlemmet ønskede også en anden dimensionstabel for Client Type, som enten er multiorder eller enkeltordre. Hvis kontoen havde to eller flere transaktioner på et hvilket som helst tidspunkt gennem historien ved hjælp af et enkelt kontonummer, ville det blive betragtet som en klient med flere ordrer. Og hvis de kun havde én ordre på et givet kontonummer, ville det være en enkeltordrekunde.

Så det er de to flag, vi vil udvikle. Lad os springe ind i LuckyTemplates og finde ud af, hvordan man gør det.

Datamodellering for uønsket dimension

Lad os tage et kig på datamodellen. Det er en rigtig simpel datamodel. Vi har vores forlængetog Transaktionstabel .

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Vores transaktionstabel har kun tre felter: et kontonummer , fakturadato og salgsmængde .

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Generelt, hvis vi kan skubbe transformationen tættere på kilden, vil vi gøre det. Dette er ikke dynamisk i løbet af en rapporteringssession, så vi behøver ikke at gøre det i .

Vi burde gøre det enten i kraftforespørgsel eller data warehouse/SQL, hvis vi har den mulighed. Men for nu, lad os antage, at vi ikke gør det, og at vi bare gør det.

Identifikation af klienttypen for junk-dimensionen

Den første ting, vi skal gøre, er at finde ud af klienttypen, uanset om det er en enkeltordre eller en multiordre transaktion. Vi bruger grupper efter , tæl og tæl rækker .

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Tilføj derefter alle data og gør det til en All Rows-operation , så vi ikke returnerer den aggregerede tabel, men den indledende tabel med det rækkeantal i hver række.

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Lad os tage et kig på resultatet og udvide det.

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Vi kan tilføje en brugerdefineret kolonne og navngive den Client Type og derefter oprette en IF-sætning. Udsagnet er, hvis Count er lig med 1, så er det en enkelt orden; ellers er det multi-order.

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Vi ændrer blot kolonnen til en teksttype. Nu har vi en af ​​vores to dimensioner i faktatabellen.

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Lad os få lavet den anden dimensionstabel. For denne, hvis den seneste ordre er 45 dage eller mindre fra dags dato, så betragtes klienten som aktiv. Hvis der ikke er nogen ordre inden for 45 dage fra i dag, er kunden inaktiv.

Vi tilføjer en brugerdefineret kolonne og navngiver kolonnen I dag . Tilføj derefter DateTime.LocalNow for at give os den aktuelle dato og klokkeslæt, derefter Date.From for kun at give os datodelen.

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Lad os bare ændre dette til en datodatatype og derefter flytte kolonnen til forsiden.

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Der er en enkel måde at skabe en subtraktion mellem de to datokolonnen. Du skal bare fremhæve disse to datoer, klikke på Datoer på båndet og derefter klikke på Træk dage fra .

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Dette vil give dig forskellen mellem disse to datoer med hensyn til antal dage. Lad os navngive denne nye kolonne Dage før i dag.

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Næste trin er at finde minimum dage før i dag, hvilket betyder den seneste ordre for hvert kontonummer. Hvis dette tal er mindre end eller lig med 45, er det aktivt.

Lad os lave endnu en gruppe efter , derefter Avanceret , så kontonummer .

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Igen bruger vi Alle data til nyt kolonnenavn og Alle rækker til drift.

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Denne gang tilføjer vi Minimum Days Between med Minimum som dens drift og Days Before Today som kolonnen. Dette vil give os den seneste ordre.

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Så udvider vi alle data og fjerner kontonummer .

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Når vi udvider dette, har vi minimum dage imellem for kontonumrene.

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Til sidst tilføjer vi endnu en brugerdefineret kolonne og kalder det Client Timing . Vi indsætter en hvad-hvis-parameter, hvor hvis vores Min Days Between er mindre end eller lig med 45, så er den Aktiv eller Stalled .

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Fjernelse af de unødvendige kolonner

Da vi nu har en masse understøttende kolonner, så lad os klikke på Vælg kolonner og fjerne dem, som vi ikke har brug for.

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Vi fjerner kolonnerne Count , Today , Days Before Today , og Minimum Days Between . Vi har nu kun den originale faktatabel plus kolonnerne Client Type og Client Timing .

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

I stedet for at beholde disse i faktatabellen, lad os duplikere denne tabel.

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Vi kalder dublettabellen Kontoflag .

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Lad os gå tilbage til tabellen Transaktioner og fjerne felterne Client Type og Client Timing .

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Vi har nu den originale faktatabel og tabellen Kontoflag.

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Til tabellen Kontoflag har vi ikke brug for felterne Client Type og Client Timing , så vi fjerner disse. Vi fremhæver bare alle disse felter, fjerner rækker og fjerner dubletter.

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Vi har nu vores junk dimensionstabel. Det eneste, der er tilbage, er at trykke på Luk og anvend . Det næste trin er at forbinde kontonummer fra vores kontoflag-tabel til kontonummeret i vores transaktionstabel .

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Vi har et en-til-mange forhold mellem tabellen Transaktioner (som er vores faktatabel) og tabellen Kontoflag (som er vores junkdimensionstabel).



Konklusion

Lad os droppe Client Timing og Client Type- dimensionerne i vores lærred og omdanne dem til slicere. Vi kan nu gøre præcis, hvad medlemmet ønskede at gøre i første omgang, som er at skære ud fra disse attributter.

Hvis vi klikker på Multi-Order, vil det kun efterlade os med dem, der har flere ordrer, og hvis vi går Single-Order, vil det efterlade os med dem, der har et køb.

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

For at opsummere er dette dybest set, hvad en junk-dimension er, og hvordan du kan skabe den. Dette er en meget nyttig teknik, hvis du har en masse forskellige flag med lav kardinalitet, som du ønsker at inkorporere i din datamodel på en effektiv måde.

Gruppe efter alle rækker-teknikken er yderst nyttig til at skabe disse junk-dimensioner. Jeg håber du fandt dette nyttigt og som altid.


Pipe In R: Tilslutningsfunktioner med Dplyr

Pipe In R: Tilslutningsfunktioner med Dplyr

I denne øvelse lærer du, hvordan du kæder funktioner sammen ved hjælp af dplyr-røroperatoren i programmeringssproget R.

RANKX Deep Dive: A Lucky Templates DAX-funktion

RANKX Deep Dive: A Lucky Templates DAX-funktion

RANKX fra LuckyTemplates giver dig mulighed for at returnere rangeringen af ​​et specifikt tal i hver tabelrække, der udgør en del af en liste over tal.

Udpakning af LuckyTemplates-temaer og -billeder fra PBIX

Udpakning af LuckyTemplates-temaer og -billeder fra PBIX

Lær, hvordan du adskiller en PBIX-fil for at udtrække LuckyTemplates-temaer og -billeder fra baggrunden og bruge den til at oprette din rapport!

Excel Formler Snydeark: Mellemvejledning

Excel Formler Snydeark: Mellemvejledning

Excel Formler Snydeark: Mellemvejledning

LuckyTemplates kalendertabel: Hvad er det, og hvordan man bruger det

LuckyTemplates kalendertabel: Hvad er det, og hvordan man bruger det

LuckyTemplates kalendertabel: Hvad er det, og hvordan man bruger det

Python i LuckyTemplates: Sådan installeres og konfigureres

Python i LuckyTemplates: Sådan installeres og konfigureres

Lær, hvordan du installerer programmeringssproget Python i LuckyTemplates, og hvordan du bruger dets værktøjer til at skrive koder og vise billeder.

Beregning af dynamiske fortjenestemargener – nem analyse af LuckyTemplates med DAX

Beregning af dynamiske fortjenestemargener – nem analyse af LuckyTemplates med DAX

Lær, hvordan du beregner dynamiske fortjenstmargener ved siden af ​​LuckyTemplates, og hvordan du kan få mere indsigt ved at grave dybere ned i resultaterne.

Sortering af datotabelkolonner i LuckyTemplates

Sortering af datotabelkolonner i LuckyTemplates

Lær, hvordan du sorterer felterne fra kolonner med udvidet datotabel korrekt. Dette er en god strategi at gøre for vanskelige felter.

Find dine topprodukter for hver region i LuckyTemplates ved hjælp af DAX

Find dine topprodukter for hver region i LuckyTemplates ved hjælp af DAX

I denne artikel gennemgår jeg, hvordan du kan finde dine topprodukter pr. region ved hjælp af DAX-beregninger i LuckyTemplates, herunder funktionerne TOPN og CALCUATE.

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Junk Dimension: Hvad er det, og hvorfor det er alt andet end junk

Lær, hvordan du bruger en uønsket dimension til flag med lav kardinalitet, som du ønsker at inkorporere i din datamodel på en effektiv måde.