jueves, 26 de agosto de 2021

Power Query: Consigue el Tamaño de Carpetas

Días atrás tuve la necesidad de 'limpiar' un poco mi disco duro de almacenamiento... estaba marcado en rojo, y el espacio disponible evitaba incluso una sencilla operación de desfragmentación...
Obviamente el Explorador de archivos de Windows NO MUESTRA el tamaño de las carpetas, salvo yendo una por una mostrando sus propiedades, lo cual es largo y tedioso (sobre todo cuando las estructuras de carpetas-subcarpetas es larga y profunda).
Así pues, aplicativos de terceros aparte, me acordé de una posibilidad que ofrece Power Query respecto a los Atributos de los archivos: el tamaño (Size) de los ficheros.

Y en esto consiste la entrada de hoy. Veremos como con unos sencillos pasos desarrollados en una consulta de Power Query, podemos analizar el tamaño de nuestras carpetas.... para posteriores acciones, como eliminar o borrar el contenido de algunas de ellas...
Power Query: Consigue el Tamaño de Carpetas


Por tanto, el primer paso consistirá en navegar en un libro vacío de Excel hasta la ficha Datos > grupo Obtener y transformar > Obtener datos > Desde un archivo > Desde una carpeta.
Se abrirá una ventana donde indicaremos cuál es la ruta a analizar (desde una carpeta en concreto, a todo un disco duro raiz).
En mi ejemplo analizaré una carpeta en concreto:
F:\excelforo\PowerAutomate

Al Aceptar veremos una pantalla donde se listan todos los ficheros contenidos en todas las carpetas y subcarpetas dependientes de la anterior indicada.
Power Query: Consigue el Tamaño de Carpetas

Incluso antes de presionar 'Transformar datos' ya previsualizamos la columna sobre la que trabajaremos: Atributtes
Al hacer clic en 'Transformar datos' accederemos al editor de consultas de Power Query donde grabaremos los siguientes pasos:
Paso uno: Expandir la columna 'Attributes' y marcar únicamente 'Size'
Power Query: Consigue el Tamaño de Carpetas

Paso dos: Quitamos otras columnas excepto la anterior-Size- y la columna que muestra la ruta de la carpeta -Folder path-
Power Query: Consigue el Tamaño de Carpetas

Paso tres: Duplicamos la columna anterior-Size- y aprovechamos para renombrarla como 'bytes' (que es la unidad de medida mostrada).
Power Query: Consigue el Tamaño de Carpetas

Paso cuatro: Transformamos la columna de 'Size' dividiéndola entre 1.048.576 (=1024 x 1024). Resultado de pasar de bytes a Mb.
Power Query: Consigue el Tamaño de Carpetas

Paso cinco: Agrupamos por la columna 'Folder path' y resumimos sumando la columna Size y la de bytes.
Power Query: Consigue el Tamaño de Carpetas

Paso seis: Duplicamos la columna 'Folder path'.
Power Query: Consigue el Tamaño de Carpetas

Paso siete: Dividimos la columna 'Folder path' por el delimitador o separador \.
Esto nos permitirá, posteriormente al trabajar con una tabla dinámica sobre la consulta generada, gestionar la jerarquía de la estructura de carpetas y subcarpetas.
Power Query: Consigue el Tamaño de Carpetas

Paso ocho y último: Reordenamos las posiciones de las columnas...

El código generado con los pasos anteriores sería:
let
    Origen = Folder.Files("F:\excelforo\PowerAutomate"),
    Se_expandió_Attributes = Table.ExpandRecordColumn(Origen, "Attributes", {"Size"}, {"Attributes.Size"}),
    Otras_columnas_quitadas = Table.SelectColumns(Se_expandió_Attributes,{"Attributes.Size", "Folder Path"}),
    Columna_duplicada1 = Table.DuplicateColumn(Otras_columnas_quitadas, "Attributes.Size", "bytes"),
    Columna_dividida = Table.TransformColumns(Columna_duplicada1, {{"Attributes.Size", each _ / 1048576, type number}}),
    Filas_agrupadas = Table.Group(Columna_dividida, {"Folder Path"}, {{"Mb", each List.Sum([Attributes.Size]), type number},{"bytes", each List.Sum([bytes]), type number}}),
    Columna_duplicada = Table.DuplicateColumn(Filas_agrupadas, "Folder Path", "Folder Path."),
    Dividir_columna_por_delimitador = Table.SplitColumn(Columna_duplicada, "Folder Path", Splitter.SplitTextByDelimiter("\", QuoteStyle.Csv), {"Folder Path.1", "Folder Path.2", "Folder Path.3", "Folder Path.4", "Folder Path.5", "Folder Path.6", "Folder Path.7"}),
    Columnas_reordenadas = Table.ReorderColumns(Dividir_columna_por_delimitador,{"Folder Path.", "Folder Path.1", "Folder Path.2", "Folder Path.3", "Folder Path.4", "Folder Path.5", "Folder Path.6", "Folder Path.7", "Mb", "bytes"})
in
    Columnas_reordenadas

El resultado...
Power Query: Consigue el Tamaño de Carpetas

La tabla dinámica se ha generado a partir del resultado de la consulta, llevando los campos:
-Área de filtros: Campos Folder Path.1, Folder Path.2
-Área de filas: Campos Folder Path.3, Folder Path.4
-Área de valores: Campos Mb, bytes

Se puede comprobar con las propiedades extraídas del explorador de Windows que la cantidades corresponden...
Solo quedará tomar las decisiones de qué borrar y que mantener... pero eso es otra historia.

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.