lunes, septiembre 30, 2019

Eliminar saltos de línea en celdas de Excel

Excel permite dividir textos ingresado a una celda en varias líneas usando Alt+Enter para separar las entradas. Por ejemplo


Las celdas A2 y A3 contienen cada una seis nombres.Esta técnica, que puede ser visualmente conveniente, genera muchos problemas cuando queramos usar estos datos. Por ejemplo si queremos asignar a cada nombre alguna característica como edad. Para poder hacerlo tenemos que deshacer los saltos de línea para tener cada nombre en  una celda separada.

En este post voy a mostrar como hacerlo con las herramientas de Excel Clásico y como hacerlo con Power Query.

jueves, septiembre 26, 2019

Nuevo servicio de suscripción

Durante varios años he utilizado el servicio de suscripción de Feedburner (¡gracias a los casi 2000 suscriptores activos!).
A pesar de los buenos servicios prestados, Google parece haber abandonado a Feedburner a su suerte por lo cual he decidido empezar a utilizar los servicios de SpecificFeeds.

Para quien no se haya suscrito en el pasado, puede usar el enlace de esta nota o el formulario en la columna derecha del blog. Al hacerlo se ingresa en esta página donde puede elegirse el idioma Español para la interfaz


He exportado la lista de todos los suscriptores activos de manera que seguirán recibiendo el feed con los nuevas publicaciones.

En caso de que alguien deje de recibir el feed le agradeceré me lo informe por mail privado o con un comentario en este post.

Buen fin de semana a todos y todas

Pd.: me niego rotundamente a aceptar el uso "neutro", sin especificar género, que tan de moda parece estar (todes o todxs, en lugar de todos o todas). Si bien puedo entender la idea que el uso del masculino para referirse a ambos géneros sea tal vez producto de un sentimiento de superioridad machista, la forma "neutra" no genera igualdad. La igualdad se hace en la vida real, pagando salarios igualitarios, dando igualdad de oportunidades y, por sobre todo, educando a los jóvenes (palabra que curiosamente tiene una única forma para ambos géneros).

Pd a la Pd: habrá quien acote que hoy ya hablamos de más de dos géneros (a diferencia de dos sexos, como me acota una de mis hijas).

Muestra aleatoria con Power Query

Para el ejemplo del post "BUSCARV o Combinar consultas" necesitaba crear una tabla con 10 productos elegidos aleatoriamente de una lista con más de 70 items. En Excel Clásico resolvemos la cuestión usando la función ALEATORIO() o la función ALEATORIO.ENTRE():

  1. asignamos un número aleatorio a cada fila, 
  2. cancelamos las fórmulas con Copiar--Pegar--Solo valores, 
  3. ordenamos la tabla en forma ascendente o descendente 
  4. elegimos las primeras 10 filas (o el número de filas que deseemos). 

¿Cómo lo haríamos con Power Query?  Contamos con la función Number.Random pero al usarla veremos que suceden cosas extrañas.

Veamos este ejemplo

Partimos de la lista completa, y creamos una consulta

lunes, septiembre 23, 2019

BUSCARV o Combinar consultas del Power Query

Un comentario a mi post Cálculo de comisiones por tramos trajo a mi memoria una charla que mantuve con una persona del departamento contable. Nuestro contador en cuestión estaba interesado en escuchar sobre la "nueva herramienta" (para él), Power Query, y cómo podría ayudarle en sus tareas cotidianas. Mi interlocutor cerró mi breve exposición sobre la utilidad y las capacidades de Power Query con la siguiente sentencia: "muy interesante pero yo no tengo necesidad de esa herramienta".
Como conozco las tareas del contador no me cabe duda de que Power Query es una herramienta indispensable para él, en términos de ahorro de tiempo y errores. Pero si algo he aprendido con los años es no entrar en discusiones estériles.Yendo al grano de la cuestión d este post: si muchas tareas se pueden hacer con BUSCARV, ¿por qué usar Combinar consultas del Power Query en su lugar?
Muchas tareas que realizamos con Power Query pueden hacerse, sin dudas, con Excel Clásico y para quien lleva mucho tiempo trabajando con Excel Clásico la inversión en tiempo y esfuerzo para aprender Power Query puede parecer infundada.
En esta nota voy a intentar exponer los criterios a tomar en cuenta al decidir si haremos una tarea con Excel Clásico o con Power Query.

miércoles, septiembre 18, 2019

Ampliando las posibilidades de Agrupar en Power Query - segunda nota

En la nota anterior vimos un ejemplo de como ampliar las posibilidades de Agrupar por editando el código en el Editor Avanzado.
Al final del post señalé que el ejemplo tenía una debilidad notoria: la falta de dinamismo. La cantidad de productos a mostrar es una constante, de manera que si queremos mostrar una cantidad distinta de productos tendremos que editar el código y cambiar manualmente los valores donde sea necesario. Al hacerlo también nos exponemos a la posibilidad de introducir errores en el código.
En este post voy a mostrar como convertir el modelo de la nota anterior en un modelo dinámico y también como hacer cambios en el código generado automáticamente para evitar fallas o errores en la actualización de datos.

Abrimos la ventana del Editor Avanzado para ver el código de la consulta

1:  let  
2:    Origen = Excel.CurrentWorkbook(){[Name="Invoices"]}[Content],  
3:    #"Filas ordenadas" = Table.Sort(Origen,  
4:      {{"País", Order.Ascending},   
5:      {"Ventas", Order.Descending}}  
6:      ),  
7:    #"Filas agrupadas" = Table.Group(#"Filas ordenadas", {"País"}, {  
8:      {"Total Ventas", each List.Sum([Ventas]), type number},  
9:      {"Producto mas vendido", each List.FirstN([Producto],2)},  
10:      {"Total Producto", each List.MaxN([Ventas],2)}  
11:      }),  
12:    #"Valores extraídos" = Table.TransformColumns(#"Filas agrupadas",   
13:      {"Producto mas vendido",   
14:        each Text.Combine(List.Transform(_, Text.From), ";"),   
15:          type text}),  
16:    #"Valores extraídos1" = Table.TransformColumns(#"Valores extraídos",   
17:      {"Total Producto", each Text.Combine(List.Transform(_, Text.From), ";"),   
18:          type text}),  
19:    #"Dividir columna por delimitador" = Table.SplitColumn(#"Valores extraídos1",   
20:      "Producto mas vendido", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv),   
21:        {"Producto mas vendido.1", "Producto mas vendido.2"}),  
22:    #"Dividir columna por delimitador1" = Table.SplitColumn(#"Dividir columna por delimitador",   
23:      "Total Producto", Splitter.SplitTextByDelimiter(";", QuoteStyle.Csv),   
24:        {"Total Producto.1", "Total Producto.2"}),  
25:    #"Columnas quitadas" = Table.RemoveColumns(#"Dividir columna por delimitador1",{"Total Ventas"}),  
26:    #"Tipo cambiado" = Table.TransformColumnTypes(#"Columnas quitadas",{{"Total Producto.2", type number}})  
27:  in  
28:    #"Tipo cambiado"  

Para que el código sea más legible he dividido los distintos pasos aplicados en varias líneas. Para hacerlo ubicamos el marcador en la posición requerida y apretamos Enter; usando la tecla Tab podemos separar la línea del margen.

Veamos ahora cómo convertir la consulta de la nota anterior en un modelo dinámico

lunes, septiembre 16, 2019

Ampliando las posibilidades de Agrupar en Power Query - primera nota

En varios posts he mostrado las posibilidades de Agrupar por de Power Query (por ejemplo, en este post). Como con muchas otras funcionalidades, Power Query nos permite realizar la agrupación de datos usando exclusivamente la interfaz del usuario. Es decir, no tenemos que conocer la sintaxis del idioma M (el motor de Power Query) ni las funciones aplicadas para lograr las transformaciones.
En este ejemplo disponemos de una tabla de ventas por países y productos

de la cual podemos obtener un informe que muestra el total de ventas y el valor de la venta promedio de cada país aplicando Agrupar por de esta manera


con este resultado




En este post voy a mostrar como extender las posibilidades de Agrupar por más allá de las ofrecidas en la interfaz del usuario editando manualmente parte del código creado automáticamente al aplicar los pasos.

Una aclaración: como siempre en Excel, hay más de una manera de resolver el ejercicio que desarrollaré a continuación; por ejemplo con Tablas Dinámicas. El objetivo de este post es mostrar como podemos extender las posibilidades de Power Query con unos pocos conocimientos del lenguaje M, un poco de intuición y otro poco de osadía.

miércoles, septiembre 11, 2019

Coincidencia numérica aproximada en Power Query

En la nota anterior exploramos las posibilidades de combinar consultas en Power Query con coincidencia aproximada. Además de exponer algún problema potencial que puede surgir, señalamos que no se puede usar coincidencia aproximada en campos numéricos.

Supongamos el siguiente ejemplo. Tenemos una tabla de descuentos a clientes en función del monto de sus compras y un segunda tabla con las compras de los clientes


Calcular el porcentaje que le corresponde a cada cliente es una tarea sencilla con Excel Clásico; usamos BUSCARV con el cuarto parámetro en blanco (o con el valor 1) para una búsqueda aproximada


Lo único que tenemos que asegurarnos es que la tabla de descuentos (tbl_Descuentos) esté ordenada de menor a mayor.

¿Como lo haríamos con Power Query?

lunes, septiembre 09, 2019

Coincidencia aproximada en combinación de consultas

En el pasado he mostrado las ventajas de usar Combinar Consultas del Power Query en lugar de nuestra vieja y querida BUSCARV (los invito ver la serie: primera nota, segunda nota, tercer nota y cuarta nota).
Sin embargo, hasta hace un tiempo atrás (en realidad casi un año) Combinar Consultas presentaba una desventaja frente a BUSCARV: en Power Query las coincidencias tenían que ser exactas mientras que en BUSCARV tenemos también la posibilidad de búsqueda aproximada.
Hace unos meses atrás Microsoft introdujo la posibilidad de combinar consultas en Power Query con coincidencias aproximadas.
En este post voy a mostrar como utilizar esta nueva posibilidad (y también los peligros que implica y donde no podemos utilizarla).

lunes, septiembre 02, 2019

Cálculo de comisiones por tramos

En este post vamos a tratar el segundo caso que mencioné en el anterior sobre lógica condicional con Power Query. La misión es calcular las comisiones que les corresponden a un equipo de vendedores. Estas comisiones no se calculan por el total vendido sino por tramos.
En nuestro ejemplo los vendedores se hacer acreedores a una comisión del 5% por los primeros 20,000 (digamos para el caso "pesos"), 7.5% para el tramo que va de los 20,000 a 50,000; 9% para el tramo de 50,000 a 100,000 y un 10% para el tramo por encima de los 100,000.
De esta manera por ventas de 60,000 pesos el vendedor recibirá 4,150 pesos de comisión


Vamos a resolver este cálculo con Power Query usando solamente la interfaz de usuario y con algunas fórmulas condicionales.

Están invitados a descargar el archivo para seguir los pasos del ejercicio.

Como siempre empezamos por crear una conexión a la tabla de ventas