jueves, octubre 17, 2019

Totales acumulados con Power Query

No me considero un profesional experto en Excel y aledaños (Power Query, PowerPivot), pero si un usuario experimentado. Por ese motivo las notas de este blog reflejan más mi trabajo cotidiano con esta fantástica herramienta que un enfoque técnico-profesional.

Una vez dicho ésto, vayamos al punto de la nota: en algún momento de nuestra vida tuvimos o tendremos que calcular totales o saldos acumulados ("running totals" en inglés).

En Excel Clásico (Excel Clásico = Excel sin Power Query y PowerPivot) sabemos hacerlo con fórmulas o, mejor aún, con tablas dinámicas. ¿Por qué, entonces, hacerlo con Power Query? Porque puede ser parte de una serie de transformaciones que estamos haciendo dentro de la consulta o porque, sencillamente, nos resulte más eficiente.

Sea cual sea el motivo vamos a ver cómo hacerlo en el entorno del Power Query.

Supongamos esta tabla donde queremos calcular como se van acumulando las ventas de mes en mes

Como siempre el primer paso es crear la consulta


En PASOS APLICADOS vemos que PQ ha creado automáticamente el paso Tipo Cambiado. Por lo general es recomendable eliminar este paso pero en esta caso lo vamos a dejar.

El siguiente paso es agregar una columna Índice con base 1 (en Power Query la base es 0, es decir, el primer elemento de una colección recibe el número 0; en este ejemplo queremos que el primer elemento reciba el número 1)

Esta nueva columna Índice nos servirá para ir acumulando la suma de los elementos en [Valor].

A diferencia de Excel Clásico, en Power Query no podemos hacer cálculos a nivel de "celda" usando la interfaz de usuario. Para hacerlo tendremos que echar manos a la funciones M.
Estas funciones están divididas en grupos de acuerdo a los objetos sobre los cuales actúan (Table functions, List functions, Time functions, etc.). En nuestro caso tendemos que fijarnos en las funciones List (en Power Query List es como un sinónimo de Columna).
La función List.Sum nos permite sumar todos los elementos de la columna y nosotros queremos ir sumándolos parcialmente. Para eso vamos a recurrir a la función List.FirstN para indicar cuantos elementos, empezando por el primero, queremos sumar. Como hacemos en Excel Clásico, también aquí "anidamos" las funciones.
Agregamos una columna personalizada con esta fórmula
List.Sum(List.FirstN([Valor],[Índice]))

Al apretar Aceptar veremos que obtenemos una columna con el valor Error. Si hacemos un clic sobre Error veremos este mensaje


No muy explicativo. Para solucionar esto tenemos que indicarle a Power Query en que tabla se encuentra el campo [Valor].  Contrariamente a la intuición, la tabla es la creada en el paso anterior a la aplicación de la función, es decir #"Índice agregado".


Para poder trabajar más cómodamente vamos a cambiar el nombre del paso a algo abreviado, IndAgr, con un clic sobre el nombre del paso y Cambiar nombre.
Ahora editamos el paso Personalizada agregada lo que podemos hacer de tres maneras: con un clic en el engranaje a la derecha del paso que abre el formulario de columna personalizada; directamente en la barra de las fórmulas o en el editor avanzado.
En este ejemplo hacemos un clic en el engranaje para abrir el formulario y en la fórmula anteponemos IndAgr a [Valor]

Apretamos Aceptar y Aleluya!


Finalmente podemos eliminar la columna Índice y cargar la consulta en una hoja de Excel.


Por supuesto, hay más de una forma de obtener el resultado. En el blog de Ken Puls pueden consultar estas notas:



6 comentarios:

  1. Gracias Maestro, seguro que se puede hacer un TAM de alguna manera, es decir, quitamos el enero del año 0 y sumamos el del año 1, cuando llega febrero sumar el del año 1 y restar febrero del año 0... actualmente lo hago con formulas y me pica la curiosidad de como seria con powerqry. Estos TAM me van muy bien para ver la evolución de ventas interanuales.
    Saludos

    ResponderBorrar
    Respuestas
    1. Perdonando la ignorancia, ¿qué es TAM?.
      Seguramente se puede hacer. Sería bueno que me envíes el archivo o un ejemplo.

      Borrar
    2. Buenos días Jorge, te envio una pagina donde lo explican muy bien

      https://www.sage.com/es-es/blog/analiza-la-evolucion-de-las-ventas-con-el-grafico-z/

      TAM= TOTAL ANUAL MOVIL

      En mi caso solo utilizo el grafico naranja para analizar las ventas desde el 2005 hasta la fecha de hoy, va muy bien para ver que tendencia tienen las ventas.

      Saludos maestro.

      Borrar
    3. Le voy a dar un vistazo durante el fin de semana y posiblemente publique una solución con Power Query.

      Borrar
    4. Dale un vistazo a este post.
      AL final del post hay un enlace a la nota que muestra como hacerlo con PowerPivot.

      Borrar
  2. Mas que usuario experimentado, te diría que eres un experto de tomo y lomo

    ResponderBorrar

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