Forstå tabeller og poster i lærredapps

I Power Apps kan du oprette en lærredapp, der har adgang til oplysninger i Microsoft Excel, SharePoint, SQL Server og mange andre kilder, der lagrer data i poster og tabeller. For at kunne arbejde effektivt med denne type data bør du gennemse de begreber, der ligger til grund for disse strukturer.

  • En post indeholder en eller flere kategorier af oplysninger om en person, et sted eller en ting. En post kan for eksempel indeholde navnet, mailadressen og telefonnummeret på en enkelt kunde. Andre værktøjer refererer til en post som en "række" eller et "element".
  • En tabel indeholder en eller flere poster, der indeholder de samme kategorier af oplysninger. En tabel kan f.eks. indeholde navnene, mailadresserne og telefonnumrene på 50 kunder.

I din app skal du bruge formler til at oprette, opdatere og redigere poster og tabeller. Du læser og skriver sandsynligvis data til en ekstern datakilde, som er en udvidet tabel. Du kan desuden oprette en eller flere interne tabeller, som kaldes samlinger.

Du kan oprette forskellige formler, der opfatter navnet på en tabel som et argument på samme måde som en formel i Excel bruger en eller flere cellereferencer som argumenter. Nogle formler i Power Apps returnerer en tabel, der afspejler de argumenter, som du angiver. Du kan f.eks. oprette en formel:

  • for at opdatere en post i en tabel ved at angive denne tabel som et af flere argumenter for funktionen Patch.
  • for at tilføje, fjerne og omdøbe kolonner i en tabel ved at angive en tabel som et argument for funktionen AddColumns, DropColumns eller RenameColumns. Ingen af disse funktioner ændrer den oprindelige tabel. Funktionen returnerer i stedet en anden tabel, der er baseret på de argumenter, som du angiver.

Elementer i en tabel

Tabelelementer.

Poster

Hver post indeholder mindst én kategori af oplysninger om en person, et sted eller en ting. Ovenstående eksempel viser en post for hvert produkt (Chocolate (Chokolade), Bread (Brød) og Water (Vand)) og en kolonne for hver kategori af oplysninger (Price (Pris), Quantity on hand (Lager) og Quantity on Order (Antal, der er i bestilling)).

I en formel kan du henvise til en post i sig selv uden for konteksten af en tabel ved hjælp af krøllede klammeparenteser. Posten { Name: "Strawberries", Price: 7.99 } er f.eks. ikke tilknyttet en tabel. Bemærk, at feltnavne som f.eks Name (Navn) og Price (Pris) i dette eksempel ikke er omsluttet af dobbelte anførselstegn.

Felter

Et felt er en enkelt oplysning i en post. Du kan visualisere denne form for felt som en værdi i en kolonne for en bestemt post.

På samme måde som et kontrolelement refererer du til et felt i en post ved at bruge operatoren . for posten. First(Products).Name returnerer f.eks. feltet Name (Navn) for den første post i tabellen Products (Produkter).

Et felt kan indeholde en anden post eller tabel, for eksempel det funktionen GroupBy viser. Du kan indlejre lige så mange niveauer af poster og tabeller, som du vil.

Kolonner

En kolonne henviser til det samme felt for en eller flere poster i en tabel. I ovenstående eksempel har hvert produkt et prisfelt, og den pris er i den samme kolonne for alle produkter. Ovenstående tabel har fire kolonner, der vises vandret øverst:

  • Navn
  • Pris
  • Salgsklar mængde
  • Bestilt antal

Kolonnens navn afspejler felterne i den pågældende kolonne.

Alle værdier i en kolonne er af samme datatype. I ovenstående eksempel indeholder kolonnen "Salgsklar mængde" altid et tal og må ikke indeholde en streng som f.eks "12 enheder" for en post. Værdien i et felt kan også være tom.

Du kan have henvist til kolonner som "felter" i andre værktøjer.

Bemærk

For datakilder som f.eks. SharePoint-, Excel- eller Power BI-felter, der indeholder kolonnenavne med mellemrum, erstatter Power Apps hvert mellemrum med "_x0020_". "Column Name" vises f.eks. i et SharePoint-, Excel- eller Power BI-felt som "Column_x0020_Name" i Power Apps, når det vises i datalayoutet eller bruges i en formel.

Table

En tabel består af en eller flere poster, hver med flere felter, som har ensartede navne på tværs af posterne.

Alle tabeller, der er gemt i en datakilde eller en samling, har et navn, som du kan bruge til at henvise til tabellen og sende dem til funktioner, der bruger tabeller som argumenter. Tabeller kan også være resultatet af en funktion eller formel.

Som det fremgår af følgende eksempel, kan du udtrykke en tabel i en formel ved hjælp af funktionen Table med et sæt poster, som du sætter i krøllede klammeparenteser:

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

Du kan også definere en tabel med en enkelt kolonne tabel med kantede parenteser. En tilsvarende måde at skrive ovenstående på:

[ "Strawberry", "Vanilla" ]

Tabelformler

I Excel og Power Apps kan du bruge formler til at manipulere med tal og tekststrenge på samme måde:

  • Skriv en værdi i Excel, f.eks. 42 i celle A1, og skriv derefter en formel, f.eks. A1+2 i en anden celle for at få vist værdien 44.
  • I Power Apps skal du angive egenskaben Default for Slider1 til 42 og angive egenskaben Text for en etiket til Slider1.Value + 2 for at få vist værdien 44.

I begge tilfælde ændres den beregnede værdi automatisk, hvis du ændrer værdierne for argumenterne (for eksempel tallet i celle A1 eller værdien af Slider1).

På samme måde kan du bruge formler til at få adgang til og manipulere data i tabeller og poster. Du kan bruge navnene på tabeller som argumenter i nogle formler, f.eks. Min(Catalog, Price) for at få vist den laveste værdi i kolonnen Price (Pris) i tabellen Catalog (Katalog). Andre formler indeholder hele tabeller som returværdier, f.eks. RenameColumns(Catalog, "Price", "Cost"), som returnerer alle poster fra tabellen Catalog (Katalog), men ændrer navnet på kolonnen Price (Pris) til Cost (Omkostninger).

Ligesom med tal genberegnes formler, der omfatter tabeller og poster automatisk, når den underliggende tabel eller post ændres. Hvis omkostningen for et produkt i tabellen Catalog (Katalog) reduceres til under den tidligere minimumværdi, ændres returværdien for formlen Min automatisk, så den passer til værdien.

Lad os gennemgå nogle enkle eksempler.

  1. Opret en tom app til en telefon, og tilføj et lodret kontrolelement af typen Galleri, der indeholder andre kontrolelementer.

    Skærmen viser som standard pladsholdertekst fra en tabel med navnet CustomGallerySample. Egenskaben Items for skærmens kontrolelement Galleri angives automatisk som den pågældende tabel.

    Galleri.

    Bemærk

    Nogle kontrolelementer er blevet flyttet rundt og forstørret med henblik på illustration.

  2. I stedet for at angive egenskaben Items til navnet på en tabel, kan du angive den til en formel, der indeholder navnet på tabellen som et argument som i dette eksempel:

    Sort(CustomGallerySample, SampleHeading, Descending)

    Denne formel indeholder funktionen Sort, som tager navnet på en tabel som sit første argument og navnet på en kolonne i denne tabel som det andet argument. Funktionen understøtter også et valgfrit tredje argument, der fastsætter, at du vil sortere dataene i faldende rækkefølge.

    Sortering for galleri.

  3. Angiv egenskaben Items til en formel, der tager formlen fra det forrige trin som et argument og returnerer en tabel som i dette eksempel:

    FirstN(Sort(CustomGallerySample, SampleHeading, Descending), 2)

    I denne formel kan du bruge funktionen FirstN til at få vist et bestemt antal poster i en tabel. Du kan bruge funktionen Sort som det første argument for FirstN og et tal (i dette tilfælde 2) som det andet argument, som angiver, hvor mange poster der vises.

    Hele formlen returnerer en tabel, der indeholder de første to poster af tabellen CustomGallerySample, der er sorteret efter kolonnen SampleHeading i faldende rækkefølge.

    FirstN for galleri.

Tabelfunktioner og egenskaber for kontrolelementer

Overvej funktionen Lower. Hvis variablen welcome indeholder tekststrengen "Hello, World", vil formlen Lower( welcome ) returnere "Hello, World". Denne funktion kan på ingen måde ændre værdien i den pågældende variabel. Lower er en ren funktion, som kun behandler input og frembringer output. Det er det hele. Der er ingen andre effekter. Alle funktioner i Excel og de fleste funktioner i Power Apps er rene funktioner, så projektmappen eller appen kan genberegnes automatisk.

Power Apps indeholder en række funktioner, der fungerer på samme måde for tabeller. Disse funktioner tager tabeller som input og filtrerer, sorterer, transformerer og opsummerer hele datatabeller. Faktisk kan Lower og mange andre funktioner, der som regel tager en enkelt værdi, også bruge en tabel med en enkelt kolonne som input.

  • Sort, Filter – Sorterer og filtrerer poster.
  • FirstN, LastN – Returnerer de første N poster eller de sidste N poster i tabellen.
  • Abs, Sqrt, Round, RoundUp, RoundDown – Aritmetiske handlinger for hver post i en tabel bestående af én kolonne, der resulterer i en tabel med resultater i én kolonne.
  • Left, Mid, Right, Replace, Substitute, Trim, Lower, Upper, Proper – Strengmanipulationer for hver post i en tabel bestående af én kolonne, der resulterer i en tabel med strenge i én kolonne.
  • Len – For en kolonne strenge og returnerer en tabel bestående af én kolonne, der indeholder længden af hver streng.
  • Concatenate – Sammenkæder flere kolonner strenge, hvilket resulterer i en tabel med én kolonne med strenge.
  • AddColumns, DropColumns, RenameColumns, ShowColumns – Kolonnemanipulation af tabellen, som resulterer i en ny tabel med forskellige kolonner.
  • Distinct – Fjerner duplikerede poster.
  • Shuffle – Blander posterne i en vilkårlig rækkefølge.
  • HashTags – Søger efter hashtags i en streng.
  • Errors – Leverer fejloplysninger, når du arbejder med en datakilde.

Mange af disse funktioner tager en tabel med én kolonne som input. Hvis en hel tabel kun har én kolonne, kan du angive den efter navn. Hvis en tabel har flere kolonner, kan du angive en af disse kolonner ved hjælp af syntaksen Table.Column. Products.Name returnerer f.eks. kun tabellen med én kolonne med værdier for Name (Navn) i tabellen Products (Produkter).

Du kan omforme en tabel fuldstændigt, men du skal gøre det ved at bruge funktionen AddColumns, RenameColumns, ShowColumns eller DropColumns. Disse funktioner ændrer igen kun deres output og ikke deres kilde.

Kontrolelementers egenskaber kan også være tabeller:

  • Items – Gælder for gallerier, lister og kombinationsfelter. Denne egenskab definerer den tabel, som galleriet eller listen viser.
  • SelectedItems – Gælder for lister og kombinationsfelter. Denne egenskab definerer den tabel med elementer, som brugeren har valgt, hvis SelectMultiple er aktiveret.

Formler for funktionsmåde

Andre funktioner er specifikt udviklet til at ændre data og have andre effekter. Da disse funktioner ikke er rene, skal du bygge dem omhyggeligt, og de kan ikke deltage i automatisk genberegning af værdier i appen. Du kan kun bruge disse funktioner i formler for funktionsmåde.

  • Collect, Clear, ClearCollect – Opretter samlinger, fjerner dem og tilføjer data til dem.
  • Patch – Ændrer et eller flere felter i en post.
  • Update, UpdateIf – Opdaterer de poster, der stemmer overens med et eller flere af de søgekriterier, som du angiver.
  • Remove, RemoveIf – Sletter de poster, der stemmer overens med et eller flere af de søgekriterier, som du angiver.

Postformler

Du kan også oprette en formel, der beregner data for en enkelt post, tager en enkelt post som et argument og resulterer i en enkelt post som en returværdi. Lad os bruge gallerieksemplet ovenfor igen og egenskaben Gallery1.Selected til at vise oplysninger fra den post, som brugeren vælger i galleriet.

  1. Tilføj et kontrolelement af typen Knap, og angiv dens egenskab OnSelect til denne formel:
    Collect( SelectedRecord, Gallery1.Selected )

  2. Vælg knappen, mens du holder Alt-tasten nede.

  3. Vælg Samlinger i menuen Filer.

    SelectedRecord-samling.

Denne formel returnerer en post, der ikke alene omfatter data fra den post, der aktuelt er valgt i galleriet, men også de enkelte kontrolelementer i galleriet. Posten indeholder f.eks. både kolonnen SampleText, som stemmer overens med kolonnen SampleText i den oprindelige tabel og kolonnen Subtitle1, som repræsenterer den mærkat, der viser dataene fra den pågældende kolonne. Vælg tabelikonet i kolonnen Subtitle1 for at gennemgå disse data.

Bemærk

Kolonnen Subtitle1 kan være navngivet Subtitle2 eller lignende, hvis du har tilføjet elementer, der er anderledes end dem, der er angivet i dette emne.

Nu hvor du har den valgte post, kan du hente individuelle felter fra den med . -operatoren.

  1. Tilføj et kontrolelement af typen Etiket, og flyt det derefter under galleriet og knappen.

  2. Angiv etikettens egenskab Text som i dette udtryk:
    "Selected: " & Gallery1.Selected.SampleHeading

    Tekstegenskab med opdateret etiket.

Du har taget egenskaben Selected, som er en post, og trukket egenskaben SampleHeading ud fra den.

Du kan også bruge en post som en objektbeholder til generel brug for relaterede navngivne værdier.

  • Hvis du bygger en formel omkring funktionerne UpdateContext og Navigate, kan du bruge en post til at indsamle de kontekstvariabler, som du vil opdatere.
  • Brug egenskaben Updates i et kontrolelement af typen Rediger formular til at indsamle de ændringer, som brugeren har foretaget i en formular.
  • Brug funktionen Patch til at opdatere en datakilde, men også til at flette poster.

I disse tilfælde er posten aldrig en del af en tabel.

Postfunktioner og egenskaber for kontrolelementer

Funktioner, der returnerer poster:

  • FirstN, LastN – Returnerer den eller de første eller sidste poster i tabellen.
  • Lookup – Returnerer den første post fra en tabel, der stemmer overens med et eller flere kriterier.
  • Patch – Opdaterer en datakilde eller fletter poster.
  • Defaults – Returnerer standardværdierne for en datakilde.

Egenskaber, der returnerer poster:

  • Selected – Gælder gallerier og lister. Returnerer den aktuelt valgte post.
  • Updates – Gælder gallerier. Samler alle de ændringer, som en bruger foretager i en formular til dataindtastning.
  • Update – Gælder inputkontrolelementer som f.eks. tekstinputkontrolelementer og skydere. Angiver individuelle egenskaber, som galleriet skal samle.

Postområde

Nogle funktioner fungerer ved at evaluere en formel separat på tværs af alle posterne i en tabel. Formlens resultat bruges på forskellige måder:

  • AddColumns – Formlen resulterer i værdien af det tilføjede felt.
  • Average, Max, Min, Sum, StdevP, VarP – Formlen giver den værdi, der skal samles.
  • Filter, Lookup – Formlen afgør, om posten skal inkluderes i outputtet.
  • Concat – Formlen afgør de strenge, som skal sammenkædes.
  • Distinct – Formlen returnerer en værdi, der bruges til at identificere duplikerede poster.
  • ForAll – Formlen kan returnere en hvilken som helst værdi, muligvis med andre effekter.
  • Sort – Formlen leverer den værdi, som posterne skal sorteres efter.
  • With – Formlen kan returnere en hvilken som helst værdi, muligvis med andre effekter.

I disse formler kan du henvise til felterne for den post, der behandles. Hver af disse funktioner opretter et "postområde", hvor formlen evalueres, og hvor felterne i posten fås som id'er på øverste niveau. Du kan også referere til kontrolelementers egenskaber og andre værdier via appen.

Lad os tage tabellen Products (Produkter):

Eksempel på produkter.

Hvis du vil oprette denne eksempeltabel i appen, skal du indsætte en knap, angive egenskaben OnSelect til denne formel og derefter markere knappen (Klik på den, mens du holder Alt-tasten nede i Power Apps Studio):

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 at finde ud af om der er blevet bestilt flere af disse produkter, end der er på lager:

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

Det første argument, der hvor du skal bruge funktionen Filter, er den tabel med poster, der skal bearbejdes, og det andet argument er en formel. Filter opretter et postområde til evaluering af denne formel, hvor felterne for hver post er tilgængelige, i dette tilfælde Product (Produkt), Quantity Requested (Anmodet antal) og Quantity Available (Tilgængeligt antal). Resultatet af sammenligningen bestemmer, om hver post skal medtages i resultatet af funktionen:

Filtreret tabel.

Lad os bygge videre på eksemplet og beregne, hvor meget af hvert produkt vi skal bestille:

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

Her føjer vi en beregnet kolonne til resultatet. AddColumns har sit eget postområde til beregning af forskellen mellem, hvad der er blevet anmodet, og hvad der er tilgængeligt.

Tilføjede kolonner.

Endelig kan vi reducere resultattabellen til de ønskede kolonner:

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

Opdateret tabel.

Bemærk, at vi bruger dobbelte anførselstegn (") nogle steder og et enkelt anførselstegn (') andre steder. Enkelte anførselstegn er påkrævede, når der refereres til værdien af et objekt, f.eks et felt eller en tabel, hvor navnet på objektet indeholder et mellemrum. Dobbelte anførselstegn benyttes, når vi ikke refererer til værdien af et objekt, men i stedet taler om det, især i situationer, hvor objektet endnu ikke findes, hvilket er tilfældet med AddColumns.

Fjernelse af flertydige udtryk

De feltnavne, der tilføjes sammen med postområdet, tilsidesætter de samme navne fra andre steder i appen. Når det sker, kan du stadig få adgang til værdier uden for postområdet med operatoren @ fjernelse af flertydige udtryk:

  • Du kan få adgang til værdier fra indlejrede postområder ved at bruge operatoren @ sammen med navnet på den tabel, der arbejdes på, ved hjælp af mønsteret:
    Table[@FieldName]
  • Du kan få adgang til globale værdier, som f.eks. datakilder, samlinger og kontekstvariabler, ved at bruge mønsteret [@ObjectName] (uden en tabelangivelse).

Hvis den tabel, der arbejdes med, er et udtryk som f.eks. Filter( Tabel, ... ), kan operatoren til fjernelse af flertydige udtryk ikke benyttes. Det er kun det inderste postområde, der kan få adgang til felter fra dette tabeludtryk ved ikke at bruge operatoren til fjernelse af flertydige udtryk.

Forestil dig, at du f.eks. har en samling X:

Samling X.

Du kan oprette denne samling med ClearCollect( X, [1, 2] ).

Og en anden samling Y:

Samling Y.

Du kan oprette denne samling med ClearCollect( Y, ["A", "B"] ).

Derudover skal du definere en kontekstvariabel ved navn Value (Værdi) med denne formel: UpdateContext( {Value: "!"} )

Lad os samle det hele. I denne sammenhæng giver følgende formel:

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

denne tabel:

XY-tabel.

Hvad foregår der her? Den yderste funktion ForAll definerer et postområde for X, der giver adgang til feltet Value (Værdi) for hver post, når de behandles. Der kan opnås adgang til feltet ved blot at bruge ordet Value eller ved hjælp af X[@Value].

Den inderste funktion ForAll definerer et andet postområde for Y. Da der også er defineret et Value-felt for denne tabel , refererer brugen af Value her til feltet i posten for Y og ikke længere for X. Her skal du bruge den længere version sammen med operatoren for fjernelse af flertydige udtryk, hvis du vil have adgang til feltet Value i posten for X.

Eftersom Y er det inderste postområde, kræver adgang til felter i denne tabel ikke fjernelse af flertydige udtryk, hvilket gør det muligt at benytte denne formel med det samme resultat:

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

Alle postområder af typen ForAll tilsidesætter det globale område. Kontekstvariablen Value, som vi definerede, er ikke tilgængelig efter navn uden operatoren til fjernelse af flertydige udtryk. Hvis du vil have adgang til denne værdi, skal du bruge [@Value].

Ungroup udjævner resultatet, eftersom indlejrede ForAll-funktioner resulterer i en indlejret resultattabel.

Tabeller med enkelt kolonne

Hvis du vil udføre handlinger på en enkelt kolonne i en tabel, skal du bruge funktionen ShowColumns som i dette eksempel:

ShowColumns( Products, "Product" )

Denne formel opretter denne tabel med én kolonne:

Tabel med enkelt kolonne.

Du kan få et kortere alternativ ved at angive Table.Column, der udtrækker tabellen med en enkelt kolonne kun med Column fra Table. Denne formel giver f.eks. det samme resultat som ved brug af ShowColumns.

Products.Product

Indbyggede poster

Du udtrykker poster ved hjælp af krøllede klammeparenteser, som indeholder navngivne feltværdier. Du kan for eksempel udtrykke den første post i tabellen i begyndelsen af dette emne med følgende formel:

{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 }

Du kan også integrere formler i andre formler, som dette eksempel viser:

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

Du kan indlejre poster ved at indlejre krøllede klammeparenteser, som dette eksempel viser:

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

Sæt hvert kolonnenavn, der indeholder et specialtegn, f.eks. et mellemrum eller et kolon, i enkelte anførselstegn. Hvis du vil bruge et enkelt anførselstegn inden for et kolonnenavn, skal du fordoble det.

Bemærk, at værdien i kolonnen Price (Pris) ikke omfatter et valutasymbol, f.eks. et dollartegn. Denne formatering anvendes, når værdien vises.

Indbyggede tabeller

Du kan oprette en tabel ved hjælp funktionen Table og et sæt poster. Du kan udtrykke tabellen i begyndelsen af dette emne ved hjælp af følgende formel:

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å indlejre tabeller:

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

Indbyggede værditabeller

Du kan oprette tabeller med én kolonne ved at angive værdier i kantede parenteser. Den resulterende tabel har en enkelt kolonne med navnet Value.

F.eks. er [ 1, 2, 3, 4 ] ækvivalent med Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } ) og returnerer denne tabel:

Indbygget tabel.