Contextul în formulele DAX

Se aplică la
Excel pentru Microsoft 365 Excel 2024 Excel 2021 Excel 2019 Excel 2016

Contextul vă permite să efectuați analize dinamice, în care rezultatele unei formule se pot modifica pentru a reflecta selecția curentă de rând sau de celulă, precum și toate datele asociate. Înțelegerea contextului și utilizarea eficientă a contextului sunt foarte importante pentru construirea de formule de înaltă performanță, analize dinamice și pentru depanarea problemelor din formule.

Această secțiune definește tipurile diferite de context: context rând, context interogare și context filtru. Explică modul în care este evaluat contextul pentru formule în coloanele calculate și în rapoartele PivotTable.

Ultima parte a acestui articol furnizează linkuri către exemple detaliate, care ilustrează modul în care rezultatele formulelor se modifică în funcție de context.

Înțelegerea contextului

Formulele din Power Pivot pot fi afectate de filtrele aplicate într-un raport PivotTable, de relațiile dintre tabele și de filtrele utilizate în formule. Contextul este ceea ce face posibilă efectuarea unei analize dinamice. Înțelegerea contextului este importantă pentru construirea și depanarea formulelor.

Există diferite tipuri de context: context rând, context interogare și context filtru.

Contextul rândului poate fi considerat ca fiind "rândul curent". Dacă ați creat o coloană calculată, contextul de rând constă în valorile din fiecare rând individual și valorile din coloanele care sunt corelate cu rândul curent. De asemenea, există unele funcții (EARLIER și EARLYLIEST) care obțin o valoare din rândul curent și utilizează apoi acea valoare în timp ce efectuează o operațiune asupra unui tabel întreg.

Contextul de interogare se referă la subsetul de date creat în mod implicit pentru fiecare celulă dintr-un raport PivotTable, în funcție de anteturile de rând și coloană.

Contextul de filtrare este setul de valori permise în fiecare coloană, pe baza restricțiilor de filtrare care au fost aplicate rândului sau care sunt definite de expresiile de filtru din formulă.

Începutul paginii

Contextul rândului

Dacă creați o formulă într-o coloană calculată, contextul de rând pentru acea formulă include valorile din toate coloanele din rândul curent. Dacă tabelul este legat de alt tabel, conținutul include, de asemenea, toate valorile din celălalt tabel care sunt corelate cu rândul curent.

De exemplu, să presupunem că creați o coloană calculată, =[Transport] + [Taxe], care adună două coloane din același tabel. Această formulă se comportă ca formulele dintr-un tabel Excel, care fac referire automat la valori din același rând. Rețineți că tabelele sunt diferite de zone: nu puteți face referire la o valoare din rândul anterior rândului curent utilizând notația intervalului și nu puteți face referire la nicio valoare arbitrară unică dintr-un tabel sau dintr-o celulă. Trebuie să lucrați întotdeauna cu tabele și coloane.

Contextul rândului urmărește automat relațiile dintre tabele pentru a determina ce rânduri din tabelele asociate sunt asociate cu rândul curent.

De exemplu, formula următoare utilizează funcția RELATED pentru a prelua o valoare de taxă dintr-un tabel asociat, pe baza regiunii în care a fost expediată comanda. Valoarea taxei este determinată utilizând valoarea pentru regiune în tabelul curent, căutând regiunea în tabelul asociat, apoi obținând rata de impozitare pentru acea regiune din tabelul asociat.

= [Transport] + RELATED('Regiune'[RatăImpozit])

Această formulă obține pur și simplu rata de impozitare pentru regiunea curentă, din tabelul Regiune. Nu trebuie să cunoașteți sau să specificați cheia care conectează tabelele.

Context rânduri multiple

În plus, DAX include funcții care iterează calcule într-un tabel. Aceste funcții pot avea mai multe rânduri curente și contexte de rând curente. În termeni de programare, puteți crea formule care se recursează într-o buclă internă și externă.

De exemplu, să presupunem că registrul de lucru conține un tabel Produse și un tabel Vânzări . Poate doriți să parcurgeți întregul tabel de vânzări, care este plin de tranzacții ce implică mai multe produse, și să găsiți cea mai mare cantitate comandată pentru fiecare produs într-o singură tranzacție.

În Excel, acest calcul necesită o serie de rezumate intermediare, care ar trebui refăcute dacă datele se modifică. Dacă sunteți utilizator puternic de Excel, este posibil să reușiți să construiți formule matrice potrivite. Alternativ, într-o bază de date relațională, puteți scrie subselecții imbricate.

Cu toate acestea, cu DAX puteți construi o singură formulă care returnează valoarea corectă, iar rezultatele sunt actualizate automat de fiecare dată când adăugați date la tabele.

=MAXX(FILTER(Vânzări,[ProdKey]=EARLIER([ProdKey])),Vânzări[OrderQty])

Pentru o prezentare detaliată a acestei formule, consultați funcția EARLIER.

Pe scurt, funcția EARLIER stochează contextul de rând din operațiunea care a precedat operațiunea curentă. În permanență, funcția stochează două seturi de context în memorie: un set de context reprezintă rândul curent pentru bucla internă a formulei și alt set de context reprezintă rândul curent pentru bucla externă a formulei. DAX alimentează automat valorile între cele două bucle, astfel încât să puteți crea agregate complexe.

Începutul paginii

Context de interogare

Contextul de interogare se referă la subsetul de date regăsite în mod implicit pentru o formulă. Atunci când fixați o măsură sau alt câmp de valoare într-o celulă dintr-un raport PivotTable, motorul Power Pivot examinează anteturile de rând și de coloană, slicerele și filtrele de raport pentru a determina contextul. Apoi, Power Pivot efectuează calculele necesare pentru a popula fiecare celulă din raportul PivotTable. Setul de date regăsit este contextul de interogare pentru fiecare celulă.

Deoarece contextul se poate schimba în funcție de locul în care plasați formula, rezultatele formulei se modifică, de asemenea, în funcție de ceea ce utilizați: într-un raport PivotTable cu multe grupări și filtre sau într-o coloană calculată, fără filtre și context minim.

De exemplu, să presupunem că creați această formulă simplă care însumează valorile din coloana Profit din tabelul Vânzări :

=SUM('Vânzări'[Profit])

Dacă utilizați această formulă într-o coloană calculată din tabelul Vânzări , rezultatele pentru formulă vor fi aceleași pentru întregul tabel, deoarece contextul de interogare pentru formulă este întotdeauna întregul set de date al tabelului Vânzări . Rezultatele dvs. vor genera profit pentru toate regiunile, toate produsele, toți anii etc.

Cu toate acestea, de obicei nu doriți să vedeți același rezultat de sute de ori, ci doriți să obțineți profitul pentru un anumit an, o anumită țară sau regiune, un anumit produs sau o combinație între acestea, apoi să obțineți un total general.

Într-un raport PivotTable, este simplu să modificați contextul, adăugând sau eliminând anteturi de coloană și de rând și adăugând sau eliminând slicere. Puteți să creați o formulă ca cea de mai sus, într-o măsură, apoi să o fixați într-un PivotTable. De fiecare dată când adăugați titluri de rând sau de coloană în raportul PivotTable, modificați contextul de interogare în care este evaluată măsura. Operațiunile de slicare și filtrare afectează și contextul. Prin urmare, aceeași formulă, utilizată într-un raport PivotTable, este evaluată într-un context de interogare diferit pentru fiecare celulă.

Începutul paginii

Contextul de filtrare

Contextul de filtrare este adăugat atunci când specificați restricții de filtrare pentru setul de valori permise într-o coloană sau un tabel, utilizând argumente pentru o formulă. Contextul de filtrare se aplică peste alte contexte, cum ar fi contextul rândului sau contextul interogării.

De exemplu, un raport PivotTable își calculează valorile pentru fiecare celulă pe baza titlurilor de rând și de coloană, așa cum este descris în secțiunea anterioară despre contextul interogării. Totuși, în cadrul măsurătorilor sau coloanelor calculate pe care le adăugați la raportul PivotTable, puteți specifica expresii de filtru pentru a controla valorile utilizate de formulă. De asemenea, puteți goli selectiv filtrele pentru anumite coloane.

Pentru mai multe informații despre cum se creează filtre în cadrul formulelor, consultați Funcțiile de filtrare.

Pentru un exemplu despre cum pot fi golite filtrele pentru a crea totaluri generale, consultați funcția ALL.

Pentru exemple despre cum să ștergeți și să aplicați selectiv filtre în formule, consultați funcția ALLEXCEPT.

Prin urmare, trebuie să revizuiți definiția măsurilor sau a formulelor utilizate într-un raport PivotTable, astfel încât să luați în considerare contextul filtrării atunci când interpretați rezultatele formulelor.

Începutul paginii

Determinarea contextului în formule

Atunci când creați o formulă, Power Pivot pentru Excel verifică mai întâi sintaxa generală, apoi verifică numele coloanelor și tabelelor pe care le furnizați comparativ cu coloanele și tabelele posibile în contextul curent. Dacă Power Pivot nu poate găsi coloanele și tabelele specificate de formulă, veți primi o eroare.

Contextul este determinat așa cum este descris în secțiunile anterioare, utilizând tabelele disponibile în registrul de lucru, orice relații între tabele și orice filtre care au fost aplicate.

De exemplu, dacă tocmai ați importat unele date într-un tabel nou și nu ați aplicat niciun filtru, întregul set de coloane din tabel face parte din contextul curent. Dacă aveți mai multe tabele legate prin relații și lucrați într-un raport PivotTable care a fost filtrat adăugând titluri de coloană și utilizând slicere, contextul include tabelele asociate și orice filtre ale datelor.

Contextul este un concept puternic care poate îngreuna depanarea formulelor. Vă recomandăm să începeți cu formule și relații simple, pentru a vedea cum funcționează contextul, apoi să experimentați cu formule simple în rapoarte PivotTable. Următoarea secțiune oferă și câteva exemple despre modul în care formulele utilizează diferite tipuri de context pentru a returna dinamic rezultate.

Exemple de context în formule

  • Funcția RELATED extinde contextul rândului curent pentru a include valori într-o coloană asociată. Acest lucru vă permite să efectuați căutări. Exemplul din acest articol ilustrează interacțiunea dintre filtrare și contextul rândurilor.
  • Funcția FILTER vă permite să specificați rândurile pe care să le includeți în contextul curent. Exemplele din acest articol ilustrează și cum se încorporează filtre în alte funcții care efectuează agregate.
  • Funcția ALL setează contextul dintr-o formulă. O puteți utiliza pentru a înlocui filtrele care se aplică ca rezultat al contextului de interogare.
  • Funcția ALLEXCEPT vă permite să eliminați toate filtrele, cu excepția unuia pe care îl specificați. Ambele subiecte includ exemple care vă ajută să parcurgeți procesul, să construiți formule și să înțelegeți contexte complexe.
  • Funcțiile EARLIER și EARLIEST vă permit să parcurgeți în buclă tabelele efectuând calcule, în timp ce faceți referire la o valoare dintr-o buclă internă. Dacă sunteți familiarizați cu conceptul de recursivitate și cu buclele interioare și exterioare, veți aprecia puterea pe care o oferă funcțiile EARLIER și EARLY. Dacă nu sunteți familiarizat cu aceste concepte, ar trebui să urmați pașii din exemplu cu atenție pentru a vedea cum sunt utilizate contextele interior și exterior în calcule.

Începutul paginii

Integritate referențială

Această secțiune prezintă câteva concepte avansate legate de valorile lipsă din tabelele Power Pivot care sunt conectate prin relații. Această secțiune vă poate fi utilă dacă aveți registre de lucru cu mai multe tabele și formule complexe și doriți ajutor în înțelegerea rezultatelor.

Dacă nu sunteți familiarizat cu conceptele de date relaționale, vă recomandăm să citiți mai întâi subiectul introductiv, Prezentarea generală a relațiilor.

Integritatea referențială și relațiile Power Pivot

Power Pivot nu necesită ca integritatea referențială să fie impusă între două tabele pentru a defini o relație validă. În schimb, un rând necompletat se creează la capătul "unu" al fiecărei relații unu-la-mai-mulți și se utilizează pentru a gestiona toate rândurile care nu se potrivesc din tabelul asociat. Aceasta se comportă efectiv ca o asociere externă SQL.

În rapoartele PivotTable, dacă grupați datele după partea "unul" a relației, toate datele necorespondente din partea "mai mulți" a relației sunt grupate împreună și se vor include în totalurile cu un titlu de rând necompletat. Titlul necompletat este aproximativ echivalent cu "membru necunoscut".

Înțelegerea membrului necunoscut

Conceptul de membru necunoscut vă este probabil familiar dacă ați lucrat cu sisteme de baze de date multidimensionale, cum ar fi SQL Server Analysis Services. Dacă termenul este nou pentru dvs., următorul exemplu explică ce este membrul necunoscut și cum afectează calculele.

Să presupunem că creați un calcul care însumează vânzările lunare pentru fiecare magazin, dar dintr-o coloană din tabelul Vânzări lipsește o valoare pentru numele magazinului. Având în vedere că tabelele pentru Store și Vânzări sunt conectate prin numele magazinului, la ce vă așteptați să se întâmple cu formula? Cum ar trebui PivotTable să grupeze sau să afișeze cifrele de vânzări care nu sunt legate de un magazin existent?

Această problemă este una comună în depozitele de date, unde tabelele mari de date informative trebuie să fie corelate logic cu tabelele de dimensiune care conțin informații despre depozite, regiuni și alte atribute care sunt utilizate pentru clasificarea și calcularea faptelor. Pentru a rezolva problema, orice fapte noi care nu au legătură cu o entitate existentă sunt atribuite temporar membrului necunoscut. De aceea, faptele care nu sunt legate vor apărea grupate într-un raport PivotTable sub un titlu necompletat.

Tratarea valorilor necompletate versus rândul necompletat

Valorile necompletate sunt diferite de rândurile necompletate adăugate pentru a permite membrului necunoscut. Valoarea goală este o valoare specială, utilizată pentru a reprezenta valorile nule, șirurile goale și alte valori lipsă. Pentru mai multe informații despre valoarea necompletată, precum și despre alte tipuri de date DAX, consultați Tipurile de date din modelele de date.

Începutul paginii