En este tutorial, aprenderá sobre expresiones, objetos y entornos anidados en Power Query . Se utilizarán expresiones y variables anidadas para discutir cómo funcionan los entornos y ayudar a generar datos. También aprenderá a lidiar con escenarios comunes al transformar objetos anidados.
Tabla de contenido
Creación de expresiones anidadas
Las expresiones se definen como una fórmula utilizada para construir valor.

La expresión en la barra de fórmulas se crea a partir de subexpresiones. Los literales 1 y 2 son subexpresiones de la expresión principal.
Las variables se definen como valores con nombre. Este es un registro de muestra.

Si abre la ventana del Editor avanzado, puede ver las variables utilizadas en la consulta.

Cada una de las variables a , b y c representa un valor que es el resultado de una expresión que a menudo encontrará después de un signo igual. Todas las variables dentro de la expresión padre, que es el propio registro, forman el entorno de ese registro. Dentro de ese entorno, cada variable debe ser única.
Entonces, si agrega otra variable llamada c , verá un mensaje de error debajo de la ventana del Editor avanzado.


El registro puede acceder a todas sus subexpresiones utilizando identificadores o nombres de variables. Sin embargo, para las expresiones anidadas dentro del registro, cada entorno es diferente porque pueden acceder a todas las demás variables del registro excepto a ellos mismos.
En este ejemplo, puede ver que la variable c se hace referencia a sí misma.

Si presiona hecho, recibirá un mensaje de error.

Si extrae el valor de c agregando el operador de acceso al elemento, obtendrá un resultado. También puede obtener el mismo resultado con la expresión let porque se le aplican las mismas reglas.

Comprender las expresiones anidadas en un entorno
Este es otro ejemplo de un valor récord.

Si abre la ventana del Editor avanzado, puede ver que las variables a y b comparten el mismo entorno, que es el entorno más externo. También verá que las variables x , y y z son subexpresiones de la expresión principal a .

Cada variable puede acceder a todas las demás variables dentro del registro anidado excepto a sí misma. Puede llamar a una variable que existe en un entorno diferente. En este ejemplo, puede ver que z hace referencia a b , que se encuentra en el entorno exterior.

Las variables x , y y z pueden acceder a b porque b es parte de su entorno de expresión padre. También puede tener la misma variable pero en diferentes entornos.
En este otro ejemplo, puede ver que el registro interno y externo tiene una variable x .

Las variables deben ser únicas dentro de su propio entorno. Se utilizará la x más cercana asignada a una variable. En esta consulta de muestra, se usa la x interna ya que está más cerca desde la perspectiva del registro a .

En esta otra consulta, la x más cercana que está cerca de la variable b se usa en la expresión.

La variable externa b puede referirse a la variable x dentro del registro a usando el operador de acceso al elemento. Debe referirse a la variable a y luego acceder a x usando un conjunto de corchetes. De la misma forma, el registro a puede referirse a la variable x dentro de la variable b .

Cuando el entorno del registro anidado a se fusiona con variables de la expresión principal, genera un conflicto porque x existe dos veces y todas las variables deben ser únicas en su entorno. Dado que una variable no puede referirse a sí misma, el conflicto se resuelve al referirse a la x externa.

Resolución de escenarios comunes
Un escenario común es la transformación de objetos anidados. Para demostrarlo, se utilizará esta tabla.

Si desea recuperar un valor de la tabla externa y colocarlo en la tabla anidada, hay dos formas de lograrlo. El primer método es usar la opción Agregar columna personalizada .
Haga clic en el icono de la tabla en la esquina superior izquierda del panel de vista previa y seleccione Agregar columna personalizada.

Ingrese Temp como nombre de columna e ingrese un marcador de posición en la fórmula de columna personalizada . Una vez hecho esto, presione Aceptar.

Dentro de la barra de fórmulas, reemplace cada expresión con una función personalizada agregando una columna a su tabla anidada. Inicie la lógica para una función personalizada y llámela OT para la tabla externa. Luego, agregue el signo de ir a.
Luego, use la función Table.AddColumn para agregar una columna. Consulte la tabla en la tabla externa que se encuentra en la columna Nombres. Y luego ingrese un nuevo nombre de columna.
Para este ejemplo, el nombre de la columna utilizada es Ingresos . Ingrese cada función para obtener los valores de cada fila en la columna Obtener ingresos.

Si hace clic en el espacio dentro de la celda de una fila en la columna Temporal, obtendrá una vista previa de la tabla anidada debajo del panel de vista previa. Verá que cada fila tiene el valor de la tabla exterior.

Uso de variables para almacenar valores
El segundo método para transformar objetos anidados es mediante el uso de variables para almacenar valores. Primero, agregue una columna personalizada e ingrese Temp2 como nombre de columna. Para la fórmula, use la expresión let para almacenar valores en variables.
Ingrese let y luego escriba un nombre de variable. Para este ejemplo, el nombre de la variable es myR . A continuación, iguale la variable con la columna Obtener ingresos. Después de eso, ingrese la cláusula in y use la función Table.AddColumn para agregar una columna a la tabla anidada.
Para el primer parámetro de la función, ingrese la columna Nombres que contiene las tablas anidadas. A continuación, asigne a la nueva columna el nombre Ingresos. Usa each para llamar a las variables de cada fila.

Si hace clic en el espacio dentro de la celda de una fila en la columna Temp2, verá que recuperó los valores de la tabla exterior.

Otro escenario común es una búsqueda en la que no hay una clave compartida. Para este escenario, se utilizarán 2 tablas de muestra: una tabla de categorías y una tabla de productos .


Utilice la tabla de categorías como una consulta de preparación para complementar los atributos de la tabla de dimensiones del producto. Dado que no hay una clave compartida, no se puede realizar una combinación. Lo primero que debe hacer es anidar la tabla de categorías completa en la consulta de la tabla de productos mediante Agregar columna personalizada.
Agregue una columna personalizada y escriba Categoría como nombre de columna. Luego, en la fórmula personalizada, llame a la consulta de categoría.

Después de eso, ahora ha anidado la tabla de categorías completa en cada fila de la tabla de productos.

Cuando hace clic en el espacio dentro de la celda de una fila en la columna Categoría, puede ver la tabla de categorías completa en cada fila.

Recuperando un solo valor
Si solo desea recuperar un único valor, debe filtrar la tabla de categorías a una sola fila donde una parte de la cadena del producto coincida con el grupo de productos en la tabla de categorías.
Abra el cuadro de diálogo Columna personalizada presionando el botón de engranaje junto a Personalizado agregado en el panel Pasos aplicados.

En la fórmula, agregue la función Table.SelectRows . Para el primer parámetro, se utiliza la tabla Categoría. El segundo parámetro utilizó la función Text.Contains como condición. Para la tabla interna, esta función verifica si un texto contiene una parte de la cadena de productos en la tabla externa.

Al acceder a la tabla exterior, notará que Power Query agrega cada palabra clave dentro de la barra de fórmulas. Es una función unaria que toma el guión bajo ( _ ) como una variable sin nombre. Sin embargo, dado que solo está accediendo a una columna, se puede omitir.

Si hace clic en el espacio dentro de la celda de una fila en la columna Categoría, ahora verá una sola fila en cada una de las tablas anidadas.

Desde allí, puede extraer un valor para la categoría con la combinación de los operadores de acceso a filas y campos.
Vuelva al cuadro de diálogo Columna personalizada y agregue los operadores en la fórmula. Para obtener la primera fila de la tabla, ingrese 0 dentro de un conjunto de corchetes. Luego, enumere el nombre del campo Categoría dentro de un conjunto de corchetes.

Para preparar la solución para el futuro, puede agregar un signo de interrogación ( ? ) al final para cambiar el comportamiento de no encontrado de devolver un error a un valor nulo.
Cómo funciona el editor de consultas en LuckyTemplates
M Language y Power Query Editor en LuckyTemplates
Conclusión
Los entornos y las expresiones anidadas ayudan a que su consulta resalte ciertos valores de sus códigos para proporcionar resultados deseables. Ser consciente de ellos es importante al escribir funciones porque cuando los comprende, podrá resolver escenarios más avanzados y complejos.
Toronjil