Power Fx-tabellen Microsoft

Opmerking

Microsoft Power Fx is de nieuwe naam voor de formuletaal van canvas-apps. Deze artikelen worden uitgevoerd terwijl Microsoft de taal uit canvas-apps extraheert, integreert met andere Microsoft Power Platform producten en deze beschikbaar maakt als open source. Begin met het Microsoft Power Fx-overzicht voor een inleiding in de taal.

Microsoft Power Fx-tabellen ordenen gegevens in records, velden en kolommen uit bronnen zoals Microsoft Excel, SharePoint en SQL Server. Leer deze structuren om formules te schrijven die effectief gegevens in tabelvorm openen, vormgeven en manipuleren.

  • Een record bevat een of meer informatiecategorieën over een persoon, een plaats of een object. Een record kan bijvoorbeeld de naam, het e-mailadres en het telefoonnummer van één klant bevatten. Andere hulpprogramma's verwijzen naar een record als een 'rij' of een 'item'.
  • Een tabel bevat een of meer records met dezelfde informatiecategorieën. Een tabel kan bijvoorbeeld de namen, de e-mailadressen en de telefoonnummers van 50 klanten bevatten.

Net zoals een formule in Excel een of meer celverwijzingen als argumenten heeft, kunt u verschillende formules maken die de naam van een tabel als een argument hebben. Sommige formules in Power Fx retourneren een tabel die de andere argumenten die u opgeeft, weerspiegelen. U maakt bijvoorbeeld een formule:

  • om een record in een tabel bij te werken door deze tabel op te geven als een van meerdere argumenten voor de functie Patch
  • om kolommen in een tabel toe te voegen, te verwijderen en de naam te wijzigen door deze tabel op te geven als een argument voor de functie AddColumns, DropColumns of RenameColumns. Geen van deze functies wijzigt de oorspronkelijke tabel. In plaats daarvan retourneert de functie een andere tabel op basis van de andere argumenten die u hebt opgegeven.

Elementen van een tabel

Schermopname van records, velden en kolommen die een tabel vormen.

Records

Elke record bevat ten minste één informatiecategorie voor een persoon, een plaats of een object. In het eerdere voorbeeld ziet u een record voor elk product (Chocolade, Brood en Water) en een kolom voor elke informatiecategorie (Prijs, Hoeveelheid bij hand en Hoeveelheid op Bestelling).

In een formule kunt u naar een record zelf verwijzen, buiten de context van een tabel, met behulp van accolades. Deze record {{ Name: "Strawberries", Price: 7.99 }} is bijvoorbeeld niet gekoppeld aan een tabel. Houd er rekening mee dat veldnamen zoals Naam en Prijs (in dit voorbeeld) niet tussen dubbele aanhalingstekens komen te staan.

Velden

Een veld is een individueel gedeelte met informatie in een record. U kunt een dergelijk veld visualiseren als een waarde in een kolom voor een bepaalde record.

Net als met een besturingselement verwijst u naar een veld van een record met behulp van de --operator in de record. Zo retourneert bijvoorbeeld First(Products).Name het veld Naam voor de eerste record in de tabel Producten.

Een veld kan een andere record of tabel bevatten, zoals het voorbeeld voor de functie GroupBy weergeeft. U kunt zoveel niveaus van records en tabellen nesten als u wilt.

Kolommen

Een kolom verwijst naar hetzelfde veld voor een of meer records in een tabel. In het voorgaande voorbeeld heeft elk product een prijsveld en die prijs bevindt zich in dezelfde kolom voor alle producten. De voorgaande tabel heeft vier kolommen, die horizontaal aan de bovenkant worden weergegeven:

  • Naam
  • Prijs
  • Hoeveelheid in voorraad
  • Hoeveelheid in order

De naam van de kolom geeft de velden in die kolom weer.

Alle waarden in een kolom zijn van hetzelfde gegevenstype. In het voorgaande voorbeeld bevat de kolom 'Hoeveelheid op voorraad' altijd een getal en kan geen tekenreeks, zoals '12 eenheden', voor één record bevatten. De waarde van een willekeurig veld kan tevens leeg zijn.

Mogelijk hebt u in andere hulpprogramma's naar kolommen verwezen als 'velden'.

Tabel

Een tabel bestaat uit een of meer records, elk met meerdere velden met consistente namen tussen de records.

Een tabel die in een gegevensbron of een verzameling is opgeslagen, heeft een naam. Deze gebruikt u om naar de tabel te verwijzen en deze door te geven aan functies die tabellen als argumenten hebben. Tabellen kunnen ook het resultaat zijn van een functie of een formule.

U kunt een tabel in een formule uitdrukken met behulp van de functie Table met een set records, die u tussen accolades zet, zoals in het volgende voorbeeld:

Table( { Value: "Strawberry" }, { Value: "Vanilla" } )

U kunt ook een tabel met één kolom definiëren met vierkante haken. U kunt het bovenstaande ook als volgt opschrijven:

[ "Strawberry", "Vanilla" ]

Tabelformules

In Excel en Power Fx gebruikt u formules om getallen en tekstreeksen op vergelijkbare wijze te bewerken:

  • Typ in Excel een waarde, zoals 42 in cel A1. Typ vervolgens een formule, zoals A1+2 in een andere cel om de waarde 44 weer te geven.
  • In Power Apps stelt u de eigenschap Default van Slider1 in op 42 en stelt u de eigenschap Text van een label in op Slider1.Value + 2 om de waarde 44 weer te geven.

In beide gevallen wordt de berekende waarde automatisch gewijzigd als u de waarden van de argumenten wijzigt (bijvoorbeeld het getal in cel A1 of de waarde van Slider1).

Op vergelijkbare wijze kunt u formules gebruiken om gegevens in tabellen en records te openen en te bewerken. U kunt namen van tabellen gebruiken als argumenten in sommige formules, zoals Min(Catalog, Price) om de laagste waarde in de kolom Prijs van de tabel Catalogus weer te geven. Andere formules bieden hele tabellen als retourwaarden, zoals RenameColumns(Catalogus, "Prijs", "Kosten"), die alle records uit de tabel Catalogus retourneert, maar de naam van de kolom Prijs in Kosten wijzigt.

Net zoals met getallen worden formules die betrekking hebben op tabellen en records automatisch opnieuw berekend als de onderliggende tabel of record wordt gewijzigd. Als de kosten van een product in de tabel Catalogus onder het vorige minimum worden verlaagd, wordt de geretourneerde waarde van de formule Min automatisch gewijzigd, zodat deze hiermee overeenkomt.

Tabelfuncties en besturingselementeigenschappen

Houd rekening met de functie Lower. Als de variabele welkom de tekenreeks "Hallo Wereld" bevat, geeft de formule Lower( welkom ) de waarde "hallo wereld" als resultaat. Met deze functie wordt de waarde in die variabele niet gewijzigd. Lower is een pure functie omdat deze alleen invoer verwerkt en uitvoer produceert. Dat is alles; er zijn geen bijwerkingen. Alle functies in Excel en de meeste functies in Power Fx zijn zuivere functies, waarmee de werkmap of de app automatisch opnieuw kan worden berekend.

Power Fx biedt een reeks functies die op dezelfde manier op tabellen werken. Deze functies nemen tabellen als invoer en filteren, sorteren, transformeren, verminderen en vatten volledige tabellen met gegevens samen. Het is zelfs zo dat Lower en vele andere functies die doorgaans een enkele waarde hebben, ook een tabel met één kolom als invoer kunnen gebruiken.

Veel functies gebruiken een tabel met één kolom als invoer. Als een hele tabel maar één kolom heeft, kunt u deze bij naam specificeren. Als een tabel meerdere kolommen heeft, kunt u een van die kolommen specificeren met Table.Column-syntaxis. Zo retourneert products.Name de tabel met één kolom van alleen waarden Naam van de tabel Producten.

U kunt een tabel volledig opnieuw vormgeven zoals u wilt door de functie AddColumns, RenameColumns, ShowColumns of DropColumns te gebruiken. Nogmaals, deze functies veranderen alleen hun uitvoer, niet hun bron.

Gedragsformules

Andere functies zijn speciaal ontworpen om gegevens te wijzigen en hebben bijwerkingen. Omdat deze functies niet puur zijn, moet u ze zorgvuldig bouwen en kunnen ze niet deelnemen aan het automatisch herberekenen van waarden in de app. U kunt deze functies alleen gebruiken binnen gedragsformules.

Recordbereik

Sommige functies werken door een formule te evalueren voor alle records van een tabel, één record tegelijk. Het resultaat van de formule wordt op verschillende manieren gebruikt:

  • AddColumns - Formule geeft de waarde voor de nieuwe kolom.
  • Average, Max, Min, Sum, StdevP, VarP: formule levert de waarde om samen te voegen.
  • Filter, Lookup: formule bepaalt of de record moet worden opgenomen in de uitvoer.
  • Concat: formule bepaalt de tekenreeksen die moeten worden samengevoegd.
  • Distinct: formule retourneert een waarde die wordt gebruikt om dubbele records te identificeren.
  • ForAll: formule kan elke waarde retourneren, mogelijk met neveneffecten.
  • Sort: formule geeft de waarde waarop de records moeten worden gesorteerd.
  • With: formule kan elke waarde retourneren, mogelijk met neveneffecten.

In deze formules kunt u verwijzen naar de velden van de record die wordt verwerkt. Elk van deze functies maakt een 'recordbereik' waarin de formule wordt geëvalueerd, waarbij de velden van de record beschikbaar zijn als id's op het hoogste niveau. U kunt in de app ook naar eigenschappen en andere waarden van de besturingselementen verwijzen.

Neem bijvoorbeeld een tabel met Producten die geplaatst zijn in een globale variabele:

Schermopname van de tabel Producten met aangevraagde en beschikbare hoeveelheden.

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 }
    )
)

Om te bepalen of een van deze producten meer aangevraagd heeft dan beschikbaar is:

Filter( Products, 'Quantity Requested' > 'Quantity Available' )

Het eerste argument van Filter is de tabel met records waarop de bewerking wordt toegepast en het tweede argument is een formule. Filter maakt een recordbereik voor het evalueren van deze formule waarin de velden van elke record beschikbaar zijn. Dat zijn in dit geval Product, Quantity Requested en Quantity Available. Het resultaat van de vergelijking bepaalt of elke record moet worden opgenomen in het resultaat van de functie:

Schermopname van een gefilterde tabel Producten waarbij de gevraagde hoeveelheid groter is dan de beschikbare hoeveelheid.

Als u dit voorbeeld toevoegt, kunt u berekenen hoeveel van elk product u wilt bestellen:

AddColumns( 
    Filter( Products, 'Quantity Requested' > 'Quantity Available' ), 
    "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
)

Hier voegt u een berekende kolom toe aan het resultaat. AddColumns heeft een eigen recordbereik dat wordt gebruikt om het verschil te berekenen tussen wat wordt aangevraagd en wat beschikbaar is.

Schermopname van de tabel Producten na het toevoegen van de berekende kolom Quantity To Order.

Ten slotte kunt u de resultaattabel beperken tot alleen de gewenste kolommen:

ShowColumns(
    AddColumns(
        Filter( Products, 'Quantity Requested' > 'Quantity Available' ),
        "Quantity To Order", 'Quantity Requested' - 'Quantity Available'
    ),
    "Product",
    "Quantity To Order"
)

Schermopname van de resultatentabel met alleen kolommen Product en Aantal tot order.

Houd er rekening mee dat u in de voorgaande voorbeelden dubbele aanhalingstekens (") op sommige plaatsen en enkele aanhalingstekens (') op andere plaatsen gebruikt. Enkele aanhalingstekens zijn vereist bij het verwijzen naar de waarde van een object, zoals een veld of tabel, als de naam van het object een spatie bevat. Gebruik dubbele aanhalingstekens wanneer u niet naar de waarde van een object verwijst, maar in plaats daarvan erover praat, met name in situaties waarin het object nog niet bestaat, zoals in het geval van AddColumns.

Ondubbelzinnigheid

Veldnamen die u met het recordbereik toevoegt, overschrijven dezelfde namen van elders in de app. Wanneer deze onderdrukking plaatsvindt, kunt u nog steeds toegang krijgen tot waarden van buiten het recordbereik met behulp van de @ operator voor ondubbelzinnigheid :

  • Als u toegang wilt krijgen tot waarden uit geneste recordbereiken, gebruikt u de @ operator met de naam van de tabel waarop u werkt, volgens dit patroon:
    Tabel[@FieldName]
  • Als u toegang wilt krijgen tot globale waarden, zoals gegevensbronnen, verzamelingen en contextvariabelen, gebruikt u het patroon [@ObjectName] (zonder een tabelaanduiding).

Als de tabel waaraan u werkt een expressie is, zoals Filter(Table, ... ), u kunt de operator voor ondubbelzinnigheid niet gebruiken. Alleen het binnenste recordbereik heeft toegang tot velden uit deze tabelexpressie door de operator voor ondubbelzinnigheid niet te gebruiken.

Stel dat u een verzameling X hebt:

Schermopname van de X-verzameling met de waarden 1 en 2.

U kunt deze verzameling maken met behulp van ClearCollect( X, [1, 2] ).

En een andere verzameling Y:

Schermopname van de Y-verzameling met de waarden A en B.

U kunt deze verzameling maken met behulp van ClearCollect( Y, ["A", "B"] ).

Definieer daarnaast een contextvariabele met de naam Value met deze formule: UpdateContext( {{Value: "!"}} )

Laten we alles combineren. In deze context produceert de volgende formule:

Ungroup(
    ForAll( X,
        ForAll( Y,
            Y[@Value] & Text( X[@Value] ) & [@Value]
        )
    ),
    "Value"
)

de volgende tabel:

Schermopname van het geneste ForAll-resultaat waarin X-, Y- en globale waardegegevens worden gecombineerd.

Wat is er aan de hand? De buitenste ForAll-functie definieert een recordbereik voor X, zodat u toegang hebt tot het waardeveld van elke record terwijl deze wordt verwerkt. U kunt deze openen door simpelweg het woord Waarde of X [@Value] te gebruiken.

De binnenste ForAll-functie definieert een ander recordbereik voor Y. Omdat in deze tabel ook een waardeveld is gedefinieerd, verwijst het gebruik van Waarde hier naar het veld in de record van Y en niet meer naar het veld van X. Als u het veld Waarde van X wilt openen, moet u de langere versie gebruiken met de operator voor ondubbelzinnigheid.

Omdat Y het binnenste recordbereik is, vereist het benaderen van velden van deze tabel geen verdere specificatie, zodat u deze formule kunt gebruiken met hetzelfde resultaat.

Ungroup(
    ForAll( X,
        ForAll( Y,
            Value & Text( X[@Value] ) & [@Value]
        )
    ),
    "Value"
)

Alle recordbereiken ForAll overschrijven het globale bereik. De contextvariabele Waarde die u hebt gedefinieerd, is niet beschikbaar op naam zonder de operator voor ondubbelzinnigheid. Gebruik [@Waarde] voor toegang tot deze waarde.

Ungroup effent het resultaat, omdat geneste functies ForAll resulteren in een geneste resultaattabel.

Tabellen met één kolom

Gebruik de functie ShowColumns zoals in dit voorbeeld om op een enkele kolom van een tabel te werken:

ShowColumns( Products, "Product" )

Deze formule produceert deze tabel met één kolom:

Schermopname van een tabel met één kolom met productwaarden.

Specificeer voor een korter alternatief Table.Column, waarmee de tabel met één kolom van alleen Kolom wordt geëxtraheerd van Tabel. Deze formule levert bijvoorbeeld exact hetzelfde resultaat op als het gebruik van ShowColumns.

Products.Product

Inlinerecords

U drukt records uit met behulp van accolades die veldwaarden met een naam bevatten. U kunt bijvoorbeeld de eerste record in de tabel aan het begin van dit onderwerp uitdrukken met de volgende formule:

{ Name: "Chocolate", Price: 3.95, 'Quantity on Hand': 12, 'Quantity on Order': 10 }

U kunt ook formules in andere formules insluiten, zoals het onderstaande voorbeeld weergeeft:

{ Name: First(Products).Name, Price: First(Products).Price * 1.095 }

U kunt records nesten door accolades te nesten, zoals het volgende voorbeeld weergeeft:

{ 'Quantity': { 'OnHand': ThisItem.QuantOnHand, 'OnOrder': ThisItem.QuantOnOrder } }

Sluit elke kolomnaam die een speciaal teken bevat, zoals een spatie of een dubbele punt, in met enkele aanhalingstekens. Als u een enkel aanhalingsteken in een kolomnaam wilt gebruiken, moet u deze verdubbelen.

Houd er rekening mee dat de waarde in de kolom Prijs geen valutasymbool bevat, zoals een dollarteken. Deze opmaak wordt toegepast wanneer de waarde wordt weergegeven.

Inline tabellen

U kunt een tabel maken met de functie Table en een set records. U kunt de tabel aan het begin van dit onderwerp uitdrukken met de volgende formule:

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 } 
)

U kunt ook tabellen nesten:

Table( 
   { Name: "Chocolate", 
     'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 },
                                { Quarter: "Q2", OnHand: 18, OnOrder: 0 } ) 
   }
)

Inline waardetabellen

U kunt tabellen met één kolom maken door waarden op te geven tussen vierkante haken. De resulterende tabel heeft één kolom met de naam Waarde.

Zo is bijvoorbeeld [ 1, 2, 3, 4 ] equivalent aan Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } ) en retourneert deze tabel:

Schermopname van een tabel inlinewaarde met de getallen 1 tot en met 4.