jueves, 8 de febrero de 2018

Power Query: Búsqueda sobre varias tablas

Hoy aprenderemos a generar una búsqueda vertical sobre distintos orígenes/tablas empleando la herramienta Obtener y Transformar (antiguo Power Query).

En definitiva daremos respuesta a una cuestión clásica: ¿podemos realizar una especie de 'BUSCARV' sobre diferentes tablas?.


En primer lugar partiremos, para no eternizar el ejemplo, de tres tablas (a las que he llamado 'Tbl_135', 'Tbl_246' y 'Tbl_78910'):



Por otro lado hemos asignado un Nombre definido a una celda que contendrá el valor a buscar:
vBuscado =Hoja1!$B$8


En el siguiente paso, accederemos una vez por cada tabla, a la ficha Datos > grupo Obtener y Transformar > Desde una tabla.
Nos aseguraremos que solo cargaremos la Conexión !!


En el siguiente paso crearemos una consulta anexando las tres tablas conectadas.
Dentro del Editor de consultas en la ficha Inicio > desplegable Combinar > Anexar consultas > Anexar consultas para crear una nueva

Power Query: Búsqueda sobre varias tablas


A esta nueva consulta le he renombrado como 'TablaTotal'.

Hace tiempo publiqué cómo crear funciones personalizadas dentro del entorno de Power Query (ver).
Bien, tendremos que recordar el proceso.

Creamos una consulta en blanco:
Ficha Datos > grupo Obtener y Transformar > desplegable Nueva Consulta > Desde Otras fuentes > Consulta en blanco
Accederemos al Editor Avanzado (ir a ficha Vista dentro del Editor de consultas) e introduciremos el siguiente código:

(NombreDefinido) => 
    Excel.CurrentWorkbook(){[Name=NombreDefinido]}[Content]{0}[Column1]

Aprovechamos para cambiar el nombre de la consulta/función por 'ValorBuscado'


Por último volvemos a la configuración de nuestra TablaTotal que ahora mismo solo contiene la línea para combinar las tres tablas originales.
Editamos de forma avanzada esta consulta y la dejamos como sigue:

let
    Origen = Table.Combine({Tbl_135, Tbl_246, Tbl_78910}),
    #"Filas filtradas" = Table.SelectRows(Origen, each ([Id] = ValorBuscado("vBuscado"))),
    #"Columnas quitadas" = Table.RemoveColumns(#"Filas filtradas",{"Id", "concepto"})
in
    #"Columnas quitadas"


Lo que hemos añadido es una acción de filtrado sobre el campo [Id] de nuestra tabla única, donde filtramos por el valor que hubiera en nuestra celda de la hoja de cálculo con el nombre definido asignado 'vBuscado' (revisa primeros pasos).
#"Filas filtradas" = Table.SelectRows(Origen, each ([Id] = ValorBuscado("vBuscado"))),

Y en la última línea simplemente nos quedamos con el campo que nos interesa... el precio. Para ello eliminamos las dos columnas "Id", "concepto"
#"Columnas quitadas" = Table.RemoveColumns(#"Filas filtradas",{"Id", "concepto"})


Listo, podemos Cargar y cerrar nuestra consulta y devolver el resultado a la hoja de cálculo.

Power Query: Búsqueda sobre varias tablas


Para comprobar su correcto funcionamiento bastará que cambies el valor en la celda amarilla (B8 que tiene asignada el nombre definido - vBuscado-) y actualizar la consulta de Power Query.

No hay comentarios:

Publicar un comentario

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