Deli putem


Tabele

Belešku

Microsoft Power Fx je novo ime za jezik formula za aplikacije sa podlogom. Ovi članci su u izradi dok izdvajamo jezik iz aplikacija na platnu, integrišemo ga sa drugim Microsoft Power Platform proizvodima i činimo ga dostupnim u vidu otvorenog koda. Počnite sa Microsoft Power Fx pregledom za uvod u jezik.

U usluzi Microsoft Power Fx, možete napisati formulu koja pristupa informacijama u programu Microsoft Excel, SharePoint, SQL Server i nekoliko drugih izvora koji podatke čuvaju u zapisima i tabelama. Da biste najefikasnije radili sa ovom vrstom podataka, pregledajte koncepte koji su u osnovi ovih struktura.

  • Zapis sadrži jednu ili više kategorija informacija o osobi, mestu ili stvari. Na primer, zapis može sadržati ime, adresu e-pošte i telefonski broj jednog klijenta. Ostali alati zapis nazivaju „red“ ili „stavka“.
  • Tabela sadrži jedan ili više zapisa koji sadrže iste kategorije informacija. Na primer, tabela može sadržati imena, adrese e-pošte i telefonske brojeve od 50 klijenata.

Možete da izgradite različite formule koje uzimaju naziv tabele kao argument, baš kao što formule u programu Excel uzimaju jednu ili više referenci ćelija kao argumente. Neke formule u Power Fx vraćaju tabelu koja odražava ostale argumente koje ste naveli. Na primer, možete da kreirate formulu:

  • da biste ažurirali zapis u tabeli navodeći tu tabelu kao jedan od više argumenata za funkciju Patch
  • da dodate, uklonite i preimenujete kolone u tabeli navodeći tu tabelu kao argument za funkcije AddColumns, DropColumns, ili RenameColumns. Nijedna od tih funkcija ne menja izvornu tabelu. Umesto toga, funkcija vraća drugu tabelu na osnovu ostalih argumenata koje navedete.

Elementi tabele

Elementi tabele.

Zapisi

Svaki zapis sadrži makar jednu kategoriju informacija za osobu, mesto ili stvar. Gorenavedeni primer prikazuje zapis za svaki proizvod (Čokolada, Hleb i Voda) i kolonu za svaku kategoriju informacija (Cena, Količina na zalihama i Količina na porudžbini).

U formuli možete da se sami pozivate na zapis, izvan konteksta tabele, koristeći vitičaste zagrade. Na primer, ovaj zapis { Naziv: „Jagode“, cena: 7,99 } nije povezan sa tabelom. Imajte na umu da imena polja, kao što su Naziv i Cena u tom primeru, nisu zatvorena u dvostrukim navodnicima.

Polja

Polje je pojedinačni podatak u zapisu. Ovu vrstu polja možete da prikažete kao vrednost u koloni za određeni zapis.

Baš kao i sa kontrolom, odnosi se i na polje zapisa koristeći operator . na zapisu. Na primer, First(Products).Name vraća polje Naziv za prvi zapis u tabli Proizvodi.

Polje može sadržati drugi zapis ili tabelu, kao što primer za funkciju GroupBy pokazuje. Možete ugnezditi koliko god nivoa zapisa i tabela želite.

Kolone

Kolona se odnosi na isto polje za jedan ili više zapisa u tabeli. U gornjem primeru, svaki proizvod ima polje cena, a ta cena je u istoj koloni za sve proizvode. Tabela iznad ima četiri kolone, horizontalno prikazane na vrhu:

  • Ime
  • Cena
  • Količina na zalihama
  • Količina na porudžbini

Naziv kolone se odražava na polja u toj koloni.

Sve vrednosti unutar kolone su istog tipa podataka. U primeru gore, kolona „Količina na zalihama“ uvek sadrži broj i ne može sadržati nisku, kao što je „12 jedinica“, za jedan zapis. Vrednost bilo kog polja takođe može biti prazno.

Možda ste stupce nazivali „polja“ u drugim alatkama.

Tabela

Tabela sadrži jedan ili više zapisa, svaki sa više polja koja imaju konzistentna imena u zapisima.

Svaka tabela koja je uskladištena u izvoru podataka ili kolekciji ima ime, koje koristite za upućivanje na tabelu i prosleđivanje funkcijama koje tabele uzimaju kao argumente. Tabele takođe mogu biti rezultat funkcije ili formule.

Kao u sledećem primeru, tabelu možete izraziti tabelu formulom koristeći funkciju Table sa skupom zapisa koje izražavate u vitičastim zagradama:

Table( { Value: "Strawberry" }, { Value: "Vanilla" } )

Takođe možete definisati tabelu sa jednom kolonom pomoću uglastih zagrada. Ekvivalentan način pisanja gorenavedenog:

[ "Strawberry", "Vanilla" ]

Formule tabela

U programu Excel i Power Fx, koristite formule za manipuliranje brojevima i niskama teksta na slične načine:

  • U programu Excel unesite vrednost, kao što je 42, u ćeliji A1, a zatim unesite formulu, kao što je A1+2 u drugoj ćeliji za prikaz vrednosti 44.
  • U Power Apps, podesite Slider1 svojstvo Default na 42, a zatim postavite svojstvo oznake Text na Slider1.Value + 2 da bi se prikazala vrednost 44.

U oba slučaja, izračunata vrednost se automatski menja ako promenite vrednosti argumenata (na primer, broj u ćeliji A1 ili vrednost Slider1).

Slično tome, možete koristiti formule za pristup i manipulaciju podacima u tabelama i zapisima. Možete koristiti imena tabela kao argumente u nekim formulama, kao što su Min(Catalog, Price) da pokažete najnižu vrednost u koloni Cena u tabeli Katalog. Ostale formule daju čitave tabele kao povratne vrednosti, kao što su RenameColumns(Catalog, "Price", "Cost"), što vraća sve zapise iz tabele Katalog, ali menja ime kolone Cena na Trošak.

Baš kao i kod brojeva, formule koje uključuju tabele i zapise automatski se ponovo izračunavaju kako se osnovna tabela ili zapis menja. Ako je cena proizvoda u tabeli Katalog spuštena ispod prethodnog minimuma, povratna vrednost formule Min će se automatski promeniti u skladu sa njom.

Funkcije tabele i svojstva kontrole

Razmotrite funkciju Lower. Ako promenljiva dobrodošlica sadrži tekstualnu nisku „Zdravo svima“, formula Lower( welcome ) vraća „zdravo svima“. Ova funkcija ni na koji način ne menja vrednost u toj promenljivoj. Lower je čista funkcija u tome što samo obrađuje ulazno i proizvodi izlazno. To je sve; nema neželjenih efekata. Sve funkcije u programu Excel i većina funkcija u usluga Power Fx su čiste funkcije koje omogućavaju automatsko ponovno izračunavanje radne sveske ili aplikacije.

Power Fx nudi skup funkcija koje na isti način rade i u tablama. Ove funkcije uzimaju tabele kao unos, a zatim filtriraju, sortiraju, transformišu, smanjuju i sumiraju čitave tabele podataka. Zapravo, Lower i mnoge druge funkcije koje obično uzimaju jednu vrednost mogu takođe uzeti tabelu sa jednom kolonom kao unos.

Mnoge funkcije uzimaju tabelu sa jednom kolonom kao ulaz. Ako cela tabela ima samo jednu kolonu, možete je odrediti imenom. Ako tabela ima više kolona, jednu od tih kolona možete odrediti pomoću sintakse Table.Column. Na primer, Products.Name vraća tabelu sa jednom kolonom samo za vrednosti Naziv iz tabele Proizvodi.

Izgled tabele možete potpuno da promenite kako god želite tako što ćete koristiti funkcije AddColumns, RenameColumns, ShowColumns ili DropColumns. Dakle, ove funkcije menjaju samo svoj izlaz, ne i njihov izvor.

Formule ponašanja

Ostale funkcije su posebno dizajnirane za izmenu podataka i neželjenih efekata. Budući da ove funkcije nisu čiste, morate ih pažljivo izgraditi i one ne mogu da učestvuju u automatskom preračunavanju vrednosti u aplikaciji. Ove funkcije možete koristiti samo u okviru formula ponašanja.

Opseg zapisa

Neke funkcije rade tako što pojedinačno izračunavaju formulu u svim zapisima tabele. Rezultat formule se koristi na različite načine:

  • AddColumns – Formula pruža vrednost dodatnog polja.
  • Average, Max, Min, Sum, StdevP, VarP – Formula daje vrednost za agregaciju.
  • Filter, Lookup – Formula određuje da li zapis treba uključiti u izlaz.
  • Concat – Formula određuje stringove koji treba da se nadovezuju.
  • Distinct - Formula vraća vrednost, koristi se za prepoznavanje dupliranih zapisa.
  • ForAll – Formula može da vrati bilo koju vrednost, potencijalno sa neželjenim efektima.
  • Sort – Formula pruža vrednost za sortiranje zapisa.
  • With – Formula može da vrati bilo koju vrednost, potencijalno sa neželjenim efektima.

Unutar ovih formula možete navesti polja zapisa koji se obrađuje. Svaka od ovih funkcija kreira „opseg zapisa“ u kome se izračunava formula, gde su polja zapisa dostupna kao identifikatori najvišeg nivoa. Možete takođe da navedete svojstva kontrole i druge vrednosti iz aplikacije.

Na primer, uzmite tabelu Proizvodi smeštenu u globalnu promenljivu:

Zahtevane tabele.

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 da li je bilo koji od ovih proizvoda tražio više nego što je dostupno:

Filter( Products, 'Quantity Requested' > 'Quantity Available' )

Prvi argument za Filter je tabela zapisa na kojoj treba raditi, a drugi argument je formula. Filter kreira opseg zapisa za izračunavanje ove formule u kojoj su polja svakog zapisa dostupna, u ovom slučaju Proizvod, Zahtevana količina i Dostupna količina. Rezultat poređenja određuje da li svaki zapis treba da bude uključen u rezultat funkcije:

Potrebne tabele.

Dodatno, u ovom primeru možemo izračunati koliko svakog proizvoda treba naručiti:

AddColumns( 
    Filter( Products, 'Quantity Requested' > 'Quantity Available' ), 
    "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
)

Ovde u rezultat dodajemo izračunatu kolonu. AddColumns ima sopstveni opseg zapisa koji koristi za izračunavanje razlike između onoga što je traženo i onoga što je dostupno.

Dodajte kolone.

Na kraju, možemo da smanjimo tabelu sa rezultatima na samo one kolone koje želimo:

ShowColumns(
    AddColumns(
        Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
        "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
    ),
    "Product",
    "Quantity To Order"
)

Samo da naručim.

Imajte u vidu da smo u gornjem tekstu koristili dvostruke navodnike (") na nekim mestima, a jednostruke navodnike (') na drugim mestima. Jednostruki navodnici su potrebni kada se referenciraju vrednosti objekta, kao što su polje ili tabela, u kom ime objekta sadrži razmak. Dvostruki navodnici se koriste kada ne referenciramo vrednost objekta, već umesto toga govorimo o njemu, posebno u situacijama u kojima objekat još ne postoji, kao u slučaju AddColumns.

Razjašnjavanje

Nazivi polja koji su dodati s opsegom zapisa zameniće ista imena na drugim mestima u aplikaciji. Kad se to dogodi, i dalje možete pristupati vrednostima izvan opsega zapisa pomoću operatora za @ razjašnjavanje:

  • Da biste pristupili vrednostima iz ugnežđenih opsega zapisa, koristite operator @ sa nazivom tabele kojom upravljate kada koristite ovaj obrazac:
    Table[@FieldName]
  • Da biste pristupili globalnim vrednostima, kao što su izvori podataka, kolekcije i promenljive konteksta, koristite obrazac [@ObjectName] (bez oznake tabele).

Ako je tabela kojom se rukovodi izraz, kao što je Filter(Table, ... ), onda se operator razjašnjavanja ne može koristiti. Samo najdublji opseg snimanja može pristupiti poljima iz ovog izraza tabele, ne koristeći operator za razjašnjavanje.

Na primer, zamislite da imate kolekciju X:

X vrednost.

Ovu kolekciju možete da kreirate pomoću izraza ClearCollect( X, [1, 2] ).

I još jednu kolekciju Y:

Y vrednost.

Ovu kolekciju možete da kreirate pomoću ClearCollect( Y, ["A", "B"] ).

Pored toga, definišite promenljivu konteksta sa imenom Vrednost pomoću ove formule: UpdateContext( {Value: "!"} )

Hajde da sve to sastavimo. U ovom kontekstu, sledeća formula:

Ungroup(
    ForAll( X,
        ForAll( Y,
            Y[@Value] & Text( X[@Value] ) & [@Value]
        )
    ),
    "Value"
)

daje ovu tabelu:

XY vrednost.

Šta se ovde dešava? Poslednja funkcija ForAll definiše opseg zapisa za X i dozvoljava svakom zapisu pristup polju Value dok se obrađuje. Može mu se pristupiti samo pomoću reči Value ili upotrebom X[@Value].

Najdublja funkcija ForAll definiše još jedan opseg zapisa za Y. Pošto ova tabela takođe sadrži definisano polje Value, korišćenje polja Value ovde se odnosi na polje u zapisu za Y, a ne više na polje u obrascu X. Ovde, da bismo pristupili polju za X, Value, moramo da koristimo dužu verziju operatora za razjašnjavanje.

Pošto je Y je najdublji opseg zapisa, pristup poljima ove tabele ne zahteva nedvosmislenost, omogućavajući nam da koristimo ovu formulu sa istim rezultatom:

Ungroup(
    ForAll( X,
        ForAll( Y,
            Value & Text( X[@Value] ) & [@Value]
        )
    ),
    "Value"
)

Svi opsezi zapisa ForAll zamenjuju globalni opseg. Promenljiva konteksta Vrednost koju smo definisali nije dostupna po nazivu bez operatora za razjašnjavanje. Da biste pristupili ovoj vrednosti, koristite [@Value].

Razgrupiši svodi rezultat zato što ugnežđene funkcije ForAll rezultiraju u ugnežđenoj tabli rezultata.

Tabele sa jednom kolonom

Da biste radili na jednoj koloni iz tabele, koristite funkciju ShowColumns kao u ovom primeru:

ShowColumns( Products, "Product" )

Ova formula proizvodi ovu tabelu sa jednim kolonom:

Jedna kolona.

Za kraću alternativu, navedite Table.Column, koja izdvaja tabelu sa jednom kolonom sa Kolonom iz Tabele. Na primer, ova formula daje potpuno isti rezultat kao i korišćenje ShowColumns.

Products.Product

Umetnuti zapisi

Zapise izražavate koristeći vitičaste zagrade koji sadrže imenovane vrednosti polja. Na primer, možete da izrazite prvi zapis u tabeli 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 ugraditi i u druge formule, kao što ovaj primer pokazuje:

{ Name: First(Products).Name, Price: First(Products).Price * 1.095 }

Možete ugnezditi zapise ugnežđivanjem vitičastih zagrada, kao što ovaj primer pokazuje:

{ 'Quantity': { 'OnHand': ThisItem.QuantOnHand, 'OnOrder': ThisItem.QuantOnOrder } }

Navedite svako ime stupca koji sadrži poseban znak, kao što je razmak ili kolona, u jednostrukim navodnicima. Da biste koristili jednostruki navodnik unutar naziva kolone, udvostručite ga.

Imajte na umu da vrednost u koloni Cena ne sadrži simbol valute, kao što je znak dolara. To formatiranje će se primeniti kada se vrednost prikaže.

Umetnute tabele

Tabelu možete kreirati koristeći funkciju Table i skup zapisa. Možete da izrazite tabelu 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 } 
)

Takođe možete da ugnezdite tabele:

Table( 
	{ Name: "Chocolate", 
	  'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 },
	                             { Quarter: "Q2", OnHand: 18, OnOrder: 0 } ) 
	}
)

Tabele sa umetnutim vrednostima

Tabele sa jednim kolonom možete da kreirate tako što ćete navesti vrednosti u uglastim zagradama. Dobijena tabela ima jednu kolonu, pod nazivom Vrednost.

Na primer, [ 1, 2, 3, 4 ] je ekvivalentno Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } ) i vraća ovu tabelu:

Ugrađena tabela.