Power Fx-variabler

Anteckning

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 Översikt över Microsoft Power Fx för en introduktion till språket.

Lär dig hur Power Fx-variabler skiljer sig från variabler i verktyg som Visual Basic eller JavaScript, och när formler är ett bättre val. Den här artikeln beskriver hur du väljer globala variabler, kontextvariabler eller samlingar för att hantera appvärden och tillstånd.

I andra verktyg kan du uttryckligen utföra en beräkning och lagra resultatet i en variabel. Power Fx och Excel beräknar dock automatiskt om formler när indatan ändras, så normalt sett behöver du inte skapa eller uppdatera några variabler. Genom att använda den här metoden när det är möjligt, kan du enkelt skapa, förstå och underhålla ditt program.

I vissa fall måste du använda variabler i Power Fx. Power Fx utökar Excel modell genom att lägga till beteendeformler. Formlerna körs till exempel när en användare väljer en knapp. I en beteendeformel är det ofta bra att ange en variabel som ska användas i andra formler.

I allmänhet bör du undvika att använda variabler. Men ibland är det bara en variabel som kan ge dig den funktion du söker. Du skapar och skriver implicit variabler när de visas i funktioner som anger deras värden.

Omvandla Excel till Power Fx

Excel

Låt oss se hur Excel fungerar. En cell kan innehålla ett värde, till exempel ett tal, en sträng eller en formel, som är baserad på värden i andra celler. När användaren anger ett annat värde i en cell, beräknar Excel automatiskt om alla formler som är beroende av det nya värdet. Du behöver inte utföra någon programmering för att aktivera det här beteendet.

I följande exempel anges cell A3 till formeln A1+A2. Om A1 eller A2 ändras A3 beräknas automatiskt för att återspegla ändringen. Det här beteendet kräver ingen kod utanför själva formeln.

Skärmbild av en Excel formel som beräknar om summan efter att ett indatavärde har ändrats.

Excel har inte några variabler. Värdet för en cell som innehåller en formel ändras baserat på dess indata, men det finns inget sätt att komma ihåg resultatet av en formel och lagra den i en cell eller någon annanstans. Om du ändrar en cells värde kan hela kalkylbladet ändras och alla tidigare beräknade värden går förlorade. En Excel-användare kan kopiera och klistra in celler, men det sker med användarens manuella kontroll och är inte möjligt med formler.

Power Fx

Logic som du skapar i Power Fx fungerar ungefär som Excel. I stället för att uppdatera celler kan du lägga till kontroller var du vill på en skärm och ge dem ett namn som ska användas i formler.

Till exempel i Power Apps kan du replikera Excel-beteendet i en app genom att lägga till kontrollen Etikett med namnet Label1 och två kontroller för Textinmatning med namnet TextInput1 och TextInput2. Om du sedan anger egenskapen Text för Label1 till TextInput1.Text + TextInput2.Text visas alltid summan av de tal som finns i TextInput1 och TextInput2 automatiskt.

Skärmbild av två textindata och en etikett som beräknar en summa med en Power Fx-formel.

Observera att kontrollen Label1 är markerad och visar textformeln i formelfältet överst på skärmen. Här hittar du formeln TextInput1.Text + TextInput2.Text. Den här formeln skapar ett beroende mellan dessa kontroller, precis som beroenden skapas mellan cellerna i en Excel-arbetsbok. Låt oss ändra värdet i TextInput1:

Skärmbild av en Power Fx-formel som automatiskt beräknar om en summa när en indata ändras.

Formeln för Label1 beräknas automatiskt om, vilket visar det nya värdet.

Du kan använda formler i Power Fx för att fastställa både det primära värdet för en kontroll och egenskaper som till exempel formatering. I nästa exempel visar en formel för egenskapen Color för etiketten automatiskt negativa värden i rött. Funktionen If bör se bekant ut från Excel:

If( Value(Label1.Text) < 0, Color.Red, Color.Black )

Skärmbild av en Power Fx-formel som ändrar en etikettfärg när det beräknade värdet är negativt.

Du kan använda formler för en mängd olika scenarier:

  • Med hjälp av enhetens GPS kan en kartkontroll visa din aktuella plats med en formel som använder Location.Latitude och Location.Longitude. När du flyttar spårar kartan automatiskt din plats.
  • Andra användare kan uppdatera datakällor. Andra i din grupp kan till exempel uppdatera objekt i en SharePoint-lista. När du uppdaterar en datakälla beräknas eventuella beroende formler automatiskt om för att återspegla uppdaterade data. När du går vidare med exemplet kan du ange egenskapen Objekt i ett galleri till formeln Filter( SharePointList ), som automatiskt visar den nyligen filtrerade uppsättningen poster.

Fördelar med Power Fx-formler

Det finns många fördelar med att använda formler för att skapa appar:

  • Om du kan Excel, kan du Power Fx. Modellen och formelspråket är likadana.
  • Om du använder andra programmeringsverktyg bör du överväga hur mycket kod du behöver för att utföra dessa exempel. I Visual Basic skulle du behöva skriva en händelsehanterare för ändringshändelsen i varje textinmatningskontroll. Koden för att utföra beräkningen i var och en av dessa händelsehanterare är redundant och kan bli osynkroniserad, eller så behöver du skriva en vanlig underrutin. I Power Fx utför du allt detta arbete med en enda enradsformel.
  • För att förstå var Label1:s text kommer ifrån vet du exakt var du ska leta: formeln i egenskapen Text . Det finns inte något annat sätt att påverka texten i den här kontrollen. I ett traditionellt programmeringsverktyg kan en händelsehanterare eller subrutin ändra värdet på etiketten från valfri plats i programmet. Den här metoden kan göra det svårt att spåra när och var en variabel har ändrats.
  • Om användaren ändrar en skjutreglagekontroll och sedan ångrar sig, går det att dra tillbaka skjutreglaget till det ursprungliga värdet. Det är som om ingenting någonsin har ändrats: appen visar samma kontrollvärden som tidigare. Det finns inga hinder för att experimentera med ”Vad händer om?”, precis som i Excel.

I allmänhet är det bättre om du kan uppnå en effekt med hjälp av en formel. Låt formelmotorn i Power Fx arbeta åt dig.

Att veta när variabler ska användas

Låt oss ändra vårt enkla tilläggsverktyg till en gammalmodig tilläggsmaskin, med en löpande summa. Om du väljer knappen Lägg till lägger du till ett tal i den löpande summan. Om du väljer knappen Rensa återställer du den löpande summan till noll.

Visning Beskrivning
Skärmbild av en tilläggsdatorapp med en totalsumma på noll och 77 angivna i textinmatningen. När appen startas blir den löpande total summan 0.

Den röda punkten representerar användarens finger i textrutan, där användaren anger 77.
Skärmbild av att lägga till datorn med 77 i textinmatningen när användaren väljer Lägg till. Användaren väljer knappen Lägg till.
Skärmbild av den tilläggsdator som visar totalt 77 innan ytterligare 77 läggs till. 77 läggs då till i löpande total.

Användaren väljer knappen Lägg till.
Skärmbild av den tilläggsdator som visar en löpande summa på 154 innan användaren väljer Rensa. 77 återigen läggs till i den löpande summan, vilket resulterar i 154.

Användaren väljer knappen Rensa.
Skärmbild av den tilläggsdator som har lagts till efter att den löpande summan har återställts till noll. Löpande total återställs till 0.

Vår tilläggsmaskin använder något som inte finns i Excel, nämligen en knapp. I den här appen kan du inte använda enbart formler för att beräkna den löpande summan, eftersom dess värde beror på ett antal åtgärder som användaren vidtar. I stället måste du registrera och uppdatera den löpande summan manuellt. De flesta programmeringsverktyg lagrar den här informationen i en variabel.

Ibland måste du ha en variabel för att din app ska fungera som du vill. Men metoden har sina nackdelar:

  • Du måste uppdatera den löpande summan manuellt. Det görs inte med en automatisk omberäkning.
  • Du kan inte beräkna den löpande summan baserat på värdena för andra kontroller. Det beror på hur många gånger användaren valt knappen Lägg till och vilket värde som fanns i textindatakontrollen varje gång. Har användaren angett 77 och valt Lägg till två gånger, eller 24 respektive 130 de båda gångerna? Du kan inte se skillnaden när summan når 154.
  • Ändringar i summan kan komma från olika platser. I det här exemplet kan båda knapparna Lägg till och Rensa uppdatera summan. Om appen inte fungerar som förväntat, vilken knapp är det som orsakar problemet?

Använd en global variabel

För att skapa din tilläggsdator behöver du en variabel för att lagra den löpande summan. De enklaste variablerna att arbeta med i Power Fx är globala variabler.

Hur globala variabler fungerar:

  • Använd funktionen Set för att ange värdet för den globala variabeln. Set( MyVar, 1 ) ger den globala variabeln MyVar värdet 1.
  • Använd den globala variabeln genom att referera till namnet du använde med funktionen Set . I det här fallet returnerar MyVar1.
  • Globala variabler kan innehålla valfritt värde, inklusive strängar, tal, poster och tabeller.

Låt oss återskapa vår tilläggsmaskin med hjälp av en global variabel:

  1. Lägg till en textindatakontroll med namnet TextInput1 och två knappar med namnen Button1 och Button2.

  2. Ange egenskapen Text för Button1 för Add" och ange egenskapen Text för Button2 till Clear".

  3. Uppdatera den löpande summan varje gång en användare väljer knappen Add genom att ange egenskapen OnSelect till den här formeln:

    Set( RunningTotal, RunningTotal + TextInput1.Text )

    Förekomsten av den här formeln fastställer RunningTotal som en global variabel som har ett nummer på grund av + operatorn. Du kan referera till RunningTotal var som helst i appen. När användaren öppnar appen RunningTotal har ett initialt värde som är blank.

    Första gången en användare väljer knappen Lägg till och Set körningen, RunningTotal anges värdet RunningTotal + TextInput1.

    Skärmbild av egenskapen Lägg till knappen OnSelect med set för att uppdatera en global Power Fx-variabel.

  4. Om du vill ange den löpande summan till 0 när en användare väljer knappen Clear anger du egenskapen OnSelect till den här formeln:

    Set( RunningTotal, 0 )

    Skärmbild av egenskapen Rensa knappen OnSelect med set för att återställa en global Power Fx-variabel.

  5. Lägg till kontrollen Label och ange dess egenskapen Text till RunningTotal.

    Den här formeln beräknar automatiskt om och visar användaren värdet för RunningTotal när det ändras baserat på de knappar som användaren väljer.

    Skärmbild av en egenskap för etikettText som visar värdet för den globala variabeln RunningTotal.

  6. Förhandsgranska appen och du har din tilläggsdator enligt beskrivningen tidigare. Ange ett värde i textrutan och tryck på knappen Lägg till knappen några gånger. När du är klar återgår du till redigeringsmiljön med hjälp av Esc-nyckeln .

    Skärmbild av att lägga till datorförhandsgranskning med ett indatavärde och den beräknade löpande summan.

  7. Om du vill se vår globala variabels värde går du till Arkiv-menyn och väljer Variabler i den vänstra rutan.

    Skärmbild av det globala alternativet Variabler som valts från menyn Arkiv i appredigeraren.

  8. Om du vill se alla platser där våra variabler definieras och används, markerar du den.

    Skärmbild av de platser där en global variabel definieras och används i appen.

Typer av variabler

Power Fx har två typer av variabler:

Variabeltyp Definitionsområde Beskrivning Funktioner som fastställer
Globala variabler Program Enklast att använda. Innehåller ett tal, en textsträng, boolesk, post, tabell med mera. Du kan referera till den var som helst i appen. Set
Mängder Program Innehåller en tabell som du kan referera till var som helst i appen. Du kan ändra innehållet i tabellen i stället för att ange den som en helhet. Du kan spara den på den lokala enheten för senare användning. Collect
ClearCollect

När du använder Power Apps visas en tredje typ av variabel:

Variabeltyp Definitionsområde Beskrivning Funktioner som fastställer
Kontextvariabler Skärm Bra för att skicka värden till en skärm, ungefär som parametrar till en procedur på andra språk. Du kan bara referera till den från en skärm. UpdateContext
Navigate

Skapa och ta bort variabler

Du skapar alla variabler implicit när de visas i funktionen Set, UpdateContext, Navigate, Collect eller ClearCollect . Om du vill deklarera en variabel och dess typ tar du bara med den i någon av dessa funktioner var som helst i din app. Ingen av dessa funktioner skapar variabler. De fyller endast variabler med värden. Du deklarerar aldrig variabler som du kanske använder i ett annat programmeringsverktyg och all inmatning är implicit från användning.

Du kan till exempel ha en Knapp-kontroll med en OnSelect-formel som är lika med Set( X, 1 ). Med den här formeln upprättas X som en variabel med en typ av tal. Du kan använda X i formler som ett tal och variabeln får ett tomt när du har öppnat appen, men innan du har markerat knappen. När du väljer knappen ger du X värdet 1.

Om du lägger till en annan knapp och anger egenskapen OnSelect till Set( X, "Hello" ), uppstår ett fel eftersom typen (textsträngen) inte matchar typen i föregående uppsättning (tal). Alla implicita definitioner för variabeln måste komma överens med typen. Återigen hände allt detta eftersom du nämnde X i formler, inte för att någon av dessa formler faktiskt kördes.

Du tar bort en variabel genom att ta bort alla de funktioner för Set, UpdateContext, Navigate, Collect eller ClearCollect som implicit fastställer variabeln. Utan dessa funktioner finns inte variabeln. Du måste också ta bort alla referenser till variabeln eftersom de orsakar ett fel.

Variabelns livstid och ursprungliga värde

Appen innehåller alla variabler i minnet medan den körs. De värden som lagras i variablerna går förlorade när appen har stängts.

Du kan lagra innehållet i en variabel i en datakälla med hjälp av funktionerna Patch eller Collect. Du kan också lagra värden i samlingar på den lokala enheten med hjälp av funktionen SaveData.

När användaren öppnar appen får alla variabler ett initialt värde som är tomt.

Läs variabler

Använd variabelns namn för att läsa dess värde. Du kan till exempel definiera en variabel med följande formel:

Set( Radius, 12 )

Sedan kan du helt enkelt använda Radius var som helst där du kan använda ett tal, och det ersätter med 12:

Pi() * Power( Radius, 2 )

Om du ger en kontextvariabel samma namn som en global variabel eller en samling har den sammanhangsberoende variabeln prioritet. Du kan fortfarande referera till den globala variabeln eller samlingen med hjälp av disambigueringsoperatorn[@Radius].

Använd en kontextvariabel (endast Power Apps)

Så här skapar du en tilläggsdator med hjälp av en kontextvariabel i stället för en global variabel.

Så här fungerar sammanhangsvariabler:

  • Du fastställer och ställer implicit sammanhangsvariabler med hjälp av funktionerna UpdateContext eller Navigate. När appen startar är det initiala värdet för alla kontextvariabler tomt.
  • Du uppdaterar sammanhangsvariabler med poster. I andra programmeringsverktyg använder du ofta ”=” vid tilldelning, som i ”x = 1”. Sammanhangsvariabler använder { x: 1 } i stället. När du använder en sammanhangsvariabel kan du använda dess namn direkt utan syntaxen för posten.
  • Du kan också ange en sammanhangsvariabel när du använder funktionen Navigate för att visa en skärm. Om du tänker på en skärm som en sorts procedur eller subrutin, liknar denna metod parametern som överförs i andra programmeringsverktyg.
  • Förutom Navigate är sammanhangsvariabler begränsade till sammanhanget på en enda skärm, vilket är platsen där de får sitt namn. Du kan inte använda eller ange dem utanför det här sammanhanget.
  • Sammanhangsvariabler kan innehålla valfritt värde, inklusive strängar, tal, poster och tabeller.

Låt oss återskapa vår tilläggsmaskin med hjälp av en sammanhangsvariabel:

  1. Lägg till en textindatakontroll med namnet TextInput1 och två knappar med namnen Button1 och Button2.

  2. Ange egenskapen Text för Button1 för Add" och ange egenskapen Text för Button2 till Clear".

  3. Uppdatera den löpande summan varje gång en användare väljer knappen Add genom att ange egenskapen OnSelect till den här formeln:

    UpdateContext( { RunningTotal: RunningTotal + TextInput1.Text } )

    Förekomsten av den här formeln fastställer RunningTotal som en kontextvariabel som har ett nummer på grund av + operatorn. Du kan referera till RunningTotal var som helst i den här skärmen. När användaren öppnar appen RunningTotal har ett initialt värde som är blank.

    Första gången en användare väljer knappen Lägg till och UpdateContext körningen, RunningTotal anges värdet RunningTotal + TextInput1.

    Skärmbild av egenskapen Lägg till knappen OnSelect som uppdaterar kontextvariabeln RunningTotal.

  4. Om du vill ange den löpande summan till 0 när en användare väljer knappen Clear anger du egenskapen OnSelect till den här formeln:

    UpdateContext( { RunningTotal: 0 } )

    Återigen används UpdateContext med formeln UpdateContext( { RunningTotal: 0 } ).

    Skärmbild av egenskapen Rensa knappen OnSelect som återställer kontextvariabeln RunningTotal.

  5. Lägg till kontrollen Label och ange dess egenskapen Text till RunningTotal.

    Den här formeln beräknar automatiskt om och visar användaren värdet för RunningTotal när det ändras baserat på de knappar som användaren väljer.

    Skärmbild av en textegenskap med etiketten Text som visar värdet för kontextvariabeln RunningTotal.

  6. Förhandsgranska appen och du har din tilläggsdator enligt beskrivningen tidigare. Ange ett värde i textrutan och tryck på knappen Lägg till knappen några gånger. När du är klar återgår du till redigeringsmiljön med hjälp av Esc-nyckeln .

    Skärmbild av appförhandsgranskningen med ett textindatavärde och en kontextvariabel som kör totalsumma.

  7. Du kan ange värdet för en kontextvariabel när du navigerar till en skärm. Den här tekniken är användbar för att skicka "kontext" eller "parametrar" från en skärm till en annan. Du kan visa den här tekniken genom att infoga en skärm, infoga en knapp och ange dess OnSelect-egenskap till följande formel:

    Navigate( Screen1, None, { RunningTotal: -1000 } )

    Skärmbild av egenskapen OnSelect med hjälp av Navigera för att skicka en kontextvariabel till Screen1.

    Håll ned Alt-tangenten medan du väljer den här knappen för att både visa Screen1 och ange kontextvariabeln RunningTotal till -1000.

    Skärmbild av Screen1 efter navigering anger kontextvariabeln RunningTotal till negativ 1000.

  8. Om du vill se värdet för kontextvariabeln går du till Arkiv-menyn och väljer Variabler i den vänstra rutan.

    Skärmbild av det alternativ för kontextvariabler som valts från menyn Arkiv i appredigeraren.

  9. Välj kontextvariabeln för att se var den definieras och används.

    Skärmbild av de platser där en kontextvariabel definieras och används i appen.

Använd en samling

Låt oss till sist ta en titt på hur vi kan lägga till en dator med en samling. Eftersom en samling innehåller en tabell som du enkelt kan ändra, behåller den här tilläggsdatorn ett "pappersband" för varje värde när du anger dem.

Så här fungerar samlingar:

  • Använd funktionen ClearCollect för att skapa och ange samlingar. Du kan använda funktionen Collect i stället, men den kräver en annan variabel i stället för att ersätta den gamla.
  • En samling är en sorts datakälla och därför en tabell. Om du vill få åtkomst till ett enstaka värde i en samling kan du använda funktionen First och extrahera ett fält från den resulterande posten. Om du använder ett enda värde med ClearCollect är det här värdet fältet Värde , som i det här exemplet:
    First(VariableName).Value

Låt oss återskapa vår tilläggsmaskin med en samling:

  1. Lägg till en Text input kontroll med namnet TextInput1 och två knappar med namnen Button1 och Button2.

  2. Ange egenskapen Text för Button1 för Add" och ange egenskapen Text för Button2 till Clear".

  3. Uppdatera den löpande summan varje gång en användare väljer knappen Add genom att ange egenskapen OnSelect till den här formeln:

    Collect( PaperTape, TextInput1.Text )

    Förekomsten av den här formeln består av PaperTape som en samling med en tabell med en kolumn med textsträngar. Du kan referera till PaperTape var som helst i appen. När en användare öppnar appen PaperTape en tom tabell.

    När den här formeln körs lägger den till det nya värdet i slutet av samlingen. Eftersom du lägger till ett enda värde placerar Collect automatiskt det i en tabell med en kolumn och kolumnens namn är Värde, som du använder senare.

    Skärmbild av egenskapen Lägg till knappen OnSelect som samlar in ett indatavärde i PaperTape.

  4. Om vi vill ta bort ”pappersremsan” när användaren väljer knappen Clear, så ställ in dess egenskap OnSelect till följande formel:

    Clear( PaperTape )

    Skärmbild av clear-knappen OnSelect-egenskapen som rensar alla värden från PaperTape.

  5. Om du vill visa den löpande summan lägger du till en etikett och anger egenskapen Text till denna formel:

    Sum( PaperTape, Value )

    Skärmbild av en etikett textegenskap med hjälp av Summa för att beräkna papperstape-körningssumman.

  6. Kör tilläggsmaskinen genom att trycka på F5 för att öppna förhandsversion. Ange sedan talen i Textinmatning-kontrollen och välj knapp.

    Skärmbild av den samlingsbaserade tilläggsdatorn med ett indatavärde och en löpande summa.

  7. Tryck på Esc för att återgå till standardarbetsytan.

  8. Om du vill visa pappersremsan, så infoga en Datatabell-kontroll, och ställ in dess egenskap Items till följande formel:

    PaperTape

    Välj Redigera fält i högra fönstret och välj sedan Lägg till fält, välj kolumnen Värde och välj sedan Lägg till för att visa den.

    Skärmbild av en datatabell som visar de värden som lagts till i PaperTape-samlingen.

  9. Om du vill se värdena i samlingen väljer du Samlingar i menyn Arkiv.

    Skärmbild av vyn Samlingar som visar lagrade värden i PaperTape-samlingen.

  10. Om du vill lagra och hämta samlingen, så lägg till två ytterligare Knapp-kontroller och ange deras Text-egenskaper till Load och Save. Ange egenskapen OnSelect för knappen Läs in till den här formeln:

    Clear( PaperTape ); LoadData( PaperTape, "StoredPaperTape", true )

    Vi behöver rensa samlingen först eftersom LoadData kommer att lägga till de lagrade värdena i slutet av samlingen.

    Skärmbild av knappen Läs in OnSelect-egenskapen rensar och läser in PaperTape-samlingen.

  11. Ange egenskapen OnSelect för knappen Spara enligt den här formeln:

    SaveData( PaperTape, "StoredPaperTape" )

    Skärmbild av spara-knappen OnSelect-egenskapen som sparar PaperTape-samlingen lokalt.

  12. Förhandsgranska igen genom att trycka på F5-tangenten , ange tal i textinmatningskontrollen och välj knappar. Klicka på knappen Spara. Stäng och läs in din app igen, och läs in din samling igen genom att välja knappen Läs in.