Compartir a través de


Información sobre tablas y registros de aplicaciones de lienzo

En Power Apps, puede crear una aplicación de lienzo con acceso a información de Microsoft Excel, SharePoint, SQL Server y otros diversos orígenes que almacenan datos en tablas y registros. Para trabajar de forma más eficaz con este tipo de datos, revise los conceptos que subyacen a estas estructuras.

  • Un registro contiene una o varias categorías de información sobre una persona, un lugar o una cosa. Por ejemplo, un registro puede contener el nombre, la dirección de correo electrónico y el número de teléfono de un solo cliente. Otras herramientas se refieren a un registro como "fila" o "elemento".
  • Una tabla contiene uno o varios registros que incluyen las mismas categorías de información. Por ejemplo, una tabla puede contener los nombres, las direcciones de correo electrónico y los números de teléfono de 50 clientes.

En la aplicación, usa fórmulas para crear, actualizar y manipular registros y tablas. Probablemente lea y escriba datos en un origen de datos externo, que es una tabla extendida. Además, podría crear una o varias tablas internas, que se conocen como colecciones.

Puede crear diversas fórmulas que tome el nombre de una tabla como argumento, igual que una fórmula en Excel toma una o varias referencias de celda como argumentos. Algunas fórmulas de Power Apps devuelven una tabla que refleja los demás argumentos que especifique. Por ejemplo, podría crear una fórmula:

  • para actualizar un registro en una tabla mediante la especificación de esa tabla como uno de varios argumentos para la función Patch,
  • para agregar, quitar y cambiar el nombre de las columnas de una tabla mediante la especificación de esa tabla como un argumento para la función AddColumns, DropColumns o RenameColumns. Ninguna de esas funciones modifica la tabla original. En su lugar, la función devuelve otra tabla basada en el resto de los argumentos que se especifiquen.

Elementos de una tabla

Elementos de tabla.

Registros

Cada registro contiene al menos una categoría de información de una persona, lugar o cosa. En el ejemplo anterior se muestra un registro para cada producto (Chocolate, Pan y Agua) y una columna para cada categoría de información (Precio, Cantidad disponible y Cantidad en pedido).

En una fórmula, puede hacer referencia a un registro por sí mismo, fuera del contexto de una tabla, mediante el uso de llaves. Por ejemplo, este registro { Name: "Strawberries", Price: 7.99 } no está asociado a una tabla. Los nombres de campo, como Name y Price en ese ejemplo, no se incluyen entre comillas dobles.

Campos

Un campo es un fragmento de información de un registro. Puede visualizar este tipo de campo como un valor de una columna para un registro concreto.

Tal como sucede con un control, para hacer referencia a un campo de un registro se usa el operador. en el registro. Por ejemplo, First(Products).Name devuelve el campo Nombre para el primer registro de la tabla Productos.

Un campo puede contener otro registro o tabla, como muestra el ejemplo de la función GroupBy. Puede anidar tantos niveles de registros y tablas como desee.

Columnas

Una columna es el mismo campo de uno o más registros de una tabla. En el ejemplo anterior, cada producto tiene un campo de precio y todos los productos comparten la misma columna para ese precio. La tabla anterior tiene cuatro columnas, que se muestran horizontalmente en la parte superior:

  • Nombre
  • Precio
  • Cantidad disponible
  • Cantidad en pedido

El nombre de la columna refleja los campos de esa columna.

Todos los valores dentro de una columna son del mismo tipo de datos. En el ejemplo anterior, la columna "Quantity on Hand" siempre contiene un número y no puede contener una cadena, como "12 unidades", para un registro. El valor de cualquier campo también puede estar en blanco.

Es posible que haya hecho referencia a columnas como "campos" en otras herramientas.

Nota

Para orígenes de datos como los iconos de SharePoint, Excel o Power BI que contienen nombres de columna con espacios, Power Apps reemplaza los espacios por "_x0020_". Por ejemplo, el icono "Nombre de columna" en SharePoint, Excel o Power BI aparece como "Column_x0020_Name" en Power Apps cuando se muestra en el diseño de datos o se usa en una fórmula.

Table

Una tabla consta de uno o varios registros, cada uno con varios campos que tienen nombres coherentes entre los registros.

Use el nombre de la tabla para hacer referencia a cualquier tabla almacenada en un origen de datos o una colección. También puede pasar el nombre de tabla a las funciones que toman tablas como argumentos. Una función o fórmula también puede devolver tablas.

Como se muestra en el ejemplo siguiente, puede expresar una tabla en una fórmula mediante la función Table con un conjunto de registros, los cuales se incluyen entre llaves:

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

También puede definir una tabla de una sola columna mediante corchetes. La expresión siguiente es una manera equivalente de escribir la expresión anterior:

[ "Strawberry", "Vanilla" ]

Fórmulas de tabla

En Excel y Power Apps, las fórmulas se usan para manipular números y cadenas de texto de maneras similares:

  • En Excel, escriba un valor, como 42, en la celda A1 y después escriba una fórmula, como A1+2, en otra celda para mostrar el valor de 44.
  • En Power Apps, establezca la propiedad Default de Slider1 en 42, y establezca la propiedad Text de una etiqueta en Slider1.Value + 2 para mostrar el valor de 44.

En ambos casos, el valor calculado cambia automáticamente si modifica los valores de los argumentos (por ejemplo, el número de la celda A1 o el valor de Slider1).

Del mismo modo, puede usar fórmulas para acceder a datos de tablas y registros y manipularlos. Puede usar nombres de tablas como argumentos en algunas fórmulas, como Min(Catalog, Price), para mostrar el valor mínimo en la columna Precio de la tabla Catálogo. Otras fórmulas proporcionan tablas completas como valores devueltos, como RenameColumns(Catalog, "Price", "Cost"), que devuelve todos los registros de la tabla Catálogo, pero cambia el nombre de la columna Precio a Coste.

Al igual que con los números, las fórmulas que implican tablas y registros se recalculan automáticamente cuando cambian la tabla o el registro subyacente. Si el costo de un producto de la tabla Catálogo se reduce a un valor menor que el mínimo anterior, el valor devuelto de la fórmula Min cambia automáticamente para que coincida.

Se van a analizar algunos ejemplos sencillos.

  1. Cree una aplicación en blanco para un teléfono y agregue un control Galería vertical que contenga otros controles.

    De forma predeterminada, la pantalla muestra texto de marcador de posición de una tabla denominada CustomGallerySample. La propiedad Items del control Galería de la pantalla se establece automáticamente en esa tabla.

    Galería.

    Nota

    Algunos controles se reorganizan y amplían con fines ilustrativos.

  2. En lugar de establecer la propiedad Items con el nombre de la tabla, defina una fórmula que incluya el nombre de la tabla como un argumento, como en este ejemplo:

    Sort(CustomGallerySample, SampleHeading, SortOrder.Descending)

    Esta fórmula incorpora la función Sort, que considera el nombre de una tabla como su primer argumento y el nombre de una columna de dicha tabla como su segundo argumento. La función también admite un tercer argumento opcional, que estipula que desea ordenar los datos en orden descendente.

    Ordenar por galería.

  3. Defina la propiedad Items con una fórmula que considere la fórmula del paso anterior como un argumento y devuelve una tabla, como en este ejemplo:

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

    En esta fórmula, use la función FirstN para mostrar un número concreto de registros de una tabla. Se usa la función Sort como el primer argumento de FirstN y un número (en este caso, 2) como el segundo argumento, que especifica la cantidad de registros que se van a mostrar.

    Toda la fórmula devuelve una tabla que contiene los dos primeros registros de la tabla CustomGallerySample, ordenados por la columna SampleHeading en orden descendente.

    FirstN para la galería.

Funciones de tabla y propiedades de control

Considere la función Lower. Si la variable welcome contiene la cadena de texto "Hello, World", la formula Lower (welcome) devuelve "hello, world". Esta función no cambia el valor de esa variable. Lower es una función pura porque solo procesa la entrada y genera la salida. No tiene efectos secundarios. Todas las funciones de Excel y la mayoría de las funciones de Power Apps son funciones puras, lo que significa que el libro de trabajo o la aplicación se recalculan automáticamente.

Power Apps ofrece un conjunto de funciones que operan en tablas de la misma manera. Estas funciones toman tablas como entrada y filtran, clasifican, transforman, reducen y resumen tablas completas de datos. De hecho, Lower y muchas otras funciones que generalmente toman un solo valor también pueden tomar una tabla de una sola columna como entrada.

  • Ordenar, Filtrar : ordenar y filtrar registros.
  • FirstN, LastN : devuelve los primeros N o los últimos N registros de la tabla.
  • Abs, Sqrt, Round, RoundUp, RoundDown - realice operaciones aritméticas en cada registro de una tabla de una sola columna, lo que da como resultado una tabla de resultados de una sola columna.
  • Left, Mid, Right, Replace, Sustituir, Trim, Lower, Upper, Proper, realizar manipulaciones de cadenas en cada registro de una tabla de una sola columna, obteniendo una tabla de una columna en formato de cadena.
  • Len: para una columna de cadenas, devuelve una tabla de una sola columna que contiene la longitud de cada cadena.
  • Concatenate: concatena varias columnas de cadenas, que resultan en una tabla de cadenas de una sola columna.
  • AddColumns, DropColumns, RenameColumns, ShowColumns : realizar la manipulación de columnas de la tabla, lo que da lugar a una nueva tabla con columnas diferentes.
  • Distinct : quita los registros duplicados.
  • Shuffle: ordena los registros de forma aleatoria.
  • HashTags: busca hashtags en una cadena.
  • Errors : proporciona información de errores cuando se trabaja con un origen de datos.

Muchas de estas funciones toman una tabla de una sola columna como entrada. Si una tabla completa tiene solo una columna, puede especificarla por su nombre. Si una tabla tiene varias columnas, puede especificar una de esas columnas mediante una sintaxis Tabla.Columna. Por ejemplo, Products.Name devuelve la tabla de una sola columna de solo valores Nombre de la tabla Productos.

Puede cambiar completamente la forma de una tabla como desee mediante el uso de la función AddColumns, RenameColumns, ShowColumns o DropColumns. Una vez más, estas funciones solo cambian su salida, no su origen.

Las propiedades de los controles también pueden ser tablas:

  • Items: se aplica a galerías, cuadros de lista y cuadros combinados. Esta propiedad define la tabla que muestra la galería o la lista.
  • SelectedItems: se aplica a galerías, cuadros de lista y cuadros combinados. Esta propiedad define la tabla de elementos que seleccionó el usuario si SelectMultiple está habilitado.

Fórmulas de comportamiento

Algunas funciones están diseñadas específicamente para modificar datos y tienen efectos secundarios. Dado que estas funciones no son puras, debe compilarlas cuidadosamente. No pueden participar en la actualización automática de valores en la aplicación. Puede usar estas funciones únicamente dentro de fórmulas de comportamiento.

  • Collect, Clear, ClearCollect: crea colecciones, las borra y les agrega datos.
  • Patch: modifica uno o más campos en un registro.
  • Update, UpdateIf: actualiza registros que reúnen uno o varios criterios especificados.
  • Remove, RemoveIf: elimina registros que reúnen uno o varios criterios especificados.

Fórmulas de registro

También puede generar una fórmula que calcula los datos de un registro individual, considera un registro individual como un argumento y proporciona un registro individual como un valor devuelto. Al volver al ejemplo de la galería, use la propiedad Gallery1.Selected para mostrar información de cualquier registro que seleccione el usuario en esa galería.

  1. Agregue un botón y establezca su propiedad OnSelect en esta fórmula:
    Collect( SelectedRecord, Gallery1.Selected )

  2. Seleccione el botón mientras mantiene presionada la tecla Alt.

  3. En el menú Archivo, seleccione Colecciones.

    Colección SelectedRecord.

Esta fórmula devuelve un registro que incluye no solo los datos del registro que está seleccionado actualmente en la galería, sino también cada control de dicha galería. Por ejemplo, el registro contiene una columna SampleText que coincide con la columna SampleText de la tabla original y una columna Subtitle1 que representa la etiqueta que muestra los datos de esa columna. Seleccione el icono de tabla de la columna Subtitle1 para profundizar en esos datos.

Nota

La columna Subtitle1 puede denominarse Subtitle2 o similar si agrega elementos distintos de los que especifica este tema.

Ahora que tiene el registro seleccionado, puede extraer campos individuales de él mediante el operador .

  1. Agregue un control Etiqueta y luego muévalo a la galería y el botón.

  2. Establezca la propiedad Text de la etiqueta en esta expresión:
    "Seleccionado: " & Gallery1.Selected.SampleHeading

    Propiedad de texto con etiqueta actualizada.

Has tomado la propiedad Selected, que es un registro, y has extraído su propiedad SampleHeading.

También puede usar un registro como un contenedor de uso general para los valores con nombre relacionados.

  • Si crea una fórmula a partir de las funciones UpdateContext y Navigate, use un registro para recopilar las variables de contexto que desea actualizar.
  • Utilice la propiedad Updates en un control Editar formulario para recopilar los cambios que realiza el usuario en un formulario.
  • Use la función Patch para actualizar un origen de datos, pero también para combinar registros.

En estos casos, el registro nunca formaba parte de una tabla.

Funciones de registro y propiedades de control

Funciones que devuelven registros:

  • FirstN, LastN: devuelve el o los primeros o últimos registros de la tabla.
  • Lookup: devuelve el primer registro de una tabla que coincide con uno o varios criterios.
  • Patch: actualiza un origen de datos o combina registros.
  • Defaults: devuelve los valores predeterminados para un origen de datos.

Propiedades que devuelven registros:

  • Selected: se aplica a galerías y cuadros de lista. Devuelve el registro seleccionado actualmente.
  • Updates: se aplica a las galerías. Reúne todos los cambios que realiza un usuario en un formulario de entrada de datos.
  • Update: se aplica a los controles de entrada, como controles deslizantes y controles de entrada de texto. Configura las propiedades individuales para que se recopilen en la galería.

Ámbito del informe

Algunas funciones funcionan mediante la evaluación de una fórmula en todos los registros de una tabla, un registro cada vez. El resultado de la fórmula se usa de maneras diferentes para cada función:

  • AddColumns : use la fórmula para obtener el valor del nuevo campo que agregue.
  • Average, Max, Min, Sum, StdevP, VarP : use la fórmula para obtener el valor que desea agregar.
  • Filtro, Búsqueda : use la fórmula para decidir si el registro debe formar parte de la salida.
  • Concat : use la fórmula para decidir qué cadenas se van a combinar.
  • Distinct: use la fórmula para devolver un valor que ayude a buscar registros duplicados.
  • ForAll : use la fórmula para devolver cualquier valor, posiblemente con efectos secundarios.
  • Ordenar : use la fórmula para obtener el valor por el que ordenar los registros.
  • Con : use la fórmula para devolver cualquier valor, posiblemente con efectos secundarios.

Dentro de estas fórmulas, puede hacer referencia a los campos del registro en el que está trabajando. Cada una de estas funciones crea un "ámbito de registro" donde se ejecuta la fórmula. Los campos del registro se muestran como identificadores de nivel superior. También puede hacer referencia a propiedades de control y a otros valores desde toda la aplicación.

Por ejemplo, considere una tabla de Productos:

Ejemplo de productos.

Para crear esta tabla de ejemplo en su aplicación, inserte un botón, establezca su propiedad OnSelect en esta fórmula y, a continuación, seleccione el botón (haga clic en él mientras mantiene presionada la tecla Alt en 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 }
    )
)

Para comprobar si alguno de estos productos ha solicitado más de lo que está disponible, use esta fórmula:

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

El primer argumento de Filter es la tabla de registros en la que se va a trabajar. El segundo argumento es una fórmula. Filtro crea un ámbito de registros para evaluar esta fórmula. Los campos de cada registro están disponibles, como Producto, Cantidad solicitada y Cantidad disponible. El resultado de la comparación decide si cada registro debe formar parte del resultado de la función:

Tabla filtrada.

Puede agregar a este ejemplo calculando la cantidad de cada producto que se va a pedir:

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

Aquí, agregas una columna calculada al resultado. AddColumns usa su propio ámbito de registro para calcular la diferencia entre lo que solicitó y lo que está disponible.

Columnas agregadas.

Por último, puede reducir la tabla de resultados a solo las columnas que desee:

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

Tabla actualizada.

En el ejemplo anterior, usó comillas dobles (") en algunos lugares y comillas simples (') en otros lugares. Necesita comillas simples al hacer referencia al valor de un objeto, como un campo o una tabla, y el nombre del objeto contiene un espacio. Use comillas dobles cuando no haga referencia al valor de un objeto, sino que hable de él. Use comillas dobles especialmente en situaciones en las que el objeto aún no existe, como en el caso de AddColumns.

Anulación de ambigüedades

Los nombres de campo que agregue con el ámbito de registro invalidan los mismos nombres de otra parte de la aplicación. Cuando esto sucede, todavía puede acceder a los valores desde fuera del ámbito de registro mediante el @ operador de desambiguación :

  • Para acceder a los valores de los ámbitos de registro anidados, use el operador @ con el nombre de la tabla con la que está trabajando, con este patrón:
    Table[@FieldName]
  • Para acceder a valores globales, como orígenes de datos, colecciones y variables de contexto, use el modelo [@ObjectName] (sin designación de tabla).

Si la tabla en la que está trabajando es una expresión, como Filter(Table, ... ), no se puede usar el operador de desambiguación. Solo el ámbito de registro más interno puede acceder a los campos de esta expresión de tabla, pero sin usar el operador de anulación de ambigüedades.

Por ejemplo, imagine que tiene una colección X:

Colección X.

Puede crear esta colección mediante ClearCollect( X, [1, 2] ).

Y otra colección Y:

Colección Y.

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

Además, defina una variable de contexto denominada Value con esta fórmula: UpdateContext( {Value: "!"} )

Se va a agrupar todo. En este contexto, la fórmula siguiente:

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

genera esta tabla:

Tabla XY.

¿Qué ocurre aquí? La función ForAll más externa define un ámbito de registro para X, lo que permite el acceso al campo Valor de cada registro a medida que procesa. Puede acceder a él simplemente mediante la palabra Value o mediante X[@Value].

La función ForAll más interna define otro ámbito de registro para Y. Dado que esta tabla también tiene definido un campo Value, el uso de Value aquí hace referencia al campo en el registro Y y ya no el de X. Para acceder al campo Valor de X, debe usar la versión más larga con el operador de desambiguación.

Dado que Y es el ámbito de registro más interno, el acceso a los campos de esta tabla no requiere desambiguación, por lo que puede usar esta fórmula con el mismo resultado:

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

Todos los ámbitos de registro ForAll invalidan el ámbito global. La variable de contexto Value definida no está disponible por nombre sin el operador de desambiguación. Para obtener acceso a este valor, use [@Value].

Ungroup acopla el resultado, ya que las funciones ForAll darán como resultado una tabla de resultados anidados.

Tablas de una sola columna

Para operar en una sola columna de una tabla, use la función ShowColumns como en este ejemplo:

ShowColumns( Products, "Product" )

Esta fórmula genera esta tabla de una sola columna:

Tabla de una columna.

Para una alternativa más corta, especifique Table.Column, que extrae la tabla de una sola columna de Columna solamente de Tabla. Por ejemplo, esta fórmula produce exactamente el mismo resultado que el uso de ShowColumns.

Products.Product

Registro en línea

Expresar registros usando corchetes que contienen valores de campos nombrados. Por ejemplo, puede expresar el primer registro en la tabla al inicio de este tema mediante la utilización de la fórmula:

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

También puede insertar fórmulas dentro de otras, como se muestra en este ejemplo:

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

Puede anidar registros mediante llaves de anidación, como se muestra en este ejemplo:

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

Encierre cada nombre de columna que contiene un carácter especial, como un espacio o dos puntos, entre comillas simples. Para usar una comilla simple dentro de un nombre de columna, duplíquela.

Tenga en cuenta que el valor de la columna Precio no incluye ningún símbolo de moneda, como un signo de dólar. Ese formato se aplica cuando se muestra el valor.

Tablas en línea

Cree una tabla mediante la función Table y un conjunto de registros. Puede expresar la tabla al inicio de este tema mediante la utilización de la 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 } 
)

También puede anidar tablas:

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

Tablas de valores en línea

Cree tablas de columna única especificando valores entre corchetes. La tabla resultante tiene una sola columna, denominada Valor.

Por ejemplo, [ 1, 2, 3, 4 ] es equivalente a Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } ) y devuelve esta tabla:

Tabla alineada.