martes, 15 de septiembre de 2020

Power Query: Seleccionado origen de datos

Recientemente me encontraba con una situación algo diferente, me parecía, donde debía resolver una consulta de Power Query eligiendo un origen entre distintas posibilidades...
Veamos el planteamiento en la imagen siguiente:
Power Query: Seleccionado origen de datos
La situación concreta es la siguiente: Disponemos de tres orígenes de información (tres tablas: Tabla1, Tabla2 y Tabla3). Deseamos construir una única consulta final (que llamaré en su momento 'qryVariable') que se alimente a mi elección, de acuerdo a la celda I2... combinándose con un cuarto origen de datos 'TblColor'.
Además cada uno de las tres fuentes tiene una denominación de campos distintos, así como un número diferente de ellos... aunque sí tienen tres conceptos en común, que serán los que necesitamos: Fecha, País, Unidades.
Es decir, por si aún no he conseguido explicar qué vamos a hacer... Vamos a construir una consulta que permite seleccionar el origen de datos desde una celda validada tipo lista.

Nuestro primer paso será cargar las tres tablas fuentes (Tabla1, Tabla2 y Tabla3) solo como conexión.
En el editor trabajaremos cada una de las tablas cargadas para renombrar las columnas necesarias de igual forma, reordenarlas y eliminar, si fuera el caso, columnas sobrantes.
Pongamos de ejemplo los pasos de la Tabla3 cargada
Power Query: Seleccionado origen de datos

En las tres tablas habrá que realizar un trabajo similar hasta llegar a mostrar únicamente tres columnas: Fecha, Pais, Uds
Igualmente, solo como conexión, la TblColor... en este caso sin transformación alguna.

En la celda I2 añadimos una validación de datos tipo Lista con tres elementos permitidos: Tabla1, Tabla2 y Tabla3.
No deberías tener problema para esta primera etapa... si fuera el caso revisa la etiqueta del blog Power.
En el segundo paso cargaremos la celda I2, a la que previamente hemos asignado u nnombre definido ('ndOrigen'), solo como conexión y la pasaremos como parámetro.
Desde la ficha Datos > grupo Obtener y transformar > Desde una tabla o rango, y una vez cargada desde el editor de consultas de Power Query, haciendo clic derecho sobre la 'casilla' presionar 'Rastrear desagrupando datos'
Power Query: Seleccionado origen de datos

Es importante pasar como parámetro este valor de la celda I2 para gestionar la futura elección del origen...

Vamos a por el paso importante. Añadiremos desde el editor de consultas una consulta en blanco, desde la ficha Inicio > grupo Nueva consultas > Nuevo origen > Otros orígenes > Consulta en blanco, y desde la vista de Editor avanzado escribiremos una sentencia condicional... pero no para trabajar entre columnas, sino para trabajar entre orígenes o consultas cargadas!!.
Aquí está la fuerza de este ejercicio ;-)
En la ventana del editor avanzado de nuestra consulta en blanco escribiremos:
let
    fuente = if ndOrigen="Tabla1" then Tabla1 else 
            if ndOrigen="Tabla2" then Tabla2 else 
            Tabla3
in
    fuente

Observamos una estructura múltiple condicional if condición 1 then salida 1 else if...then...else ...
La condición consiste en comparar nuestro parámetro 'ndOrigen' con alguno de las opciones disponibles (Tabla1, Tabla2 o Tabla3), para así dirigir la respuesta a alguno de los orígenes cargados.
Al aceptar veremos:
Power Query: Seleccionado origen de datos

Sobre esta consulta, ya desde la vista normal completaremos los pasos siguientes:
1-Combinar con la consulta de colores
2-Expandir el campo color
Power Query: Seleccionado origen de datos

let
    fuente = if ndOrigen="Tabla1" then Tabla1 else 
            if ndOrigen="Tabla2" then Tabla2 else 
            Tabla3,
    #"Consultas combinadas" = Table.NestedJoin(fuente, {"Fecha"}, TblColor, {"Año"}, "TblColor", JoinKind.LeftOuter),
    #"Se expandió TblColor" = Table.ExpandTableColumn(#"Consultas combinadas", "TblColor", {"Color"}, {"Color"})

in 
#"Se expandió TblColor"
Power Query: Seleccionado origen de datos

Y listo, ya podemos Cargar y cerrar en... y devolver la consulta a nuestra hoja de cálculo. Daríamos el trabajo por concluido. Cada vez que seleccionemos un origen diferente en I2 y actualicemos... nuestra query devolverá los datos correspondientes :O

No hay comentarios:

Publicar un comentario

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