lunes, marzo 28, 2016

Ocultar filtros en todas las tablas dinámicas de una hoja

Gustavo, colega en el trabajo, es uno de esos tipos que pueden causarte un otoño capilar prematuro con sus observaciones. En particular porque siempre le encuentra la quinta pata al gato, siempre habrá algún pero.
Así que cuando vio mi macro para mostrar u ocultar filtros de tablas dinámicas, no pudo menos que decirme: "muy bien, ¿pero si hay más de una tabla dinámica en la hoja?
Es bastante común que haya más de una tabla dinámica en una hoja por lo que tendremos que dar una solución al planteo de Gustavo.

Modificar la macro propuesta en la nota anterior para que muestre u oculte todos los filtros de todas las tablas dinámicas en la hoja activa es sencillo. Supongamos esta hoja con dos tablas dinámicas




Para ocultar los filtros de las dos tablas a la vez usamos este código



 Sub ocultar_Filtros_all()  
   Dim ptbl As PivotTable  
   Dim pfld As PivotField  
   For Each ptbl In ActiveSheet.PivotTables  
    For Each pfld In ptbl.PivotFields  
      pfld.EnableItemSelection = False  
    Next pfld  
   Next ptbl  
 End Sub  

Para restaurar los filtros usamos este otro código



 Sub mostrar_Filtros_all()  
 Dim ptbl As PivotTable  
 Dim pfld As PivotField  
   For Each ptbl In ActiveSheet.PivotTables  
    For Each pfld In ptbl.PivotFields  
      pfld.EnableItemSelection = True  
    Next pfld  
   Next ptbl  
 End Sub  

Para que nuestra macro sea realmente útil tenemos que agregar la posibilidad de seleccionar que tablas queremos modificar, lo cual será el tema del próximo post.




miércoles, marzo 23, 2016

Consolidar archivos con Power Query - el caso ".tsv"

En la nota anterior mostramos como consolidar datos de varios archivos .csv (comma separated values) con Power Query. Estos son archivos de texto donde los campos están separados por comas o puntos y comas. Existen también archivos de texto .tsv donde, como en los archivos .csv, cada registro de la tabla es una línea del archivo de texto y cada campo de un registro se separa del siguiente por un carácter de tabulación - que es una forma del formato más general valores delimitador separados.

TSV es un formato de archivo simple ampliamente difundido que a menudo se utiliza para mover datos tabulares entre los diferentes programas informáticos que soportan este formato. Por ejemplo, un archivo de TSV puede ser utilizado para transferir información de un programa de base de datos para una hoja de cálculo. Y este es el caso de  un colega que después de haber leído mi post, vino a consultarme cómo hacer lo mismo con archivos .tsv.

La cuestión es que Power Query no cuenta con una función Tsv.Document para extraer datos de este tipo de archivos y la función Csv.Document, que mostramos en el post mencionado, si bien cuenta con un parámetro para indicar el separador a usar ([Delimiter]), pero todos mis intentos de indicar la tabulación como separador (#"tab", "#tab", #(Tab), etc.) terminaron en rotundos fracasos.

La solución fue importar los archivos al editor del Power Query, tal como hicimos con los archivos csv, agregar una única columna con los datos y luego separar esta columna con la funcionalidad Split Column del menú de Power Query.

Veamos el proceso. Después de seleccionar la carpeta que contiene los archivos a consolidar y abrirla en la ventana del Power Query (ver el proceso en el post anterior), agregamos la columa "Datos" creada con la fórmula =Csv.Document([Content])


Esta fórmula crea una columna que expandimos apretando la doble flecha en el encabezado

con este resultado


Eliminamos las columnas Content y Name con lo que nos queda una única columna con todos los datos. La funcionalidad Split Column by Delimiter si tiene el valor Tab como separador


con este resultado

Todo lo que nos queda por hacer es promover la primer fila a los encabezados



y transferir la tabla a una hoja de Excel o crear una conexión a la consulta


lunes, marzo 21, 2016

Consolidar datos de archivos .csv con Power Query

Este post es la continuación del anterior sobre la consolidación de datos con Power Query.
La misma técnica puede aplicarse si los archivos a integrar están en formato .csv (texto, comma separated values).
La "magia" del proceso son las funciones de extracción de datos del Power Query (el lenguaje "M"). Una reseña sucinta sobre las funciones del Power Query puede verse en esta página. Una lista detallada de toda las funciones "M" (el lenguaje del Power Query) puede obtenerse aquí.

En este post vamos a reveer los pasos para integrar datos de cuadernos guardados en una misma carpeta. Como en el caso anterior, partimos de la base que las tablas de datos en los distintos cuadernos tienen la misma estructura.

Como en el caso de los archivos .xlsx, usamos la opción From Files - From Folders del Power Query


Como en el caso anterior, recibimos una tabla con una fila por cada archivo de la carpeta seleccionada


Eliminamos todas las columnas excepto Content y Name y hacemos el "pase mágico": creamos una columna personalizada con la fórmula =Csv.Document([Content]), y recordemos que a diferencia de las funciones de Excel, debemos respetar las mayúsculas



La fórmula creará una nueva columna (eso es lo que las funciones M hacen)

que procedermos a expandir apretando al doble flecha en el ángulo derecho del encabezamiento de la columna

con este resultado


Lo último que nos queda por hacer es utilizar la primer fila de la tabla como encabezamiento de las columnas


Podemos eliminar la columna "Column1" (Binary) que ya no cumple ninguna función. La segunda columna contienen el nombre del archivo de donde se extrajo la fila. También esta columna puede eliminarse y si queremos dejarla para identificar el origen de los datos, debemos cambiar el nombre.

Finalmente, pasamos la tabla a una hoja del cuaderno Excel o creamos una conexión a la consulta.

Este video muestra todo el proceso