Tabele
Notă
Microsoft Power Fx este noul nume pentru limbajul formulă al aplicațiilor pânză. Aceste articole sunt lucrare în curs de desfășurare, deoarece extragem limba din aplicațiile pânză, o integrăm cu alte produse Microsoft Power Platform și le punem la dispoziție ca open source. Începeți cu Prezentarea generală Microsoft Power Fx pentru o introducere în limbă.
În Microsoft Power Fx, puteți scrie o formulă care accesează informații în Microsoft Excel, SharePoint, SQL Server și alte câteva surse care stochează date în înregistrări și tabele. Pentru a lucra cel mai eficient cu acest tip de date, consultați conceptele care stau la baza acestor structuri.
- O înregistrare conține una sau mai multe categorii de informații despre o persoană, un loc sau un lucru. De exemplu, o înregistrare poate conține numele, adresa de e-mail și numărul de telefon al unui singur client. Alte instrumente se referă la o înregistrare ca „rând” sau „element”.
- Un tabel conține una sau mai multe înregistrări care conțin aceleași categorii de informații. De exemplu, un tabel poate conține numele, adresele de e-mail și numerele de telefon a 50 de clienți.
Puteți construi o varietate de formule care iau numele unui tabel ca argument, la fel cum o formulă în Excel ia una sau mai multe referințe de celule ca argumente. Câteva formule în Power Fx returnează un tabel care reflectă celelalte argumente pe care le specificați. De exemplu, puteți crea o formulă:
- pentru a actualiza o înregistrare într-un tabel, specificând tabelul ca unul dintre argumentele multiple pentru funcția Patch
- Pentru a adăuga, elimina și redenumi coloanele dintr-un tabel, specificând tabelul ca un argument pentru funcţia AddColumns, DropColumns sau RenameColumns. Niciuna dintre aceste funcții nu modifică tabelul original. În schimb, funcția returnează un alt tabel bazat pe celelalte argumente pe care le specificați.
Elemente ale unui tabel
Înregistrări
Fiecare înregistrare conține cel puțin o categorie de informații pentru o persoană, un loc sau un lucru. Exemplul de mai sus arată o înregistrare pentru fiecare produs (Ciocolată Pâine și Apă) și o coloană pentru fiecare categorie de informații (Preț, Cantitate în stoc și Cantitate la comandă).
Într-o formulă, vă puteți referi la o înregistrare de sine stătător, în afara contextului unui tabel, folosind acolade. De exemplu, această înregistrare { Nume: „Căpșuni”, Preț: 7,99 } nu este asociată cu un tabel. Rețineți că numele câmpului, cum ar fi Nume și Preț în acest exemplu, nu sunt incluse în ghilimele duble.
Câmpuri
Un câmp este o informație individuală dintr-o înregistrare. Puteți vizualiza acest tip de câmp ca valoare într-o coloană pentru o anumită înregistrare.
La fel ca în cazul unui control, vă referiți la un câmp al unei înregistrări folosind .operator din înregistare. De exemplu, First(Products).Name returnează câmpul Nume pentru prima înregistrare din tabelul Produse.
Un câmp poate conține o altă înregistrare sau tabel, ca exemplu pentru funcția GroupBy. Puteți imbrica cât de multe niveluri de înregistrări și tabele doriți.
Coloane
O coloană se referă la același câmp pentru una sau mai multe înregistrări dintr-un tabel. În exemplul de mai sus, fiecare produs are un câmp de preț și acel preț este în aceeași coloană pentru toate produsele. Tabelul de mai sus are patru coloane, afișate orizontal în partea de sus:
- Nume
- Preţ
- Cantitate la îndemână
- Cantitate la comanda
Numele coloanei reflectă câmpurile din acea coloană.
Toate valorile dintr-o coloană sunt de același tip de date. În exemplul de mai sus, coloana „Cantitate în stoc” conține întotdeauna un număr și nu poate conține un șir, cum ar fi „12 unități”, pentru o înregistrare. Valoarea oricărui câmp poate fi de asemenea necompletat.
Este posibil să fi făcut referire la coloane drept "câmpuri" în alte instrumente.
Tabel
Un tabel cuprinde una sau mai multe înregistrări, fiecare având mai multe câmpuri care au nume consecvente în înregistrări.
Orice tabel stocat într-un sursă de date sau într-o colecție are un nume, pe care îl utilizați pentru a face referire la tabel și îl transmiteți funcțiilor care iau tabele ca argumente. Tabelele pot fi, de asemenea, rezultatul unei funcții sau a unei formule.
Ca și în exemplul următor, puteți exprima un tabel într-o formulă utilizând funcția Tabel cu un set de înregistrări, pe care le exprimați cu acolade:
Table( { Value: "Strawberry" }, { Value: "Vanilla" } )
Puteți defini, de asemenea, un tabel cu o singură coloană cu paranteze pătrate. Un mod echivalent de a scrie cele de mai sus:
[ "Strawberry", "Vanilla" ]
Formule de tabel
În Excel și Power Fx, utilizați formule pentru a manipula numerele și șirurile de text în moduri similare:
- În Excel, tastați o valoare, cum ar fi 42, în celulă A1 și apoi tastați o formulă, cum ar fi A1 + 2, într-o altă celulă pentru a arăta valoarea lui 44.
- În Power Apps, setați proprietatea Mod implicit a Glisor1 la 42 și setați proprietatea Text a unei etichete la Slider1.Value + 2 pentru a arăta valoarea lui 44.
În ambele cazuri, valoarea calculată se modifică automat dacă modificați valorile argumentelor (de exemplu, numărul din celula A1 sau valoarea Glisor1).
În mod similar, puteți utiliza formule pentru a accesa și manipula datele din tabele și înregistrări. Puteți utiliza nume de tabele ca argumente în unele formule, cum ar fi Min (Catalog, Preț) pentru a afișa cea mai mică valoare în coloana Preț din tabelul Catalog. Alte formule furnizează tabele întregi ca valori returnate, cum ar fi Redenumire coloane (Catalog, „Preț”, „Cost”), care returnează toate înregistrările din tabelul Catalog dar modifică numele coloanei Preț în Cost.
La fel ca în cazul numerelor, formulele care implică tabele și înregistrări sunt recalculate automat pe măsură ce tabelul subiacent sau înregistrările se modifică. În cazul în care costul unui produs din tabelul Catalog este redus sub minimum precedent, valoarea de returnare a formulei Min se va schimba automat pentru a se potrivi.
Funcțiile tabelului și proprietățile de control
Luați în considerare funcţia Lower. Dacă variabila Bine ați venit conține șirul de text "Salut, Lume", formula Lower (Bine ați venit) returnează "Salut, Lume". Această funcție nu schimbă, în niciun fel, valoarea din acea variabilă. Lower este o funcție pură, deoarece procesează doar intrarea și produce ieșire. Asta e tot; nu are efecte secundare. Toate funcțiile în Excel și cele mai multe funcții în Power Fx sunt funcții pure, care permit recalcularea automată a registrului de lucru sau a aplicației.
Power Fx oferă un set de funcții care operează pe tabele în același mod. Aceste funcții iau tabele ca intrare și filtrare, sortare, transformare, reducere și rezumare tabele întregi de date. De fapt, Lower și multe alte funcții care iau de obicei o singură valoare, pot, de asemenea, lua un tabel cu o singură coloană ca intrare.
Multe funcții iau ca intrare un tabel cu o singură coloană. Dacă un tabel întreg are o singură coloană, o puteți specifica după nume. Dacă un tabel are mai multe coloane, puteți specifica una dintre aceste coloane folosind sintaxa Table.Column. De exemplu, Products.Name returnează tabelul cu o singură coloană doar a valorilor Nume din tabelul Produse.
Puteți remodela complet un tabel oricum doriți utilizând funcția AddColumns, RenameColumns, ShowColumns, sau DropColumns. Din nou, aceste funcții își schimbă doar ieșirea, nu și sursa.
Formule comportamentale
Alte funcții sunt concepute special pentru a modifica datele și a avea efecte secundare. Deoarece aceste funcții nu sunt pure, trebuie să le creați cu atenție și nu pot participa la recalcularea automată a valorilor din aplicație. Puteți utiliza aceste funcții doar în cadrul formulelor comportamentale.
Domeniul de aplicare a înregistrării
Unele funcții operează evaluând o formulă în toate înregistrările unui tabel individual. Rezultatul formulei este utilizat în diferite moduri:
- AddColumns - Formula furnizează valoarea câmpului adăugat.
- Medie, Max, Min, Suma, StdevP, VarP - Formula oferă valoarea de agregat.
- Filtru, Căutare - Formula determină dacă înregistrarea ar trebui inclusă în rezultat.
- Concat - Formula determină șirurile care se concatenează împreună.
- Distinct - Formula returnează o valoare, folosită pentru a identifica înregistrările duplicate.
- ForAll - Formula poate returna orice valoare, posibil cu efecte secundare.
- Sortare - Formula furnizează valoarea pe care să sorteze înregistrările.
- Cu - Formula poate returna orice valoare, posibil cu efecte secundare.
În aceste formule, puteți face referire la câmpurile înregistrării procesate. Fiecare dintre aceste funcții creează un „domeniu de aplicare a înregistrării” în care formula este evaluată, unde câmpurile înregistrării sunt disponibile ca identificatori de nivel superior. Puteți menționa proprietățile de control și alte valori și din cadrul aplicației.
De exemplu, luați un tabel de Produse plasat într-o variabilă globală:
Set( Products,
Table(
{ Product: "Widget", 'Quantity Requested': 6, 'Quantity Available': 3 },
{ Product: "Gadget", 'Quantity Requested': 10, 'Quantity Available': 20 },
{ Product: "Gizmo", 'Quantity Requested': 4, 'Quantity Available': 11 },
{ Product: "Apparatus", 'Quantity Requested': 7, 'Quantity Available': 6 }
)
)
Pentru a determina dacă oricare dintre aceste produse a avut mai multe solicitări decât este disponibil:
Filter( Products, 'Quantity Requested' > 'Quantity Available' )
Primul argument la Filtru este tabelul de înregistrări pe care să se opereze, iar al doilea argument este o formulă. Filter creează un domeniu de înregistrare pentru evaluarea acestei formule în care sunt disponibile câmpurile fiecărei înregistrări, în acest caz Produs, a45>Cantitatea solicitată și Cantitatea disponibilă. Rezultatul comparației determină dacă fiecare înregistrare trebuie inclusă în rezultatul funcției:
Adăugând la acest exemplu, putem calcula cât din fiecare produs trebuie comandat:
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
)
Aici adăugăm o coloană calculată la rezultat. AddColumns are propriul domeniu de înregistrare pe care îl folosește pentru a calcula diferența dintre ceea ce a fost solicitat și ceea ce este disponibil.
În cele din urmă, putem reduce tabelul de rezultate doar la coloanele dorite:
ShowColumns(
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
),
"Product",
"Quantity To Order"
)
Rețineți că, în cele de mai sus, am folosit ghilimele duble (") în unele locuri și ghilimele simple (') în alte locuri. Sunt necesare ghilimele simple atunci când se face referire la valoarea unui obiect, cum ar fi un câmp sau un tabel, în care numele obiectului conține un spațiu. Ghilimelele duble sunt utilizate atunci când nu facem referire la valoarea unui obiect, ci în schimb vorbim despre acesta, în special în situațiile în care obiectul încă nu există, ca în cazul AddColumns.
Dezambiguizare
Numele de câmp adăugate cu domeniul de aplicare a înregistrării înlocuiesc aceleași nume din alte părți ale aplicației. Când se întâmplă acest lucru, puteți accesa în continuare valori din afara domeniului de înregistrare cu ajutorul operatorului @ dezambiguizare:
- Pentru a accesa valori din domenii de aplicare a înregistrării imbricate, utilizați butonul operator @ cu numele tabelului care este operat la utilizarea acestui model:
Tabel[@FieldName] - Pentru a accesa valori globale, cum ar fi sursele de date, colecțiile și variabilele de context, utilizați modelul [@ObjectName] (fără denumire de tabel).
Dacă tabelul care este operat este o expresie, cum ar fi Filtru(Tabel, ... ), atunci operatorul de dezambiguizare nu poate fi utilizat. Doar domeniul de aplicare a înregistrării interior poate accesa câmpurile din această expresie a tabelului, prin utilizarea operatorului de dezambiguizare.
De exemplu, imaginați-vă că aveți o colecție X:
Puteți crea această colecție cu ClearCollect (X, [1, 2] ).
Și o altă colecție Y:
Puteți crea această colecție cu ClearCollect (Y, ["A", "B"]).
În plus, definiți o variabilă de context numită Valoare cu această formulă: UpdateContext( {Valoare: "!"})
Să le punem la un loc. În acest context, următoarea formulă:
Ungroup(
ForAll( X,
ForAll( Y,
Y[@Value] & Text( X[@Value] ) & [@Value]
)
),
"Value"
)
produce acest tabel:
Ce se intamplă aici? Funcția exterioară ForAll definește un domeniu de înregistrare pentru X, care permite accesul la câmpul Valoare a fiecărei înregistrări pe măsură ce este procesată. Poate fi accesată prin simpla folosire a cuvântului Valoare sau prin utilizarea X[@Value].
Funcția interioară ForAll definește un alt domeniu de aplicare a înregistrării pentru Y. Deoarece acest tabel are și un câmp Valoare definit, folosirea Valoare aici se referă la câmpul din înregistrarea Y și nu cel din X. Aici, pentru a accesa câmpul X al Valoare, trebuie să utilizăm versiunea mai lungă cu operatorul de dezambiguizare.
Deoarece Y este domeniul de aplicare a înregistrării interior, accesarea câmpurilor din acest tabel nu necesită dezambiguizare, permițându-ne să utilizăm această formulă cu același rezultat:
Ungroup(
ForAll( X,
ForAll( Y,
Value & Text( X[@Value] ) & [@Value]
)
),
"Value"
)
Pentru toate ForAll domeniile de aplicare a înregistrărilor depășesc domeniul de aplicare global. Variabila de context Valoare pe care am definit-o nu este disponibilă pe nume fără operatorul de dezambiguizare. Pentru a accesa această valoare, utilizați [@Valoare].
Ungroup aplatizează rezultatul, deoarece funcțiile imbricate ForAll au ca rezultat un tabel cu rezultate imbricate.
Tabele cu o singură coloană
Pentru a opera pe o singură coloană dintr-un tabel, utilizați funcția ShowColumns ca în acest exemplu:
ShowColumns( Products, "Product" )
Această formulă produce acest tabel cu o singură coloană:
Pentru o alternativă mai scurtă, specificați Table.Column, care extrage tabelul cu o singură coloană doar din Coloană din Tabel. De exemplu, această formulă produce exact același rezultat ca și utilizarea ShowColumns.
Products.Product
Înregistrări în linie
Exprimați înregistrările folosind acolade care conțin valori de câmp numite. De exemplu, puteți exprima prima înregistrare din tabel la începutul acestui subiect utilizând această formulă:
{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 }
De asemenea, puteți încorpora formule în alte formule, așa cum arată acest exemplu:
{ Name: First(Products).Name, Price: First(Products).Price * 1.095 }
Puteți imbrica înregistrări prin imbricarea acoladelor, așa cum arată acest exemplu:
{ 'Quantity': { 'OnHand': ThisItem.QuantOnHand, 'OnOrder': ThisItem.QuantOnOrder } }
Încadraţi fiecare nume de coloană care conține un caracter special, cum ar fi un spațiu sau un punct, în ghilimele simple. Pentru a utiliza ghilimele simple în cadrul unui nume de coloană, dublați-le.
Rețineți că valoarea din coloana Preț nu include un simbol valutar, cum ar fi un semn dolar. Acea formatare va fi aplicată atunci când este afișată valoarea.
Tabele în linie
Puteți crea un tabel folosind funcția Tabel și un set de înregistrări. Puteți exprima tabelul la începutul acestui subiect utilizând această formulă:
Table(
{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 },
{ Name: "Bread", Price: 4.95, 'Quantity on Hand': 34, 'Quantity on Order': 0 },
{ Name: "Water", Price: 4.95, 'Quantity on Hand': 10, 'Quantity on Order': 0 }
)
Puteți, de asemenea, să imbricați tabele:
Table(
{ Name: "Chocolate",
'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 },
{ Quarter: "Q2", OnHand: 18, OnOrder: 0 } )
}
)
Tabele de valori în linie
Puteți crea tabele cu o singură coloană specificând valorile între paranteze pătrate. Tabelul rezultat are o singură coloană, numită Valoare.
De exemplu, [ 1, 2, 3, 4 ]
este echivalent cu Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } )
și returnează acest tabel: