martes, julio 09, 2019

BUSCARV y Power Query - nota adicional

En su comentario a la tercera nota de la serie me preguntaba el lector Alfredo cómo haríamos si queremos mostrar todos los resultado. Es decir, filtrar sólo por el nombre del producto.
Obviamente tenemos que crear una condición de manera que si la celda F2 (Orden_de_aparición) esta en blanco no se aplique el filtro (y caso contrario si aplicarlo).

En todas las notas de la serie hemos hecho las transformaciones usando la interfaz de usuario, es decir, sin tener que escribir código por nuestros propios medios.
Power Query nos permite solucionar, por lo menos, el 80% de nuestros problemas de transformación de datos directamente a través de la interfaz de usuario. Esto significa que no necesitamos conocer el lenguaje M y escribir código por nuestra cuenta para solucionar problemas de manejo de datos.

En el caso que nos consulta Alfredo si tendremos que agregar una línea de código. Si bien esto supone ya conocimientos más avanzados, también el usuario principiante o intermedio se beneficiará descubriendo las increíbles posibilidades que nos ofrece Power Query.

En el modelo de la nota anterior introducíamos el nombre del producto en la celda F1 (que habíamos ligado al nombre definido "Producto") y el orden de aparición buscado en la celda F2 (asimismo ligada al nombre definido "Orden_de_aparición"). Al activar "Datos-Actualizar todo", obteníamos el resultado en la celda E6. Si dejamos la celda F2 en blanco, la celda E6 también quedará en blanco. Esto quiere decir que cuando Power Query no encuentra el orden de aparición buscado, el resultado es "null".



Cuando aplicamos pasos en el editor Power Query va generando el código correspondiente a esos pasos



Para crear la posibilidad de mostrar todas las filas del producto en el caso de dejar en blanco la celda F2 (Orden_de_aparición) tendremos que intervenir en el anteúltimo paso ("Filas filtradas1"). Veamos el código creado por Power Query para hacer el filtrado; podemos verlo en la barra de las fórmulas


o en el editor avanzado


En el editor avanzado reemplazamos el paso #"Filas filtradas1" por el siguiente código:

 #"Filas filtradas1" = if Orden_de_aparición<>null then Table.SelectRows(#"Índice agregado",
            each ([Índice] = Orden_de_aparición))
                else #"Índice agregado",



(para facilitar la lectura dividimos el código en varias líneas apretando Enter; de la misma manera podríamos escribir el código en una sola línea).
Como pueden ver estamos creando una condición: Si (if) el valor del parámetro Orden_de_aparición no es "null" (vacío) entonces aplicamos la función Table.SelectRows; en caso contrario (else) nos referimos al paso anterior (#"Índice agregado") sin tomar ninguna acción, que es la forma de ignorar el filtrado.
En nuestro ejemplo si dejamos la celda F2 vacía



tendremos este resutlado



y al cargar la consulta en la hoja y apretar "Datos-Actualizar todo"  veremos








2 comentarios:

  1. Muchas gracias Jorge, excelente solución. ¿podrías dedicar algunos posts al lenguaje M? Que es como se usa etc ?.
    Saludos cordiales.

    ResponderBorrar
  2. Algo publicaré, pero siempre aplicado a ejemplos; no en forma sistemática.

    ResponderBorrar

Nota: sólo los miembros de este blog pueden publicar comentarios.