Tablice
Napomena
Microsoft Power Fx novo je ime za jezik formula za aplikacije od gotovih gradivnih elemenata. Ovi su članci nedovršeni dok izdvajamo jezik iz aplikacija od gotovih gradivnih elemenata i integriramo ga s drugim Microsoft Power Platform proizvoda i činimo ga dostupnim kao otvoreni kod. Počnite s odjeljkom Pregled jezika Microsoft Power Fx za uvod u jezik.
U jeziku Microsoft Power Fx možete napisati formulu koja pristupa informacijama u programima Microsoft Excel, SharePoint, SQL Server i nekoliko drugih izvora koji pohranjuju podatke u zapise i tablice. Da biste najučinkovitije radili s takvom vrstom podataka, pregledajte koncepte na kojima se temelje te strukture.
- Zapis sadrži jednu ili više kategorija informacija o osobi, mjestu ili nekoj stvari. Na primjer, zapis može sadržavati ime, adresu e-pošte i telefonski broj pojedinog klijenta. Ostali alati referiraju se na zapis kao na „redak” ili na „stavku”.
- Tablica sadrži jedan ili više zapisa koji sadrže iste kategorije informacija. Na primjer, tablica može sadržavati imena, adrese e-pošte i telefonske brojeve za 50 klijenata.
Možete izraditi različite formule koje će kao argument preuzeti naziv tablice, baš kao što formula u Excelu kao argumente preuzima jednu ili više referenci ćelija. Neke formule u servisu Power Fx vraćaju tablicu koja odražava ostale argumente koje ste naveli. Na primjer, možete izraditi sljedeću formulu:
- kako biste ažurirali zapis u tablici, navodeći tu tablicu kao jedan od više argumenata za funkciju Zakrpa
- kako biste dodali, uklonili i preimenovali stupce u tablici, navodeći tu tablicu kao argument za funkcije DodajStupce, IspustiStupce ili PreimenujStupce. Nijedna od tih funkcija ne mijenja izvornu tablicu. Umjesto toga, funkcija vraća drugu tablicu na temelju ostalih argumenata koje navedete.
Svaki zapis sadrži najmanje jednu kategoriju informacija o osobi, mjestu ili stvari. Prethodni primjer prikazuje zapis za svaki proizvod (Čokolada, Kruh i Voda) i stupac za svaku kategoriju informacija (Cijena, Raspoloživa količina i Naručena količina).
U formuli se pomoću vitičastih zagrada možete pozvati na sam zapis, izvan konteksta tablice. Na primjer, ovaj zapis { Naziv: „Jagode”, cijena: 7,99 } nije povezan sa tablicom. Napominjemo da se nazivi polja u tom primjeru, kao što su Naziv i Cijena, ne nalaze u dvostrukim navodnicima.
Polje je pojedinačni podatak u zapisu. Ovu vrstu polja možete prikazati kao vrijednost u stupcu za određeni zapis.
Baš kao što je slučaj s kontrolom, pogledajte polje zapisa upotrebom .operatora na zapisu. Na primjer, entitet Naziv.Prvih(Proizvoda) vraća polje Naziv za prvi zapis u tablici Proizvodi.
Polje može sadržavati drugi zapis ili tablicu, kao što pokazuje primjer za funkciju GrupirajPrema. Možete ugnijezditi koliko god razina zapisa i tablica želite.
Stupac se odnosi na isto polje za jedan ili više zapisa u tablici. U prethodnom primjeru, svaki proizvod sadrži polje s cijenom, a ta se cijena nalazi u istom stupcu za sve proizvode. Prethodna tablica sadrži četiri stupca, vodoravno prikazana na vrhu:
- Ime
- Cijena
- Količina pri ruci
- Količina po narudžbi
Naziv stupca odražava polja u tom stupcu.
Sve vrijednosti u stupcu pripadaju istoj vrsti podataka. U prethodnom primjeru, stupac „Raspoloživa količina” uvijek sadrži broj i ne može sadržavati niz, kao što je „12 jedinica”, za jedan zapis. Vrijednost bilo kojeg polja također može biti prazna.
Možda ste stupce nazivali „poljima” u drugim alatima.
Tablica sadrži jedan ili više zapisa, a svaki zapis sadrži više polja koja imaju dosljedne nazive u svim zapisima.
Sve tablice koje su pohranjene u izvoru podataka ili u zbirci imaju naziv koji upotrebljavate za pozivanje na tablicu i za prosljeđivanje funkcijama koje tablice preuzimaju kao argumente. Tablice mogu biti i rezultat funkcije ili formule.
Kao i u sljedećem primjeru, tablicu možete izraziti formulom, upotrebljavajući funkciju Tablica sa skupom zapisa koje izražavate vitičastim zagradama:
Table( { Value: "Strawberry" }, { Value: "Vanilla" } )
Tablicu s jednim stupcem možete definirati i uglatim zagradama. Istovjetan način pisanja prethodno navedenog:
[ "Strawberry", "Vanilla" ]
U Excelu i servisu Power Fx na slične načine upotrebljavate formule za rad brojevima i nizovima teksta:
- U Excelu, upišite vrijednost poput 42 u ćeliju A1, a zatim u drugu ćeliju upišite formulu poput A1+2 kako bi se prikazala vrijednost 44.
- U servisu Power Apps postavite Default svojstvo Slider1 na 42 i svojstvo oznake Text na Slider1.Value + 2 kako bi se prikazala vrijednost 44.
U oba slučaja, izračunata vrijednost automatski se mijenja ako promijenite vrijednosti argumenata (na primjer, broj u ćeliji A1 ili vrijednost Slider1).
Slično tome, možete upotrebljavati formule za pristup podacima i rad s njima u tablicama i zapisima. Možete upotrebljavati nazive tablica kao argumente u nekim formulama, kao što su Min(Catalog, Price), kako bi se prikazala najniža vrijednost u stupcu Cijena u tablici Katalog. Ostale formule pružaju cijele tablice kao povratne vrijednosti, kao što su PreimenujStupce(Katalog, „Cijena”, „Trošak”) koje vraćaju sve zapise iz tablice Katalog, ali mijenjaju naziv stupca Cijena u Trošak.
Baš kao i kod brojeva, formule koje uključuju tablice i zapise automatski se ponovno izračunavaju u skladu s promjenom temeljne tablice ili zapisa. Ako je cijena proizvoda u tablici Katalog spuštena ispod prethodnog minimuma, povratna vrijednost formule Min automatski će se promijeniti u skladu s njom.
Razmotrite funkciju Niže. Ako varijabla dobro došli sadrži tekstni niz „Pozdrav svijetu”, formula Niže( dobro došli ) vraća „pozdrav svijetu”. Ova funkcija ni na koji način ne mijenja vrijednost u toj varijabli. Lower je čista funkcija jer obrađuje samo ulaz i proizvodi izlaz. To je sve; nema popratnih pojava. Sve funkcije u Excelu i većina funkcija u servisu Power Fx čiste su funkcije koje omogućuju automatsko ponovno izračunavanje radne knjige ili aplikacije.
Servis Power Fx pruža skup funkcija koje na tablice djeluju na isti način. Ove funkcije uzimaju tablice kao ulazni podatak i filtriraju, sortiraju, pretvaraju, smanjuju i sažimaju čitave tablice podataka. Zapravo, funkcija Niže i mnoge druge funkcije koje obično preuzimaju jednu vrijednost, kao ulazni podatak mogu preuzeti i tablicu s jednim stupcem.
Mnoge funkcije uzimaju kao ulaz tablicu s jednim stupcem. Ako cijela tablica sadrži samo jedan stupac, možete je odrediti pomoću naziva. Ako tablica sadrži više stupaca, neki od tih stupaca možete odrediti pomoću sintakse Stupac.Tablice. Na primjer, Naziv.Proizvoda vraća tablicu s jednim stupcem samo za vrijednosti Naziv iz tablice Proizvodi.
Upotrebom funkcija AddColumns, RenameColumns, ShowColumns ili DropColumns možete u potpunosti preoblikovati tablicu na željeni način. Podsjećamo, ove funkcije mijenjaju samo svoj izlazni podatak, ne i svoj izvor.
Ostale su funkcije posebno dizajnirane za izmjenu podataka imaju popratne pojave. Budući da te funkcije nisu čiste, morate ih pažljivo izraditi i one ne mogu sudjelovati u automatskom ponovnom izračunavanju vrijednosti u aplikaciji. Ove funkcije možete upotrebljavati samo unutar formula ponašanja.
Neke funkcije djeluju tako da procjenjuju formule u svim pojedinačnim zapisima tablice. Rezultat formule upotrebljava se na različite načine:
- AddColumns - Formula pruža vrijednost dodanog polja.
- Average,Max,Min,Sum,StdevP,VarP - Formula daje vrijednost za agregiranje.
- Filter,Lookup - Formula određuje treba li zapis biti uključen u izlaz.
- Concat - Formula određuje nizove za spajanje.
- Distinct – formula vraća vrijednost koja se koristi za prepoznavanje dupliciranih zapisa.
- ForAll - Formula može vratiti bilo koju vrijednost, potencijalno s nuspojavama.
- Sort- Formula pruža vrijednost za sortiranje zapisa.
- S - Formula može vratiti bilo koju vrijednost, potencijalno s nuspojavama.
Unutar ovih formula možete navesti polja zapisa koji se obrađuje. Svaka od tih funkcija izrađuje „djelokrug zapisa” u kojem se procjenjuje formula i u kojem su polja zapisa dostupna kao identifikatori najviše razine. Možete preporučiti i svojstva kontrole te druge vrijednosti diljem aplikacije.
Na primjer, uzmite tablicu Proizvodi smještenu u globalnu varijablu:
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 }
)
)
Da biste utvrdili je li bilo koji od ovih proizvoda zatražio više nego što je dostupno:
Filter( Products, 'Quantity Requested' > 'Quantity Available' )
Prvi argument za filtriranje jest tablica zapisa u kojoj će se raditi, a drugi je argument formula. Filtar stvara opseg zapisa za procjenu ove formule u kojem su dostupna polja svakog zapisa, u ovom slučaju Proizvod, Zatražena količina i Dostupna količina. Rezultat usporedbe određuje treba li svaki zapis uključiti u rezultat funkcije:
Slijedom ovog primjera možemo izračunati koliko je svakog proizvoda potrebno naručiti:
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
)
Ovdje rezultatu dodajemo izračunati stupac. AddColumns ima vlastiti opseg zapisa koji koristi za izračunavanje razlike između onoga što je zatraženo i onoga što je dostupno.
Naposljetku, možemo smanjiti tablicu rezultata samo na one stupce koje želimo:
ShowColumns(
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
),
"Product",
"Quantity To Order"
)
Primijetite da smo u prethodnom primjeru upotrijebili dvostruke navodnike („”) na pojedinim mjestima, a jednostruke navodnike (') na drugim mjestima. Jednostruki navodnici potrebni su kada se upućuje na vrijednost objekta, kao što je polje ili tablica, u kojem naziv objekta sadrži razmak. Dvostruki navodnici upotrebljavaju se kada ne upućujemo na vrijednost objekta, već umjesto njega razgovaramo o njemu, posebice u situacijama u kojima objekt još ne postoji, kao u slučaju funkcije AddColumns.
Nazivi polja dodani s pomoću opsega zapisa zamjenjuju iste nazive svugdje u aplikaciji. Kada se to dogodi, i dalje možete pristupiti vrijednostima izvan djelokruga zapisa pomoću operatora za @ rješavanje nesklada:
- Za pristup vrijednostima s ugniježđenih opsega zapisa upotrijebite operator @ s nazivom tablice kojom se koristi ovaj uzorak:
Tablica[@NazivPolja] - Za pristup globalnim vrijednostima, poput izvora podataka, zbirki i varijabli konteksta, upotrijebite uzorak [@ObjectName] (bez oznake tablice).
Ako tablica na kojoj se radi predstavlja izraz kao što je Filtriraj(Tablica, ... ), tada se operator razlučivanja ne može upotrijebiti. Samo krajnji unutrašnji djelokrug zapisa može pristupiti poljima iz ovog izraza tablice, ne upotrebljavajući operator rješavanja nesklada.
Na primjer, pretpostavimo da imate zbirku X:
Ovu zbirku možete izraditi pomoću funkcije Očisti prikupljanje( X, [1, 2] ).
I još jednu zbirku Y:
Ovu zbirku možete izraditi pomoću funkcije ClearCollect( Y, ["A", "B"] ).
Usto, odredite varijablu konteksta pod nazivom Vrijednost pomoću ove formule: UpdateContext ( {Value: "!"} )
Objedinimo sve. U ovom kontekstu, formula je sljedeća:
Ungroup(
ForAll( X,
ForAll( Y,
Y[@Value] & Text( X[@Value] ) & [@Value]
)
),
"Value"
)
proizvodi ovu tablicu:
Što se ovdje događa? Krajnja vanjska funkcija ForAll određuje djelokrug zapisa za X, omogućujući pristup polju Vrijednost svakog zapisa po obradi. Može mu se jednostavno pristupiti pomoću riječi Vrijednost ili pomoću X [@value].
Krajnja unutrašnja funkcija ForAll određuje drugi djelokrug zapisa za Y. Budući da ova tablica sadrži i određeno polje Vrijednost, upotreba polja Vrijednost ovdje se odnosi na polje zapisa Y, a ne više na polje zapisa za X. Ovdje za pristup polju Vrijednost za X moramo upotrijebiti dužu verziju pomoću operatora razlučivanja.
Budući da Y predstavlja krajnji unutrašnji djelokrug zapisa, pristup poljima ove tablice ne zahtijeva rješavanje nesklada, što nam omogućuje da ovu formulu upotrijebimo s istim rezultatom:
Ungroup(
ForAll( X,
ForAll( Y,
Value & Text( X[@Value] ) & [@Value]
)
),
"Value"
)
Svi djelokrugovi zapisa ForAll zamjenjuju globalni djelokrug. Kontekstna varijabla Vrijednost koju smo odredili nije dostupna po nazivu bez upotrebe operatora za rješavanje nesklada. Za pristup ovoj vrijednosti upotrijebite [@Value].
Razgrupiranje izravnava rezultat jer ugniježđene funkcije ForAll rezultiraju ugniježđenom tablicom rezultata.
Za rad na jednom stupcu u tablici upotrijebite funkciju ShowColumns kao u ovom primjeru:
ShowColumns( Products, "Product" )
Ova formula proizvodi ovu tablicu s jednim stupcem:
Za kraću alternativnu mogućnost, navedite vrijednost Table.Column koja izdvaja tablicu s jednim stupcem samo za Stupac iz Tablice. Na primjer, ova formula daje potpuno isti rezultat kao i upotreba funkcije ShowColumns.
Products.Product
Zapise izražavate pomoću vitičastih zagrada koje sadrže vrijednosti polja s nazivom. Na primjer, prvi zapis u tablici možete izraziti na početku ove teme pomoću ove formule:
{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 }
Formule možete ugrađivati i u druge formule, kao što pokazuje ovaj primjer:
{ Name: First(Products).Name, Price: First(Products).Price * 1.095 }
Ugniježđivanjem vitičastih zagrada možete ugnijezditi zapise, kao što pokazuje ovaj primjer:
{ 'Quantity': { 'OnHand': ThisItem.QuantOnHand, 'OnOrder': ThisItem.QuantOnOrder } }
Svaki naziv stupca koji sadrži poseban znak, poput razmaka ili dvotočke, stavite u jednostruke navodnike. Da biste upotrijebili jednostruki navodnik unutar naziva stupca, udvostručite ga.
Napominjemo da vrijednost u stupcu Cijena ne uključuje simbol valute, poput znaka dolara. Taj će se oblik primijeniti kada se prikaže vrijednost.
Tablicu možete izraditi pomoću funkcije Tablica i skupa zapisa. Tablicu možete izraziti na početku ove teme pomoću ove formule:
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 }
)
Možete ugnijezditi i tablice:
Table(
{ Name: "Chocolate",
'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 },
{ Quarter: "Q2", OnHand: 18, OnOrder: 0 } )
}
)
Tablice s jednim stupcem možete izraditi tako da odredite vrijednosti u uglatim zagradama. Izrađena tablica sadrži jedan stupac pod nazivom Vrijednost.
Na primjer, [ 1, 2, 3, 4 ]
istovjetno je Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } )
i vraća ovu tablicu: