Lentelės
Pastaba
„Microsoft Power Fx” yra naujas drobės programų formulės kalbos pavadinimas. Šie straipsniai yra vis papildomi, mums ištraukiant kalbą iš drobės programų, integruojant ją su kitais „Microsoft Power Platform” produktais ir padarant ją pasiekiamą kaip atvirąjį kodą. Pradėkite nuo „Microsoft Power Fx” apžvalga įvadui į kalbą.
„Microsoft Power Fx” platformoje galite rašyti formulę, kuri pasiekia informaciją iš „Microsoft Excel”, „SharePoint”, SQL serverio ir kelių kitų šaltinių, saugančių duomenis įrašuose ir lentelėse. Norėdami efektyviai dirbti su šio tipo duomenimis, peržiūrėkite šių struktūrų koncepcijas.
- Įraše yra viena arba daugiau informacijos kategorijų apie asmenį, vietą ar daiktą. Pavyzdžiui, įraše gali būti vieno kliento vardas, el. pašto adresas ir telefono numeris. Kitos priemonės nurodo įrašą kaip „eilutę“ arba „elementą“.
- Lentelėje yra vienas ar daugiau įrašų, turinčių tas pačias informacijos kategorijas. Pavyzdžiui, lentelėje gali būti v50 klientų vardai, el. pašto adresai ir telefono numeriai.
Galite kurti įvairias formules, kurios naudoja lentelės pavadinimą kaip argumentą, kaip ir „Excel“ formulė užima vieną ar daugiau langelių nuorodų kaip argumentų. Kai kurios formulės Power Fx grąžina lentelę, atspindinčią kitus jūsų nurodytus argumentus. Pavyzdžiui, galite sukurti formulę:
- Norėdami naujinti lentelės įrašą, nurodydami tą lentelę kaip vieną iš kelių funkcijos Pataisa argumentų.
- Norėdami įtraukti, pašalinti ir pervadinti stulpelius lentelėje, nurodydami tą lentelę kaip funkcijos AddColumns, DropColumns arba RenameColumns argumentą. Nei viena iš šių funkcijų nepakeičia pradinės lentelės. Vietoje to, funkcija grąžina kitą lentelę pagal kitus jūsų nurodytus argumentus.
Kiekviename įraše yra bent viena informacijos apie asmenį, vietą arba dalyką kategorija. Pirmiau pateiktame pavyzdyje rodomas kiekvieno produkto (Šokoladas, Duona ir Vanduo) įrašas ir kiekvienos informacijos kategorijos (Kaina, Turimas kiekis ir Kiekis užsakyme) stulpelis.
Formulėje galite nurodyti įrašą patys (ne lentelės kontekste) naudodami riestinius skliaustelius. Pavyzdžiui, šis įrašas { Pavadinimas: braškės, kaina: 7,99 } nesusietas su lentele. Atkreipkite dėmesį, kad laukų pavadinimai, pvz., Pavadinimas ir Kaina, šiame pavyzdyje nėra pateikiami tarp dvigubų kabučių.
Laukas yra atskira įrašo informacijos dalis. Šį lauko rūšiavimą galite vizualizuoti kaip reikšmę konkretaus įrašo stulpelyje.
Kaip ir valdiklyje, galite nurodyti įrašo lauką naudodami .operatorius įraše. Pavyzdžiui, First(Products).Name grąžina pirmo įrašo lauką Pavadinimas į lentelę Produktai.
Lauke gali būti kitas įrašas arba lentelė, kaip funkcijos GroupBy pavyzdyje. Galite įdėti tiek įrašų ir lentelių lygių, kiek pageidaujate.
Stulpelis nurodo tą patį lauką vienam ar daugiau lentelės įrašų. Pirmesniame pavyzdyje kiekvienas produktas turi kainos lauką, o ta kaina yra tame pačiame visų produktų stulpelyje. Pirmesnėje lentelėje yra keturi stulpeliai, kurie pateikiami horizontaliai viršuje:
- Vardas, pavadinimas
- Kaina
- Turimas kiekis
- Kiekis pagal užsakymą
Stulpelio pavadinimas atspindi laukus stulpelyje.
Visos stulpelio reikšmės yra to paties tipo duomenys. Pirmesniame pavyzdyje stulpelis „Turimas kiekis“ visada turi skaičių ir niekada negali turėti eilutės, pavyzdžiui, „12 vienetų“, vienam įrašui. Bet kurio lauko reikšmė taip pat gali būti tuščia.
Kituose įrankiuose stulpelius galėjote nurodyti kaip „Laukus“.
Lentelę sudaro vienas ar daugiau įrašų, kurių kiekvienas bus su keliais laukais, kurie turi nuoseklius pavadinimus visuose įrašuose.
Bet kuri lentelė, saugoma duomenų šaltinyje arba rinkinyje, turi pavadinimą, kurį naudojate norėdami nurodyti lentelę ir perkelti ja į funkcijas, kurios į lenteles traktuoja kaip argumentus. Lentelės taip pat gali būti funkcijos arba formulės rezultatas.
Kaip ir šiame pavyzdyje, galite išreikšti lentelę formulėje naudodami funkciją Lentelė su įrašų, kuriuos galite išreikšti riestiniuose skliausteliuose, rinkiniu:
Table( { Value: "Strawberry" }, { Value: "Vanilla" } )
Taip pat galite apibrėžti vieno stulpelio lentelę naudodami laužtinius skliaustelius. Lygiavertis būdas parašyti tai, kas nurodyta pirmiau.
[ "Strawberry", "Vanilla" ]
Programoje „Excel“ ir Power Fx naudojate formules, kad galėtumėte manipuliuoti skaičiais ir teksto eilutėmis panašiais būdais:
- Programoje „Excel“ įveskite reikšmę, pvz., 42 langelyje A1, tada įveskite formulę, pvz., A1+2, kitame langelyje, kad rodytumėte reikšmę 44.
- Power Apps nustatykite Slider1 ypatybę Numatytoji kaip 42 ir nustatykite žymos ypatybę Tekstas kaip Slider1.Value + 2, kad rodytumėte reikšmę 44.
Abiem atvejais apskaičiuota reikšmė pasikeičia automatiškai, jei pakeičiate argumentų reikšmes (pavyzdžiui, skaičius langelyje A1 arba Slider1 reikšmė).
Panašiai, galite naudoti formules, kad galėtumėte pasiekti ir valdyti lentelių ir įrašus duomenis. Kai kuriose formulėse, pvz., Min(Catalog, Price), galite naudoti lentelių pavadinimus kaip argumentus, kad rodytumėte žemiausią reikšmę lentelės Katalogas stulpelyje Kaina. Kitos formulės pateikia visas lenteles kaip grąžinimo reikšmes, pvz., RenameColumns(Catalog, "Price", "Cost"), kurios grąžina visus įrašus iš lentelės Katalogas, bet pakeičia stulpelio Kaina pavadinimą į Išlaidos.
Lygiai kaip ir skaičiais, formulės su lentelėmis ir įrašais automatiškai perskaičiuojamos, kai pakeičiama pagrindinė lentelė arba įrašas. Jei produkto, esančio Katalogas lentelėje, kaina nuleidžiama žemiau ankstesnio minimumo, formulės Min. grąžinta reikšmė automatiškai ją pakeis, kad atitiktų.
Apžvelkime funkciją Apatinis. Jei kintamasis pasveikinimas turi teksto eilutę „Labas, pasauli“, formulė Lower( welcome ) grąžina „labas, pasauli“. Ši funkcija niekaip nepakeičia reikšmės šiame kintamajame. Mažesnis yra gryna funkcija, nes ji apdoroja tik įvestį ir gamina išvestį. Štai ir viskas; ji neturi šalutinio poveikio. Visos „Excel“ funkcijos ir dauguma funkcijų Power Fx yra grynos funkcijos, kurios leidžia automatiškai perskaičiuoti darbaknygę arba programą.
Power Fx siūlo funkcijų rinkinį, kuris veikia lentelėse tuo pačiu būdu. Šios funkcijos traktuoja lenteles kaip įvesti ir filtruoja, keičia, mažina ir apibendrina visų lentelių duomenis. Iš tikro, Apatinė ir daug kitų funkcijų, paprastai turinčių vieną reikšmę, taip pat gali turėti vieno stulpelio lentelę kaip įvestį.
Daugelio funkcijų įvestis yra vieno stulpelio lentelė. Jei visa lentelė turi tik vieną stulpelį, galite ją nurodyti pagal pavadinimą. Jei lentelėje yra keli stulpeliai, galite nurodyti vieną iš šių stulpelių naudodami Table.Column sintaksę. Pavyzdžiui, Products.Name iš lentelės Produktai grąžina tik Pavadinimas reikšmių vieno stulpelio lentelę.
Galite visiškai pakeisti lentelę naudodami Įtraukti stulpelius, Pervadinti stulpelius, Rodyti stulpelius arba Išmesti stulpelius funkciją. Vėlgi, šios funkcijos pakeičia tik savo išvestį, o ne šaltinį.
Kitos funkcijos yra specialiai sukurtos duomenims keisti ir turi šalutinį poveikį. Kadangi šios funkcijos nėra švarios, jas reikia kruopščiai sukurti ir jos negali dalyvauti automatiškai perskaičiuojant reikšmes programoje. Galite naudoti šias funkcijas tik veikimo būdo formulėse.
Kai kurios funkcijos veikia atskirai įvertindamos formulę visuose kiekvieno lentelės įrašuose. Formulės rezultatas naudojamas įvairiais būdais:
- AddColumns - Formulė pateikia pridėto lauko reikšmę.
- Average,Max,Min,Sum,StdevP,VarP - Formulė pateikia agreguotą reikšmę.
- Filtras, peržvalga - formulė nustato, ar įrašas turi būti įtrauktas į išvestį.
- Concat - Formulė nustato eilutes, kurias reikia sujungti.
- Distinct – formulė pateikia reikšmę, naudojamą besidubliuojantiems įrašams identifikuoti.
- "ForAll" - formulė gali grąžinti bet kokią vertę, galbūt su šalutiniu poveikiu.
- Rūšiuoti – formulė pateikia reikšmę, pagal kurią galima rūšiuoti įrašus.
- Su - Formulė gali grąžinti bet kokią reikšmę, galbūt su šalutiniu poveikiu.
Šiose formulėse galite nurodyti apdorojamų įrašų laukus. Kiekviena iš šių funkcijų sukuria „įrašo aprėptį“, kuriame formulė yra įvertinama, kai įrašo laukus galima naudoti kaip aukščiausiojo lygio identifikatorius. Taip pat galite nurodyti valdiklių ypatybes ir kitas reikšmes iš visos savo programos.
Pavyzdžiui, paimkime lentelę Produktai, pateiktą visuotiniame kintamajame:
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 }
)
)
Nustatymas, ar bet kurių iš šių produktų buvo labiau pageidaujama nei jų yra.
Filter( Products, 'Quantity Requested' > 'Quantity Available' )
Pirmasis Filtras argumentas yra įrašų lentelė, o antras argumentas yra formulė. Filtras sukuria įrašo aprėptį šiai formulei įvertinti, kurioje galimi kiekvieno įrašo laukai, šiuo atveju Produktas, Prašomas kiekis ir Galimas kiekis. Palyginimo rezultatas nustato, ar kiekvienas įrašas turi būti įtrauktas į funkcijos rezultatą:
Pridėdami prie šio pavyzdžio, galime apskaičiuoti, kiek kiekvieno produkto užsakyti.
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
)
Čia į rezultatą įtraukiame apskaičiuotą stulpelį. "AddColumns" turi savo įrašų aprėptį, kurią naudoja apskaičiuodama skirtumą tarp to, ko buvo paprašyta, ir to, kas yra prieinama.
Galiausiai, galime sumažinti rezultatų lentelę, kad būtų rodomi tik pageidaujami stulpeliai.
ShowColumns(
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
),
"Product",
"Quantity To Order"
)
Atkreipkite dėmesį, kad pirmiau mes naudojome dvigubas kabutes (") vienose vietose ir viengubas kabutes (') kitose vietose. Viengubos kabutės yra privalomos, kai nurodoma objekto reikšmė, pvz., laukas arba lentelė, kurioje objekto pavadinime yra tarpas. Dvigubos kabutės naudojamos tada, kai nenurodome objekto reikšmės, bet kalbame apie ją, ypač situacijose, kai objektas dar neegzistuoja, kaip AddColumns atveju.
Su įrašo aprėptimi pridėti laukų pavadinimai programoje perrašo tokius pačius pavadinimus iš kitos vietos. Kai tai nutinka, vis tiek galite pasiekti reikšmes, kurios nepatenka į įrašo aprėptį, naudodami operatorių @ dviprasmiškumas.
- Norėdami pasiekti reikšmes iš įdėtųjų įrašų aprėpčių, naudokite @ operatorių su lentelės, naudojamos pagal šį modelį, pavadinimu:
Lentelė[@FieldName] - Norėdami pasiekti visuotines reikšmes, pvz., duomenų šaltinius, rinkinius ir konteksto kintamuosius, naudokite modelį [@ObjectName] (be lentelės pavadinimo).
Jei naudojama lentelė yra išraiška, pvz., Filtras(Lentelė, ... ), tokiu atveju negalima naudoti dviprasmiškumo operatoriaus. Tik vidinė įrašo aprėptis gali pasiekti laukus šios lentelės išraiškoje; jų negalima pasiekti naudojant dviprasmiškumo operatorių.
Pavyzdžiui, įsivaizduokite, kad turite rinkinį X:
Šį rinkinį galite kurti naudodami ClearCollect( X, [1, 2] ).
Kitas rinkinys Y:
Šį rinkinį galite kurti naudodami ClearCollect( Y, ["A", "B"] ).
Be to, apibrėžkite konteksto kintamąjį pavadinimu Reikšmė naudodami šią formulę: UpdateContext( {Value: "!"} )
Dabar viską apibendrinkime. Šiame kontekste ši formulė:
Ungroup(
ForAll( X,
ForAll( Y,
Y[@Value] & Text( X[@Value] ) & [@Value]
)
),
"Value"
)
sukuria šią lentelę:
Kas čia vyksta? Išorinė funkcija ForAll nustato įrašo aprėptį, skirtą X, ir suteikia prieigą prie kiekvieno apdorojamo įrašo lauko Reikšmė. Jį galima pasiekti paprasčiausiai naudojant žodį Reikšmė arba naudojant X[@Value].
Vidinė funkcija ForAll apibrėžia kito įrašo aprėptį, skirtą Y. Kadangi šioje lentelėje taip pat nustatytas laukas Reikšmė, Reikšmė naudojimas čia nurodo Y įrašo lauką, o ne X. Čia, norėdami pasiekti X lauką Reikšmė, turime naudoti ilgesnę versiją su dviprasmiškumo operatoriumi.
Kadangi Y vidinė įrašo aprėptis, prieiga prie šios lentelės laukų nereikalauja dviprasmiškumo, leisdama mums naudoti šią formulę su tuo pačiu rezultatu:
Ungroup(
ForAll( X,
ForAll( Y,
Value & Text( X[@Value] ) & [@Value]
)
),
"Value"
)
Visos ForAll įrašo aprėptys perrašo visuotinę aprėptį. Mūsų apibrėžtas konteksto kintamasis Reikšmė nepasiekiamas pagal pavadinimą be dviprasmiškumo operatoriaus. Norėdami pasiekti šią reikšmę, naudokite [@Value].
Išgrupuoti rezultatą šalinama, nes įdėtosios funkcijos ForAll duoda įdėtąją rezultatų lentelę.
Norėdami naudoti vieną lentelės stulpelį, naudokite funkciją ShowColumns kaip šiame pavyzdyje:
ShowColumns( Products, "Product" )
Ši formulė sukuria šią vieno stulpelio lentelę:
Jei naudojate trumpesnę alternatyvą, nurodykite Table.Column, kuris ištraukia Stulpelis vieno stulpelio lentelę iš Table. Pavyzdžiui, ši formulė pateikia lygiai tokį patį rezultatą kaip ir naudojant ShowColumns.
Products.Product
Galite išreikšti įrašus naudodami riestinius skliaustelius, kuriuose yra pavadintų laukų reikšmių. Pavyzdžiui, galite išreikšti pirmąjį įrašą lentelėje šios temos pradžioje naudodami šią formulę:
{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 }
Taip pat galite įdėti formules į kitas formules, kaip parodyta šiame pavyzdyje:
{ Name: First(Products).Name, Price: First(Products).Price * 1.095 }
Galite įdėti įrašus į riestinius skliaustelius, kaip parodyta šiame pavyzdyje:
{ 'Quantity': { 'OnHand': ThisItem.QuantOnHand, 'OnOrder': ThisItem.QuantOnOrder } }
Išskirkite kiekvieną stulpelio pavadinimą, kuriame yra specialusis simbolis, pvz., tarpas arba dvitaškis, viengubomis kabutėmis. Norėdami naudoti viengubą kabutę stulpelio pavadinime, ją dvigubinkite.
Atkreipkite dėmesį, kad stulpelyje Kaina nėra valiutos simbolio, pavyzdžiui, dolerio ženklo. Šis formatavimas pritaikomas, kai reikšmė yra rodoma.
Lentelę galite sukurti naudodami funkciją Lentelė ir įrašo rinkinį. Galite lentelę šios temos pradžioje naudodami šią 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 }
)
Taip pat galite įdėti lenteles:
Table(
{ Name: "Chocolate",
'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 },
{ Quarter: "Q2", OnHand: 18, OnOrder: 0 } )
}
)
Galite kurti vieno stulpelio lenteles ir nurodyti reikšmes laužtiniuose skliaustuose. Gautoje lentelėje yra vienas stulpelis pavadinimu Reikšmė.
Pavyzdžiui, [ 1, 2, 3, 4 ]
prilygsta Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } )
ir grąžina šią lentelę: