GENERATEALL

La función GENERATEALL es semejante a la función GENERATE: Devuelve una tabla formada por el producto cartesiano de todas las filas de la primera tabla y las filas de la segunda tabla tras ser evaluadas en el contexto de fila de cada una de las filas de la primera. La diferencia radica en que este producto cartesiano va a incluir todas las filas de la primera tabla aun cuando el resultado de la evaluación de la segunda tabla para una cierta fila sea un conjunto vacío, en cuyo caso se añade a la tabla a devolver la fila de la primera tabla y valores nulos en los campos correspondientes a la segunda tabla.

Sintaxis

GENERATEALL(
    table1,
    table2
)

Parámetros
  • table1: Primera tabla, cuyas filas van a generar el contexto de fila.
  • table2: Segunda tabla, cuyas filas se van a contextualizar antes de realizar el producto cartesiano.
Valor devuelto

La función GENERATEALL devuelve una tabla resultado de calcular el producto cartesiano entre las filas de la primera tabla y las filas de la segunda tabla tras ser contextualizadas, aun cuando éstas devuelvan un conjunto vacío.

Información adicional

Las tablas deberán tener columnas con nombres no coincidentes pues, en otro caso, la función GENERATEALL devolverá un error.

Ejemplos

Para ver el funcionamiento de esta función -y comprobar las diferencias con la función GENERATE- vamos a partir de las siguientes dos tablas:

Primera tablaSegunda tabla

Si imponemos como condición que los nombres de las oficinas sean coincidentes, el resultado de aplicar la función GENERATE es el siguiente:

Tabla = 
    GENERATE(
        Tabla1,
        FILTER(
            SELECTCOLUMNS(
                Tabla2,
                "Oficina2", Tabla2[Oficina],
                "Compras", Tabla2[Compras]
            );
            Tabla1[Oficina] = [Oficina2]
        )
    )

Resultado de la función GENERATE

Comprobamos que no se incluye una fila para la oficina de Alemania (país presente solo en la primera tabla), pues el resultado de contextualizar la segunda tabla en el contexto de fila generado devuelve un conjunto vacío, por lo que el resultado de la combinación es también un conjunto vacío.

Sin embargo, el resultado de aplicar la función GENERATEALL es ligeramente distinto:

Tabla = 
    GENERATEALL(
        Tabla1,
        FILTER(
            SELECTCOLUMNS(
                Tabla2,
                "Oficina2", Tabla2[Oficina],
                "Compras", Tabla2[Compras]
            );
            Tabla1[Oficina] = [Oficina2]
        )
    )

Resultado de la función GENERATEALL


En este caso sí se incluye el registro para Alemania con valores nulos para los campos correspondientes a la segunda tabla.

Categoría
Estadísticas
Enviado por admin el Mié, 10/07/2019 - 18:31