Contextul vă permite să efectuați analize dinamice, în care rezultatele unei formule se pot modifica pentru a reflecta rândul curent sau selecția celulei curente și, de asemenea, orice date asociate. Înțelegerea contextului și utilizarea eficientă a contextului sunt foarte importante pentru crearea de formule de înaltă performanță, analize dinamice și pentru depanarea problemelor din formule.
Această secțiune definește diferitele tipuri de context: contextul de rând, contextul de interogare și contextul de filtrare. Explică modul în care este evaluat contextul pentru formulele din coloanele calculate și din rapoartele PivotTable.
Ultima parte a acestui articol oferă 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 analizei dinamice. Înțelegerea contextului este importantă pentru crearea și depanarea formulelor.
Există diferite tipuri de context: contextul de rând, contextul de interogare și contextul de filtrare.
Contextul de rând poate fi considerat "rândul curent". Dacă ați creat o coloană calculată, contextul de rând constă din valorile din fiecare rând individual și valorile din coloanele asociate cu rândul curent. De asemenea, există unele funcții (EARLIER și EARLIEST) care obțin o valoare din rândul curent, apoi utilizează acea valoare în timp ce efectuează o operațiune asupra unui tabel întreg.
Contextul de interogare se referă la subsetul de date creat implicit pentru fiecare celulă dintr-un raport PivotTable, în funcție de anteturile de rând și de coloană.
Contextul de filtrare este setul de valori permise în fiecare coloană, pe baza restricțiilor de filtrare care au fost aplicate la rând sau care sunt definite de expresiile filtru din formulă.
Context rând
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 asociat cu un alt tabel, conținutul include, de asemenea, toate valorile din acel alt tabel care sunt asociate 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 aflat înaintea rândului curent utilizând notația de zonă și nu puteți face referire la nicio valoare arbitrară dintr-un tabel sau dintr-o celulă. Trebuie să lucrați întotdeauna cu tabele și coloane.
Contextul de rând urmează automat relațiile dintre tabele pentru a determina ce rânduri din tabelele asociate sunt asociate cu rândul curent.
De exemplu, următoarea formulă utilizează funcția RELATED pentru a prelua o valoare fiscală dintr-un tabel asociat, pe baza regiunii în care a fost expediată comanda. Valoarea fiscală este determinată utilizând valoarea regiunii din tabelul curent, căutând regiunea din tabelul asociat, apoi obținând rata de impozitare pentru acea regiune din tabelul asociat.
= [Transport] + RELATED('Regiune'[Tarif])
Această formulă obține pur și simplu rata de impozitare pentru regiunea curentă, din tabelul Regiune. Nu trebuie să știți sau să specificați cheia care conectează tabelele.
Context rând multiplu
Î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 curent. În termeni de programare, puteți crea formule care se repetă peste o buclă interioară și exterioară.
De exemplu, să presupunem că registrul de lucru conține un tabel Produse și un tabel Vânzări . Se recomandă să parcurgeți întregul tabel de vânzări, care este plin de tranzacții care implică mai multe produse, și să găsiți cea mai mare cantitate comandată pentru fiecare produs în orice tranzacție.
În Excel, acest calcul necesită o serie de rezumate intermediare, care ar trebui reconstruite dacă datele s-ar modifica. Dacă sunteți un utilizator puternic al Excel, este posibil să reușiți să construiți formule matrice care să facă acest lucru. Ca alternativă, într-o bază de date relațională puteți scrie subselectări imbricate.
Cu toate acestea, cu DAX puteți construi o singură formulă care returnează valoarea corectă, iar rezultatele sunt actualizate automat oricând adăugați date la tabele.
=MAXX(FILTER(Vânzări,[ProdKey]=EARLIER([CheieComandă])),Vânzări[NumărComandă])
Pentru o prezentare detaliată a acestei formule, consultați MAI DEVREME.
Pe scurt, funcția EARLIER stochează contextul de rând din operațiunea care a precedat operațiunea curentă. Funcția stochează în memorie tot timpul două seturi de context: un set de context reprezintă rândul curent pentru bucla interioară a formulei, iar un alt set de context reprezintă rândul curent pentru bucla exterioară a formulei. DAX alimentează automat valorile dintre cele două bucle, astfel încât să puteți crea agregate complexe.
Context interogare
Contextul de interogare se referă la subsetul de date regăsit implicit pentru o formulă. Atunci când fixați o măsură sau alt câmp valoare într-o celulă dintr-un raport PivotTable, motorul de 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 modifica în funcție de locul în care plasați formula, rezultatele formulei se modifică, de asemenea, în funcție de utilizarea formulei într-un raport PivotTable cu multe grupări și filtre sau într-o coloană calculată fără filtre și cu context minim.
De exemplu, să presupunem că creați această formulă simplă care însumează valorile din coloana Profit a tabelului 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 din tabelul Vânzări . Rezultatele vor avea profit pentru toate regiunile, toate produsele, toți anii și așa mai departe.
Totuși, de obicei nu doriți să vedeți același rezultat de sute de ori, dar doriți în schimb să obțineți profitul pentru un anumit an, o anumită țară sau regiune, un anumit produs sau o combinație a acestora, apoi să obțineți un total general.
Într-un raport PivotTable, este ușor să modificați contextul prin adăugarea sau eliminarea anteturilor de coloană și de rând și prin adăugarea sau eliminarea slicerelor. Puteți să creați o formulă ca cea de mai sus, într-o măsură, apoi să o fixați într-un raport PivotTable. Oricând adăugați titluri de coloană sau de rând la 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ă.
Context filtru
Contextul de filtrare este adăugat atunci când specificați restricții de filtrare pentru setul de valori permise într-o coloană sau într-un tabel, utilizând argumente pentru o formulă. Contextul de filtrare se aplică în plus față de alte contexte, cum ar fi contextul de rând sau contextul interogării.
De exemplu, un PivotTable calculează valorile sale pentru fiecare celulă pe baza titlurilor de rând și de coloană, așa cum este descris în secțiunea anterioară a contextului de interogare. Cu toate acestea, în cadrul măsurilor sau coloanelor calculate pe care le adăugați la PivotTable, puteți specifica expresii de filtrare pentru a controla valorile utilizate de formulă. De asemenea, puteți goli selectiv filtrele din anumite coloane.
Pentru mai multe informații despre cum să creați filtre în cadrul formulelor, consultați Filtrarea funcțiilor.
Pentru un exemplu despre cum pot fi golite filtrele pentru a crea totaluri generale, consultați TOATE.
Pentru exemple despre cum să goliți selectiv și să aplicați filtre în cadrul formulelor, 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ă fiți conștient de contextul filtrului atunci când interpretați rezultatele formulelor.
Determinarea contextului în formule
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 în raport cu coloanele și tabelele posibile din 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 din registrul de lucru, relațiile dintre 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 filtre, î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 prin adăugarea titlurilor de coloană și utilizarea slicerelor, contextul include tabelele asociate și orice filtre din date.
Contextul este un concept puternic care poate îngreuna depanarea formulelor. Vă recomandăm să începeți cu formule simple și relații pentru a vedea cum funcționează contextul, apoi să începeți să experimentați cu formule simple în rapoartele PivotTable. Secțiunea următoare oferă, de asemenea, 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 subiect ilustrează interacțiunea cu filtrarea și contextul rândurilor.
-
Funcția FILTER vă permite să specificați rândurile de inclus în contextul curent. Exemplele din acest subiect ilustrează, de asemenea, modul de încorporare a filtrelor în cadrul altor funcții care efectuează agregări.
-
Funcția ALL setează contextul într-o formulă. Îl puteți utiliza pentru a înlocui filtrele aplicate 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ă 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 fac referire la o valoare dintr-o buclă internă. Dacă sunteți familiarizat cu conceptul de recursiune și cu buclele interioare și exterioare, veți aprecia puterea pe care o oferă funcțiile EARLIER și EARLIEST. Dacă sunteți utilizator începător al acestor concepte, ar trebui să urmați pașii din exemplu cu atenție pentru a vedea cum sunt utilizate contextele interioare și externe în calcule.
Integritate referențială
Această secțiune prezintă câteva concepte complexe 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 pentru înțelegerea rezultatelor.
Dacă sunteți utilizator începător al conceptelor privind datele relaționale, vă recomandăm să citiți mai întâi subiectul introductiv, Prezentarea generală a relațiilor.
Integritate referențială și relații Power Pivot
Power Pivot nu necesită impunerea integrității referențiale între două tabele pentru a defini o relație validă. În schimb, se creează un rând necompletat la sfârșitul "unu" al fiecărei relații unu-la-mai-mulți și este utilizat pentru a gestiona toate rândurile care nu se potrivesc din tabelul asociat. Se comportă efectiv ca unire externă SQL.
În rapoartele PivotTable, dacă grupați datele după o parte a relației, toate datele necorespondente din partea mai mulți a relației sunt grupate împreună și vor fi incluse în totaluri cu un titlu de rând necompletat. Titlul necompletat este aproximativ echivalent cu "membru necunoscut".
Înțelegerea membrului necunoscut
Conceptul membrului 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 vă arată ce este membru necunoscut și cum afectează calculele.
Să presupunem că creați un calcul care însumează vânzările lunare pentru fiecare magazin, dar unei coloane din tabelul Vânzări îi lipsește o valoare pentru numele magazinului. Având în vedere că tabelele pentru Magazin și Vânzări sunt conectate după numele magazinului, ce vă așteptați să se întâmple în formulă? Cum ar trebui să afișeze grupul PivotTable sau cifrele de vânzări care nu sunt legate de un depozit existent?
Această problemă este una obișnuită în depozitele de date, unde tabele mari de date cu date reale trebuie să fie corelate logic cu tabele de dimensiuni 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, informațiile neasociate vor apărea grupate într-un raport PivotTable sub un titlu necompletat.
Tratamentul valorilor necompletate versus rândul necompletat
Valorile necompletate sunt diferite de rândurile necompletate care sunt adăugate pentru a se potrivi membrului necunoscut. Valoarea necompletată este o valoare specială care este utilizată pentru a reprezenta valori nule, șiruri 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.