Puede crear una aplicación que tenga acceso a información en Microsoft Excel, SharePoint, SQL Server y otros orígenes diferentes que almacenan datos en registros y tablas. 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 hacen referencia a un registro como una "fila" o un "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, usará fórmulas para crear, actualizar y manipular registros y tablas. Probablemente podrá leer y escribir datos en un origen de datos externo, que es una tabla extendida. Además, puede crear una o varias tablas internas, que se denominan colecciones.

Puede crear una variedad de fórmulas que usan el nombre de una tabla como argumento, al igual que las fórmulas de Excel consideran una o varias referencias de celda como argumentos. Algunas fórmulas de PowerApps devuelven una tabla que refleja el resto de los argumentos que se especifiquen. 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 Revisión,
  • 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 AgregarColumnas, EliminarColumnas o CambiarNombreColumnas. 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

Registros

Cada registro contiene al menos una categoría de información sobre una persona, un lugar o una cosa. El ejemplo anterior 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 { Nombre: "Fresas", Precio: 7,99 } no está asociado a una tabla.

Campos

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

Igual que con un control, puede hacer referencia a un campo de un registro mediante ., que es el operador en el registro. Por ejemplo, Primero(Productos).Nombre 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 AgruparPor. Puede anidar tantos niveles de registros y tablas como desee.

Columnas

Una columna hace referencia al mismo campo de uno o varios registros de una tabla. En el ejemplo anterior, cada producto tiene un campo de precio, y el precio está en la misma columna para todos los productos. 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 dicha columna.

Todos los valores de una columna son del mismo tipo de datos. En el ejemplo anterior, la columna "Cantidad disponible" 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 aparecer en blanco.

Es posible que en otras herramientas haya hecho referencia a las columnas con el término "campos".

Tabla

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

Cualquier tabla almacenada en un origen de datos o en un colección tiene un nombre, que se usa para hacer referencia a la tabla y para pasarlo a funciones que consideran las tablas como argumentos. Las tablas también pueden resultar de una función o de una fórmula.

Como en el ejemplo siguiente, puede expresar una tabla en una fórmula mediante la utilización de la función Tabla con un conjunto de registros, que se expresa entre llaves:

Tabla( { Valor: "Fresa" }, { Valor: "Vainilla" } )

También puede definir una tabla de una sola columna entre corchetes. Una manera equivalente de escribir lo anterior:

[ "Fresa", "Vainilla" ]

Fórmulas de tabla

En Excel y PowerApps, las fórmulas se usan para manipular números y cadenas de texto de formas 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 PowerApps, establezca la propiedad Valor predeterminado de Slider1 en 42, y defina la propiedad Texto 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(Catálogo, Precio), 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 CambiarNombreColumnas(Catálogo, "Precio", "Coste"), 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 relacionadas con tablas y registros se recalculan automáticamente a medida que el registro o la tabla subyacentes cambian. Si el coste de un producto de la tabla Catálogo está muy por debajo del mínimo anterior, el valor devuelto de la fórmula Min cambiará automáticamente para establecer la coincidencia.

Se van a analizar algunos ejemplos sencillos.

  1. Agregue un control Galería de texto y establezca su propiedad Elementos con el nombre de una tabla.

    De forma predeterminada, la galería muestra texto de marcador de posición de una tabla denominada EjemploGaleríaTextual. La propiedad Elementos de la galería se establece automáticamente en dicha tabla.

    Nota: algunos controles se han reorganizado y ampliado con fines meramente ilustrativos.

  2. En lugar de establecer la propiedad Elementos con el nombre de la tabla, defina una fórmula que incluya el nombre de la tabla como un argumento, como en este ejemplo:
    Ordenar(EjemploGaleríaTextual, Encabezado, Descendente)

    Esta fórmula incorpora la función Ordenar, 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.

  3. Defina la propiedad Elementos con una fórmula que considere la fórmula del paso anterior como un argumento y devuelve una tabla, como en este ejemplo:
    FirstN(Ordenar(EjemploGaleríaTextual, Encabezado, Descendente), 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 Ordenar 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 EjemploGaleríaTextual, ordenados en función de la columna Encabezado en orden descendente.

Funciones de tabla y propiedades de control

Muchas funciones de PowerApps consideran el nombre de una tabla como un argumento, crean una segunda tabla que contiene los mismos datos, manipulan la tabla nueva en función de los otros argumentos y después devuelven el resultado. Estas funciones no modifican la tabla original, ni siquiera si se trata de un origen de datos.

Puede ejecutar una función en una tabla que contiene varias columnas, incluso si la función requiere una sola columna como un argumento. Para extraer una única columna de una tabla de varias columnas, use la función MostrarColumnas como un argumento para la función que va a utilizar, como en este ejemplo:
Minusc( MostrarColumnas( Productos, "Nombre" ) )

Esta fórmula crea una tabla de una sola columna que contiene todos los datos de la columna Nombre de la tabla Productos, pero convierte las letras mayúsculas a minúsculas. Si especifica una tabla como un argumento para la función AgregarColumnas, CambiarNombreColumnas o EliminarColumnas, puede volver a dar forma completamente a la tabla deseada.

Si especifica un origen de datos como un argumento para una de estas funciones, modificará los registros de ese origen de datos y, por lo general, devolverá el nuevo valor del origen de datos como una tabla.

Los siguientes controles tienen propiedades que son tablas:

  • Elementos: se aplica a galerías y cuadros de lista. Tabla que se va a mostrar en la galería.
  • ElementosSeleccionados: se aplica a cuadros de lista. Tabla de elementos que el usuario ha seleccionado.

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 anterior de la galería, se usa la propiedad Galería1.Seleccionada para mostrar información de cualquier registro que el usuario selecciona en la galería.

  1. Agregue un botón y establezca su propiedad OnSelect en esta fórmula:
    Recopilar( RegistroSeleccionado, Galería1.Seleccionada )
  2. Si el botón no está seleccionado, haga clic en él para seleccionarlo y después vuelva a hacer clic en él para ejecutar la fórmula.
  3. En el menú Archivo, seleccione Colecciones.

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 Cuerpo que coincide con la columna Cuerpo de la tabla original, y una columna Cuerpo1, que representa la etiqueta que muestra los datos de esa columna. Seleccione el icono de tabla en la columna Cuerpo1 para profundizar en dichos datos.

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

  1. Presione Esc para volver al área de trabajo predeterminada y después agregue una etiqueta debajo de la galería.

  2. Defina la propiedad Texto de la etiqueta con esta fórmula:
    Galería.Seleccionada.Encabezado

Ha usado la propiedad Seleccionada, que es un registro, y ha extraído la propiedad Encabezado de ahí.

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

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.
  • Búsqueda: devuelve el primer registro de una tabla que coincide con uno o varios criterios.
  • Revisión: actualiza un origen de datos o combina registros.
  • Predeterminado: devuelve los valores predeterminados para un origen de datos.

Propiedades que devuelven registros:

  • Seleccionado: se aplica a galerías y cuadros de lista. Devuelve el registro seleccionado actualmente.
  • Actualizaciones: se aplica a las galerías. Reúne todos los cambios que realiza un usuario en un formulario de entrada de datos.
  • Actualizar: 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 se aplican mediante la evaluación de una fórmula en todos los registros de una tabla de forma individual. El resultado de la fórmula se utiliza de varias maneras:

  • Filtrar, Búsqueda: la fórmula determina si el registro debe incluirse en la salida.
  • Ordenar: la fórmula ofrece el valor en función del cual ordenar los registros.
  • Concatenar: la fórmula determina las cadenas que se deben concatenar.
  • ParaTodo: la fórmula puede devolver cualquier valor, posiblemente con un efecto secundario.
  • Distinto: la fórmula devuelve un valor, que se usa para identificar registros duplicados.
  • AgregarColumnas: la fórmula proporciona el valor del campo agregado.
  • Media, Max, Min, Sum, DesvesTP, VarP: la fórmula proporciona el valor que se va a agregar.

Dentro de estas fórmulas, puede hacer referencia a los campos del registro que se va a procesar. Cada una de estas funciones crea un "ámbito de registro" en el que se evalúa la fórmula, donde los campos del registro están disponibles como identificadores de primer nivel. También puede hacer referencia a propiedades de control y a otros valores en toda la aplicación.

Por ejemplo, considere una tabla de Productos:

Para determinar si se había solicitado más cantidad de alguno de estos productos de la que se encuentra disponible:

Filtrar( Productos, 'Cantidad en pedido' > 'Cantidad disponible' )

El primer argumento para Filtrar es la tabla de registros en los que operar, y el segundo argumento es una fórmula. Filtrar crea un ámbito de registro para evaluar esta fórmula en la que están disponibles los campos de cada registro; en este caso, Producto, Cantidad en pedido y Cantidad disponible. El resultado de la comparación determina si cada registro debe incluirse en el resultado de la función:

Según este ejemplo, podemos calcular qué cantidad de cada producto solicitar:

AgregarColumnas( Filtrar( Productos, 'Cantidad en pedido' > 'Cantidad disponible' ), "Cantidad para solicitar", 'Cantidad en pedido' - 'Cantidad disponible' )

A continuación, se va a agregar una columna calculada al resultado. AgregarColumnas tiene su propio ámbito de registro que se utiliza para calcular la diferencia entre lo que se ha solicitado y lo que está disponible.

Por último, se puede reducir la tabla de resultados a solo las columnas deseadas:

MostrarColumnas( AgregarColumnas( Filtrar( Productos, 'Cantidad en pedido' > 'Cantidad disponible' ), "Cantidad para solicitar", 'Cantidad en pedido' - 'Cantidad disponible' ), "Producto", "Cantidad para solicitar" )

Tenga en cuenta que en la fórmula anterior, se han usado comillas dobles (") en algunos casos y comillas simples (') en otros. Las comillas simples son necesarias cuando se hace referencia al valor de un objeto, como un campo o una tabla, donde el nombre del objeto contiene un espacio. Las comillas dobles se usan cuando no se hace referencia al valor de un objeto, sino que se habla de él, sobre todo en situaciones en que el objeto todavía no existe, como en el caso de AgregarColumnas.

Anulación de ambigüedades

Los nombres de campo agregados con el ámbito de registro anulan los mismos nombres de los restantes lugares de la aplicación. Cuando esto sucede, para acceder a los valores desde fuera del ámbito de registro hay que utilizar el operador @ de anulación de ambigüedades:

  • Para acceder a los valores desde ámbitos de registro anidados, utilice el operador @ con el nombre de la tabla en la que opera y use el patrón Tabla[@NombreCampo].
  • Para acceder a los valores globales, como orígenes de datos, colecciones y variables de contexto, use el patrón [@NombreObjeto] (sin designar ninguna tabla).

Si la tabla en la que se opera es una expresión, como Filtrar( tabla, ... ), entonces no se puede utilizar el operador de anulación de ambigüedades. 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:

Puede crear esta colección con BorrarColección( X, [1, 2] ).

Y otra colección Y:

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

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

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

  • Desagrupar( ParaTodo( X, ParaTodo( Y, Y[@Value] & Texto( X[@Value] ) & [@Value] ) ), "Valor" )

genera esta tabla:

¿Qué sucede aquí? La función ParaTodo más externa define un ámbito de registro para X, que permite acceder al campo Valor de cada registro a medida que se procesa. Puede acceder a él con tan solo usar la palabra Valor o X[@Value].

La función ParaTodo más interna define otro ámbito de registro para Y. Puesto que esta tabla también tiene un campo Valor definido, el uso de Valor aquí hace referencia al campo del registro de Y y ya no hace referencia al de X. Aquí, para acceder al campo Valor de X, es necesario usar la versión más larga con el operador de anulación de ambigüedades.

Puesto que Y es el ámbito de registro más interno, el acceso a los campos de esta tabla no precisa de la anulación de desambigüedades, lo que permite usar esta fórmula con el mismo resultado:

  • Desagrupar( ParaTodo( X, ParaTodo( Y, Valor & Texto( X[@Value] ) & [@Value] ) ), "Valor" )

Todos los ámbitos de registro ParaTodo invalidan el ámbito global. La variable de contexto Valor definida no está disponible por su nombre sin el operador de anulación de ambigüedades. Para acceder a este valor, es necesario usar [@Value].

Desagrupar acopla el resultado, ya que las funciones ParaTodo anidadas darán como resultado una tabla de resultados anidados.

Sintaxis en línea

Registros

Exprese registros con el uso de llaves que contienen valores de campo con nombre. Por ejemplo, puede expresar el primer registro en la tabla al inicio de este tema mediante la utilización de la fórmula:

{ Nombre: "Chocolate", Precio: 3,95, 'Cantidad disponible': 12, 'Cantidad en pedido': 10 }

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

{ Nombre: Primero(Productos).Nombre, Precio: Primero(Productos).Precio * 1095 }

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

{ 'Cantidad': { 'Disponible': EsteElemento.CantidadDisponible, 'EnPedido': EsteElemento.CantEnPedido } }

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. Dicho formato se aplicará cuando se muestre el valor.

Tablas

Puede crear una tabla mediante la utilización de la función Tabla y un conjunto de registros. Puede expresar la tabla al inicio de este tema mediante la utilización de la fórmula:

Tabla( { Nombre: "Chocolate", Precio: 3,95, 'Cantidad disponible': 12, 'Cantidad en pedido': 10 },
            { Nombre: "Pan", Precio: 4,95, 'Cantidad disponible': 34, 'Cantidad en pedido': 0 },
            { Nombre: "Agua", Precio: 4,95, 'Cantidad disponible': 10, 'Cantidad en pedido': 0 } )

También puede anidar tablas:

Tabla( { Nombre: "Chocolate",
            'Historial de cantidad': Tabla( { Trimestre: "T1", Disponible: 10, EnPedido: 10 },
                        { Trimestre: "T2", Disponible: 18, EnPedido: 0 } ) } )

Tablas de valores

Puede crear tablas de una sola columna mediante la definición de valores entre corchetes. La tabla resultante tiene una sola columna, denominada Valor.

Por ejemplo, [ 1, 2, 3, 4 ] equivale a Tabla( { Valor: 1 }, { Valor: 2 }, { Valor: 3 }, { Valor: 4 } ) y devuelve esta tabla: