Microsoft Power Fx översikt
Power Fx är det lågkodsspråk som ska användas i hela Microsoft Power Platform. Det är ett allmänt, kraftfullt, deklarativt och funktionellt programmeringsspråk.
Power Fx uttrycks i användarvänlig text. Det är ett lågkodsspråk som beslutsfattare kan arbeta med direkt i ett Excel-liknande formelfält eller Visual Studio Code-textfönster. Den "låga" lågkoden beror på att språket är kortfattat och enkelt, vilket gör vanliga programmeringsuppgifter enkla för både beslutsfattare och utvecklare. Programmet möjliggör en fullständig utveckling av "utan kod" för de som aldrig tidigare har programmerat in "proffskod" för det erfarna proffset, utan utbildning eller omskrivning mellan olika program, vilket gör att olika team kan samarbeta och spara tid och utgifter.
Kommentar
- Microsoft Power Fx är det nya namnet på formelspråket för program i Power Apps. Den här översikten och tillhörande artiklar är ett arbete som pågår när vi extraherar språket från program, integrerar det med andra Microsoft Power Platform produkter och gör det tillgängligt som öppen källkod. För att lära dig mer om och uppleva språket idag, börja med Komma igång med formler i arbetsyteappen i Power Apps dokumentation och registrera dig för en gratis Power Apps utvärderingsversion.
- I den här artikeln hänvisar vi till beslutsfattare när vi beskriver en funktion som kan användas i slutet av programmeringen. Vi hänvisar till användaren som utvecklare om funktionen är mer avancerad och troligen inte omfattas av en typisk Excel-användare.
Power Fx binder samman objekt med deklarativa kalkylblads liknande formeln. Tänk till exempel på egenskapen Synlig för en UI-kontroll som en cell i ett Excel-kalkylblad, med en associerad formel som beräknar värdet utifrån egenskaperna för andra kontroller. Formellogiken beräknas om automatiskt, på samma sätt som i ett kalkylblad, vilket påverkar kontrollens synlighet.
Erbjuder även Power Fx nödvändig logik när det behövs. I kalkylblad finns vanligtvis inte knappar som kan skicka ändringar till en databas, men det gör ofta program. Samma uttrycksspråk används för både deklarativ och nödvändig logik.
Power Fx kommer att göras tillgängliga som programvara med öppen källkod. Den är för närvarande integrerad i program och vi håller på att extrahera den från för Power Apps användning i andra Microsoft Power Platform produkter och som öppen källkod. Mer information: Microsoft Power Fx på GitHub
Den här artikeln innehåller en översikt över språket och dess designprinciper. Mer information finns i Power Fx, se följande artiklar:
- Datatyper
- Operatorer och identifierare
- Tabeller
- Variabler
- Imperativ logik
- Globalt stöd
- Uttryck grammatik
- Grammatik för YAML-formel
Tänk kalkylblad
Tänk om du kunde bygga ett program så enkelt som du bygger ett kalkylblad i Excel?
Och om du skulle kunna dra nytta av den befintliga kalkylbladskunskapen?
Det här var de frågor som skapade Power Apps och Power Fx. Hundratals miljoner personer skapar kalkylblad med Excel varje dag. Nu ska vi skapa program på ett enkelt sätt och använder Excel-begrepp som de redan känner till. Genom att bryta ut Power Fx från Power Apps kommer vi att få svar på de här frågorna om hur du skapar automatisering, en virtuell handläggare eller andra domäner.
Alla programmeringsspråk, inklusive Power Fx, har uttrycket ett sätt att göra beräkningar över tal, strängar eller andra datatyper. Till exempel uttrycker mass * acceleration
på de flesta språk multiplikation av mass
och acceleration
. Resultatet av ett uttryck kan placeras i en variabel, användas som argument till en procedur eller kapslas i ett större uttryck.
Power Fx tar detta ett steg längre. Ett uttryck i sig själv säger inget om vad det beräknas på. Det är upp till tillverkaren att placera den i en variabel eller skicka den vidare till en funktion. I Power Fx, i stället för att bara skriva ett uttryck som inte har någon specifik betydelse, skriver du en formel som binds uttryck till en identifierare. Du skriver force = mass * acceleration
som en formel för beräkning av force
. Som mass
eller acceleration
ändringar force
, uppdateras automatiskt till ett nytt värde. Det uttryck som beskrivs en beräkning, en formel som beräkna ett namn och använde det som ett recept. Det är därför vi kallar Power Fx ett formelspråk.
Till exempel den här formeln från Stack Overflow söker efter en sträng i omvänd ordning. I Excel ser det ut som följande bild.
Bild på ett formelfält i Excel med formeln: =RIGHT(A1,LEN(A1)- FIND("|", SUBSTITUTE(A1," ","|", LEN(A1)-LEN(SUBSTITUTE(A1," ","")))) Cell A1 innehåller texten "Hej världen! Det är jättekul att träffa dig!" Cell A2 innehåller texten "du".
Power Fx fungerar med samma formel och cellreferenserna ersätts med kontrollegenskapsreferenser:
Bild på ett Power Fx formelfält i Power Apps. Formeln är =RIGHT(Input.Text,Len(Input.Text)- FIND("|", SUBSTITUTE(Input.Text," ","|", Len(Input.Text)-Len(Substitute(Input.Text," ","")))) I indatarutan under formeln texten "Hej världen! Det är jättekul att träffa dig!" visas, bokstav för bokstav. Samtidigt visas bokstäverna i sista ordet i rutan Etikett. När den fullständiga texten visas i indatarutan står det "du" visas i rutan Etikett.
När kontrollvärdet Input
ändras beräknar kontrollen Label
automatiskt formeln och visar det nya värdet. Det finns inga OnChange
händelsehanterare här på samma sätt som på andra språk.
Ett annat exempel som använder en formel för Fill
-färgen på skärmen. När reglagen som styr Röd, Grön och Blå ändras kommer bakgrundsfärgen att ändras automatiskt när den beräknas om.
Det finns inga OnChange
händelser för reglagekontrollerna på samma sätt som för andra språk. Det finns inget sätt att uttryckligen ange Fill
egenskapsvärdet alls. Om färgen inte fungerar som förväntat måste du titta på den här formeln för att förstå varför den inte fungerar. Du behöver inte söka i programmet för att hitta ett kodstycke som anger egenskapen vid en oväntad tidpunkt. det finns inget tidselement. De korrekta formelvärdena bevaras alltid.
Eftersom reglagen har färg ändras etiketterna för Röd, Grön och Blå till Vitt. Detta görs med hjälp av en enkel formel på Color
egenskapen för varje etikettkontroll.
Vad som är bra med detta är att det är isolerat från vad som händer för Fill
färgen: det är två helt olika beräkningar. I stället för stora enkla procedurer Power Fx består logik vanligtvis av många mindre formeln som är oberoende. Det gör dem lättare att förstå och aktivera förbättringar utan att det finns någon befintlig logik.
Power Fx är ett deklarativt språk, precis som Excel är. Skaparen definierar vilket beteende de vill ha, men det är upp till systemet att avgöra och optimera hur och när de ska utföra det. För att göra detta praktiskt utförs det mesta av funktioner utan bi effekter, Power Fx vilket gör det till ett funktionellt språk (igen, precis som Excel är).
Publiceras alltid direkt
En viktig aspekt av kalkylblad är att de alltid är i gång och att ändringar återspeglas direkt. Det finns inget kompilerat eller körningsläge i ett kalkylblad. När en formel ändras eller ett värde anges omberäknas kalkylbladet omedelbart så att ändringarna återspeglas. Alla fel som identifieras visas direkt och stör inte resten av kalkylbladet.
Samma sak implementeras med Power Fx. En inkrementell kompilator används för att kontinuerligt hålla programmet synkroniserat med de data det körs på. Ändringar överförs automatiskt genom programmets diagram, vilket påverkar resultaten av beroendeberäkningar, vilket kan öka egenskaperna för kontroller som färg eller position. Den begränsande kompilatorn ger också en omfattande redigeringsupplevelse med IntelliSense, förslag, automatisk komplettering och typkontroll.
I tabellen nedan visas ordernumret i en etikettkontroll som är beroende av reglagekontrollen, även om det finns två fel på etiketterna nedanför den. programmet är i stort sett interaktiv. Det första försök att åtgärda formeln genom att ange .InvalidName
resulterar i en omedelbar röd linje och ett fel som visas, som det ska, men appen fortsätter att köras.
När .Employee
anges innebär det att rutan Data
för att lägga till i tabellen Anställda hämtas metadata för denna tabell och förslag till kolumner erbjuds omedelbart. Vi förser oss bara med en relation mellan olika tabeller och systemet har gjort de nödvändiga anpassningarna av programmets referenser. Samma sak händer när du lägger till en .Customer
.
Efter varje ändring fortsätter reglaget med sitt sista värde och alla variabler behåller sina värden. Genom hela ordernumret har det även i fortsättningen visas på den övre etiketten som det ska. programmet har funnits i realtid och bearbetar riktiga data hela tiden. Vi kan spara den, gå härifrån och andra kan öppna och använda den precis som Excel. Det finns inget versionssteg, ingen kompilerad, det finns bara ett publiceringssteg för att avgöra vilken version av programmet som är klar för användare.
Lite kod
Power Fx beskriver affärslogiken med försynta, men ändå kraftfulla, formeln. Den mesta logiken kan reduceras till en enda rad med mycket expressivitet och kontroll för mer komplexa behov. Målet är att hålla antalet koncept som en tillverkare behöver förstå så lite som möjligt, vilket inte mer än en Excel-användare redan skulle veta.
För att till exempel slå upp förnamnet på en anställd för en beställning, skriver du Power Fx som du ser i följande artikel. Utöver Excel-koncept är det enda tillagda konceptet som används här punkten "." notering för borrning i en datastruktur, i detta fall .Employee.'First Name'
. I artikeln visas mappningen mellan delarna i Power Fx formeln och begreppen som måste explicit kodas i motsvarande JavaScript.
Vi ska titta närmare på Power Fx allt som har hänt för oss och det som måste optimeras eftersom formeln var deklarativ:
Asynkron: Alla dataåtgärder i Power Fx är asynkrona. Tillverkaren behöver inte ange detta och tillverkaren behöver inte heller synkronisera åtgärder efter att samtalet är över. Skaparen behöver inte känna till det här konceptet alls, de behöver inte veta vad ett löfte eller lambda-funktion är.
Lokal och fjärransluten: Power Fx använder samma syntax och funktioner för data som är lokala i minnet och fjärransluter en databas eller tjänst. Användaren behöver inte tänka på den här skillnaden. Power Fx delegerar automatiskt vad det går till servern, för att bearbeta filter och sortera där mer effektivt.
Relationsdata: Order och Kunder är två olika tabeller med en många-till-en-relation. OData-frågan kräver en "$expand" med kunskaper i den externa nyckeln, ungefär som en anslutning i SQL. Formeln innehåller inget av detta, databasnycklar är ett annat koncept som tillverkaren inte behöver känna till. Tillverkaren kan använda enkel punktmarkering för att komma åt hela diagrammet med relationer från en post.
Projektion: När du skriver en fråga skriver
select * from table
många utvecklare, vilket tar tillbaka alla kolumner med data. Power Fx analyseras alla kolumner som används genom hela programmet, även över formelberoenden. Projektion optimeras automatiskt och återigen behöver en tillverkare inte veta vad "projektion" betyder.Hämta bara det som behövs: I det
LookUp
här exemplet innebär funktionen att endast en post ska hämtas och att det är allt som returneras. Om fler poster begärs med hjälp av denFilter
-funktionsom tusentals poster kan kvalificera endast en enskild sida med data returneras åt gången, på order av 100 poster per sida. Användaren måste gå igenom ett galleri eller en datatabell för att se fler data och de hämtas automatiskt. Skaparen kan hantera stora uppsättningar data utan att behöva tänka på att begränsa databegäran till hanterbara delar.Körs bara när detbehövs
Text
: Vi har definierat en formel för egenskapen för etikettkontrollen. När den valda variabeln ändras beräknasLookUp
om automatiskt och etiketten uppdateras. Tillverkaren behöver inte skriva en OnChange-hanterare för urval och måste inte komma ihåg att etiketten är beroende av den. Detta är deklarativa programmering som nämnts tidigare, har tillverkaren angett vad de vill ha i etiketten, inte hur eller när den ska hämtas. Om etiketten inte visas på grund av att den visas på en skärm eller om dessVisible
-egenskap är falskt kan vi skjuta upp beräkningen tills etiketten visas och effektivt ta bort den om det sällan händer.Översättning av Excel-syntax: Excel används av många användare, varav de flesta vet att et-tecknet (&) används för sammanfogning av strängar. JavaScript använder ett plustecken (+) och i andra språk används en prick (.).
Visningsnamn och lokalisering:
First Name
används i formeln Power Fx medannwind_firstname
den används i JavaScript-motsvarigheten. I Microsoft Dataverse och SharePoint, det finns ett visningsnamn för kolumner och tabeller förutom ett unikt logiskt namn. Visningsnamnen är ofta mycket mer användarvänliga, som i det här fallet, men de har en annan viktig kvalitet på så sätt att de kan lokaliseras. Om du har ett flerspråkigt team kan varje teammedlem se tabell- och fältnamn på sitt eget språk. I alla användningsfall Power Fx kontrollerar du att rätt logiska namn skickas till databasen automatiskt.
Ingen kod
Du behöver inte läsa och skriva för att Power Fx börja uttrycka logik. Det finns många anpassningar och logik som kan uttryckas genom enkla anpassningar och användargränssnittsbyggare. Dessa kodfria verktyg har byggts för att läsa och skriva Power Fx för att säkerställa att det finns gott om utrymme för någon att ta det vidare, samtidigt som man erkänner att verktyg utan kod aldrig kommer att erbjuda hela språkets uttrycksfullhet. Även när den används med kodfria byggare är formelfältet framme och mitt i Power Apps för att utbilda tillverkaren om vad som görs för deras räkning så att de kan börja lära sig Power Fx.
Låt oss ta en titt på några exempel. I Power Apps ger egenskapspanelen ger "ingen kod"-knappar och rattar för kontrollernas egenskaper. De flesta egenskapsvärden är i praktiken statiska. Du kan använda färgverktyget och ändra bakgrundsfärg på Gallery
. Observera att formelfältet reflekterar ändringen och uppdaterar formeln till ett annat RGBA
samtal. Du kan när som helst gå till formelfältet och gå ett steg längre i det här exemplet genom att använda ColorFade
för att justera färgen. Färgegenskapen visas fortfarande i egenskapspanelen, men en fx-ikon visas bredvid markören och du dirigeras till formelfältet. Detta fungerar helt på två sätt: om du tar bort ColorFade
samtalet returneras färgen till något som egenskapspanelen kan förstå och du kan använda den igen för att ange en färg.
Här är ett mer invecklat exempel. I galleriet visas en lista över anställda från Dataverse. Dataverse innehåller vyer över tabelldata. Vi kan välja en av dessa vyer och formeln ändras så att funktionen Filter
används med det här vynamnet. De två nedrullningsbara menyerna kan användas för att ringa upp i rätt tabell och vy utan att formelfältet behöver användas. Låt oss säga att du vill gå längre och lägga till en sortering. Det kan vi göra i formelfältet och egenskapspanelen visar en ikon igen och dirigerar ändringar till formelfältet. Och om vi förenklar formeln till något som egenskapspanelen kan läsa och skriva kan den användas igen.
Det här är några enkla exempel. Vi tror att Power Fx det är ett bra språk att beskriva interaktioner utan kod. Det är kortfattat, kraftfullt och lätt att analysera och ger det utrymme som ofta behövs med "inga klippor" upp till lågkod.
Proffskod
Lågkodsutvecklare skapar ibland saker som kräver hjälp av en expert eller som tas över av en professionell utvecklare för att underhålla och förbättra. Tekniker uppskattar också att utveckling med låg kod kan vara enklare, snabbare och mindre användbart än att bygga ett professionellt verktyg. Alla situationer kräver inte den fullständiga kraften hos Visual Studio.
Professionella användare vill använda professionella verktyg för att vara mest produktiva. Power Fx-formeln kan lagras i YAML source files, som är enkla att redigera med kod, Visual Studio Code, Visual Studio, eller någon annan textredigerare Power Fx och kan användas för källkontroll med GitHub, Azure DevOps, eller något annat kontrollsystem för källkod.
Power Fx stöder formelbaserade komponenter för delning och användning. Vi förser oss med stöd för parametrar för komponentegenskaper som gör det möjligt att skapa användardefinierade funktioner med fler förbättringar på vägen.
Är också Power Fx bra på att sammanfoga komponenter och tjänster som har skapats av professionella. De färdiginbokade anslutningarna ger åtkomst till hundratals datakällor och webbtjänster, Power Fx anpassade anslutningar gör det möjligt att tala med alla REST-webbtjänster och Power Fx kodkomponenter som gör det möjligt att interagera med helt egna JavaScript på skärmen och sidan.
Designprinciper
Enkel
Power Fx är utformat för att rikta publik, vars medlemmar inte har utbildats till utvecklare. När som helst använder vi den kunskap som denna målgrupp redan kan ta del av eller ta upp snabbt. Antalet koncept som krävs för att lyckas behålls som ett minimum.
Att vara enkel är också bra för utvecklare. För utvecklaren publik att det är ett lågkodsspråk som minskar den tid som krävs för att bygga en lösning.
Excel-konsekvens
Microsoft Power Fx-språk lånar mycket från Excel-formelspråket. Vi vill dra nytta av Excel-kunskaper och erfarenheter från de många beslutsfattare som också använder Excel. Typer, operatorer och funktionstyper ligger så nära Excel som möjligt.
Om Excel inte har något svar tittar vi på SQL bredvid. Efter Excel är SQL det näst vanligaste deklarativa språket och kan vara till hjälp när det gäller dataåtgärder och kraftfulla skrivåtgärder som inte Excel använder.
Deklarativt
Skaparen beskriver vad de vill att logiken ska göra, inte exakt hur eller när de ska göra det. På så sätt kan kompilatorn optimera genom att utföra åtgärder samtidigt som arbetet kan skjutas upp tills det behövs, samt för hämtning och återanvända cachelagrade data.
I ett Excel-kalkylblad definierar författaren till exempel relationer mellan celler, men Excel bestämmer när och i vilken ordning formeln ska utvärderas. På samma sätt kan formeln i ett program kallas för "recalc-ing" efter behov baserat på användaråtgärder, databasändringar eller timerhändelser.
Funktion
Vi använder funktioner som inte har några bieffekter. Detta resulterar i logik som är lättare att förstå och som ger kompilatorn det bästa att optimera.
Till skillnad från Excel har program till exempel knappar som sparar ändringar i posten i en databas. Vissa funktioner har därför bi effekter, men vi begränsar detta så mycket som det är praktiskt.
Sammansättning
När det är möjligt kommer de funktioner som har lagts till att skapa bra med befintliga funktioner. Kraftfulla funktioner kan bryts ned i mindre delar som kan användas enklare oberoende.
Till exempel en Galleri kontroll har inte separata Sort
och Filter
egenskaper. I stället består Sort
och Filter
-funktionerna samman till en enskild Items
-egenskap. Användargränssnitt för att uttrycka Sort
och Filter
beteende lagras över Items
egenskapen med hjälp av en tvåvägsredigerare för den här egenskapen.
Starkt typad
Typerna av alla värden är kända vid sammanställningen. Detta gör det möjligt att tidigt upptäcka fel och avancerade förslag vid redigering.
Det finns stöd för exempeltyper som stöds, men innan de kan användas måste typen vara fastnålad på en statisk typ och den typen måste vara känd vid kompileringen. Funktionerna IsType och AsType tillhandahålls för test- och omvandlingstyper.
Typ av inferens
Typerna härleds från användningen utan att de har förts in. Om du anger en variabel till ett tal kan variabelns typ exempelvis fastställas som ett tal.
Om en användning av en konflikt uppstår uppstår ett kompileringsfel.
Språkkänsliga decimalavgränsare
Vissa regioner i världen använder en prick (.) som decimaltecken, medan andra använder ett komma (,). Det gör även Excel. Detta görs vanligtvis inte i andra programmeringsspråk, som vanligtvis använder en kanonisk prick (.) som decimalavgränsare för alla användare över hela världen. För att vara så tillgänglig som möjligt för tillverkare på alla nivåer är det viktigt att 3,14
är ett decimaltal för en person i Frankrike som har använt den syntaxen hela sitt liv.
Valet av decimalavgränsare påverkar listavgränsaren, som används för funktionsanropsargument och operatorn för länkning.
Decimaltecken på redigerarens språk | Power Fx decimaltecken | Power Fx listavgränsare | Power Fx kedjeoperatör |
---|---|---|---|
. (prick) | . (prick) | , (kommatecken) | ; (semikolon) |
, (kommatecken) | , (kommatecken) | ; (semikolon) | ;; (dubbelt semikolon) |
Mer information: Global support
Inte objektorienterad
Excel är inte objektinriktat och det är inte heller Power Fx. På vissa språk uttrycks till exempel stränglängden som en egenskap för strängen, till exempel "Hello World".length
i JavaScript. Excel och Power Fx i stället uttrycka detta i termer av en funktion som Len( "Hello World" )
.
Komponenter med egenskaper och metoder är objektfokuserade och Power Fx fungerar enkelt med dem. Men när det är möjligt föredrar vi en funktionell metod.
Utökningsbar
Beslutsfattare kan skapa sina komponenter och funktioner med hjälp av sig Power Fx själva. Utvecklare kan skapa sina komponenter och funktioner genom att skriva JavaScript.
Utvecklarvänliga
Utvecklare är vårt primära mål, men vi försöker vara utvecklarvänliga där det är möjligt. Om den inte strider mot designprinciperna som beskrivs tidigare gör vi saker på ett sätt som en utvecklare uppskattar. Excel kan till exempel inte lägga till kommentarer, så vi använder C-liknande rad och infogade kommentarer.
Språkutveckling
Att utveckla programmeringsspråk är både nödvändigt och svårt. Alla är med rätta oroliga för att en förändring, oavsett hur välmenad, kan bryta befintlig kod och kräva att användarna ska lära sig ett nytt mönster. Power Fx för bakåtkompatibilitet, men vi är också fast beslutna att inte alltid bli rätt första gången och vi får veta vad som är bäst som community. Vi måste utvecklas och Power Fx utforma stöd för språk redan från början.
Varje dokument som sparas innehåller en Power Fx språkversionsstämpel. Om vi vill göra en ändring som är inkompatibel skriver vi det som kallas för "bakåtkompatibel" som skriver om formeln automatiskt nästa gång den redigeras. Om förändringen är något som är mycket viktigt och vi måste informera användaren om detta, visar vi också ett meddelande med en länk till dokument. Med den här funktionen kan vi fortfarande läsa in program som har skapats med förhandsgranskningsversionerna av Power Apps från för många år sedan, trots alla ändringar som har skett sedan dess.
Vi introducerade till exempel funktionen ShowError
för att visa en felbanderoll med röd bakgrund.
Användarna ville inte gärna ha den, men de bad oss också att visa en framgångsrik banderoll (grön bakgrund) eller en informationsbanderoll (blå bakgrund). Vi har kommit fram till en mer generisk Notify
-funktion som tar ytterligare ett argument för den här typen av avisering. Vi kunde bara ha lagt till Notify
och behålla ShowError
sättet som det var, men i stället ersatte vi ShowError
med Notify
. Vi har tagit bort en funktion som tidigare fanns i produktion och ersatt den med något annat. Eftersom det skulle ha funnits två sätt att göra samma sak, skulle detta ha skapat förvirring särskilt för nya användare och det viktigaste är att det skulle ha skapat komplexitet. Ingen klagade, alla, uppskattade förändringen och gick sedan vidare till nästa meddelande-funktion.
Så här ser samma program ut när den läses in i den senaste versionen av Power Apps. Användaren krävde ingen åtgärd för att den här omvandlingen skulle inträffa, den inträffade automatiskt när programmet öppnades.
Med den här lokalen Power Fx kan det gå snabbare och mer snabbt att utveckla programmet än de flesta programmeringsspråk.
Inget odefinierat värde
På vissa språk, till exempel JavaScript, används konceptet med ett odefinierat värde för odefinierade variabler eller egenskaper som saknas. För det första har vi förser oss med det här konceptet. Instanser som skulle vara odefinierade på andra språk behandlas som antingen ett fel eller ett tomt värde. Alla oinslagna variabler börjar till exempel med ett tomt värde. Alla datatyper kan ha värdet tomt.
Relaterade artiklar
Datatyper
Operatorer och identifierare
Tabeller
Variabler
Imperativ logik
Globalt stöd
Uttryck grammatik
Grammatik för YAML-formel
Formler i arbetsyteappar