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:

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.

Omvänd sökning

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:

Power Fx omvänd sökning.

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.

Reglage för färg.

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.

Power Fx färgreglagen.

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.

Publiceras alltid direkt.

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.

JavaScript med lite kod.

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 eller fjärransluten: Power Fx använder samma syntax och funktioner för data som är lokala i minnet och som 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 flera 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 man skriver en fråga skriver många utvecklare select * from table, vilket tar tillbaka alla datakolumner. 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 endast det som behövs: I det här exemplet innebär LookUp funktionen att bara en post ska hämtas och det är allt som returneras. Om fler poster begärs med hjälp av den Filter-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 endast när det behövs: Vi har definierat en formel för Text egenskapen för etikettkontrollen. När den valda variabeln ändras beräknas LookUp 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 dess Visible-egenskap är falskt kan vi skjuta upp beräkningen tills etiketten visas och effektivt ta bort den om det sällan händer.

  • Excel-syntax översättning: Excel används av många användare, varav de flesta känner till att ampersand (&) används för strängsammanfogning. JavaScript använder ett plustecken (+) och i andra språk används en prick (.).

  • Visningsnamn och lokalisering: First Name används i Power Fx formeln och nwind_firstname används 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.

Ingen kodfä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.

Ingen kodsortering.

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.

Proffskod Visual Studio Code.

GitHub för proffskod.

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) , (komma) ; (semikolon)
, (komma) , (komma) ; (semikolon) ;; (dubbla 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.

Visa fel.

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.

Meddelandefunktionen ersätter ShowError.

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.

Datatyper
Operatorer och identifierare
Tabeller
Variabler
Imperativ logik
Globalt stöd
Uttrycksgrammatik
YAML-formelgrammatik
Formler i arbetsyteappar