Funcția CALCULATE DAX: Probleme și soluții

În blogul de astăzi, vom explora de ce nu ar trebui să utilizați funcția DAX pentru a obține Media pe categorie și vom oferi câteva soluții alternative pentru a obține aceleași rezultate pe care le doriți. Puteți viziona videoclipul complet al acestui tutorial în partea de jos a acestui blog .

Obținerea unei medii pe categorie în DAX este ciudat de complicată. Folosind funcția CALCULATE pentru a rezolva aceste calcule, noii utilizatori DAX pot găsi codul DAX mai greu de înțeles decât ar trebui. Vestea bună este că există soluții mai simple la această problemă. 

Cuprins

Prezentare generală a funcției CALCULATE DAX

Acum câteva luni, am prezentat la pentru LuckyTemplates. S-a numit DAX Counterculture unde am oferit câteva opinii alternative despre DAX. 

Una dintre cele principale se referă la utilizarea funcției CALCULATE. Am vorbit despre de ce nu ar trebui să folosești CALCULATE, mai ales dacă ești nou la DAX. 

CALCULATE este o funcție cu adevărat complexă de înțeles și utilizat. Face anumite presupuneri despre modelul dvs. de date și vă poate pune în multe probleme. 

De asemenea, am săpat în măsura rapidă a Microsoft pentru Running Total, deoarece nu funcționează în situații cu un singur tabel și are nevoie de o schemă stea pentru a funcționa corect.

Așadar, am arătat o alternativă mai ușoară care funcționează fie că este o schemă stea sau un model de tabel unic fără a fi nevoie de CALCULATE. 

CALCULATE DAX Formula

Acest blog va analiza o măsură rapidă numită Media pe categorie . Dacă vă aflați în desktopul LuckyTemplates, începeți prin a accesa panoul Câmpuri și a crea o măsură rapidă nouă .

Funcția CALCULATE DAX: Probleme și soluții

În fereastra Măsurare rapidă care va apărea, alegeți Media pe categorie din meniul derulant Calcul . Atunci, trage ? Valoare în câmpul de text Valoare de bază și Lună în câmpul Categorie .

Funcția CALCULATE DAX: Probleme și soluții

Apoi faceți clic pe OK și veți obține o imagine care arată astfel. 

Funcția CALCULATE DAX: Probleme și soluții

În axa x sunt sferturile - Sferturile 1, 2, 3 și 4. 

Și ceea ce doriți să faceți este să însumați valorile pentru fiecare lună prezentate mai jos și apoi să luați media acestor valori. Pe scurt, media pe categorie, care este subiectul blogului nostru. 

Funcția CALCULATE DAX: Probleme și soluții

Modelul nostru de date pentru aceasta este foarte simplu. Avem un tabel cu Date , Valori care sunt generate aleatoriu și Month , MonthSort și Sferturi în coloane separate. 

Funcția CALCULATE DAX: Probleme și soluții

Și avem același lucru în tabelul nostru de date cu Calendar Table, Month, MonthSort și Trier. Aceasta înseamnă că putem alege trimestrul sau luna fie din tabelul de date, fie din primul tabel. 

Funcția CALCULATE DAX: Probleme și soluții

Vestea bună cu Average Per Category este că de fapt funcționează indiferent dacă aveți un singur model de tabel sau o schemă stea.

În aceste imagini, folosim Trimestrul din primul tabel...

Funcția CALCULATE DAX: Probleme și soluții

 … în timp ce acesta folosește Trimestrul din tabelul nostru de date. Funcționează oricum. 

Funcția CALCULATE DAX: Probleme și soluții

Dar problema cu Media pe categorie este pur și simplu codul DAX. 

Funcția CALCULATE DAX: Probleme și soluții

Acest cod DAX este ciudat, pentru că, chiar dacă ești un expert DAX, probabil că te va deruta la prima vedere. Este construit în mod ciudat cu o instrucțiune CALCULATE fără clauză de filtru și doar include o instrucțiune de sumă. 

De fapt, este una dintre acele neplăceri ale mele când văd oameni pe forumuri care folosesc CALCULATE care pur și simplu împachetează o sumă fără niciun motiv. Dar, în acest caz, are de fapt un motiv.

Îmi încurcă mintea ori de câte ori le văd pentru că este doar un indiciu imediat că nu au idee ce fac cu funcția CALCULATE. Așa că recomand să stai departe de el. 

Cod DAX pentru medie pe categorie

Codul DAX prezentat mai sus folosește . Această funcție nu este într-un segment CALCULATE, ceea ce, din nou, o face ciudată. Se presupune că această funcție este construită pentru a fi utilizată în instrucțiunile CALCULATE pe baza documentației sale.

Codul folosește și , cu care nu sunt de acord. Nu ar trebui să folosească niciodată VALUES deoarece valorile distincte au tendința de a returna un rând necompletat dacă există un rând care nu se potrivește. Asta te poate pune în multe probleme, dar acesta este un subiect pentru alt videoclip.

În esență, ceea ce se întâmplă aici este că folosesc o funcție VALUES pentru a obține toate categoriile noastre. De exemplu, în trimestrul 1, adică ianuarie, februarie și martie. VALUES returnează, de asemenea, un tabel, dar folosesc o instrucțiune KEEPFILTER pentru a-l face valid ca prim parametru în . 

De asemenea, păstrează funcția CALCULATE pentru a fi executată în contextul KEEPFILTERS. Din cauza modului în care funcționează AVERAGEX, ia a doua expresie și o execută în contextul primei expresii. 

Care este problema, atunci?

În general, funcționează bine, dar nu pentru cineva nou la DAX. Cred că Microsoft a ratat cu adevărat barca când a creat această măsură rapidă, deoarece măsurile rapide se presupune că sunt pentru cei care nu cunosc DAX.

Măsurile rapide sunt o idee grozavă, cum ar fi „Să scriem câteva măsuri comune cu calcule diferite pentru dvs., deoarece sunteți nou în DAX și nu știți tot ce este de știut despre DAX”. Dar de ce le-ar construi în moduri atât de ciudate și complicate? 

Cum ar trebui cineva nou la DAX să arunce o privire la asta și să-și dea seama ce se întâmplă când, probabil, chiar și profesioniștii DAX se zgârie puțin peste asta? 

Așa că, pentru mine, au ratat o oportunitate de aur de a ajuta oamenii să învețe DAX cu măsurile lor rapide, insistând să includă CALCULATE și trebuind să sară printre cercuri pentru a obține CALCULATE-ul acolo. 

Soluția mai ușoară

Utilizarea funcției SUMMARIZE

După cum am menționat mai devreme, există o modalitate mai bună și mai simplă de a face acest lucru.

Mai întâi, creați o variabilă de tabel folosind VAR_Table . Apoi, vom folosi pentru a lua tabelul, a-l rezuma pe lună, a crea o coloană Valoare și a însuma valorile noastre.

În cele din urmă, vom lua media valorilor noastre folosind funcția AVERAGEX

Funcția CALCULATE DAX: Probleme și soluții

Acest cod este mai simplu și mult mai logic. Nu include CALCULATE, de care oricum nu ai nevoie. 

S-ar putea să dai peste un articol pe blog care critică REZUMAT. Blogul spune că modul în care funcționează SUMMARIZE în interior este destul de complicat.

De asemenea, sugerează că puteți avea probleme într-un anumit caz, dar nu veți întâlni niciodată. Acest lucru s-ar întâmpla numai dacă calculul dvs. implică un calcul foarte complex și un tabel foarte mare. Numai atunci SUMMARIZE vă va oferi rezultate neplăcute. 

Cel puțin așa susține articolul de pe blog. Și este în regulă dacă vrei să te ferești de REZUMAT. În acest caz, utilizați în schimb funcția .

Utilizarea funcției GROUPBY

Nimeni nu are o problemă cu utilizarea funcției GROUPBY, așa că hai să învățăm cum să o folosim și pe aceasta. Din nou, creați o variabilă Table folosind VAR_Table. Apoi, GROUPBY Month și creăm o coloană Valoare.

Apoi, aplicăm folosind CURRENTGROUP , care este modul în care funcționează GROUPBY. Să însumăm valoarea noastră și să luăm din nou valoarea AVERAGEX

Codul nostru ar trebui să arate așa.

Funcția CALCULATE DAX: Probleme și soluții

Compararea rezultatelor: funcțiile SUMMARIZE vs GROUPBY vs CALCULATE DAX

Acum, să vedem dacă comenzile rapide pe care le-am făcut returnează aceleași rezultate. 

După cum puteți vedea în imaginile de mai jos, atât SUMMARIZE etichetate ca Better Average Per Category, cât și GROUPBY etichetate Better Average Per Category 2 returnează aceleași numere. 

Funcția CALCULATE DAX: Probleme și soluții

Ambele formule returnează 3,4K pentru Q1, 3,6K pentru Q2, 3,4K pentru Q3 și 3,5K pentru Q4. Și, din nou, funcționează într-un singur model de date de tabel folosind Quarters pentru tabelul nostru.

De asemenea, funcționează într-o schemă cu stea în care folosim Sferturi în tabelul nostru de date. 

Funcția CALCULATE DAX: Probleme și soluții


Măsuri rapide – Cum să le folosiți în modelele LuckyTemplates
folosind funcția de calcul din interiorul LuckyTemplates
Modalități eficiente de a utiliza funcția GROUPBY în LuckyTemplates

Concluzie

Nu trebuie să ne forțăm într-o logică de context întortocheată doar pentru a introduce CALCULATE în formulele noastre. Folosiți doar funcții DAX standard simple și puteți realiza aceleași lucruri. 

De fapt, probabil, în 80% – 90% din cazuri, nu există absolut niciun motiv să te deranjezi să folosești CALCULATE pentru orice. În schimb, puteți utiliza funcțiile SUMMARIZE și GROUPBY, care sunt mai simple și mai logice.

Dacă doriți să explorați acest fișier PBIX, l-am publicat deja în Galeria de măsuri rapide și am numit fișierul Better Average Per Category . Doar derulați până la capăt în pagină pentru a găsi fișierul PBIX pe care îl puteți descărca și vă jucați singur. 

Toate cele bune,

Greg Deckler

Leave a Comment

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