jueves, 9 de septiembre de 2021

Power Query: Table.AddJoinColumn alternativas a Table.NestedJoin

Días atrás comenté algunas alternativas (unas mejores, otras no tan buenas) al clásico Table.NestedJoin obtenido con el asistente de Combinar consultas.
Puedes leer este par de artículos para refrescarte:
Table.SelectRows entre tablas
Table.Join versus Table.NestedJoin

Hablaremos hoy de otra gran desconocida:
Table.AddJoinColumn(table1 as table, key1 as any, table2 as function, key2 as any, newColumnName as text) as table
Que resumiendo combina las filas de las dos tablas indicada, basándose en la igualdad de los valores de las columnas de clave que seleccionamos key1 (para table1) y key2 (para table2).
Los resultados se introducen en una nueva columna de la primera tabla.
Esta función M se comporta de forma similar a Table.Join con un JoinKind de LeftOuter, salvo que los resultados de la combinación se muestran de forma anidada en lugar de sin formato.

Teoría aparte, veamos su uso con un ejemplo múltiple...
Partiremos desde las cinco tablas que teníamos en los post anteriores:
TblDATOS, TBLPRECIO, TblREGION, TblDESCUENTO y TblCOMISION
Power Query: Table.AddJoinColumn alternativas a Table.NestedJoin

Obviamente empezamos cargando todas las tablas de nuestra hoja de cálculo al editor de consultas de Power Query, solo como conexión... como siempre.
A continuación abriremos una Consulta en blanco donde insertaremos el siguiente código M:
let
    Origen = TblDATOS,

    //Table.AddJoinColumn(table1 as table, key1 as any, table2 as function, key2 as any, newColumnName as text) as table  

    //realizamos la unión entre Producto y Artículo de la TblDATOS y TblPRECIOS respectivamente
    //y llevamos el resultado de la unión, en modo de tabla, a la nueva columna 'DATA_PRECIOS'
    AddJoinColumn_PZ = Table.AddJoinColumn(Origen,{"Producto"},TblPRECIOS,{"Artículo"},"DATA_PRECIOS"),
    Expande_DATA_PRECIOS = Table.ExpandTableColumn(AddJoinColumn_PZ, "DATA_PRECIOS", {"Precio"}, {"Precio"}),

    //Idem o similar al anterior
    AddJoinColumn_REGION = Table.AddJoinColumn(Expande_DATA_PRECIOS,{"País"},TblREGION,{"Country"},"DATA_REGION"),
    Expande_DATA_REGION = Table.ExpandTableColumn(AddJoinColumn_REGION, "DATA_REGION", {"Region", "UE_Y_N"}, {"Region", "UE_Y_N"}),

    //realizamos la unión entre Producto+Comercial y Cod+Vendedor de la TblDATOS y TblCOMISION respectivamente
    //y llevamos el resultado de la unión, en modo de tabla, a la nueva columna 'DATA_PRECIOS'
    AddJoinColumn_COMISION = Table.AddJoinColumn(Expande_DATA_REGION,{"Producto","Comercial"},TblCOMISION,{"Cod","Vendedor"},"DATA_COMISION"),
    Expande_DATA_COMISION = Table.ExpandTableColumn(AddJoinColumn_COMISION, "DATA_COMISION", {"Comisión"}, {"Comisión"}),

    //Idema al primero
    AddJoinColumn_DCTO = Table.AddJoinColumn(Expande_DATA_COMISION,{"Comercial"},TblDESCUENTO,{"Comerciales"},"DATA_DCTO"),
    Expande_DATA_DCTO = Table.ExpandTableColumn(AddJoinColumn_DCTO, "DATA_DCTO", {"Dirección","Descuento"}, {"Dirección","Descuento"})

    //después de cada columna añadida, procedemos a expandir dicha columna....
in
    Expande_DATA_DCTO

Power Query: Table.AddJoinColumn alternativas a Table.NestedJoin

Aceptamos y Cerramos y cargamos para devolver la tabla resultante a nuestra hoja de cálculo...
Por supuesto el resultado es el mismo que con el resto de técnicas aplicadas...

Con un proceso, aunque no lo parezca, similar al del empleo de Table.SelectRows entre tablas... empleando esta función ganamos en flexibilidad, rapidez y facilidad de construcción.
Ventajas a tener en cuenta...

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.