Miguel Escobar Publicada febrero 4, 2015

Empezando y entendiendo Power Query y el Lenguaje M

Power Query

image

Pongamos Power Query y el Idioma M bajo la lupa

Power Query es una herramienta de gran avance para el auto-servicio de inteligencia empresarial y es la nueva mejor herramienta lanzado por Microsoft en el lapso de 5 años. Ya he publicado acerca de lo que es Power Query y lo que representa para nosotros pero, ¿Cómo puedo empezar con Power Query y el M Idioma?

Bueno, este post va a tratar de hacer frente a esa pregunta y le dará una idea de cómo empezar a utilizar Power Query y entender su lenguaje.

He dividido este artículo en 2 secciones principales que pienso firmemente que deben ser el foco principal de nuestro viaje cuando se intenta aprender Power Query y el idioma M. Estos son:

  1. Flujo de trabajo en Power Query y el mecanismo M
  2. El Lenguaje M

Vamos a empezar con lo básico!

El flujo de trabajo – paso a paso

Steps Power Query

(La imagen muestra el flujo de trabajo de una consulta Power Query. Funciona en una base por pasos basada en el resultado de algún paso anterior * la mayor parte del tiempo *)

Estas son algunas de las razones por las cuales la gente le encanta este flujo de trabajo con Power Query:

  • Trabaja basado en pasos, algo así como el funcionamiento de una macro-grabadora y te invita a trabajar en una forma ordenada.
  • Se le mantiene a raya con el fin de aplicar las mejores prácticas de transformación de datos lo cual es impresionante!
  • Es fácil de leer y fácil de depurar

La imagen de arriba explica que tenemos un paso, y ese paso tiene algo escrito en ella. El contenido de ese paso podría ser llamado un guión, específicamente una secuencia de comandos M de algo que tiene que suceder. El motor de Power Query aplica dicho guión y el resultado de él  se mostrará en la parte izquierda de su pantalla que se podría llamar la vista previa en vista de consulta. Ese resultado puede ser utilizado más tarde para más transformaciones, pero vamos a ver un ejemplo para entenderlo.

ETL Power Query

En la imagen de arriba vemos la consulta que se ha creado en base a mi anterior entrada del blog. Vemos que el primer paso se llama Source, y lo que hace se puede ver en la barra de fórmulas que comienza con «= Folder.Files (…» y de ese paso estaremos agregando un nuevo paso llamado “Get the files” y después de ese, y en base a esteúltimo, creamos un nuevo paso llamado “Removed Other Columns”.

Sólo para resumir, he aquí cómo diseccionar un solo paso:

  • El nombre de mi paso = “Source”
  • Lo que hace mi paso = “=Folder.Files(…”
  • El resultado de este paso = todas las columnas mostradas en el lado izquierdo de la pantalla a partir de [Content] hasta el final a [Folder Path]

Algo a tomar en consideración es que cualquiera de las entradas o resultados puede ser un registro, lista, tabla o una función, pero por ahora sólo estamos interesados en conocer el flujo de trabajo y no todos los detalles.

Este es el ciclo o flujo de trabajo para Power Query. Usted trabaja más o menos como el uso de la grabadora de macros, grabando todo en una base paso a paso y cuando termine de grabar ejemplo «macro», usted sólo tiene que ir a «Close & Load» para que pueda guardar la consulta y cargarla ya sea a Excel o su modelo de datos.

image

“Every new beginning comes from some other beginning’s end” se reproduce en mi mente cada vez que pienso en el flujo de trabajo de Power Query.

 

Cómo entender el lenguaje

Vamos a diseccionar una vez más la consulta de mi última entrada en el blog y tratar de analizar los patrones de ese código M:

image

Aquí se tiene una imagen lado a lado del Editor avanzado, el código M en su forma cruda , y detrás de ella el Editor de consultas Power Query con la lista de pasos a la derecha. Seguí adelante y dibuje una línea con cada paso correspondiente con el fin de que les muestre cual corresponde a cual.

Así que eso es bastante fácil, sabemos donde cada paso se almacena y donde está, pero te darás cuenta de que los nombres no son exactamente los mismos. Por ejemplo, el segundo paso se llama Get the files pero en el Editor avanzado se ve el nombre como #»Get the files» y la razón detrás de esto es porque M no puede manejar espacios entre nombres o conflictos con otros nombres (nombres de paso o incluso nombres de las funciones) así que por eso se agrega el # como prefijo y se pone todo dentro de las comillas.Usted no notará esto en la interfaz de usuarioya que le va a mostrar el nombre que usted le ha dado, pero, bajo el capó se dará cuenta de cómo se traduce al lenguaje M.

Yo también he destacado 2 palabras:

  • let – es la sintaxis a utilizar para comenzar una consulta.
  • in – es la sintaxis para determinar que usted ha terminado el proceso de transformación y, posteriormente, verá el nombre del paso que debe ser entendido como el resultado de dicha consulta. En nuestro caso “Expanded” es el resultado de nuestra consulta de PQ.

Lenguaje M – recursos de aprendizaje

Para los recursos oficiales de aprendizaje de Microsoft, favor visite el siguiente link donde se puede obtener más información sobre las fórmulas y funciones dentro de Power Query.

Además, aquí hay otro truco fácil. Es probable que ya amas esto de Excel y Power Pivot:

image

y si desea LA misma experiencia, o muy similar a ella, puede simplemente escribir = # shared en la barra de fórmulas de consulta y obtener una lista completa de todas las funciones disponibles en su versión de Power Query:

Power Query Function List

y si desea el artículo de ayuda completo de cualquier función todo lo que tienes que hacer es escribir el nombre de la función de la siguiente manera:

Power Query Function Help

Estén atentos para más artículos como este en las próximas semanas!

Asegúrese de suscribirse a nuestra lista de correo para recibir nuestros mensajes en su correo electrónico o quizás usted desea suscribirse a la fuente RSS.

Power Query
Subscribe
Notify of
guest
12 Comentario
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
MIGUEL

Muy interesante el articulo gracias. Les comento que soy nuevo en esto de Power Query, me encuentro con un caso que no se como resolverlo, les comento que tengo una tabla de ventas en donde se registra el código de la venta, el número de cuota, y el valor a cobrar por esa cuota. En otra tabla tengo los cobros total realizados sobre una venta y tiene las siguientes columnas código de la venta, valor total cobrado.
Estoy tratando de obtener una información que me permita saber de una determinada codigo de venta cuales son las cuotas afectadas, es decir si una venta tengo 4 cuotas de 100 dolares, y el cobro total de la deuda es de 300 dolares, el resulytado me deberia mostrar que el saldo de la cuota 1,2,3 estan en 0 y solo la cuarta cuota tiene un saldo de 100.

Gracias por su valiosa ayuda

John

Debes agregar una condicional If «condicion expesado en columnnas» then

Instrucción

elseif

otras instrucciones

else

Roberto Soriano

Muy interesante power query y lenguaje M.

Edwin

Muchas gracias por compartir el conocimiento.
Tengo un par de inquietudes que deseo expresar.
1. Como se pueden simular relaciones tipo left join con el lenguaje M.
Por ejemplo, para detectar en la conocida base de datos Neptuno, cuales
son los clientes que NO han realizado ningun pedido. O como se podria implementar con powerv Pivot.
2. El codigo generado por el lenguaje M se puede copiar y pegar en otro libro que tenga habilitado el Power Query ? Algo asi como exportar la secuencia de tareas.

Nuevamente, muchas gracias por enseñar a la comunidad

Christian Vaca

Como puedo incluir en un campo de la tabla importada a power query en nombre de la consulta, Qué formula utilizar?? En excel es por ejemplo =DERECHA(CELDA(«nombrearchivo»);6)
Me podria ayudar alguien por favor

Edwin

Muchas gracias por compartir el conocimiento.
Tengo un par de inquietudes que deseo expresar.
1. Como se pueden simular relaciones tipo left join con el lenguaje M.
Por ejemplo, para detectar en la conocida base de datos Neptuno, cuales
son los clientes que NO han realizado ningun pedido. O como se podria implementar con powerv Pivot.
2. El codigo generado por el lenguaje M se puede copiar y pegar en otro libro que tenga habilitado el Power Query ? Algo asi como exportar la secuencia de tareas.

Nuevamente, muchas gracias por enseñar a la comunidad

Edwin

Muchas gracias por compartir el conocimiento.
Tengo un par de inquietudes que deseo expresar.
1. Como se pueden simular relaciones tipo left join con el lenguaje M.
Por ejemplo, para detectar en la conocida base de datos Neptuno, cuales
son los clientes que NO han realizado ningun pedido. O como se podria implementar con powerv Pivot.
2. El codigo generado por el lenguaje M se puede copiar y pegar en otro libro que tenga habilitado el Power Query ? Algo asi como exportar la secuencia de tareas.

Nuevamente, muchas gracias por enseñar a la comunidad

Roberto Soriano

Muy interesante power query y lenguaje M.

Christian Vaca

Como puedo incluir en un campo de la tabla importada a power query en nombre de la consulta, Qué formula utilizar?? En excel es por ejemplo =DERECHA(CELDA(«nombrearchivo»);6)
Me podria ayudar alguien por favor

MIGUEL

Muy interesante el articulo gracias. Les comento que soy nuevo en esto de Power Query, me encuentro con un caso que no se como resolverlo, les comento que tengo una tabla de ventas en donde se registra el código de la venta, el número de cuota, y el valor a cobrar por esa cuota. En otra tabla tengo los cobros total realizados sobre una venta y tiene las siguientes columnas código de la venta, valor total cobrado.
Estoy tratando de obtener una información que me permita saber de una determinada codigo de venta cuales son las cuotas afectadas, es decir si una venta tengo 4 cuotas de 100 dolares, y el cobro total de la deuda es de 300 dolares, el resulytado me deberia mostrar que el saldo de la cuota 1,2,3 estan en 0 y solo la cuarta cuota tiene un saldo de 100.

Gracias por su valiosa ayuda

Roberto Soriano

Muy interesante power query y lenguaje M.

osiel

Genial! MIGUEL.. WOW no sabia el desplegado de las funciones de PQ #shared. es genial. muchas gracias! te envio un fuerte abrazo. sls a Ken.