Skräpdimension: Vad är det och varför det är allt annat än skräp

Idag vill jag prata om ett datamodelleringskoncept som kallas skräpdimension . Från dess namn skulle du kunna tro att det är en teknik som är nedsättande och något du vill undvika, men det är faktiskt ett användbart tillvägagångssätt.

Jag arbetade faktiskt med en fråga från , och en skräpdimension var den perfekta lösningen för det. När du väl har sett och förstår det, kommer du att hitta många tillämpningar för det i ditt eget arbete. Du kan se hela videon av denna handledning längst ner på den här bloggen.

Innehållsförteckning

Vad är skräppostdimensioner?

Kimball och Ross The Data Warehouse Toolkit , en av biblarna för dimensionell modellering, definierar det som en gruppering av typiskt låga kardinalitetsflaggor och indikatorer . Låg kardinalitet innebär ett litet antal unika observationer inom ett givet fält.

I vårt exempel har vi en datamodell för vår verksamhet att bygga anpassade datorer. Datamodellen gäller beställningar och fakturor. Vi har också ett antal flaggor där vi kan fånga typen av processor , typ av tornkonfiguration (kompakt eller full) och syfte (spel eller arbetsstation).

Skräpdimension: Vad är det och varför det är allt annat än skräp

Definiera skräppostdimensioner med hjälp av analogen för köksskräplådan

Om du tittar på vart och ett av dessa fält finns det bara två unika observationer i varje fält. Detta är vad Kimball skulle referera till som en flagga med låg kardinalitet . Han säger att genom att skapa en abstrakt dimension tar vi bort flaggor från faktatabellen samtidigt som vi placerar dem i en användbar dimensionell ram.

Analogin med köksskräplådan för en skräpdimension är bra. Alla har en låda som är full med gummiband, häftklamrar, batterier, födelsedagsljus, etcetera. Det är inte viktigt för någon av dessa saker att motivera att ha en egen låda, men du måste ha en plats att placera dem.

Att behålla dem kan göra att faktatabellen blir stor. Låt oss säga att vi har en faktatabell med en miljon rekord. Vi byggde många datorer och för varje dator vi bygger måste vi flagga processorn, tornet och syftet. Det betyder att för en miljon rader av beställda datorer har vi även 3 miljoner flaggor i faktatabellen.

Minska storleken på faktatabellen

Vi kunde flytta dessa till en dimensionstabell och länka endast på modell-ID för att ta bort de 3 miljoner flaggorna från faktatabellen. För att göra detta kan vi skapa en separat tabell för var och en av dessa flaggor och det kommer att fungera. Men denna process kommer att komplicera datamodellen, där du normalt vill undvika enkolumntabeller.

Den idealiska lösningen är att använda en skräpdimension , där du har ett gäng flaggor med låg kardinalitet som är relaterade på ett allmänt sätt. Dessa är alla relaterade till attribut för de datorer som vi bygger, men inte på ett riktigt direkt sätt som du normalt skulle ha för en specifik dimensionstabell.

Granska forummedlemmens problem

Låt oss ta en titt på den specifika ansökan som publicerades på forumet. Medlemmen ville skapa två olika fält, ett för Stalled och ett för Active . Om kunden har gjort en transaktion under de senaste 45 dagarna, flaggas den som aktiv; annars flaggas den som avstängd.

Skräpdimension: Vad är det och varför det är allt annat än skräp

Medlemmen ville också ha en annan dimensionstabell för Client Type, som är antingen multi-order eller enkelorder. Om kontot hade två eller flera transaktioner vid något tillfälle genom historien med ett enda kontonummer, skulle det betraktas som en klient med flera beställningar. Och om de bara hade en beställning för ett visst kontonummer, skulle det vara en kund med en enda beställning.

Så det är de två flaggorna vi vill utveckla. Låt oss hoppa in i LuckyTemplates och ta reda på hur man gör det.

Datamodellering för skräpdimensionen

Låt oss ta en titt på datamodellen. Det är en väldigt enkel datamodell. Vi har vår utökadeoch Transaktionstabell .

Skräpdimension: Vad är det och varför det är allt annat än skräp

Vår transaktionstabell har bara tre fält: ett kontonummer , fakturadatum och försäljningskvantitet .

Skräpdimension: Vad är det och varför det är allt annat än skräp

I allmänhet, om vi kan driva transformationen närmare källan, kommer vi att göra det. Detta är inte dynamiskt under en rapportsession, så vi behöver inte göra det i .

Vi borde göra det antingen i power query eller data warehouse/SQL om vi har det alternativet. Men för nu, låt oss anta att vi inte gör det och att vi bara gör det.

Identifiera klienttypen för skräpdimensionen

Det första vi ska göra är att ta reda på klienttypen, oavsett om det är en enstaka order eller en transaktion med flera order. Vi använder Gruppera efter , Räkna och Räkna rader .

Skräpdimension: Vad är det och varför det är allt annat än skräp

Lägg sedan till all data och gör det till en All Rows-operation så att vi inte returnerar den aggregerade tabellen, utan den initiala tabellen med det radantalet i varje rad.

Skräpdimension: Vad är det och varför det är allt annat än skräp

Låt oss ta en titt på resultatet och utöka det.

Skräpdimension: Vad är det och varför det är allt annat än skräp

Skräpdimension: Vad är det och varför det är allt annat än skräp

Skräpdimension: Vad är det och varför det är allt annat än skräp

Vi kan lägga till en anpassad kolumn och namnge den Client Type och sedan skapa en IF-sats. Påståendet är om Count är lika med 1, så är det en enda ordning; annars är det multi-order.

Skräpdimension: Vad är det och varför det är allt annat än skräp

Vi ändrar bara kolumnen till en texttyp. Nu har vi en av våra två dimensioner i faktatabellen.

Skräpdimension: Vad är det och varför det är allt annat än skräp

Låt oss göra den andra dimensionstabellen. För denna, om den senaste beställningen är 45 dagar eller mindre från dagens datum, ses klienten som aktiv. Om det inte finns någon beställning inom 45 dagar från idag är kunden inaktiv.

Vi lägger till en anpassad kolumn och namnger kolumnen Idag . Lägg sedan till DateTime.LocalNow för att ge oss aktuellt datum och tid, sedan Date.From för att bara ge oss datumdelen.

Skräpdimension: Vad är det och varför det är allt annat än skräp

Låt oss bara ändra detta till en datumdatatyp och sedan flytta kolumnen framåt.

Skräpdimension: Vad är det och varför det är allt annat än skräp

Det finns ett enkelt sätt att skapa en subtraktion mellan de två datumkolumnerna. Markera bara dessa två datum, klicka på Datum på menyfliksområdet och klicka sedan på Subtrahera dagar .

Skräpdimension: Vad är det och varför det är allt annat än skräp

Detta ger dig skillnaden mellan dessa två datum i antal dagar. Låt oss döpa den här nya kolumnen Dagarna före idag.

Skräpdimension: Vad är det och varför det är allt annat än skräp

Nästa steg är att hitta minsta antal dagar före idag, vilket innebär den senaste beställningen för varje kontonummer. Om siffran är mindre än eller lika med 45 är den aktiv.

Låt oss göra en annan grupp efter , sedan Avancerat och sedan kontonummer .

Skräpdimension: Vad är det och varför det är allt annat än skräp

Återigen kommer vi att använda All Data för nytt kolumnnamn och Alla rader för operation.

Skräpdimension: Vad är det och varför det är allt annat än skräp

Den här gången lägger vi till Minimum Days Between med Minimum som dess funktion och Days Before Today som kolumn. Detta ger oss den senaste beställningen.

Skräpdimension: Vad är det och varför det är allt annat än skräp

Sedan utökar vi all data och tar bort kontonummer .

Skräpdimension: Vad är det och varför det är allt annat än skräp

När vi utökar detta kommer vi att ha minsta antal dagar mellan kontonumren.

Skräpdimension: Vad är det och varför det är allt annat än skräp

Slutligen lägger vi till en annan anpassad kolumn och kallar den Client Timing . Vi kommer att lägga in en vad-om-parameter där om våra Min Days Between är mindre än eller lika med 45, så är den Aktiv eller Stalled .

Skräpdimension: Vad är det och varför det är allt annat än skräp

Skräpdimension: Vad är det och varför det är allt annat än skräp

Ta bort onödiga kolumner

Eftersom vi nu har många stödjande kolumner, låt oss klicka på Välj kolumner och ta bort de som vi inte behöver.

Skräpdimension: Vad är det och varför det är allt annat än skräp

Vi kommer att ta bort kolumnerna Antal , Idag , Dagar före idag och Minsta dagar mellan . Vi har nu bara den ursprungliga faktatabellen, plus kolumnerna Client Type och Client Timing .

Skräpdimension: Vad är det och varför det är allt annat än skräp

Istället för att behålla dessa i faktatabellen, låt oss duplicera den här tabellen.

Skräpdimension: Vad är det och varför det är allt annat än skräp

Vi kallar dubbletttabellen för kontoflaggor .

Skräpdimension: Vad är det och varför det är allt annat än skräp

Låt oss gå tillbaka till Transaktionstabellen och ta ut fälten Client Type och Client Timing .

Skräpdimension: Vad är det och varför det är allt annat än skräp

Vi har nu den ursprungliga faktatabellen och tabellen Kontoflaggor.

Skräpdimension: Vad är det och varför det är allt annat än skräp

Skräpdimension: Vad är det och varför det är allt annat än skräp

För tabellen Kontoflaggor behöver vi inte fälten Client Type och Client Timing så vi tar bort dessa. Vi markerar bara alla dessa fält, tar bort rader och tar bort dubbletter.

Skräpdimension: Vad är det och varför det är allt annat än skräp

Vi har nu vår skräpdimensionstabell. Allt som återstår är att trycka på Stäng och tillämpa . Nästa steg är att koppla kontonumret från vår kontoflaggortabell till kontonumret i vår transaktionstabell .

Skräpdimension: Vad är det och varför det är allt annat än skräp

Vi har en en-till-många-relation mellan tabellen Transaktioner (som är vår faktatabell) och tabellen Kontoflaggor (som är vår skräpdimensionstabell).



Slutsats

Låt oss släppa måtten Client Timing och Client Type i vår duk och förvandla dem till slicers. Vi kan nu göra exakt vad medlemmen ville göra från början, vilket är att skära baserat på dessa attribut.

Om vi ​​klickar på Multi-Order, lämnar det oss bara med de som har flera beställningar och om vi går Single-Order, lämnar det oss med de som har ett köp.

Skräpdimension: Vad är det och varför det är allt annat än skräp

Sammanfattningsvis är detta i princip vad en skräpdimension är och hur du kan skapa den. Detta är en mycket användbar teknik om du har ett gäng olika flaggor med låg kardinalitet som du vill införliva i din datamodell på ett effektivt sätt.

Tekniken grupp efter alla rader är extremt användbar för att skapa dessa skräpdimensioner. Jag hoppas att du tyckte att detta var till hjälp och som alltid.


Pipe In R: Anslutningsfunktioner med Dplyr

Pipe In R: Anslutningsfunktioner med Dplyr

I den här handledningen kommer du att lära dig hur du kopplar ihop funktioner med hjälp av dplyr-röroperatorn i programmeringsspråket R.

RANKX Deep Dive: A Lucky Templates DAX-funktion

RANKX Deep Dive: A Lucky Templates DAX-funktion

RANKX från LuckyTemplates låter dig returnera rankningen av ett specifikt nummer i varje tabellrad som utgör en del av en lista med nummer.

Extrahera LuckyTemplates-teman och bilder från PBIX

Extrahera LuckyTemplates-teman och bilder från PBIX

Lär dig hur du tar isär en PBIX-fil för att extrahera LuckyTemplates-teman och bilder från bakgrunden och använda den för att skapa din rapport!

Excel Formler Fuskblad: Mellanvägledning

Excel Formler Fuskblad: Mellanvägledning

Excel Formler Fuskblad: Mellanvägledning

LuckyTemplates Kalendertabell: Vad är det och hur man använder det

LuckyTemplates Kalendertabell: Vad är det och hur man använder det

LuckyTemplates Kalendertabell: Vad är det och hur man använder det

Python i LuckyTemplates: Hur man installerar och ställer in

Python i LuckyTemplates: Hur man installerar och ställer in

Lär dig hur du installerar programmeringsspråket Python i LuckyTemplates och hur du använder dess verktyg för att skriva koder och visa bilder.

Beräkna dynamiska vinstmarginaler – enkel analys av LuckyTemplates med DAX

Beräkna dynamiska vinstmarginaler – enkel analys av LuckyTemplates med DAX

Lär dig hur du beräknar dynamiska vinstmarginaler vid sidan av LuckyTemplates och hur du kan få fler insikter genom att gräva djupare i resultaten.

Sortering av datumtabellkolumner i LuckyTemplates

Sortering av datumtabellkolumner i LuckyTemplates

Lär dig hur du sorterar fälten från en utökad datumtabells kolumner korrekt. Detta är en bra strategi att göra för svåra fält.

Hitta dina bästa produkter för varje region i LuckyTemplates med DAX

Hitta dina bästa produkter för varje region i LuckyTemplates med DAX

I den här artikeln går jag igenom hur du kan hitta dina toppprodukter per region med hjälp av DAX-beräkningar i LuckyTemplates, inklusive TOPN- och CALCULATE-funktionerna.

Skräpdimension: Vad är det och varför det är allt annat än skräp

Skräpdimension: Vad är det och varför det är allt annat än skräp

Lär dig hur du använder en skräpdimension för flaggor med låg kardinalitet som du vill infoga i din datamodell på ett effektivt sätt.