Optimizarea DAX pentru LuckyTemplates folosind DAX Studio – Formula Engines

Optimizarea DAX pentru LuckyTemplates folosind DAX Studio – Formula Engines

Când vă optimizați modelul de date și DAX pentru LuckyTemplates, vă ajută să vă amintiți că există două motoare care rulează în culise — motorul de formule și motorul de stocare .

Aceste două motoare lucrează împreună pentru a returna utilizatorului rezultatele necesare. Ele furnizează rezultatele setate sub forma unui tabel sau a unei valori de scară.

Cuprins

Rolul motorului de formule

În acest articol, ne vom concentra asupra motorului de formulă.

Motorul de formule este motorul de nivel superior care gestionează întreaga arhitectură a unei interogări.

Indiferent ce faceți în timp ce executați o interogare sau când creați o coloană calculată sau un tabel calculat, motorul de formule pornește.

Motorul de formule înțelege interogările primite nu doar în DAX, ci și în MDX. De exemplu, atunci când utilizați Excel, creați modele pivot bazate pe tabele pivot, iar tabelele pivot folosesc de fapt limbajul MDX.

Aici pornește motorul de formule. Deoarece înțelege atât DAX, cât și MDX, puteți utiliza un alt model LuckyTemplates. Interogările trimise din acest model de date vor folosi DAX, în timp ce interogările care provin din modelul pivot vor folosi MDX.

Cum funcționează Formula Engine

Înțelegerea interogărilor care provin fie din sursa MDX, fie din sursa DAX este doar un factor în performanța motorului de formule. De asemenea, parcurge alți pași pentru a vă ajuta să rezolvați întrebările dvs.

În primul rând, trebuie să genereze un plan de interogare pe care motorul de stocare îl înțelege . Ca motor de nivel inferior, motorul de stocare nu știe de fapt dacă un tabel pivot din Excel sau o imagine din LuckyTemplates a executat interogarea.

La crearea unui plan de interogare, motorul de formule construiește mai întâi un plan de interogare logic, apoi creează un plan de interogare fizic. Atât planul de interogare logic, cât și cel fizic ar trebui să semene unul cu celălalt.

După finalizarea planului fizic de interogare, utilizatorul sau instrumentul client primește setul de rezultate. De acolo, instrumentul client dictează modul în care va folosi rezultatele sau setul de date pentru a afișa rezultatul final pentru utilizator.

Principalele limitări ale motorului de formule

Motorul de formule joacă un rol important atunci când optimizați DAX pentru LuckyTemplates folosind DAX Studio. Cu toate acestea, vine și cu unele limitări.

În primul rând, motorul de formule folosește întotdeauna un singur nucleu pentru a vă gestiona întreaga operațiune, indiferent de câte nuclee CPU sunt disponibile în sistemul dumneavoastră .

Când îmi deschid Managerul de activități, veți vedea că procesorul meu are șase nuclee.

Optimizarea DAX pentru LuckyTemplates folosind DAX Studio – Formula Engines

În ciuda acestui fapt, motorul de formulă va alege în continuare unul dintre cele șase nuclee cu care să lucreze, în timp ce lasă motorul de stocare să folosească restul.

În al doilea rând, motorul de formule nu are acces direct la baza ta de date . Din cauza acestei limitări, ar trebui să stocați datele fie în memoria internă, fie puteți stoca în baza de date și puteți crea un DirectQuery peste acea bază de date.

De asemenea, se bazează pe motorul de stocare pentru a obține datele sub forma unui cache de date. Motorul de formule iterează apoi peste acel cache de date pentru a continua înainte de a putea oferi rezultate utilizatorului final.

Cum ajută Motorul de formule la optimizarea DAX pentru LuckyTemplates

Uneori, când încercați să vă optimizați modelul de date sau DAX pentru LuckyTemplates, veți observa că motorul de stocare încetinește pe măsură ce execută interogări. În acest caz, puteți utiliza motorul de formule pentru a finaliza întregul calcul pentru a optimiza procesul.

Rețineți că, dacă motorul de formule ajunge să construiască singur întregul tabel, setul de rezultate creat în proces nu va fi utilizat în interogările ulterioare care vor fi generate de instrumentul client dacă sunt similare cu interogările executate anterior . Dar în cazul în care motorul de stocare furnizează memoria cache de date, atunci acel cache special de date poate fi păstrat în memorie, astfel încât să poată optimiza cererile venite de la instrumentul client.

Cum va funcționa?

Să presupunem că scriem o interogare care să fie executată complet de motorul de stocare, dar cu unele aspecte care urmează să fie calculate de motorul de formule. În acest caz, motorul de stocare va trimite un cache de date înapoi către motorul de formule și acel cache de date (în cazul în care este unul simplu) poate fi păstrat în memorie.

Acum, dacă o interogare similară apare în câteva secunde mai târziu, în loc să scaneze încă o dată întregul model de date, motorul de formule sau motorul de stocare va folosi acel cache de date, astfel încât timpul de interogare să poată fi redus și experiența utilizatorului să fie redusă. îmbunătățită.

Reducerea sarcinii pe motorul de formule

Din nou, motorul de formule înțelege codurile DAX și MDX.

Deci, dacă utilizați , și alte sarcini, motorul de formule cunoaște toate funcțiile pe care le utilizați în limbajul DAX și le va putea rezolva pe toate singur. Cu toate acestea, acest lucru ar putea afecta performanța interogării, mai ales că motorul de formule încearcă să facă totul folosind un singur nucleu.

Acesta este motivul pentru care trebuie să fim atenți și la reducerea sarcinii pe motorul de formulă și la creșterea sarcinii pe motorul de stocare.

Un bun exemplu de cât de diferit este calculul în cadrul motorului de formule față de motorul de stocare ar fi utilizarea CROSSJOIN versus .

Când utilizați CROSSJOIN, doar o cantitate limitată de date va fi transmisă prin motorul de stocare. În ceea ce privește restul calculului, totul va fi efectuat de motorul de formule. În comparație, utilizarea SUMMARIZE înseamnă executarea întregii interogări în motorul de stocare.

Desigur, acest lucru ar depinde și de modul în care este utilizat SUMMARIZE.

Dacă SUMMARIZE este folosit ca funcție cea mai interioară, atunci cu siguranță va fi împins în jos la motorul de stocare. Dar, în unele cazuri, SUMMARIZE este utilizat împreună cu un cod diferit care necesită ca motorul de formule să funcționeze. În acest caz, motorul de formule va interveni și va face treaba.

Știind unde se duce sarcina vă poate ajuta să optimizați performanța interogării dvs., mai ales când aveți în vedere care sunt capacitatea și limitările pentru motoarele pe care le aveți la dispoziție.

Instrumente care pot ajuta la optimizarea DAX pentru LuckyTemplates

Optimizarea DAX va fi mai ușoară dacă maximizați instrumentele care o fac posibilă. DAX Studio este unul dintre aceste instrumente.

Să luăm exemplul de mai devreme în care motorul de formule preia întreaga sarcină de finalizare a calculului atunci când este utilizată funcția SUMMARIZE. DAX Studio vă poate ajuta să vă rescrieți codul într-un mod care să împingă SUMMARIZE în motorul de stocare, eliberând sarcina pe motorul de formule. Acest lucru poate îmbunătăți performanța modelului de date și a interogărilor.

Desigur, acest lucru ar trebui să funcționeze fără probleme pentru interogări simple. Există și scenarii mai complicate.

De exemplu, puteți construi modele compozite care utilizează două motoare de stocare în cadrul modelului de date în sine. Unul ar putea fi pentru Vertipaq, în timp ce celălalt ar fi pentru DirectQuery. În acest caz, baza de date trebuie să fie optimizată astfel încât interogările generate să fie construite pentru acel model specific de date relaționale.

Să presupunem că aveți două tabele în interiorul modelului dvs. de date - tabelul Produse și tabelul Vânzări. Tabelul Products se află în depozitul Vertipaq, în timp ce tabelul Sales, fiind un tabel mai mare, este stocat direct în baza de date printr-o conexiune DirectQuery.

Să presupunem, de asemenea, că trageți coloana Brand în matrice, precum și măsura vânzărilor totale care provine din tabelul Vânzări din conexiunea DirectQuery.

În acest caz, motorul de formulă va trebui să efectueze operația între ambele motoare.

În primul rând, va prelua coloanele Cheie de produs și Marca din tabelul Produse. Apoi, va prelua coloanele Preț net, Cantitate și Cheie de produs din tabelul Vânzări. Odată ce are memoria cache de date atât de la Vertipaq, cât și de la DirectQuery, motorul de formule va trebui să ia memoria cache de date și să încerce să le alăture pentru a furniza rezultatele utilizatorului final.


Tehnici și lecții de optimizare a interogărilor DAX
Performanța interogărilor și configurarea DAX Studio
Optimizarea DAX: unde să găsiți capcana DAX ascunsă

Concluzie

Motorul de formulă joacă cu adevărat un rol important atunci când lucrați cu DAX. Cu toate acestea, este esențial să înțelegeți mai întâi cum funcționează înainte de a intra. Stăpânirea modului în care motorul de formule și motorul de stocare funcționează perfect împreună este esențial, mai ales dacă doriți ca interogările dvs. DAX să funcționeze mai bine.

Fiind motor de nivel superior din arhitectura serviciilor de analiză, motorul de formule trebuie să efectueze o mulțime de operațiuni. Dar odată ce înțelegeți și dezavantajele motorului de stocare, vă puteți da seama ce operație să împingeți în motorul de stocare și pe care să lăsați în motorul de formulă.

Vom săpă mai adânc în motorul de stocare într-un tutorial separat.

Toate cele bune,


Ce este Sinele în Python: Exemple din lumea reală

Ce este Sinele în Python: Exemple din lumea reală

Ce este Sinele în Python: Exemple din lumea reală

Cum să salvați și să încărcați un fișier RDS în R

Cum să salvați și să încărcați un fișier RDS în R

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.

Primele N zile lucrătoare revizuite – O soluție de limbaj de codare DAX

Primele N zile lucrătoare revizuite – O soluție de limbaj de codare DAX

Î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.

Prezentați perspective utilizând tehnica vizuală dinamică cu mai multe fire în LuckyTemplates

Prezentați perspective utilizând tehnica vizuală dinamică cu mai multe fire în LuckyTemplates

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.

Introducere la filtrarea contextului în LuckyTemplates

Introducere la filtrarea contextului în LuckyTemplates

Î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.

Cele mai bune sfaturi pentru utilizarea aplicațiilor din serviciul online LuckyTemplates

Cele mai bune sfaturi pentru utilizarea aplicațiilor din serviciul online LuckyTemplates

Vreau să arăt cum serviciul online LuckyTemplates Apps poate ajuta la gestionarea diferitelor rapoarte și informații generate din diverse surse.

Analizați modificările marjei de profit ore suplimentare – Analytics cu LuckyTemplates și DAX

Analizați modificările marjei de profit ore suplimentare – Analytics cu LuckyTemplates și DAX

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.

Idei de materializare pentru cache-urile de date în DAX Studio

Idei de materializare pentru cache-urile de date în DAX Studio

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.

Raportare de afaceri folosind LuckyTemplates

Raportare de afaceri folosind LuckyTemplates

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

Ce este LuckyTemplates Gateway? Tot ce trebuie să știți

Ce este LuckyTemplates Gateway? Tot ce trebuie să știți