GENERATE, y, GENERATEALL
- Jaime Franco Jimenez

- 9 jul 2023
- 2 Min. de lectura
Esta función acuta sobre dos tablas, y, resulta una nueva tablade con todas las combinaciones posibles entre ambas tablas.
Sintaxis
GENERATE(<table1>, <table2>)
· Table1, es cualquier expresión que nos devuelva una tabla.
· Table2, cualquier expresión que nos devuelva una tabla.
Los nombres de columnas de la primera tabla, y, segunda tabla debe de ser diferentes, en caso contrario, devuelve un error.
Veamos un ejemplo, tenemos cargado una tabla llamada centros, donde tenemos una serie de centros comerciales.

Tenemos otra tabla llamada productos, donde tenemos una serie de productos.

Queremos asignar cada producto a cada centro comercial, para ello, vamos a herramientas de tablas, y, hacemos clic en nueva tabla.

Ponemos la función GENERATE, como argumento tabla1, ponemos la tabla centros, como argumento tabla2, ponemos la tabla productos, con esto, vamos a conseguir asignar cada producto a cada centro comercial.

Vemos que tenemos aspiradora para cada centro comercial, así como para el resto de los productos.

Veamos otro ejemplo, con la función ROW, vamos a crear una tabla de una fila, y, dos columnas, creamos una variable donde usamos la función ROW, como name, entre comillas dobles, ponemos inicio, como argumento expresión, usamos DATE, y, ponemos la fecha 01/01/2023, como argumento name de nuevo, ponemos, entre comillas dobles, fin, como argumento expresión, ponemos 05/01/2023.

Ponemos la palabra return.
Ponemos la función GENERATE, como argumento tabla1, ponemos la variable, como argumento tabla2, usamos la función DATESBETWEEN, como argumento dates, ponemos la variable, como argumento fecha de inicio, ponemos la variable inicio, como argumento fecha de fin, ponemos la variable fin, cerramos paréntesis.

Obtenemos una tabla de tres columnas, la primera columna es la fecha de inicio, la segunda columna es la fecha de fin, y, la tercera columna es la columna Date que proviene de la tabla calendario, donde vemos que empieza en la primera fecha, y, de forma secuencial, es decir, de uno en uno, llega hasta la fecha de fin.

GENERATE es útil para unir una tabla que depende de los valores de la primera tabla.
No hemos hablado de los valores vacíos, si como segundo argumento se devuelve una tabla vacía, la función GENERATE no genera dicha fila, cambiemos la fecha de inicio a 9/1/2023.

Vemos que no obtenemos resultados, porque no hay fechas intermedias, entonces, las filas vacías han sido omitidas.

Si queremos recuperar los valores de la tabla, aunque el segundo argumento devuelva una tabla vacía, debemos de usar la función GENERATEALL, vamos a ir a la expresión, y, cambiamos GENERATE por GENERATEALL, vamos a tener una tabla de una fila, y, dos columnas, con la fecha de inicio y de fin.

Miguel Angel Franco




Comentarios