Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Kommentar
Microsoft Power Fx är det nya namnet på formelspråket för arbetsyteappar. Dessa artiklar pågår när Microsoft extraherar språket från arbetsyteappar, integrerar det med andra Microsoft Power Platform produkter och gör det tillgängligt som open-source. Börja med Microsoft Power Fx översikten för en introduktion till språket.
Microsoft Power Fx-tabeller organiserar data i poster, fält och kolumner från källor som Microsoft Excel, SharePoint och SQL Server. Lär dig dessa strukturer för att skriva formler som får åtkomst till, utformar och manipulerar tabelldata effektivt.
- En post innehåller en eller flera typer av information om en person, en plats eller en sak. En post kan t.ex. innehålla en kunds namn, e-postadress och telefonnummer. Andra verktyg kan referera till en post som en ”rad” eller ett ”objekt”.
- En tabell innehåller en eller flera poster som innehåller samma informationskategorier. En tabell kan t.ex. innehålla namn, e-postadress och telefonnummer för 50 kunder.
Du kan skapa flera olika formler som använder ett tabellnamn som argument, precis som en formel i Excel kan använda en eller flera cellreferenser som argument. Vissa formler i Power Fx returnerar en tabell som visar de övriga argument som du anger. Du kan t.ex. skapa en formel:
- för att uppdatera en post i en tabell genom att ange tabellen som en av flera argument för funktionen Patch
- för att lägga till, ta bort och byta namn på kolumner i en tabell genom att ange den tabellen som argument för funktionen AddColumns, DropColumns eller RenameColumns. Ingen av dessa funktioner påverkar den ursprungliga tabellen. I stället returnerar funktionen en annan tabell utifrån de argument som du anger.
Tabellelement
Poster
Varje post innehåller minst en informationskategori för en person, plats eller sak. Exemplet tidigare visar en post för varje produkt (choklad, bröd och vatten) och en kolumn för varje informationskategori (Pris, Kvantitet till hands och Kvantitet på beställning).
I en formel kan du referera till en post i sig, utanför tabellens kontext, genom att använda klammerparenteser. Exempel: posten { Name: ”Strawberries”, Price: 7.99 } är inte kopplad till någon tabell. Observera att fältnamn som namn och pris i det här exemplet är inte angivna inom dubbla citattecken.
Fält
Ett fält är en självständig informationsdel del i en post. Du kan visualisera den här typen av fält som ett värde i en viss posts kolumn.
Precis som när det gäller kontroller måste du referera till en posts fält med hjälp av .operator i posten. Exempel: First(Products).Name returnerar fältet Name för den första posten i tabellen Products.
Ett fält kan innehålla en annan post eller tabell, så som visas i exemplet med funktionen GroupBy. Du kan kapsla så många post- och tabellnivåer du vill.
Kolumner
En kolumn refererar till samma fält för en eller flera poster i en tabell. I föregående exempel har varje produkt ett prisfält och det priset finns i samma kolumn för alla produkter. Tabellen ovan har fyra kolumner som visas vågrätt överst:
- Namn
- Pris
- ”Lagersaldo”
- Beställd kvantitet
Kolumnens namn indikerar innehållet i kolumnens fält.
Alla värden i en kolumn har samma datatyp. I föregående exempel innehåller kolumnen "Antal i lager" alltid ett tal och får inte innehålla en sträng, till exempel "12 enheter", för en enskild post. Värdet i ett fält kan även vara tomt.
Du kan ha kallat kolumner för "fält" i andra verktyg.
Tabell
En tabell består av en eller flera poster, som var och en innehåller flera fält som har enhetliga namn för alla poster.
En tabell som lagras i en datakälla eller en samling har ett namn som du använder när du refererar till tabellen och vidarebefordrar detta till funktioner som använder tabeller som argument. Tabeller kan också vara resultatet av en funktion eller en formel.
Som du ser av följande exempel kan du uttrycka en tabell i en formel genom att använda funktionen Table med en uppsättning poster som du anger mellan klammerparenteser:
Table( { Value: "Strawberry" }, { Value: "Vanilla" } )
Du kan även definiera en enkolumnstabell med hakparenteser. Ett annat sätt att skriva detta på är:
[ "Strawberry", "Vanilla" ]
Tabellformler
I Excel och Power Fx använder kan du använda formler för att ändra tal och textsträngar på liknande sätt:
- Skriv ett värde i Excel, t.ex. 42, i cell A1, och skriv sedan en formel som A1 + 2 i en annan cell, så att värdet 44 visas.
- I Power Apps, ange egenskapen Default för Slider1 till 42 och ange egenskapen Text för en etikett till Slider1.Value + 2 så visas värdet 44.
I båda fallen ändras det beräknade värdet automatiskt om du ändrar argumentens värden (t.ex. talet i cell A1 eller värdet för Slider1).
På samma sätt kan du använda formler för att få åtkomst till och hantera data i tabeller och poster. Du kan använda namn på tabeller som argument i vissa formler, t.ex. Min(Catalog, Price) om du vill visa det lägsta värdet i kolumnen Price i tabellen Catalog. Andra formler tillhandahåller hela tabeller som returvärden, t.ex. RenameColumns(Catalog, ”Price”, ”Cost”), som returnerar alla poster från tabellen Catalog, men som ändrar namnet på kolumnen Price till Cost.
Precis som när det gäller tal så räknas formler som inbegriper tabeller automatiskt om när den underliggande tabellen eller de underliggande posterna ändras. Om kostnaden för en produkt i tabellen Catalog sjunker under tidigare minimivärde, så ändras returvärdet för formeln Min automatiskt så att det matchar kostnaden.
Tabellfunktioner och kontrollegenskaper
Tänk på funktionen Lower. Om variabeln welcome innehåller text strängen ”Hello, World”, returnerar formeln Lower( welcome ) och ”hello, world”. Den här funktionen ändrar inte värdet i variabeln. Lower är en ren funktion eftersom den endast bearbetar indata och genererar utdata. Det är allt; den har inga sidoeffekter. Alla funktioner i Excel och de flesta funktioner i Power Fx är rena funktioner som gör att arbetsboken eller programmet automatiskt kan beräknas om.
Power Fx tillhandahåller en uppsättning funktioner som fungerar på tabeller på samma sätt. Med de här funktionerna kan tabeller vara ingångs- och filter, sortera, transformera, minska och sammanfatta hela datatabeller. I själva verket kan Lower och många andra funktioner som vanligtvis ta ett enda värde kan också ta en tabell med en kolumn som ingång.
Många funktioner har en tabell med en kolumn som indata. Om en hel tabell endast innehåller en kolumn kan du ange den efter namn. Om en tabell har flera kolumner kan du ange en av dessa kolumner genom att använda Table.Column-syntax. Till exempel returnerar Products.Name tabellen med en kolumn endast namn-värden från tabellen produkter.
Du kan helt omforma en tabell hur du vill genom att använda funktionen AddColumns, RenameColumns, ShowColumns eller DropColumns. De här funktionerna ändrar endast utdata och inte deras källor.
Beteendeformler
Andra funktioner har utformats speciellt för att ändra data och ha sidoeffekter. Eftersom de här funktionerna inte är rena måste du skapa dem försiktigt och de kan inte delta i omberäkning av värden automatiskt i appen. Du kan använda dessa funktioner i beteendeformler.
Registrera omfång
Vissa funktioner fungerar genom att utvärdera en formel för alla poster i en tabell, en post i taget. Formelns resultat används på olika sätt:
- AddColumns – Formeln ger värdet för den nya kolumnen.
- Average, Max, Min, Sum, StdevP, VarP – Formeln tillhandahåller de värden som ska sättas samman.
- Filter, Lookup – Formeln anger om posten ska tas med i resultatet.
- Concat – Formeln avgör vilka strängar som ska sammanfogas.
- Distinct – Formeln returnerar ett värde som används för att identifiera dubblettposter.
- ForAll – Formeln kan returnera vilket värde som helst, eventuellt med en biverkning.
- Sort – Formeln tillhandahåller det värde som posterna ska sorteras efter.
- With – Formeln kan returnera vilket värde som helst, eventuellt med en biverkning.
I de här formlerna kan du referera till fälten i den post som bearbetas. Var och en av de här funktionerna skapar ett ”postområde” där formeln utvärderas och där postens fält är tillgängliga som identifierare på toppnivå. Du kan också referera till kontrollegenskaper och andra värden från hela ditt program.
Ta till exempel en tabell över Produkter som är placerade i en global:
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å här avgör du om någon av dessa produkter har mer begärt än vad som är tillgängligt:
Filter( Products, 'Quantity Requested' > 'Quantity Available' )
Det första argumentet som ska filtreras är tabellen med de poster som ska bearbetas, och det andra argumentet är en formel. Med Filter skapar du ett postområde för att kunna utvärdera den här formeln i vilken fälten för respektive post är tillgängliga. I det här fallet rör det sig om Product, Quantity Requested och Quantity Available. Resultatet av jämförelsen avgör om alla poster ska tas med i funktionens resultat:
Om du lägger till det här exemplet kan du beräkna hur mycket av varje produkt som ska beställas:
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
)
Här lägger du till en beräknad kolumn i resultatet. AddColumns har ett eget postomfång som används för att beräkna skillnaden mellan vad som begärs och vad som är tillgängligt.
Slutligen kan du minska resultattabellen till bara de kolumner som du vill ha:
ShowColumns(
AddColumns(
Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
"Quantity To Order", 'Quantity Requested' - 'Quantity Available'
),
"Product",
"Quantity To Order"
)
Observera att du i föregående exempel använder dubbla citattecken (") på vissa platser och enkla citattecken (') på andra platser. Enkla citattecken krävs när du refererar till värdet för ett objekt, till exempel ett fält eller en tabell, om namnet på objektet innehåller ett blanksteg. Använd dubbla citattecken när du inte refererar till värdet för ett objekt utan i stället pratar om det, särskilt i situationer där objektet ännu inte finns, som när det gäller AddColumns.
Disambiguering
Fältnamn som du lägger till med postomfånget åsidosätter samma namn från någon annanstans i appen. När den här åsidosättningen sker kan du fortfarande komma åt värden utanför postomfånget med hjälp av disambiguationsoperatorn:@
- Om du vill komma åt värden från kapslade postomfattningar använder du operatorn @ med namnet på den tabell som du använder enligt det här mönstret:
Table[@FieldName] - Om du vill komma åt globala värden, som datakällor, samlingar och kontextvariabler, använder du mönstret [@ObjectName] (utan tabellbeteckning).
Om tabellen som du arbetar med är ett uttryck, till exempel Filter(Table, ... )kan du inte använda disambiguationsoperatorn. Endast det innersta postomfånget kan komma åt fält från det här tabelluttrycket genom att inte använda disambiguationsoperatorn.
Anta till exempel att du har en samling X:
Du kan skapa den här samlingen med ClearCollect( X, [1, 2] ).
Och så har vi samlingen Y:
Du kan skapa den här samlingen med ClearCollect( Y, ["A", "B"] ).
Dessutom kan definiera en kontextvariabel med namnet Value med följande formel: UpdateContext( {Value: ”!”} )
Låt oss lägga ihop dem. I det här sammanhanget använder vi då följande formel:
Ungroup(
ForAll( X,
ForAll( Y,
Y[@Value] & Text( X[@Value] ) & [@Value]
)
),
"Value"
)
ger den här tabellen:
Vad är det som händer här? Den yttersta ForAll-funktionen definierar ett postomfång för X, så att du kan komma åt fältet Värde för varje post när den bearbetas. Du kan komma åt det genom att helt enkelt använda ordet Värde eller med hjälp av X[@Value].
Den innersta ForAll-funktionen definierar ett annat postomfång för Y. Eftersom den här tabellen också har ett värdefält definierat refererar användning av Värde här till fältet i Y:s post och inte längre det från X. För att få åtkomst till X:s värdefält måste du använda den längre versionen med disambiguationsoperatorn.
Eftersom Y är det innersta postomfånget kräver åtkomst till fält i den här tabellen inte tvetydighet, så du kan använda den här formeln med samma resultat:
Ungroup(
ForAll( X,
ForAll( Y,
Value & Text( X[@Value] ) & [@Value]
)
),
"Value"
)
Alla ForAll-postområdena åsidosätter det globala området. Den värdekontextvariabel som du definierade är inte tillgänglig med namn utan disambiguationsoperatorn. För åtkomst till detta värde, använd [@Value].
Ungroup plattar ut resultatet, eftersom kapslade ForAll-funktioner resulterar i en kapslad resultattabell.
Tabeller med en kolumn
Om du vill använda en enskild kolumn från en tabell använder du ShowColumns-funktionen på samma sätt som i det här exemplet:
ShowColumns( Products, "Product" )
Med den här formeln skapas tabellen med en kolumn:
Om du vill ha ett kortare alternativ anger Table.Column, som extraherar tabellen med en kolumn i endast Column från Table. Med den här formeln skapas till exempel exakt samma resultat som när du använder ShowColumns.
Products.Product
Infogade poster
Du uttrycker poster med hjälp av klammerparenteser som innehåller namngivna fältvärden. Du kan t.ex. uttrycka den första posten i tabellen i början av det här avsnittet genom att använda följande formel:
{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 }
Du kan också bädda in formler i andra formler, så som visas i detta exempel:
{ Name: First(Products).Name, Price: First(Products).Price * 1.095 }
Du kan kapsla poster genom att kapsla klammerparenteser, så som visas i detta exempel:
{ 'Quantity': { 'OnHand': ThisItem.QuantOnHand, 'OnOrder': ThisItem.QuantOnOrder } }
Omsluter varje kolumnnamn som innehåller specialtecken, t.ex. ett blanksteg eller ett kolon med enkla citattecken. Om du vill använda ett enkelt citattecken i ett kolumnnamn, så dubblera det.
Observera att värdet i kolumnen Price inte innehåller någon valutasymbol, t.ex. dollartecken. Den formateringen används när värdet visas.
Infogade tabeller
Du kan skapa en tabell med hjälp av Table-funktionen och en uppsättning poster. Du kan uttrycka tabellen i början av det här avsnittet genom att använda följande 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 även kapsla tabeller:
Table(
{ Name: "Chocolate",
'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 },
{ Quarter: "Q2", OnHand: 18, OnOrder: 0 } )
}
)
Infogade värdetabeller
Du kan skapa enkolumnstabeller genom att ange värden inom hakparentes. Den resulterande tabellen har en kolumn med namnet Value.
Till exempel [ 1, 2, 3, 4 ] är lika med Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } ) och returnerar följande tabell: