Ce este Sinele în Python: Exemple din lumea reală
Ce este Sinele în Python: Exemple din lumea reală
În această postare pe blog, vom arunca o privire la o întrebare care a fost pusă pe forumul LuckyTemplates și vom folosi o tehnică LuckyTemplates în limbaj DAX pentru a o rezolva. În cazul în care doriți să urmăriți și să descărcați fișierele, trebuie doar să vizitați forumul LuckyTemplates și să accesați . Puteți viziona videoclipul complet al acestui tutorial în partea de jos a acestui blog.
Pentru a explica scenariul pe care îl vom acoperi, avem ca exemplu un tabel simplu. În prima coloană, avem Nivelul financiar 1 . În a doua coloană, avem o dată care se numește Finalizat. În ultima coloană, avem combinația dintre nivelul financiar și data de finalizare, pe care o vom numi Venituri .
Apoi avem un slicer pentru Data și Numele clientului .
Ceea ce dorim să facem pentru o anumită perioadă de timp este să identificăm primele trei date care nu sunt zero. Și apoi în acele trei date de top, vrem să identificăm nivelul financiar.
În prima versiune a măsurii am enumerat datele care sunt mai mici decât 29.04.2021 în care avem ceva venituri.
Și la aceste date, vrem să identificăm nivelurile financiare care au realizat unele venituri. Vă voi explica cum putem realiza acest calcul.
Cuprins
Modelarea datelor
Înainte de a scrie DAX-ul propriu-zis, să aruncăm o privire rapidă la modelul de date care conține mai multe tabele. Suntem interesați doar de tabelul de date , tabelul de date , tabelul de categorii de locuri de muncă și tabelul de clienți .
Rețineți că tabelul Client nu este cu adevărat important, deoarece este folosit doar în interiorul unui slicer.
Măsura veniturilor este calculată în tabelul de date. Categoria Job conține nivelul financiar pe care îl avem pe matrice. Apoi folosim coloana Date din tabelul Date din slicer-ul nostru.
Versiunea 1
Să scăpăm de tot din matrice și să începem de la zero. Voi crea o măsură nouă și o voi numi V1 pentru că aceasta va fi versiunea unu. Vom arunca o privire și la alte două variante.
Pregătirea contextului filtrului
Primul lucru pe care îl vom face este să recuperăm toate valorile nivelului financiar din contextul filtrului. Vom crea o și o vom numi ca FinancialLevelInFilterContext .
Pentru a prelua valorile din contextul de filtrare, vom folosi din tabelul de categorii de locuri de muncă care conține coloana nivel financiar. Apoi trebuie să creăm o altă variabilă și să o denumim Rezultat . Apoi scrieți și închideți-l și el.
În primul argument, avem o selecție peste data slicer. În acele date, dorim să identificăm datele care nu au 0 și au cel puțin unele venituri.
Dacă doriți să accesați toate datele care sunt selectate în acel slicer, trebuie să folosim peste tabelul Date.
Și, deoarece avem nivelul financiar pe matrice, trebuie să ne asigurăm că eliminăm acea valoare specială din contextul filtrului. Putem folosi peste categoria Job și apoi scriem Financial Level 1.
Acum că contextul nostru de filtru este pregătit, putem scrie cel mai interior calcul pentru CALCULATE. În primul rând, vom declara o variabilă, care va fi o combinație a nivelului financiar și a coloanei de dată, așa cum am văzut în primul tabel.
Apoi vom folosi și vom folosi tabelul de date pentru a rezuma aceste două tabele: categoria job și tabelul de date.
Aceasta va oferi combinația dintre nivelul financiar și coloana de dată care există în tabelul de date. Apoi vom crea o altă variabilă în care vom stoca valoarea rândului de venituri pentru prima variabilă pe care am creat-o.
Numele acestei variabile va fi FinancialLevelAndDatesWithRevenue . Codul acestei variabile va fi peste variabila anterioară. Apoi vom crea o coloană virtuală care va fi Venituri pentru a iniția tranziția de context. Deci, pentru fiecare rând al acestei variabile, am alocat venitul.
Acest tabel conține venitul, care are și zero. Trebuie să filtram acele rânduri cu zero. Pentru a face acest lucru, putem crea o altă variabilă și o denumim ca RemoveZeroes .
Vom folosi pentru variabila anterioară, apoi ne asigurăm că venitul nu va fi egal cu zero. Poate fi mai mare decât zero sau mai mic decât zero, dar nu trebuie să fie strict egal cu zero.
Și apoi vom prelua data din variabila RemoveZeroes . Pentru a face acest lucru, putem crea o altă variabilă și o denumim KeepOnlyDates .
Pot folosi pentru a scăpa de datele duplicate care sunt returnate de .
În continuare, vom identifica primele trei date în ordine descrescătoare. Vom folosi o altă variabilă și o vom numi Last3Dates , apoi vom folosi .
Apoi vom folosi ul pe ultimele trei date din coloana de date, apoi vom folosi un delimetru.
Să glisăm și să plasăm măsura noastră nou creată în interiorul acelei matrice. Rezultatul pe care îl obținem este 31/03/2021, 07/04/2021 și 02/04/2021. Aceasta înseamnă că măsura noastră funcționează.
Să revenim la editor și să scăpăm de porțiunea RETURN CONCATENATEX. Pentru a prelua ultimele trei date, ceea ce putem face este să verificăm ce rânduri din variabila RemoveZeroes fac de fapt parte din ultimele trei date.
Și pentru asta, vom crea o altă variabilă DatesInLast3Dates și vom folosi funcția FILTER pe RemoveZeroes . Aceasta va returna un tabel care cuprinde o categorie de job și o dată.
Vom rezuma coloana de venituri pe care am creat-o în acel tabel. Să returnăm SUMX peste DatesInLast3Dates, apoi să rezumăm coloana venituri.
Cu acest calcul, obținem o singură valoare pentru fiecare rând, deoarece am eliminat categoria Job din contextul de filtru.
Vom folosi variabila pe care am creat-o la început pentru a verifica dacă fiecare rând al variabilei DatesInLast3Dates este disponibil în contextul filtrului. Putem scrie o altă variabilă și o denumim IsInFilterContext .
Aceasta va filtra datele din variabila DatesInLast3Dates . Apoi voi returna SUMX în contextul IsInFilter și voi rezuma coloana de venituri.
Odată ce apăsăm Enter , puteți vedea că obținem același rezultat pe care l-am avut la început.
Verificarea rezultatului calculului LuckyTemplates în limbajul DAX
Pentru a verifica dacă obținem de fapt rezultatul corect, putem crea un nou tabel CALCULATE care ne va ajuta să depanăm, să identificăm și să verificăm că codul pe care l-am scris până acum returnează de fapt rezultatul corect.
Să creăm o copie a codului pe care l-am scris până acum. Pur și simplu voi copia porțiunea care este evidențiată mai jos, voi reveni pentru a crea un nou tabel și voi lipi codul evidențiat. Nu ne vom deranja să numim acest tabel pentru că nu ne interesează.
Și putem scrie pur și simplu RETURN DatesInLast3Dates . Dacă dau clic pe Confirm , obținem un tabel, dar știm că de fapt nu returnează de fapt rezultatul corect, deoarece trebuie de fapt să imităm comportamentul slicer-ului.
Putem împacheta acel cod într-un CALCULATETABLE și putem indenta totul. În ultima parte, voi scrie că data ar trebui să fie mai mare sau egală cu 2021-03-15 și că numele clientului ar trebui să fie egal cu DHL Supply Chain .
Tabelul pe care l-am creat în interiorul acelei măsuri returnează practic rezultatul corect. Putem folosi un CALCULATETABLE pentru a verifica tabelul virtual pe care îl creați în calculul dvs.
Alte calcule LuckyTemplates pentru limbajul DAX
Acum că știm că calculul nostru funcționează și înțelegem ce se întâmplă de fapt în culise, putem analiza alte metode pentru a calcula aceeași problemă. Mai întâi de toate, să creăm un duplicat al măsurii pe care am creat-o deja.
Versiunea 2
De data aceasta, nu ne vom baza pe funcțiile VALUES și FILTER, așa că vom scăpa de ele. Vom elimina rezultatul returnat, precum și ultima variabilă pe care am creat-o în CALCULATE. Apoi, vom converti CALCULATE în CALCULATETABLE.
Și în loc să returnăm o valoare scalară, de data aceasta vom returna DatesInLast3Dates . Acest lucru va returna același CALCULATETABLE pe care l-am făcut mai devreme. Vom folosi funcția CALCULATE și, în primul argument, vom calcula măsura veniturilor și vom injecta CALCULATETABLE ca context de filtru.
Odată ce îl aduc în matrice, puteți vedea că returnăm aceeași valoare totală mare pentru fiecare celulă.
Utilizarea funcției KEEPFILTERS
În acest moment, știm că calculul din spatele scenei funcționează corect, dar cum putem ști sigur că pentru fiecare celulă raportăm doar valoarea pentru acel nivel financiar?
Cu ajutorul CALCULATETABLE, am creat un tabel care conține nivelul financiar, coloana cu dată și coloana venituri. Putem folosi funcția de filtru cheie pentru a crea o intersecție între contextul de filtru care există în afara CALCULATETABLE și cel care este creat de CALCULATETABLE.
Odată ce facem clic pe Confirmare, putem vedea că raportăm valoarea corectă pentru fiecare celulă și că atât versiunea 1, cât și versiunea 2 returnează valoarea corectă.
Deci cum funcționează asta? Tabelul CALCULATE va returna nivelul de întreținere , apoi Închiriere , Service extern și Piese de schimb . Funcția va crea o intersecție între întreținerea și acel tabel.
Închirierea va crea contextul inițial al filtrului, apoi CALCULATETABLE va returna toate valorile categoriei Job. Apoi va exista o intersecție între Închiriere și tabelul returnat de CALCULATETABLE. Vom returna numai tabelele sau rândurile pentru acea parte de închiriere.
Și apoi, în sfârșit, când injectăm SUMMARIZE în contextul filtrului, funcția CALCULATE va calcula veniturile numai pentru închiriere. Același proces se întâmplă pentru fiecare rând.
Versiunea 3
Să ne uităm la un alt mod de a calcula același calcul folosind limbajul DAX LuckyTemplates. Să creăm o copie a măsurii din versiunea 2 și să creăm o altă măsură. Vom numi această versiune 3.
Ideea din spatele acestui calcul este că, deoarece calculăm venitul folosind funcția CALCULATE, nu trebuie să folosim partea ADDCOLUMNS deoarece duplicăm același lucru în interiorul și în afara CALCULATE. În schimb, putem scrie pur și simplu că Venitul nu ar trebui să fie egal cu 0.
După ce dau clic pe Confirmare, trebuie să ne asigurăm că codul funcționează, așa că haideți să tragem măsura în interiorul matricei.
Puteți vedea că codul returnează de fapt aceeași valoare pentru fiecare celulă.
Dacă încerc să schimb contextul filtrului schimbând data în sectorul de date și selectând câteva valori din Numele clientului, puteți vedea că toate cele trei măsuri returnează de fapt aceeași valoare pentru fiecare rând.
Concluzie
În acest tutorial, am învățat cum să folosim o logică complexă de parcurgere înapoi în timp de la data de încheiere pentru a identifica primele trei date. Pe baza acestei tehnici LuckyTemplates a limbajului DAX, am putut să calculăm venitul și să arătăm numai acele valori care există în contextul filtrului. Asta e tot pentru moment în acest tutorial.
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