Información sobre tablas y registros de PowerAppsUnderstand tables and records in PowerApps

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.You can create an app that accesses information in Microsoft Excel, SharePoint, SQL Server, and several other sources that store data in records and tables. Para trabajar de forma más eficaz con este tipo de datos, revise los conceptos que subyacen a estas estructuras.To work most effectively with this kind of data, review the concepts that underlie these structures.

  • Un registro contiene una o varias categorías de información sobre una persona, un lugar o una cosa.A record contains one or more categories of information about a person, a place, or a thing. 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.For example, a record might contain the name, the email address, and the phone number of a single customer. Otras herramientas hacen referencia a un registro como una "fila" o un "elemento".Other tools refer to a record as a "row" or an "item."
  • Una tabla contiene uno o varios registros que incluyen las mismas categorías de información.A table holds one or more records that contain the same categories of information. Por ejemplo, una tabla puede contener los nombres, las direcciones de correo electrónico y los números de teléfono de 50 clientes.For example, a table might contain the names, the email addresses, and the phone numbers of 50 customers.

En la aplicación, usará fórmulas para crear, actualizar y manipular registros y tablas.In your app, you'll use formulas to create, update, and manipulate records and tables. Probablemente podrá leer y escribir datos en un origen de datos externo, que es una tabla extendida.You'll probably read and write data to an external data source, which is an extended table. Además, puede crear una o varias tablas internas, que se denominan colecciones.In addition, you might create one or more internal tables, which are called collections.

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.You can build a variety of formulas that take the name of a table as an argument, just as a formula in Excel takes one or more cell references as arguments. Algunas fórmulas de PowerApps devuelven una tabla que refleja el resto de los argumentos que se especifiquen.Some formulas in PowerApps return a table that reflects the other arguments that you specify. Por ejemplo, podría crear una fórmula:For example, you might create a formula:

  • 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,to update a record in a table by specifying that table as one of multiple arguments for the Patch function
  • 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.to add, remove, and rename columns in a table by specifying that table as an argument for the AddColumns, DropColumns, or RenameColumns function. Ninguna de esas funciones modifica la tabla original.None of those functions modifies the original table. En su lugar, la función devuelve otra tabla basada en el resto de los argumentos que se especifiquen.Instead, the function returns another table based on the other arguments that you specify.

Elementos de una tablaElements of a table

RegistrosRecords

Cada registro contiene al menos una categoría de información sobre una persona, un lugar o una cosa.Each record contains at least one category of information for a person, a place, or a thing. 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).The example above shows a record for each product (Chocolate, Bread, and Water) and a column for each category of information (Price, Quantity on Hand, and Quantity on Order).

En una fórmula, puede hacer referencia a un registro por sí mismo, fuera del contexto de una tabla, mediante el uso de llaves.In a formula, you can refer to a record by itself, outside of a table's context, by using curly braces. Por ejemplo, este registro { Nombre: "Fresas", Precio: 7,99 } no está asociado a una tabla.For example, this record { Name: "Strawberries", Price: 7.99 } isn't associated with a table.

CamposFields

Un campo es un elemento individual de información de un registro.A field is an individual piece of information in a record. Puede visualizar este tipo de campo como un valor de una columna para un registro concreto.You can visualize this sort of field as a value in a column for a particular record.

Igual que con un control, puede hacer referencia a un campo de un registro mediante .,Just as with a control, you refer to a field of a record by using the . que es el operador en el registro.operator on the record. Por ejemplo, Primero(Productos).Nombre devuelve el campo Nombre para el primer registro de la tabla Productos.For example, First(Products).Name returns the Name field for the first record in the Products table.

Un campo puede contener otro registro o tabla, como muestra el ejemplo de la función AgruparPor.A field can contain another record or table, as the example for the GroupBy function shows. Puede anidar tantos niveles de registros y tablas como desee.You can nest as many levels of records and tables as you want.

ColumnasColumns

Una columna hace referencia al mismo campo de uno o varios registros de una tabla.A column refers to the same field for one or more records in a table. En el ejemplo anterior, cada producto tiene un campo de precio, y el precio está en la misma columna para todos los productos.In the above example, each product has a price field, and that price is in the same column for all products. La tabla anterior tiene cuatro columnas, que se muestran horizontalmente en la parte superior:The above table has four columns, shown horizontally across the top:

  • NombreName
  • PrecioPrice
  • Cantidad disponibleQuantity on Hand
  • Cantidad en pedidoQuantity on Order

El nombre de la columna refleja los campos de dicha columna.The column's name reflects the fields in that column.

Todos los valores de una columna son del mismo tipo de datos.All values within a column are of the same data type. 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.In the above example, the "Quantity on Hand" column always contains a number and can't contain a string, such as "12 units," for one record. El valor de cualquier campo también puede aparecer en blanco.The value of any field may also be blank.

Es posible que en otras herramientas haya hecho referencia a las columnas con el término "campos".You may have referred to columns as "fields" in other tools.

Nota: Para orígenes de datos de SharePoint y Excel que contienen nombres de columna con espacios, PowerApps los sustituye por "_x0020_".Note: For SharePoint and Excel data sources that contain column names with spaces, PowerApps will replace the spaces with "_x0020_". Por ejemplo, "Nombre de columna" en SharePoint o Excel aparecerá como "Nombre_x0020_de_columna" en PowerApps cuando se muestre en el diseño de datos o se use en una fórmula.For example, "Column Name" in SharePoint or Excel will appear as "Column_x0020_Name" in PowerApps when displayed in the data layout or used in a formula.

TablaTable

Una tabla consta de uno o varios registros, cada uno con varios campos que tienen nombres coherentes entre los registros.A table comprises one or more records, each with multiple fields that have consistent names across the records.

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.Any table that's stored in a data source or a collection has a name, which you use to refer to the table and pass it to functions that take tables as arguments. Las tablas también pueden resultar de una función o de una fórmula.Tables can also be the result of a function or a formula.

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:As in the following example, you can express a table in a formula by using the Table function with a set of records, which you express in curly braces:

Tabla( { Valor: "Fresa" }, { Valor: "Vainilla" } )Table( { Value: "Strawberry" }, { Value: "Vanilla" } )

También puede definir una tabla de una sola columna entre corchetes.You can also define a single-column table with square brackets. Una manera equivalente de escribir lo anterior:An equivalent way to write the above:

[ "Fresa", "Vainilla" ][ "Strawberry", "Vanilla" ]

Fórmulas de tablaTable formulas

En Excel y PowerApps, las fórmulas se usan para manipular números y cadenas de texto de formas similares:In Excel and PowerApps, you use formulas to manipulate numbers and strings of text in similar ways:

  • 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.In Excel, type a value, such as 42, in cell A1, and then type a formula, such as A1+2, in another cell to show the value of 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.In PowerApps, set the Default property of Slider1 to 42, and set the Text property of a label to Slider1.Value + 2 to show the value of 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).In both cases, the calculated value changes automatically if you change the values of the arguments (for example, the number in cell A1 or the value of Slider1).

Del mismo modo, puede usar fórmulas para acceder a datos de tablas y registros y manipularlos.Similarly, you can use formulas to access and manipulate data in tables and records. 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.You can use names of tables as arguments in some formulas, such as Min(Catalog, Price) to show the lowest value in the Price column of the Catalog table. 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.Other formulas provide whole tables as return values, such as RenameColumns(Catalog, "Price", "Cost"), which returns all the records from the Catalog table but changes the name of the Price column to Cost.

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.Just as with numbers, formulas that involve tables and records are automatically recalculated as the underlying table or record changes. 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.If the cost of a product in the Catalog table is lowered below the previous minimum, the return value of the Min formula will automatically change to match it.

Se van a analizar algunos ejemplos sencillos.Let's walk through some simple examples.

  1. Agregue un control Galería de texto y establezca su propiedad Elementos con el nombre de una tabla.Add a Text gallery control, and set its Items property to the name of a table.

    De forma predeterminada, la galería muestra texto de marcador de posición de una tabla denominada EjemploGaleríaTextual.By default, the gallery shows placeholder text from a table named TextualGallerySample. La propiedad Elementos de la galería se establece automáticamente en dicha tabla.The Items property of the gallery is automatically set to that table.

    Nota: algunos controles se han reorganizado y ampliado con fines meramente ilustrativos.Note: Some controls have been rearranged and enlarged for illustration purposes.

  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:Instead of setting the Items property to the name of a table, set it to a formula that includes the name of the table as an argument, as in this example:
    Ordenar(EjemploGaleríaTextual, Encabezado, Descendente) Sort(TextualGallerySample, Heading, Descending)

    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.This formula incorporates the Sort function, which takes the name of a table as its first argument and the name of a column in that table as its second argument. La función también admite un tercer argumento opcional, que estipula que desea ordenar los datos en orden descendente.The function also supports an optional third argument, which stipulates that you want to sort the data in descending order.

  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:Set the Items property to a formula that takes the formula from the previous step as an argument and returns a table, as in this example:
    FirstN(Ordenar(EjemploGaleríaTextual, Encabezado, Descendente), 2) FirstN(Sort(TextualGallerySample, Heading, Descending), 2)

    En esta fórmula, use la función FirstN para mostrar un número concreto de registros de una tabla.In this formula, you use the FirstN function to show a particular number of records in a table. 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.You use the Sort function as the first argument to FirstN and a number (in this case, 2) as the second argument, which specifies how many records to show.

    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.The entire formula returns a table that contains the first two records of the TextualGallerySample table, sorted by the Heading column in descending order.

Funciones de tabla y propiedades de controlTable functions and control properties

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.Many functions in PowerApps take the name of a table as an argument, create a second table that contains the same data, manipulate the new table based the other arguments, and then return the result. Estas funciones no modifican la tabla original, ni siquiera si se trata de un origen de datos.These functions don't modify the original table, even if it's a data source.

Puede ejecutar una función en una tabla que contiene varias columnas, incluso si la función requiere una sola columna como un argumento.You can run a function on a table that contains multiple columns, even if the function requires a single column as an argument. 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:To extract a single column from a multi-column table, use the ShowColumns function as an argument for the function that you want to use, as in this example:
Minusc( MostrarColumnas( Productos, "Nombre" ) )Lower( ShowColumns( Products, "Name" ) )

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.This formula creates a single-column table that contains all the data from the Name column of the Products table but converts any uppercase letters to lowercase letters. 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.If you specify a table as an argument for the AddColumns, RenameColumns, or DropColumns function, you can completely reshape that table however you want.

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.If you specify a data source as an argument for one of these functions, it will modify the records of that data source and, in general, return the data source's new value as a table.

Los siguientes controles tienen propiedades que son tablas:The following controls have properties that are tables:

  • Elementos: se aplica a galerías y cuadros de lista.Items - Applies to galleries and list boxes. Tabla que se va a mostrar en la galería.Table to display in the gallery.
  • ElementosSeleccionados: se aplica a cuadros de lista.SelectedItems - Applies to list boxes. Tabla de elementos que el usuario ha seleccionado.Table of items that the user has selected.

Fórmulas de registroRecord formulas

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.You can also build a formula that calculates data for an individual record, takes an individual record as an argument, and provides an individual record as a return value. 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.Returning to our gallery example above, let's use the Gallery1.Selected property to display information from whatever record the user selects in that gallery.

  1. Agregue un botón y establezca su propiedad OnSelect en esta fórmula:Add a button, and set its OnSelect property to this formula:
    Recopilar( RegistroSeleccionado, Galería1.Seleccionada )Collect( SelectedRecord, Gallery1.Selected )
  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.If the button isn't selected, click it to select it, and then click it again to run the formula.
  3. En el menú Archivo, seleccione Colecciones.In the File menu, select Collections.

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.This formula returns a record that includes not only the data from the record that's currently selected in the gallery but also each control in that gallery. 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.For example, the record contains both a Body column, which matches the Body column in the original table, and a Body1 column, which represents the label that shows the data from that column. Seleccione el icono de tabla en la columna Cuerpo1 para profundizar en dichos datos.Select the table icon in the Body1 column to drill into that data.

Ahora que tiene el registro seleccionado, puede extraer campos individuales de él con el operador .Now that you have the selected record, you can extract individual fields from it with the . .operator.

  1. Presione Esc para volver al área de trabajo predeterminada y después agregue una etiqueta debajo de la galería.Press Esc to return to the default workspace, and then add a label below the gallery.
  2. Defina la propiedad Texto de la etiqueta con esta fórmula:Set the Text property of the label to this formula:
    Galería.Seleccionada.EncabezadoGallery.Selected.Heading

Ha usado la propiedad Seleccionada, que es un registro, y ha extraído la propiedad Encabezado de ahí.You've taken the Selected property, which is a record, and extracted the Heading property from it.

También puede usar un registro como un contenedor de uso general para los valores con nombre relacionados.You can also use a record as a general-purpose container for related named values.

En estos casos, el registro nunca formaba parte de una tabla.In these cases, the record was never a part of a table.

Funciones de registro y propiedades de controlRecord functions and control properties

Funciones que devuelven registros:Functions that return records:

  • FirstN, LastN: devuelve el o los primeros o últimos registros de la tabla.FirstN, LastN - Returns the first or last record or records of the table.
  • Búsqueda: devuelve el primer registro de una tabla que coincide con uno o varios criterios.Lookup - Returns the first record from a table that matches one or more criteria.
  • Revisión: actualiza un origen de datos o combina registros.Patch - Updates a data source or merges records.
  • Predeterminado: devuelve los valores predeterminados para un origen de datos.Defaults - Returns the default values for a data source.

Propiedades que devuelven registros:Properties that return records:

  • Seleccionado: se aplica a galerías y cuadros de lista.Selected - Applies to galleries and list boxes. Devuelve el registro seleccionado actualmente.Returns the currently selected record.
  • Actualizaciones: se aplica a las galerías.Updates - Applies to galleries. Reúne todos los cambios que realiza un usuario en un formulario de entrada de datos.Pulls together all the changes that a user makes in a data-entry form.
  • Actualizar: se aplica a los controles de entrada, como controles deslizantes y controles de entrada de texto.Update - Applies to input controls such as text-input controls and sliders. Configura las propiedades individuales para que se recopilen en la galería.Sets up individual properties for the gallery to pull together.

Ámbito del informeRecord scope

Algunas funciones se aplican mediante la evaluación de una fórmula en todos los registros de una tabla de forma individual.Some functions operate by evaluating a formula across all the records of a table individually. El resultado de la fórmula se utiliza de varias maneras:The formula's result is used in various ways:

  • Filtrar, Búsqueda: la fórmula determina si el registro debe incluirse en la salida.Filter, Lookup - Formula determines if the record should be included in the output.
  • Ordenar: la fórmula ofrece el valor en función del cual ordenar los registros.Sort - Formula provides the value to sort the records on.
  • Concatenar: la fórmula determina las cadenas que se deben concatenar.Concat - Formula determines the strings to concatenate together.
  • ParaTodo: la fórmula puede devolver cualquier valor, posiblemente con un efecto secundario.ForAll - Formula can return any value, potentially with a side effect.
  • Distinto: la fórmula devuelve un valor, que se usa para identificar registros duplicados.Distinct - Formula returns a value, used to identify duplicate records.
  • AgregarColumnas: la fórmula proporciona el valor del campo agregado.AddColumns - Formula provides the value of the added field.
  • Media, Max, Min, Sum, DesvesTP, VarP: la fórmula proporciona el valor que se va a agregar.Average, Max, Min, Sum, StdevP, VarP - Formula provides the value to aggregate.

Dentro de estas fórmulas, puede hacer referencia a los campos del registro que se va a procesar.Inside these formulas, you can reference the fields of the record being processed. 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.Each of these functions creates a "record scope" in which the formula is evaluated, where the fields of the record are available as top-level identifiers. También puede hacer referencia a propiedades de control y a otros valores en toda la aplicación.You can also reference control properties and other values from throughout your app.

Por ejemplo, considere una tabla de Productos:For example, take a table of Products:

Para determinar si se había solicitado más cantidad de alguno de estos productos de la que se encuentra disponible:To determine if any of any of these products had more requested than is available:

Filtrar( Productos, 'Cantidad en pedido' > 'Cantidad disponible' )Filter( Products, 'Quantity Requested' > 'Quantity Available' )

El primer argumento para Filtrar es la tabla de registros en los que operar, y el segundo argumento es una fórmula.The first argument to Filter is the table of records to operate on, and the second argument is a formula. 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.Filter creates a record scope for evaluating this formula in which the fields of each record are available, in this case Product, Quantity Requested, and Quantity Available. El resultado de la comparación determina si cada registro debe incluirse en el resultado de la función:The result of the comparison determines if each record should be included in the result of the function:

Según este ejemplo, podemos calcular qué cantidad de cada producto solicitar:Adding to this example, we can calculate how much of each product to order:

AgregarColumnas( Filtrar( Productos, 'Cantidad en pedido' > 'Cantidad disponible' ), "Cantidad para solicitar", 'Cantidad en pedido' - 'Cantidad disponible' )AddColumns( Filter( Products, 'Quantity Requested' > 'Quantity Available' ), "Quantity To Order", 'Quantity Requested' - 'Quantity Available' )

A continuación, se va a agregar una columna calculada al resultado.Here we are adding a calculated column to the result. 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.AddColumns has its own record scope that it uses to calculate the difference between what has been requested and what is available.

Por último, se puede reducir la tabla de resultados a solo las columnas deseadas:Finally, we can reduce the result table to just the columns that we desire:

MostrarColumnas( AgregarColumnas( Filtrar( Productos, 'Cantidad en pedido' > 'Cantidad disponible' ), "Cantidad para solicitar", 'Cantidad en pedido' - 'Cantidad disponible' ), "Producto", "Cantidad para solicitar" )ShowColumns( AddColumns( Filter( Products, 'Quantity Requested' > 'Quantity Available' ), "Quantity To Order", 'Quantity Requested' - 'Quantity Available' ), "Product", "Quantity To Order" )

Tenga en cuenta que en la fórmula anterior, se han usado comillas dobles (") en algunos casos y comillas simples (') en otros.Note that in the above, we used double quotes (") in some places and single quotes (') in other places. 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.Single quotes are required when referencing the value of an object, such as a field or table, in which the name of the object contains a space. 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.Double quotes are used when we are not referencing the value of an object but instead talking about it, especially in situations in which the object does not yet exist, as in the case of AddColumns.

Anulación de ambigüedadesDisambiguation

Los nombres de campo agregados con el ámbito de registro anulan los mismos nombres de los restantes lugares de la aplicación.Field names added with the record scope override the same names from elsewhere in the app. 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:When this happens, you can still access values from outside the record scope with the @ disambiguation operator:

  • 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].To access values from nested record scopes, use the @ operator with the name of the table being operated upon using the pattern Table[@FieldName].
  • 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).To access global values, such as data sources, collections, and context variables, use the pattern [@ObjectName] (without a table designation).

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.If the table being operated upon is an expression, such as Filter( table, ... ), then the disambiguation operator cannot be used. 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.Only the innermost record scope can access fields from this table expression, by not using the disambiguation operator.

Por ejemplo, imagine que tiene una colección X:For example, imagine having a collection X:

Puede crear esta colección con BorrarColección( X, [1, 2] ).You can create this collection with ClearCollect( X, [1, 2] ).

Y otra colección Y:And another collection Y:

Puede crear esta colección con BorrarColección( Y, ["A", "B"] ).You can create this collection with ClearCollect( Y, ["A", "B"] ).

Además, defina una variable de contexto denominada Valor con esta fórmula: ActualizarContexto( {Valor: "!"} )In addition, define a context variable named Value with this formula: UpdateContext( {Value: "!"} )

Se va a agrupar todo.Let's put it all together. En este contexto, la fórmula siguiente:In this context, the following formula:

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

genera esta tabla:produces this table:

¿Qué sucede aquí?What is going on here? 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.The outermost ForAll function defines a record scope for X, allowing access to the Value field of each record as it is processed. Puede acceder a él con tan solo usar la palabra Valor o X[@Value].It can be accessed by simply using the word Value or by using 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.The innermost ForAll function defines another record scope for Y. Since this table also has a Value field defined, using Value here refers to the field in Y's record and no longer the one from X. Here, to access X's Value field, we must use the longer version with the disambiguation operator.

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:Since Y is the innermost record scope, accessing fields of this table do not require disambiguation, allowing us to use this formula with the same result:

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

Todos los ámbitos de registro ParaTodo invalidan el ámbito global.All the ForAll record scopes override the global scope. La variable de contexto Valor definida no está disponible por su nombre sin el operador de anulación de ambigüedades.The Value context variable we defined is not available by name without the disambiguation operator. Para acceder a este valor, es necesario usar [@Value].To access this value we must use [@Value].

Desagrupar acopla el resultado, ya que las funciones ParaTodo anidadas darán como resultado una tabla de resultados anidados.Ungroup flattens the result, since nested ForAll functions will result in a nested result table.

Sintaxis en líneaInline syntax

RegistrosRecords

Exprese registros con el uso de llaves que contienen valores de campo con nombre.You express records by using curly braces that contain named field values. Por ejemplo, puede expresar el primer registro en la tabla al inicio de este tema mediante la utilización de la fórmula:For example, you can express the first record in the table at the start of this topic by using this formula:

{ Nombre: "Chocolate", Precio: 3,95, 'Cantidad disponible': 12, 'Cantidad en pedido': 10 }{ 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:You can also embed formulas within other formulas, as this example shows:

{ Nombre: Primero(Productos).Nombre, Precio: Primero(Productos).Precio * 1095 }{ Name: First(Products).Name, Price: First(Products).Price * 1.095 }

Puede anidar registros mediante llaves de anidación, como se muestra en este ejemplo:You can nest records by nesting curly braces, as this example shows:

{ 'Cantidad': { 'Disponible': EsteElemento.CantidadDisponible, 'EnPedido': EsteElemento.CantEnPedido } }{ '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.Enclose each column name that contains a special character, such as a space or a colon, in single quotes. Para usar una comilla simple dentro de un nombre de columna, duplíquela.To use a single quote within a column name, double it.

Tenga en cuenta que el valor de la columna Precio no incluye ningún símbolo de moneda, como un signo de dólar.Note that the value in the Price column doesn't include a currency symbol, such as a dollar sign. Dicho formato se aplicará cuando se muestre el valor.That formatting will be applied when the value is displayed.

TablasTables

Puede crear una tabla mediante la utilización de la función Tabla y un conjunto de registros.You can create a table by using the Table function and a set of records. Puede expresar la tabla al inicio de este tema mediante la utilización de la fórmula:You can express the table at the start of this topic by using this formula:

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 } )
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:You can also nest tables:

Tabla( { Nombre: "Chocolate",
            'Historial de cantidad': Tabla( { Trimestre: "T1", Disponible: 10, EnPedido: 10 },
                        { Trimestre: "T2", Disponible: 18, EnPedido: 0 } ) } )
Table( { Name: "Chocolate",
            'Quantity History': Table( { Quarter: "Q1", OnHand: 10, OnOrder: 10 },
                        { Quarter: "Q2", OnHand: 18, OnOrder: 0 } ) } )

Tablas de valoresValue tables

Puede crear tablas de una sola columna mediante la definición de valores entre corchetes.You can create single-column tables by specifying values in square brackets. La tabla resultante tiene una sola columna, denominada Valor.The resulting table has a single column, named Value.

Por ejemplo, [ 1, 2, 3, 4 ] equivale a Tabla( { Valor: 1 }, { Valor: 2 }, { Valor: 3 }, { Valor: 4 } ) y devuelve esta tabla:For example, [ 1, 2, 3, 4 ] is equivalent to Table( { Value: 1 }, { Value: 2 }, { Value: 3 }, { Value: 4 } ) and returns this table: