Compartir por


Táboas

Nota

Microsoft Power Fx é o novo nome da linguaxe de fórmulas para aplicacións de lenzo. Estes artigos son un traballo en curso a medida que extraemos o idioma das aplicacións de lenzo, o integramos con outros produtos de Microsoft Power Platform e o poñemos a disposición como código aberto. Comece coa Visión xeral de Microsoft Power Fx para ver unha introdución á lingaxe.

En Microsoft Power Fx, pode escribir unha fórmula que acceda á información de Microsoft Excel, SharePoint, SQL Server e outras fontes que almacenan datos en rexistros e táboas. Para traballar con máis eficacia con este tipo de datos, revise os conceptos que subxacen a estas estruturas.

  • Un rexistro contén unha ou varias categorías de información sobre unha persoa, un lugar ou unha cousa. Por exemplo, un rexistro pode conter o nome, o enderezo de correo electrónico e o número de teléfono dun só cliente. Outras ferramentas fan referencia a un rexistro como "fila" ou "elemento".
  • Unha táboa contén un ou máis rexistros que conteñen as mesmas categorías de información. Por exemplo, unha táboa pode conter os nomes, os enderezos de correo electrónico e os números de teléfono de 50 clientes.

Pode crear unha variedade de fórmulas que toman o nome dunha táboa como argumento, do mesmo xeito que unha fórmula en Excel toma unha ou máis referencias de celas como argumentos. Algunhas fórmulas de Power Fx devolven unha táboa que reflicte os demais argumentos que especifica. Por exemplo, pode crear unha fórmula:

  • para actualizar un rexistro dunha táboa especificando esa táboa como un dos múltiples argumentos para a función Parche
  • para engadir, eliminar e renomear columnas dunha táboa especificando esa táboa como argumento para a función AddColumns, DropColumns ou RenameColumns. Ningunha destas funcións modifica a táboa orixinal. No seu lugar, a función devolve outra táboa baseada nos outros argumentos que especifique.

Elementos dunha táboa

Elementos da táboa.

Rexistros

Cada rexistro contén polo menos unha categoría de información para unha persoa, un lugar ou unha cousa. O exemplo anterior mostra un rexistro para cada produto (Chocolate, Pan e Auga) e unha columna para cada categoría de información (Prezo, Cantidade en man e Cantidade baixo pedido).

Nunha fórmula, pode referirse a un rexistro por si só, fóra do contexto dunha táboa, usando chaves. Por exemplo, este rexistro { Nome: "Amorodos", Prezo: 7,99 } non está asociado a unha táboa. Teña en conta que os nomes de campos, como Nome e Prezo nese exemplo, non están situados entre comiñas dobres.

Campos

Un campo é unha información individual dun rexistro. Pode visualizar este tipo de campo como un valor dunha columna para un rexistro concreto.

Do mesmo xeito que cun control, faga referencia ao campo dun rexistro mediante o .operador no rexistro. Por exemplo, First(Products).Name devolve o campo Nome para o primeiro rexistro da táboa Produtos.

Un campo pode conter outro rexistro ou táboa, como mostra o exemplo para a función GrupoBy. Pode aniñar tantos niveis de rexistros e táboas como desexe.

Columnas

Unha columna fai referencia ao mesmo campo para un ou varios rexistros dunha táboa. No exemplo anterior, cada produto ten un campo de prezo e ese prezo está na mesma columna para todos os produtos. A táboa anterior ten catro columnas, mostradas horizontalmente na parte superior:

  • Nome
  • Prezo
  • Cantidade a man
  • Cantidade en pedido

O nome da columna reflicte os campos desa columna.

Todos os valores dunha columna son do mesmo tipo de datos. No exemplo anterior, a columna "Cantidade dispoñible" sempre contén un número e non pode conter unha cadea, como "12 unidades", para un rexistro. O valor de calquera campo tamén pode estar en branco.

Pode que fixese referencia a columnas como "campos" noutras ferramentas.

Táboa

Unha táboa está composta por un ou máis rexistros, cada un con varios campos que teñen nomes coherentes nos rexistros.

Calquera táboa almacenada nunha orixe de datos ou nunha colección ten un nome, que se utiliza para referirse á táboa e pasala a funcións que toman as táboas como argumentos. As táboas tamén poden ser o resultado dunha función ou dunha fórmula.

Como no seguinte exemplo, pode expresar unha táboa nunha fórmula empregando a función Táboa cun conxunto de rexistros, que se expresan entre chaves:

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

Tamén pode definir unha táboa dunha columna con parénteses cadradas. Unha forma equivalente de escribir o anterior:

[ "Strawberry", "Vanilla" ]

Fórmulas de táboa

En Excel e Power Fx, emprega fórmulas para manipular números e cadeas de texto de formas semellantes:

  • En Excel, escriba un valor, como por exemplo 42, na cela A1 e logo escriba unha fórmula, como A1+2 noutra cela para mostrar o valor de 44.
  • En Power Apps, estableza a propiedade Default de Slider1 en 42 e estableza a propiedade Text dunha etiqueta en Slider1.Value + 2 para amosar o valor de 44.

Nos dous casos, o valor calculado cambia automaticamente se cambia os valores dos argumentos (por exemplo, o número da cela A1 ou o valor de Slider1).

Do mesmo xeito, pode usar fórmulas para acceder e manipular datos en táboas e rexistros. Pode usar nomes de táboas como argumentos nalgunhas fórmulas, como Min(Catalog, Price) para amosar o valor máis baixo da columna Prezo da táboa Catálogo. Outras fórmulas proporcionan táboas enteiras como valores de retorno, como RenameColumns(Catalog, "Price", "Cost"), que devolve todos os rexistros da táboa Catálogo pero cambia o nome da columna Prezo a Custo.

Do mesmo xeito que cos números, as fórmulas que inclúen táboas e rexistros recalcúlanse automaticamente a medida que se modifican as táboas ou rexistros subxacentes. Se o custo dun produto da táboa Catálogo baixa a un nivel inferior ao mínimo anterior, o valor de retorno da fórmula Min cambiará automaticamente para que coincida.

Funcións da táboa e propiedades de control

Considere a función Inferior. Se a variable benvido contén a cadea de texto "Ola, mundo", a fórmula Inferior (benvido) devolve "Ola, mundo". Esta función non modifica de ningún xeito o valor desa variable. Lower é unha función pura, xa que só procesa a entrada e produce saída. Iso é todo; non ten efectos secundarios. Todas as funcións de Excel e a maioría en Power Fx son funcións puras, que permiten recalcular automaticamente o libro de traballo ou a aplicación.

Power Fx ofrece un conxunto de funcións que operan nas táboas do mesmo xeito. Estas funcións toman as táboas como entrada e filtran, ordenar, transforman, reducen e resumen táboas enteiras de datos. De feito, Inferior e moitas outras funcións que normalmente toman un único valor tamén poden tomar unha táboa dunha única columna como entrada.

Moitas funcións toman unha táboa dunha soa columna como entrada. Se unha táboa enteira ten só unha columna, pode especificala polo nome. Se unha táboa ten varias columnas, pode especificar unha desas columnas usando a sintaxe Table.Column. Por exemplo, Products.Name devolve a táboa dunha única columna só de valores de Nome da táboa Produtos.

Pode modificar completamente a forma dunha táboa que queira usando a función AddColumns, RenameColumns, ShowColumns ou DropColumns. Novamente, estas funcións só cambian a súa saída, non a súa fonte.

Fórmulas de comportamento

Outras funcións están deseñadas especificamente para modificar datos e ter efectos secundarios. Debido a que estas funcións non son puras, debe construílas con coidado e non poden participar en recalcular automaticamente os valores da aplicación. Só pode usar estas funcións dentro de fórmulas de comportamento.

Ámbito do rexistro

Algunhas funcións operan avaliando unha fórmula en todos os rexistros dunha táboa individualmente. O resultado da fórmula úsase de varias maneiras:

  • AddColumns : a fórmula proporciona o valor do campo engadido.
  • Media, Máx, Mín, Suma, StdevP, VarP : a fórmula proporciona o valor para agregar.
  • Filtro, Buscar : a fórmula determina se o rexistro debe incluírse na saída.
  • Concat : a fórmula determina as cadeas que se deben concatenar.
  • Distinct : a fórmula devolve un valor que se usa para identificar rexistros duplicados.
  • ForAll : a fórmula pode devolver calquera valor, posiblemente con efectos secundarios.
  • Ordenar : a fórmula proporciona o valor para ordenar os rexistros.
  • Con - Fórmula pode devolver calquera valor, potencialmente con efectos secundarios.

Dentro destas fórmulas, pode facer referencia aos campos do rexistro que se está a procesar. Cada unha destas funcións crea un "ámbito de rexistro" no que se avalía a fórmula, onde os campos do rexistro están dispoñibles como identificadores de nivel superior. Tamén pode facer referencia ás propiedades de control e outros valores desde toda a aplicación.

Por exemplo, tome unha táboa de Produtos colocada nunha variable global:

Táboas solicitadas.

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

Para determinar se algún destes produtos tiña máis solicitudes do que está dispoñible:

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

O primeiro argumento a Filtrar é a táboa de rexistros no que operar, e o segundo argumento é unha fórmula. Filtro crea un ámbito de rexistro para avaliar esta fórmula no que están dispoñibles os campos de cada rexistro, neste caso Produto, Cantidade solicitada e Cantidade dispoñible. O resultado da comparación determina se cada rexistro se debe incluír no resultado da función:

Necesítanse táboas.

Ademais deste exemplo, podemos calcular canto pedir de cada produto:

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

Aquí estamos engadindo unha columna calculada ao resultado. AddColumns ten o seu propio ámbito de rexistro que utiliza para calcular a diferenza entre o que se solicitou e o que está dispoñible.

Engadir columnas.

Finalmente, podemos reducir a táboa de resultados a só as columnas que queremos:

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

Só para encargar.

Teña en conta que nas opcións anteriores, empregamos comiñas dobres (") nalgúns lugares e comiñas simples (') noutros lugares. As comiñas simples son necesarias cando se fai referencia ao valor dun obxecto, como un campo ou táboa, no que o nome do obxecto contén un espazo. As comiñas dobres úsanse cando non estamos facendo referencia ao valor dun obxecto, senón falando del, especialmente en situacións nas que o obxecto aínda non existe, como no caso de AddColumns.

Desambiguación

Os nomes de campos engadidos co ámbito de rexistro anulan os mesmos nomes doutros lugares da aplicación. Cando isto sucede, aínda pode acceder a valores desde fóra do ámbito do rexistro co operador @ disambiguation:

  • Para acceder a valores desde ámbitos de rexistro aniñados, use o operador @ co nome da táboa que se opera ao usar este padrón:
    Táboa[@FieldName]
  • Para acceder a valores globais, como orixes de datos, coleccións e variables de contexto, use o padrón [@ObjectName] (sen designación de táboa).

Se a táboa na que se está operando é unha expresión, como Filtro (Táboa, ... ), o operador de desambiguación non se pode usar. Só o ámbito de rexistro máis interior pode acceder a campos desde esta expresión de táboa ao non usar o operador de desambiguación.

Por exemplo, imaxine dispoñer dunha colección X:

Valor X.

Pode crear esta colección con ClearCollect( X, [1, 2] ).

E outra colección Y:

Valor Y.

Pode crear esta colección con ClearCollect( Y, ["A", "B"] ).

Ademais, defina unha variable de contexto chamada Value con esta fórmula: UpdateContext( {Value: "!"} )

Xuntémolo todo. Neste contexto, a seguinte fórmula:

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

produce esta táboa:

Valor XY.

Que pasa aquí? A función ForAll máis externa define un ámbito de rexistro para X que permite o acceso ao campo Valor de cada rexistro mentres se procesa. Pódese acceder simplemente usando a palabra Valor ou usando X[@Value].

A función ForAll interior define outro ámbito de rexistro para Y. Debido a que esta táboa tamén ten un campo Valor definido, usando Valor aquí fai referencia ao campo dentro do rexistro de Y e xa non ao de X. Aquí, para acceder ao campo Valor de X, debemos usar a versión máis longa co operador de desambiguación.

Debido a que Y é o ámbito de rexistro máis interno, o acceso aos campos desta táboa non require desambiguación, o que nos permite usar esta fórmula co mesmo resultado:

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

Todos os ámbitos de rexistro de ForAll anulan o ámbito global. A variable de contexto Valor que definimos non está dispoñible por nome sen o operador de desambiguación. Para acceder a este valor, use [@Value].

Desagrupar aplana o resultado porque as funcións aniñadas ForAll dan como resultado unha táboa de resultados aniñada.

Táboas dunha soa columna

Para operar nunha única columna desde unha táboa, use a función ShowColumns como neste exemplo:

ShowColumns( Products, "Product" )

Esta fórmula produce esta táboa dunha única columna:

Columna única.

Para obter unha alternativa máis curta, especifique Table.Column, que extrae a táboa de columna única de tan só Columna de Táboa. Por exemplo, esta fórmula produce exactamente o mesmo resultado que ao usar ShowColumns.

Products.Product

Rexistros en liña

Expresa rexistros mediante chaves que conteñen valores de campo con nome. Por exemplo, pode expresar o primeiro rexistro da táboa ao comezo deste tema empregando esta fórmula:

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

Tamén pode incorporar fórmulas a outras fórmulas, como se mostra neste exemplo:

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

Pode aniñar rexistros aniñando chaves, como se mostra neste exemplo:

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

Inclúa cada nome de columna que conteña un carácter especial, como un espazo ou dous puntos, entre comiñas simples. Para usar unha comiña simple dentro dun nome de columna, multiplíquea por dous.

Teña en conta que o valor da columna Prezo non inclúe un símbolo monetario, como o signo do dólar. Ese formato aplicarase cando se amose o valor.

Táboas en liña

Pode crear unha táboa empregando a función Táboa función e un conxunto de rexistros. Pode expresar a táboa ao comezo deste tema empregando esta 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 } 
)

Tamén pode aniñar táboas:

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

Táboas de valores en liña

Pode crear táboas dunha única columna especificando valores entre corchetes. A táboa resultante ten unha única columna, chamada Valor.

Por exemplo, [ 1, 2, 3, 4 ] equivale a Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } ) e devolve esta táboa:

Táboa en liña.