Ce este Sinele în Python: Exemple din lumea reală
Ce este Sinele în Python: Exemple din lumea reală
În acest tutorial, veți învăța cum să optimizați o măsură în LuckyTemplates. Optimizarea măsurilor din raportul dvs. îmbunătățește performanța codurilor dvs. în producerea de informații și date valoroase. De asemenea, veți afla despre diferitele metode de evaluare și despre cum să le aplicați pentru a vă optimiza raportul. Puteți viziona videoclipul complet al acestui tutorial în partea de jos a acestui blog.
Cuprins
1. Analizați Performanța Codului
În acest exemplu, trebuie să optimizați acest raport:
Acesta este modelul de date pe care îl veți utiliza:
Tabelul Jobs conține toate informațiile referitoare la orice lucrare care a fost efectuată într-o anumită perioadă de timp.
Acest tabel este baza tuturor măsurilor pe care urmează să le optimizați:
În primul rând, trebuie să testați performanța raportului.
Accesați fila Vizualizare și alegeți Analizor de performanță . Apoi, faceți clic pe Start Recording and Refresh Visuals . Așteptați ca analizorul să redă imaginea.
După ce ați făcut acest lucru, derulați lista de defalcare a stimulentelor și faceți clic pe Copiați interogarea .
Apoi, selectați Instrumente externe pentru a accesa DAX Studio și priviți codul generat de LuckyTemplates.
Apoi, lipiți interogarea copiată în spațiul de lucru.
Variabile în măsură
Prima variabilă este DateClosed , care este slicer-ul de pe tabloul de bord. Utilizează o coloană din tabelul Fact pentru a obține valorile anumitor perioade în slicer.
Următoarea variabilă este JobLost , care verifică dacă există false sau necompletate ale datelor Job Lost.
Ultima variabilă este MatrixVisual . Acesta este inima codului. Afișează coloana rezumată generată de LuckyTemplates pentru a popula imaginile matriceale. Acesta grupează tipul de pierdere a locurilor de muncă în această matrice și injectează filtrele care provin de la slicere. Apoi, adaugă coloane extinse.
Odată ce coloana de rezumat finalizează execuția, veți vedea rezultatele în panoul de sub cod.
LuckyTemplates folosește rezultatul pentru a popula imaginile matriceale.
Cache rece pentru DAX Studio
Apoi, trebuie să verificați timpul necesar executării întregului cod. Pentru a face acest lucru, porniți Timingurile serverului și apoi alegeți Clear Cache Then Run .
Când încercați să optimizați o măsură în LuckyTemplates folosind DAX Studio , este mai bine să operați în scenariul cache rece, astfel încât timpul pe care îl veți obține să fie corect. După aceea, apăsați F5 și așteptați finalizarea operației în fila Server Timings .
Odată ce este complet, puteți vedea că timpul total de execuție este de 3,6 secunde. A petrecut cea mai mare parte a timpului în motorul de formulă și a petrecut 57 de milisecunde în motorul de stocare
De asemenea, puteți vedea că a găsit 383 de interogări ale motorului de stocare. Din toate aceste interogări, există 327 care sunt turnate în memorie pentru a putea fi reutilizate.
2. Analizați o măsură în LuckyTemplates
În continuare, trebuie să optimizați aceste 3 măsuri identice.
Trebuie să extrageți aceste măsuri într-un fișier diferit și să îl conectați la modelul de date pe care îl utilizați.
După aceea, porniți Timingurile serverului pentru a vedea timpul luat de cele 3 măsuri în popularea imaginilor.
Rezultatele rulării arată că măsurile consumă 1,85 secunde pentru a prelua un rezultat.
Rezultatul arată un tabel format din 10 rânduri și 3 coloane extinse care aparțin coloanelor rezumate.
Coloana Tip pierdere conține 10 valori unice pe care codul le calculează pentru a obține procentele de stimulare.
Timpul necesar codului este exponențial de mare. Aici și când trebuie să le optimizați.
Măsura RB Incentive% în LuckyTemplates
Aceasta este o măsură RB Incentive% în LuckyTemplates. Este una dintre cele 3 măsuri principale utilizate în acest exemplu.
Puteți vedea că încearcă să calculeze procentul de stimulare.
Are o variabilă, JobType, care preia valoarea Lost Type în contextul curent al filtrului. De asemenea, verifică dacă există doar o singură valoare vizibilă în contextul curent al filtrului. Trebuie să utilizați o funcție , astfel încât de fiecare dată când este îndeplinită o condiție, aceasta să dea rezultatul corespunzător.
Acest cod de măsurare generează multă grăsime de stocare a motorului, ceea ce mărește timpul în durata totală a codului.
Acum, reveniți la DAX Studio pentru a verifica cantitatea de interogări ale motorului de stocare pe care le generează măsura.
Puteți vedea că a fost nevoie de 600 de milisecunde pentru a executa și 43 de interogări ale motorului de stocare pentru a prelua pur și simplu datele pentru cele 10 rânduri.
Acum, verificați datele care sunt solicitate de la motorul de stocare. În prima interogare, există un tip de pierdere de locuri de muncă și DCOUNT de tipul de pierdere de locuri de muncă.
Următoarea interogare are Jobs Data Closed, care provine din slicer-ul din raport.
În cel de-al treilea cod, veți vedea un alt tip de pierdere de locuri de muncă cu ID-ul de date de apel invers.
Într-o altă linie, veți vedea cele mai importante linii de cod.
Primul lucru pe care îl vedeți este plăților de locuri de muncă primite, facturate și cheltuielilor reale.
Urmează funcția WHERE care afirmă o condiție și rezultatul ei corespunzător. Rezultatul va varia în funcție de selecția slicer-ului și de declarația de comutare din măsura RB Incentive%.
Veți observa, de asemenea, că codul de pe liniile 12 și 14 este același.
Dacă derulați la dreapta, puteți vedea că există linii cu aceleași interogări. Interogările de pe linii sunt direcționate de declarația switch din măsura RB Incentive%.
Dacă reveniți la măsura RB Incentive% din LuckyTemplates, puteți vedea de câte ori se repetă o interogare și cum se reflectă în interogările motorului de stocare.
Logica din spatele IF și Switch
Acum, pentru a înțelege de ce interogările sunt executate de mai multe ori, trebuie să înțelegeți logica funcțiilor și SWITCH .
Trebuie să le executați separat într-un plan de interogare. Dar înainte de a face asta, asigurați-vă că vă conectați la baza de date și activați Planul de interogare.
Executați instrucțiunea SWITCH în planul de interogare. Apoi, evidențiați declarația și apoi apăsați Enter.
Aceasta va genera un plan de interogare logic cu diferite operații.
Apoi, executați instrucțiunea IF evidențiind instrucțiunea și apăsând enter.
Puteți vedea că generează același Plan de interogare logic.
Acest lucru se datorează faptului că ori de câte ori utilizați o funcție SWITCH , motorul convertește intern acea funcție într-o instrucțiune IF . Dar o instrucțiune SWITCH este recomandată deoarece crește lizibilitatea codului dvs.
După aceea, trebuie să înțelegeți cum este executat un cod în cadrul funcției IF sau SWITCH .
Acesta este un exemplu de cod care conține o instrucțiune SWITCH .
Are măsuri pentru profitul brut, estimarea totală și facturarea totală, care sunt toate SUMA diferitelor coloane. Are, de asemenea, o funcție peste of Jobs Loss Type și o instrucțiune SWITCH și TRUE .
Când executați acest cod, veți vedea logica din spatele funcțiilor.
Prima interogare primește tipul de pierdere de locuri de muncă distinct din tabelul de locuri de muncă.
Pe lângă tipul de pierdere a locurilor de muncă, primește și suma estimării locurilor de muncă.
În interiorul condiției WHERE , puteți vedea și valorile care există în coloana Jobs Loss Type.
3. Folosiți metode de evaluare a codului
În DAX, există 3 metode de evaluare a codurilor:
Aceste metode vă vor ajuta să optimizați un cod sau o măsură în LuckyTemplates.
Metoda 1: Evaluare strictă
Exemplul prezentat mai jos folosește metoda de evaluare strictă.
Logica din spatele acestuia este că, dacă contextul tipului de pierdere a locurilor de muncă este egal cu A, acesta va oferi profitul brut. În caz contrar, oferă Estimarea Totală. Codul face acest lucru pentru fiecare rând din Tipul pierderii locurilor de muncă.
Acesta este un alt exemplu de măsură în LuckyTemplates care utilizează evaluarea strictă.
Când executați acest cod, va genera 5 interogări de motor de stocare.
Cu Evaluare strictă, codul oferă Estimarea Totală dacă Profitul Brut înmulțit cu 1,4 este mai mare decât Estimarea Medie. În caz contrar, va oferi Profit Brut.
Utilizarea Evaluării stricte produce mai multe interogări ale motorului de stocare, deoarece instrucțiunea IF verifică concurența Profitului Brut de mai multe ori și în cele din urmă va împiedica performanța întregii operațiuni.
Metoda a 2-a: Evaluare dornică
Acesta este același cod ca exemplul anterior.
Dar, în loc să calculeze măsurile din interiorul instrucțiunii IF , a calculat totul în înainte de RETURN .
Înseamnă că, înainte de a verifica declarațiile, primește toate valorile Profitului Brut și Estimarea Totală pentru toate tipurile de Pierdere a locurilor de muncă.
Când executați acest cod, numărul de motoare de stocare se reduce la 3.
Îmbunătățește performanța întregii operațiuni.
În prima interogare de operație, primește tipul de pierdere a locurilor de muncă și suma estimarii locurilor de muncă și a profitului brut.
Următoarea interogare obține suma estimării locurilor de muncă din Stabilul locurilor de muncă. Acesta este utilizat la calcularea estimării medii.
Ultima interogare oferă tipul de pierdere de locuri de muncă distinct pentru valorile scrise pe ADDCOLUMNS .
Utilizarea Eager Evaluation obține totul într-un singur cache de date. Datele sunt, de asemenea, evaluate și repetate pe motorul de formule. Declarația IF va returna fie Estimarea Totală, fie Profitul Brut, în funcție de evaluarea Adevărat sau Fals.
Evaluarea dornică nu este întotdeauna cea mai bună metodă de optimizare a codurilor. Evaluarea strictă va avea ca rezultat o performanță mai bună dacă aveți coduri complexe. Totul depinde de funcțiile pe care le utilizați în codul DAX.
Dezavantajul Eager Evaluation este că dacă creați obiecte de valoare înaintea unei instrucțiuni IF sau SWITCH și utilizați acele variabile în interiorul instrucțiunii care nu ar trebui să fie executate niciodată, motorul va calcula în continuare acele variabile.
Iată un exemplu de dezavantaj:
În mod ideal, dacă tipul de pierdere a locurilor de muncă este egal cu A, ar trebui să obțină profit brut. În caz contrar, primește Estimare totală.
Deoarece nu există nicio valoare în coloana Tip de pierdere a locurilor de muncă care să fie egală cu A, ar trebui să primească întotdeauna Estimare totală. Cu toate acestea, oferă în continuare profitul brut în memoria cache de date.
Dacă te uiți la prima interogare, primește tipul de pierdere a locurilor de muncă și suma profitului brut și estimarea locurilor de muncă.
În următoarea interogare, primește un tip de pierdere de locuri de muncă distinct din tabelul de locuri de muncă.
Metoda a 3-a: IF.EAGER Evaluare
Următoarea metodă este evaluarea funcției IF.EAGER care reproduce comportamentul Evaluării Eager.
Vă permite să scrieți un cod care reprezintă evaluarea strictă și să-l executați cu Eager Evaluation.
Dacă te uiți la acest exemplu de cod, este exact același cu codul de evaluare strictă. Singura diferență este că aceasta folosește funcția IF.EAGER în loc de IF .
Înainte de a executa codul, asigurați-vă că vă conectați la modelul LuckyTemplates și activați Timingul serverului. Odată terminat, apăsați F5.
Puteți vedea că a generat 3 interogări de motor de stocare.
Prima interogare primește tipul de pierdere a locurilor de muncă și suma estimării locurilor de muncă și a profitului brut.
A doua interogare primește suma Estimării locurilor de muncă.
Ultima interogare primește tipul de pierdere de locuri de muncă distinct din tabelul de locuri de muncă.
Veți observa că a executat același comportament ca Eager Evaluation.
Rezumatul metodelor de evaluare
În încercarea de a îmbunătăți performanța calculelor dvs., trebuie să vă amintiți următoarele:
Dar rețineți că trebuie să testați aceste trei metode pentru a afla ce este cu adevărat cel mai bine de utilizat în raportul dvs.
4. Optimizați o măsură în LuckyTemplates
Lecția principală din acest tutorial este optimizarea codurilor.
Reveniți și uitați-vă la măsura RB Incentive% care este executată utilizând evaluarea strictă. Apoi, încercați să-l evaluați folosind Eager Evaluation.
Începeți prin a crea variabile și introduceți funcția RETURN .
Schimbați referințele de măsură cu variabilele.
După aceea, confirmați măsura și mergeți la DAX Studio pentru a vedea dacă a îmbunătățit performanța.
Acesta arată că timpul total este de 642 de milisecunde, iar numărul total de interogări ale motorului de stocare a fost redus la 39.
Acum, creați variabilele pentru toate datele și modificați toate referințele de măsură la variabilele corespunzătoare.
Apoi, confirmați măsura și executați codul în studioul DAX.
Timpul total de execuție și cantitatea totală de interogări ale motorului de stocare au fost reduse de la 600 de milisecunde la 170 de milisecunde și, respectiv, de la 43 de interogări la 15 interogări.
De asemenea, puteți vedea că nu există duplicate. Având variabile în codul dvs., le îmbunătățește lizibilitatea și performanța.
Optimizare avansată pentru o măsură în LuckyTemplates
Apoi, trebuie să optimizați în continuare codurile DAX.
În loc să utilizați , utilizați funcția
HASONEVALUE numără numărul de valori disponibile în contextul filtrului, care este o operație foarte intensă. Între timp, IINSCOPE verifică dacă coloana care este furnizată este folosită pentru grupare sau nu.
După modificarea funcțiilor, confirmați măsura și executați-o în DAX Studio.
Puteți vedea că numărul de interogări ale motorului de stocare este acum 12. Timpul total de execuție a devenit, de asemenea, 105 milisecunde.
În a doua interogare, veți observa un ID de date de apel invers.
Acest lucru se întâmplă uneori când utilizați SELECTEDVALUE cu câmpul de text. Când vedeți date de apel invers, motorul de stocare apelează motorul de formule pentru a ajuta la rezolvarea complexității codului. Acest lucru încetinește performanța măsurii dvs.
Trebuie să eliminați datele de apel invers pentru a avea o performanță mai bună în raportul dvs. Pentru a face acest lucru, trebuie să creați un tabel de configurare în modelul de date.
Accesați opțiunea Introduceți date și inserați datele. Denumiți tabelul LossTypeConfigTable .
Apoi, faceți clic pe Editați pentru a schimba tipul de date al coloanei pe care urmează să o importați.
Tipul de date al ID-ului tipului de pierdere ar trebui să fie o valoare pentru profesor, astfel încât să poată fi utilizat în cadrul funcției SELECTEDVALUE .
Odată ce a fost încărcat în model, creați o relație între tabelul Jobs și tabelul LossTypeConfigTable pe baza tipului de pierdere.
După ce ați creat o relație, mergeți la tabelul Jobs și adăugați o nouă coloană. Numiți-l Loss ID și apoi introduceți formula.
Utilizați funcția pentru tabelul de configurare și apoi extrageți ID-ul tipului de pierdere.
Apoi, reveniți la măsura RB Incentive% și faceți referire la câmpul numeric în loc de câmpul text. În SELECTEDVALUE , înlocuiți tipul pierderii cu ID-ul pierderii.
Apoi, modificați toate măsurile din cod. Utilizați o valoare întreagă în loc de valori de text pentru a verifica tipul de lucrare.
După ce ați schimbat codul, confirmați măsura și executați-o în DAX Studio.
ID-ul de date Callback este eliminat în interogare, iar timpul de execuție al codului este redus la 93 de milisecunde.
Măsura RB Incentive% este acum complet optimizată.
5. Optimizați alte măsuri în LuckyTemplates
De asemenea, trebuie să optimizați măsurile WR Incentive% și QB Incentive%.
Copiați și inserați codul exact folosit în măsura RB Incentive%. Apoi, executați cele 3 măsuri împreună.
Timpul total de execuție este optimizat și redus de la 1855 milisecunde la 213 milisecunde. Există, de asemenea, doar 12 interogări ale motorului de stocare.
Primele două interogări creează contextul de filtru, iar restul reprezintă numărul exact de valori din coloana Jobs Loss Type.
Deoarece toate măsurile au fost optimizate, rulați codul original și vedeți cum s-a schimbat performanța. Datele arată că acum este calculat în 1,9 secunde.
Performanța întregului cod este acum optimizată, făcând raportul dvs. mai rapid și mai bun.
Optimizează funcțiile DAX cu acest nou curs
Transformări LuckyTemplates simple pentru date mai optimizate
Optimizează formulele LuckyTemplates folosind DAX avansat
Concluzie
În rapoartele LuckyTemplates, măsurile ar trebui optimizate pentru a se asigura că codurile DAX funcționează fără probleme. Acest lucru îmbunătățește și performanța generală a raportului dvs.
Ați învățat diferitele metode pentru a vă optimiza măsura în LuckyTemplates și ați învățat cum să evaluați pe care să o utilizați în funcție de contextul raportului dvs.
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