Ce este Sinele în Python: Exemple din lumea reală
Ce este Sinele în Python: Exemple din lumea reală
Astăzi, vreau să vorbesc despre un concept de modelare a datelor numit junk dimension . Din numele său, ai crede că este o tehnică derogatorie și ceva ce ai vrea să-l eviti, dar este de fapt o abordare utilă.
De fapt, am lucrat la o întrebare de pe și o dimensiune nedorită a fost soluția perfectă pentru aceasta. Odată ce îl vezi și înțelegi, vei găsi o mulțime de aplicații pentru el în propria ta lucrare. Puteți viziona videoclipul complet al acestui tutorial în partea de jos a acestui blog.
Cuprins
Ce sunt dimensiunile nedorite?
Setul de instrumente The Data Warehouse Toolkit al lui Kimball și Ross , una dintre bibliile modelării dimensionale, îl definește ca o grupare de steaguri și indicatori de cardinalitate de obicei scăzută . Cardinalitatea scăzută înseamnă un număr mic de observații unice într-un anumit câmp.
În exemplul nostru, avem un model de date pentru afacerea noastră de a construi computere personalizate. Modelul de date este referitor la comenzi și facturi. Avem, de asemenea, o serie de steaguri de unde putem surprinde tipul de procesor , tipul de configurație a turnului (Compact sau Full) și scopul (Gaming sau Workstation).
Definirea dimensiunilor gunoiului folosind analogia sertarului de gunoi din bucătărie
Dacă te uiți la fiecare dintre aceste câmpuri, există doar două observații unice în fiecare câmp. Acesta este ceea ce Kimball s-ar referi ca un steag de cardinalitate scăzută . El spune că, prin crearea unei dimensiuni abstracte, eliminăm steaguri din tabelul de fapte în timp ce le plasăm într-un cadru dimensional util.
Analogia cu sertarul de gunoi din bucătărie pentru o dimensiune de gunoi este una bună. Toată lumea are un sertar plin cu benzi de cauciuc, capse, baterii, lumânări pentru ziua de naștere etc. Nu este important ca niciunul dintre aceste lucruri să justifice să aibă propriul sertar, dar trebuie să ai un loc unde să le pui.
Păstrarea lor poate face ca tabelul de fapte să crească în dimensiune. Să presupunem că avem un tabel de fapte cu un milion de înregistrări. Am construit o mulțime de computere și pentru fiecare computer pe care îl construim, trebuie să semnalăm procesorul, turnul și scopul. Aceasta înseamnă că pentru un milion de rânduri de PC-uri care au fost comandate, avem și 3 milioane de steaguri în tabelul de fapte.
Reducerea dimensiunii tabelului de fapte
Le-am putea muta într-un tabel de dimensiuni și le-am putea conecta numai la ID-ul modelului pentru a elimina cele 3 milioane de semnale din tabelul de fapte. Pentru a face acest lucru, putem face un tabel separat pentru fiecare dintre aceste steaguri și va funcționa. Dar acest proces va complica modelul de date, unde în mod normal doriți să evitați tabelele cu o singură coloană.
Soluția ideală este să folosiți o dimensiune nedorită , unde aveți o grămadă de steaguri cu cardinalitate scăzută care sunt legate într-un mod general. Toate acestea sunt legate de atributele computerelor pe care le construim, dar nu într-un mod cu adevărat direct pe care l-ați avea în mod normal pentru un anumit tabel de dimensiuni.
Revizuirea problemei membrului forumului
Să aruncăm o privire la aplicația specifică care a fost postată pe forum. Membrul a vrut să creeze două câmpuri diferite, unul pentru Stalled și unul pentru Active . Dacă clientul a făcut o tranzacție în ultimele 45 de zile, aceasta este marcată ca activă; în caz contrar, este marcat ca blocat.
Membrul a dorit, de asemenea, un alt tabel de dimensiuni pentru Tipul de client, care este fie cu mai multe comandă, fie cu o singură comandă. Dacă contul a avut două sau mai multe tranzacții în orice moment din istorie folosind un singur număr de cont, acesta ar fi considerat un client cu mai multe comenzi. Și dacă ar avea o singură comandă pentru un anumit număr de cont, acesta ar fi un client cu o singură comandă.
Deci acestea sunt cele două steaguri pe care vrem să le dezvoltăm. Să intrăm în LuckyTemplates și să ne dăm seama cum să facem asta.
Modelarea datelor pentru dimensiunea Junk
Să aruncăm o privire la modelul de date. Este un model de date foarte simplu. Avem tabelul nostru extins pentru Date și tabelul Tranzacții .
Tabelul nostru de tranzacții are doar trei câmpuri: un număr de cont , data facturii și cantitatea vânzărilor .
În general, dacă putem împinge transformarea mai aproape de sursă, vom face asta. Acest lucru nu este dinamic în cursul unei sesiuni de raportare, așa că nu trebuie să o facem în DAX .
Ar trebui să o facem fie în interogare de putere, fie în depozit de date/SQL dacă avem această opțiune. Dar, deocamdată, să presupunem că nu o facem și că o facem doar în interogare de putere .
Identificarea tipului de client pentru dimensiunea Junk
Primul lucru pe care îl vom face este să ne dăm seama tipul de client, indiferent dacă este o tranzacție cu o singură comandă sau cu mai multe comenzi. Vom folosi Group By , Count și Count Rows .
Apoi adăugați toate datele și faceți din aceasta o operație All Rows, astfel încât să returnăm nu tabelul agregat, ci tabelul inițial cu acel număr de rânduri în fiecare rând.
Să ne uităm la rezultat și să-l extindem.
Putem adăuga o coloană personalizată și o denumim Tip client și apoi cream o instrucțiune IF. Instrucțiunea este dacă Count este egal cu 1, atunci este o singură ordine; altfel, este multi-ordine.
Vom schimba doar coloana într-un tip de text. Acum, avem una dintre cele două dimensiuni ale noastre stabilite în tabelul de fapte.
Să terminăm tabelul de a doua dimensiune. Pentru aceasta, dacă cea mai recentă comandă este de 45 de zile sau mai puțin de la data de astăzi, atunci clientul este considerat activ. Dacă nu există nicio comandă în 45 de zile de astăzi, atunci clientul este inactiv.
Vom adăuga o coloană personalizată și vom numi coloana Astăzi . Apoi adăugați DateTime.LocalNow pentru a ne oferi data și ora curente, apoi Date.From pentru a ne oferi doar porțiunea dată.
Să schimbăm acest lucru într-un tip de date de dată și apoi să mutăm coloana în față.
Există o modalitate simplă de a crea o scădere între cele două coloane de date. Doar evidențiați acele două date, faceți clic pe Date de pe panglică, apoi faceți clic pe Scădere zile .
Acest lucru vă va oferi diferența dintre aceste două date în ceea ce privește numărul de zile. Să denumim această nouă coloană Zile înainte de azi.
Următorul pas este să găsiți zilele minime anterioare zilei de astăzi, ceea ce înseamnă cea mai recentă comandă pentru fiecare număr de cont. Dacă numărul respectiv este mai mic sau egal cu 45, este activ.
Să facem o altă grupare după , apoi Avansat , apoi Număr de cont .
Din nou, vom folosi Toate datele pentru noul nume de coloană și Toate rândurile pentru operare.
De data aceasta, vom adăuga Zilele minime între cu minim ca operațiune și Zilele înainte de azi ca coloană. Aceasta ne va oferi cea mai recentă comandă.
Apoi extindem toate datele și eliminăm numărul de cont .
După ce extindem acest lucru, vom avea numărul minim de zile între numerele de cont.
În cele din urmă, vom adăuga o altă coloană personalizată și o vom numi Timing client . Vom introduce un parametru ce se întâmplă în cazul în care, dacă zilele noastre minime între este mai mic sau egal cu 45, atunci este Activ sau altfel Stalled .
Eliminarea coloanelor inutile
Deoarece acum avem o mulțime de coloane suport, să facem clic pe Alegeți coloane și să le scoatem pe cele de care nu avem nevoie.
Vom elimina coloanele Numărătoarea , Azi , Zilele înainte de azi și Zilele minime dintre coloane. Acum avem doar tabelul de fapte inițial, plus coloanele Tip client și Timp client .
În loc să le păstrăm în tabelul de fapte, să duplicăm acest tabel.
Vom apela tabelul duplicat Indicatori de cont .
Să revenim la tabelul Tranzacții și să scoatem câmpurile Tip client și Timp client .
Avem acum tabelul de fapte inițial și tabelul Indicatori de cont.
Pentru tabelul Indicatori de cont, nu avem nevoie de câmpurile Tip client și Timp client , așa că le scoatem. Evidențiem toate aceste câmpuri, eliminăm rândurile și eliminăm duplicatele.
Acum avem tabelul nostru de dimensiuni nedorite. Tot ce mai rămâne este să apăsați Închidere și Aplicare . Următorul pas este să conectați Numărul de cont din tabelul Indicatori de cont la Numărul de cont din tabelul Tranzacții .
Avem o relație unu-la-mai multe între tabelul Tranzacții (care este tabelul nostru de fapte) și tabelul Indicatori de cont (care este tabelul nostru de dimensiuni nedorite).
Crearea relațiilor cu modelul de date în LuckyTemplates
Modelarea datelor în LuckyTemplates: sfaturi și bune practici
Concluzie
Să aruncăm dimensiunile Client Timing și Client Type în pânza noastră și să le transformăm în slicere. Acum putem face exact ceea ce a vrut membrul să facă inițial, și anume să tăiem pe baza acestor atribute.
Dacă facem clic pe Multi-Order, ne va lăsa doar cu cele care au mai multe comenzi, iar dacă mergem pe Single-Order, ne va lăsa cu cei care au o singură achiziție.
Pentru a rezuma, aceasta este, practic, ceea ce este o dimensiune nedorită și cum o poți crea. Aceasta este o tehnică foarte utilă dacă aveți o grămadă de steaguri asortate, cu cardinalitate scăzută, pe care doriți să le încorporați în modelul dvs. de date într-un mod eficient.
Tehnica grupării pe toate rândurile este extrem de utilă pentru crearea acestor dimensiuni nedorite. Sper că ați găsit acest lucru util și ca întotdeauna.
Ce este Sinele în Python: Exemple din lumea reală
Veți învăța cum să salvați și să încărcați obiecte dintr-un fișier .rds în R. Acest blog va trata, de asemenea, cum să importați obiecte din R în LuckyTemplates.
În acest tutorial despre limbajul de codare DAX, aflați cum să utilizați funcția GENERATE și cum să schimbați în mod dinamic titlul unei măsuri.
Acest tutorial va acoperi cum să utilizați tehnica Multi Threaded Dynamic Visuals pentru a crea informații din vizualizările dinamice de date din rapoartele dvs.
În acest articol, voi trece prin contextul filtrului. Contextul de filtrare este unul dintre subiectele majore despre care orice utilizator LuckyTemplates ar trebui să învețe inițial.
Vreau să arăt cum serviciul online LuckyTemplates Apps poate ajuta la gestionarea diferitelor rapoarte și informații generate din diverse surse.
Aflați cum să vă calculați modificările marjei de profit folosind tehnici precum măsurarea ramificării și combinarea formulelor DAX în LuckyTemplates.
Acest tutorial va discuta despre ideile de materializare a cache-urilor de date și despre modul în care acestea afectează performanța DAX-ului în furnizarea de rezultate.
Dacă încă utilizați Excel până acum, atunci acesta este cel mai bun moment pentru a începe să utilizați LuckyTemplates pentru nevoile dvs. de raportare a afacerii.
Ce este LuckyTemplates Gateway? Tot ce trebuie să știți