Wat is zelf in Python: voorbeelden uit de echte wereld
Wat is zelf in Python: voorbeelden uit de echte wereld
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-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.
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 .
Onze transactietabel heeft slechts drie velden: een rekeningnummer , factuurdatum en verkoophoeveelheid .
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 .
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.
Laten we het resultaat bekijken en uitbreiden.
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.
We veranderen de kolom gewoon in een teksttype. Nu hebben we een van onze twee dimensies in de feitentabel gezet.
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.
Laten we dit gewoon veranderen in een datumgegevenstype en de kolom naar voren verplaatsen.
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 .
Dit geeft je het verschil tussen die twee datums in termen van aantal dagen. Laten we deze nieuwe kolom Days Voorafgaand aan Today noemen.
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 .
Nogmaals, we gebruiken Alle gegevens voor de nieuwe kolomnaam en Alle rijen voor de bewerking.
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.
Vervolgens vouwen we de Alle gegevens uit en verwijderen we het rekeningnummer .
Zodra we dit uitbreiden, hebben we de minimale dagen tussen de rekeningnummers.
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 .
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.
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 .
In plaats van deze in de feitentabel te houden, laten we deze tabel dupliceren.
We noemen de gedupliceerde tabel Accountvlaggen .
Laten we teruggaan naar de tabel Transacties en de velden Client Type en Client Timing verwijderen .
We hebben nu de oorspronkelijke feitentabel en de tabel Accountvlaggen.
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.
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 .
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.
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
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.
In deze tutorial over DAX-coderingstaal leert u hoe u de functie GENERATE gebruikt en hoe u de titel van een maat dynamisch wijzigt.
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.
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.
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.
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.
Deze tutorial bespreekt de ideeën van materialisatie van datacaches en hoe deze de prestaties van DAX beïnvloeden bij het leveren van resultaten.
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