Microsoft Power Fx-tabeller

Bemærk

Microsoft Power Fx er det nye navn til formelsproget for lærredapps. Disse artikler er i gang, da Microsoft udtrækker sproget fra lærredsapps, integrerer det med andre Microsoft Power Platform produkter og gør det tilgængeligt som åben kildekode. Start med Microsoft Power Fx-oversigten for at få en introduktion til sproget.

Microsoft Power Fx-tabeller organiserer data i poster, felter og kolonner fra kilder som f.eks. Microsoft Excel, SharePoint og SQL Server. Få mere at vide om disse strukturer, så du kan skrive formler, der får adgang til, former og manipulerer tabeldata effektivt.

  • 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.

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 Fx 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.

Items i en tabel

Skærmbillede af poster, felter og kolonner, der udgør en tabel.

Poster

Hver post indeholder mindst én kategori af oplysninger om en person, et sted eller en ting. I eksemplet tidligere vises en post for hvert produkt (Chokolade, Brød og Vand) og en kolonne for hver kategori med oplysninger (Pris, Antal på lager og Antal i ordre).

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 på 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 det foregående eksempel har hvert produkt et prisfelt, og prisen er i den samme kolonne for alle produkter. Den foregående tabel indeholder fire kolonner, der vises vandret over toppen:

  • 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 det foregående eksempel indeholder kolonnen "Quantity on Hand" altid et tal og må ikke indeholde en streng såsom "12 enheder" for én postering. Værdien i et felt kan også være tom.

Du har måske refereret til kolonner som "felter" i andre værktøjer.

Tabel

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 Fx 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.

Tabelfunktioner og egenskaber for kontrolelementer

Overvej funktionen Lower. Hvis variablen welcome indeholder tekststrengen "Hello, World", vil formlen Lower( welcome ) returnere "Hello, World". Denne funktion ændrer ikke værdien i variablen. 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 Fx er rene funktioner, så projektmappen eller appen kan genberegnes automatisk.

Power Fx 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.

Mange funktioner bruger en tabel med en enkelt 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.

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.

Postområde

Nogle funktioner fungerer ved at evaluere en formel på tværs af alle posterne i en tabel, én post ad gangen. Formlens resultat bruges på forskellige måder:

  • AddColumns – Formlen leverer værdien for den nye kolonne.
  • 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.

Du kan f.eks. bruge en tabel over produkter, der er placeret i en global variabel:

Skærmbillede af tabellen Products med anmodede og tilgængelige mængder.

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 }
    )
)

Sådan afgør du, om der er flere ønskede produkter, end der er tilgængelige:

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:

Skærmbillede af en tabel med filtrerede produkter, hvor det anmodede antal overstiger det tilgængelige antal.

Hvis du føjer til dette eksempel, kan du beregne, hvor meget af hvert produkt der skal bestilles:

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

Her føjer du en beregnet kolonne til resultatet. AddColumns har sit eget postområde, som den bruger til at beregne forskellen mellem det, der anmodes om, og det, der er tilgængeligt.

Skærmbillede af tabellen Products efter tilføjelse af den beregnede kolonne Quantity To Order.

Endelig kan du reducere resultattabellen til de kolonner, du vil have:

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

Skærmbillede af resultattabellen med kolonnerne Produkt og Antal til ordre.

Bemærk, at du i de foregående eksempler bruger dobbelte anførselstegn (") nogle steder og enkelte anførselstegn (') andre steder. Der kræves enkelte anførselstegn, når der refereres til værdien af et objekt, f.eks. et felt eller en tabel, hvis navnet på objektet indeholder et mellemrum. Brug dobbelte anførselstegn, når du ikke refererer til værdien af et objekt, men i stedet taler om det, især i situationer, hvor objektet endnu ikke findes, som det er tilfældet med AddColumns.

Fjernelse af flertydige udtryk

De feltnavne, du tilføjer med postområdet, tilsidesætter de samme navne fra et andet sted i appen. Når denne tilsidesættelse sker, kan du stadig få adgang til værdier uden for postområdet ved hjælp af operatoren til@ fjernelse af flertydige udtryk:

  • Hvis du vil have adgang til værdier fra indlejrede postområder, skal du bruge operatoren @ med navnet på den tabel, du arbejder på, ved at følge dette mønster:
    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, du arbejder på, er et udtryk, f.eks . Filter(Table, ... ), kan du ikke bruge operatoren til fjernelse af flertydige udtryk. Kun det inderste postområde kan få adgang til felter fra dette tabeludtryk ved ikke at bruge operatoren til fjernelse af flertydige udtryk.

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

Skærmbillede af X-samlingen, der indeholder værdierne 1 og 2.

Du kan oprette denne samling ved hjælp af ClearCollect( X, [1, 2] ).

Og en anden samling Y:

Skærmbillede af Y-samlingen, der indeholder værdierne A og B.

Du kan oprette denne samling ved hjælp af 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:

Skærmbillede af det indlejrede ForAll-resultat, der kombinerer X-, Y- og globale værdiposter.

Hvad foregår der her? Den yderste ForAll-funktion definerer et postområde for X, så du kan få adgang til feltet Værdi for hver post, når den behandles. Du kan få adgang til det ved blot at bruge ordet Værdi eller ved at bruge X[@Value].

Den inderste ForAll-funktion definerer et andet postområde for Y. Da der også er defineret et værdifelt i denne tabel, henviser brug af Value her til feltet i Y's post og ikke længere til feltet fra X. Hvis du vil have adgang til X'sværdifelt , skal du bruge den længere version med operatoren til fjernelse af flertydige udtryk.

Da Y er det inderste postområde, kræver adgang til felter i denne tabel ikke fjernelse af flertydige udtryk, så du kan bruge 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 , du har defineret, 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:

Skærmbillede af en tabel med en enkelt kolonne, der indeholder produktværdier.

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:

Skærmbillede af en indbygget værditabel, der indeholder tallene 1 til 4.