Informació sobre les taules i registres a aplicacions de llenç

Al Power Apps, podeu crear una aplicació del llenç que accedeixi a la informació del Microsoft Excel, el SharePoint, un servidor SQL i diverses altres fonts que emmagatzemen dades en registres i taules. Per treballar de manera més eficaç amb aquest tipus de dades, reviseu els conceptes en què es basen aquestes estructures.

  • Un registre conté una o diverses categories d'informació d'una persona, d'un lloc o d'una cosa. Per exemple, un registre podria contenir el nom, l'adreça electrònica i el número de telèfon d'un únic client. Altres eines fan referència a un registre com a "fila" o "element".
  • Una taula conté un o diversos registres que contenen les mateixes categories d'informació. Per exemple, una taula podria contenir els noms, adreces electròniques i números de telèfon de 50 clients.

A l'aplicació, haureu d'utilitzar fórmules per crear, actualitzar i manipular registres i taules. Probablement podreu llegir i escriure dades a una font de dades externa, que és una taula ampliada. A més, pot ser que creeu una o diverses taules internes que s'anomenin col·leccions.

Podeu crear una varietat de fórmules que agafin el nom d'una taula com a argument, de la mateixa manera que una fórmula a l'Excel pren una o diverses referències de cel·les com a arguments. Algunes fórmules del Power Apps retornen una taula que reflecteix els altres arguments que especifiqueu. Per exemple, pot ser que creeu una fórmula:

  • Per actualitzar un registre d'una taula especificant la taula com un de diversos arguments per a la funció de Patch
  • Per afegir, suprimir i canviar el nom de les columnes d'una taula especificant la taula com a argument per a la funció AddColumns, DropColumns o RenameColumns. Cap d'aquestes funcions modifica la taula original. En lloc d'això, la funció retorna una altra taula basada en els altres arguments que especifiqueu.

Elements d'una taula

Elements de taula

Registres

Cada registre conté com a mínim una categoria d'informació d'una persona, d'un lloc o d'una cosa. A l'exemple anterior es mostra un registre per a cada producte (Xocolata, Pa i Aigua) i una columna per a cada categoria d'informació (Preu, Quantitat a mà i Quantitat en comanda).

En una fórmula, podeu referir-vos a un registre per ell mateix, fora del context d'una taula, mitjançant claus. Per exemple, aquest registre { Nom: "Maduixes", Preu: 7,99 } no està associat a una taula. Tingueu en compte que els noms de camp, com ara Nom i Preu en aquest exemple, no estan entre cometes dobles.

Camps

Un camp és una informació individual d'un registre. Podeu visualitzar aquest tipus de camp com a valor d'una columna per a un registre concret.

De la mateixa forma que amb un control, es fa referència a un camp d'un registre mitjançant . operador al registre. Per exemple, First(Productes).Name retorna el camp Nom per al primer registre a la taula Productes.

Un camp pot incloure un altre registre o taula, com mostra l'exemple per a la funció GroupBy. Podeu imbricar tants nivells de registres i taules com vulgueu.

Columnes

Una columna fa referència al mateix camp per a un o diversos registres d'una taula. A l'exemple anterior, cada producte té un camp de preu i aquest preu és a la mateixa columna per a tots els productes. La taula anterior té quatre columnes, que es mostren horitzontalment a la part superior:

  • Nom
  • Preu
  • Quantitat disponible
  • Quantitat a la comanda

El nom de la columna reflecteix els camps d'aquesta columna.

Tots els valors dins d'una columna són del mateix tipus de dades. A l'exemple anterior, la columna "Quantitat disponible" sempre conté un nombre i no pot contenir cap cadena, com ara "12 unitats", per a un registre. El valor de qualsevol camp també pot estar en blanc.

És possible que us hàgiu referit a columnes com a "camps" en altres eines.

Nota

Per a les fonts de dades, com ara les del Power BI, del SharePoint o de l'Excel que contenen noms de columna amb espais, el Power Apps substituirà els espais per "_x0020_". Per exemple, "Nom de la columna" a la peça del Power BI, del SharePoint o de l'Excel es mostrarà com a "Column_x0020_Name" al Power Apps quan es visualitzi a la disposició de les dades o s'utilitzi en una fórmula.

Table

Hi ha una taula que inclou un o diversos registres, cadascun dels quals té diversos camps que tenen noms coherents en tots els registres.

Qualsevol taula que s'emmagatzemi en una font de dades o una col·lecció té un nom, que utilitzeu per referir-vos a la taula i passar-la a funcions que tenen taules com a arguments. Les taules també poden ser el resultat d'una funció o d'una fórmula.

Igual que a l'exemple següent, podeu expressar una taula en una fórmula mitjançant la funció Table amb un conjunt de registres que expresseu entre claus:

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

També podeu definir una taula de columna única amb claudàtors. Una manera equivalent d'escriure l'anterior:

[ "Strawberry", "Vanilla" ]

Fórmules de taula

A l'Excel i el Power Apps utilitzeu fórmules per manipular els números i les cadenes de text d'una manera similar:

  • A l'Excel, escriviu un valor, com ara 42, a la cel·la A1 i, a continuació, escriviu una fórmula, com ara A1+2, en una altra cel·la per mostrar el valor 44.
  • Al Power Apps, definiu la propietat Per defecte de Slider1 a 42 i definiu la propietat Text d'una etiqueta a Slider1.Value + 2 per mostrar el valor 44.

En ambdós casos, el valor calculat canvia automàticament si canvieu els valors dels arguments (per exemple, el nombre a la cel·la A1 o el valor de Slider1).

De la mateixa manera, podeu utilitzar fórmules per accedir i manipular dades de taules i registres. Podeu utilitzar els noms de les taules com a arguments en algunes fórmules, com ara Min(Catàleg, Preu) per mostrar el valor més baix a la columna Preu de la taula Catàleg. Altres fórmules proporcionen taules senceres com a valors de retorn, com ara RenameColumns(Catàleg, "Preu", "Cost"), que retorna tots els registres de la taula Catàleg però canvia el nom de la columna Preu a Cost.

De la mateixa manera que amb els nombres, les fórmules que impliquen taules i registres es tornen a calcular automàticament quan canvia la taula o el registre subjacent. Si el cost d'un producte a la taula Catàleg es redueix per sota del mínim anterior, el valor retornat de la fórmula Min canviarà automàticament per fer-ho coincidir.

Vegem alguns exemples senzills.

  1. Creeu una aplicació en blanc per a telèfons i afegiu-hi un control vertical Galeria que contingui altres controls.

    Per defecte, la pantalla mostra el text de contenidor d'una taula anomenada CustomGallerySample. La propietat Elements del control Galeria de la pantalla es defineix automàticament en aquesta taula.

    Galeria

    Nota

    Alguns controls s'ha reorganitzat i ampliat per a propòsits d'il·lustració.

  2. En lloc d'establir la propietat Elements al nom d'una taula, definiu-ho en una fórmula que inclogui el nom de la taula com a argument, com en aquest exemple:

    Sort(CustomGallerySample, SampleHeading, SortOrder.Descending)

    Aquesta fórmula incorpora la funció Sort, que pren el nom d'una taula com a primer argument i el nom d'una columna en aquesta taula com a segon argument. La funció també admet un tercer argument opcional, que estipula que voleu ordenar les dades en ordre descendent.

    Ordenar per galeria.

  3. Definiu la propietat Elements en una fórmula que agafa la fórmula del pas anterior com a argument i torna una taula, com en aquest exemple:

    FirstN(Sort(CustomGallerySample, SampleHeading, SortOrder.Descending), 2)

    En aquesta fórmula, utilitzeu la funció FirstN per mostrar un nombre determinat de registres en una taula. Utilitzeu la funció Sort com a primer argument per a FirstN i un número (en aquest cas, 2) com a segon argument, que especifica la quantitat de registres que es mostraran.

    La fórmula sencera torna una taula que conté els dos primers registres de la taula CustomGallerySample, ordenats per la columna SampleHeading en ordre descendent.

    FirstN per galeria.

Funcions de la taula i propietats de control

Penseu en la funció Lower. Si la variable benvinguda conté la cadena de text "Hola, món", la fórmula Lower( benvinguda ) torna "Hola, món". Aquesta funció no canvia el valor d'aquesta variable de cap manera. Lower és una funció pura ja que només processa l'entrada i produeix una sortida. Això és tot; no té efectes secundaris. Totes les funcions de l'Excel i la majoria de les funcions del Power Apps són funcions pures, que permeten al llibre de treball o a l'aplicació tornar-se a calcular automàticament.

El Power Apps ofereix un conjunt de funcions que operen amb taules de la mateixa manera. Aquestes funcions prenen taules com a entrada i filtren, ordenen, transformen, redueixen i resumeixen taules senceres de dades. De fet, Lower i moltes altres funcions que normalment prenen un valor únic també poden tenir una taula d'una sola columna com a entrada.

  • Sort, Filter: ordena i filtra registres.
  • FirstN, LastN: torna els primers N o els últims N registres de la taula.
  • Abs, Sqrt, Round, RoundUp, RoundDown: operacions aritmètiques en cada registre d'una sola taula de columna, que resulta en una taula d'una sola columna de resultats.
  • Left, Mid, Right, Replace, Substitute, Trim, Lower, Upper, Proper: manipulació de cadenes en cada registre d'una taula d'una sola columna, que resulta en una sola taula de columnes de cadenes.
  • Len: per a una columna de cadenes, torna una taula d'una sola columna que conté la longitud de cada cadena.
  • Concatenate: concatena diverses columnes de cadenes, que resulta en una taula d'una sola columna de cadenes.
  • AddColumns, DropColumns, RenameColumns, ShowColumns: manipulació de columnes de la taula, que resulta en una nova taula amb diferents columnes.
  • Distinct: elimina els registres duplicats.
  • Shuffle: desordena els registres en un ordre aleatori.
  • HashTags: cerca etiquetes superiors en una cadena.
  • Errors: proporciona informació d'errors quan treballeu amb una font de dades.

Moltes d'aquestes funcions tenen una taula d'una sola columna com a entrada. Si una taula sencera només té una columna, la podeu especificar pel seu nom. Si una taula té diverses columnes, podeu especificar una d'aquestes columnes mitjançant la sintaxi Table.Column. Per exemple, Products.Name retorna la taula d'una sola columna de només valors Nom de la taula Productes.

Podeu refer completament la disposició d'una taula com vulgueu mitjançant la funció AddColumns, RenameColumns, ShowColumns o DropColumns. Una vegada més, aquestes funcions canvien només la seva sortida, no l'origen.

Les propietats dels controls també poden ser taules:

  • Elements: s'aplica a galeries, quadres de llista i quadres combinats. Aquesta propietat defineix la taula que mostra la galeria o la llista.
  • SelectedItems: s'aplica a quadres de llista i quadres combinats. Aquesta propietat defineix la taula dels elements que l'usuari ha seleccionat si està habilitat SelectMultiple.

Fórmules de comportament

Altres funcions s'han dissenyat específicament per modificar dades i tenir efectes secundaris. Com que aquestes funcions no són pures, heu de crear-les acuradament i no poden participar en els valors que es tornen a calcular automàticament a l'aplicació. Només podeu utilitzar aquestes funcions dins de fórmules de comportament.

  • Collect, Clear, ClearCollect: crea col·leccions, les esborra i hi afegeix dades.
  • Patch: modifica un o diversos camps d'un registre.
  • Update, UpdateIf: actualitza els registres que corresponen a un o diversos criteris que especifiqueu.
  • Remove, RemoveIf: suprimeix els registres que corresponen a un o diversos criteris que especifiqueu.

Fórmules de registre

També podeu crear una fórmula que calculi les dades d'un registre individual i que tingui un registre individual com a argument i que proporcioni un registre individual com a valor de retorn. Tornant al nostre exemple de galeria anterior, farem servir la propietat Gallery1.Selected per mostrar la informació del registre que l'usuari selecciona en aquesta galeria.

  1. Afegiu un Botó i definiu la propietat OnSelect a aquesta fórmula:
    Collect( SelectedRecord, Gallery1.Selected )

  2. Mentre manteniu premuda la tecla Alt, seleccioneu el botó.

  3. Al menú Fitxer, seleccioneu Col·leccions.

    Col·lecció SelectedRecord

Aquesta fórmula torna un registre que inclou no només les dades del registre que s'ha seleccionat actualment a la galeria, sinó també cada control de la galeria. Per exemple, el registre conté una columna SampleText, que coincideix amb la columna SampleText a la taula original i una columna Subtitle1, que representa l'etiqueta que mostra les dades de la columna. Seleccioneu la icona de la taula a la columna Subtitle1 per desglossar-ne les dades.

Nota

La columna Subtitle1 podria anomenar-se Subtitle2 o similar si heu afegit elements diferents dels que especifica aquest tema.

Ara que teniu el registre seleccionat, podeu extreure els camps individuals de la mateixa amb l'operador . .

  1. Afegiu un control Etiqueta i, a continuació, desplaceu-lo a la galeria i al botó.

  2. Definiu la propietat Text de l'etiqueta en aquesta expressió:
    "Selected: " & Gallery1.Selected.SampleHeading

    Propietat de text amb etiqueta actualitzada

Heu pres la propietat Seleccionat, que és un registre i n'heu extret la propietat SampleHeading.

També podeu utilitzar un registre com a contenidor d'ús general per a valors anomenats relacionats.

  • Si creeu una fórmula al voltant de les funcions UpdateContext i Navigate, utilitzeu un registre per recopilar les variables de context que voleu actualitzar.
  • Utilitzeu la propietat Updates d'un control Edita el formulari per recopilar els canvis que l'usuari ha dut a terme en un formulari.
  • Utilitzeu la funció Patch per actualitzar una font de dades però també per combinar registres.

En aquests casos, el registre mai ha estat part d'una taula.

Funcions de registres i propietats de control

Funcions que retornen registres:

  • FirstN, LastN: torna el primer o últim registre o registres de la taula.
  • Lookup: torna el primer registre d'una taula que coincideix amb un o més criteris.
  • Patch: actualitza una font de dades o combina els registres.
  • Defaults: torna els valors per defecte d'una font de dades.

Propietats que retornen registres:

  • Seleccionat: s'aplica a les galeries i quadres de llista. Retorna el registre seleccionat actualment.
  • Actualitzacions: s'aplica a les galeries. Extreu tots els canvis que fa un usuari en un formulari d'entrada de dades.
  • Actualització: s'aplica als controls d'entrada, com ara controls lliscants i d'entrada de text. Configura les propietats individuals per a la galeria per extreure juntament.

Àmbit de registre

Algunes funcions funcionen avaluant una fórmula en tots els registres d'una taula individualment. El resultat de la fórmula s'utilitza de diverses maneres:

  • AddColumns: la fórmula proporciona el valor del camp afegit.
  • Average, Max, Min, Sum, StdevP, VarP: la fórmula proporciona el valor per agregar.
  • Filter, Lookup: la fórmula determina si el registre s'ha d'incloure a la sortida.
  • Concat: la fórmula determina les cadenes que s'han de concatenar de manera conjunta.
  • Distinct: la fórmula retorna un valor, que s'utilitza per identificar registres duplicats.
  • ForAll: la fórmula pot retornar qualsevol valor, potencialment amb efectes secundaris.
  • Sort: la fórmula proporciona el valor per ordenar els registres.
  • With: la fórmula pot retornar qualsevol valor, potencialment amb efectes secundaris.

Dins d'aquestes fórmules, podeu fer referència als camps del registre que s'està processant. Cadascuna d'aquestes funcions crea un "àmbit de registre" en el qual s'avalua la fórmula, on els camps del registre estan disponibles com a identificadors de nivell superior. També podeu fer referència a les propietats del control i altres valors de tota l'aplicació.

Per exemple, prenem una taula de Productes:

Exemple de productes

Per crear aquesta taula d'exemple a l'aplicació, inseriu un botó, definiu la propietat OnSelect en aquesta fórmula i, a continuació, seleccioneu el botó (feu clic mentre manteniu premuda la tecla Alt al Power Apps Studio):

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

Per determinar si algun d'aquests productes ha estat més sol·licitat del que hi ha disponible:

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

El primer argument per a Filter és la taula de registres per operar i el segon argument és una fórmula. Filter crea un àmbit de registre per avaluar aquesta fórmula en què estan disponibles els camps de cada registre, en aquest cas Producte, Quantitat sol·licitada i Quantitat disponible. El resultat de la comparació determina si cada registre s'ha d'incloure en el resultat de la funció:

Taula filtrada

Afegint a aquest exemple, podem calcular la quantitat de cada producte que voleu ordenar:

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

Aquí estem afegint una columna calculada al resultat. AddColumns té el seu propi àmbit de registre que s'utilitza per calcular la diferència entre el que s'ha sol·licitat i el que està disponible.

Columnes afegides

Finalment, es pot reduir la taula de resultats només a les columnes que volem:

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

Taula actualitzada

Heu de tenir en compte que a l'anterior, hem utilitzat cometes dobles (") en alguns llocs i cometes simples (') en altres llocs. Les cometes simples són necessàries quan es fa referència al valor d'un objecte, com ara un camp o una taula, en el qual el nom de l'objecte conté un espai. Les cometes dobles s'utilitzen quan no fem referència al valor d'un objecte sinó que en parlem, especialment en situacions en què l'objecte encara no existeix, com en el cas d'AddColumns.

Desambiguació

Els noms de camp afegits amb l'àmbit de registre substitueixen els mateixos noms d'altres ubicacions de l'aplicació. Quan això succeeix, encara podeu accedir a valors fora de l'àmbit de registre amb l'operador de @ desambiguació:

  • Per accedir als valors dels àmbits de registre incrustats, utilitzeu l'operador @ amb el nom de la taula que s'utilitza mitjançant aquest patró:
    Taula[@NomDelCamp]
  • Per accedir a valors globals, com ara fonts de dades, col·leccions i variables de context, utilitzeu el patró [@NomObjecte] (sense cap designació de taula).

Si la taula que s'està utilitzant és una expressió, com ara Filter( Taula, ... ), l'operador de desambiguació no es pot utilitzar. Només l'àmbit de registre més intern pot accedir als camps d'aquesta expressió de taula sense utilitzar l'operador de desambiguació.

Per exemple, imagineu tenir una col·lecció X:

Col·lecció X

Podeu crear aquesta col·lecció amb ClearCollect(X, [1, 2] ).

I una altra col·lecció Y:

Col·lecció Y

Podeu crear aquesta col·lecció amb ClearCollect( Y, ["A", "B"] ).

A més, definiu una variable de context anomenada Valor amb aquesta fórmula: UpdateContext( {Valor: "!"} )

Unim-ho tot. En aquest context, la fórmula següent:

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

produeix aquesta taula:

Taula XY

Què està passant aquí? La funció més externa ForAll defineix un àmbit de registre per a X, que permet l'accés al camp Valor de cada registre segons es processi. S'hi pot accedir simplement utilitzant la paraula Valor o utilitzant X[@Value].

La funció més interna ForAll defineix un altre àmbit de registre per a Y. Atès que aquesta taula també té un camp Valor definit, l'ús de Valor aquí fa referència al camp en el registre Y i ja no és el de X . Aquí, per accedir al camp Valor de X, hem d'utilitzar la versió llarga amb l'operador de desambiguació.

Atès que Y és l'àmbit de registre més intern, l'accés als camps d'aquesta taula no requereix desambiguació, la qual cosa ens permet utilitzar aquesta fórmula amb el mateix resultat:

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

Tots els àmbits de registre ForAll substitueixen l'àmbit global. La variable de context Valor que definim no està disponible per nom sense l'operador de desambiguació. Per accedir a aquest valor, utilitzeu [@Value].

Ungroup aplana el resultat, perquè les funcions ForAll imbricades resulten en una taula de resultats imbricats.

Taules d'una sola columna

Per operar en una única columna des d'una taula, utilitzeu la funció ShowColumns com en aquest exemple:

ShowColumns( Products, "Product" )

Aquesta fórmula produeix aquesta taula d'una sola columna:

Taula d'una columna

Per a una alternativa més curta, especifiqueu Table.Column, que extreu la taula d'una sola columna només de Columna de Taula. Per exemple, aquesta fórmula produeix exactament el mateix resultat que utilitzar ShowColumns.

Products.Product

Registres en de línia

Els registres s'expressen mitjançant claus que contenen valors de camp anomenats. Per exemple, podeu expressar el primer registre a la taula que hi ha a l'inici d'aquest tema mitjançant aquesta fórmula:

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

També podeu incrustar fórmules dins d'altres fórmules, en aquest exemple es mostra:

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

Els registres es poden imbricar amb claus, com mostra aquest exemple:

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

Poseu cada nom de columna que contingui un caràcter especial, com ara un espai o dos punts, entre cometes simples. Per utilitzar una única oferta dins d'un nom de columna, feu-les dobles.

Heu de tenir en compte que el valor de la columna Preu no inclou un símbol monetari, com ara un signe de dòlar. Aquest format s'aplicarà quan es mostri el valor.

Taules en línia

Podeu crear una taula mitjançant la funció Table i un conjunt de registres. Podeu expressar la taula que hi ha a l'inici d'aquest tema mitjançant aquesta fórmula:

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

També podeu imbricar taules:

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

Taules amb valors en línia

Podeu crear taules d'una sola columna mitjançant l'especificació de valors entre claudàtors. La taula resultant té una única columna, anomenada Valor.

Per exemple, [ 1, 2, 3, 4 ] és equivalent a Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } ) i torna aquesta taula:

Taula en línia

Nota

Ens podeu dir quines són les vostres preferències d'idioma per a la documentació? Responeu una breu enquesta. (tingueu en compte que l'idioma de l'enquesta és l'anglès)

Trigareu uns set minuts a completar l'enquesta. No es recopilen dades personals (declaració de privadesa).