Tabeller
Obs!
Microsoft Power Fx er det nye navnet på formelspråket for lerretsapper. Disse artiklene er arbeid som pågår når vi trekker ut språket fra lerretsapper, integrerer det med andre Microsoft Power Platform-produkter og gjør det tilgjengelig som åpen kildekode. Begynn med Microsoft Power Fx-oversikt for å få en innføring i språket.
I Microsoft Power Fx kan du skrive en formel som har tilgang til informasjon i Microsoft Excel, SharePoint, SQL Server og flere andre kilder som lagrer data i oppføringer og tabeller. Hvis du vil arbeide mest mulig effektivt med denne typen data, kan du se gjennom begrepene som ligger til grunn for disse strukturene.
- En post inneholder én eller flere kategorier med informasjon om en person, et sted eller en ting. En post kan for eksempel inneholde navnet, e-postadressen og telefonnummeret til en enkeltkunde. Andre verktøy refererer til en post som en rad eller et element.
- En tabell inneholder én eller flere poster som inneholder de samme kategoriene av informasjon. En tabell kan for eksempel inneholde navnene, e-postadressene og telefonnumrene til 50 kunder.
Du kan bygge et utvalg av formler som tar navnet på en tabell som et argument, på samme måte som en formel i Excel tar én eller flere cellereferanser som argumenter. Noen formler i Power Fx returnerer en tabell som gjenspeiler argumentene du angir. Du kan for eksempel opprette en formel:
- for å oppdatere en post i en tabell ved å angi denne tabellen som ett av flere argumenter for Patch-funksjonen
- for å legge til, fjerne og gi nytt navn til kolonner i en tabell ved å angi denne tabellen som et argument for AddColumns-, DropColumns- eller RenameColumns-funksjonen. Ingen av disse funksjonene endrer den opprinnelige tabellen. Funksjonen returnerer i stedet en annen tabell som er basert på de andre argumentene du angir.
Hver post inneholder minst én kategori med informasjon for en person, et sted eller en ting. Eksemplet ovenfor viser en post for hvert produkt (sjokolade, brød og vann), og en kolonne for hver kategori med informasjon (pris, antall på lager og antall i ordre).
I en formel kan du referere til en post som står alene, utenfor konteksten til en tabell ved hjelp av klammeparenteser. Posten { Name: "Strawberries", Price: 7.99 } er for eksempel ikke knyttet til en tabell. Vær oppmerksom på at feltnavn, for eksempel Name og Price i eksempelet over, ikke står i doble anførselstegn.
Et felt er et enkeltstående stykke informasjon i en post. Du kan visualisere denne typen felt som en verdi i en kolonne for en bestemt post.
På samme måte som med en kontroll, refererer du til et felt eller en post ved å bruke .operator for posten. First(Products).Name returnerer for eksempel Navn-feltet for den første posten i Produkt-tabellen.
Et felt kan inneholde en annen post eller tabell, som eksemplet for GroupBy-funksjonen viser. Du kan neste så mange nivåer av poster og tabeller som du ønsker.
En kolonne refererer til det samme feltet for én eller flere poster i en tabell. I eksemplet ovenfor har hvert produkt et prisfelt, og denne prisen er i samme kolonne for alle produkter. Tabellen ovenfor har fire kolonner som vises vannrett øverst på tvers:
- Navn
- Pris
- Antall tilgjengelig
- Antall i bestilling
Navnet på kolonnen gjenspeiler feltene i denne kolonnen.
Alle verdier i en kolonne er av samme datatype. I eksemplet ovenfor inneholder kolonnen «Antall på lager» alltid et tall og kan ikke inneholde en streng, for eksempel «12 enheter», for én post. Verdien for et felt kan også være tom.
Det kan hende at andre verktøy kaller kolonner «felt».
En tabell består av én eller flere poster, som hver har flere felt med konsekvente navn på tvers av postene.
Alle tabeller som er lagret i en datakilde eller en samling, har et navn, som du bruker til å referere til tabellen og sende den til funksjoner som tar tabeller som argumenter. Tabeller kan også være et resultatet av en funksjon eller formel.
Som i eksemplet nedenfor, kan du uttrykke en tabell i en formel ved hjelp av Table-funksjonen sammen med et sett med poster, som du uttrykker i klammeparenteser:
Table( { Value: "Strawberry" }, { Value: "Vanilla" } )
Du kan også definere en enkeltkolonne-tabell med hakeparenteser. En tilsvarende måte å skrive det ovenfor:
[ "Strawberry", "Vanilla" ]
I Excel og Power Fx, kan du bruke formler til å endre tall og strenger av tekst på lignende måte:
- Skriv for eksempel inn en verdi som 42 i celle A1, i Excel, og skriv deretter for eksempel inn en formel som A1 + 2 i en annen celle, for å vise verdien av 44.
- I Power Apps kan du angi Default-egenskapen for Slider1 til 42 og angi Text-egenskapen for en etikett til Slider1.Value + 2 for å vise verdien 44.
I begge tilfeller endres automatisk den beregnede verdien, hvis du endrer verdiene av argumentene (for eksempel tallet i celle A1, eller verdien av Slider1).
På samme måte kan du bruke formler til å få tilgang til og endre data i tabeller og poster. Du kan bruke navnene på tabeller som argumenter i noen formler, som for eksempel Min(Catalog, Price), til å vise den laveste verdien i Pris-kolonnen i Katalog-tabellen. Andre formler gir hele tabeller som returverdier, for eksempel RenameColumns(Catalog, "Price", "Cost"), som returnerer alle postene fra Katalog-tabellen, men endrer navnet på Pris-kolonnen til Kostnader.
Akkurat som med tall, beregnes formler som involverer tabeller og poster automatisk samtidig med at den underliggende tabellen eller posten endres. Hvis kostnaden for et produkt i Katalog-tabellen senkes under det forrige minimumsnivået, vil returverdien for Min-formelen endres automatisk, slik at de stemmer overens.
Vurder Lower-funksjonen. Hvis variabelen welcome inneholder tekststrengen "Hello, World", returnerer formelen Lower (welcome) "hello, world". Denne funksjonen endrer ikke på noen måte verdien i den variabelen. Lavere er en ren funksjon ved at den bare behandler input og produserer output. Det er alt. Den har ingen bivirkninger. Alle funksjoner i Excel og de fleste funksjoner i Power Fx er rene funksjoner, noe som gjør at arbeidsboken eller appen kan beregnes på nytt automatisk.
Power Fx inneholder et sett med funksjoner som opererer på tabeller på samme måte. Disse funksjonene bruker tabeller som inndata og filtrerer, sorterer, transformerer, reduserer og oppsummerer hele tabeller med data. Lower og mange andre funksjoner som vanligvis tar én enkelt verdi, kan også ta en tabell med én kolonne som inndata.
Mange funksjoner har en tabell med én kolonne som inndata. Hvis en hel tabell bare har én kolonne, kan du angi den ved navn. Hvis en tabell har flere kolonner, kan du angi én av disse kolonnene ved hjelp av syntaksen Table. Column. Products.Name returnerer for eksempel en tabell med én kolonne med bare Name-verdier fra Products-tabellen.
Du kan endre en tabell fullstendig slik du vil, ved hjelp av funksjonene AddColumns, RenameColumns, ShowColumns eller DropColumns. Disse funksjonene endrer bare utdataene, ikke kildene.
Andre funksjoner er spesielt utviklet for å endre data og ha bivirkninger. Ettersom disse funksjonene ikke er rene, må du bygge dem grundig, og de kan ikke delta i automatisk omberegning av verdier i appen. Du kan kun bruke disse funksjonene i formler for virkemåte.
Noen funksjoner fungerer ved å enkeltvis evaluere en formel på tvers av alle poster i en tabell. Formelens resultat brukes på forskjellige måter:
- AddColumns - Formel gir verdien til feltet som er lagt til.
- Gjennomsnitt,Maks,Min,Sum,StdevP,VarP - Formel gir verdien som skal aggregeres.
- Filter,Oppslag – Formel bestemmer om posten skal inkluderes i utdataene.
- Kjede - Formel bestemmer strengene som skal kjedes sammen.
- Distinkt – Formel returnerer en verdi som brukes til å identifisere dupliserte poster.
- ForAll - Formula kan returnere en hvilken som helst verdi, potensielt med bivirkninger.
- Sorter - Formel gir verdien for å sortere postene etter.
- Med - Formel kan returnere en hvilken som helst verdi, potensielt med bivirkninger.
I disse formlene kan du referere til feltene i posten som behandles. Hver av disse funksjonene oppretter et «postomfang» der formelen beregnes, og der feltene i posten er tilgjengelige som identifikatorer på øverste nivå. Du kan også referere til kontrollegenskaper og andre verdier i hele i appen.
Ta for eksempel en tabell med produkter plassert i en global variabel:
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 }
)
)
For å finne ut om noen av disse produktene hadde flere forespørsler enn det som er tilgjengelig:
Filter( Products, 'Quantity Requested' > 'Quantity Available' )
Det første argumentet i Filter er tabellen med poster som det opereres med, og det andre argumentet er en formel. Filter oppretter et oppføringsomfang for evaluering av denne formelen der feltene for hver oppføring er tilgjengelige, i dette tilfellet Produkt, Forespurt antall og Tilgjengelig antall. Resultatet av sammenligningen bestemmer om hver post skal inkluderes i resultatet av funksjonen:
For å legge til i dette eksemplet kan vi beregne hvor mye av hvert produkt som skal bestilles:
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
)
Her legger vi til en beregnet kolonne til resultatet. AddColumns har sitt eget postomfang som brukes til å beregne forskjellen mellom det som er forespurt og det som er tilgjengelig.
Til slutt kan vi redusere resultattabellen til bare de kolonnene som vi ønsker:
ShowColumns(
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
),
"Product",
"Quantity To Order"
)
Vær oppmerksom på at i det ovenstående brukte vi doble anførselstegn (") noen steder og enkle anførselstegn (') andre steder. Enkle anførselstegn er nødvendig når du refererer til verdien for et objekt, for eksempel et felt eller en tabell, der navnet på objektet inneholder et mellomrom. Doble anførselstegn brukes når vi ikke refererer til verdien for et objekt, men i stedet snakker om det, spesielt i situasjoner der objektet ikke finnes ennå, som er tilfelle i AddColumns.
Feltnavnene som ble lagt til ved bruk av postområdet, overstyrer de samme navnene fra andre steder i appen. Når dette skjer, får du fremdeles tilgang til verdiene som er utenfor postområdet ved bruk av @ -tvetydighetsoperatoren:
- For å få tilgang til verdiene fra nestede postområder, bruker du @-operatoren med navnet på tabellen som behandles, ved bruk av dette mønsteret:
Tabell[@feltnavn] - Hvis du vil ha tilgang til globale verdier, som datakilder, samlinger og kontekstvariabler, bruker du mønsteret [@ObjectName] (uten en tabellangivelse).
Hvis tabellen som styres er et uttrykk, for eksempel Filter(Tabell, ... ), kan ikke tvetydighetsoperatoren brukes. Bare det innerste postomfanget har tilgang til felt fra dette tabelluttrykket ved å ikke bruke tvetydighetsoperatoren.
Anta for eksempel at du har en samling X:
Du kan opprette denne samlingen med ClearCollect( X, [1, 2] ).
Og en annen samling Y:
Du kan opprette denne samlingen med ClearCollect( Y, ["A", "B"] ).
Definer i tillegg en kontekstvariabel, kalt Value, med denne formelen: UpdateContext( {Value: "!"} )
La oss sette alt sammen. Følgende formel i denne konteksten:
Ungroup(
ForAll( X,
ForAll( Y,
Y[@Value] & Text( X[@Value] ) & [@Value]
)
),
"Value"
)
gir denne tabellen:
Hva skjer her? Den ytterste ForAll-funksjonen definerer et postomfang for X, som gir tilgang til Value-feltet for hver post når det behandles. Den blir tilgjengelig ved ganske enkelt å bruke ordet Value, eller ved å bruke X[@Value].
Den innerste ForAll-funksjonen definerer et annet oppføringsomfang for Y. Siden det også er angitt et Value-felt for denne tabellen, vil bruken av Value her vise til feltet i Ys oppføring og ikke lenger én fra X. Her, for å få tilgang til Xs Value-felt, må vi bruke den lengre versjonen med detvetydighetsoperatoren.
Tilgang til feltene i denne tabellen krever ikke tvetydighet, siden Y er innerste postomfang, slik at vi kan bruke denne formelen med det samme resultatet:
Ungroup(
ForAll( X,
ForAll( Y,
Value & Text( X[@Value] ) & [@Value]
)
),
"Value"
)
Alle ForAll-postomfang overstyrer det globale omfanget. Kontekstvariabelen Value som vi definerte, er ikke tilgjengelig ved navn uten tvetydighetsoperatoren. Bruk [@Value] for å få tilgang til denne verdien.
Opphev gruppering flater ut resultatet fordi nestede ForAll-funksjoner resulterer i en nestet resultattabell.
Hvis du vil arbeide med én enkelt kolonne fra en tabell, bruker du ShowColumns-funksjonen som i dette eksemplet:
ShowColumns( Products, "Product" )
Denne formelen produserer en tabell med én kolonne:
Hvis du vil ha et kortere alternativ, angir du Table.Column, som pakker ut tabellen med én kolonne i bare Column fra Table. Denne formelen gir for eksempel nøyaktig samme resultat som å bruke ShowColumns.
Products.Product
Du kan uttrykke poster ved hjelp av klammeparenteser som inneholder navngitte feltverdier. Du kan for eksempel uttrykke den første posten i tabellen i begynnelsen av dette emnet ved hjelp av denne formelen:
{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 }
Du kan også bygge inn formler i andre formler, som dette eksemplet viser:
{ Name: First(Products).Name, Price: First(Products).Price * 1.095 }
Du kan neste poster ved å neste klammeparenteser, som dette eksemplet viser:
{ 'Quantity': { 'OnHand': ThisItem.QuantOnHand, 'OnOrder': ThisItem.QuantOnOrder } }
Omslutte hvert kolonnenavn som inneholder et spesialtegn, for eksempel et mellomrom eller et kolon, i enkle anførselstegn. Du kan doble dem, hvis du vil bruke et enkelt sitat i et kolonnenavn.
Vær oppmerksom på at verdien i Pris-kolonnen ikke inneholder et valutasymbol, for eksempel et dollartegn. Denne formateringen vil bli brukt når verdien vises.
Du kan opprette en tabell ved hjelp av Table-funksjonen og et sett med poster. Du kan uttrykke tabellen i begynnelsen av dette emnet ved hjelp av denne formelen:
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 }
)
Du kan også neste tabeller:
Table(
{ Name: "Chocolate",
'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 },
{ Quarter: "Q2", OnHand: 18, OnOrder: 0 } )
}
)
Du kan opprette enkeltkolonnetabeller ved å angi verdier i hakeparenteser. Den resulterende tabellen har én enkelt kolonne, kalt Value.
Eksempel: [ 1, 2, 3, 4 ]
tilsvarer Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } )
og returnerer denne tabellen: