Operatorer och identifierare

Obs

Microsoft Power Fx är det nya namnet på formelspråket för arbetsyteappar. Dessa 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. Börja med Microsoft Power Fx översikten för en introduktion till språket.

Operatorerna som Microsoft Power Fx beskrivs nedan. En del av de här operatorerna är beroende av författarens språk. Mer information finns i Globala program.

Symbol Typ Syntax Beskrivning
. Egenskapsväljaren Skjutreglaget1.Värde
Color.Red
Extraherar en egenskap från en tabell, kontroll eller uppräkning. För bakåtkompatibilitet kan ! också användas.
.
Beroende på språk
Decimaltecken 1.23 Avgränsare mellan heltal och fraktioner av ett tal. Tecknet beror på språket.
( ) Parenteser Filtrera (T, A < 10)

(1 + 2) * 3
Framtvingar prioritetsordning och grupperar underuttryck i ett större uttryck
+ Aritmetiska operatorer 1 + 2 Tillägg
-   2 - 1 Subtraktion och tecken
*   2 * 3 Multiplikation
/   2 / 3 Division (Se även Mod-funktionen)
^   2 ^ 3 Exponentiering som motsvarar Power-funktionen
%   20 % Procentsats (motsvarar "* 1/100")
= Jämförelseoperatorer Pris = 100 Lika med
>   Pris > 100 Större än
>=   Pris >= 100 Större än eller lika med
<   Pris < 100 Mindre än
<=   Pris <= 100 Mindre än eller lika med
<>   Pris <> 100 Inte lika med
& Operator för strängsammanfogning "Hej" & " " & "Världen" Får flera strängar att se sammanhängande ut
&& eller Och Logiska operatorer Pris < 100 & Slider1.Värde = 20
eller Price < 100 And Slider1.Value = 20
Logisk konjunktion som motsvarar funktionen And
|| eller Eller   Pris < 100 || Slider1.Value = 20 eller Pris < 100 eller Slider1.Value = 20 Logisk disjunktion som motsvarar funktionen Or
! eller Not   ! (Pris < 100) eller inte (Pris < 100) Logisk negation som motsvarar funktionen Not
Exakt Operatörer av medlemskap Galleri1.Valda exaktin SavedItems Som tillhör en samling eller en tabell
Exakt   "Windows" exactin "För att visa fönster i Windows-operativsystemet..." Delsträngstest (skiftlägeskänsligt)
i   Galleri1.Vald i SavedItems Som tillhör en samling eller en tabell
i   "The" i "Tangentbordet och bildskärmen..." Delsträngstest (skiftlägesokänsligt)
@ operatör för förgreningar MyTable[@fieldname] Fältdisambiguering
@   [@MyVariable] Global disambiguering
,
[språkberoende]
Listavgränsare If(x < 10, "Låg", "Bra")
{ X: 12, Y: 32 }
[ 1, 2, 3 ]
Avgränsar:
  • argument i funktionsanrop
  • fält i en post
  • poster i en tabell
Detta tecken beror på språket.
;
[språkberoende]
Formellänkning Samla (T, A); Navigera(S1, "") Separata funktionsanrop i beteendeegenskaper. Länkningsoperatorn beror på språket.
Som Som operatör AllaKunder som kund Åsidosätter ThisItem och ThisRecord i galleri- och postomfattningsfuktioner. Som är användbart för att ge ett bättre, specifikt namn och är särskilt viktigt i kapslade scenarier.
Själv Självständig operatör Självfyll Ger åtkomst till egenskaperna för den aktuella kontrollen
Förälder Överordnad operatör Överordnad.Fyll i Åtkomst till egenskaperna för en kontrollcontainer
Den här artikeln ThisItem-operatör ThisItem.FirstName Åtkomst till fälten för ett galleri eller en Form-kontrollen
Detta rekord ThisItem-operatör ThisRecord.FirstName (Förnamn) Åtkomst till hela posten och enskilda fält i posten i ForAll, Sum, With och andra postomfattningsfunktioner. Kan åsidosättas med Som operatör.

operatorerna in och exactin

Använd operatörerna in och exactin för att hitta en sträng i en datakälla, som en samling eller en importerad tabell. In-operatorn identifierar matchningar oavsett skiftläge och exactin-operatorn identifierar bara matchningar om skiftläget är detsamma. Här är ett exempel:

  1. Skapa eller importera en samling med namnet Lager och visa den i ett galleri, enligt beskrivningen i den första proceduren i Visa bilder och text i ett galleri.

  2. Ställ in galleriets egenskap Items på följande formel:
    Filter (Lager, "E" i ProductName)

    Galleriet visar alla produkter utom Callisto, eftersom namnet på den här produkten är den enda som inte innehåller den angivna bokstaven.

  3. Ändra galleriets egenskap Items till den här formeln:
    Filter (Lager, "E" exakt ProductName)

    Galleriet visar bara Europa, eftersom det bara är det namnet som innehåller bokstaven som du angav i det skiftläget du angav.

ThisItem, ThisRecord och Som operatörer

Några kontroller och funktioner använder formler för enskilda poster i en tabell. Använd något av följande om du vill referera till en enskild post i en formel:

Operator Gäller för Beskrivning
Den här artikeln Kontroll av galleri
Kontrollen Redigera formulär
Kontroll för visningsformulär
Standardnamnet för den aktuella posten i kontrollen Gallery eller Form.
Detta rekord ForAll, Filter, With, Sum och andra funktioner för postomfång Standardnamnet för den aktuella posten i ForAll och andra postomfattningsfunktioner.
Somnamn Kontroll av galleri
ForAll, Filter, With, Sum och andra funktioner för postomfång
Definierar ett namn för den aktuella posten, vilket ersätter standardnamnet ThisItem eller ThisRecord. Använd Som för att göra formler lättare att förstå och åtgärda tvetydighet när du kapslar.

ThisItem-operator

I följande gallerikontroll är t.ex. egenskapen Objekt inställd på datakällan Anställda (t.ex. entiteten Anställda som ingår i exemplet Northwind Traders):

Employees

Anställda visas i ett galleri.

Det första objektet i galleriet är en mall som replikeras för varje medarbetare. I mallen använder formeln för bilden ThisItem för att referera till det aktuella objektet:

ThisItem.Picture

Formel för bilden av en anställd.

På samma sätt använder formeln för namnet även ThisItem:

ThisItem.'First Name' & " " & ThisItem.'Last Name'

Formel för för- och efternamn på en anställd.

ThisRecord-operator

ThisRecord används i funktioner som har ett postomfång. Vi kan t.ex. använda funktionen Filter med galleriets egenskap Items för att endast visa förnamn som börjar på M:

Filter( Employees, StartsWith( ThisRecord.Employee.'First Name', "M" ) )

Filtrera de anställda baserat på namn med ThisRecord.

ThisRecord är valfritt och underförstått genom att använda fälten direkt, till exempel, i det här fallet, kunde vi ha skrivit:

Filter( Employees, StartsWith( 'First Name', "M" ) )

Även om det är valfritt kan användning av ThisRecord göra formler lättare att förstå och kan krävas i tvetydiga situationer där ett fältnamn också kan vara ett relationsnamn. ThisRecord är valfritt medan ThisItem alltid krävs.

Använd ThisRecord för att referera till hela posten med Patch, Collect och andra postomfattningsfunktioner. Följande formel anger till exempel statusen för alla inaktiva medarbetare till aktiv:

With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
      ForAll( InactiveEmployees, 
              Patch( Employees, ThisRecord, { Status: 'Status (Employees)'.Active } ) ) )

Som operator

Använd Som operator om du vill namnge en post i en galleri- eller postomfattningsfunktion och åsidosätta standardnamnet ThisItem eller ThisRecord. Att namnge posten kan göra dina formler lättare att förstå och kan krävas i kapslade situationer för att få tillgång till poster i andra omfattningar.

Du kan t.ex. ändra egenskapen Items i vårt galleri om du vill använda Som för att identifiera att vi arbetar med en medarbetare:

Employees As Employee

Galleri med anställda, som använder As-operatören.

Formlerna för bilden och namnet justeras för att använda det här namnet för den aktuella posten:

Employee.Picture

Bild av en anställd som använder namnet Anställd med As-operatören.

Employee.'First Name' & " " & Employee.'Last Name'

För- och efternamn på en anställd som använder namnet Anställd med As-operatören.

As kan också användas med postomfångsfunktioner för att ersätta standardnamnet ThisRecord. Vi kan tillämpa detta på vårt föregående exempel för att klargöra vilken post vi arbetar med:

With( { InactiveEmployees: Filter( Employees, Status = 'Status (Employees)'.Inactive ) },
      ForAll( InactiveEmployees As Employee, 
              Patch( Employees, Employee, { Status: 'Status (Employees)'.Active } ) ) )

När du kapslar in gallerier och postomfattningsfunktioner refererar ThisItem och ThisRecord alltid till den innersta omfattningen lämnar poster i yttre omfattningar otillgängliga. Använd Som för att tillgängliggöra alla postomfattningar genom att ge alla ett unikt namn.

Med den här formeln skapas till exempel ett schackmönster som en textsträng genom att kapsla två ForAll-funktioner:

Concat( 
    ForAll( Sequence(8) As Rank,
        Concat( 
            ForAll( Sequence(8) As File, 
                    If( Mod(Rank.Value + File.Value, 2) = 1, " X ", " . " ) 
            ),
            Value 
        ) & Char(10) 
    ), 
    Value 
)

Att ange en Label-kontrolls egenskap Text till denna formel visar:

Schackbrädetext visas i en label-kontroll.

Låt oss packa upp vad som händer här:

  • Vi börjar med att iterera en namnlös tabell med åtta numrerade poster från funktionen Sequence. Denna loop gäller för varje rad på brädet, som vanligtvis kallas för rang, så vi ger den detta namn.
  • För varje rad itererar vi en annan namnlös tabell med åtta kolumner, och vi ger det allmänna namnet Fil.
  • Om Rank.Value + File.Value är ett udda tal, får fyrkanten ett X, annars en punkt. Den här delen av formeln refererar till båda ForAll-loopar, vilket möjliggörs genom att använda operatorn Som.
  • Concat används två gånger, först för att sätta ihop kolumnerna och sedan raderna, med en Char(10) inkastad för att skapa en ny rad.

Ett liknande exempel är möjligt med kapslade Gallery-kontroller i stället för ForAll-funktioner. Vi börjar med det vertikala galleriet för Rang. Den här gallerikontrollen har följande objekt-formel:

Sequence(8) as Rank

Illustration av det yttre galleriet som ger Rank-iteration.

I det här galleriet placerar vi ett horisontellt galleri för filen, som replikeras för varje rang, med en Itemsegenskap som är:

Sequence(8) as File

Illustration av det inre galleriet som tillhandahåller filiterationen.

I det här galleriet lägger vi slutligen till en Label-kontroll som ska replikeras för varje fil och varje rang. Vi gör så att det fyller hela utrymmet och använder egenskapen Fill för att ange färgen med formeln:

If( Mod( Rank.Value + File.Value, 2 ) = 1, Green, Beige )

Label-kontroll inom de två gallerierna som ger schackbrädet alternerande färger.

Self- och Parent-operatorer

Det finns tre sätt att referera till en kontroll och dess egenskaper i en formel:

Metod Beskrivning
Efter kontrollnamn Du kan referera till alla kontroller med namn var som helst ifrån inom programmet.

Exempel: Label1.Fill refererar till egenskapen Fill för den kontroll vars namn är Label1.
Självständig operatör Det är ofta praktiskt att referera till en annan egenskap i samma kontroll när du skriver en formel. I stället för att använda en absolut referens efter namn är det enklare och smidigare att använda en relativ referens till en self. Self-operator ger enkel åtkomst till den aktuella kontrollen.

Till exempel refererar Self.Fill till den aktuella kontrollens fyllningsfärg.
Överordnad operatör Vissa kontroller är värdar för andra kontroller, t.ex. kontrollerna Screen och Gallery. Vi kallar värdkontrollen för överordnad. På samma sätt som Self-operator, ger Parent-operator en enkel relativ referens till Container-kontroll.

Till exempel refererar Parent.Fill till egenskapen Fill i den kontroll som är behållare för den aktuella kontrollen..

Self och Parent är operatorer och inte egenskaper för själva kontrollerna. Referera till Parent.Parent, Self.Parent eller Parent.Self stöds inte.

Namn på identifierare

Namnen på variabler, datakällor, kolumner och andra objekt kan innehålla Unicode.

Använd enkla citattecken runt ett namn som innehåller blanksteg eller specialtecken.
Använd två enda citat tillsammans för att representera en enda offert i namnet. Namn som inte innehåller specialtecken kräver inga enstaka citattecken.

Här följer några exempel på kolumnnamn som du kan stöta på i en tabell och hur de visas i en formel:

Kolumnnamn i databas Kolumnreferens i en formel
SimpleName SimpleName
NameWith123Numbers NameWith123Numbers
Namn med blanksteg 'Name with spaces'
Namn med dubbla citattecken 'Name with "double" quotes'
Namn med enkla citattecken 'Name with ''single'' quotes'
Namn med @ at-tecken 'Name with an @ at sign'

Dubbla citattecken används för att Ange textsträngar.

Visningsnamn och logiska namn

Vissa datakällor, t.ex. SharePoint och Microsoft Dataverse har två olika namn som refererar till samma tabell eller datakolumn:

  • Logiskt namn - Ett namn som garanterat är unikt, som inte ändras efter att det har skapats, som vanligtvis inte tillåter mellanslag eller andra specialtecken och som inte är lokaliserat till olika språk. På grund av detta kan namnet vara kryptiskt. Dessa namn används av professionella utvecklare. Till exempel cra3a_customfield. Namnet kan också kallas schemanamn eller endast namn.

  • Visningsnamn – Ett namn som är användarvänligt och avsett att ses av slutanvändare. Det här namnet kanske inte är unikt, kan ändras över tid, kan innehålla blanksteg och eventuella Unicode-tecken och kan lokaliseras till olika språk. Motsvarande exemplet ovan kan visningsnamnet vara ett anpassat fält med blanksteg mellan orden.

Eftersom visningsnamnen är lättare att förstå föreslår Power Fx dem som alternativ och inte logiska namn. Även om logiska namn inte föreslås kan de fortfarande användas om de skrivs indirekt.

Anta till exempel att du har lagt till ett anpassat fält i en entitet i Dataverse. Ett logiskt namn tilldelas av systemet som du endast kan ändra när du skapar fältet. Resultatet skulle se ut ungefär så här:

Kontoenhet med anpassat fält tillagt, visar ett visningsnamn

När du redigerar en referens till ett fält med konton kommer förslaget att användas som "anpassat fält", eftersom det är visningsnamnet. Enkla offerter måste användas eftersom det finns ett blanksteg i det här namnet:

Studioformelfält som visar förslag på fältnamn på konton med visningsnamnet 'Anpassat fält' markerat.

När du har valt förslaget visas "anpassat fält" i formelfältet och data hämtas:

Studioformelfält som visar visningsnamnet 'Anpassat fält' för fältet.

Även om det inte föreslås kan vi också använda det logiska namnet för det här fältet. Detta resulterar i att samma data hämtas. Inga enskilda offerter krävs eftersom det här namnet inte innehåller blanksteg eller specialtecken:

Studioformelfält som visar användningen av det logiska namnet cr5e3_customfield för fältet.

I bakgrunden upprätthålls en mappning mellan de visningsnamn som visas i formler och de underliggande logiska namnen. Eftersom logiska namn måste användas för att interagera med datakällan används den här mappningen för att konvertera från det aktuella visningsnamnet till det logiska namnet automatiskt och det är det som visas i nätverkstrafiken. Mappningen används också för att konvertera tillbaka till logiska namn för att växla till nya visningsnamn, till exempel om ett visningsnamn ändras eller en tillverkare på ett annat språk redigerar programmet.

Kommentar

Logiska namn översätts inte när ett program flyttas mellan miljöer. För Dataverse-systementitet och fältnamn ska det inte vara ett problem eftersom logiska namn är i överensstämmelse med olika miljöer. Alla anpassade fält, t.ex. cra3a_customfield i det här exemplet ovan, kan dock ha olika miljöprefix (cra3a i det här fallet). Visningsnamn är lämpliga eftersom de kan matchas mot visningsnamn i den nya miljön.

Namndisambiguering

Eftersom visningsnamnen inte är unika kan samma visningsnamn visas mer än en gång i samma entitet. När detta inträffar läggs det logiska namnet till i slutet av visningsnamn inom parentes för ett av namnen som står i konflikt. Bygger på exemplet ovan, om det fanns ett andra fält med samma visningsnamn av anpassat fält med ett logiskt namn på cra3a_customfieldalt då visas förslagen:

Studioformelfält som visar användningen av det logiska namnet cr5e3_customfieldalt för att tydliggöra de två versionerna av

Strängar på namndisambiguering läggs till i andra situationer när namnkonflikter uppstår, t.ex. namnen på entiteter, alternativuppsättningar och andra Dataverse-objekt.

Disambigueringsoperator

Vissa funktioner skapar postområden för att få åtkomst till fälten i tabellen när posterna bearbetas, t.ex. Filter, AddColumns och Sum. Fältnamn som lagts till med postområdet åsidosätter samma namn från andra ställen i programmet. När det händer så kan du fortfarande komma åt värden från utanför omfattningsposten med disambigueringsoperatorn @:

  • Om du vill komma åt värden från kapslade postområden använder du operatorn @ med namnet på den tabell som bearbetas, och med hjälp av följande mönster:
    Tabell[@FieldName]
  • Om du vill komma åt globala värden, som datakällor, samlingar och kontextvariabler, använder du mönstret [@ObjectName] (utan tabellbeteckning).

Mer information och exempel finns i postomfång.