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.
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).
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.
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 .
Vores transaktionstabel har kun tre felter: et kontonummer , fakturadato og salgsmængde .
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 .
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.
Lad os tage et kig på resultatet og udvide det.
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.
Vi ændrer blot kolonnen til en teksttype. Nu har vi en af vores to dimensioner i faktatabellen.
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.
Lad os bare ændre dette til en datodatatype og derefter flytte kolonnen til forsiden.
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 .
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.
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 .
Igen bruger vi Alle data til nyt kolonnenavn og Alle rækker til drift.
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.
Så udvider vi alle data og fjerner kontonummer .
Når vi udvider dette, har vi minimum dage imellem for kontonumrene.
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 .
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.
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 .
I stedet for at beholde disse i faktatabellen, lad os duplikere denne tabel.
Vi kalder dublettabellen Kontoflag .
Lad os gå tilbage til tabellen Transaktioner og fjerne felterne Client Type og Client Timing .
Vi har nu den originale faktatabel og tabellen Kontoflag.
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.
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 .
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.
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.
I denne øvelse lærer du, hvordan du kæder funktioner sammen ved hjælp af dplyr-røroperatoren i programmeringssproget R.
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.
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
LuckyTemplates kalendertabel: Hvad er det, og hvordan man bruger det
Lær, hvordan du installerer programmeringssproget Python i LuckyTemplates, og hvordan du bruger dets værktøjer til at skrive koder og vise billeder.
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.
Lær, hvordan du sorterer felterne fra kolonner med udvidet datotabel korrekt. Dette er en god strategi at gøre for vanskelige felter.
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.
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.